@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); } } }