From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.Client.Blazor/Models/RoomViewMenu.cs |  184 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 184 insertions(+), 0 deletions(-)

diff --git a/HotelPms.Client.Blazor/Models/RoomViewMenu.cs b/HotelPms.Client.Blazor/Models/RoomViewMenu.cs
new file mode 100644
index 0000000..44903d4
--- /dev/null
+++ b/HotelPms.Client.Blazor/Models/RoomViewMenu.cs
@@ -0,0 +1,184 @@
+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;
+                    }
+                }
+            }
+            //
+        }
+    }
+}

--
Gitblit v1.10.0