@attribute [Route($"{GuestConsts.Page_GuestDocs_New}")] @using Somnia.GuestLog.Models.DTOs; @using Somnia.GuestLog.Services; @using Somnia.GuestLog.Validators; @inject ISnackbar Snackbar @inject IDialogService DialogService @inject NavigationManager Navigation @inject IGuestDocumentService 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 = "" }; 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.GetDtoByIdAsync(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; } private void BtnReturn() { Navigation.NavigateTo(GuestConsts.Page_GuestDocs_List); } private async Task BtnSaveNewGuest() { bool isFormValid = await _form.ValidateForm(); if (!isFormValid) { Snackbar.Add("Invalid Form!", Severity.Error); return; } GuestDocumentDTO model = _form.Model; Snackbar.Add($"Document '{model.DocumentNum}' creating...", Severity.Info); //Show Loading dialog... var loadingDialog = await DialogService.ShowAsync(); bool isCreated = await guestDocService.CreateDocumentAsync(model); if (!isCreated) { Snackbar.Add($"Error creating Document '{model.DocumentNum}'", Severity.Error); loadingDialog.Close(); return; } Snackbar.Add($"Document '{model.DocumentNum}' Created!", Severity.Success); Navigation.NavigateTo(GuestConsts.Page_GuestDocs_List); } private void BtnGoToDocument() { if (currentPageMode != ePageMode.alreadyExistDoc) { Snackbar.Add("Invalid operation!", Severity.Error); return; } string docId = GuestDocIdDTO.EncodeAsString(currentDocId); string uri = GuestConsts.Page_GuestDocs_Detail.Replace("{docId}", docId); Navigation.NavigateTo(uri); } #endregion #region Models enum ePageMode { selectDocId, alreadyExistDoc, createNew } #endregion }