/****************************** * 说明:流转类别设置 * 创建人:龚宇超 * 创建日期:2019-06-21 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Lskj.Business; using Lskj.Business.Impl; using Lskj.Model; using Lskj.Workflow.Model; using Lskj.Control; namespace Lskj.Workflow.Control { /// /// 流转类别设置 /// public partial class StepPage1 : UserControl { /// /// 控件摆放固定X轴位置 /// private int[] mLocationX = { 10, 120, 230, 340, 450, 560, 670 }; /// /// 控件摆放固定Y轴位置 /// private int[] mLocationY = { 10, 40, 70, 100, 130, 160, 190, 220, 250, 280, 310, 340, 370 }; /// /// 模块编号 /// public string mMenuCode; /// /// 单据对象 /// public BillModel mBillModel; /// /// 选中的流转步骤 /// public StepItem1 SeletStepItem1Obj; /// /// 当前选中的流转步骤对象 /// public BillflowModel SelectBillflowModel; /// /// 单据流转集合 /// public List BillflowModelList = new List(); /// /// 主页转过来的操作权限 /// public bool SerpPagePower; public StepPage1() { InitializeComponent(); } #region 私有方法 /// /// 说明:初始化流转步骤 /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeStepFlow() { this.PlStep1Container.Controls.Clear(); DataTable table = WorkFlowBillImpl.GetBillFlowData(mMenuCode); BillflowModelList.Clear(); if (table.Rows.Count == 0) { this.panelControl1.Visible = false; return; } this.panelControl1.Visible = true; for (int i = table.Rows.Count; i > 0; i--) { DataRow rowItem = table.Rows[i - 1]; BillflowModel model = new BillflowModel(rowItem); // 设置面板值 if (i == 1) { this.SelectBillflowModel = model; this.SetFlowItem(model); } this.PlStep1Container.Controls.Add(this.InitStepFlowItem(model, i)); this.BillflowModelList.Add(model); if (this.xtraScrollableControl1.Controls.Count == 0 && this.xtraScrollableControl2.Controls.Count == 0) { this.InitializeMainField(); this.InitializeDetailField(); } } } /// /// 说明:初始化主表字段 /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeMainField() { if (SelectBillflowModel != null) { int rowcount = 7; int width = 100, height = 20; int left = 0, top = 0; DataTable table = BaseModuleImpl.GetControlLocation(this.mBillModel.FormKey, mMenuCode); DataTable editTable = table.Select("visible=0 and edited=0").CopyToDataTable(); editTable.DefaultView.Sort = "ControlTop,ControlLeft"; editTable = editTable.DefaultView.ToTable(); this.xtraScrollableControl1.Controls.Clear(); for (int i = 0; i < editTable.Rows.Count; i++) { DataRow rowItem = editTable.Rows[i]; if (i % rowcount == 0) { left = mLocationX[0]; top = mLocationY[Convert.ToInt32(i / rowcount)]; } else { left = mLocationX[Convert.ToInt32(i % rowcount)]; top = mLocationY[Convert.ToInt32(i / rowcount)]; } LabelCheckEdit checkEdit = new LabelCheckEdit(); checkEdit.TextEdit.Name = rowItem["fieldname"] + ""; checkEdit.LabelText = rowItem["username"] + ""; checkEdit.Size = new Size(width, height); checkEdit.Location = new Point(left, top); checkEdit.EditText = ("," + this.SelectBillflowModel.billModifyFields + ",").Contains("," + rowItem["fieldname"] + ",") ? "1" : "0"; checkEdit.Tag = rowItem; this.xtraScrollableControl1.Controls.Add(checkEdit); } } } /// /// 说明:初始化明细表字段 /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeDetailField() { if (SelectBillflowModel != null) { int rowcount = 7; int width = 100, height = 20; int left = 0, top = 0; DataTable table = BillImpl.GetDetailColumns(mMenuCode); DataTable editTable = table.Select("isVisible=False and edit=0").CopyToDataTable(); this.xtraScrollableControl2.Controls.Clear(); for (int i = 0; i < editTable.Rows.Count; i++) { DataRow rowItem = editTable.Rows[i]; if (i % rowcount == 0) { left = mLocationX[0]; top = mLocationY[Convert.ToInt32(i / rowcount)]; } else { left = mLocationX[Convert.ToInt32(i % rowcount)]; top = mLocationY[Convert.ToInt32(i / rowcount)]; } LabelCheckEdit checkEdit = new LabelCheckEdit(); checkEdit.TextEdit.Name = rowItem["fieldname"] + ""; checkEdit.LabelText = rowItem["username"] + ""; checkEdit.Size = new Size(width, height); checkEdit.Location = new Point(left, top); checkEdit.EditText = ("," + this.SelectBillflowModel.detailModifyFields + ",").Contains("," + rowItem["fieldname"] + ",") ? "1" : "0"; checkEdit.Tag = rowItem; this.xtraScrollableControl2.Controls.Add(checkEdit); } } } /// /// 说明: /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// Name of the flow. private StepItem1 InitStepFlowItem(BillflowModel model, int pos) { StepItem1 item = new StepItem1(); item.TitleLabelObj.Text = pos + "、" + model.stepName; if (SerpPagePower) { item.DeletePabelObj.Enabled = false; } item.DeletePabelObj.Click += new EventHandler(OnDeletePabelObjClick); item.Dock = DockStyle.Top; item.Tag = item.TitleLabelObj.Tag = item.DeletePabelObj.Tag = model; item.SetHoverEvent(OnTitleLabelObjClick); item.TabIndex = pos; if (pos == 1) { SeletStepItem1Obj = item; item.SetDefaultSelectItem(item); } return item; } /// /// 说明:验证数据合法性 /// 创建人:龚宇超 /// 创建日期:2017-11-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if XXXX, false otherwise. public bool VerifyNull() { foreach (System.Windows.Forms.Control item in panelControl6.Controls) { if (item is LabelTextEdit) { LabelTextEdit textEdit = item as LabelTextEdit; if (string.IsNullOrEmpty(textEdit.EditText) && textEdit.Required) { textEdit.Focus(); MessageUtil.Show(textEdit.LabelText + "不能为空!"); return false; } } } return true; } #endregion #region 公共方法 /// /// 说明:初始化流转类别控件 /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void InitializeControl(string menuCode) { this.mMenuCode = menuCode; this.mBillModel = new BillModel(BillImpl.GetBillInfo(mMenuCode)); this.InitializeStepFlow(); //this.InitializeMainField(); //this.InitializeDetailField(); } /// /// 说明:添加流转类别 /// 创建人:龚宇超 /// 创建日期:2019-06-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void AddFlowItem(string stepGroup, string stepName) { BillflowModel model = new BillflowModel { stepCode = Convert.ToInt32((BillflowModelList.Count + 1) + "00"), typeCode = mMenuCode, stepGroup = stepGroup, stepName = stepName, stepApplyText = "审核(&Y)", stepApplyContent = "同意", stepBackText = "反退(&N)", stepBackContent = "不同意" }; try { // 保存 if (WorkFlowBillImpl.SaveBillFlow(model)) { // 重排列表 InitializeStepFlow(); } } catch (Exception ex) { throw; //MessageUtil.Show("保存失败!" + ex.Message); } } /// /// 说明:更新流转步骤数据 /// 创建人:龚宇超 /// 创建日期:2019-06-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void UpdateBillFlow() { if (this.VerifyNull()) { // 获取基本数据 BillflowModel model = this.SelectBillflowModel; model.stepGroup = this.ltestepGroup.EditText; model.stepName = this.ltestepName.EditText; model.stepApplyText = this.ltestepApplyText.EditText; model.stepApplyContent = this.ltestepApplyContent.EditText; model.stepBackText = this.ltestepBackText.EditText; model.stepBackContent = this.ltestepBackContent.EditText; model.stepCloseText = this.ltestepCloseText.EditText; model.stepCloseContent = this.ltestepCloseContent.EditText; model.pStepCode = this.ltepStepCode.EditText; model.tm_Test = this.lcetm_Test.EditText; model.stepDivide = this.lcestepDivide.EditText; // 获取单据主表可修改字段 model.billModifyFields = GetMainFieldCheckState(); // 获取单据明细表可修改字段 model.detailModifyFields = GetDetailFieldCheckState(); bool result = WorkFlowBillImpl.UpdateBillFlow(model); if (result) { this.SeletStepItem1Obj.TitleLabelObj.Text = this.SeletStepItem1Obj.TabIndex + "、" + model.stepName; this.SelectBillflowModel = model; } MessageUtil.Show(result ? "保存成功!" : "保存失败!"); } } /// /// 说明:设置面板值 /// 创建人:龚宇超 /// 创建日期:2019-06-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. public void SetFlowItem(BillflowModel model) { if (model != null) { ltestepCode.EditText = model.stepCode + ""; ltestepGroup.EditText = model.stepGroup; ltestepName.EditText = model.stepName; ltestepApplyText.EditText = model.stepApplyText; ltestepApplyContent.EditText = model.stepApplyContent; ltestepBackText.EditText = model.stepBackText; ltestepBackContent.EditText = model.stepBackContent; ltestepCloseText.EditText = model.stepCloseText; ltestepCloseContent.EditText = model.stepCloseContent; ltepStepCode.EditText = model.pStepCode + ""; this.SelectBillflowModel = model; } } /// /// 说明:设置主表字段选中状态 /// 创建人:龚宇超 /// 创建日期:2019-06-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. public void SetMainFieldCheckState(BillflowModel model) { foreach (var ctr in xtraScrollableControl1.Controls) { LabelCheckEdit checkEdit = ctr as LabelCheckEdit; if (checkEdit != null) { DataRow rowItem = checkEdit.Tag as DataRow; checkEdit.EditText = ("," + model.billModifyFields + ",").Contains("," + rowItem["fieldname"] + ",") ? "1" : "0"; } } } /// /// 说明:设置主表字段选中状态 /// 创建人:龚宇超 /// 创建日期:2019-06-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. public void SetDetailFieldCheckState(BillflowModel model) { foreach (var ctr in xtraScrollableControl2.Controls) { LabelCheckEdit checkEdit = ctr as LabelCheckEdit; if (checkEdit != null) { DataRow rowItem = checkEdit.Tag as DataRow; checkEdit.EditText = ("," + model.detailModifyFields + ",").Contains("," + rowItem["fieldname"] + ",") ? "1" : "0"; } } } /// /// 说明:获取主表选中字段 /// 创建人:龚宇超 /// 创建日期:2019-06-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. public string GetMainFieldCheckState() { string fields = string.Empty; foreach (var ctr in xtraScrollableControl1.Controls) { LabelCheckEdit checkEdit = ctr as LabelCheckEdit; if (checkEdit != null && "1".Equals(checkEdit.EditText)) { fields += checkEdit.TextEdit.Name + ","; } } return fields.TrimEnd(','); } /// /// 说明:获取明细表选中字段 /// 创建人:龚宇超 /// 创建日期:2019-06-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. public string GetDetailFieldCheckState() { string fields = string.Empty; foreach (var ctr in xtraScrollableControl2.Controls) { LabelCheckEdit checkEdit = ctr as LabelCheckEdit; if (checkEdit != null && "1".Equals(checkEdit.EditText)) { fields += checkEdit.TextEdit.Name + ","; } } return fields.TrimEnd(','); } #endregion #region 事件相关 /// /// 说明:删除流转分类 /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. void OnDeletePabelObjClick(object sender, EventArgs e) { try { Panel deletePanel = sender as Panel; if (deletePanel != null && deletePanel.Tag != null) { BillflowModel model = deletePanel.Tag as BillflowModel; if (MessageUtil.Show("删除审批步骤将同步删除方案步骤相关数据\r\n是否删除?", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { // 验证删除存储过程 string tipMsg = string.Empty; if (BaseImpl.deleteFlow(1, mMenuCode, model.stepCode.ToString(), model.id, out tipMsg) == 1) { MessageUtil.Show("删除成功!"); // 重排列表 InitializeStepFlow(); } else { MessageUtil.Show(tipMsg); } } catch (Exception ex) { throw; //MessageUtil.Show("删除失败:\r\n" + ex.Message); } } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } /// /// 说明:点击流转步骤加载数据 /// 创建人:龚宇超 /// 创建日期:2019-06-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. /// void OnTitleLabelObjClick(StepItem1 before, StepItem1 after) { try { BillflowModel model = after.Tag as BillflowModel; this.SeletStepItem1Obj = after; this.SetFlowItem(model); this.SetMainFieldCheckState(model); this.SetDetailFieldCheckState(model); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion /// /// 说明:插入流转类别 /// 创建人:龚宇超 /// 创建日期:2019-06-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void InsertFlowItem(string stepGroup, string stepName) { int Code =0; if (SelectBillflowModel == null) { MessageUtil.Show("插入的流转类别不能为空"); return; } else { //BillflowModelList //选中的步骤号 int selectedStepCode = SelectBillflowModel.stepCode; //获取比选中步骤小一步的步骤号 int? maxStepCode = BillflowModelList .Where(m => m.stepCode < selectedStepCode) .Select(m => m.stepCode) .DefaultIfEmpty() // 避免空集合时抛出异常 .Max(); Code = (int)(maxStepCode + (selectedStepCode - maxStepCode) / 2); } BillflowModel model = new BillflowModel { stepCode = Convert.ToInt32(Code), typeCode = mMenuCode, stepGroup = stepGroup, stepName = stepName, stepApplyText = "审核(&Y)", stepApplyContent = "同意", stepBackText = "反退(&N)", stepBackContent = "不同意" }; try { // 保存 if (WorkFlowBillImpl.SaveBillFlow(model)) { // 重排列表 InitializeStepFlow(); } } catch (Exception ex) { throw; //MessageUtil.Show("保存失败!" + ex.Message); } } } }