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;
}
}
}
//
}
}
}