using ComponentFactory.Krypton.Toolkit;
using NXWMS.Client.Model.AppModels.Condition.Balance;
using NXWMS.Client.Model.AppModels.Condition.Common;
using NXWMS.Client.Model.AppModels.Result.Balance;
using NXWMS.Client.Model.AppModels.Result.Common;
using NXWMS.Client.Model.AppModels.Result.OutStock;
using NXWMS.Client.Model.CoreModels;
using NXWMS.Commons;
using NXWMS.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI.WebControls;
using System.Windows.Forms;
namespace NXWMS.Forms.OutStock.frmOutstockChild
{
///
/// 编辑发货单窗体
///
public partial class frmChildEditWmsOutInvoice : KryptonForm
{
///
/// 窗体构造函数
///
public frmChildEditWmsOutInvoice()
{
InitializeComponent();
InitmaterielBalanceDataControl();
}
#region 全局变量
///
/// 库存物料数据的浮动DataGridView数据表
///
private KryptonDataGridView kdgv_materielBalanceData = new KryptonDataGridView();
///
/// 发货单主键ID
///
public string InvoiceId { get; set; }
///
/// 数据库中的发货单所有数据(包括主、明细表)。
/// 未进行编辑过。
///
private WmsOutInvoiceResult InvoiceDataNotEdit = new WmsOutInvoiceResult();
#endregion
#region 初始化数据
///
/// 窗体加载函数
///
///
///
private void frmChildEditWmsOutInvoice_Load(object sender, EventArgs e)
{
InitComboBoxItemData();
kdtp_InvoiceEndTime.Checked = false;
LoadWmsOutInvoiceDtlData();
}
///
/// 初始化下拉列表数据
///
private void InitComboBoxItemData()
{
/*
ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。
*/
List results = new List();
#region 单据类型
results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "InvoiceTypeDesc");
if (results.Count > 0)
{
kcmb_InvoiceType.Items.Clear();
foreach (var item in results)
{
kcmb_InvoiceType.Items.Add(new ListItem
{
Value = item.DICTIONARY_ITEM_CODE,
Text = item.DICTIONARY_ITEM_NAME,
});
}
kcmb_InvoiceType.SelectedIndex = 0;
}
else
{
KryptonMessageBox.Show("未找到发货单类型的字典项数据!");
}
#endregion
}
///
/// 调用服务端接口,请求发货单明细表数据
///
///
private string LoadWmsOutInvoiceDtlData()
{
var result = WmsInvoiceService.wmsOutInvoiceService.GetWmsOutInvoiceDtlListForId(new WmsOutInvoiceResult { INVOICE_ID = Convert.ToInt32(this.InvoiceId) });
if (result.Status == OperateStatus.Success)
{
kcmb_InvoiceType.Text = result.Data.INVOICE_TYPE_NAME;
kcmb_InvoiceType.Enabled = false;
knud_InvoicePriority.Value = result.Data.INVOICE_PRIORITY;
//knud_InvoicePriority.Enabled = false;
ktb_Describe.Text = result.Data.DESCRIBE;
if (result.Data.INVOICE_END_TIME != new DateTime())
{
kdtp_InvoiceEndTime.Value = result.Data.INVOICE_END_TIME;
}
InvoiceDataNotEdit = result.Data;
kdgv_InvoiceDtlData.Rows.Clear();
foreach (WmsOutInvoiceDtlResult item in result.Data.WmsOutInvoiceDtlList)
{
int index = kdgv_InvoiceDtlData.Rows.Add();
kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
kdgv_InvoiceDtlData.Rows[index].Cells[1].Value = item.MATERIEL_CODE;
kdgv_InvoiceDtlData.Rows[index].Cells[2].Value = item.MATERIEL_NAME;
kdgv_InvoiceDtlData.Rows[index].Cells[3].Value = item.MATERIEL_BARCODE;
kdgv_InvoiceDtlData.Rows[index].Cells[4].Value = item.MATERIEL_SPEC;
kdgv_InvoiceDtlData.Rows[index].Cells[5].Value = item.BATCH_NO;
kdgv_InvoiceDtlData.Rows[index].Cells[6].Value = item.INVOICE_DEMAND_QTY;
kdgv_InvoiceDtlData.Rows[index].Cells[7].Value = item.UNIT_CODE;
kdgv_InvoiceDtlData.Rows[index].Cells[8].Value = item.PACKAGE_CODE;
}
return string.Empty;
}
else
{
return result.Message;
}
}
#region 初始化浮动DataGridView控件和数据
///
/// 初始化库存物料数据的浮动DataGridView数据表
///
private void InitmaterielBalanceDataControl()
{
this.Controls.Add(kdgv_materielBalanceData);
kdgv_materielBalanceData.Visible = false;
kdgv_materielBalanceData.AllowUserToAddRows = false;
kdgv_materielBalanceData.AllowUserToDeleteRows = false;
kdgv_materielBalanceData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
kdgv_materielBalanceData.MultiSelect = false;
kdgv_materielBalanceData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
kdgv_materielBalanceData.ScrollBars = System.Windows.Forms.ScrollBars.None;
kdgv_materielBalanceData.BorderStyle = System.Windows.Forms.BorderStyle.None;
kdgv_materielBalanceData.BackgroundColor = this.BackColor;
kdgv_materielBalanceData.BringToFront();
kdgv_materielBalanceData.ReadOnly = true;
kdgv_materielBalanceData.CellDoubleClick += kdgv_materielBalanceData_CellDoubleClick;
}
private void kdgv_materielBalanceData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
int rowIndex = e.RowIndex;
if (rowIndex >= 0)
{
string idX = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["序号"].Value.ToString();
string materielCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料编码"].Value.ToString();
string materielName = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料名称"].Value.ToString();
string materielBarCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料条码"].Value.ToString();
string materielSpec = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料规格"].Value.ToString();
string batchNo = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["批次号"].Value.ToString();
string balanceQty = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["库存数量"].Value.ToString();
string unitCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["单位"].Value.ToString();
string packageCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["包装"].Value.ToString();
if (kdgv_InvoiceDtlData.Rows.Count > 0)
{
foreach (DataGridViewRow item in kdgv_InvoiceDtlData.Rows)
{
string tmpBatchNo = item.Cells[5].Value == null ? "" : item.Cells[5].Value.ToString();
string tmpMateriel = item.Cells[1].Value == null ? "" : item.Cells[1].Value.ToString();
if (batchNo == tmpBatchNo && materielCode == tmpMateriel && !item.IsNewRow)
{
KryptonMessageBox.Show($"物料条码:【{tmpMateriel}】,批次号:【{tmpBatchNo}】 已经被添加到发货单明细,不允许重复添加。");
return;
}
}
}
int index = kdgv_InvoiceDtlData.Rows.Add();
kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
kdgv_InvoiceDtlData.Rows[index].Cells[1].Value = materielCode;
kdgv_InvoiceDtlData.Rows[index].Cells[2].Value = materielName;
kdgv_InvoiceDtlData.Rows[index].Cells[3].Value = materielBarCode;
kdgv_InvoiceDtlData.Rows[index].Cells[4].Value = materielSpec;
kdgv_InvoiceDtlData.Rows[index].Cells[5].Value = batchNo;
WmsOutInvoiceDtlResult invoiceDtlMd = InvoiceDataNotEdit.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == materielCode && x.BATCH_NO == batchNo);
if (invoiceDtlMd != null)
{
kdgv_InvoiceDtlData.Rows[index].Cells[6].Value = balanceQty;
}
kdgv_InvoiceDtlData.Rows[index].Cells[7].Value = unitCode;
kdgv_InvoiceDtlData.Rows[index].Cells[8].Value = packageCode;
this.kdgv_materielBalanceData.Visible = false;
this.kdgv_materielBalanceData.DataSource = null;
this.ktb_BatchNoMsg.Text = "";
this.ktb_MaterielMsg.Text = "";
}
}
private void Delay(int milliseconds)
{
var timer = new System.Timers.Timer(milliseconds) { AutoReset = false };
timer.Elapsed += delegate {
Invoke(new Action(() => {
DataGridViewCellEventArgs evta = new DataGridViewCellEventArgs(1, 0);
kdgv_materielBalanceData_CellDoubleClick(this.kdgv_materielBalanceData, evta);
timer.Dispose();
}));
};
timer.Start();
}
///
/// 物料信息输入内容变化事件
///
///
///
private void ktb_MaterielMsg_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.ktb_MaterielMsg.Text))
{
Point pot = this.ktb_MaterielMsg.Location;
pot.X = pot.X + 2;
pot.Y = pot.Y + this.ktb_MaterielMsg.Height * 2 + 2;
DataTable dt = CreateTable(new WmsStkBalanceDtlSearchMd
{
MaterielMsg = this.ktb_MaterielMsg.Text
//BatchNoMsg = this.ktb_BatchNoMsg.Text
});
if (dt.Rows.Count == 1 && this.ktb_MaterielMsg.Text == dt.Rows[0]["物料编码"].ToString())
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
this.kdgv_materielBalanceData.CurrentCell = this.kdgv_materielBalanceData.Rows[0].Cells[0];
Delay(300);
}
else
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
}
}
else
{
this.kdgv_materielBalanceData.Visible = false;
this.kdgv_materielBalanceData.DataSource = null;
}
}
///
/// 批次号输入内容变化事件
///
///
///
private void ktb_BatchNoMsg_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.ktb_BatchNoMsg.Text))
{
Point pot = this.ktb_BatchNoMsg.Location;
pot.X = pot.X + 2;
pot.Y = pot.Y + this.ktb_BatchNoMsg.Height * 2 + 2;
DataTable dt = CreateTable(new WmsStkBalanceDtlSearchMd
{
//MaterielMsg = this.ktb_MaterielMsg.Text,
BatchNoMsg = this.ktb_BatchNoMsg.Text
});
if (dt.Rows.Count == 1 && this.ktb_BatchNoMsg.Text == dt.Rows[0]["物料编码"].ToString())
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
this.kdgv_materielBalanceData.CurrentCell = this.kdgv_materielBalanceData.Rows[0].Cells[0];
Delay(300);
}
else
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
}
}
else
{
this.kdgv_materielBalanceData.Visible = false;
this.kdgv_materielBalanceData.DataSource = null;
}
}
private DataTable CreateTable(WmsStkBalanceDtlSearchMd SearchMd)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("序号");
dt.Columns.Add(dc);
dc = new DataColumn("物料编码");
dt.Columns.Add(dc);
dc = new DataColumn("物料名称");
dt.Columns.Add(dc);
dc = new DataColumn("物料规格");
dt.Columns.Add(dc);
dc = new DataColumn("物料条码");
dt.Columns.Add(dc);
dc = new DataColumn("批次号");
dt.Columns.Add(dc);
dc = new DataColumn("库存数量");
dt.Columns.Add(dc);
dc = new DataColumn("单位");
dt.Columns.Add(dc);
dc = new DataColumn("包装");
dt.Columns.Add(dc);
var result = WmsInvoiceService.wmsOutInvoiceService.GetBalanceForInvoice(new WmsStkBalanceDtlSearchMd
{
MaterielMsg = ktb_MaterielMsg.Text,
BatchNoMsg = ktb_BatchNoMsg.Text
});
if (result.Status == OperateStatus.Success)
{
if (result.Data.Count > 0)
{
int index = 0;
foreach (WmsStkBalanceDtlResult item in result.Data)
{
index++;
DataRow dr = dt.NewRow();
dr["序号"] = index;
dr["物料编码"] = item.MATERIEL_CODE;
dr["物料名称"] = item.MATERIEL_NAME;
dr["物料规格"] = item.MATERIEL_SPEC;
dr["物料条码"] = item.MATERIEL_BARCODE;
dr["批次号"] = item.BATCH_NO;
dr["库存数量"] = item.QTY;
dr["单位"] = item.UNIT_CODE;
dr["包装"] = item.PACKAGE_CODE;
dt.Rows.Add(dr);
}
}
}
return dt;
}
#endregion
#endregion
#region 按钮事件
private void btnConfirm_Click(object sender, EventArgs e)
{
WmsOutInvoiceResult mdInvoice = new WmsOutInvoiceResult();
mdInvoice.INVOICE_ID = InvoiceDataNotEdit.INVOICE_ID;
mdInvoice.INVOICE_NO = InvoiceDataNotEdit.INVOICE_NO;
mdInvoice.INVOICE_TYPE = ((ListItem)kcmb_InvoiceType.SelectedItem).Value;
mdInvoice.INVOICE_TYPE_NAME = kcmb_InvoiceType.Text;
if (kdtp_InvoiceEndTime.Checked)
{
mdInvoice.INVOICE_END_TIME = kdtp_InvoiceEndTime.Value;
}
else
{
mdInvoice.INVOICE_END_TIME = new DateTime();
}
mdInvoice.INVOICE_STATUS = InvoiceDataNotEdit.INVOICE_STATUS;
mdInvoice.INVOICE_PRIORITY = Convert.ToInt32(knud_InvoicePriority.Value);
mdInvoice.DESCRIBE = ktb_Describe.Text.Trim();
mdInvoice.CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
mdInvoice.UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
List mdInvoiceDtlList = new List();
if (kdgv_InvoiceDtlData.Rows.Count > 0 && !kdgv_InvoiceDtlData.Rows[0].IsNewRow)
{
foreach (DataGridViewRow dvr in kdgv_InvoiceDtlData.Rows)
{
if (!dvr.IsNewRow)
{
#region 校验每一行数据的完整性
string RowCheckMsg = string.Empty;
if (!CheckDataGridViewRowFormat(dvr, ref RowCheckMsg))
{
KryptonMessageBox.Show(RowCheckMsg);
return;
}
#endregion
string materielCode = dvr.Cells[1].Value.ToString();
string materielName = dvr.Cells[2].Value.ToString();
string materielBarcode = dvr.Cells[3].Value == null ? null : dvr.Cells[3].Value.ToString();
string materielSpec = dvr.Cells[4].Value == null ? null : dvr.Cells[4].Value.ToString();
string batchNo = dvr.Cells[5].Value == null ? null : dvr.Cells[5].Value.ToString();
decimal invoiceQty = Convert.ToDecimal(dvr.Cells[6].Value.ToString());
string unitCode = dvr.Cells[7].Value == null ? null : dvr.Cells[7].Value.ToString();
string packageCode = dvr.Cells[8].Value == null ? null : dvr.Cells[8].Value.ToString();
WmsOutInvoiceDtlResult invoiceDtlMd = InvoiceDataNotEdit.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == materielCode && x.BATCH_NO == batchNo);
mdInvoiceDtlList.Add(new WmsOutInvoiceDtlResult
{
INVOICE_DTL_ID = invoiceDtlMd == null ? 0 : invoiceDtlMd.INVOICE_DTL_ID,
MATERIEL_CODE = materielCode,
MATERIEL_NAME = materielName,
MATERIEL_BARCODE = materielBarcode,
BATCH_NO = batchNo,
INVOICE_DEMAND_QTY = invoiceQty,
UNIT_CODE = unitCode,
PACKAGE_CODE = packageCode,
CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
DESCRIBE = null
});
}
}
#region 校验明细行 不能存在相同批次、物料条码的数据行
var strList = mdInvoiceDtlList.GroupBy(x => new { x.MATERIEL_CODE, x.BATCH_NO }).Select(x => new { Key = x.Count(), MATERIEL_CODE = x.Key.MATERIEL_CODE, BATCH_NO = x.Key.BATCH_NO }).ToList();
foreach (var item in strList)
{
if (item.Key > 1)
{
KryptonMessageBox.Show($"相同的物料:【{item.MATERIEL_CODE}】,批次号:【{item.BATCH_NO}】只能添加一行数据,请修正输入数据行!");
return;
}
}
#endregion
List finalInvoiceDtlList = new List();
foreach (WmsOutInvoiceDtlResult itemOld in InvoiceDataNotEdit.WmsOutInvoiceDtlList)
{
WmsOutInvoiceDtlResult arrDtlNew = mdInvoiceDtlList.Find(x => x.MATERIEL_CODE == itemOld.MATERIEL_CODE && x.BATCH_NO == itemOld.BATCH_NO);
if (arrDtlNew != null)
{
arrDtlNew.INVOICE_DTL_STATUS = itemOld.INVOICE_DTL_STATUS;
arrDtlNew.REMARKS1 = "更新";
finalInvoiceDtlList.Add(arrDtlNew);
}
else
{
itemOld.INVOICE_DTL_STATUS = (int)InvoiceStatus.已删除;
itemOld.REMARKS1 = "删除";
finalInvoiceDtlList.Add(itemOld);
}
}
foreach (WmsOutInvoiceDtlResult itemNew in mdInvoiceDtlList)
{
if (itemNew.INVOICE_DTL_ID == 0)
{
itemNew.REMARKS1 = "添加";
finalInvoiceDtlList.Add(itemNew);
}
}
mdInvoice.WmsOutInvoiceDtlList = finalInvoiceDtlList;
var result = WmsInvoiceService.wmsOutInvoiceService.EditWmsOutInvoiceData(mdInvoice);
if (result.Status == OperateStatus.Success)
{
KryptonMessageBox.Show(result.Message);
frmWmsOutInvoice.RefreshFrmHost();
this.Close();
}
else
{
KryptonMessageBox.Show(result.Message);
}
}
else
{
DialogResult dr = KryptonMessageBox.Show("由于明细为空,确定要删除发货单所有数据吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
var result = WmsInvoiceService.wmsOutInvoiceService.DeleteWmsOutInvoiceData(new WmsOutInvoiceResult { INVOICE_NO = InvoiceDataNotEdit.INVOICE_ID.ToString(), UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId });
if (result.Status == OperateStatus.Success)
{
KryptonMessageBox.Show(result.Message);
frmWmsOutInvoice.RefreshFrmHost();
this.Close();
}
else
{
KryptonMessageBox.Show(result.Message);
}
}
}
}
///
/// 校验DataGridView输入行数据的正确性
///
/// DataGridView输入行
/// 校验结果信息
///
private bool CheckDataGridViewRowFormat(DataGridViewRow dvr, ref string OutMssg)
{
if (dvr.Cells[6].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入发货数量!";
return false;
}
else
{
if (!Regex.IsMatch(dvr.Cells[6].Value.ToString(), @"([1-9]\d*(\.\d*[1-9])?)"))
{
OutMssg = $"第【{dvr.Index + 1}】行输入的发货数量不是合法的数字类型,请检查!";
return false;
}
}
OutMssg = "校验成功!";
return true;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
#endregion
#region DataGridView相关事件
#endregion
#region 鼠标右键单击事件
private void 删除选中行ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!kdgv_InvoiceDtlData.CurrentRow.IsNewRow)
{
kdgv_InvoiceDtlData.Rows.Remove(kdgv_InvoiceDtlData.CurrentCell.OwningRow);
//foreach (DataGridViewRow item in kdgv_InvoiceDtlData.Rows)
//{
// int index = item.Index;
// kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
//}
}
}
private void 全部删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
kdgv_InvoiceDtlData.Rows.Clear();
}
private void 重新加载ToolStripMenuItem_Click(object sender, EventArgs e)
{
var loadfrm = new frmLoading();
loadfrm.Show();
var message = loadfrm.EventCalExec(LoadWmsOutInvoiceDtlData);
if (!string.IsNullOrWhiteSpace(message))
{
KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion
}
}