using MudBlazor; using static HotelPms.Client.Blazor.Util.SystemEnum; using System.Xml.Linq; using System.Text.Json.Serialization; using HotelPms.Data.UseInfo; using HotelPms.Share.Util; using Microsoft.JSInterop; using HotelPms.Client.Blazor.Util; using Microsoft.VisualBasic; using System.Globalization; namespace HotelPms.Client.Blazor.Models { /// /// 売上伝票入力情報 /// public class SaleInputRow : EditRow { public enum ColType : int { /// /// 部屋タイプ(ReadOnly 全部選択時表示・部屋選択時非表示) /// RoomType = 0, /// /// 部屋番号(ReadOnly 全部選択時表示・部屋選択時非表示) /// RoomID, /// /// 科目名称 /// ItemName, /// /// 人数 /// PersonCount, /// /// 内女 /// Woman, /// /// 単価 /// UnitPrice, /// /// 割引(Endキーより、理由や%設定) /// DiscountSummary, /// /// 合計金額 /// TotalSummary, /// /// 集計日 /// SumDate, /// /// 頁 /// Page, /// /// 詳細(ボタン) /// Detail, /// /// ソートキー(非表示) /// SortKey, } public SaleInputRow() { Cells.Add(new ViewModel.ValidField { Name = ColType.RoomType.ToString() }); Cells.Add(new ViewModel.ValidField { Name = ColType.RoomID.ToString() }); Cells.Add(new ViewModel.ValidField { Name = ColType.ItemName.ToString(), MaxLenth = 50, ShowStyle = EShowStyle.ShowList }); Cells.Add(new ViewModel.ValidField { Name = ColType.PersonCount.ToString(), MaxLenth = 3, InputChar = EInputChar.Num }); Cells.Add(new ViewModel.ValidField { Name = ColType.Woman.ToString(), MaxLenth = 3, InputChar = EInputChar.Num }); Cells.Add(new ViewModel.ValidField { Name = ColType.UnitPrice.ToString(), MaxLenth = 19, InputChar = EInputChar.Num }); Cells.Add(new ViewModel.ValidField { Name = ColType.DiscountSummary.ToString(), MaxLenth = 19, InputChar = EInputChar.Num, ShowStyle = EShowStyle.ShowList }); Cells.Add(new ViewModel.ValidField { Name = ColType.TotalSummary.ToString(), MaxLenth = 19, InputChar = EInputChar.Num }); Cells.Add(new ViewModel.ValidField { Name = ColType.SumDate.ToString(), MaxLenth = 10, InputChar = EInputChar.Num | EInputChar.Slash, ShowStyle = EShowStyle.ShowList }); Cells.Add(new ViewModel.ValidField { Name = ColType.Page.ToString(), MaxLenth = 3, InputChar = EInputChar.Num }); Cells.Add(new ViewModel.ValidField { Name = ColType.Detail.ToString(), MaxLenth = 3, InputChar = EInputChar.Num }); Cells.Add(new ViewModel.ValidField { Name = ColType.SortKey.ToString(), Disabled = true }); } protected override void Dispose(bool disposing) { if (!disposing) { base.Dispose(false); } } /// /// 関連伝票情報 /// [JsonIgnore(Condition = JsonIgnoreCondition.Always)] public List DataList { get; set; } = new List(); /// /// 一番若い伝票情報返す /// /// public Sale GetSale() { if (DataList.Count == 0) { return null; } return DataList[0]; } /// /// 値変更あり /// /// /// public override bool IsValueChanged(int index, string inputText) { if (index == (int)ColType.ItemName) { if (DataList.Count == 0) { return inputText.Length > 0; } //新規行の場合、入力したら、変更あり return inputText.CompareTo(DataList[0].ItemName) != 0; } else { return false; } } /// /// DOMの表示値 /// /// /// /// public async Task GetInputValue(int index, IJSRuntime JSRuntime) { return await Cells[index].Ref.GetInputValue(JSRuntime); } /// /// 表示の値の復元 /// /// public void RestoreText(SaleInputRow.ColType index) { SetCellText((int)index, GetDataField((int)index)); } /// /// データの値 /// /// /// public string GetDataField(int index) { if (index == (int)ColType.ItemName) { return DataList.Count == 0 ? string.Empty : DataList[0].ItemName; } else { return string.Empty; } } public void SetItem(HotelPms.Data.Master.Item item) { foreach (Sale sale in DataList) { sale.ItemID = item.ID; sale.ItemName = item.Name; sale.ItemKind = item.Kind; } } public void SetDataField(int index, string inputText) { if (index == (int)ColType.ItemName) { foreach (Sale item in DataList) { item.ItemName = inputText; } } else { } } /// /// 売上伝票より表示データの作成 /// /// public async Task Add(Data.UseInfo.Sale item) { try { DataList.Add(item); SetCellText((int)ColType.RoomType, await MasterCore.GetRoomTypeName((item.Parent as Data.UseInfo.UseRoom).RoomTypeID)); SetCellText((int)ColType.RoomID, (item.Parent as Data.UseInfo.UseRoom).RoomID.ToString()); SetCellText((int)ColType.ItemName, item.ItemName); SetCellText((int)ColType.PersonCount, item.PersonCount.ToString()); SetCellText((int)ColType.Woman, item.InFemale.ToString()); SetCellText((int)ColType.UnitPrice, item.Price.ToText("N0")); SetCellText((int)ColType.DiscountSummary, item.DiscountSummary.ToText("N0")); SetCellText((int)ColType.TotalSummary, item.TotalSummary.ToText("N0")); SetCellText((int)ColType.SumDate, item.UseDate.ToText()); SetCellText((int)ColType.Page, item.ReceiptPage.ToString()); return true; } catch { return false; } } } }