@page "/pcrb/{planNumber}"
@page "/pcrb/new"
@using System.Text
@inject ISnackbar snackbar
@inject IPCRBService pcrbService
@inject IUserService userService
@inject IMemoryCache cache
@inject NavigationManager navigationManager
@inject MesaFabApprovalAuthStateProvider authStateProvider
PCRB @planNumber
PCRB @planNumber
@if (pcrb is not null) {
@for (int i = 0; i < PCRB.Stages.Length; i++) {
Color color;
if (pcrb.CurrentStep > i || pcrb.CurrentStep == (PCRB.Stages.Length - 1)) {
color = Color.Success;
} else if (pcrb.CurrentStep == i) {
color = Color.Info;
} else {
color = Color.Dark;
}
string stageName = PCRB.Stages[i];
@stageName
}
bool pcrbIsSubmitted = pcrb.InsertTimeStamp > DateTimeUtilities.MIN_DT;
bool userIsOriginator = pcrb.OwnerID == authStateProvider.CurrentUser?.UserID;
bool userIsAdmin = authStateProvider.CurrentUser is null ? false : authStateProvider.CurrentUser.IsAdmin;
@if (!pcrbIsSubmitted && !string.IsNullOrWhiteSpace(pcrb.Title)) {
@if (saveInProcess) {
Processing
} else {
Save
}
}
@if (!pcrbIsSubmitted && GetIncompleteFields().Count() > 0) {
IEnumerable incompleteFields = GetIncompleteFields();
StringBuilder errorBuilder = new();
errorBuilder.Append($"Incomplete fields: {incompleteFields.First()}");
for (int i = 1; i < incompleteFields.Count(); i++) {
errorBuilder.Append($", {incompleteFields.ElementAt(i)}");
}
@errorBuilder.ToString()
}
@foreach (User user in allActiveUsers.OrderBy(u => u.LastName)) {
}
}
@code {
[Parameter]
public string planNumber { get; set; } = "";
private int planNumberInt = 0;
private PCRB pcrb = null;
private IEnumerable allActiveUsers = new List();
private User selectedOwner = null;
private bool processing = false;
private bool saveInProcess = false;
protected override async Task OnParametersSetAsync() {
processing = true;
try {
allActiveUsers = await userService.GetAllActiveUsers();
if (!string.IsNullOrWhiteSpace(planNumber) && Int32.TryParse(planNumber, out planNumberInt)) {
pcrb = await pcrbService.GetPCRBByPlanNumber(planNumberInt, false);
if (pcrb.OwnerID > 0) selectedOwner = await userService.GetUserByUserId(pcrb.OwnerID);
} else {
int ownerID = 0;
string ownerName = string.Empty;
if (authStateProvider.CurrentUser is not null) {
selectedOwner = authStateProvider.CurrentUser;
ownerID = authStateProvider.CurrentUser.UserID;
ownerName = authStateProvider.CurrentUser.GetFullName();
}
pcrb = new() {
OwnerID = ownerID,
OwnerName = ownerName,
CurrentStep = 0
};
}
} catch (Exception ex) {
snackbar.Add(ex.Message, Severity.Error);
}
processing = false;
}
private Func UserToNameConverter = u => u is null ? string.Empty : u.GetFullName();
private void ReturnToAllPcrbs() {
cache.Set("redirectUrl", $"pcrb/all");
navigationManager.NavigateTo("pcrb/all");
}
private IEnumerable GetIncompleteFields() {
List incompleteFields = new();
if (string.IsNullOrWhiteSpace(pcrb.Title))
incompleteFields.Add("Title");
if (selectedOwner is null || pcrb.OwnerID <= 0 || string.IsNullOrWhiteSpace(pcrb.OwnerName))
incompleteFields.Add("Originator");
if (string.IsNullOrWhiteSpace(pcrb.ChangeLevel))
incompleteFields.Add("Change Level");
if (string.IsNullOrWhiteSpace(pcrb.ChangeDescription))
incompleteFields.Add("Description");
if (string.IsNullOrWhiteSpace(pcrb.ReasonForChange))
incompleteFields.Add("Reason For Change");
return incompleteFields;
}
private async void SavePCRB() {
saveInProcess = true;
try {
if (pcrb is null) throw new Exception("PCRB cannot be null");
int initialPlanNumber = pcrb.PlanNumber;
pcrb.OwnerID = selectedOwner.UserID;
pcrb.OwnerName = selectedOwner.GetFullName();
if (initialPlanNumber <= 0) {
await pcrbService.CreateNewPCRB(pcrb);
} else {
await pcrbService.UpdatePCRB(pcrb);
}
pcrb = await pcrbService.GetPCRBByTitle(pcrb.Title, true);
cache.Set("redirectUrl", $"pcrb/{pcrb.PlanNumber}");
saveInProcess = false;
StateHasChanged();
snackbar.Add($"PCRB {pcrb.PlanNumber} successfully saved", Severity.Success);
if (initialPlanNumber <= 0)
navigationManager.NavigateTo($"pcrb/{pcrb.PlanNumber}");
} catch (Exception ex) {
saveInProcess = false;
snackbar.Add($"Unable to save PCRB, because {ex.Message}", Severity.Error);
}
}
}