@inject MesaFabApprovalAuthStateProvider authStateProvider
@inject NavigationManager navigationManager
@inject IPCRBService pcrbService
@inject IUserService userService
@inject ISnackbar snackbar
@if (closedStatus) {
}
@foreach (User user in allActiveUsers.OrderBy(u => u.FirstName)) {
}
@if (saveActionItemInProcess) {
Processing
} else {
Submit
}
Cancel
@code {
[CascadingParameter]
MudDialogInstance MudDialog { get; set; }
[Parameter]
public int planNumber { get; set; } = 0;
[Parameter]
public int step { get; set; } = 0;
[Parameter]
public PCRBActionItem? actionItem { get; set; } = null;
[Parameter]
public IEnumerable allActiveUsers { get; set; }
private string[] errors = { };
private string name = "";
private bool gating = false;
private DateTime? closedDate = DateTimeUtilities.MAX_DT;
private bool closedStatus = false;
private User? responsiblePerson = null;
private bool saveActionItemInProcess = false;
protected override async Task OnParametersSetAsync() {
if (authStateProvider.CurrentUser is null) {
await authStateProvider.Logout();
navigationManager.NavigateTo("login");
}
if (planNumber <= 0) {
snackbar.Add($"{planNumber} is not a valid PCRB plan#", Severity.Error);
MudDialog.Close(DialogResult.Cancel());
}
if (allActiveUsers is null || allActiveUsers.Count() <= 0)
allActiveUsers = await userService.GetAllActiveUsers();
if (actionItem is not null) {
name = actionItem.Name;
gating = actionItem.Gating;
closedStatus = actionItem.ClosedStatus;
closedDate = actionItem.ClosedDate;
if (closedDate.Equals(DateTimeUtilities.MAX_DT)) {
closedDate = DateTime.Now;
}
if (actionItem.ResponsiblePersonID > 0) {
if (actionItem.ResponsiblePerson is not null) responsiblePerson = actionItem.ResponsiblePerson;
else responsiblePerson = await userService.GetUserByUserId(actionItem.ResponsiblePersonID);
actionItem.ResponsiblePerson = responsiblePerson;
}
} else {
name = "";
gating = false;
closedStatus = false;
closedDate = DateTime.Now;
responsiblePerson = null;
}
}
private async Task Save() {
saveActionItemInProcess = true;
try {
if (authStateProvider.CurrentUser is null) {
await authStateProvider.Logout();
navigationManager.NavigateTo("login");
}
if (string.IsNullOrWhiteSpace(name)) throw new Exception("name missing");
if (actionItem is null) {
actionItem = new() {
Name = name,
UploadedBy = authStateProvider.CurrentUser,
UploadedByID = authStateProvider.CurrentUser.UserID,
PlanNumber = planNumber,
Step = step,
Gating = gating,
ClosedStatus = closedStatus,
ResponsiblePerson = responsiblePerson,
ResponsiblePersonID = responsiblePerson.UserID,
ClosedDate = closedDate,
ClosedBy = closedDate is null || closedDate >= DateTimeUtilities.MAX_DT ? null : authStateProvider.CurrentUser,
ClosedByID = closedStatus ? authStateProvider.CurrentUser.UserID : 0
};
if (actionItem.ClosedStatus == false) {
actionItem.ClosedDate = DateTimeUtilities.MAX_DT;
}
await pcrbService.CreateNewActionItem(actionItem);
} else {
actionItem.Name = name;
actionItem.Gating = gating;
actionItem.ClosedStatus = closedStatus;
actionItem.ClosedDate = closedDate;
if (closedStatus) {
actionItem.ClosedBy = authStateProvider.CurrentUser;
actionItem.ClosedByID = authStateProvider.CurrentUser.UserID;
} else {
actionItem.ClosedDate = DateTimeUtilities.MAX_DT;
}
actionItem.ResponsiblePerson = responsiblePerson;
if (responsiblePerson is not null)
actionItem.ResponsiblePersonID = responsiblePerson.UserID;
await pcrbService.UpdateActionItem(actionItem);
}
saveActionItemInProcess = false;
MudDialog.Close(DialogResult.Ok(actionItem));
} catch (Exception ex) {
saveActionItemInProcess = false;
snackbar.Add($"Unable to save action item, because {ex.Message}", Severity.Error);
}
}
private void Cancel() {
MudDialog.Close(DialogResult.Cancel());
}
private Func UserToNameConverter = u => u is null ? string.Empty : u.GetFullName();
private Func AttachmentToFileNameConverter = a => a is null ? "" : a.FileName;
}