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/Pages/UseDetail/CompanyInfo.razor |  308 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 308 insertions(+), 0 deletions(-)

diff --git a/HotelPms.Client.Blazor/Pages/UseDetail/CompanyInfo.razor b/HotelPms.Client.Blazor/Pages/UseDetail/CompanyInfo.razor
new file mode 100644
index 0000000..9fa9aac
--- /dev/null
+++ b/HotelPms.Client.Blazor/Pages/UseDetail/CompanyInfo.razor
@@ -0,0 +1,308 @@
+@using System.ComponentModel.DataAnnotations
+@using System.Text.RegularExpressions
+@using System.Reflection
+@using HotelPms.Client.Blazor.ViewModel
+@using HotelPms.Data.Common
+@using HotelPms.Data.Common.Interface.Master
+@using HotelPms.DataAccessGrpc.Client
+@using HotelPms.Share.IO
+@using HotelPms.Share.Util
+@using ViewModel = HotelPms.Client.Blazor.ViewModel
+@using static HotelPms.Client.Blazor.Util.SystemEnum
+@inject IJSRuntime JSRuntime
+
+<MudCard Style="@Style" Elevation="6">
+    <MudCardHeader Class="mb-0 pb-0">
+        <CardHeaderContent>
+            <MudText Typo="Typo.body1">会社情報</MudText>
+        </CardHeaderContent>
+        <CardHeaderActions>
+            <MudIconButton Icon="@Icons.Material.Filled.Search" Color="MudBlazor.Color.Default" Title="法人検索" />
+            <MudIconButton Icon="@Icons.Material.Filled.Cancel" Color="MudBlazor.Color.Default" Title="法人解除" />
+        </CardHeaderActions>
+    </MudCardHeader>
+    <MudCardContent Class="mt-0 pt-0 mb-0 pb-0">
+        <MudGrid Spacing="3" Justify="Justify.FlexStart" Class="align-center mt-0 pt-0 mb-0 pb-0">
+            @foreach (var field in Data.GetGroup(ViewModel.UseInput.GroupKey.Company))
+            {
+                EnvironmentSetting.Debug($"Index={field.Index},Text={field.Text},Error={field.Error},ErrorText={field.ErrorText}");
+                if (field.DispNameEnabled)
+                {
+                    <MudItem lg="@field.WidthUnit" Class="@rowSpaceStyle">
+                        <MudGrid Spacing="0" Justify="Justify.FlexStart" Class="align-center mt-0 pt-0 mb-0 pb-0">
+                            <MudItem xs="@(12 - field.DispWidthUnit)" Class="mt-0 pt-0 mb-0 pb-0">
+                                <MudTextField Class="input-pink" @bind-Value="field.Text" Error="@field.Error" ErrorText="@field.ErrorText" @ref="field.Ref" T="string" Label="@field.Caption"
+                                              AutoFocus="@(field.Index == 0)" Margin="Margin.Dense" MaxLength="@field.MaxLenth" Disabled="@field.Disabled" ReadOnly="@field.ReadOnly"
+                                        id="@($"{Data.ID}-{field.Index}")" data-guid="@Data.ID" data-valid-index="@field.Index" data-valid-name="@field.Name" data-valid-org-text="@field.OrgText" data-valid-text="@field.Text" 
+                                        data-valid-input-char="@((int)field.InputChar)" data-valid-show-style="@((int)field.ShowStyle)" data-valid-thousand-format="@field.ThousandFormat"/>
+                            </MudItem>
+                            <MudItem xs="@field.DispWidthUnit" Class="mt-0 pt-0 mb-0 pb-0">
+                                <MudField Margin="Margin.Dense">@field.DispText</MudField>
+                            </MudItem>
+                        </MudGrid>
+                    </MudItem>
+                }
+                else
+                {
+                    <MudItem lg="@field.WidthUnit" Class="@rowSpaceStyle">
+                        <MudTextField @bind-Value="field.Text" Error="@field.Error" ErrorText="@field.ErrorText" @ref="field.Ref" T="string" Label="@field.Caption"
+                                      AutoFocus="@(field.Index == 0)" Margin="Margin.Dense" MaxLength="@field.MaxLenth" Disabled="@field.Disabled" ReadOnly="@field.ReadOnly"
+                                      id="@($"{Data.ID}-{field.Index}")" data-guid="@Data.ID" data-valid-index="@field.Index" data-valid-name="@field.Name" data-valid-org-text="@field.OrgText" data-valid-text="@field.Text"  
+                                data-valid-input-char="@((int)field.InputChar)" data-valid-show-style="@((int)field.ShowStyle)" data-valid-thousand-format="@field.ThousandFormat"/>
+                    </MudItem>
+                }
+            }
+            <MudItem lg="12" Class="@rowSpaceStyle">
+                <MudGrid Spacing="0" Justify="Justify.FlexStart" Class="align-center mt-0 pt-0 mb-0 pb-0">
+                    <MudItem xs="3" Class="mt-0 pt-0 mb-0 pb-0">
+                        <MudCheckBox T="bool" Label="団体" Color="MudBlazor.Color.Primary"></MudCheckBox>
+                    </MudItem>
+                    <MudItem xs="3" Class="mt-0 pt-0 mb-0 pb-0">
+                        <MudCheckBox T="bool" Label="会社" Color="MudBlazor.Color.Primary"></MudCheckBox>
+                    </MudItem>
+                    <MudItem xs="3" Class="mt-0 pt-0 mb-0 pb-0">
+                        <MudCheckBox T="bool" Label="氏名" Color="MudBlazor.Color.Primary"></MudCheckBox>
+                    </MudItem>
+                    <MudItem xs="3" Class="mt-0 pt-0 mb-0 pb-0">
+                        <MudCheckBox T="bool" Label="編集" Color="MudBlazor.Color.Error"></MudCheckBox>
+                    </MudItem>
+                </MudGrid>
+            </MudItem>
+        </MudGrid>
+    </MudCardContent>
+</MudCard>
+
+@*<style>
+    /* 伪类选择器 :focus-within */
+    /* 它表示一个元素获得焦点,或,该元素的后代元素获得焦点。划重点,它或它的后代获得焦点。 */
+    /* 这也就意味着,它或它的后代获得焦点,都可以触发 :focus-within。 */
+    .focus-button:focus-within {
+        border: 1px solid;
+        border-color: #00FF00;
+        -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(0, 255, 0, 0.6);
+        -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(0, 255, 0, 0.6);
+        box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.075), 0px 0px 8px rgba(0, 255, 0, 0.6);
+    }
+</style>
+*@
+
+@code {
+    [Inject] private IDialogService DialogService { get; set; }
+    [Inject] private GrpcChannel Channel { get; set; }
+    [CascadingParameter] MudDialogInstance MudDialog { get; set; }
+    [Parameter] public ViewModel.UseInput? Data { get; set; }
+    [Parameter] public EventCallback<ValidField> ParentShowList { get; set; }
+    [Parameter] public string Style { get; set; }
+
+    private string errorAll = string.Empty;
+    private MudButton btnSave;
+    private string rowSpaceStyle = "mt-2 pt-0 mb-0 pb-0";
+
+    protected override void OnInitialized()
+    {
+        //Data.Refresh = new Action(StateHasChanged);  //メイン画面の更新
+        //Data.BeforeAutoNextFocus += BeforeAutoNextFocus;
+        //Data.BusinessValid += BusinessValid;
+        //Data.ShowList += ShowList;
+    }
+
+    private async void ShowList(ValidField sender, ValidEventArgs e)
+    {
+        await ParentShowList.InvokeAsync(sender);
+        //await ShowListAction(sender);
+    }
+
+    /// <summary>
+    /// 業務チェックを行う
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    /// <returns></returns>
+    private async Task<bool> BusinessValid(ValidField sender, ValidEventArgs e)
+    {
+        if (sender.Name == "ID")
+        {
+            using (BuildingAccess access = new BuildingAccess(Channel))
+            {
+                bool ret = await access.ExistsAsync(CConvert.ToInt(e.Text));
+                EnvironmentSetting.Debug($"access.Exists:{ret}");
+                if(Data.EditMode == (int)EMasterEditStatus.Create && ret)
+                {
+                    if (e.EnterPush)
+                    {
+                        sender.Error = true;
+                        sender.ErrorText = "当該データが既に存在します。";                        
+                    }
+                    else
+                    {
+                        sender.Error = false;
+                        sender.ErrorText = string.Empty;
+                    } 
+                    //StateHasChanged();
+                    return false;
+                }
+                else if(Data.EditMode == (int)EMasterEditStatus.Update && !ret)
+                {
+                    if (e.EnterPush)
+                    {
+                        sender.Error = true;
+                        sender.ErrorText = "当該データが存在しません。";
+                    }
+                    else
+                    {
+                        sender.Error = false;
+                        sender.ErrorText = string.Empty;
+                    } 
+                    //StateHasChanged();
+                    return false;
+                }
+            }
+        }
+
+        sender.Error = false;
+        sender.ErrorText = string.Empty;
+        //StateHasChanged();
+        return true;
+    }
+
+    /// <summary>
+    /// フォーカスを移動
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    /// <returns></returns>
+    private async Task<bool> BeforeAutoNextFocus(ValidField sender, ValidEventArgs e)
+    {
+        if (sender.Index == Data.Fields.Count - 1 && e.EnterPush)
+        {
+            await btnSave.FocusAsync();   //ここから非同期処理
+            return false;
+        }
+        return true;
+    }
+
+    /// <summary>
+    /// Endキー
+    /// </summary>
+    /// <param name="item"></param>
+    private async Task ShowListAction(ViewModel.ValidField item)
+    {
+        if (item.Name == "ZipCode")
+        {
+            if(item.Text.Length == 0) { return; }
+            using (DataTable data = await HotelPms.DataAccessGrpc.Client.AddressAccess.GetPostNoSearch(Channel, item.Text))
+            {
+                if (data.Rows.Count == 0)
+                {
+                    await DialogService.ShowMessageBox($"{item.Caption}検索","該当データがありません。",yesText: "OK");
+                    return;
+                }
+
+                if (data.Rows.Count > 1000)
+                {
+                    await DialogService.ShowMessageBox($"{item.Caption}検索","対象データが1000件以上超えていますので、更に条件を調整してください。",yesText: "OK");
+                    return;
+                }
+
+                var parameters = new DialogParameters { ["Data"] = data };
+                var dialog = DialogService.Show<SelectList>($"{item.Caption}検索", parameters);
+                var ret = await dialog.Result;
+                if (!ret.Cancelled)
+                {
+                    var row = ret.Data as DataRow;
+                    item.Text = row[0].ToString();
+                    Data.GetField("Address2").Text = row[1].ToString();
+                    StateHasChanged();
+                }
+            }
+        }
+        else if (item.Name == "Address2")
+        {
+            if(item.Text.Length == 0) { return; }
+            using (DataTable data = await HotelPms.DataAccessGrpc.Client.AddressAccess.GetAddressSearch(Channel, item.Text))
+            {
+                if (data.Rows.Count == 0)
+                {
+                    await DialogService.ShowMessageBox($"{item.Caption}検索","該当データがありません。",yesText: "OK");
+                    return;
+                }
+
+                if (data.Rows.Count > 1000)
+                {
+                    await DialogService.ShowMessageBox($"{item.Caption}検索","対象データが1000件以上超えていますので、更に条件を調整してください。",yesText: "OK");
+                    return;
+                }
+
+                var parameters = new DialogParameters { ["Data"] = data };
+                var dialog = DialogService.Show<SelectList>($"{item.Caption}検索", parameters);
+                var ret = await dialog.Result;
+                if (!ret.Cancelled)
+                {
+                    var row = ret.Data as DataRow;
+                    Data.GetField("ZipCode").Text = row[0].ToString();
+                    item.Text = row[1].ToString();                    
+                    StateHasChanged();
+                }
+            }
+        }
+        else
+        {
+            //await DialogService.ShowMessageBox(
+            //    "Warning",
+            //    "未実装!",
+            //    yesText: "OK", cancelText: "Cancel");
+        }
+    }
+
+    /// <summary>
+    /// 画面閉じる
+    /// </summary>
+    private void Close()
+    {
+        MudDialog.Cancel();
+    }
+
+    public void SetResvNo(string no)
+    {
+        Data.GetField("ResvNo").Text = no;
+        StateHasChanged();
+    }
+
+    /// <summary>
+    /// 保存
+    /// </summary>
+    private async void Save()
+    {
+        if (!await Data.IsValidAll())
+        {
+            //errorAll = Data.ErrText;
+            return;
+        }
+
+        //データ保存
+        using (BuildingAccess access = new BuildingAccess(Channel))
+        {
+            HotelPms.Data.Master.Building item = new HotelPms.Data.Master.Building()
+            {
+                ID = CConvert.ToInt(Data.GetField("ID").Text),
+                Name = Data.GetField("Name").Text,
+                ShortName = Data.GetField("ShortName").Text,
+                ZipCode = Data.GetField("ZipCode").Text,
+                Tel = Data.GetField("Tel").Text,
+                Fax = Data.GetField("Fax").Text,
+                Address2 = Data.GetField("Address2").Text,
+            };
+            //IMaster im = item as IMaster;
+
+            var result = Data.EditMode == (int)EMasterEditStatus.Create ?  await access.AddAsync(item) : await access.UpdateAsync(item);
+            if(result.ErrNo != 0)
+            {
+                errorAll = $"更新に失敗しました。";
+                OperationLog.Instance.WriteLog($"Building.Save:{result.ErrNo}.{result.ErrData}");
+                return; 
+            }
+        }
+
+        MudDialog.Close(DialogResult.Ok(Data));
+    }
+}
\ No newline at end of file

--
Gitblit v1.10.0