Files
monorepo/LCU.WebApps.Internal.DocumentManager/LCU.WebApps.Internal.DocumentManager/Shared/DocumentGridView/ChangeStatusContainer.razor
T
2026-03-13 09:24:21 -05:00

212 lines
8.1 KiB
Plaintext

@using LCU.Library.Internal.DocumentIngestorModels.Models
@inject AuthenticationHelper AuthorizationHelper;
@inject LCU.Library.Internal.Security.Service.IAzureAdAuthorizationService AzureAdAuthorizationService
@inject IModalService Modal;
@inject IDocumentProcessingInfoService DocumentProcessingInfoService;
@inject IToastService ToastService;
@if (processStatusTypes.Any()) {
<CollapsibleComponent ButtonClass="btn btn-link"
HeaderClass="row grid-header-row grid-subheader-row-container processing-header"
ButtonContainerClass="grid-button-container"
IsCollapsed="false">
<HeaderContent>
<RowSubHeader>Update Process Status</RowSubHeader>
</HeaderContent>
<BodyContent>
<Confirm @ref="UpdateStatusConfirmation" ConfirmationChanged="UpdateStatus_Confirm"
ConfirmationMessage=@("Are you sure you want to update the processing status" +
$" from {DocumentProcessingInfo.StatusType} to {SelectedStatus}?")
ConfirmationTitle=@("Update Status")>
</Confirm>
<div class="d-flex grid-row-container-bordered">
<div class="col-md-3 col-with-right-boarder">
<div class="form-group form-row">
<label for="StatusTypes" class="col-sm-12 col-form-label">Change Status to:</label>
<select class="form-control" id="StatusTypes" @bind="SelectedStatus" @oninput="ChangeStatusType">
<option></option>
@foreach (var status in processStatusTypes)
{
<option value="@status">@status</option>
}
</select>
</div>
</div>
<div class="col-md-6 col-with-right-boarder">
<div class="form-group form-row">
<label for="ReasonForChange" class="col-sm-12 col-form-label">Reason for Change:</label>
<input class="form-control" id="ReasonForChange" placeholder="" @oninput="ChangeReasonMessage" @bind="UpdateStatusRequest.ReasonMessage"/>
</div>
</div>
<div class="col-md-3">
<div>
<label for="UpdateStatus" class="col-sm-12 col-form-label">&nbsp;</label>
<button type="button"
class="btn btn-primary"
@onclick="UpdateStatus_Click"
title="Update Status"
id="UpdateStatus"
disabled="@Disabled">
Update Process Status
</button>
</div>
</div>
</div>
</BodyContent>
</CollapsibleComponent>
}
@code {
[Parameter]
public DocumentProcessingInfo DocumentProcessingInfo { get; set; }
[Parameter]
public EventCallback<IModalReference> RefreshData { get; set; }
[Parameter]
public DocumentProcessingInfoStatusRequest UpdateStatusRequest { get; set; }
[Parameter]
public IEnumerable<ProcessStatusTypes> processStatusTypes { get; set; }
[Parameter]
public bool Disabled { get; set; } = true;
private ConfirmBase? UpdateStatusConfirmation { get; set; }
private ProcessStatusTypes? SelectedStatus { get; set; } = null;
private readonly Dictionary<ProcessStatusTypes, List<ProcessStatusTypes>> _statusChangeRejectionList =
new ()
{
[ProcessStatusTypes.Processing] = new()
{
ProcessStatusTypes.Reprocessing,
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.Completed] = new()
{
ProcessStatusTypes.Processing,
ProcessStatusTypes.Completed,
ProcessStatusTypes.ArchiveFailure,
ProcessStatusTypes.CriticalFailure,
ProcessStatusTypes.DataMappingFailure,
ProcessStatusTypes.Reprocessing,
ProcessStatusTypes.NotificationDataFailure,
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.ArchiveFailure] = new()
{
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.CriticalFailure] = new()
{
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.DataMappingFailure] = new()
{
ProcessStatusTypes.Processing,
ProcessStatusTypes.Completed,
ProcessStatusTypes.ArchiveFailure,
ProcessStatusTypes.CriticalFailure,
ProcessStatusTypes.DataMappingFailure,
ProcessStatusTypes.Reprocessing,
ProcessStatusTypes.NotificationDataFailure,
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.Reprocessing] = new()
{
ProcessStatusTypes.Processing,
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.NotificationDataFailure] = new()
{
ProcessStatusTypes.Processing,
ProcessStatusTypes.ArchiveFailure,
ProcessStatusTypes.CriticalFailure,
ProcessStatusTypes.DataMappingFailure,
ProcessStatusTypes.Reprocessing,
ProcessStatusTypes.UploadCompletionReprocessing
},
[ProcessStatusTypes.UploadCompletionReprocessing] = new()
{
ProcessStatusTypes.Processing,
ProcessStatusTypes.ArchiveFailure,
ProcessStatusTypes.CriticalFailure,
ProcessStatusTypes.DataMappingFailure,
ProcessStatusTypes.Reprocessing
}
};
protected override void OnInitialized()
{
processStatusTypes = GetStatusTypes();
UpdateStatusRequest = new DocumentProcessingInfoStatusRequest()
{
DocumentProcessingInfoId = DocumentProcessingInfo.DocumentProcessingInfoId,
ProcessStatus = DocumentProcessingInfo.StatusType,
Username = AzureAdAuthorizationService.GetUserName()
};
}
private IEnumerable<ProcessStatusTypes> GetStatusTypes()
{
return Enum.GetValues<ProcessStatusTypes>()
.Where(x => !_statusChangeRejectionList[DocumentProcessingInfo.StatusType].Contains(x)
&& x != DocumentProcessingInfo.StatusType);
}
private void ChangeStatusType(ChangeEventArgs changeEventArgs)
{
var value = changeEventArgs.Value?.ToString();
if(!string.IsNullOrWhiteSpace(value))
{
SelectedStatus = UpdateStatusRequest.ProcessStatus = Enum.Parse<ProcessStatusTypes>(value);
}
else
{
SelectedStatus = null;
}
ValidateForm();
}
private void ChangeReasonMessage(ChangeEventArgs changeEventArgs)
{
UpdateStatusRequest.ReasonMessage = changeEventArgs.Value?.ToString();
ValidateForm();
}
private void ValidateForm()
{
Disabled = string.IsNullOrWhiteSpace(UpdateStatusRequest.ReasonMessage) ||
string.IsNullOrWhiteSpace(UpdateStatusRequest.Username) ||
SelectedStatus is null;
}
private void UpdateStatus_Click()
{
UpdateStatusConfirmation?.Show();
}
private async Task UpdateStatus_Confirm(bool confirmed)
{
if (confirmed)
{
var openModal = LoadingLighthouse.Show(Modal);
try
{
await DocumentProcessingInfoService.UpdateStatus(UpdateStatusRequest);
ToastService.ShowInfo("Document status has been updated.");
}
catch {}
await RefreshData.InvokeAsync(openModal);
}
}
}