ホテル管理システム
ogi
yesterday 1a1c8e71fcd14858f595029f089b2d4a00202b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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;
                    }
                }
            }
            //
        }
    }
}