/*********************** * 说明:单据审批 * 创建人:龚宇超 * 创建日期:2017-12-27 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.1 ***********************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Lskj.Control; using Lskj.Control.Model; using Lskj.Business.Impl; using Lskj.Data; using Lskj.Model; using Lskj.Util; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraTab; using DevExpress.Utils; using Lskj.Business; using System.Threading.Tasks; using System.Collections; namespace Lskj.PubAccraditation { public partial class FrmMain : BaseForm { public FrmMain() { InitializeComponent(); } /// /// 审批配置对象 /// public BaseAccraditationModel BaseAccraditModelObj; /// /// 审批公共model /// public BillAuditCommonModel BillComModelObj; /// /// 系统模块配置 /// public DynamicPubAccraditionModel SysModel; /// /// 说明:窗体加载时 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期:2018-04-19 /// 修改备注:1. 取消模块权限验证,点击菜单时候已验证.右键菜单无需验证 /// 版本:1.1 /// /// The instance containing the event data. protected override void OnLoad(EventArgs e) { WaitForm.ShowForm(); this.Text = SysModel.FormText; this.auditPanelEx.Visible = false; try { this.InitializeSetting(); } catch (Exception ex) { LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModuleAudit); //MessageUtil.Show(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } finally { Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this); WaitForm.HideForm(); this.auditPanelEx.Visible = true; } } /// /// 说明:初始化属性 /// 创建人:龚宇超 /// 创建日期:2018-02-05 /// 修改人:龚宇超 /// 修改日期:2018-04-19 /// 修改备注:1. menuCondRow有为空的情况,需要判断. /// 版本:1.1 /// private void InitializeSetting() { Dictionary dataCaches = SysModel != null ? SysModel.DataCaches : null; if (!dataCaches.GetValue(this, "AccraditationModelRow", out DataRow modelRow)) { modelRow = BillAuditImpl.GetPubAuditProperty(this.SysModel.ModuleCode);//获取单个模块信息 } if (modelRow == null) { throw new Exception("模块编号[" + this.SysModel.ModuleCode + "],配置错误!\r\n该模块信息未找到!"); } //审批模型 if (!dataCaches.GetValue(this, "BaseAccraditationModel", out this.BaseAccraditModelObj)) { this.BaseAccraditModelObj = new BaseAccraditationModel(modelRow); } //处理终审反退中的角色 if (!dataCaches.GetValue(this, "GetAllPersonnel", out string personnel)) { personnel = this.BaseAccraditModelObj.OverBackOper; personnel = PowerImpl.getAllPersonnel(personnel); } this.BaseAccraditModelObj.OverBackOper = personnel; if (!dataCaches.GetValue(this, "MenuConfigTab", out DataRow menuCondRow)) { menuCondRow = BaseImpl.GetMenuConfigTab(this.SysModel.ModuleId); } this.BaseAccraditModelObj.MenuCond = menuCondRow != null && menuCondRow.Table.Columns.Contains("StepCodeCond") ? menuCondRow["StepCodeCond"] + "" : ""; if (!dataCaches.GetValue(this, "ColumnPrefix", out string columnPrefix)) { columnPrefix = BaseImpl.GetColumnPrefix(this.BaseAccraditModelObj.BillTable); } this.BaseAccraditModelObj.ColumnPrefix = columnPrefix; if (!dataCaches.GetValue(this, "BillAuditCommonModel", out this.BillComModelObj)) { this.BillComModelObj = new BillAuditCommonModel(); } if (!dataCaches.GetValue(this, "FlowStepCode", out DataRow flowStepCode)) { flowStepCode = BaseAuditImpl.GetFlowStepCode(this.SysModel.ModuleCode); } this.auditPanelEx.SectionAccradit = flowStepCode; if (!dataCaches.GetValue(this, "ParmaryKey", out string parmaryKey)) { parmaryKey = this.BaseAccraditModelObj.GetParmaryKey(ModuleType.BillAudit); } this.auditPanelEx.KeyValue = parmaryKey; this.auditPanelEx.InitializeSetting(this.BillComModelObj, SysModel, BaseAccraditModelObj); this.auditPanelEx.OnGridViewDoubleCallBack += new EventHandler(GridViewDoubleEvent); this.auditPanelEx.OnGridFinshViewDoubleCallBack += new EventHandler(GridFinshViewDoubleEvent); this.auditPanelEx.OnBtnSearchCallBack += new BtnSearchGridFinishEventHandler(GridFinshSerachEvent); } public void GetDataCaches(Dictionary cachesDic) { //全局数据 Task dynamicModelTask = cachesDic.AddTask(this, "DynamicModel", new Task(() => { return SysModel;//动态链接库对象 })); Task accraditationModelRowTask = cachesDic.AddTask(this, "AccraditationModelRow", new Task(() => { return BillAuditImpl.GetPubAuditProperty(dynamicModelTask.Result.ModuleCode);//获取单个模块信息 })); Task baseAccraditationModelTask = cachesDic.AddTask(this, "BaseAccraditationModel", new Task(() => { BaseAccraditationModel baseAccraditationModel = new BaseAccraditationModel(accraditationModelRowTask.Result); Task columnPrefixTask = cachesDic.AddTask(this, "ColumnPrefix", new Task(() => { return BaseImpl.GetColumnPrefix(baseAccraditationModel.BillTable); })); baseAccraditationModel.ColumnPrefix = columnPrefixTask.Result; Task parmaryKeyTask = cachesDic.AddTask(this, "ParmaryKey", new Task(() => { return baseAccraditationModel.GetParmaryKey(ModuleType.BillAudit); })); return baseAccraditationModel;//系统模块实体对象 })); Task getAllPersonnelTask = cachesDic.AddTask(this, "GetAllPersonnel", new Task(() => { return PowerImpl.getAllPersonnel(baseAccraditationModelTask.Result.OverBackOper); })); Task menuConfigTabTask = cachesDic.AddTask(this, "MenuConfigTab", new Task(() => { return BaseImpl.GetMenuConfigTab(dynamicModelTask.Result.ModuleId); })); Task billAuditCommonModelTask = cachesDic.AddTask(this, "BillAuditCommonModel", new Task(() => { return new BillAuditCommonModel(); })); Task flowStepCodeTask = cachesDic.AddTask(this, "FlowStepCode", new Task(() => { return BaseAuditImpl.GetFlowStepCode(dynamicModelTask.Result.ModuleCode); })); //添加数据到mControl cachesDic.AddTask(auditPanelEx, "DynamicModel", dynamicModelTask); cachesDic.AddTask(auditPanelEx, "BillAuditCommonModel", billAuditCommonModelTask); cachesDic.AddTask(auditPanelEx, "BaseAccraditationModel", baseAccraditationModelTask); //获取mControl控件的数据 auditPanelEx.GetDataCaches(cachesDic); } /// /// 搜索数据 /// /// The sender. /// The e. private void GridFinshSerachEvent(object sender, BtnSearchGridFinishArgs e) { try { this.auditPanelEx.FinishGridObj.SetGridViewDataSource(BillAuditImpl.GetGridFinishData(this.BaseAccraditModelObj, e.CancelFlag, e.Cond)); //已完成单据刷新选中状态 DataTable completedTable = this.auditPanelEx.FinishGridObj.gridControl.DataSource as DataTable; if (completedTable != null && !completedTable.Columns.Contains("_check") && (BaseAccraditModelObj.MuitlAuditFlag || BaseAccraditModelObj.MuitlAuditBackFlag)) { completedTable.Columns.Add("_check", typeof(bool)); foreach (DataRow row in completedTable.Rows) { row["_check"] = 0; } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:表格双击弹出模块 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// private void GridViewDoubleEvent(object sender, EventArgs e) { try { GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) return; //单据审批弹出模块 string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.SysModel.FormText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode).Split('~'); string[] menuArgs = { this.SysModel.ModuleId + "", "", dr[this.BaseAccraditModelObj.TmpStepField] + "", dr[this.BaseAccraditModelObj.TmpParmaryField] + "", "", "0" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); FrmAccraditation frm = new FrmAccraditation(); frm.SysModel = new DynamicPubAccraditionPopModel(args); frm.SysModel.DataCaches = new Dictionary(); if (SystemInfo.Instance.OptimizationSpeed) frm.GetDataCaches(frm.SysModel.DataCaches); frm.Text = this.Text; if (SystemInfo.Instance.PageOpen) { foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages) { int interceptionLocation = tablepage.Text.Length - frm.SysModel.BillDocumentId.Length - 1; if (interceptionLocation > 0 && tablepage.Text.Length > frm.SysModel.BillDocumentId.Length) { string documentNo = tablepage.Text.Substring(tablepage.Text.Length - frm.SysModel.BillDocumentId.Length - 1); documentNo = documentNo.Substring(0, documentNo.Length - 1); if (documentNo.Equals(frm.SysModel.BillDocumentId)) { MessageUtil.Show("已设置不能打开多个相同模块!"); ERPInfo.Instance.PageControl.SelectedTabPage = tablepage; return; } } } DllModule module = new DllModule { DllName = "", Id = SysModel.ModuleId + "", Name = SysModel.FormText, BeforePage = ERPInfo.Instance.PageControl.SelectedTabPage, ModuleForm = frm }; frm.refreshThePage += new FrmAccraditation.RefreshThePage(refreshThePage); string guid = Guid.NewGuid().ToString(); XtraTabPage tp = new XtraTabPage(); tp.Tag = guid; // 这个必须有不然会提示:"不能向tabControl中添加顶级控件" frm.TopLevel = false; frm.Location = new Point(0, 0); frm.Dock = DockStyle.Fill; frm.FormBorderStyle = FormBorderStyle.None; tp.AutoScroll = true; tp.Controls.Add(frm); tp.ShowCloseButton = DefaultBoolean.True; tp.Dock = DockStyle.Fill; ERPInfo.Instance.PageControl.TabPages.Add(tp); ERPInfo.Instance.PageControl.SelectedTabPage = tp; frm.Show(); tp.Text = frm.Text; ERPInfo.Instance.ModuleForms.Add(guid, module); } else { DialogResult drr = frm.ShowDialog(); this.auditPanelEx.RefreshTabPage(); frm.Dispose(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:已完成表格双击弹出模块 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. private void GridFinshViewDoubleEvent(object sender, EventArgs e) { try { GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) return; //单据审批弹出模块加载 string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.SysModel.FormText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode).Split('~'); string[] menuArgs = { this.SysModel.ModuleId + "", "", dr[this.auditPanelEx.TmpPrefix + this.BaseAccraditModelObj.DefaultStepField] + "", dr[this.auditPanelEx.TmpPrefix + this.BaseAccraditModelObj.DefaultParmaryField] + "", "", "1" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); FrmAccraditation frm = new FrmAccraditation(); frm.SysModel = new DynamicPubAccraditionPopModel(args); frm.SysModel.DataCaches = new Dictionary(); if (SystemInfo.Instance.OptimizationSpeed) frm.GetDataCaches(frm.SysModel.DataCaches); frm.Text = this.Text; if (SystemInfo.Instance.PageOpen) { foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages) { int interceptionLocation = tablepage.Text.Length - frm.SysModel.BillDocumentId.Length - 1; if (interceptionLocation > 0 && tablepage.Text.Length > frm.SysModel.BillDocumentId.Length) { string documentNo = tablepage.Text.Substring(tablepage.Text.Length - frm.SysModel.BillDocumentId.Length - 1); documentNo = documentNo.Substring(0, documentNo.Length - 1); if (documentNo.Equals(frm.SysModel.BillDocumentId)) { MessageUtil.Show("已设置不能打开多个相同模块!"); ERPInfo.Instance.PageControl.SelectedTabPage = tablepage; return; } } } DllModule module = new DllModule { DllName = "", Id = SysModel.ModuleId + "", Name = SysModel.FormText, BeforePage = ERPInfo.Instance.PageControl.SelectedTabPage, ModuleForm = frm }; frm.refreshThePage += new FrmAccraditation.RefreshThePage(refreshThePage); string guid = Guid.NewGuid().ToString(); XtraTabPage tp = new XtraTabPage(); tp.Tag = guid; // 这个必须有不然会提示:"不能向tabControl中添加顶级控件" frm.TopLevel = false; frm.Location = new Point(0, 0); frm.Dock = DockStyle.Fill; frm.FormBorderStyle = FormBorderStyle.None; tp.AutoScroll = true; tp.AutoScroll = true; tp.Controls.Add(frm); tp.ShowCloseButton = DefaultBoolean.True; tp.Dock = DockStyle.Fill; ERPInfo.Instance.PageControl.TabPages.Add(tp); ERPInfo.Instance.PageControl.SelectedTabPage = tp; frm.Show(); tp.Text = frm.Text; ERPInfo.Instance.ModuleForms.Add(guid, module); } else { DialogResult drr = frm.ShowDialog(); frm.Dispose(); this.auditPanelEx.RefreshTabPage(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:page打开审核界面完成操作后刷新当前界面 /// 创建人:曹屹峰 /// 创建日期:2021-11-23 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void refreshThePage(string promptInformation, string id) { //刷新界面 this.auditPanelEx.RefreshTabPage(); if (!string.IsNullOrWhiteSpace(promptInformation)) MessageUtil.Show(promptInformation); //上一次点开page XtraTabPage beforePage = ERPInfo.Instance.ModuleForms[id].BeforePage; //要删除的page XtraTabPage removePage = new XtraTabPage(); ERPInfo.Instance.ModuleForms.Remove(id); foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages) { if (tablepage.Tag == null) continue; if (tablepage.Tag.ToString().Equals(id)) removePage = tablepage; if (tablepage == beforePage) ERPInfo.Instance.PageControl.SelectedTabPage = beforePage; } ERPInfo.Instance.PageControl.TabPages.Remove(removePage); } } }