using customTypes; using HotelPms.Client.Blazor.Models; using HotelPms.Client.Blazor.Pages.UseDetail; using HotelPms.Client.Blazor.Shared; using HotelPms.Client.Blazor.Util; using HotelPms.Data.Common; using HotelPms.Data.UseInfo; using HotelPms.DataAccessGrpc.Client; using HotelPms.Share.IO; using HotelPms.Share.Util; using Microsoft.JSInterop; using System.ComponentModel; using System.Text; using System.Text.Json; using static HotelPms.Client.Blazor.Util.SystemEnum; namespace HotelPms.Client.Blazor.ViewModel; /// /// 利用情報詳細入力画面用 /// public class UseInput : ValidModelEx { public enum GroupKey : int { [Description("予約情報")] Resv = 0, [Description("個人情報")] Person, [Description("会社情報")] Company, [Description("その他")] Other, [Description("予約追加情報")] ResvAdd, [Description("個人追加情報")] PersonAdd, [Description("会社追加情報")] CompanyAdd, [Description("顧客追加情報")] CustomerAdd, } /// /// 利用情報 /// public Data.UseInfo.Use Use { get; set; } /// /// 現在選択されている利用明細 /// public Data.UseInfo.UseDetail UseDetail { get; set; } /// /// 現在の伝票表示区分 /// public ESaleDispType SaleDispType { get; set; } = ESaleDispType.Normal; /// /// 現在選択されている利用日 /// yyyy/MM/dd /// public string UseDate { get; set; } = string.Empty; /// /// 現在選択されている利用日の泊数 /// public int CurrentStay { get; set; } = 1; /// /// 部屋タイプ情報入力 /// public IEnumerable RoomTypeList { get; set; } = new List(); private UseRoomRow m_SelUseRoomRow = null; /// /// 選択されている利用部屋 /// public UseRoomRow SelUseRoomRow { get { return m_SelUseRoomRow; } set { m_SelUseRoomRow = value; EnvironmentSetting.Debug($"Change:{m_SelUseRoomRow.RoomID}"); } } /// /// 利用部屋一覧 /// public IEnumerable UseRoomList { get; set; } = new List(); /// /// 伝票一覧 /// public IEnumerable SaleList { get; set; } = new List(); /// /// 入金一覧 /// public IEnumerable PayList { get; set; } = new List(); /// /// グループ毎返す /// /// /// public List GetGroup(GroupKey key) { List list = new List(); if (key == GroupKey.Resv) { for (int i = 0; i <= 11; i++) { list.Add(Fields[i]); } } else if (key == GroupKey.Person) { for (int i = 12; i <= 19; i++) { list.Add(Fields[i]); } } else if (key == GroupKey.Company) { for (int i = 20; i <= 25; i++) { list.Add(Fields[i]); } } else if (key == GroupKey.Other) { for (int i = 26; i <= 32; i++) { list.Add(Fields[i]); } } return list; } /// /// 初期化 /// public UseInput(IJSRuntime js) : base(js) { // 0 ~ 10 Add(new ValidField() { Name = "ResvNo", Caption = "予約番号", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "ResvType", Caption = "予約区分", Required = true, MaxLenth = 2, InputChar = EInputChar.Num, DispNameEnabled = true, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 6 }); Add(new ValidField() { Name = "GroupType", Caption = "団体区分", Required = true, MaxLenth = 2, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispNameEnabled = true, DispWidthUnit = 6 }); Add(new ValidField() { Name = "RoomID", Caption = "部屋No", MaxLenth = 7, InputChar = EInputChar.Num, WidthUnit = 5 }); Add(new ValidField() { Name = "SalesLoginID", Caption = "営業", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, WidthUnit = 7, DispNameEnabled = true, DispWidthUnit = 8 }); Add(new ValidField() { Name = "CinDate", Caption = "チェックイン日", MaxLenth = 10, InputChar = EInputChar.Num | EInputChar.Slash, InputStyle = EInputStyle.Date }); Add(new ValidField() { Name = "CinTime", Caption = "到着時間", MaxLenth = 5, InputChar = EInputChar.Num | EInputChar.Colon, InputStyle = EInputStyle.Time }); Add(new ValidField() { Name = "Stay", Caption = "泊数", MaxLenth = 3, InputChar = EInputChar.Num, WidthUnit = 6, NewLine = true }); Add(new ValidField() { Name = "CoutDate", Caption = "チェックアウト日", MaxLenth = 10, InputChar = EInputChar.Num | EInputChar.Slash, InputStyle = EInputStyle.Date }); Add(new ValidField() { Name = "CoutTime", Caption = "出発時間", MaxLenth = 5, InputChar = EInputChar.Num | EInputChar.Colon, InputStyle = EInputStyle.Time }); Add(new ValidField() { Name = "GroupName", Caption = "団体名称", MaxLenth = 50 }); Add(new ValidField() { Name = "GroupKana", Caption = "団体カナ", MaxLenth = 50 }); // 11 ~ 18 Add(new ValidField() { Name = "MemberNo", Caption = "会員番号", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "Tel", Caption = "電話番号", MaxLenth = 50, InputChar = EInputChar.Num | EInputChar.Subtract, WidthUnit = 8 }); Add(new ValidField() { Name = "TelKind", Caption = "区分", Required = true, MaxLenth = 50, ShowStyle = EShowStyle.ShowList, ReadOnly = true, WidthUnit = 4 }); Add(new ValidField() { Name = "Name", Required = true, Caption = "氏名", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "Kana", Required = true, Caption = "カナ", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "ResvName", Caption = "予約者名", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "ResvKana", Caption = "カナ", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "ResvTel", Caption = "電話番号", InputChar = EInputChar.Num | EInputChar.Subtract, MaxLenth = 50, WidthUnit = 12 }); // 19 ~ 24 Add(new ValidField() { Name = "CorpID", Caption = "法人顧客", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, WidthUnit = 12 }); Add(new ValidField() { Name = "CorpName", Caption = "会社名", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "CorpKana", Caption = "カナ", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "CorpTel", Caption = "会社電話", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "CorpFax", Caption = "会社FAX", MaxLenth = 50, WidthUnit = 12 }); Add(new ValidField() { Name = "ReceiptName", Caption = "宛名", MaxLenth = 50, InputChar = EInputChar.None, WidthUnit = 12 }); // 25 ~ 31 Add(new ValidField() { Name = "AreaID", Caption = "地域", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); Add(new ValidField() { Name = "CharacterType", Caption = "人物フラグ", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); Add(new ValidField() { Name = "CustomerRig", Caption = "顧客登録", MaxLenth = 1, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); Add(new ValidField() { Name = "AgentID", Caption = "エージェント", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); Add(new ValidField() { Name = "AgentBranchID", Caption = "支店", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); Add(new ValidField() { Name = "PlanID", Caption = "プラン", MaxLenth = 7, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); Add(new ValidField() { Name = "RoomAssign", Caption = "部屋指定", MaxLenth = 1, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList, DispWidthUnit = 8, DispNameEnabled = true, WidthUnit = 12 }); // 予約追加情報(自由集計) // 個人追加情報 Add(new ValidField() { Name = "ZipCode", Caption = "郵便番号", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "Prefecture", Caption = "都道府県", MaxLenth = 20, InputChar = EInputChar.None }); Add(new ValidField() { Name = "Address2", Caption = "市区町村", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "Address3", Caption = "町域", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "Address4", Caption = "番地", MaxLenth = 100, InputChar = EInputChar.None }); Add(new ValidField() { Name = "Mail", Caption = "メール", MaxLenth = 100, InputChar = EInputChar.None }); Add(new ValidField() { Name = "PassportNo", Caption = "パスポート", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "Sex", Caption = "性別", MaxLenth = 2, InputChar = EInputChar.Num }); Add(new ValidField() { Name = "BirthDay", Caption = "誕生日", MaxLenth = 10, InputChar = EInputChar.Num | EInputChar.Slash, InputStyle = EInputStyle.Date }); Add(new ValidField() { Name = "Anniversary", Caption = "記念日", MaxLenth = 10, InputChar = EInputChar.Num | EInputChar.Slash, InputStyle = EInputStyle.Date }); // 会社追加情報 //Add(new ValidField() { Name = "ResvTel", Caption = "所属", MaxLenth = 50 }); //Add(new ValidField() { Name = "ResvTel", Caption = "役職", MaxLenth = 50 }); Add(new ValidField() { Name = "CorpZipCode", Caption = "法人郵便番号", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "CorpPrefecture", Caption = "都道府県", MaxLenth = 20, InputChar = EInputChar.None }); Add(new ValidField() { Name = "CorpAddress2", Caption = "市区町村", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "CorpAddress3", Caption = "町域", MaxLenth = 50, InputChar = EInputChar.None }); Add(new ValidField() { Name = "CorpAddress4", Caption = "番地", MaxLenth = 100, InputChar = EInputChar.None }); Add(new ValidField() { Name = "CorpMemo", Caption = "法人備考", MaxLenth = 500, InputChar = EInputChar.None }); // 顧客追加情報 (顧客自由集計 GroupID使用) //追加電話番号はGridリストへ // 複数想定(リスト) Add(new ValidField() { Name = "Memo", Caption = "メモ", MaxLenth = 1000 }); Add(new ValidField() { Name = "Remark", Caption = "備考", MaxLenth = 1000 }); } /// /// 画面初期化 /// public void InitGrid() { InitRoomTypeInput(); } public async void InitRoomTypeInput() { List list = RoomTypeList as List; List roomList = UseRoomList as List; SortedDictionary typeDt = new SortedDictionary(); //まとめる //UseRoomより取得する List useRoomList = Use.GetUseRoomList(UseDate); foreach (var item in useRoomList) { RoomTypeInputRow row; if (!typeDt.TryGetValue(item.RoomTypeID, out row)) { row = new(); row.SetCellText((int)RoomTypeInputRow.ColType.ID, item.RoomTypeID.ToString()); row.SetCellText((int)RoomTypeInputRow.ColType.Name, await MasterCore.GetRoomTypeName(item.RoomTypeID)); row.SetCellText((int)RoomTypeInputRow.ColType.Count, "0"); typeDt.Add(item.RoomTypeID, row); } row.SetCellText((int)RoomTypeInputRow.ColType.Count, CConvert.ToString(CConvert.ToInt(row.GetCellText((int)RoomTypeInputRow.ColType.Count)) + 1)); row.DataList.Add(item); //部屋一覧 UseRoomRow roomRow = new UseRoomRow { RoomID = item.RoomID.ToString(), Name = item.UseAlloList.Count == 0 ? string.Empty : item.UseAlloList[0].Person?.Name, Representative = true, UseStatus = (item.Parent as Data.UseInfo.UseDetail).UseStatus.ToString(), }; roomRow.UseRoom = item; roomList.Add(roomRow); } //常に空行追加 list.Add(new()); //部屋一覧初期選択データ if (roomList.Count > 0) { if (roomList.Count > 1) { UseRoomRow roomRow = new UseRoomRow { RoomID = "", Name = "(一括)", Representative = false, UseStatus = "", }; roomRow.UseRoom = roomList[0].UseRoom; roomList.Insert(0, roomRow); } SelUseRoomRow = roomList[0]; } } /// /// 入力項目→Data /// /// public void SetDataField(ValidField field) { #region 利用情報 if (field.Name == "ResvType") { Use.ResvType = CConvert.ToInt(field.Text); } else if (field.Name == "GroupType") { Use.GroupType = CConvert.ToInt(field.Text); } else if (field.Name == "GroupName") { Use.GroupName = field.Text; } else if (field.Name == "GroupKana") { Use.GroupKana = field.Text; } #endregion #region 利用明細情報 if (UseDetail != null) { if (field.Name == "ResvNo") { UseDetail.ResvNo = field.Text; } else if (field.Name == "SalesLoginID") { UseDetail.SalesLoginID = CConvert.ToInt(field.Text); } else if (field.Name == "CinDate") { UseDetail.CinDate = new customTypes.Date(field.Text); } else if (field.Name == "CinTime") { UseDetail.CinTime = CConvert.ToInt(field.Text.Replace(":", string.Empty)); } else if (field.Name == "Stay") { UseDetail.Stay = CConvert.ToInt(field.Text); } else if (field.Name == "CoutDate") { UseDetail.CoutDate = new customTypes.Date(field.Text); } else if (field.Name == "CoutTime") { UseDetail.CoutTime = CConvert.ToInt(field.Text.Replace(":", string.Empty)); } } #endregion if (field.Name == "MemberNo") { //Use.MemberNo = field.Text; } else if (field.Name == "Tel") { //Use.Tel = field.Text; } else if (field.Name == "TelKind") { //Use.TelKind = field.Text; } else if (field.Name == "Name") { //Use.Name = field.Text; } else if (field.Name == "Kana") { //Use.Kana = field.Text; } else if (field.Name == "ResvName") { //Use.ResvName = field.Text; } else if (field.Name == "ResvKana") { //Use.ResvKana = field.Text; } else if (field.Name == "ResvTel") { //Use.ResvTel = field.Text; } else if (field.Name == "CorpID") { //Use.CorpID = CConvert.ToInt(field.Text); } else if (field.Name == "CorpName") { //Use.CorpName = field.Text; } else if (field.Name == "CorpKana") { //Use.CorpKana = field.Text; } else if (field.Name == "CorpTel") { //Use.CorpTel = field.Text; } else if (field.Name == "CorpFax") { //Use.CorpFax = field.Text; } else if (field.Name == "ReceiptName") { //Use.ReceiptName = field.Text; } else if (field.Name == "AreaID") { //Use.AreaID = CConvert.ToInt(field.Text); } else if (field.Name == "CharacterType") { //Use.CharacterType = CConvert.ToInt(field.Text); } else if (field.Name == "CustomerRig") { //Use.CustomerRig = CConvert.ToInt(field.Text); } else if (field.Name == "AgentID") { //Use.AgentID = CConvert.ToInt(field.Text); } else if (field.Name == "AgentBranchID") { //Use.AgentBranchID = CConvert.ToInt(field.Text); } else if (field.Name == "PlanID") { //Use.PlanID = CConvert.ToInt(field.Text); } else if (field.Name == "RoomAssign") { //Use.RoomAssign = CConvert.ToInt(field.Text); } else if (field.Name == "ZipCode") { //Use.ZipCode = field.Text; } else if (field.Name == "Prefecture") { //Use.Prefecture = field.Text; } else if (field.Name == "Address2") { //Use.Address2 = field.Text; } else if (field.Name == "Address3") { //Use.Address3 = field.Text; } else if (field.Name == "Address4") { //Use.Address4 = field.Text; } else if (field.Name == "Mail") { //Use.Mail = field.Text; } else if (field.Name == "PassportNo") { //Use.PassportNo = field.Text; } else if (field.Name == "Sex") { //Use.Sex = CConvert.ToInt(field.Text); } else if (field.Name == "BirthDay") { //Use.BirthDay = field.Text; } else if (field.Name == "Anniversary") { //Use.Anniversary = field.Text; } else if (field.Name == "CorpZipCode") { //Use.CorpZipCode = field.Text; } else if (field.Name == "CorpPrefecture") { //Use.CorpPrefecture = field.Text; } else if (field.Name == "CorpAddress2") { //Use.CorpAddress2 = field.Text; } else if (field.Name == "CorpAddress3") { //Use.CorpAddress3 = field.Text; } else if (field.Name == "CorpAddress4") { //Use.CorpAddress4 = field.Text; } else if (field.Name == "CorpMemo") { //Use.CorpMemo = field.Text; } else if (field.Name == "Memo") { //Use.Memo = field.Text; } else if (field.Name == "Remark") { //Use.Remark = field.Text; } } /// /// 現在表示されている利用明細を画面へ表示する /// public void SetUseDetailToForm() { //利用情報 SetField("ResvType", Use.ResvType.ToString(), CConvert.GetEnumDescription(Use.ResvType)); SetField("GroupType", Use.GroupType.ToString(), CConvert.GetEnumDescription(Use.GroupType)); SetField("GroupName", Use.GroupName); SetField("GroupKana", Use.GroupKana); //利用明細 SetField("ResvNo", UseDetail.ResvNo.ToString()); SetField("SalesLoginID", UseDetail.SalesLoginID.ToString(), string.Empty); SetField("CinDate", UseDetail.CinDate.ToText()); SetField("CinTime", CConvert.ToTime(UseDetail.CinTime)); SetField("Stay", UseDetail.Stay.ToString()); SetField("CoutDate", UseDetail.CoutDate.ToText()); SetField("CoutTime", CConvert.ToTime(UseDetail.CoutTime)); if (UseDetail.UseRoomList.Count > 0) { HotelPms.Data.UseInfo.UseRoom useRoom = UseDetail.UseRoomList[0]; SetField("RoomID", useRoom.RoomID.ToString()); //利用者特定 if (useRoom.UseAlloList.Count > 0 && useRoom.UseAlloList[0].Person != null) { HotelPms.Data.UseInfo.UsePerson usePerson = useRoom.UseAlloList[0].Person; SetField("MemberNo", usePerson.MemberNo); SetField("Name", usePerson.Name); SetField("Kana", usePerson.Kana); SetField("ReceiptName", usePerson.ReceiptName); SetField("CorpID", usePerson.CorpID.ToString()); SetField("CorpName", usePerson.CorpName); SetField("CorpKana", usePerson.CorpKana); string tel = string.Empty; int telKind = 0; string corpTel = string.Empty; string corpFax = string.Empty; if (usePerson.TelList.Count > 0) { foreach (HotelPms.Data.UseInfo.UsePersonTel personTel in usePerson.TelList) { if ((personTel.Kind == (int)ETelKind.Tel || personTel.Kind == (int)ETelKind.Mobile) && tel.Length == 0) { tel = personTel.Tel; telKind = personTel.Kind; } else if (personTel.Kind == (int)ETelKind.CorpTel && corpTel.Length == 0) { corpTel = personTel.Tel; } else if (personTel.Kind == (int)ETelKind.CorpFax && corpFax.Length == 0) { corpFax = personTel.Tel; } } } SetField("Tel", tel); if (tel.Length == 0) { SetField("TelKind", string.Empty, string.Empty); } else { SetField("TelKind", telKind.ToString(), ((ETelKind)telKind).ToDescription()); } SetField("CorpTel", corpTel); SetField("CorpFax", corpFax); } } //予約者情報 if (UseDetail.ResvPerson != null) { SetField("ResvName", UseDetail.ResvPerson.Name.ToString()); SetField("ResvKana", UseDetail.ResvPerson.Kana.ToString()); if (UseDetail.ResvPerson.TelList.Count > 0) { SetField("ResvTel", UseDetail.ResvPerson.TelList[0].Tel.ToString()); } else { SetField("ResvTel", string.Empty); } } } /// /// 自動ソースコード生成 /// /// public string GetAutoCode() { StringBuilder text = new StringBuilder(); foreach (ViewModel.ValidField item in Fields) { if (item.Index > 0) { text.Append("else "); } text.AppendLine($"if (sender.Name == \"{item.Name}\")"); text.AppendLine("{"); if (item.InputChar == EInputChar.Num) { text.AppendLine($" //Use.{item.Name} = CConvert.ToInt(sender.Text);"); } else { text.AppendLine($" //Use.{item.Name} = sender.Text;"); } text.AppendLine("}"); } return text.ToString(); } /// /// 利用情報新規作成 /// /// public async Task CreateDefault(Date cinDate, int stay) { try { Use = new() { ID = await EnvironmentSetting.GetSeq(ESeqType.Use), ResvType = (int)EResvType.Reserve, GroupType = (int)EGroupType.Person, ReceiptPrtWay = 0, PayWay = 1, //CreateDate = CConvert.ToTimestamp(DateTime.Now.Date), //CreateLoginID = 1, //CreatePcName = Environment.MachineName, //CreateClass = 1, //UpdateDate = CConvert.ToTimestamp(DateTime.Now), //UpdateLoginID = 789, //UpdatePcName = Environment.MachineName, //UpdateClass = 2 }; #region 代表利用明細 Data.UseInfo.UseDetail useDetail = new() { ID = Use.ID, DetailID = await EnvironmentSetting.GetSeq(ESeqType.UseDetail), UseStatus = (int)EUseStatus.Resv, SubStatus = 0, ExtenStatus = 0, CinDate = cinDate, CinTime = 1500, Stay = stay, CoutDate = cinDate.Add(stay), CoutTime = 1000, ResvType = Use.ResvType, //CreateDate = Use.CreateDate, //CreateLoginID = Use.CreateLoginID, //CreatePcName = Use.CreatePcName, //CreateClass = Use.CreateClass, //UpdateDate = Use.UpdateDate, //UpdateLoginID = Use.UpdateLoginID, //UpdatePcName = Use.UpdatePcName, //UpdateClass = Use.UpdateClass }; Use.DetailList.Add(useDetail); UseDetail = useDetail; //現在選択されている利用明細 #endregion return true; } catch (Exception ex) { OperationLog.Instance.WriteLog($"CreateDefault:{ex.Message}"); return false; } } public void RemoveUseRoom(List list, int count) { try { //Parentが必要!! int i = 0; List delList = new List(); foreach(var item in list) { delList.Add(item); i++; if (i == count) { break; } } foreach(var item in delList) { (item.Parent as Data.UseInfo.UseDetail).UseRoomList.Remove(item); list.Remove(item); } } catch (Exception ex) { OperationLog.Instance.WriteLog($"RemoveUseRoom:{ex.Message}"); } } /// /// 部屋を作成する /// /// /// /// public async Task CreateUseRoom(int typeID, int kind) { try { Data.UseInfo.UseDetail detail = Use.GetDetailWithoutUseRoom(UseDate); if (detail == null) { detail = new() { ID = Use.ID, DetailID = await EnvironmentSetting.GetSeq(ESeqType.UseDetail), UseStatus = (int)EUseStatus.Resv, SubStatus = 0, ExtenStatus = 0, CinDate = new(UseDate), CinTime = 1500, Stay = 1, CoutDate = new customTypes.Date(UseDate).Add(1), CoutTime = 1000, ResvType = Use.ResvType, }; Use.DetailList.Add(detail); } else { detail.SetUseRange(UseDate); // 利用期間以外だったら、伸びる } //UseRoom作成 Data.UseInfo.UseRoom useRoom = new() { ID = Use.ID, DetailID = detail.DetailID, UseDate = new(UseDate), RoomTypeID = typeID, RoomKind = kind, }; detail.UseRoomList.Add(useRoom); useRoom.Parent = detail; //基本伝票(部屋料金)作成 HotelPms.Data.Master.Item item = await MasterCore.GetBaseItem(useRoom.RoomTypeID, 0, UseDate); int saleID = await EnvironmentSetting.GetSeq(ESeqType.Sale); int taxRate = await EnvironmentSetting.GetTaxRate(useRoom.UseDate.ToText(), item.TaxType); var saleItem = useRoom.AddSaleByItem(saleID, taxRate, item); //料金の画面表示 SaleInputRow saleRow = new(); await saleRow.Add(saleItem); (SaleList as List).Add(saleRow); return useRoom; } catch (Exception ex) { OperationLog.Instance.WriteLog($"CreateUseRoom:{ex.Message}"); return null; } } }