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 { /// /// 客室状況メニュー /// 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;"; /// /// メニュー行の高さ /// private static double ItemHeight = 36.02D; private DateTime UseDate { get; set; } public int RoomID { get; set; } = 0; /// /// 現在の部屋状態 /// public int RoomStatus { get; set; } = 0; public int UseStatus { get; set; } = 0; public RoomViewMenu() { } /// /// 部屋状態の更新 /// /// /// public async Task 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 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(); } } /// /// 指定利用日、部屋IDのメニューを開く /// メニューアイテムの高さ:36.02px /// /// /// 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; } } } // } } }