@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
}