/*********************** * 说明:单据审批和基础档案审批主页共用模版 * 创建人:龚宇超 * 创建日期:2017-12-27 * 修改人: * 修改日期: * 修改备注: * 版本: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.Control.Model; using Lskj.Business.Impl; using Lskj.Data; using Lskj.Model; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraTab; using DevExpress.Utils; using DevExpress.XtraEditors.Controls; using Lskj.Business; using Lskj.Util; using System.Threading; using DevExpress.XtraGrid.Columns; using Lskj.Core; using System.Diagnostics; using System.Text.RegularExpressions; namespace Lskj.Control { public partial class AuditPanelEx2 : UserControl { public AuditPanelEx2() { InitializeComponent(); } #region 公有变量 AuditPanel2 auditPanel = new AuditPanel2(); AuditBasePanel auditBasePanel = new AuditBasePanel(); /// /// 是否是单据审核 /// public bool isBillFlag; /// /// 默认查询框 /// public bool PanelCondVisible; /// /// 主键 /// public string KeyValue; /// /// 单据前缀 /// public string TmpPrefix = string.Empty; /// /// 分段审批 /// public DataRow SectionAccradit; /// /// 审批公用模型 /// public AuditCommonModel AuditComModelObj; /// /// 基础审批模型 /// public BaseAccraditationModel BaseAccraditModelObj; /// /// 模型 /// public DynamicModel SysModel; /// /// 已完成表格 /// /// The finish grid object. public GridControlEx FinishGridObj { get { return this.gridFinish; } } /// /// 说明:审批表格双击弹出模块回调 /// 创建人:龚宇超 /// 创建日期:2017-12-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public event EventHandler OnGridViewDoubleCallBack; /// /// 说明:已完成表格双击弹出模块回调 /// 创建人:龚宇超 /// 创建日期:2017-12-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public event EventHandler OnGridFinshViewDoubleCallBack; /// /// 说明:已完成表格搜索回调 /// 创建人:龚宇超 /// 创建日期:2017-12-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public event BtnSearchGridFinishEventHandler OnBtnSearchCallBack; #endregion #region 私有变量 /// /// tabpages集合 /// private List _tabPageObjs = new List(); /// /// 自定义搜索控件 /// private MyControl _searchContrl; #endregion #region 初始化系统配置 /// /// 说明:初始化系统配置 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The menu code. public void InitializeSetting(AuditCommonModel auditComModel, DynamicModel model, BaseAccraditationModel baseAccraditModel,bool isBillFlag=true) { try { this.isBillFlag = isBillFlag; this.AuditComModelObj = auditComModel; this.SysModel = model; this.BaseAccraditModelObj = baseAccraditModel; this.labeltxt_dataFlag.LabelText = this.AuditComModelObj.DataFlagLabel; InitTabPages(); this.InitFinishTabPage(); //this.RefreshTabPage(); if (SysModel.HasReadPrivilege()) { this.btnBack.Enabled = false; } //Thread thread = new Thread(CreateGrid); //thread.IsBackground = true; //thread.Start(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion #region 多线程创建明细列 /// /// 说明:创建明细列 /// 创建人:王一帆 /// 创建日期:2020-04-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void CreateGrid() { //Thread.Sleep(100); //if (isBillFlag) //{ // foreach (TabPageObj tab in this._tabPageObjs) // { // if (this.InvokeRequired) // { // this.Invoke((EventHandler)delegate // { // int cnt = 0; // foreach (TabPageItemObj item in tab.TabPageItemObjs) // { // DataTable dtColumns = BaseAuditImpl.GetGridColumns(AuditComModelObj.SystemTable, this.SysModel.ModuleCode, tab.FlowStepModel.StepCode, this.SysModel.UserName); // string key = "FLOWSTEP_" + this.SysModel.ModuleCode + "_" + item.AuditModel.CurstepName + "_" + item.AuditModel.Id + ""; // item.AuditPanelObj.pcGrid.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(key)); // item.AuditPanelObj.pcGrid.SetReadOnlyColumns(dtColumns, GridCustomColumnStruct.AuditMainGridView + key); // item.AuditPanelObj.pcGrid.SetGridViewDataSource(BaseImpl.GetDataTableResult(item.AuditModel.StepSql)); // cnt += item.AuditPanelObj.pcGrid.GridView.RowCount; // item.AuditPanelObj.gcDetail.SetEditColumns(BillImpl.GetDetailColumns(item.AuditPanelObj.SysModel.ModuleCode), GridCustomColumnStruct.AuditPopupDetailGridView + item.AuditPanelObj.BillModelObj.FormKey); // //修改字段 // if (!string.IsNullOrEmpty(item.AuditPanelObj.AuditModelObj.DetailModifyFields)) // { // item.AuditPanelObj.gcDetail.GridView.OptionsBehavior.Editable = true; // item.AuditPanelObj.AuditModelObj.DetailModifyFields = item.AuditPanelObj.AuditModelObj.DetailModifyFields + ","; // GridColumnCollection gc = item.AuditPanelObj.gcDetail.GridView.Columns; // foreach (GridColumn items in gc) // { // items.OptionsColumn.AllowEdit = item.AuditPanelObj.AuditModelObj.DetailModifyFields.IndexOf(items.FieldName + ",", StringComparison.OrdinalIgnoreCase) != -1; // items.OptionsColumn.ReadOnly = !items.OptionsColumn.AllowEdit; // } // } // Application.DoEvents(); // } // tab.TabPage.Text = tab.FlowStepModel.StepGroup + "(" + cnt + ")"; // }); // } // } //} } #endregion #region 顶部查询控件 /// /// 说明:顶部查询条件 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SearchCreateTopControl() { this._searchContrl = new MyControl(this.BaseAccraditModelObj.OverBackSql, this.gridFinish); this.pl_top.Height = this._searchContrl.InitSearchControl(BaseModuleImpl.GetCustomQueryFields(this.BaseAccraditModelObj.OverBackKey), this.pl_top); } #endregion #region 初始化已完成页 /// /// 说明:初始化已完成page /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitFinishTabPage() { //窗口上的条件筛选面板 this.PanelCondVisible = this.pl_top_searchCond.Visible = string.IsNullOrWhiteSpace(this.BaseAccraditModelObj.OverBackSql); if (this.PanelCondVisible) { //设置默认自动搜索 this.SetSearchControl(); this.gridFinish.SetReadOnlyColumns(BaseAuditImpl.GetDefaultGridMainColumns(this.AuditComModelObj.Moduletype), GridCustomColumnStruct.AuditOverMainGridView + this.SysModel.ModuleCode); } else { this.TmpPrefix = this.BaseAccraditModelObj.ColumnPrefix; this.gridFinish.SetReadOnlyColumns(BaseAuditImpl.GetAuditMainGridCoulmns(AuditComModelObj.SystemTable, this.SysModel.ModuleCode), GridCustomColumnStruct.AuditOverMainGridView + this.BaseAccraditModelObj.FormKey); // 创建自定义搜索控件 this.SearchCreateTopControl(); } // 上面主表格的事件注册 this.gridFinish.GridView.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(GvFinish_SelectionChangedClick); this.gridFinish.GridView.DoubleClick += new EventHandler(GvFinish_DoubleClick); // 下面flow明细表格的列 this.gridFlow.SetReadOnlyColumns(BaseAuditImpl.GetFlowGridColomns(), GridCustomColumnStruct.AuditOverDetailGridView + this.SysModel.ModuleCode); } #endregion #region 初始化自动搜索框 /// /// 说明:初始化配置自动搜索框 /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SetSearchControl() { this.labelcheck_finalAuditor.AutoTextEdit.ValueMember = "UserId"; this.labelcheck_finalAuditor.AutoTextEdit.TextField = "UserName"; this.labelcheck_finalAuditor.AutoTextEdit.ValueField = "UserId"; this.labelcheck_finalAuditor.AutoTextEdit.SetDataSource(MainImpl.GetEmployeeList()); this.labeldate_start.LabelDateEditObj.EditText = DateTime.Now.ToString(); this.labeldate_end.LabelDateEditObj.EditText = DateTime.Now.ToString(); } #endregion #region 选项卡相关 /// /// 说明:绑定选项卡 /// 创建人:龚宇超 /// 创建日期:2017-12-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The menu code. public void InitTabPages() { DataTable tabPages = BaseAuditImpl.GetTabPages(this.SysModel.ModuleCode, this.BaseAccraditModelObj.MenuCond, AuditComModelObj.FlowStepTable); if (isBillFlag) { XtraTabPage tabPage = new XtraTabPage(); PanelControl panel = new PanelControl(); //tabpage里面的panel子集 List panelList = new List(); //tabpage里面的panel集合进行顺序反转 tabPage.AutoScroll = true; auditPanel = new AuditPanel2(); //auditPanel.Init(tabPages, AuditComModelObj, SysModel, this.BaseAccraditModelObj); auditPanel.RefreshTabCallBack += OnRefreshTabCallBack; auditPanel.btnReflash.Click += new System.EventHandler(this.BtnReflash_Click); auditPanel.Parent = panel; auditPanel.Dock = DockStyle.Fill; auditPanel.BorderStyle = BorderStyle.None; //cnt += auditPanel.pcGrid.GridView.RowCount; tabMain.BorderStylePage = BorderStyles.NoBorder; panel.Dock = DockStyle.Fill; //tabPage.Padding = new System.Windows.Forms.Padding(2); panelList.Add(panel); tabPage.Controls.AddRange(panelList.Reverse().ToArray()); tabPage.Text = "未完成审核"; tabMain.TabPages.Insert(tabMain.TabPages.Count - 1, tabPage); } tabMain.SelectedTabPageIndex = 0; } /// /// 审核回调刷新窗体 /// /// /// private void OnRefreshTabCallBack(object sender, EventArgs e) { try { WaitForm.ShowForm(); RefreshTabPage(); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show("加载刷新数据失败!" + Message); } finally { WaitForm.HideForm(); } } #endregion #region 双击表格 /// /// 说明:双击审批列表(动态创建的表格) /// 创建人:龚宇超 /// 创建日期:2017-12-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void GridView_DoubleClick(object sender, EventArgs e) { try { if (this.OnGridViewDoubleCallBack != null) OnGridViewDoubleCallBack(sender, e); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion /// /// 说明:刷新窗体事件 /// 创建人:龚宇超 /// 创建日期:2017-12-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void BtnReflash_Click(object sender, EventArgs e) { try { RefreshTabPage(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #region 刷新多标签 /// /// 说明:刷新窗体 /// 创建人:龚宇超 /// 创建日期:2017-12-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// public void RefreshTabPage() { //if (isBillFlag) //{ // foreach (TabPageObj tab in this._tabPageObjs) // { // int cnt = 0; // foreach (TabPageItemObj item in tab.TabPageItemObjs) // { // item.AuditPanelObj.pcGrid.SetGridViewDataSource(BaseImpl.GetDataTableResult(item.AuditModel.StepSql)); // //item.LabelObj.Text = item.AuditModel.CurstepName + " (" + string.Format(ResourceKeys.RowCountRecond, item.GridControlObj.GridView.RowCount) + " )"; // cnt += item.AuditPanelObj.pcGrid.GridView.RowCount; // } // tab.TabPage.Text = tab.FlowStepModel.StepGroup + "(" + cnt + ")"; // } //} //else { // foreach (TabPageObj tab in this._tabPageObjs) // { // int cnt = 0; // foreach (TabPageItemObj item in tab.TabPageItemObjs) // { // item.AuditBasePanelObj.pcGrid.SetGridViewDataSource(BaseImpl.GetDataTableResult(item.AuditModel.StepSql)); // //item.LabelObj.Text = item.AuditModel.CurstepName + " (" + string.Format(ResourceKeys.RowCountRecond, item.GridControlObj.GridView.RowCount) + " )"; // cnt += item.AuditBasePanelObj.pcGrid.GridView.RowCount; // } // tab.TabPage.Text = tab.FlowStepModel.StepGroup + "(" + cnt + ")"; // } //} } #endregion #region 搜索操作 /// /// 说明:搜索操作 /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void btnSearch_Click(object sender, EventArgs e) { try { if (this.OnBtnSearchCallBack != null) { string cond = string.Empty; bool cancelFlag = false; if (BaseImpl.HasExistsColumn(this.BaseAccraditModelObj.BillTable, this.BaseAccraditModelObj.CancelFlag)) { cancelFlag = true; } if (this.labeldate_start.CheckEdit.Checked) { cond = string.Format("and convert(varchar(10),a.{0}stepOverTime,120)>='{1}'", this.BaseAccraditModelObj.ColumnPrefix, this.labeldate_start.TextEdit.Text); } if (this.labeldate_end.CheckEdit.Checked) { cond = cond + string.Format("and convert(varchar(10),a.{0}stepOverTime,120)<='{1}'", this.BaseAccraditModelObj.ColumnPrefix, this.labeldate_end.TextEdit.Text); } if (this.labelcheck_finalAuditor.CheckEdit.Checked) { cond = cond + string.Format("and a.{0}stepOverId='{1}'", this.BaseAccraditModelObj.ColumnPrefix, this.labelcheck_finalAuditor.AutoTextEdit.EditValue); } if (!string.IsNullOrEmpty(this.labeltxt_dataFlag.EditText.Trim())) { cond = cond + string.Format("and a.{0} LIKE '%{1}%'", this.KeyValue, this.labeltxt_dataFlag.EditText.Trim()); } BtnSearchGridFinishArgs args = new BtnSearchGridFinishArgs(); args.CancelFlag = cancelFlag; args.Cond = cond; if (OnBtnSearchCallBack != null) OnBtnSearchCallBack(sender, args); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show("搜索操作出错!" + Message); } } #endregion #region 单元格点击操作 /// /// 说明:已完成主表格单元格单选中 /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void GvFinish_SelectionChangedClick(object sender, DevExpress.Data.SelectionChangedEventArgs e) { try { DataRow selRow = this.gridFinish.GridView.GetFocusedDataRow(); if (selRow == null) return; // 动态表格和默认主表格的不同键值 string tmpField = !this.pl_top_searchCond.Visible ? this.KeyValue : this.TmpPrefix + this.BaseAccraditModelObj.DefaultParmaryField; DataTable gridFlowData = BaseAuditImpl.GetGridFlowData(selRow[tmpField] + "", AuditComModelObj.SystemTabFlowStep, this.BaseAccraditModelObj.MenuCond); gridFlow.SetGridViewDataSource(gridFlowData); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } /// /// 说明:已完成主表格双击操作 /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void GvFinish_DoubleClick(object sender, EventArgs e) { try { if (this.OnGridFinshViewDoubleCallBack != null) OnGridFinshViewDoubleCallBack(sender, e); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } #endregion #region 返审操作 /// /// 说明:返审操作 /// 创建人:龚宇超 /// 创建日期:2017-12-11 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void btnBack_Click(object sender, EventArgs e) { try { DataRow dr = this.gridFinish.GridView.GetFocusedDataRow(); if (dr == null) { MessageUtil.Show(ResourceKeys.NotReturnData); return; } string billDocumentId = this.PanelCondVisible ? dr[this.BaseAccraditModelObj.DefaultParmaryField] + "" : dr[string.IsNullOrEmpty(this.BaseAccraditModelObj.KeyField + "") ? this.BaseAccraditModelObj.TmpParmaryField : this.BaseAccraditModelObj.KeyField + ""] + ""; string stepCode = this.PanelCondVisible ? dr[this.TmpPrefix + this.BaseAccraditModelObj.DefaultStepField] + "" : dr[this.BaseAccraditModelObj.TmpStepField] + ""; if (MessageUtil.Show(string.Format(ResourceKeys.ForcedReturnBill, billDocumentId), MessageBoxButtons.YesNo) == DialogResult.Yes) { string nextSelectStepCode = string.Empty; string nextSelectStepOper = string.Empty; //记录本次推送人员,审核过清除消息 string beforeMenuname = string.Empty, beforeUsers = string.Empty; int beforeId = 0; DataRow rowItem = BaseAuditImpl.GetSystemOperators(billDocumentId, stepCode, this.AuditComModelObj.Moduletype); if (rowItem != null) { beforeMenuname = rowItem["menuname"] + ""; beforeUsers = rowItem["operators"] + ""; beforeId = Convert.ToInt32(rowItem["id"]); } bool isBack = string.IsNullOrEmpty(this.BaseAccraditModelObj.MenuCond) || this.SectionAccradit == null || Convert.ToInt32(stepCode) >= Convert.ToInt32(this.SectionAccradit["stepCode"] + ""); string prodouceName = isBack ? AuditComModelObj.ProcedureName + "back" : AuditComModelObj.ProcedureName; string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, this.SysModel, stepCode, billDocumentId, isBack ? string.Format(ResourceKeys.ForcedReturnBill, billDocumentId) + "" : "", prodouceName, "R", "0", "", "", "", !isBack, -1); string tag = isBack ? "1" : "0"; if (result == "1") { MessageUtil.Show(ResourceKeys.ForcedSuccess); // 推送消息 PushHelper push = new PushHelper(billDocumentId, stepCode, this.SysModel.ModuleCode, beforeUsers, beforeMenuname, beforeId); if (this.AuditComModelObj.Moduletype == "base") { push.Push_Base_Oper_Message(); } else { push.Push_Bill_Oper_Message(); } if (tag == "1") { if (this.PanelCondVisible) { btnSearch.PerformClick(); } else { this._searchContrl.SearchLastGrid(); } RefreshTabPage(); } } else { MessageUtil.Show(string.Format(ResourceKeys.ForcedFail, result)); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show("返审操作出错!" + Message); } } #endregion private void simpleButton1_Click(object sender, EventArgs e) { try { WebBrowserUtil.StartWebBrowser(this.SysModel.ModuleCode, ""); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message,ex.Message); } } /// /// tabPage组成结构 /// public class TabPageItemObj { /// /// 审批模型 /// public AccraditationModel AuditModel; /// /// 进度流层表格 /// public GridControlEx GridControlObj; /// /// 进度流层审核 /// public AuditPanel2 AuditPanelObj; /// /// 基础进度流层审核 /// public AuditBasePanel AuditBasePanelObj; /// /// 进度流层名 /// public LabelControl LabelObj; } /// /// tabpage模型 /// public class TabPageObj { /// /// 选项卡 /// public XtraTabPage TabPage; /// /// 表格集合 /// public List TabPageItemObjs = new List(); /// /// 步骤模型 /// public FlowTypeStepModel FlowStepModel; } } }