@attribute [Route($"{GuestConsts.Page_GuestDocs_Detail}")] @using Somnia.GuestLog.Models.DTOs; @using Somnia.GuestLog.Services; @using Microsoft.AspNetCore.WebUtilities; @inject IUserMessageService userMessage @inject IDialogService DialogService @inject NavigationManager Navigation @inject IGuestDocumentEntityService guestDocService @inject IStayEntryEntityService stayService @inject IDialogService DialogService Somnia - Guest Docs - Details Guest Document: @docId - @documentModel?.FullDocument @if (_isEditMode) { @LanguageLocale.general_btnCancel @LanguageLocale.general_btnSave } @if (!_isEditMode) { @LanguageLocale.general_btnEdit @LanguageLocale.general_btnReturn } @if (documentModel is not null) { Total Stays: @(guestStaysLoading ? "Loading..." : guestStayList.Count()) @LanguageLocale.dto_StayEntry_DateIn @LanguageLocale.dto_StayEntry_DateOut @LanguageLocale.dto_StayEntry_RoomCount @LanguageLocale.dto_StayEntry_RoomNumber @LanguageLocale.general_actions @context.DateIn @context.DateOut @context.RoomCount @context.RoomNumber @LanguageLocale.general_noResults } @code { [Parameter] public long docId { get; set; } GuestDocForm _form = null!; GuestDocumentDTO? documentModel = null; IEnumerable guestStayList = []; bool guestStaysLoading = true; private bool _isEditMode = false; protected override async Task OnInitializedAsync() { //Get model from db. await LoadGuestDocumentAsync(); } private async Task LoadGuestDocumentAsync() { //Get model from db. documentModel = await guestDocService.GetLastVersionDtoByIdAsync(docId); if (documentModel is null) { userMessage.ShowMessage($"GuestDocument not found with ID: '{docId}'", MessageKind.Error); Navigation.NotFound(); return; } } private async Task LoadTabGuestStays() { //Only load when there is no data. if (guestStayList.Count() > 0) { return; } if (documentModel is null || documentModel.Id is null || documentModel.Version is null) { throw new InvalidOperationException(); } guestStaysLoading = true; guestStayList = await stayService.GetStaysWithGuest(documentModel.Id.Value); guestStaysLoading = false; } #region Event Handlers private void BtnEnableEdit() { Debug.Assert(_isEditMode == false); userMessage.ShowMessage(LanguageLocale.page_GuestDocDetail_msgEditEnabled, MessageKind.Normal); _isEditMode = true; } private async Task BtnCancelEdit() { Debug.Assert(_isEditMode == true); var result = await DialogService.ShowMessageBoxAsync( LanguageLocale.general_confirmTitle, LanguageLocale.page_GuestDocDetail_msgConfirmCancelEdit, yesText: "OK", cancelText: LanguageLocale.general_btnCancel); if (result == null || result.Value == false) { // Cancel cancel -> Continue with edit. return; } //Cancel edit -> Reload data from DB. await LoadGuestDocumentAsync(); userMessage.ShowMessage(LanguageLocale.general_msgEditCanceled, MessageKind.Normal); _isEditMode = false; } private async Task BtnSaveEdit() { Debug.Assert(_isEditMode == true && documentModel is not null); var confirmResult = await DialogService.ShowMessageBoxAsync( LanguageLocale.general_confirmTitle, LanguageLocale.page_GuestDocDetail_msgConfirmSaveEdit, yesText: "OK", cancelText: LanguageLocale.general_btnCancel); if (confirmResult == null || confirmResult.Value == false) { // Cancel save -> Continue with edit. return; } //Show Loading dialog... var loadingDialog = await DialogService.ShowAsync(); //Save edit. Result updateResult = await guestDocService.UpdateDocumentAsync(documentModel); if (!updateResult.IsSuccess) { string errorMsg = string.Format(LanguageLocale.page_GuestDocDetail_msgEditError, documentModel.FullDocument); userMessage.ShowResultWithMessage(updateResult, errorMsg); loadingDialog.Close(); return; } //Reload data from DB. await LoadGuestDocumentAsync(); loadingDialog.Close(); userMessage.ShowMessage(LanguageLocale.general_msgEditSaved, MessageKind.Success); _isEditMode = false; } private void BtnReturn() { Navigation.NavigateTo(GuestConsts.Page_GuestDocs_List); } private void BtnViewStayDetails(StayEntryDTO item) { string itemId = $"{item.Id ?? -1}"; string uri = GuestConsts.Page_StayEntry_Detail.Replace(GuestConsts.Page_StayEntry_Detail_Param_Id, itemId); string relativeUri = Navigation.ToBaseRelativePath(Navigation.Uri); uri = QueryHelpers.AddQueryString(uri, [ new KeyValuePair(GuestConsts.QueryParam_ReturnUrl, relativeUri) ]); Navigation.NavigateTo(uri); } #endregion }