@attribute [Route($"{GuestConsts.Page_GuestDocs_New}")] @using Somnia.GuestLog.Models.DTOs; @using Somnia.GuestLog.Services; @using Somnia.GuestLog.Validators; @inject IUserMessageService userMessage @inject IDialogService DialogService @inject NavigationManager Navigation @inject IGuestDocumentEntityService guestDocService @inject IDataListService dataListService; @inject FluentValidation.IValidator docIdValidator; Somnia - Guest Docs - New New Guest Document @LanguageLocale.general_btnCreate @LanguageLocale.general_btnReturn @if (currentPageMode == ePageMode.selectDocId || currentPageMode == ePageMode.alreadyExistDoc) { @foreach (string docType in dataListService.GetDataListByName(GuestConsts.DataList_DocumentTypes)) { @dataListService.GetLocalizedValue(GuestConsts.DataList_DocumentTypes, docType) } @LanguageLocale.general_btnSearch @if (currentPageMode == ePageMode.alreadyExistDoc) { @LanguageLocale.page_GuestDocNew_msgAlreadyExists @LanguageLocale.page_GuestDocNew_btnGoExistingDoc } } @if (currentPageMode == ePageMode.createNew) { } @code { GuestDocForm _form = null!; MudForm _docIdForm = null!; ePageMode currentPageMode = ePageMode.selectDocId; GuestDocIdDTO currentDocId = new() { DocumentNum = "", DocumentType = "" }; long? alreadyExistDocId = null; GuestDocumentDTO newDocumentModel = new(); bool loadingDocId = false; #region Event Handlers /// /// Check if given Document already exists or can be created. /// private async Task BtnCheckDocId() { await _docIdForm.ValidateAsync(); if (!_docIdForm.IsValid) { return; } loadingDocId = true; GuestDocumentDTO? dto = await guestDocService.GetLastVersionDtoByDocumentAsync(currentDocId.DocumentType, currentDocId.DocumentNum); loadingDocId = false; if (dto is null) { //Document don't exist -> Create it. currentPageMode = ePageMode.createNew; //Update model with current DocId newDocumentModel.DocumentType = currentDocId.DocumentType; newDocumentModel.DocumentNum = currentDocId.DocumentNum; return; } //GuestDoc already exists! currentPageMode = ePageMode.alreadyExistDoc; alreadyExistDocId = dto.Id; } private void BtnReturn() { Navigation.NavigateTo(GuestConsts.Page_GuestDocs_List); } private async Task BtnSaveNewGuest() { bool isFormValid = await _form.ValidateForm(); if (!isFormValid) { userMessage.ShowMessage("Invalid Form!", MessageKind.Warning); return; } GuestDocumentDTO model = _form.Model; //Show Loading dialog... var loadingDialog = await DialogService.ShowAsync(); Result createResult = await guestDocService.CreateDocumentAsync(model); if (!createResult.IsSuccess) { string errorMsg = $"Error creating Document '{model.FullDocument}'"; userMessage.ShowResultWithMessage(createResult, errorMsg); loadingDialog.Close(); return; } userMessage.ShowMessage($"Document '{model.FullDocument}' Created!", MessageKind.Success); Navigation.NavigateTo(GuestConsts.Page_GuestDocs_List); } private void BtnGoToDocument() { if (currentPageMode != ePageMode.alreadyExistDoc || alreadyExistDocId is null) { userMessage.ShowMessage("Invalid operation!", MessageKind.Error); return; } string strId = alreadyExistDocId.Value.ToString(); string uri = GuestConsts.Page_GuestDocs_Detail.Replace(GuestConsts.Page_GuestDocs_Detail_Param_DocId, strId); Navigation.NavigateTo(uri); } #endregion #region Models enum ePageMode { selectDocId, alreadyExistDoc, createNew } #endregion }