using Grpc.Core;
|
using Grpc.Net.Client;
|
using HotelPms.Client.Blazor.Util;
|
using HotelPms.DataAccessGrpc.Client;
|
using HotelPms.Share.Util;
|
using Microsoft.VisualBasic;
|
using MudBlazor;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Threading.Channels;
|
|
namespace HotelPms.Client.Blazor.Models
|
{
|
public class RoomViewMenu
|
{
|
/// <summary>
|
/// 客室状況メニュー
|
/// </summary>
|
public enum EType : int
|
{
|
[Description("予約登録")]
|
Resv = 0,
|
[Description("チェックイン")]
|
CheckIn,
|
[Description("伝票登録")]
|
SlipInput,
|
[Description("チェックアウト")]
|
CheckOut,
|
[Description("外出")]
|
Out,
|
[Description("延長")]
|
Exten,
|
[Description("清掃指示")]
|
Maid,
|
[Description("清掃完了")]
|
Finish,
|
[Description("顧客詳細")]
|
Customer,
|
[Description("PBX連動情報")]
|
PBX,
|
[Description("ウェイクアップ")]
|
WakeUp,
|
[Description("インジケーター同期")]
|
Indicator,
|
[Description("選択キャンセル")]
|
UnSel,
|
}
|
|
public static int ItemCount = 13;
|
|
public static string[] IconData = new string[]
|
{
|
Icons.Material.Filled.Book,
|
Icons.Material.Filled.Login,
|
Icons.Material.Filled.ModeEdit,
|
Icons.Material.Filled.Logout,
|
Icons.Material.Filled.DirectionsRun,
|
Icons.Material.Filled.WatchLater,
|
Icons.Material.Filled.Face,
|
Icons.Material.Filled.Gamepad,
|
Icons.Material.Filled.CancelPresentation,
|
Icons.Material.Filled.Icecream,
|
Icons.Material.Filled.Javascript,
|
Icons.Material.Filled.Kayaking,
|
Icons.Material.Filled.Cancel
|
};
|
|
public string[] Text { get; set; } = new string[ItemCount];
|
|
public bool[] Disable { get; set; } = new bool[ItemCount];
|
|
public double Height { get; set; } = 19.74D + 468.26D + 48D; //ヘッダー:48D
|
public double Width { get; set; } = 250D;
|
public string WidthCss { get => $"{Width}px"; }
|
|
public string DisplayCss { get; set; } = "display: none;";
|
|
/// <summary>
|
/// メニュー行の高さ
|
/// </summary>
|
private static double ItemHeight = 36.02D;
|
|
private DateTime UseDate { get; set; }
|
|
public int RoomID { get; set; } = 0;
|
|
/// <summary>
|
/// 現在の部屋状態
|
/// </summary>
|
public int RoomStatus { get; set; } = 0;
|
|
public int UseStatus { get; set; } = 0;
|
|
public RoomViewMenu()
|
{
|
|
}
|
|
/// <summary>
|
/// 部屋状態の更新
|
/// </summary>
|
/// <param name="next"></param>
|
/// <returns></returns>
|
public async Task<bool> SetRoomStatus(bool next)
|
{
|
Data.Master.RoomStatus item = next ? (await RoomStatusSetting.Instance()).Next(RoomStatus) : (await RoomStatusSetting.Instance()).Prev(RoomStatus);
|
using RoomStatusAccess access = new RoomStatusAccess(EnvironmentSetting.GrpcChannel);
|
var ret = await access.UpdateRoomStatus(UseDate, RoomID, item.ID);
|
return ret != null;
|
}
|
|
private async Task<string> GetText(int type)
|
{
|
if(type == (int)EType.Maid)
|
{
|
Data.Master.RoomStatus item = (await RoomStatusSetting.Instance()).Prev(RoomStatus);
|
return item == null ? string.Empty : item.Name; //前の状態
|
}
|
else if (type == (int)EType.Finish)
|
{
|
Data.Master.RoomStatus item = (await RoomStatusSetting.Instance()).Next(RoomStatus);
|
return item == null ? string.Empty : item.Name; //次の状態
|
}
|
else
|
{
|
return ((EType)type).ToDescription();
|
}
|
}
|
|
/// <summary>
|
/// 指定利用日、部屋IDのメニューを開く
|
/// メニューアイテムの高さ:36.02px
|
/// </summary>
|
/// <param name="useDate"></param>
|
/// <param name="roomID"></param>
|
public async Task Show(GrpcChannel channel, DateTime useDate, int roomID)
|
{
|
RoomID = roomID;
|
UseDate = useDate;
|
EnvironmentSetting.Debug($"GetData begin:{DateTime.Now.ToString("HH:mm:ss fff")}");
|
using RoomViewLayoutAccess access = new RoomViewLayoutAccess(channel);
|
using DataTable data = await access.GetRoomState($"{CConvert.ToDateString(UseDate)},{roomID}");
|
EnvironmentSetting.Debug($"GetData end:{DateTime.Now.ToString("HH:mm:ss fff")}");
|
RoomStatus = CConvert.ToInt(data.Rows[0]["RoomStatus"]);
|
int vacancyID = (await RoomStatusSetting.Instance()).Vacancy;
|
if (RoomStatus == 0) { RoomStatus = vacancyID; }
|
UseStatus = CConvert.ToInt(data.Rows[0]["UseStatus"]);
|
|
foreach (DataColumn col in data.Columns)
|
{
|
EnvironmentSetting.Debug($"{col.ColumnName}={data.Rows[0][col.ColumnName]}");
|
}
|
|
Height = 19.74D + 468.26D + 48D;
|
for (int i= 0; i< ItemCount; i++)
|
{
|
Text[i] = await GetText(i);
|
|
if (RoomStatus == vacancyID && UseStatus == 0)
|
{
|
//空室
|
switch(i)
|
{
|
case (int)EType.SlipInput:
|
case (int)EType.CheckOut:
|
case (int)EType.Out:
|
case (int)EType.Exten:
|
case (int)EType.Customer:
|
case (int)EType.PBX:
|
case (int)EType.WakeUp:
|
case (int)EType.Indicator:
|
Disable[i] = true;
|
Height -= ItemHeight;
|
break;
|
default:
|
Disable[i] = false;
|
break;
|
}
|
}
|
}
|
//
|
}
|
}
|
}
|