using HotelPms.Data.Common.Util;
|
using HotelPms.Share.Data;
|
using HotelPms.Share.IO;
|
using System.Data.Common;
|
using System.Reflection;
|
using System.Text;
|
|
namespace HotelPms.Data.UseInfo
|
{
|
/// <summary>
|
/// サーバー側の処理
|
/// ①データR/W
|
/// ②クラウド中の計算
|
/// </summary>
|
public partial class Use
|
{
|
private Dictionary<int, UsePerson> personDict = new();
|
private Dictionary<int, UseDetail> detailDict = new();
|
private Dictionary<string, UseRoom> useRoomDict = new(); //DetailID,UseDate
|
|
/// <summary>
|
/// 利用情報の更新SQL生成
|
/// </summary>
|
/// <returns></returns>
|
public string ToSql()
|
{
|
bool isNew = UpdateID == 0;
|
UseSql useSql = new UseSql(isNew, ID);
|
|
foreach (UsePerson person in PersonlList)
|
{
|
foreach(UsePersonFree personFree in person.FreeList) { useSql.UsePersonFree.AppendLine(personFree.AddSql()); }
|
foreach (UsePersonTel personTel in person.TelList) { useSql.UsePersonTel.AppendLine(personTel.AddSql()); }
|
useSql.UsePerson.AppendLine(person.AddSql());
|
}
|
|
foreach (UseMemo useMemo in MemoList) { useSql.UseMemo.AppendLine(useMemo.AddSql()); }
|
foreach (UseFree useFree in FreeList) { useSql.UseFree.AppendLine(useFree.AddSql()); }
|
|
// 利用明細
|
foreach (UseDetail useDetail in DetailList)
|
{
|
foreach (UseMemo useMemo in useDetail.MemoList) { useSql.UseMemo.AppendLine(useMemo.AddSql()); }
|
foreach (UseFree useFree in useDetail.FreeList) { useSql.UseFree.AppendLine(useFree.AddSql()); }
|
foreach (Rental rental in useDetail.RentalList) { useSql.Rental.AppendLine(rental.AddSql()); }
|
foreach (UseRoom useRoom in useDetail.UseRoomList)
|
{
|
foreach (UseFree useFree in useRoom.FreeList) { useSql.UseFree.AppendLine(useFree.AddSql()); }
|
foreach (UseAllo useAllo in useRoom.UseAlloList) { useSql.UseAllo.AppendLine(useAllo.AddSql()); }
|
foreach (Arrange arrange in useRoom.ArrangeList) { useSql.Arrange.AppendLine(arrange.AddSql()); }
|
foreach (Sale sale in useRoom.SaleList) { useSql.Sale.AppendLine(sale.AddSql()); }
|
foreach (Pay pay in useRoom.PayList) { useSql.Pay.AppendLine(pay.AddSql()); }
|
useSql.UseRoom.AppendLine(useRoom.AddSql());
|
}
|
useSql.UseDetail.AppendLine(useDetail.AddSql());
|
}
|
|
//更新直前にカウントする
|
UpdateID++;
|
useSql.Use.AppendLine(isNew ? AddSql() : UpdateSql());
|
|
|
StringBuilder sql = new StringBuilder();
|
sql.Append(useSql.ToString());
|
sql.AppendLine($"EXECUTE SaveUseAfter {ID}");
|
return sql.ToString();
|
}
|
|
/// <summary>
|
/// 利用者情報
|
/// </summary>
|
/// <param name="reader"></param>
|
/// <param name="use"></param>
|
public void SetUsePerson(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UsePerson item = new();
|
item.ConvertReader(reader);
|
PersonlList.Add(item);
|
personDict.Add(item.PersonID, item);
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 個人自由集計
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetUsePersonFree(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UsePersonFree item = new();
|
item.ConvertReader(reader);
|
UsePerson person = personDict[item.PersonID];
|
person.FreeList.Add(item);
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 個人電話
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetUsePersonTel(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UsePersonTel item = new();
|
item.ConvertReader(reader);
|
UsePerson person = personDict[item.PersonID];
|
person.TelList.Add(item);
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 利用明細
|
/// </summary>
|
/// <param name="reader"></param>
|
/// <param name="use"></param>
|
public void SetUseDetail(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UseDetail item = new();
|
item.ConvertReader(reader);
|
DetailList.Add(item);
|
detailDict.Add(item.DetailID, item);
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 利用部屋
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetUseRoom(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UseRoom item = new();
|
item.ConvertReader(reader);
|
UseDetail detail = detailDict[item.DetailID];
|
detail.UseRoomList.Add(item);
|
item.Parent = detail;
|
useRoomDict.Add($"{item.DetailID},{item.UseDate.Value}", item);
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 部屋割り
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetUseAllo(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UseAllo item = new();
|
item.ConvertReader(reader);
|
UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"];
|
useRoom.UseAlloList.Add(item);
|
item.Parent = useRoom;
|
item.Detail = detailDict[item.DetailID];
|
item.Person = personDict[item.PersonID];
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 自由集計
|
/// </summary>
|
/// <param name="reader"></param>
|
/// <param name="use"></param>
|
public void SetUseFree(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UseFree item = new();
|
item.ConvertReader(reader);
|
|
if (item.DetailID == 0)
|
{
|
//利用情報の自由集計
|
FreeList.Add(item);
|
item.Parent = this;
|
}
|
else if (item.UseDate.CompareTo(customTypes.Date.MinUseDate) <= 0)
|
{
|
//利用明細の自由集計
|
UseDetail detail = detailDict[item.DetailID];
|
detail.FreeList.Add(item);
|
item.Parent = detail;
|
}
|
else
|
{
|
//利用部屋の自由集計
|
UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"];
|
useRoom.FreeList.Add(item);
|
item.Parent = useRoom;
|
}
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// メモ
|
/// </summary>
|
/// <param name="reader"></param>
|
/// <param name="use"></param>
|
public void SetUseMemo(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
UseMemo item = new();
|
item.ConvertReader(reader);
|
|
if (item.DetailID == 0)
|
{
|
//利用情報
|
MemoList.Add(item);
|
item.Parent = this;
|
}
|
else
|
{
|
//利用明細
|
UseDetail detail = detailDict[item.DetailID];
|
detail.MemoList.Add(item);
|
item.Parent = detail;
|
}
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 売上
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetSale(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
Sale item = new();
|
item.ConvertReader(reader);
|
UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"];
|
useRoom.SaleList.Add(item);
|
item.Parent = useRoom;
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 入金
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetPay(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
Pay item = new();
|
item.ConvertReader(reader);
|
UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"];
|
useRoom.PayList.Add(item);
|
item.Parent = useRoom;
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 手配情報
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetArrange(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
Arrange item = new();
|
item.ConvertReader(reader);
|
UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"];
|
useRoom.ArrangeList.Add(item);
|
item.Parent = useRoom;
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// 備品情報
|
/// </summary>
|
/// <param name="reader"></param>
|
public void SetRental(DbDataReader reader)
|
{
|
while (reader.Read())
|
{
|
Rental item = new();
|
item.ConvertReader(reader);
|
UseDetail detail = detailDict[item.DetailID];
|
detail.RentalList.Add(item);
|
item.Parent = detail;
|
}
|
reader.NextResult();
|
}
|
|
/// <summary>
|
/// バッファークリア
|
/// </summary>
|
public void ClearDict()
|
{
|
personDict.Clear();
|
detailDict.Clear();
|
useRoomDict.Clear();
|
}
|
|
/// <summary>
|
/// 利用情報取得
|
/// ※サーバー中のバッファーより、マスタ名も取得する
|
/// </summary>
|
/// <param name="id"></param>
|
/// <returns></returns>
|
public static Use? Get(int id, DataAccess access)
|
{
|
try
|
{
|
string sql = $"EXECUTE GetUse {id}";
|
OperationLog.Instance.WriteLog($"データ読込:{sql}");
|
Use item = access.GetDataReader<Use>(sql, (reader, use) =>
|
{
|
use.ClearDict();
|
if (reader.Read()) { use.ConvertReader(reader); reader.NextResult(); } //D_Use
|
use.SetUsePerson(reader); //D_UsePerson
|
use.SetUsePersonFree(reader); //D_UsePersonFree
|
use.SetUsePersonTel(reader); //D_UsePersonTel
|
use.SetUseDetail(reader); //D_UseDetail
|
use.SetUseRoom(reader); //D_UseRoom
|
use.SetUseAllo(reader); //D_UseAllo
|
use.SetUseFree(reader); //D_UseFree
|
use.SetUseMemo(reader); //D_UseMemo
|
use.SetRental(reader); //D_Rental
|
use.SetSale(reader); //D_Sale
|
use.SetPay(reader); //D_Pay
|
use.SetArrange(reader); //D_Arrange
|
});
|
return item;
|
}
|
catch (Exception ex)
|
{
|
OperationLog.Instance.WriteLog($"{MethodInfo.GetCurrentMethod()}:{ex.Message}");
|
return null;
|
}
|
}
|
}
|
}
|