using HotelPms.Client.Blazor.Util;
using HotelPms.Data;
using HotelPms.Data.Common;
using Grpc.Net.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Channels;
using System.Threading.Tasks;
using HotelPms.Data.Client;
namespace HotelPms.Client.Blazor.ViewModel
{
public class ColSettingData
{
///
/// 帳票ID
///
public int ReportID { get; set; } = 0;
///
/// 帳票名
///
public string ReportName { get; set; }
///
/// 項目一覧(S_ReportCol)
///
public List OrgColList { get; set; }
///
/// 出力パターンID
///
public int OutputID { get; set; }
///
/// 出力パターン名
///
public string OutputName { get; set; }
///
/// 出力パターン候補一覧
///
internal List OutputList { get; set; }
///
/// 第一ソート順
///
public string Sort1 { get; set; }
///
/// 第二ソート順
///
public string Sort2 { get; set; }
public List Rows { get; set; }
///
/// 帳票設定データの作成
///
///
///
///
public static async Task Create(int reportID, GrpcChannel channel)
{
string name = string.Empty;
GrpcSet grpcSet = await GrpcClient.GetDataSet(channel, (int)ESetActionType.ColSetting, $"{Environment.MachineName},{EnvironmentSetting.UserName},{reportID}");
if (grpcSet.ErrNo != 0) { return null; }
using (DataTable dataTable = grpcSet.Tables[0].ToDataTable())
{
if (dataTable.Rows.Count > 0)
{
name = dataTable.Rows[0]["Name"].ToString();
}
}
List list = new List();
using (DataTable dataTable = grpcSet.Tables[3].ToDataTable())
{
foreach(DataColumn col in dataTable.Columns)
{
list.Add(col.ColumnName);
}
}
//取得する(列設定情報)
ColSettingData data = new ColSettingData
{
ReportID = reportID,
ReportName = name,
OutputList = grpcSet.Tables[1].Convert(),
OrgColList = list,
Rows = new List(),
};
//Dict化
Dictionary dict = new Dictionary();
foreach (HotelPms.Data.Master.Output item in data.OutputList) { dict.Add(item.ID, item); }
//明細
using (DataTable detail = grpcSet.Tables[2].ToDataTable())
{
foreach (DataRow row in detail.Rows)
{
Data.Master.OutputItem outputItem = new Data.Master.OutputItem();
outputItem.ConvertDataRow(row);
Data.Master.Output parent = null;
if (!dict.TryGetValue(outputItem.OutputID, out parent)) { continue; }
parent.Items.Add(outputItem);
}
}
return data;
}
}
}