263 lines
10 KiB
Plaintext
263 lines
10 KiB
Plaintext
@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
|
|
|
|
<PageTitle>PCRB @planNumber</PageTitle>
|
|
|
|
<MudPaper Class="p-2 m-2 d-flex flex-row justify-content-between">
|
|
<MudIconButton Icon="@Icons.Material.Filled.ChevronLeft"
|
|
Variant="Variant.Outlined"
|
|
Color="Color.Dark"
|
|
OnClick="@ReturnToAllPcrbs"
|
|
Size="Size.Large" />
|
|
<MudText Typo="Typo.h3" Align="Align.Center">PCRB @planNumber</MudText>
|
|
<MudPaper Height="100%" Width="0.1%" Square="true" />
|
|
</MudPaper>
|
|
|
|
@if (pcrb is not null) {
|
|
<MudTimeline Class="mt-2 pt-2" TimelineOrientation="TimelineOrientation.Horizontal"
|
|
TimelinePosition="TimelinePosition.Bottom">
|
|
@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];
|
|
|
|
<MudTimelineItem Color="@color" Variant="Variant.Filled">
|
|
<MudText Align="Align.Center" Color="@color">@stageName</MudText>
|
|
</MudTimelineItem>
|
|
}
|
|
</MudTimeline>
|
|
|
|
bool pcrbIsSubmitted = pcrb.InsertTimeStamp > DateTimeUtilities.MIN_DT;
|
|
bool userIsOriginator = pcrb.OwnerID == authStateProvider.CurrentUser?.UserID;
|
|
bool userIsAdmin = authStateProvider.CurrentUser is null ? false : authStateProvider.CurrentUser.IsAdmin;
|
|
|
|
<MudPaper Outlined="true"
|
|
Class="p-2 m-2 d-flex flex-wrap gap-3 justify-content-center align-content-center"
|
|
Elevation="10">
|
|
@if (!pcrbIsSubmitted && !string.IsNullOrWhiteSpace(pcrb.Title)) {
|
|
<MudButton Variant="Variant.Filled"
|
|
Color="Color.Tertiary"
|
|
OnClick=SavePCRB>
|
|
@if (saveInProcess) {
|
|
<MudProgressCircular Class="m-1" Size="Size.Small" Indeterminate="true" />
|
|
<MudText>Processing</MudText>
|
|
} else {
|
|
<MudText>Save</MudText>
|
|
}
|
|
</MudButton>
|
|
}
|
|
</MudPaper>
|
|
|
|
@if (!pcrbIsSubmitted && GetIncompleteFields().Count() > 0) {
|
|
IEnumerable<string> incompleteFields = GetIncompleteFields();
|
|
StringBuilder errorBuilder = new();
|
|
errorBuilder.Append($"Incomplete fields: {incompleteFields.First()}");
|
|
for (int i = 1; i < incompleteFields.Count(); i++) {
|
|
errorBuilder.Append($", {incompleteFields.ElementAt(i)}");
|
|
}
|
|
|
|
<MudPaper Outlined Class="p-2 m-2">
|
|
<MudText Align="Align.Center" Color="Color.Secondary" Typo="Typo.h6">
|
|
@errorBuilder.ToString()
|
|
</MudText>
|
|
</MudPaper>
|
|
}
|
|
|
|
<MudPaper Outlined="true"
|
|
Class="p-2 m-2 d-flex flex-wrap gap-3 justify-content-center align-content-start"
|
|
Elevation="10">
|
|
<MudTextField @bind-Value=pcrb.PlanNumber
|
|
Text="@pcrb.PlanNumber.ToString()"
|
|
T="int"
|
|
Disabled="true"
|
|
Label="Plan#"
|
|
Required
|
|
Variant="Variant.Outlined" />
|
|
<MudTextField @bind-Value=pcrb.Title
|
|
Text="@pcrb.Title"
|
|
Disabled="@(pcrbIsSubmitted)"
|
|
T="string"
|
|
AutoGrow
|
|
AutoFocus
|
|
Immediate
|
|
Clearable
|
|
Required
|
|
Variant="Variant.Outlined"
|
|
Label="Title" />
|
|
<MudSelect T="User"
|
|
Label="Originator"
|
|
Variant="Variant.Outlined"
|
|
Required
|
|
Clearable
|
|
AnchorOrigin="Origin.BottomCenter"
|
|
ToStringFunc="@UserToNameConverter"
|
|
Disabled=@(pcrbIsSubmitted)
|
|
@bind-Value=@selectedOwner>
|
|
@foreach (User user in allActiveUsers.OrderBy(u => u.LastName)) {
|
|
<MudSelectItem T="User" Value="@(user)" />
|
|
}
|
|
</MudSelect>
|
|
<MudSelect T="string"
|
|
Variant="Variant.Outlined"
|
|
Required
|
|
Clearable
|
|
AnchorOrigin="Origin.BottomCenter"
|
|
Disabled="@pcrbIsSubmitted"
|
|
@bind-Value="@pcrb.ChangeLevel"
|
|
Text="@pcrb.ChangeLevel"
|
|
Label="Change Level">
|
|
<MudSelectItem Value="@("Global")" />
|
|
<MudSelectItem Value="@("Other Site + Mesa")" />
|
|
<MudSelectItem Value="@("Mesa")" />
|
|
</MudSelect>
|
|
<MudCheckBox Disabled="@pcrbIsSubmitted"
|
|
Color="Color.Tertiary"
|
|
@bind-Value=pcrb.IsITAR
|
|
Label="Export Controlled"
|
|
LabelPosition="LabelPosition.Start" />
|
|
<MudTextField Disabled="true"
|
|
T="string"
|
|
Value="@DateTimeUtilities.GetDateAsStringMinDefault(pcrb.InsertTimeStamp)"
|
|
Label="Submit Date"
|
|
Variant="Variant.Outlined" />
|
|
<MudTextField Disabled="true"
|
|
T="string"
|
|
Value="@DateTimeUtilities.GetDateAsStringMinDefault(pcrb.LastUpdateDate)"
|
|
Label="Last Update"
|
|
Variant="Variant.Outlined" />
|
|
<MudTextField @bind-Value=pcrb.ChangeDescription
|
|
Text="@pcrb.ChangeDescription"
|
|
Disabled="@(pcrbIsSubmitted)"
|
|
T="string"
|
|
AutoGrow
|
|
Immediate
|
|
Clearable
|
|
Required
|
|
Variant="Variant.Outlined"
|
|
Label="Description" />
|
|
<MudTextField @bind-Value=pcrb.ReasonForChange
|
|
Text="@pcrb.ReasonForChange"
|
|
Disabled="@(pcrbIsSubmitted)"
|
|
T="string"
|
|
AutoGrow
|
|
Immediate
|
|
Clearable
|
|
Required
|
|
Variant="Variant.Outlined"
|
|
Label="Reason For Change" />
|
|
</MudPaper>
|
|
}
|
|
|
|
@code {
|
|
[Parameter]
|
|
public string planNumber { get; set; } = "";
|
|
|
|
private int planNumberInt = 0;
|
|
private PCRB pcrb = null;
|
|
|
|
private IEnumerable<User> allActiveUsers = new List<User>();
|
|
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<User, string> UserToNameConverter = u => u is null ? string.Empty : u.GetFullName();
|
|
|
|
private void ReturnToAllPcrbs() {
|
|
cache.Set("redirectUrl", $"pcrb/all");
|
|
navigationManager.NavigateTo("pcrb/all");
|
|
}
|
|
|
|
private IEnumerable<string> GetIncompleteFields() {
|
|
List<string> 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);
|
|
}
|
|
}
|
|
} |