using System;
using System.Data;
using System.Linq;
using System.Web.UI.WebControls;
using SuperMap.RealEstate.CoreFrameWork;
using SuperMap.RealEstate.CoreFrameWork.Dictionary.Business;
using SuperMap.RealEstate.Enums;
using SuperMap.RealEstate.Web.Utility;
using SuperMap.RealEstate.Web.UI.WebControls;
using SuperMap.RealEstate.WorkFlow;
using Support = SuperMap.RealEstate.WorkFlow.Support.Business;
using Instance = SuperMap.RealEstate.WorkFlow.Instance.Business;
using RunningBusiness = SuperMap.RealEstate.SaleStore.Running.Business;
using WFIA = SuperMap.RealEstate.WorkFlow.Instance.Business;
namespace SuperMap.RealEstate.SaleStore.Storage.Compents
{
public partial class Default : SuperMap.RealEstate.Web.UI.PageModule
{
#region 方法 -> 页面加载事件
protected void Page_Load(object sender, EventArgs e)
{
//if (string.IsNullOrWhiteSpace(PassportInfo.ProvinceCode))
//{
// //获取平台账号关联手机号码、省份编码、业主单位
// DataTable UserTable = new FrameWork.Business.User(Transaction).ExecuteDataTable(
// "SELECT USER_MOBILEPHONE,USER_PROVINCE,PROVINCE_UNIT FROM T_USER WHERE User_ID = " + PassportInfo.ID);
// if (UserTable.Rows.Count > 0)
// {
// PassportInfo.ProvinceUnit = UserTable.Rows[0]["PROVINCE_UNIT"].ToString();
// PassportInfo.UserMobilephone = UserTable.Rows[0]["USER_MOBILEPHONE"].ToString();
// PassportInfo.ProvinceCode = UserTable.Rows[0]["USER_PROVINCE"].ToString();
// }
//}
//if (PassportInfo.ProvinceCode == "510000")
//{
// if ((DateTime.Now.Hour >= 10 && DateTime.Now.Hour < 12) ||
// (DateTime.Now.Hour >= 14 && DateTime.Now.Hour < 17))
// {
// Response.Write("");
// Response.Write(@"
//
// 目前应用程序使用人数较多...系统繁忙...请在空闲时重试!
//
");
// Response.End();
// return;
// }
//}
if (IsPostBack) return;
BindDropDownList_SERVERPART();
#region 业务类型下拉列表
OPERATION_TYPE.Items.Clear();
DataSet _DataSet = new DataSet();
if (Request["DataType"] == "List" && !string.IsNullOrEmpty(Request["Operation_Type"]))
{
FieldExplain _FieldExplain = DictionaryHelper.GetFieldExplain("OPERATION_TYPE", Transaction);
FieldEnum _FieldEnum = new FieldEnum(Transaction);
_FieldEnum.AddSearchParameter("FieldExplain_ID", _FieldExplain.FieldExplain_ID);
_FieldEnum.AddSearchParameter("FieldEnum_Value", Request["Operation_Type"]);
if (_FieldEnum.Search())
{
ListItemEx _ListItemEx = new ListItemEx();
_ListItemEx.Text = _FieldEnum.FieldEnum_Name;
_ListItemEx.Value = _FieldEnum.FieldEnum_Value;
_ListItemEx.Level = 0;
OPERATION_TYPE.Items.Add(_ListItemEx);
foreach (FieldEnum OperationType in _FieldEnum.FillCollection("Where FieldEnum_Pid = " +
_FieldEnum.FieldEnum_ID + " ORDER BY FieldEnum_Index,FieldEnum_Value"))
{
_ListItemEx = new ListItemEx();
_ListItemEx.Text = OperationType.FieldEnum_Name;
_ListItemEx.Value = OperationType.FieldEnum_Value;
_ListItemEx.Level = 1;
OPERATION_TYPE.Items.Add(_ListItemEx);
}
}
Support.ProDefType _ProDefType = new Support.ProDefType(Transaction);
//获取所有的分类节点
DataTable _DataTableType = _ProDefType.FillDataTable("order by ProDefType_PID,ProDefType_Index,ProDefType_ID");
//按照权限来过滤节点
string _SQLStr = @"Select A.* From V_ListAccept A,PlatForm_Dictionary.V_FieldEnum B,PlatForm_Dictionary.T_FieldEnum C
Where A.User_ID = " + PassportInfo.ID + " And B.FieldExplain_Field = 'OPERATION_TYPE' And C.FieldEnum_Value = '" +
Request["Operation_Type"] + "' And A.Operation_Type = B.FieldEnum_Value And B.FieldEnum_Pid = C.FieldEnum_ID";
DataTable _DataTableUser = _ProDefType.ExecuteDataTable(_SQLStr);
_DataSet.Tables.Add(_DataTableType.Copy());
_DataSet.Tables.Add(_DataTableUser.Copy());
_DataSet.AcceptChanges();
}
else
{
OPERATION_TYPE.Items.Add(new Web.UI.WebControls.ListItemEx() { Text = "全部", Value = "-1" });
DictionaryHelper.BindingDropDownList("Operation_Type", OPERATION_TYPE.Items, Transaction);
if (!string.IsNullOrEmpty(Request["Operation_Type"]))
{
OPERATION_TYPE.Value = Request["Operation_Type"];
OPERATION_TYPE.Enabled = false;
}
_DataSet = SupportHelper.GetAcceptDataSet(PassportInfo.ID.ToString(), OPERATION_TYPE.Value, this.Transaction);
}
#endregion
//绑定业务流程树
if (_DataSet.Tables[1].Rows.Count == 1)
{
LayoutButtonAccept.Visible = false;
CallBackButtonAccept.Attributes["key"] = _DataSet.Tables[1].Rows[0]["ProDef_ID"].ToEncrypt() + "&Module_ID=" +
this.ModuleInfo.ID.Value.ToEncrypt() + NewMethod(_DataSet.Tables[1].Rows[0]["Enabled_Division"].ToString());
CallBackButtonAccept.OnClientClick = "return WorkFlowPlatform_Accept(event,this);";
}
else
{
LayoutButtonAccept.Visible = _DataSet.Tables[1].Rows.Count > 0;
CallBackButtonAccept.Visible = false;
TreeViewBinding("-1", MyTreeView.Nodes, _DataSet);
}
//所有城区权限时,不在显示
//Division_Code.Visible = PassportInfo.EnabledCityAuthority;
//加载列表数据
BindGridVew();
// BindGridViewHeadText();
//设置回车焦点按钮
SetControlClientAction(ButtonSearch);
}
///
/// 返回业务流程服务区编码
///
///
///
private string NewMethod(string Enabled_Division)
{
if (Enabled_Division == "1")
{
return "&Enabled_Division=" + Division_Code.ClientID;
}
return "";
}
#region 设置页面模块guid
protected override void OnInit(EventArgs e)
{
if (Request["Module_ID"] != null)
{
this.AddModule_Guid(Guid.Empty.ToString());
}
this.AddModule_Guid("45ca39de-5de5-465f-9718-969e16023711");
base.OnInit(e);
}
#endregion
#region 绑定服务区下拉框
public void BindDropDownList_SERVERPART()
{
//加载服务区
Business.CommonHelper.BindServerPart(Transaction, SERVERPART_ID, "所有服务区", "1=1", "1=1", PassportInfo.CityAuthority, "1000,1001");
//绑定业务所在区域
Division_Code.Items.Clear();
Division_Code.Items.Add(new ListItemEx("全部", "-1"));
Division_Code.Items.Add(new ListItemEx("非区域流程", "0") { Level = 1 });
DictionaryHelper.BindingDivisionCode(PassportInfo, Division_Code.Items, this.Transaction);
}
#endregion
#region 绑定业务流程树
string _NavigateElement = " {1}";
private void TreeViewBinding(string pid, TreeNodeCollection Nodes, DataSet dataSet)
{
var pairCollection1 = from m in dataSet.Tables[0].Select("ProDefType_PID=" + pid)
select new TreeNode()
{
Text = " " + m["ProDefType_Name"].ToString(),
Value = m["ProDefType_ID"].ToString(),
NavigateUrl = "javascript:void(0);",
ImageUrl = TreeNodeImageUrl.BusinessSystem
};
foreach (var pair1 in pairCollection1)
{
TreeViewBinding(pair1.Value, pair1.ChildNodes, dataSet);
var pairCollection2 = from m in dataSet.Tables[1].Select("ProDefType_ID=" + pair1.Value)
select new TreeNode()
{
Text = string.Format(_NavigateElement, m["ProDef_ID"].ToEncrypt() +
"&Module_ID=" + this.ModuleInfo.ID.Value.ToEncrypt() +
NewMethod(m["Enabled_Division"].ToString()), m["ProDef_Name"].ToString()),
Value = m["ProDef_ID"].ToString(),
NavigateUrl = "javascript:void(0);",
ImageUrl = TreeNodeImageUrl.Module
};
foreach (var pair2 in pairCollection2)
{
pair1.ChildNodes.Add(pair2);
}
if (pair1.ChildNodes.Count > 0)
{
Nodes.Add(pair1);
}
}
}
#endregion
#endregion
#region 方法 -> 加载列表数据
private void BindGridVew()
{
//加载列表
BindGridViewHeadText();
GetData();
}
#region 方法 -> 绑定表头名称
private void BindGridViewHeadText()
{
switch (Request["Operation_Type"])
{
case "200100":
GridViewEx1.Columns[2].HeaderText = "领用门店";
GridViewEx1.Columns[3].Visible = false;
GridViewEx1.Columns[4].Visible = false;
GridViewEx1.Columns[5].HeaderText = "领用说明";
GridViewEx1.Columns[6].HeaderText = "领用数量";
GridViewEx1.DataTableName = "SALESTORE_RUNNING.V_SSP_RECEIVE";
break;
case "200200":
GridViewEx1.Columns[0].HeaderText = "调出服务区";
GridViewEx1.Columns[2].HeaderText = "调出门店";
GridViewEx1.Columns[3].Visible = true;
GridViewEx1.Columns[4].Visible = true;
GridViewEx1.Columns[5].HeaderText = "调货说明";
GridViewEx1.Columns[6].HeaderText = "调货数量";
GridViewEx1.DataTableName = "SALESTORE_RUNNING.V_SSP_TRANSFER";
break;
case "200300":
GridViewEx1.Columns[2].HeaderText = "退货门店";
GridViewEx1.Columns[3].Visible = false;
GridViewEx1.Columns[4].Visible = false;
GridViewEx1.Columns[5].HeaderText = "退货说明";
GridViewEx1.Columns[6].HeaderText = "退货数量";
GridViewEx1.DataTableName = "SALESTORE_RUNNING.V_SSP_BACK";
break;
}
}
#endregion
#region 获取列表数据
public void GetData()
{
#region 拼接查询条件
string dataWhere = "";//数据查询条件
string workWhere = "";//工作流查询条件
if (!string.IsNullOrEmpty(SERVERPART_ID.SelectedValue) && SERVERPART_ID.SelectedValue != "1=1")
{
dataWhere = "SERVERPART_ID = " + SERVERPART_ID.SelectedValue;
}
if (!string.IsNullOrEmpty(COMMODITY_NAME.Text.Trim()))
{
dataWhere += (dataWhere == "" ? "" : " AND ") +
"EXISTS (SELECT 1 FROM SALESTORE_RUNNING.V_SALESTOREPROINST_COMMODITY WHERE (COMMODITY_NAME LIKE '%" +
COMMODITY_NAME.Text.Trim() + "%' OR COMMODITY_BARCODE LIKE '%" + COMMODITY_NAME.Text.Trim() +
"%') AND SALESTORE_RUNNING.V_SALESTOREPROINST_COMMODITY.SALESTOREPROINST_ID = " +
GridViewEx1.DataTableName + ".SALESTOREPROINST_ID)";
}
workWhere = " WHERE USER_ID=" + PassportInfo.ID + " AND OPERATION_TYPE=" + Request["Operation_Type"];
dataWhere = dataWhere == "" ? "" : " WHERE " + dataWhere;
#endregion
#region 查询数据
DataTable dtData = new RunningBusiness.APPROVED(Transaction).ExecuteDataTable(
"SELECT * FROM " + GridViewEx1.DataTableName + dataWhere);
DataTable dtWork = new WFIA.Approved(Transaction).ExecuteDataTable(
"SELECT * FROM WORKFLOW_INSTANCE.V_SALESTOREPROINST_WORKFLOW" + workWhere);
#endregion
#region 业务数据与工作流联合查询
if (dtWork.Rows.Count == 0 || dtData.Rows.Count == 0)
{
GridPageEx1.RecordCount = 0;
GridViewEx1.DataSource = new DataTable();
GridViewEx1.DataBind();
}
else
{
var query = dtData.AsEnumerable().
Join(dtWork.AsEnumerable(), d => d.Field("REPROINST_ID"), w => w.Field("PROINST_ID"),
(d, w) => new { d, w }).
GroupBy(data => new
{
SALESTOREPROINST_ID = data.d.Field("SALESTOREPROINST_ID"),
PROINST_DESC = data.d.Field("PROINST_DESC"),
STAFF_NAME = data.d.Field("STAFF_NAME"),
SERVERPART_ID = data.d.Field("SERVERPART_ID"),
SERVERPART_NAME = data.d.Field("SERVERPART_NAME"),
TARGETSERVERPART_NAME = data.d.Field("TARGETSERVERPART_NAME"),
TARGETSHOP_NAME = data.d.Field("TARGETSHOP_NAME"),
SHOPNAME = data.d.Field("SHOPNAME"),
BACK_COUNT = data.d.Field("BACK_COUNT"),
BACKTAXPRICE = data.d.Field("BACKTAXPRICE"),
BACKPRICE = data.d.Field("BACKPRICE"),
BACK_SELLTAXPRICE = data.d.Field("BACK_SELLTAXPRICE"),
BACK_SELLPRICE = data.d.Field("BACK_SELLPRICE"),
PROINST_ID = data.w.Field("PROINST_ID"),
PRODEF_ID = data.w.Field("PRODEF_ID"),
PRODEF_NAME = data.w.Field("PRODEF_NAME"),
TRANSACTION_TYPE = data.w.Field("TRANSACTION_TYPE"),
OPERATION_TYPE = data.w.Field("OPERATION_TYPE"),
PROINST_CODE = data.w.Field("PROINST_CODE"),
PROINST_NAME = data.w.Field("PROINST_NAME"),
PROINST_TYPE = data.w.Field("PROINST_TYPE"),
PROINST_STATE = data.w.Field("PROINST_STATE"),
DEPARTMENT_CODE = data.w.Field("DEPARTMENT_CODE"),
DEPARTMENT_NAME = data.w.Field("DEPARTMENT_NAME"),
PROINST_STARTDATE = data.w.Field("PROINST_STARTDATE"),
PROINST_ENDDATE = data.w.Field("PROINST_ENDDATE"),
PROINST_FINISHDATE = data.w.Field("PROINST_FINISHDATE"),
DATA_PUTINSTORAGE = data.w.Field("DATA_PUTINSTORAGE"),
APPRIZE_TYPE = data.w.Field("APPRIZE_TYPE"),
APPRIZE_VALUE = data.w.Field("APPRIZE_VALUE"),
ENABLED_LINKMAN = data.w.Field("ENABLED_LINKMAN"),
ENABLED_MATERIAL = data.w.Field("ENABLED_MATERIAL"),
ENABLED_CONSIGNOR = data.w.Field("ENABLED_CONSIGNOR"),
ENABLED_STATISTICS = data.w.Field("ENABLED_STATISTICS"),
DIVISION_CODE = data.w.Field("DIVISION_CODE"),
ENABLED_ARCHIVES = data.w.Field("ENABLED_ARCHIVES"),
ENABLED_DIVISION = data.w.Field("ENABLED_DIVISION"),
ENABLED_PROPOSER = data.w.Field("ENABLED_PROPOSER"),
PROINST_KEYVALUE = data.w.Field("PROINST_KEYVALUE"),
ACTINST_ID = data.w.Field("ACTINST_ID"),
NOWACTINST_ID = data.w.Field("NOWACTINST_ID"),
USER_ID = data.w.Field("USER_ID"),
USER_NAME = data.w.Field("USER_NAME"),
ACTINST_STARTDATE = data.w.Field("ACTINST_STARTDATE"),
ACTINST_STATE = data.w.Field("ACTINST_STATE")
}).Select(result => new
{
SALESTOREPROINST_ID = result.Key.SALESTOREPROINST_ID,
PROINST_DESC = result.Key.PROINST_DESC,
STAFF_NAME = result.Key.STAFF_NAME,
SERVERPART_ID = result.Key.SERVERPART_ID,
SERVERPART_NAME = result.Key.SERVERPART_NAME,
TARGETSERVERPART_NAME = result.Key.TARGETSERVERPART_NAME,
TARGETSHOP_NAME = result.Key.TARGETSHOP_NAME,
SHOPNAME = result.Key.SHOPNAME,
BACK_COUNT = result.Key.BACK_COUNT,
BACKTAXPRICE = result.Key.BACKTAXPRICE,
BACKPRICE = result.Key.BACKPRICE,
BACK_SELLTAXPRICE = result.Key.BACK_SELLTAXPRICE,
BACK_SELLPRICE = result.Key.BACK_SELLPRICE,
PROINST_ID = result.Key.PROINST_ID,
PRODEF_ID = result.Key.PRODEF_ID,
PRODEF_NAME = result.Key.PRODEF_NAME,
TRANSACTION_TYPE = result.Key.TRANSACTION_TYPE,
OPERATION_TYPE = result.Key.OPERATION_TYPE,
PROINST_CODE = result.Key.PROINST_CODE,
PROINST_NAME = result.Key.PROINST_NAME,
PROINST_TYPE = result.Key.PROINST_TYPE,
PROINST_STATE = result.Key.PROINST_STATE,
DEPARTMENT_CODE = result.Key.DEPARTMENT_CODE,
DEPARTMENT_NAME = result.Key.DEPARTMENT_NAME,
PROINST_STARTDATE = result.Key.PROINST_STARTDATE,
PROINST_ENDDATE = result.Key.PROINST_ENDDATE,
PROINST_FINISHDATE = result.Key.PROINST_FINISHDATE,
DATA_PUTINSTORAGE = result.Key.DATA_PUTINSTORAGE,
APPRIZE_TYPE = result.Key.APPRIZE_TYPE,
APPRIZE_VALUE = result.Key.APPRIZE_VALUE,
ENABLED_LINKMAN = result.Key.ENABLED_LINKMAN,
ENABLED_MATERIAL = result.Key.ENABLED_MATERIAL,
ENABLED_CONSIGNOR = result.Key.ENABLED_CONSIGNOR,
ENABLED_STATISTICS = result.Key.ENABLED_STATISTICS,
DIVISION_CODE = result.Key.DIVISION_CODE,
ENABLED_ARCHIVES = result.Key.ENABLED_ARCHIVES,
ENABLED_DIVISION = result.Key.ENABLED_DIVISION,
ENABLED_PROPOSER = result.Key.ENABLED_PROPOSER,
PROINST_KEYVALUE = result.Key.PROINST_KEYVALUE,
ACTINST_ID = result.Key.ACTINST_ID,
NOWACTINST_ID = result.Key.NOWACTINST_ID,
USER_ID = result.Key.USER_ID,
USER_NAME = result.Key.USER_NAME,
ACTINST_STARTDATE = result.Key.ACTINST_STARTDATE,
ACTINST_STATE = result.Key.ACTINST_STATE
}).OrderByDescending(o => o.ACTINST_STARTDATE);
//获取当前页码,显示条数,分页展示数据
int nPageInde = 0, _RN = 0;
if (GridPageEx1.CurrentPageIndex < 0)
{
nPageInde = 0;
}
else
{
nPageInde = GridPageEx1.CurrentPageIndex;
}
_RN = nPageInde * GridPageEx1.PageSize;
GridPageEx1.RecordCount = query.Count();
GridViewEx1.DataSource = query.Skip(_RN).Take(GridPageEx1.PageSize);
GridViewEx1.DataBind();
}
#endregion
}
#endregion
#endregion
#region 方法 -> 查询
protected void ButtonSearch_CallBackClick(object sender, ClientSetEventArgs e)
{
Business.CommonHelper.RecordOperateLog(Transaction, "", Request["Module_ID"],
PassportInfo.ID, PassportInfo.Name, "执行“查询按钮”操作");
GetData();
e.SetValue(GridViewEx1);
e.SetValue(GridPageEx1);
}
#endregion
#region 方法 -> 翻页事件
protected void GridPageEx1_CallBackPageChanged(object src, ClientSetEventArgs e)
{
Business.CommonHelper.RecordOperateLog(Transaction, "", Request["Module_ID"],
PassportInfo.ID, PassportInfo.Name, "执行“翻页按钮”操作");
GetData();
e.SetValue(GridViewEx1);
}
#endregion
#region 方法 -> 查询SQL设置
public string sqlWhere = string.Empty;
protected void GridViewEx1_SelectMethodParameters(object sender, SelectMethodParametersArgs e)
{
////搜索选项的搜索条件过滤
//if (!string.IsNullOrEmpty(TextBox_Search.Text))
// e.AddOrParams(GridViewSearch1, TextBox_Search.Text);
////且搜索条件
//e.AddAndParams("USER_ID", PassportInfo.ID);
//if (OPERATION_TYPE.SelectedValue != "" && OPERATION_TYPE.SelectedValue != "1=1")
//{
// e.AddAndParams("OPERATION_TYPE", OPERATION_TYPE.SelectedValue);
//}
//if (!string.IsNullOrEmpty(SERVERPART_ID.SelectedValue) && SERVERPART_ID.SelectedValue != "1=1")
//{
// e.SetOtherUserCustomWhereSqlString = "SERVERPART_ID = " + SERVERPART_ID.SelectedValue;
//}
////else
////{
//// e.SetOtherUserCustomWhereSqlString = "SERVERPART_ID IN (" +
//// new HWSB.SERVERPART(Transaction).GetPassportServerPartID(PassportInfo.CityAuthority) + ")";
////}
//if (!string.IsNullOrEmpty(COMMODITY_NAME.Text.Trim()))
//{
// e.SetOtherUserCustomWhereSqlString += (e.SetOtherUserCustomWhereSqlString == "" ? "" : " AND ") +
// "EXISTS (SELECT 1 FROM SALESTORE_RUNNING.V_SALESTOREPROINST_COMMODITY WHERE (COMMODITY_NAME LIKE '%" +
// COMMODITY_NAME.Text.Trim() + "%' OR COMMODITY_BARCODE LIKE '%" + COMMODITY_NAME.Text.Trim() +
// "%') AND SALESTORE_RUNNING.V_SALESTOREPROINST_COMMODITY.SALESTOREPROINST_ID = " +
// GridViewEx1.DataTableName + ".SALESTOREPROINST_ID)";
//}
//e.AddOrderByParams("ACTINST_STARTDATE", true);
}
#endregion
#region 方法 -> 行绑定事件
protected void GridViewEx1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string _STAFF_NAME = GridViewEx1.DataKeys[e.Row.RowIndex]["STAFF_NAME"] == null ?
"" : GridViewEx1.DataKeys[e.Row.RowIndex]["STAFF_NAME"].ToString();
string _ProInst_ID = GridViewEx1.DataKeys[e.Row.RowIndex]["ProInst_ID"].ToEncrypt();
string _NowActInst_ID = GridViewEx1.DataKeys[e.Row.RowIndex]["NowActInst_ID"].ToEncrypt();
string _DataKeyValue = GridViewEx1.DataKeys[e.Row.RowIndex]["ActInst_State"] == null ?
"" : GridViewEx1.DataKeys[e.Row.RowIndex]["ActInst_State"].ToString();
e.Row.Cells[5].Text = _STAFF_NAME + ":" + e.Row.Cells[5].Text;
e.Row.Attributes.Add("ondblclick", "return WorkFlowPlatform_Transact(event,\"?NowActInst_ID=" +
_NowActInst_ID + "&Module_ID=" + Request["Module_ID"] + "&ProInst_ID=" + _ProInst_ID + "\",false);");
if (!String.IsNullOrEmpty(_DataKeyValue))
{
Enums.ActInstState _ActInstState = EnumHelper.Parse(_DataKeyValue);
switch (_ActInstState)
{
case ActInstState.Normal:
break;
case ActInstState.OverRule:
FixProInstCode(e.Row, e.Row.Cells.Count - 5, "退", "red");
break;
case ActInstState.TurnOver:
FixProInstCode(e.Row, e.Row.Cells.Count - 5, "移", "red");
break;
}
}
}
}
#region 设置列表文本内容样式
private void FixProInstCode(GridViewRow Row, int index, string value, string color = "#ff5c00")
{
Row.Cells[index].Text = "[" + value + "] " + Row.Cells[index].Text;
}
#endregion
#endregion
}
}