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.Util; using Lskj.Business; using Lskj.Data; using Lskj.Model; using DevExpress.XtraTab; using Lskj.Business.Impl; using DevExpress.XtraGrid.Columns; using DevExpress.XtraBars; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraEditors; using Lskj.PubAccraditation2; using System.Threading; using DevExpress.XtraEditors.Controls; using DevExpress.Utils; using Lskj.Core; using System.Diagnostics; using System.Text.RegularExpressions; namespace Lskj.Control { public partial class AuditPanel2 : UserControl { public AuditPanel2() { InitializeComponent(); SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.Selectable | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true); } #region 公有变量 public string modelkeyName = ""; /// /// 是否完成界面加载 /// public bool isFinish; /// /// 是否是单据审核 /// public bool isBillFlag; /// /// 确认用户 /// public string ConfirmOpers = ""; /// /// 提醒用户 /// public string RemindOpers = ""; /// /// 单据前缀 /// public string TmpPrefix = string.Empty; /// /// 单据结构明细 /// public AccraditationModel AuditModelObj; /// /// 单据模型 /// public BillAuditModel BillModelObj; /// /// 基础档案模型 /// public BaseAuditModel ModuleModelObj; /// /// 单据审批表模型 /// public BillAuditCommonModel BillAuditComObj; /// /// 基础审批模型 /// public BaseAccraditationModel BaseAccraditModelObj; private DynamicPubAccraditionPopModel _sysModel; /// /// 单据入口参数模型 /// public DynamicPubAccraditionPopModel SysModel { get { return _sysModel; } set { _sysModel = value; } } /// /// 主表控件 /// public MyControl ControlObj; /// /// 已完成表格 /// /// The finish grid object. public GridControlEx FinishGridObj { get { return this.gridFinish; } } /// /// tabpages集合 /// private List _tabPageObjs = new List(); /// /// 说明:审批表格双击弹出模块审批回调 /// 创建人:龚宇超 /// 创建日期:2017-12-21 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public event EventHandler RefreshTabCallBack; public event BtnSearchGridFinishEventHandler OnBtnSearchCallBack; #endregion /// /// 表格列头颜色 /// protected string HeaderColor = "#A0A0A0"; /// /// 必填颜色 /// protected Color RequiredForceColor = string.IsNullOrEmpty(SystemInfo.Instance.ControlRequiredColor) ? Color.Blue : ColorTranslator.FromHtml(SystemInfo.Instance.ControlRequiredColor); /// /// 调用动态链接库默认传递参数 /// public DynamicModel DynamicsyModel { get; private set; } /// /// 审批公用模型 /// public AuditCommonModel AuditComModelObj; /// /// 主键 /// public string KeyValue; /// /// 默认查询框 /// public bool PanelCondVisible; /// /// 分段审批 /// public DataRow SectionAccradit; /// /// 辅助功能按钮菜单集合 /// public List itemCommonList = new List(); #region 私有变量 /// /// 数量名称 /// public string NumberMc; /// /// 主键字段 /// private string mRecordPrimaryField; private string guidField = "xxxxx_guid"; /// /// 自定义搜索控件 /// private MyControl _searchContrl; /// /// id(推送记录) /// private int _beforeId; /// /// 是否初始化完成 /// private bool _isInitFinish; /// /// 意见 /// private string _auditAdvice; /// /// 菜单模块名(推送记录) /// private string _beforeMenuName; /// /// 用户(推送记录) /// private string _beforeUsers; /// /// 单据类别值 /// private string _mainBillTypeValue; /// /// 单据信息 /// private DataRow _drBillInfoMsg; /// /// 明细数据 /// private DataTable _dtSourceData; /// /// 单据类别 /// private DataTable _dtBillType; /// /// 单据明细列表 /// private DataTable _dtBillAttachList; /// /// 单据billInfo /// private DataTable _dtBillInfoFiled; /// /// 分单数据 /// private DataTable _dtSpareSourceData; /// /// 审批流转模型 /// private FlowTypeStepModel _flowTypeStepModel; /// /// 单据水印 /// private WaterMark _waterMark; /// /// 是否在存储过程获得数据 /// private bool ProcessExists; /// /// 明细必须填字段 /// private List DetailsRequired = new List(); /// /// 打印完成后添加数据用到的参数 /// private List _printSaveParams; /// /// 主打印Sql /// private string _mainPrintSql; /// /// 打印主sql中关联打印次数返回条件 /// private string _printModeCond; /// /// 是否直接打印 /// private bool _isExcPrint; #region 初始化系统配置 /// /// 说明:初始化系统配置 /// 创建人:龚宇超 /// 创建日期:2017-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The menu code. public void InitializeSetting(AuditCommonModel auditComModel, DynamicModel model, BaseAccraditationModel baseAccraditModel, bool isBillFlag = true) { //BillComModelObj SysModel BaseAccraditModelObj try { ProcessExists = (Lskj.Data.Caches.CacheSYSConfig.Instance().JudgeProcessExists() && SystemInfo.Instance.isExecload); this.isBillFlag = isBillFlag; this.AuditComModelObj = auditComModel; this.modelkeyName = AuditComModelObj.Moduletype == "bill" ? GridCustomColumnStruct.AuditMainGridView : GridCustomColumnStruct.BaseAuditMainGridView; this.DynamicsyModel = model; this.BaseAccraditModelObj = baseAccraditModel; this.labeltxt_dataFlag.LabelText = this.AuditComModelObj.DataFlagLabel; DataTable tabPages = new DataTable(); if (ProcessExists) { tabPages = Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(); } else { tabPages = BaseAuditImpl.GetTabPages(this.DynamicsyModel.ModuleCode, this.BaseAccraditModelObj.MenuCond, AuditComModelObj.FlowStepTable); } Init(tabPages); this.InitFinishTabPage(); //this.RefreshTabPage(); if (SysModel.HasReadPrivilege()) { this.btnBack.Enabled = false; } this.GetPrintOtherParam(); //加载分配 this.dbpFP.Click += new System.EventHandler(this.OnBtnFPOldClick); BarButtonItem itemFPBatch = new BarButtonItem(); itemFPBatch.Caption = "批量分配"; itemFPBatch.ItemClick += new ItemClickEventHandler(OnBtnFPNewClick); //分配 this.pmFP.AddItems(new BarItem[] { itemFPBatch }); this.dbpFP.Visible = !string.IsNullOrWhiteSpace(this.BillModelObj.PopupUnionCode); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 初始打印 /// /// 说明:打印完成需要参数 /// 创建人:龚宇超 /// 创建日期:2018-07-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// protected void GetPrintOtherParam() { //取得打印完成后的参数 if (this.BillModelObj.PrintSql.Contains("<<")) { string[] strs = this.BillModelObj.PrintSql.Split(new[] { ">>" }, 2, StringSplitOptions.None); _mainPrintSql = strs[1]; _printModeCond = strs[0].Replace("<<", ""); } if (!string.IsNullOrEmpty(_printModeCond) && _printModeCond.IndexOf(';') > 0) { string[] str = _printModeCond.Split(';'); DataRow item = AttachImpl.GetSystemModule(str[0]); if (item == null) { MessageUtil.Show("打印参数有误"); return; } string tableName = item["TableName"] + ""; string modetype = item["modType"] + ""; string comprefix = BaseImpl.GetColumnPrefix(tableName); string primaryKey = modetype == "1" ? BaseImpl.GetBasePrimaryKey(str[0]) : comprefix + "billdocument_id"; //表名,列前缀,主键字段,主键值,模块编号,主打印Sql _printSaveParams = new List() { tableName, comprefix, primaryKey, str[1], str[0], _mainPrintSql }; //判断是否直接打印 modetype 区别单据和基础档案模块 switch (modetype) { case "1": ModuleModel mode = new ModuleModel(MainImpl.GetSystemdllTab(str[0])); if (mode != null) _isExcPrint = mode.PrintType == 3; break; case "2": BaseAccraditationModel model = new BaseAccraditationModel(BillAuditImpl.GetPubAuditProperty(str[0])); if (model != null) _isExcPrint = model.BillPrintType == 3; break; } } } #endregion #endregion /// /// 说明:初始化审批步骤 /// 创建人:王一帆 /// 创建日期:2020-04-17 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void Init(DataTable tabPages) { //this.pcGrid.GridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(OnPcgridRowFocusedRowChanged); //InitControl(); InitTabPages(tabPages); this.InitializeSplitterPosition(); Thread thread = new Thread(CreateGrid); thread.IsBackground = true; thread.Start(); } #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(); if (ProcessExists) { this.gridFinish.SetReadOnlyColumns(Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(), GridCustomColumnStruct.AuditOverMainGridView + this.SysModel.ModuleCode); } else { this.gridFinish.SetReadOnlyColumns(BaseAuditImpl.GetDefaultGridMainColumns(this.AuditComModelObj.Moduletype), GridCustomColumnStruct.AuditOverMainGridView + this.SysModel.ModuleCode); } } else { string key = "FinishFLOWSTEP_" + this.SysModel.ModuleCode + "_" + "999" + "_" + "999" + ""; this.TmpPrefix = this.BaseAccraditModelObj.ColumnPrefix; if (ProcessExists) { this.gridFinish.SetReadOnlyColumns(Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(), modelkeyName + key); } else { this.gridFinish.SetReadOnlyColumns(BaseAuditImpl.GetAuditMainGridCoulmns(AuditComModelObj.SystemTable, this.SysModel.ModuleCode), modelkeyName + key); } this.gridFinish.Model = this.SysModel; // 创建自定义搜索控件 this.SearchCreateTopControl(); } // 上面主表格的事件注册 this.gridFinish.GridView.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(GvFinish_SelectionChangedClick); } #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 { WaitForm.ShowForm(); GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) return; this.TmpPrefix = this.pl_top_searchCond.Visible ? string.Empty : this.BaseAccraditModelObj.ColumnPrefix; //单据审批弹出模块加载 string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.DynamicsyModel.FormText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.DynamicsyModel.Privilege, this.DynamicsyModel.ModuleCode).Split('~'); string[] menuArgs = { this.DynamicsyModel.ModuleId + "", "", dr[this.TmpPrefix + this.BaseAccraditModelObj.DefaultStepField] + "", dr[this.TmpPrefix + this.BaseAccraditModelObj.DefaultParmaryField] + "", "", "1" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); //初始明细数据 this.SysModel = new DynamicPubAccraditionPopModel(args); this._drBillInfoMsg = BaseAuditImpl.GetCurrentFlowRowData(this.BillModelObj.MasterTable, this.BillModelObj.PrimaryKey, SysModel.BillDocumentId); //this.ControlObj.SetAllControlValue(_drBillInfoMsg); //初始明细数据 this.gcDetail.Model = this.SysModel; //this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceParamToValue(this.BillModelObj.DetailSql, SysModel.BillDocumentId)); this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(this._drBillInfoMsg, this.BillModelObj.DetailSql)); this.gcDetail.SetGridViewDataSource(_dtSourceData); if (_dtSourceData != null) this._dtSpareSourceData = this._dtSourceData.Clone(); this.gcDetail.ParentControl = this.ControlObj; this.gcDetail.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(this.AuditModelObj.BillGridMenuFlag + SysModel.ModuleCode, ModuleType.BillAuditDetail), SysModel, OnGridViewRightCallBack); this.gcDetail.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLDETAIL_" + this.BillModelObj.FormKey)); this.SetBillControl(this.AuditModelObj.BillModifyFields); this.SetDetailedTable(gc); this.gcDetail.GridView.OptionsBehavior.Editable = false; } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } finally { WaitForm.HideForm(); } } #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-11-30 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SearchCreateTopControl() { this._searchContrl = new MyControl(this.BaseAccraditModelObj.OverBackSql, this.gridFinish); if (ProcessExists) { this.pl_top.Height = this._searchContrl.InitSearchControl(Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(), this.pl_top); } else { this.pl_top.Height = this._searchContrl.InitSearchControl(BaseModuleImpl.GetCustomQueryFields(this.BaseAccraditModelObj.OverBackKey), this.pl_top); } } #endregion #region 多线程创建明细列 /// /// 说明:创建明细列 /// 创建人:王一帆 /// 创建日期:2020-04-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void CreateGrid() { Thread.Sleep(100); try { if (this.InvokeRequired) { this.Invoke((EventHandler)delegate { if (isBillFlag) { InitHeader(); InitBillInfo(); foreach (TabPageObj tab in this._tabPageObjs) { int cnt = 0; foreach (TabPageItemObj item in tab.TabPageItemObjs) { DataTable dtColumns = BaseAuditImpl.GetGridColumns(AuditComModelObj.SystemTable, this.DynamicsyModel.ModuleCode, tab.FlowStepModel.StepCode, this.DynamicsyModel.UserName); string key = "FLOWSTEP_" + this.DynamicsyModel.ModuleCode + "_" + tab.FlowStepModel.StepCode + "_" + item.AuditModel.Id + ""; item.GridControlObj.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors(key)); item.GridControlObj.SetReadOnlyColumns(dtColumns, modelkeyName + key); // 追加复选框用于批量审批 if (BaseAccraditModelObj.MuitlAuditFlag || BaseAccraditModelObj.MuitlAuditBackFlag) { GridDragGrid.GridAddCheckBox(item.GridControlObj.GridView); //GridColumn checkColumn = new GridColumn(); //checkColumn.Name = checkColumn.FieldName = "_check"; //checkColumn.Caption = "选"; //checkColumn.Width = 30; //checkColumn.Visible = true; //checkColumn.VisibleIndex = 0; //checkColumn.OptionsColumn.AllowEdit = false; //item.GridControlObj.GridView.Columns.Insert(0, checkColumn); //item.GridControlObj.GridView.RowCellClick += new RowCellClickEventHandler(OnGridViewRowCellClick); } item.GridControlObj.SetGridViewDataSource(BaseImpl.GetDataTableResult(item.AuditModel.StepSql)); item.GridControlObj.GridView.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(OnPcgridRowCellClick); // 为表格增加一列复选框列 DataTable table = item.GridControlObj.gridControl.DataSource as DataTable; //if (table != null && !table.Columns.Contains("_check") && (BaseAccraditModelObj.MuitlAuditFlag || BaseAccraditModelObj.MuitlAuditBackFlag)) //{ // table.Columns.Add("_check", typeof(bool)); // foreach (DataRow row in table.Rows) // { // row["_check"] = 0; // } //} //item.GridControlObj.GridView.DataSourceChanged += new EventHandler(OnPcgridRowFocusedRowChanged); cnt += item.GridControlObj.GridView.RowCount; Application.DoEvents(); } tab.TabPage.Text = tab.FlowStepModel.StepGroup + "(" + cnt + ")"; } //InitFirst(); } }); } } catch (Exception) { throw; } } #endregion /// /// 说明:绑定选项卡 /// 创建人:龚宇超 /// 创建日期:2017-12-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The menu code. public void InitTabPages(DataTable tabPages) { foreach (DataRow row in tabPages.Rows) { PanelControl panel = new PanelControl(); //tabpage里面的panel子集 List panelList = new List(); //tabpage里面的panel集合进行顺序反转 XtraTabPage tabPage = new XtraTabPage(); tabPage.AutoScroll = true; string cnt = string.Empty; FlowTypeStepModel model = new FlowTypeStepModel(row); //创建表格 DataTable flowList = new DataTable(); if (ProcessExists) { flowList = Lskj.Data.Caches.CacheSYSConfig.Instance().AccessToContent(); } else { flowList = BaseAuditImpl.GetFlowStepTab(AuditComModelObj.SystemFlow, this.DynamicsyModel.ModuleCode, model.StepGroup); } for (int i = 1; i <= flowList.Rows.Count; i++) { //单个审批小模块面板由表格和label组合 PanelControl gridPanel = new PanelControl(); //DataTable dtColumns = BaseAuditImpl.GetGridColumns(AuditComModelObj.SystemTable, this.SysModel.ModuleCode, model.StepCode, this.SysModel.UserName); AccraditationModel accrModel = new AccraditationModel(flowList.Rows[i - 1]); //string key = "FLOWSTEP_" + this.SysModel.ModuleCode + "_" + accrModel.CurstepName + "_" + accrModel.Id + ""; //gridPanel.Padding = new System.Windows.Forms.Padding(2); gridPanel.BorderStyle = BorderStyles.NoBorder; string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.DynamicsyModel.FormText, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, this.DynamicsyModel.Privilege, this.DynamicsyModel.ModuleCode).Split('~'); string[] menuArgs = { this.DynamicsyModel.ModuleId + "", "", accrModel.StepCode + "", "", "", "0" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); DynamicPubAccraditionPopModel SysModel = new DynamicPubAccraditionPopModel(args); this.isBillFlag = true; GridControlEx pcGrid = new GridControlEx(); pcGrid.Parent = gridPanel; pcGrid.Dock = DockStyle.Fill; pcGrid.GridView.Tag = accrModel; pcGrid.Model = SysModel; //pcGrid.GridView.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(OnPcgridRowCellClick); //pcGrid.GridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(OnPcgridRowFocusedRowChanged); LabelControl lab = new LabelControl(); lab.AutoSizeMode = LabelAutoSizeMode.None; lab.Dock = DockStyle.Top; lab.ForeColor = Color.Black; lab.Parent = gridPanel; lab.Height = 20; lab.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab.Visible = flowList.Rows.Count > 1; panel.Dock = DockStyle.Fill; panel.BorderStyle = BorderStyles.NoBorder; gridPanel.Dock = DockStyle.Fill; gridPanel.Parent = panel; panelList.Add(panel); TabPageObj tabPageObj = new TabPageObj(); tabPageObj.FlowStepModel = model; tabPageObj.TabPage = tabPage; tabPageObj.TabPageItemObjs.Add(new TabPageItemObj() { LabelObj = lab, AuditModel = accrModel, GridControlObj = pcGrid }); _tabPageObjs.Add(tabPageObj); tabPage.Tag = SysModel; } //cnt += auditPanel.pcGrid.GridView.RowCount; tabMain.BorderStylePage = BorderStyles.NoBorder; tabPage.Controls.AddRange(panelList.Reverse().ToArray()); //tabPage.Padding = new System.Windows.Forms.Padding(2); tabPage.Text = model.StepGroup; tabMain.TabPages.Insert(tabMain.TabPages.Count - 1, tabPage); } tabMain.SelectedTabPageIndex = 0; } /// /// 说明:单据选中/取消选中数据 /// 创建人:龚宇超 /// 创建日期:2020-05-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. void OnGridViewRowCellClick(object sender, RowCellClickEventArgs e) { try { DataRow rowItem = (sender as GridView).GetFocusedDataRow(); if (rowItem != null && e.Column.FieldName == "_check") { rowItem["_check"] = "True".Equals(rowItem["_check"] + "") ? 0 : 1; rowItem.AcceptChanges(); } } catch (Exception) { } } /// /// 说明:点击初始化所有界面数据 /// 创建人:王一帆 /// 创建日期:2020-03-26 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void InitControl(DynamicPubAccraditionPopModel SysModel) { try { this.pMenu.ClearLinks(); this.pMprint.ClearLinks(); foreach (SimpleButton item in itemCommonList) { if (this.pcTool.Contains(item)) this.pcTool.Controls.Remove(item); } this.itemCommonList.Clear(); this.SysModel = SysModel; this._isInitFinish = false; this.splitMain.Visible = false; this.InitializeSetting(); this.InitializeControl(); } catch (Exception ex) { LogHelper.Instance.WriteError(ex, ResourceKeys.BaseModule); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } finally { //默认一开始不加载明细数据 this._isInitFinish = true; this.splitMain.Visible = true; this.isFinish = true; } } #region 初始化属性设置 /// /// 说明:初始化属性设置 /// 创建人:龚宇超 /// 创建日期:2018-01-03 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeSetting() { try { this.AuditModelObj = new AccraditationModel(BillAuditImpl.GetBillFlowData(this.SysModel.ModuleCode, this.SysModel.StepCode)); this.BillModelObj = new BillAuditModel(BillImpl.GetBillInfo(this.SysModel.ModuleCode)); this.BillAuditComObj = new BillAuditCommonModel(); this.BillModelObj.MasterPreFix = BaseImpl.GetColumnPrefix(this.BillModelObj.MasterTable); this.btnAccradit.Text = this.AuditModelObj.StepApplyText; this.btnBack.Text = this.AuditModelObj.StepBackText; this.btnClose.Text = this.AuditModelObj.StepCloseText; this.btnSpare.Enabled = this.AuditModelObj.StepDivide > 0; //this.btnAttach.Text = "附件"+"(" + AttachImpl.GetFileCount(this.BillModelObj.DirId + "", this.SysModel.BillDocumentId) + ")"; //记录推送用户 this.GetPushOpers(); this.gcDetail.gridControl.Paint += new PaintEventHandler(gcDetail_Panint); //this.pcGrid.GridView.RowCellClick += new DevExpress.XtraGrid.Views.Grid.RowCellClickEventHandler(OnPcgridRowCellClick); //this.pcGrid.GridView.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(OnPcgridRowFocusedRowChanged); this._dtBillInfoFiled = BillAuditImpl.GetBillInfoData(this.SysModel.ModuleCode); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 绘制水印 /// /// 说明:绘制水印 /// 创建人:龚宇超 /// 创建日期:2018-01-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void gcDetail_Panint(object sender, PaintEventArgs e) { if (this.SysModel.StepOver != "1") return; GraphicsText graphicsText = new GraphicsText(); graphicsText.Graphics = e.Graphics; StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; Pen pen = new Pen(Color.Red, 2f); SolidBrush brush = new SolidBrush(Color.Red); if (!string.IsNullOrEmpty(this._waterMark.Text)) { int x = (this.gcDetail.Width - 90) / 2; int y = (this.gcDetail.Height - 32) / 2; graphicsText.DrawString(this._waterMark.Text, new Font("宋体", 20, FontStyle.Bold), brush, new PointF(x, y), format, -20f); e.Graphics.TranslateTransform(x, y); e.Graphics.RotateTransform(-20f); e.Graphics.DrawRectangle(pen, new Rectangle(-45, -19, 90, 32)); } e.Graphics.ResetTransform(); if (!string.IsNullOrEmpty(this._waterMark.Print)) { int x1 = (this.gcDetail.Width - 120) / 2; int y1 = (this.gcDetail.Height - 90) / 2 + 100; graphicsText.DrawString(this._waterMark.Print, new Font("宋体", 18, FontStyle.Bold), brush, new PointF(x1, y1), format, -20f); e.Graphics.TranslateTransform(x1, y1); e.Graphics.RotateTransform(-20f); e.Graphics.DrawRectangle(pen, new Rectangle(-60, -19, 120, 32)); } e.Graphics.ResetTransform(); if (!string.IsNullOrEmpty(this._waterMark.Collect)) { int x2 = (this.gcDetail.Width - 90) / 2; int y2 = (this.gcDetail.Height - 90) / 2 - 40; graphicsText.DrawString(this._waterMark.Collect, new Font("宋体", 20, FontStyle.Bold), brush, new PointF(x2, y2), format, -20f); e.Graphics.TranslateTransform(x2, y2); e.Graphics.RotateTransform(-20f); e.Graphics.DrawRectangle(pen, new Rectangle(-45, -19, 90, 32)); } } #endregion #region 点击加载明细 /// /// 说明:行获取焦点触发事件 /// 创建人:王一帆 /// 创建日期:2018-09-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnPcgridRowFocusedRowChanged(object sender, EventArgs e) { try { //if (!isFinish) return; // WaitForm.ShowForm(); GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) { DataTable detailTable = gcDetail.GridControl.DataSourceTable(); detailTable.Clear(); this.ControlObj.ResetControlValue(); return; } RefreshAll(dr); this.SetDetailedTable(gc); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show("加载明细数据失败!" + Message); } finally { //WaitForm.HideForm(); } } #endregion #region 表格是否可以编辑设置 /// /// 说明:表格编辑时,判断是否是否编辑 /// 创建人:王一帆 /// 创建日期:2020-03-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnGridViewShowingEditor(object sender, CancelEventArgs e) { try { DataRow rowItem = this.gcDetail.GridView.GetDataRow(this.gcDetail.GridView.FocusedRowHandle); if (!string.IsNullOrWhiteSpace(BillModelObj.UpdateDetailCond)) { string UpdateCond = this.ControlObj.ReplaceParentControlValue(BillModelObj.UpdateDetailCond); UpdateCond = ReplaceHelper.ReplaceRowParam(rowItem, UpdateCond); if (!ReplaceHelper.EvalCond(UpdateCond)) { e.Cancel = true;//该行不可编辑 } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); } } #endregion #region 点击加载明细 /// /// 说明:加载明细数据 /// 创建人:王一帆 /// 创建日期:2018-09-28 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void OnPcgridRowCellClick(object sender, EventArgs e) { try { WaitForm.ShowForm(); GridView gc = sender as GridView; DataRow dr = gc.GetFocusedDataRow(); if (dr == null) return; this.TmpPrefix = this.BaseAccraditModelObj.ColumnPrefix; //单据审批弹出模块加载 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.TmpPrefix + this.BaseAccraditModelObj.DefaultStepField] + "", dr[this.TmpPrefix + this.BaseAccraditModelObj.DefaultParmaryField] + "", "", "0" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); //初始明细数据 this.SysModel = new DynamicPubAccraditionPopModel(args); this._drBillInfoMsg = BaseAuditImpl.GetCurrentFlowRowData(this.BillModelObj.MasterTable, this.BillModelObj.PrimaryKey, SysModel.BillDocumentId); //this.ControlObj.SetAllControlValue(_drBillInfoMsg); this.btnAttach.Text = "附件" + "(" + AttachImpl.GetFileCount(this.BillModelObj.DirId + "", this.SysModel.BillDocumentId) + ")"; //初始明细数据 this.gcDetail.Model = this.SysModel; //this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceParamToValue(this.BillModelObj.DetailSql, SysModel.BillDocumentId)); this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(this._drBillInfoMsg, this.BillModelObj.DetailSql)); this.gcDetail.SetGridViewDataSource(_dtSourceData); if (_dtSourceData != null) this._dtSpareSourceData = this._dtSourceData.Clone(); this.gcDetail.ParentControl = this.ControlObj; this.gcDetail.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(this.AuditModelObj.BillGridMenuFlag + SysModel.ModuleCode, ModuleType.BillAuditDetail), SysModel, OnGridViewRightCallBack); this.gcDetail.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLDETAIL_" + this.BillModelObj.FormKey)); this.SetBillControl(this.AuditModelObj.BillModifyFields); this.SetDetailedTable(gc); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show("加载明细数据失败!" + Message); } finally { WaitForm.HideForm(); } } #endregion #region 初始化控件 /// /// 说明:初始化控件 /// 创建人:龚宇超 /// 创建日期:2018-01-03 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeControl() { try { //this.SetFormSize(); //this.BindTab(); this.BindBill(); this.InitCommonMenu(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 初始化常用菜单 /// /// 说明:设置初始化常用菜单 /// 创建人:龚宇超 /// 创建日期:2018-01-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitCommonMenu() { DataTable tableCommon = BaseModuleImpl.GetBaseGridRightMenus(this.SysModel.ModuleCode, ModuleType.BillDetail); if (tableCommon == null && tableCommon.Rows.Count <= 0) { dpb_Tools.Enabled = false; return; } int i = 0, x = 4; foreach (DataRow item in tableCommon.Rows) { if (i > 1) { BarButtonItem itemCommon = new BarButtonItem(); itemCommon.Caption = item["menuname"] + ""; itemCommon.Tag = item; itemCommon.ItemClick += new ItemClickEventHandler(itemCommon_ItemClick); this.pMenu.AddItem(itemCommon); } else { SimpleButton itemCommon = new SimpleButton(); //itemCommon.AutoSize = true; itemCommon.Text = item["menuname"] + ""; itemCommon.Tag = item; itemCommon.Size = new System.Drawing.Size(90, 26); itemCommon.Click += new EventHandler(itemCommon_Click); itemCommon.Location = new Point(x + 6, 6); x += itemCommon.Width + 6; pcTool.Controls.Add(itemCommon); itemCommonList.Add(itemCommon); i++; } } } #endregion #region 常用工具 /// /// 说明:常用工具点击 /// 创建人:龚宇超 /// 创建日期:2017-01-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void itemCommon_ItemClick(object sender, ItemClickEventArgs e) { DataRow rowItem = e.Item.Tag as DataRow; CommonMenu menu = new CommonMenu(this.SysModel, this.ControlObj); menu.Apply(rowItem); } /// /// 常用工具点击 /// /// /// protected void itemCommon_Click(object sender, EventArgs e) { try { SimpleButton btn = sender as SimpleButton; DataRow rowItem = btn.Tag as DataRow; CommonMenu menu = new CommonMenu(this.SysModel, this.ControlObj); menu.Apply(rowItem); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 设置窗体大小 /// /// 说明:设置窗体大小 /// 创建人:龚宇超 /// 创建日期:2018-01-03 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SetFormSize() { int panelWidth = this.BillModelObj.PanelWidth; this.Width = panelWidth < Screen.PrimaryScreen.WorkingArea.Width ? panelWidth : Screen.PrimaryScreen.WorkingArea.Width; this.Left = (Screen.PrimaryScreen.WorkingArea.Width / 2) - (this.Width / 2); this.Top = (Screen.PrimaryScreen.WorkingArea.Height / 2) - (this.Height / 2); } #endregion #region 绑定审批单据 /// /// 说明:单据管理 /// 创建人:龚宇超 /// 创建日期:2018-01-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void BindBill() { //this.ControlObj.InitControl(BaseModuleImpl.GetControlLocation(this.BillModelObj.FormKey, this.SysModel.ModuleCode), this.pcBillMain); //this.pcBillMain.Height = this.BillModelObj.ParentHeight - 36 > this.pcBillMain.Height ? this.pcBillMain.Height : this.BillModelObj.ParentHeight; ////初始明细数据 //this.gcDetail.SetEditColumns(BillImpl.GetDetailColumns(this.SysModel.ModuleCode), GridCustomColumnStruct.AuditPopupDetailGridView + this.BillModelObj.FormKey); ////修改字段 //if (!string.IsNullOrEmpty(this.AuditModelObj.DetailModifyFields)) //{ // gcDetail.GridView.OptionsBehavior.Editable = true; // this.AuditModelObj.DetailModifyFields = this.AuditModelObj.DetailModifyFields + ","; // GridColumnCollection gc = this.gcDetail.GridView.Columns; // foreach (GridColumn item in gc) // { // item.OptionsColumn.AllowEdit = this.AuditModelObj.DetailModifyFields.IndexOf(item.FieldName + ",", StringComparison.OrdinalIgnoreCase) != -1; // item.OptionsColumn.ReadOnly = !item.OptionsColumn.AllowEdit; // } //} this.InitPrint(); } #endregion #region 初始化表头和明细信息 /// /// 说明:初始化表头 /// 创建人:王一帆 /// 创建日期:2020-04-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitHeader() { // 初始化表头 this.ControlObj = new MyControl(); this.pcBillMain.Visible = true; this.ControlObj.InitControl(BaseModuleImpl.GetControlLocation(this.BillModelObj.FormKey, this.SysModel.ModuleCode), this.pcBillMain); this.pcBillMain.Height = this.BillModelObj.ParentHeight - 36 > this.pcBillMain.Height ? this.pcBillMain.Height : this.BillModelObj.ParentHeight; } /// /// 说明:初始化明细 /// 创建人:王一帆 /// 创建日期:2020-04-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitBillInfo() { // 初始化表头 this.gcDetail.Model = this.SysModel; this.gcDetail.SetEditColumns(BillImpl.GetDetailColumns(this.SysModel.ModuleCode), GridCustomColumnStruct.AuditPopupDetailGridView + this.BillModelObj.FormKey); this.gcDetail.ParentControl = this.ControlObj; this.gcDetail.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(this.AuditModelObj.BillGridMenuFlag + this.SysModel.ModuleCode, ModuleType.BillAuditDetail), this.SysModel, OnGridViewRightCallBack); this.gcDetail.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLDETAIL_" + this.BillModelObj.FormKey)); } /// ///默认加载第一次 /// private void InitFirst() { try { TabPageObj tab = this._tabPageObjs[0]; foreach (TabPageItemObj item in tab.TabPageItemObjs) { DataRow rowItem = item.GridControlObj.GridView.GetDataRow(0); if (rowItem == null) return; RefreshAll(rowItem); Application.DoEvents(); } } catch (Exception) { } } /// /// 刷新第一次加载 /// /// public void RefreshAll(DataRow dr) { this.TmpPrefix = this.BaseAccraditModelObj.ColumnPrefix; //单据审批弹出模块加载 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.TmpPrefix + this.BaseAccraditModelObj.DefaultStepField] + "", dr[this.TmpPrefix + this.BaseAccraditModelObj.DefaultParmaryField] + "", "", "0" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); //初始明细数据 this.SysModel = new DynamicPubAccraditionPopModel(args); this._drBillInfoMsg = BaseAuditImpl.GetCurrentFlowRowData(this.BillModelObj.MasterTable, this.BillModelObj.PrimaryKey, SysModel.BillDocumentId); //this.ControlObj.SetAllControlValue(_drBillInfoMsg); //初始明细数据 this.gcDetail.Model = this.SysModel; //this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceParamToValue(this.BillModelObj.DetailSql, SysModel.BillDocumentId)); this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(this._drBillInfoMsg, this.BillModelObj.DetailSql)); this.gcDetail.SetGridViewDataSource(_dtSourceData); if (_dtSourceData != null) this._dtSpareSourceData = this._dtSourceData.Clone(); this.gcDetail.ParentControl = this.ControlObj; this.gcDetail.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(this.AuditModelObj.BillGridMenuFlag + SysModel.ModuleCode, ModuleType.BillAuditDetail), SysModel, OnGridViewRightCallBack); this.gcDetail.SetGridRowColors(BaseModuleImpl.GetBaseGridRowColors("BILLDETAIL_" + this.BillModelObj.FormKey)); this.gcDetail.GridView.ShowingEditor += new CancelEventHandler(OnGridViewShowingEditor); this.SetBillControl(this.AuditModelObj.BillModifyFields); } #endregion #region 点击查看附加信息 /// /// 说明:点击查看会签记录信息 /// 创建人:王一帆 /// 创建日期:2020-04-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void OnbtnRecordClick(object sender, EventArgs e) { try { AuditInformation auditInformation = new AuditInformation(); auditInformation.InitControl(SysModel, _flowTypeStepModel, BillAuditComObj); DialogResult result = auditInformation.ShowDialog(); if (result == DialogResult.OK) MessageUtil.Show("无提醒和会签记录!"); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:点击查看明细附加信息 /// 创建人:王一帆 /// 创建日期:2020-04-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void OnbtnAdditionalClick(object sender, EventArgs e) { try { AdditionalFrm additionalFrm = new AdditionalFrm(); DataRow dr = this.gcDetail.GridView.GetFocusedDataRow(); if (dr != null) { additionalFrm.InitControl(this.SysModel, dr); DialogResult result = additionalFrm.ShowDialog(); } else { MessageUtil.Show("请选中一行明细信息查看附加内容!"); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 初始化打印 /// /// 说明:创建打印 /// 创建人:龚宇超 /// 创建日期:2018-01-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitPrint() { try { string[] files = this.BillModelObj.PrintFile.Split('|'); for (int i = 0; i < files.Length; i++) { string fileName = files[i]; if (!string.IsNullOrWhiteSpace(fileName)) { BarButtonItem itemPrint = new BarButtonItem(); itemPrint.Caption = fileName.Replace(".rmf", ""); itemPrint.Tag = files[i]; itemPrint.ItemClick += new ItemClickEventHandler(itemPrint_ItemClick); pMprint.AddItem(itemPrint); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 打印 /// /// 说明:打印事件 /// 创建人:龚宇超 /// 创建日期:2018-01-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void itemPrint_ItemClick(object sender, ItemClickEventArgs e) { try { string billNo = this.SysModel.BillDocumentId; string printPath = PubUtil.PrintFileAbsolutelyPath; string printFile = e.Item.Tag + ""; if (!string.IsNullOrEmpty(billNo)) { DataRow masterRow = BillImpl.GetDataRowResult(ReplaceHelper.ReplaceParamToValue(this.BillModelObj.MasterSql, billNo)); if (masterRow == null) { MessageUtil.Show(ResourceKeys.DataNotFount); return; } if (!ReplaceHelper.ReplaceRowParamCond(masterRow, this.BillModelObj.PrintCond)) { MessageUtil.Show(ResourceKeys.DisSatisfyPrintCond); return; } string tmpSql = ReplaceHelper.ReplaceRowParam(masterRow, this.BillModelObj.PrintSql); string tmpSql1 = ReplaceHelper.ReplaceRowParam(masterRow, this.BillModelObj.PrintSql1); string tmpSql2 = ReplaceHelper.ReplaceRowParam(masterRow, this.BillModelObj.PrintSql2); if (printFile.Contains(PrintUtil.TemplateFlag)) { string mainSql = string.Empty; List tmpSqls = new List(); if (_printSaveParams != null && _printSaveParams.Count > 0) { _printSaveParams[5] = mainSql = ReplaceHelper.ReplaceRowParam(masterRow, _mainPrintSql); _printSaveParams[3] = masterRow.Table.Columns.Contains(_printSaveParams[2] + "") ? masterRow[_printSaveParams[2]] + "" : masterRow[BillModelObj.PrimaryKey] + ""; tmpSqls.Add(mainSql); tmpSqls.Add(tmpSql1); tmpSqls.AddRange(tmpSql2.Split(';').ToList()); } else { if (!string.IsNullOrWhiteSpace(tmpSql)) tmpSqls.Add(tmpSql); if (!string.IsNullOrWhiteSpace(tmpSql1)) tmpSqls.Add(tmpSql1); if (!string.IsNullOrWhiteSpace(tmpSql2)) tmpSqls.AddRange(tmpSql2.Split(';').ToList()); } PrintUtil.OnAfterPrint -= new EventHandler(OnReportPrintAfter); PrintUtil.OnAfterPrint += new EventHandler(OnReportPrintAfter); PrintUtil.FastReportPrint(tmpSqls, printFile, _isExcPrint); } else { DelphiHelper.LoadDelphiDll(printPath, printPath, printFile, tmpSql, tmpSql1, this.BillModelObj.PrintFileType, tmpSql2); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:打印完成后回调 /// 创建人:龚宇超 /// 创建日期:2018-07-05 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The e. void OnReportPrintAfter(object sender, EventArgs e) { try { if (_printSaveParams != null && _printSaveParams.Count > 0) { //打印完成后添加数据库 int result = BaseModuleImpl.SavePrintRecord(_printSaveParams[0], _printSaveParams[1], _printSaveParams[2], _printSaveParams[3], _printSaveParams[4]); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 审批单据管理 /// /// 说明:单据管理 /// 创建人:龚宇超 /// 创建日期:2018-01-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SetBillControl(string billFields) { this._mainBillTypeValue = this._drBillInfoMsg[this.BillModelObj.BillType] + ""; if (string.IsNullOrEmpty(this._mainBillTypeValue) || this._mainBillTypeValue == "0") { MessageUtil.Show(ResourceKeys.NotSetFlowType); return; } this._waterMark = new WaterMark(this.BillModelObj.MasterPreFix, this._drBillInfoMsg); this.SetButtonsStatus(); if (this.pcBillMain.Visible) { this.ControlObj.CanExecControl = false; this.ControlObj.SetAllControlValue(this._drBillInfoMsg); this.ControlObj.CanExecControl = true; // 必填字段 string RequiredFields = this.AuditModelObj.RequiredFields.Trim(','); if (!string.IsNullOrEmpty(RequiredFields)) { foreach (DataRow dr in this._dtBillInfoFiled.Rows) { string fieldName = dr["fieldName"] + ""; this.ControlObj.SetRequiredControl(fieldName, RequiredFields.Split(',').Contains(fieldName), false); } } //判断操作字段和字段的权限(没测试,先不开放) //DataTable AuthorityTable = PowerImpl.GetModuleAuthorityEnable(this.SysModel.ModuleCode); //foreach (DataRow dr in this._dtBillInfoFiled.Rows) //{ // string fieldName = dr["fieldName"] + ""; // BaseUserControl control = this.ControlObj.FindControl(fieldName); // if (string.IsNullOrWhiteSpace(control.Model.PrivilegeOper)) // { // //没有人员权限,转成可编辑 // this.ControlObj.SetReadOnlyControl(fieldName, !billFields.Split(',').Contains(fieldName), false); // } // else // { // List targetPrivTypeIds = new List(); // foreach (string permission in control.Model.PrivilegeOper.Split(',')) // { // targetPrivTypeIds.Add(int.Parse(permission)); // } // //获取权限对应的人员名称 // string userString = string.Join(",", AuthorityTable.AsEnumerable() // .Where(row => targetPrivTypeIds.Contains(row.Field("privTypeId"))) // .Select(row => row.Field("userList")) // .Where(value => value != null) // .ToList()) + ","; // //有权限的字段,转成可编辑 // if (userString.Contains(ERPInfo.Instance.UserName + ",") || ERPInfo.Instance.UserName.Equals("管理员")) this.ControlObj.SetReadOnlyControl(fieldName, !billFields.Split(',').Contains(fieldName), false); ; // } //} //操作字段 foreach (DataRow dr in this._dtBillInfoFiled.Rows) { string fieldName = dr["fieldName"] + ""; this.ControlObj.SetReadOnlyControl(fieldName, !billFields.Split(',').Contains(fieldName), false); } this.SetColor(); if (this.BillModelObj.HighlightChangeControl) this.ControlObj.ModifiedDefaultValueHighlight(this._drBillInfoMsg); } } #endregion #region 明细表格管理 /// /// 说明:明细表格管理 /// 创建人:龚宇超 /// 创建日期:2018-01-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SetDetailedTable(GridView gc) { //明细必填 this.DetailsRequired.Clear(); string detailFields = string.Empty; if (gc.Tag != null && gc.Tag is AccraditationModel) { AccraditationModel am = gc.Tag as AccraditationModel; detailFields = am.RequiredDetailFields + ","; } //修改字段 和 明细必填字段 if (!string.IsNullOrEmpty(this.AuditModelObj.DetailModifyFields) || !string.IsNullOrWhiteSpace(detailFields)) { gcDetail.GridView.OptionsBehavior.Editable = true; this.AuditModelObj.DetailModifyFields = this.AuditModelObj.DetailModifyFields + ","; GridColumnCollection gdc = this.gcDetail.GridView.Columns; foreach (GridColumn item in gdc) { item.OptionsColumn.AllowEdit = this.AuditModelObj.DetailModifyFields.IndexOf(item.FieldName + ",", StringComparison.OrdinalIgnoreCase) != -1; item.OptionsColumn.ReadOnly = !item.OptionsColumn.AllowEdit; if (!item.OptionsColumn.AllowEdit) { item.AppearanceHeader.Options.UseForeColor = true; item.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(HeaderColor); } else { item.AppearanceHeader.Options.UseForeColor = true; item.AppearanceHeader.ForeColor = Color.Black; } if (detailFields.IndexOf(item.FieldName + ",", StringComparison.OrdinalIgnoreCase) != -1) { item.OptionsColumn.AllowEdit = true; item.AppearanceHeader.Options.UseForeColor = true; item.AppearanceHeader.ForeColor = RequiredForceColor; this.DetailsRequired.Add(item.FieldName); } } } } #endregion #region 设置按钮状态 /// /// 说明:设置按钮状态 /// 创建人:龚宇超 /// 创建日期:2018-01-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void SetButtonsStatus() { DataRow dr = BillAuditImpl.GetBillFlowStep(this.SysModel.ModuleCode, this._mainBillTypeValue, this.SysModel.StepCode); if (dr == null) { MessageUtil.Show(ResourceKeys.FlowStepConfigError); return; } //终审 if (this.SysModel.StepOver == "1") { this.btnClose.Enabled = this.btnSave.Enabled = this.btnAccradit.Enabled = this.btnBack.Enabled = this.btnSpare.Enabled = false; this.btnSave.Visible = this.btnClose.Visible = this.btnBack.Visible = this.pcTool.Visible = true; this.btnAccradit.Text = "确认(&Y)"; return; } this._flowTypeStepModel = new FlowTypeStepModel(dr); string operUser = this._flowTypeStepModel.OperUser; DataRow drOper = BillAuditImpl.GetOperators(this.SysModel.ModuleCode, this.SysModel.BillDocumentId, this.SysModel.StepCode); operUser = drOper != null ? drOper["operators"] + "" : operUser; operUser.Contains(this.SysModel.UserName); this.btnSave.Enabled = this.btnClose.Enabled = this.btnBack.Enabled = this.btnAccradit.Enabled = operUser.Contains(this.SysModel.UserName); this.btnClose.Visible = this._flowTypeStepModel.StepClosed == 1; //this.btnAccradit.Visible = BillAuditImpl.GetBillComfirm(this.SysModel.ConfirmId) < 0; } #endregion #region 右键菜单执行后刷新 /// /// 说明:右键菜单执行后刷新单据数据 /// 创建人:龚宇超 /// 创建日期:2018-03-19 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The sender. /// The instance containing the event data. protected void OnGridViewRightCallBack(object sender, EventArgs e) { try { // 刷新主表 this._drBillInfoMsg = BaseAuditImpl.GetCurrentFlowRowData(this.BillModelObj.MasterTable, this.BillModelObj.PrimaryKey, this.SysModel.BillDocumentId); this.ControlObj.SetAllControlValue(this._drBillInfoMsg); // 刷新明细表 //this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceParamToValue(this.BillModelObj.DetailSql, this.SysModel.BillDocumentId)); this._dtSourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(this._drBillInfoMsg, this.BillModelObj.DetailSql)); this.gcDetail.SetGridViewDataSource(_dtSourceData); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 记录本次推送人员 /// /// 说明:记录本次推送人员 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void GetPushOpers() { DataRow beforeOpers = BillAuditImpl.GetPushedOpers(this.SysModel.BillDocumentId, this.SysModel.StepCode); if (beforeOpers != null) { //记录本次操作信息 this._beforeMenuName = beforeOpers["menuname"] + ""; this._beforeUsers = beforeOpers["operators"] + ""; this._beforeId = Convert.ToInt32(beforeOpers["id"]); } } #endregion #region 记载分割条位置 private void splitMain_SplitterPositionChanged(object sender, EventArgs e) { if (this._isInitFinish) { IniHelper.Write(string.Format("base_spliterPositionMain_{0}", this.SysModel.ModuleCode), this.splitMain.SplitterPosition + ""); } } #endregion #region 初始化分割条位置 /// /// 说明:初始化分割条位置 /// 创建人:龚宇超 /// 创建日期:2017-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void InitializeSplitterPosition() { try { string splitterMainPosition = IniHelper.Read(string.Format("base_spliterPositionMain_{0}", this.SysModel.ModuleCode)); if (!string.IsNullOrEmpty(splitterMainPosition)) this.splitMain.SplitterPosition = Convert.ToInt32(splitterMainPosition); } catch (Exception e) { LogHelper.Instance.WriteError(e); } } #endregion private void btnAccradit_Click(object sender, EventArgs e) { try { //获取当前页签的GridControlEx和选中行行号 int oldRowHandle = 0; GridControlEx SelectGridControlEx = null; foreach (TabPageObj tab in this._tabPageObjs) { if (tab.TabPage == this.tabMain.SelectedTabPage) { foreach (TabPageItemObj item in tab.TabPageItemObjs) { SelectGridControlEx = item.GridControlObj; oldRowHandle = item.GridControlObj.GridView.FocusedRowHandle; } } } List rowItems = new List(); if (BaseAccraditModelObj.MuitlAuditFlag) { foreach (TabPageObj tab in this._tabPageObjs) { if (tab.TabPage == this.tabMain.SelectedTabPage) { foreach (TabPageItemObj item in tab.TabPageItemObjs) { int[] mSelectRows = item.GridControlObj.GridView.GetSelectedRows(); foreach (int itemIndex in mSelectRows) { DataRow selectRow = item.GridControlObj.GridView.GetDataRow(itemIndex); rowItems.Add(selectRow); } //DataTable table = item.GridControlObj.gridControl.DataSource as DataTable; //foreach (DataRow row in table.Rows) //{ // if ("1".Equals(row["_check"] + "") || "true".Equals(row["_check"] + "", StringComparison.OrdinalIgnoreCase)) // { // rowItems.Add(row); // } //} } } } } if (rowItems.Count > 1) { if (MessageUtil.Show("确定审核通过" + rowItems.Count + "条数据?", MessageBoxButtons.YesNo) == DialogResult.Yes) { int success = 0, fault = 0; string tipMsg = ""; string nextSelectStepCode = string.Empty; string nextSelectStepOper = string.Empty; try { foreach (DataRow item in rowItems) { WaitForm.ShowForm("正在审核[" + item[this.BaseAccraditModelObj.TmpParmaryField] + "]单据!"); bool isComplete = true;//判断必填项 string BillDocumentId = item[this.BaseAccraditModelObj.TmpParmaryField] + "";//单据号 //主表必填 DataRow _baseRowData = BaseAuditImpl.GetCurrentFlowRowData(this.BaseAccraditModelObj.BillTable, this.BaseAccraditModelObj.TmpParmaryField, BillDocumentId); if (_baseRowData != null && AuditModelObj != null && !string.IsNullOrEmpty(AuditModelObj.RequiredFields)) { string[] Fields = AuditModelObj.RequiredFields.Split(','); foreach (string RequiredField in Fields) { if (_baseRowData.Table.Columns.Contains(RequiredField) && string.IsNullOrWhiteSpace(_baseRowData[RequiredField] + "")) { isComplete = false; } } } //明细必填 //DataTable SourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceParamToValue(BillModelObj.DetailSql, BillDocumentId)); DataTable SourceData = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(_baseRowData, BillModelObj.DetailSql)); if (SourceData != null && !string.IsNullOrEmpty(AuditModelObj.RequiredDetailFields)) { string[] Fields = AuditModelObj.RequiredDetailFields.Split(','); foreach (string RequiredField in Fields) { if (SourceData.Columns.Contains(RequiredField) && SourceData.Rows.Cast().FirstOrDefault(x => string.IsNullOrWhiteSpace(x[RequiredField] + "")) != null) { isComplete = false; } } } if (isComplete) { WaitForm.ShowForm("正在审核[" + item[this.BaseAccraditModelObj.TmpParmaryField] + "]单据!"); //string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, this.SysModel, item[this.BaseAccraditModelObj.TmpStepField] + "", item[this.BaseAccraditModelObj.TmpParmaryField] + "", "", this.AuditComModelObj.ProcedureName, "F", "", "批量审批同意"); string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, out string msgText,this.SysModel, item[this.BaseAccraditModelObj.TmpStepField] + "", item[this.BaseAccraditModelObj.TmpParmaryField] + "", "", this.AuditComModelObj.ProcedureName, "F", "", "批量审批同意"); if ("1".Equals(result)) { success++; } else { fault++; tipMsg = msgText + "\r\n"; } } else { fault++; tipMsg += "[" + item[this.BaseAccraditModelObj.TmpParmaryField] + "]单据内存在必填项未处理" + "\r\n"; } } MessageUtil.Show("审核成功:" + success + "\r\n" + "审核失败:" + fault + (string.IsNullOrEmpty(tipMsg) ? "" : "\r\n失败原因如下:" + tipMsg)); } catch (Exception) { } finally { WaitForm.HideForm(); if (!this.BaseAccraditModelObj.DisableAutomaticRefresh) RefreshTabPage(); DataTable detailTable = gcDetail.GridControl.DataSourceTable(); detailTable.Clear(); this.ControlObj.ResetControlValue(); } } } else { //主表必填 if (!this.ControlObj.isRequiredFields(this.AuditModelObj.RequiredFields)) { MessageUtil.Show("单据内存在必填项未处理"); return; } //明细必填 if (!this.gcDetail.GridControl.isRequiredFields(this.AuditModelObj.RequiredDetailFields, this.gcDetail.GridView)) { MessageUtil.Show("单据内存在必填项未处理"); return; } FrmExamine frmExamine = new FrmExamine(); frmExamine.ExamineOkCallBack += new EventHandler(ExamineOkCallBack); frmExamine.CheckSuggestion.ValueField = frmExamine.CheckSuggestion.TextField = "Mix_apellation"; frmExamine.CheckSuggestion.SetDataSource(BaseImpl.GetDataTableResult(this.AuditModelObj.SuggestionSql)); frmExamine.CheckSuggestion.TextEdit.SelectedIndex = 0; frmExamine.ShowDialog(); } //选中上一次选中行行号 if (SelectGridControlEx != null && oldRowHandle > 0) { SelectGridControlEx.GridView.SelectRowHandler(oldRowHandle); OnPcgridRowCellClick(SelectGridControlEx.GridView, null); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #region 常用意见 /// /// 说明:常用意见下拉框事件 /// 创建人:龚宇超 /// 创建日期:2018-01-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void CheckSuggestion_Click(object sender, EventArgs e) { try { FrmExamine frmExamine = sender as FrmExamine; frmExamine.txtRemark.Text = frmExamine.CheckSuggestion.EditText; } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion /// /// 审核确定回调 /// /// /// private void ExamineOkCallBack(object sender, EventArgs e) { try { FrmExamine frmExamine = sender as FrmExamine; if (this.SysModel.StepOver == "1") { if (BillAuditImpl.ConfirmAudit(this.SysModel.UserId, frmExamine.txtRemark.EditText, this.SysModel.ModuleCode, this.SysModel.BillDocumentId) > 0) { MessageUtil.Show(ResourceKeys.ConfirmSuccess); frmExamine.Close(); if (!this.BaseAccraditModelObj.DisableAutomaticRefresh) RefreshTabPage(); } else { MessageUtil.Show(ResourceKeys.ConfirmFail); } } else { bool isAudit = true; string confirmOpers = string.Empty, remindOpers = string.Empty; string nextSelectStepCode = string.Empty; string nextSelectStepOper = string.Empty; if (this._flowTypeStepModel.RemindSelect == "1") { FrmRemindSelectForm formRemind = new FrmRemindSelectForm(); formRemind.FieldValue = this.SysModel.BillDocumentId; formRemind.MenuCode = this.SysModel.ModuleCode; isAudit = formRemind.ShowDialog() == DialogResult.Yes; confirmOpers = formRemind.ConfirmOpers; remindOpers = formRemind.RemindOpers; } if (isAudit) { //确认是否审批 if (MessageUtil.Show(string.Format(ResourceKeys.ConfirmIsAudit), MessageBoxButtons.YesNo) == DialogResult.Yes) { if (!SaveBillData(0, false)) return; //string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, this.SysModel, this.SysModel.StepCode, this.SysModel.BillDocumentId, "", this.BillAuditComObj.ProcedureName, "F", this._flowTypeStepModel.RemindSelect, frmExamine.txtRemark.EditText, remindOpers, confirmOpers); string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, out string msgText, this.SysModel, this.SysModel.StepCode, this.SysModel.BillDocumentId, "", this.BillAuditComObj.ProcedureName, "F", this._flowTypeStepModel.RemindSelect, frmExamine.txtRemark.EditText, remindOpers, confirmOpers); if ("1".Equals(result)) { MessageUtil.Show(ResourceKeys.AuditSuccess); PushHelper push = new PushHelper(this.SysModel.BillDocumentId, this.SysModel.StepCode, this.SysModel.ModuleCode, this._beforeUsers, this._beforeMenuName, this._beforeId); push.Push_Bill_Oper_Message(); frmExamine.DialogResult = DialogResult.OK; if (!this.BaseAccraditModelObj.DisableAutomaticRefresh) RefreshTabPage(); } else { MessageUtil.Show(ResourceKeys.AuditFail + "\r\n" + msgText); } } } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #region 保存单据 /// /// 说明:保存单据 /// 创建人:龚宇超 /// 创建日期:2018-01-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void btnSave_Click(object sender, EventArgs e) { try { bool result = SaveBillData(); if (result) { //获取当前页签的GridControlEx和选中行行号 int oldRowHandle = 0; GridControlEx SelectGridControlEx = null; foreach (TabPageObj tab in this._tabPageObjs) { if (tab.TabPage == this.tabMain.SelectedTabPage) { foreach (TabPageItemObj item in tab.TabPageItemObjs) { SelectGridControlEx = item.GridControlObj; oldRowHandle = item.GridControlObj.GridView.FocusedRowHandle; } } } //选中上一次选中行行号 if (SelectGridControlEx != null && oldRowHandle >= 0) { SelectGridControlEx.GridView.SelectRowHandler(oldRowHandle); OnPcgridRowCellClick(SelectGridControlEx.GridView, null); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #region 修改表头 /// /// 说明:获取修改表头 /// 创建人:龚宇超 /// 创建日期:2018-01-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. private string GetUpdateBillHeader() { StringBuilder updateBuilder = new StringBuilder(); foreach (ControlModel model in this.ControlObj.ControlModels) { if (!model.IsSave || model.FieldType == ControlType.LabPic || model.FieldType == ControlType.LabPicEx) continue; if (this.ControlObj.FindControl(model) != null) { string fieldValue = this.ControlObj.GetControlValue(model); if (fieldValue == "****") continue; if (SystemInfo.Instance.IsSpecialAuditSave && this._drBillInfoMsg != null && this._drBillInfoMsg.Table != null && this._drBillInfoMsg.Table.Columns.Contains(model.FieldName) && AuditChangeLog.IsSameValue(this._drBillInfoMsg[model.FieldName] + "", fieldValue)) { continue; } //updateBuilder.AppendFormat("{0}='{1}',", model.FieldName, fieldValue); updateBuilder.Append(string.IsNullOrEmpty(fieldValue) ? string.Format("{0}={1}", model.FieldName, this.ControlObj.GetNullValue(model)) : string.Format("{0}=N'{1}',", model.FieldName, fieldValue.Contains("'") ? fieldValue.Replace("'", "''") : fieldValue)); } } string updateFields = updateBuilder.ToString().TrimEnd(','); if (string.IsNullOrEmpty(updateFields)) { return string.Empty; } return string.Format("update {0} set {1} where {2}='{3}'", this.BillModelObj.MasterTable, updateBuilder.ToString().TrimEnd(','), BillModelObj.PrimaryKey, this.SysModel.BillDocumentId); } #endregion #region 获取明细 /// /// 说明:获取明细 /// 创建人:龚宇超 /// 创建日期:2017-01-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. private string GetDetailRecord(string guid) { // 构造明细 StringBuilder detailBuilder = new StringBuilder(); DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", BillModelObj.DetailTable + "_temp"));//单据明细性表 DataTable detailTable = this.gcDetail.GridControl.DataSourceTable().TrimDeleteRows(); //if (this.BillModelObj.DetailTreeTable) //{ // detailTable = ((this.gcDetail as TreeGridControlEx).TreeListObj.DataSource as DataTable).TrimDeleteRows(); //} if (detailTable.Rows.Count > 0) { DataTable BillColumns = BaseImpl.GetDataTableResult(string.Format("select * from {0} where 1<>1", BillModelObj.DetailTable)); IEnumerable detailColumns = BillColumns.Columns.Cast(); DataTable BillTempColumns = BaseImpl.GetDataTableResult(string.Format("select * from {0} where 1<>1", BillModelObj.DetailTable + "_temp")); foreach (DataRow dataRow in detailTable.Rows) { StringBuilder fields = new StringBuilder(); StringBuilder values = new StringBuilder(); string detailSql = @"insert into " + BillModelObj.DetailTable + "_temp" + "({0}) values({1})"; fields.Append("sysstr,"); values.Append("'" + guid + "',"); foreach (DataColumn item in detailTable.Columns) { var selectColumn = detailColumns.Where(n => n.ColumnName.Equals(item.ColumnName, StringComparison.OrdinalIgnoreCase)); if (selectColumn.Count() == 0) { continue; } fields.Append(item.ColumnName + ","); string fieldValue = (dataRow[item] + "").Replace("'", "''"); if (!BillTempColumns.Columns.Contains(item.ColumnName)) { string type = "varchar(50)"; if (item.DataType == typeof(DateTime)) { type = "datetime"; } BaseImpl.ExecSqlValue(string.Format("alter table {0} add {1} {2}", BillModelObj.DetailTable + "_temp", item.ColumnName, type)); } if (!string.IsNullOrWhiteSpace(fieldValue)) { values.Append(item.DataType == typeof(DateTime) ? "N'" + Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") + "'," : "N'" + fieldValue + "',"); } else { if (item.DataType == typeof(Decimal) || item.DataType == typeof(Double) || item.DataType == typeof(Int16) || item.DataType == typeof(Int32) || item.DataType == typeof(Int64)) values.Append("0,"); else if (item.DataType == typeof(DateTime)) values.Append("NULL,"); else values.Append("'',"); } } detailBuilder.AppendFormat(detailSql, fields.ToString().Trim(','), values.ToString().Trim(',')); } } return detailBuilder.ToString(); // 构造明细 //StringBuilder detailBuilder = new StringBuilder(); //DataTable detailTable = this.gcDetail.GridControl.DataSourceTable().TrimDeleteRows(); //if (detailTable.Rows.Count > 0) //{ // foreach (DataRow dataRow in detailTable.Rows) // { // StringBuilder fields = new StringBuilder(); // StringBuilder values = new StringBuilder(); // string detailSql = @"insert into " + BillModelObj.DetailTable + "_temp" + "({0}) values({1})"; // fields.Append("sysstr,"); // values.Append("'" + guid + "',"); // foreach (DataColumn item in detailTable.Columns) // { // if (item.ColumnName.Equals(guidField) || item.ColumnName.Equals(mRecordPrimaryField) || item.ColumnName.Equals(ERPInfo.Instance.isAddRows)) continue; // fields.Append(item.ColumnName + ","); // string fieldValue = (dataRow[item] + "").Replace("'", "''"); // if (!string.IsNullOrWhiteSpace(fieldValue)) // { // values.Append(item.DataType == typeof(DateTime) ? "N'" + Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") + "'," : "N'" + fieldValue + "',"); // } // else // { // if (item.DataType == typeof(Decimal) || // item.DataType == typeof(Double) || // item.DataType == typeof(Int16) || // item.DataType == typeof(Int32) || // item.DataType == typeof(Int64)) // values.Append("0,"); // else if (item.DataType == typeof(DateTime)) // values.Append("NULL,"); // else // values.Append("'',"); // } // } // detailBuilder.AppendFormat(detailSql, fields.ToString().Trim(','), values.ToString().Trim(',')); // } //} //return detailBuilder.ToString(); } #endregion #region 审核保存时候 /// /// 说明:保存和修改的验证 /// 创建人:曹屹峰 /// 创建日期:2021-9-13 /// 修改人: /// 修改日期: /// 修改备注: /// 数据库的表格属性表 /// 版本:1.0 /// public string SaveOrModifyBalidation(DataTable TableProperties, DataRow row, DataColumn col, string fieldValue) { if (!row.Table.Columns.Contains(col.ColumnName)) return ""; DataRow hasContainRow = BaseModuleImpl.GetControlLocation(this.BillModelObj.FormKey, this.SysModel.ModuleCode).Rows.Cast().FirstOrDefault(x => (x["fieldname"] + "").ToLower() == col.ColumnName.ToLower()); if (TableProperties.Rows.Count == 0) return ""; DataRow[] ListOfAttributes = TableProperties.Select("COLUMN_NAME='" + col.ColumnName + "'"); if (ListOfAttributes == null || ListOfAttributes.Length == 0) return ""; string saveErrorMessage = string.Empty; int MaxInputLength = 0; //判断长度是否超出 if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("varchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 8000; } MaxInputLength = System.Text.Encoding.Default.GetBytes((row[col.ColumnName] + "").Replace("'", "''")).Length; } else if (ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("nvarchar")) { if (int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) == -1) { ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"] = 4000; } MaxInputLength = (row[col.ColumnName] + "").Replace("'", "''").Length; } if (!string.IsNullOrWhiteSpace(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) && int.Parse(ListOfAttributes[0]["CHARACTER_MAXIMUM_LENGTH"].ToString()) < MaxInputLength) { saveErrorMessage = saveErrorMessage + hasContainRow["username"].ToString() + "~" + col.ColumnName + ": 输入内容长度超出限制;\r\n"; } //判断属性是否正确 if ((ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("int") || ListOfAttributes[0]["DATA_TYPE"].ToString().Equals("decimal")) && !IsNumberic((row[col.ColumnName] + "").Replace("'", "''")) && !string.IsNullOrWhiteSpace((row[col.ColumnName] + ""))) { saveErrorMessage = saveErrorMessage + hasContainRow["username"].ToString() + "~" + col.ColumnName + ": 数据格式错误;\r\n"; } return saveErrorMessage; } #endregion #region 判断输入的字符串是否可以转换成数值类型 /// /// 判断输入的字符串是否可以转换成数值类型 /// /// /// public static bool IsNumberic(string str) { double vsNum; bool isNum; isNum = double.TryParse(str, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out vsNum); return isNum; } #endregion /// /// 说明:保存单据 /// 创建人:龚宇超 /// 创建日期:2018-01-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 保存确认标记 private bool SaveBillData(int confirmFlag = 0, bool showMsg = true) { bool save = false; try { string guid = Guid.NewGuid().ToString(); string masterSql = GetUpdateBillHeader(); string detailSql = GetDetailRecord(guid); string SaveErrorMessage = string.Empty; if (string.IsNullOrEmpty(detailSql) && !this.BillModelObj.SaveNullDetail) { MessageUtil.Show(ResourceKeys.BillDetailIsNotNull); return false; } string tipMsg = string.Empty; if (!this.ControlObj.VerifyNull()) return false; if (!this.gcDetail.GridView.ValidateNullRequired(this.DetailsRequired)) return false; int result = BillImpl.BillSave(masterSql, detailSql, this.BillModelObj.DetailTable, ref this.SysModel.BillDocumentId, guid, this.BillModelObj.BillSeq, 2, confirmFlag, out tipMsg, 1, this.BillModelObj.NewVer); switch (result) { case 1: if (showMsg) MessageUtil.Show(ResourceKeys.SaveSuccess); AuditChangeLog.SaveHeaderChangeLog(this._drBillInfoMsg, this.ControlObj, this.SysModel.BillDocumentId, this.SysModel.StepCode, ERPInfo.Instance.UserId); save = true; break; case 9: if (MessageUtil.Show(tipMsg, MessageBoxButtons.YesNo) == DialogResult.Yes) save = SaveBillData(1, showMsg); break; default: MessageUtil.Show(string.Format(ResourceKeys.OperateFail, result, tipMsg)); break; } } catch (Exception ex) { throw; // MessageUtil.Show(ex.Message); } return save; } #endregion #region 返退 /// /// 说明:返回审核 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void btnReturn_Click(object sender, EventArgs e) { try { //获取当前页签的GridControlEx和选中行行号 int oldRowHandle = 0; GridControlEx SelectGridControlEx = null; foreach (TabPageObj tab in this._tabPageObjs) { if (tab.TabPage == this.tabMain.SelectedTabPage) { foreach (TabPageItemObj item in tab.TabPageItemObjs) { SelectGridControlEx = item.GridControlObj; oldRowHandle = item.GridControlObj.GridView.FocusedRowHandle; } } } List rowItems = new List(); if (BaseAccraditModelObj.MuitlAuditBackFlag) { foreach (TabPageObj tab in this._tabPageObjs) { if (tab.TabPage == this.tabMain.SelectedTabPage) { foreach (TabPageItemObj item in tab.TabPageItemObjs) { int[] mSelectRows = item.GridControlObj.GridView.GetSelectedRows(); foreach (int itemIndex in mSelectRows) { DataRow selectRow = item.GridControlObj.GridView.GetDataRow(itemIndex); rowItems.Add(selectRow); } //DataTable table = item.GridControlObj.gridControl.DataSource as DataTable; //foreach (DataRow row in table.Rows) //{ // if ("1".Equals(row["_check"] + "") || "true".Equals(row["_check"] + "", StringComparison.OrdinalIgnoreCase)) // { // rowItems.Add(row); // } //} } } } } if (rowItems.Count > 1) { if (MessageUtil.Show("确定回退" + rowItems.Count + "条数据?", MessageBoxButtons.YesNo) == DialogResult.Yes) { int success = 0, fault = 0; string tipMsg = ""; this._auditAdvice = "批量返退"; bool firstLoad = true; int ret = 0; foreach (DataRow item in rowItems) { if (firstLoad) ret = ExecuteBackSelect(item); if (ret == -9) return; string nextSelectStepCode = string.Empty; string nextSelectStepOper = string.Empty; WaitForm.ShowForm("正在返退[" + item[this.BaseAccraditModelObj.TmpParmaryField] + "]单据!"); //string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, this.SysModel, this.SysModel.StepCode, this.SysModel.BillDocumentId, "", this.BillAuditComObj.ProcedureName, "R", "0", this._auditAdvice, "", "", true, ret); string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, out string msgText, this.SysModel, item[this.BaseAccraditModelObj.TmpStepField] + "", item[this.BaseAccraditModelObj.TmpParmaryField] + "", "", this.BillAuditComObj.ProcedureName, "R", "0", this._auditAdvice, "", "", true, ret); if ("1".Equals(result)) { success++; } else { fault++; tipMsg = msgText + "\r\n"; } firstLoad = false; } MessageUtil.Show("返退成功:" + success + "\r\n" + "返退失败:" + fault + (string.IsNullOrEmpty(tipMsg) ? "" : "\r\n失败原因如下:" + tipMsg)); RefreshTabPage(); } } else { this._auditAdvice = "拒绝"; int ret = ExecuteBackSelect(this._drBillInfoMsg); if (ret == -9) return; if (MessageUtil.Show(ResourceKeys.ConfimAuditFailAndReturnBill, MessageBoxButtons.YesNo) == DialogResult.Yes) { string nextSelectStepCode = string.Empty; string nextSelectStepOper = string.Empty; //string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, this.SysModel, this.SysModel.StepCode, this.SysModel.BillDocumentId, "", this.BillAuditComObj.ProcedureName, "R", "0", this._auditAdvice, "", "", true, ret); string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper, out string msgText, this.SysModel, this.SysModel.StepCode, this.SysModel.BillDocumentId, "", this.BillAuditComObj.ProcedureName, "R", "0", this._auditAdvice, "", "", true, ret); if (result == "1") { MessageUtil.Show(ResourceKeys.ForcedSuccess); PushHelper push = new PushHelper(this.SysModel.BillDocumentId, this.SysModel.StepCode, this.SysModel.ModuleCode, this._beforeUsers, this._beforeMenuName, this._beforeId); push.Push_Bill_Oper_Message(); RefreshTabPage(); } else { MessageUtil.Show(string.Format(ResourceKeys.ForcedFail, msgText)); } } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion #region 返回审核 /// /// 说明:返回审核 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The row. /// System.Int32. private int ExecuteBackSelect(DataRow row) { if (row == null) { MessageUtil.Show(ResourceKeys.NoFindAntiauditBill); return -9; } if (this.BillModelObj.BackSelected == "0") return -1; if (this.SysModel.StepCode == "100") { string billDocumentId = this.PanelCondVisible && row.Table.Columns.Contains(this.BaseAccraditModelObj.DefaultParmaryField) ? row[this.BaseAccraditModelObj.DefaultParmaryField] + "" : row[string.IsNullOrEmpty(this.BaseAccraditModelObj.KeyField + "") ? this.BaseAccraditModelObj.TmpParmaryField : this.BaseAccraditModelObj.KeyField + ""] + ""; FrmBack cfd = new FrmBack((string.Format(ResourceKeys.ForcedReturnBill, billDocumentId))); DialogResult backResult = cfd.ShowDialog(); if (backResult == DialogResult.OK) { this._auditAdvice = cfd.ComfirmMsg; return 0; } else { return -9; } } FrmBackSelect frmBackSel = new FrmBackSelect(); frmBackSel.SysModel = this.SysModel; frmBackSel.BillModelObj = this.BillModelObj; frmBackSel.InitControl(); if (frmBackSel.ShowDialog() != DialogResult.OK) return -9; this._auditAdvice = frmBackSel.ComfirmMsg; return frmBackSel.SelectStepCode; } #endregion private void btnSpare_Click(object sender, EventArgs e) { try { FrmSpare spare = new FrmSpare(); spare.SysModel = this.SysModel; spare.BillModel = this.BillModelObj; spare.DtSource = this._dtSourceData; spare.DetailSql = this.BillModelObj.DetailSql; spare.DtNewSource = this._dtSpareSourceData; DialogResult result = spare.ShowDialog(); this._dtSpareSourceData = spare.DtNewSource; if (result == DialogResult.OK) checkBillSplite(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #region 检查分单 /// /// 说明:检查分单 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.Boolean. private bool checkBillSplite() { bool createResult = false; try { if (this._dtSourceData.Rows.Count > 0) { createSourceBillId(); //复制单据数据 createResult = createBill(); if (createResult) { this.gcDetail.SetGridViewDataSource(_dtSourceData); } } } catch (Exception ex) { MessageUtil.Show(ex); } return createResult; } #endregion #region 单据来源 /// /// 说明:单据来源 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private void createSourceBillId() { try { BillAuditImpl.CreateSourceBillId(this.BillModelObj.MasterTable); } catch (Exception ex) { MessageUtil.Show(ex); } } #endregion #region 分单创建单据 /// /// 说明:分单创建单据 /// 创建人:龚宇超 /// 创建日期:2018-01-10 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private bool createBill() { string billNo = BillImpl.GetBillNo(this.BillModelObj.BillSeq); //构造表头 string masterSql = this.GetBillHearder(billNo); //构造明细 string detailSql = this.GetBillDetail(billNo); //分单处理 string msg = string.Empty; int returnValue = BillAuditImpl.SpliteBill(out msg, masterSql, detailSql, billNo, this.SysModel.ModuleCode, this.SysModel.BillDocumentId); if (returnValue == 1) { MessageUtil.Show(ResourceKeys.SpliterBillSuccess); this._dtSourceData.Clear(); return true; } else if (returnValue != 9) { MessageUtil.Show(string.Format(ResourceKeys.SpliterBillFail, returnValue, msg)); } return false; } #endregion #region 构造表头 /// /// 说明:构造表头 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// private string GetBillHearder(string billNo) { StringBuilder fieldBuilder = new StringBuilder(); StringBuilder valueBuilder = new StringBuilder(); foreach (ControlModel model in this.ControlObj.ControlModels) { if (!model.IsSave || model.FieldName.Equals(BillModelObj.PrimaryKey, StringComparison.OrdinalIgnoreCase) || model.FieldType == ControlType.LabPic || model.FieldType == ControlType.LabPicEx) continue; string fieldValue = this.ControlObj.GetControlValue(model); fieldBuilder.Append(model.FieldName + ","); valueBuilder.AppendFormat("'{0}',", fieldValue); } fieldBuilder.Append(this.BillModelObj.PrimaryKey + ","); valueBuilder.AppendFormat("'{0}',", billNo); return string.Format(@"insert into {0} ({1})values({2})", this.BillModelObj.MasterTable, fieldBuilder.ToString().TrimEnd(','), valueBuilder.ToString().TrimEnd(',')); } #endregion #region 构造明细 /// /// 说明:构造明细 /// 创建人:龚宇超 /// 创建日期:2018-01-09 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 单据编号. private string GetBillDetail(string billNo) { string ids = string.Empty; string detailPrefix = BaseImpl.GetColumnPrefix(this.BillModelObj.DetailTable); string sourceId = detailPrefix + "id"; foreach (DataRow item in _dtSpareSourceData.Rows) { ids += item[sourceId] + ","; } return string.Format("update {0} set {1}Billdocument_id='{2}' where {4} in ({3})", this.BillModelObj.DetailTable, detailPrefix, billNo, ids.TrimEnd(','), sourceId); } #endregion #region tabPage组成类 /// /// tabPage组成结构 /// public class TabPageItemObj { /// /// 审批模型 /// public AccraditationModel AuditModel; /// /// 进度流层表格 /// public GridControlEx GridControlObj; /// /// 进度流层名 /// public LabelControl LabelObj; } /// /// tabpage模型 /// public class TabPageObj { /// /// 选项卡 /// public XtraTabPage TabPage; /// /// 表格集合 /// public List TabPageItemObjs = new List(); /// /// 步骤模型 /// public FlowTypeStepModel FlowStepModel; } #endregion /// /// 切换审批步骤刷新配置 /// /// /// protected void OnSelectedPageChanged(object sender, TabPageChangedEventArgs e) { try { XtraTabPage tabPage = this.tabMain.SelectedTabPage; DynamicPubAccraditionPopModel SysModel = tabPage.Tag as DynamicPubAccraditionPopModel; if (SysModel == null) { this.btnClose.Enabled = this.btnSave.Enabled = this.btnAccradit.Enabled = this.btnBack.Enabled = this.btnSpare.Enabled = false; return; } else { this.btnClose.Enabled = this.btnSave.Enabled = this.btnAccradit.Enabled = this.btnBack.Enabled = this.btnSpare.Enabled = true; } InitControl(SysModel); //foreach (TabPageObj tab in this._tabPageObjs) //{ // if (tab.TabPage == tabPage) // { // if (tab.TabPageItemObjs != null && tab.TabPageItemObjs[0].AuditModel != null) // { // string required = tab.TabPageItemObjs[0].AuditModel.RequiredDetailFields; // if (!string.IsNullOrWhiteSpace(required)) // { // GridColumnCollection gdc = this.gcDetail.GridView.Columns; // foreach (GridColumn item in gdc) // { // if (item.OptionsColumn.AllowEdit = required.IndexOf(item.FieldName + ",", StringComparison.OrdinalIgnoreCase) != -1) // { // item.AppearanceHeader.Options.UseForeColor = true; // item.AppearanceHeader.ForeColor = RequiredForceColor; // } // else if (!item.OptionsColumn.AllowEdit) // { // item.AppearanceHeader.Options.UseForeColor = true; // item.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(HeaderColor); // } // else // { // item.AppearanceHeader.Options.UseForeColor = true; // item.AppearanceHeader.ForeColor = Color.Black; // } // } // } // } // } //} } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #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 btnBack_Click(object sender, EventArgs e) { try { DataRow dr = this.gridFinish.GridView.GetFocusedDataRow(); if (dr == null) { MessageUtil.Show(ResourceKeys.NotReturnData); return; } this.TmpPrefix = this.pl_top_searchCond.Visible ? string.Empty : this.BaseAccraditModelObj.ColumnPrefix; 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] + ""; FrmBack cfd = new FrmBack((string.Format(ResourceKeys.ForcedReturnBill, billDocumentId))); DialogResult backResult = cfd.ShowDialog(); if (backResult == DialogResult.OK) { string hintMsg = cfd.ComfirmMsg; //记录本次推送人员,审核过清除消息 string beforeMenuname = string.Empty, beforeUsers = string.Empty; string nextSelectStepCode = string.Empty; string nextSelectStepOper = 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", hintMsg, "", "", !isBack, -1, 0, true); string result = BaseAuditImpl.Audit(out nextSelectStepCode, out nextSelectStepOper,out string msgText, this.SysModel, stepCode, billDocumentId, isBack ? string.Format(ResourceKeys.ForcedReturnBill, billDocumentId) + "" : "", prodouceName, "R", "0", hintMsg, "", "", !isBack, -1, 0, true); 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, msgText)); } } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show("返审操作出错!" + Message); } } #endregion #region 刷新数据 /// /// 说明:刷新窗体 /// 创建人:龚宇超 /// 创建日期:2017-12-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// public void RefreshTabPage() { DataTable detailTable = gcDetail.GridControl.DataSourceTable(); detailTable.Clear(); this.ControlObj.ResetControlValue(); foreach (TabPageObj tab in this._tabPageObjs) { int cnt = 0; foreach (TabPageItemObj item in tab.TabPageItemObjs) { int oldRowHandle = item.GridControlObj.GridView.FocusedRowHandle; item.GridControlObj.SetGridViewDataSource(BaseImpl.GetDataTableResult(item.AuditModel.StepSql)); cnt += item.GridControlObj.GridView.RowCount; // 为表格增加一列复选框列 //DataTable table = item.GridControlObj.gridControl.DataSource as DataTable; //if (table != null && !table.Columns.Contains("_check")) //{ // table.Columns.Add("_check", typeof(bool)); // foreach (DataRow row in table.Rows) // { // row["_check"] = 0; // } //} if (!(BaseAccraditModelObj.MuitlAuditFlag || BaseAccraditModelObj.MuitlAuditBackFlag)) { item.GridControlObj.GridView.SelectRowHandler(oldRowHandle); } Application.DoEvents(); } tab.TabPage.Text = tab.FlowStepModel.StepGroup + "(" + cnt + ")"; } } #endregion /// /// 手动刷新 /// /// /// 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-01-25 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// System.String. private void btnAttach_Click(object sender, EventArgs e) { try { if (string.IsNullOrWhiteSpace(this.SysModel.BillDocumentId)) { MessageUtil.Show(ResourceKeys.NotFoundBillNo); } else { string url = string.Format("pages/PhotoView.html?left=1&username={0}&password={1}&id={2}&isview={3}&dllcoid=", ERPInfo.Instance.UserName, ERPInfo.Instance.Password, this.SysModel.BillDocumentId, this.btnAccradit.Enabled ? "0" : "1"); // 固定传入参数(窗口标题、操作员ID、操作员名称、权限、模版编号) string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, this.SysModel.FormText, this.SysModel.UserId, this.SysModel.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode).Split('~'); string[] menuArgs = SystemInfo.Instance.BsAttachFlag.Equals("1") ? new string[] { "", "", url } : new string[] { this.SysModel.BillDocumentId, "0", this.BillModelObj.DirId + "", "" }; string[] args = defaultArgs.Concat(menuArgs).ToArray(); IForm form = FormHelper.LoadDllForm(SystemInfo.Instance.BsAttachFlag.Equals("1") ? ResourceDynamic.PubBrower : ResourceDynamic.PhotoView, args); DialogResult result = form.SubForm.ShowDialog(); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } #endregion /// /// 优化加载速度 /// protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } public EventHandler GridView_DoubleClick { get; set; } /// /// 导出明细 /// /// /// private void simpleButton2_Click(object sender, EventArgs e) { LogUtil.WriteDebug(this.SysModel.ModuleCode, "导出数据", this.SysModel.FormText, "单据明细导出", this.SysModel.ModuleId + ""); this.gcDetail.GridControl.ToExcel(this.SysModel.FormText); } /// /// 说明:分配明细 /// 创建人:龚宇超 /// 创建日期:2020-01-15 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnBtnFPOldClick(object sender, EventArgs e) { this.gcDetail.GridView.PostEditor(); FPOld(); } private void OnBtnFPNewClick(object sender, EventArgs e) { this.gcDetail.GridView.PostEditor(); FPNew(); } /// /// 新版分配 /// private void FPNew(int rowHandle = 0) { try { this.gcDetail.GridView.FocusedRowHandle = rowHandle; DataTable table = this.gcDetail.GridControl.DataSource as DataTable; if (!table.Columns.Contains(guidField)) { table.Columns.Add(guidField, typeof(string)); } #region 创建分配界面 string[] args = { this.SysModel.FormText, this.SysModel.UserId, this.SysModel.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode, this.SysModel.ModuleId + "", this.BillModelObj.PopupUnionCode, "1000" }; DynamicBaseSelectModel baseModel = new DynamicBaseSelectModel(args); using (FrmBaseSelectBatch frmSelect = new FrmBaseSelectBatch(baseModel, this.ControlObj, this.gcDetail)) { frmSelect.Text = this.BillModelObj.TypeName; frmSelect.InitControl(); frmSelect.OnAfterFPCallback += OnAfterFPCallback; #region 初始化第一条数据 DataRow rowItem = this.gcDetail.GridView.GetFocusedDataRow(); if (rowItem == null) { return; } rowItem[guidField] = Guid.NewGuid().ToString(); if (!string.IsNullOrEmpty(mRecordPrimaryField) && table.Columns.Contains(this.mRecordPrimaryField)) { // 检查数据是否为分配后的行 if (!string.IsNullOrEmpty(rowItem[this.mRecordPrimaryField] + "")) { if (this.gcDetail.GridView.FocusedRowHandle + 1 <= this.gcDetail.GridView.RowCount - 1) { int focusedRowHandle = this.gcDetail.GridView.FocusedRowHandle + 1; this.gcDetail.GridView.FocusedRowHandle = focusedRowHandle; if (this.gcDetail.GridView.FocusedRowHandle == focusedRowHandle) { FPNew(focusedRowHandle); } else { MessageUtil.Show("全部分配完毕"); } } return; } } if (!string.IsNullOrEmpty(mRecordPrimaryField)) { frmSelect.FpRows = table.Rows.Cast().Where(x => (rowItem[guidField] + "").Equals(x[guidField] + "")).ToArray(); if (frmSelect.FpRows != null && frmSelect.FpRows.Length > 0) { List rows = frmSelect.FpRows.ToList(); rows.Remove(rowItem); frmSelect.FpRows = rows.ToArray(); } if (table.Columns.Contains(mRecordPrimaryField)) { frmSelect.FpOtherRows = table.Rows.Cast().Where(x => !(rowItem[guidField] + "").Equals(x[guidField] + "") && !string.IsNullOrEmpty(x[mRecordPrimaryField] + "")).ToArray(); } } frmSelect.InitData(rowItem); frmSelect.OnBtnFPClick(null, null); #endregion //frmSelect.ShowDialog(); #endregion } } catch (Exception ex) { MessageUtil.Show(ex.Message); } } /// /// 分配完成后回调 /// /// /// private void OnAfterFPCallback(object sender, EventArgs e) { WaitForm.ShowForm(); try { // 临时禁用新增行(空白行) if (this.BillModelObj.DefaultAddEmptyRow) this.gcDetail.GridView.OptionsView.NewItemRowPosition = NewItemRowPosition.None; DataRow rowItem = this.gcDetail.GridView.GetFocusedDataRow(); if (rowItem == null) { return; } DataTable table = this.gcDetail.GridControl.DataSource as DataTable; FrmBaseSelectBatch frmSelect = (FrmBaseSelectBatch)sender; rowItem[guidField] = Guid.NewGuid().ToString(); if (!string.IsNullOrEmpty(mRecordPrimaryField) && table.Columns.Contains(this.mRecordPrimaryField)) { // 检查数据是否为分配后的行 if (!string.IsNullOrEmpty(rowItem[this.mRecordPrimaryField] + "")) { if (this.gcDetail.GridView.FocusedRowHandle + 1 <= this.gcDetail.GridView.RowCount - 1) { this.gcDetail.GridView.FocusedRowHandle += 1; OnAfterFPCallback(sender, e); } return; } } if (!string.IsNullOrEmpty(mRecordPrimaryField)) { frmSelect.FpRows = table.Rows.Cast().Where(x => (rowItem[guidField] + "").Equals(x[guidField] + "")).ToArray(); if (frmSelect.FpRows != null && frmSelect.FpRows.Length > 0) { List rows = frmSelect.FpRows.ToList(); rows.Remove(rowItem); frmSelect.FpRows = rows.ToArray(); } if (table.Columns.Contains(mRecordPrimaryField)) { frmSelect.FpOtherRows = table.Rows.Cast().Where(x => !(rowItem[guidField] + "").Equals(x[guidField] + "") && !string.IsNullOrEmpty(x[mRecordPrimaryField] + "")).ToArray(); } } frmSelect.InitData(rowItem); bool success = frmSelect.FP(); if (success) { if (frmSelect.SelectedRows != null && frmSelect.SelectedRows.Length > 0) { // 增加标识列 if (!table.Columns.Contains(frmSelect.RecordPrimaryField)) { this.mRecordPrimaryField = frmSelect.RecordPrimaryField; table.Columns.Add(this.mRecordPrimaryField, typeof(String)); } foreach (DataRow item in frmSelect.SelectedRows) { DataRow newRow = table.NewRow(); newRow.ItemArray = rowItem.ItemArray; newRow[guidField] = rowItem[guidField]; DataColumn IsIdentCol = newRow.Table.Columns.Cast().FirstOrDefault(x => x.ColumnName == BaseImpl.GetResult(string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{0}' AND COLUMNPROPERTY(OBJECT_ID('{0}'),COLUMN_NAME,'IsIdentity')=1", BillModelObj.DetailTable)) + ""); //自增长列分配按空值取 if (IsIdentCol != null) { if (IsIdentCol.DataType == typeof(Decimal) || IsIdentCol.DataType == typeof(Double) || IsIdentCol.DataType == typeof(Int16) || IsIdentCol.DataType == typeof(Int32) || IsIdentCol.DataType == typeof(Int64)) { newRow[IsIdentCol.ColumnName] = 0; } } foreach (DataColumn col in item.Table.Columns) { if (table.Columns.Contains(col.ColumnName)) { //newRow[col.ColumnName] = item[col.ColumnName]; newRow[col.ColumnName] = item[col.ColumnName]; GridColumn column = this.gcDetail.GridView.Columns[col.ColumnName]; if (column != null) { GridColumnModel model = column.Tag as GridColumnModel; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, rowItem[column.FieldName] + "", newRow); } SetCalcValue(model, rowItem[column.FieldName] + "", newRow); } } } newRow[frmSelect.AmountField] = item[frmSelect.AmountField]; newRow[frmSelect.RecordPrimaryField] = item[frmSelect.RecordPrimaryField]; table.Rows.Add(newRow); } NumberMc = frmSelect.AmountField; table.Rows.Remove(rowItem); // 重排顺序 table.OrderBy(this.BillModelObj.DetailOrderField); this.gcDetail.GridView.UpdateCurrentRow(); this.gcDetail.GridView.ShowEditor(); if (frmSelect.isNextOne) { int SourceRowIndex = this.gcDetail.GridView.GetFocusedDataSourceRowIndex(); DataRow[] a = table.Rows.Cast().Where(x => string.IsNullOrEmpty(x[guidField].ToString())).ToArray(); if (a.Length != 0) { this.gcDetail.GridView.FocusedRowHandle = SourceRowIndex; OnAfterFPCallback(sender, e); } else { MessageUtil.Show("全部分配完毕"); // frmSelect.SelectRowItem = null; } } } } else { if (this.gcDetail.GridView.FocusedRowHandle + 1 <= this.gcDetail.GridView.RowCount - 1) { this.gcDetail.GridView.FocusedRowHandle += 1; OnAfterFPCallback(sender, e); } else { MessageUtil.Show("全部分配完毕"); } } } catch (Exception) { throw; } finally { // 重新开启新增行(空白行) if (this.BillModelObj.DefaultAddEmptyRow) this.gcDetail.GridView.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom; WaitForm.HideForm(); } } /// /// 老版分配 /// private void FPOld() { try { DataRow rowItem = this.gcDetail.GridView.GetFocusedDataRow(); if (rowItem == null) { MessageUtil.Show("请先选择一条明细在进行分配!"); return; } DataTable table = this.gcDetail.GridControl.DataSource as DataTable; if (!table.Columns.Contains(guidField)) { table.Columns.Add(guidField, typeof(string)); } rowItem[guidField] = Guid.NewGuid().ToString(); ; if (!string.IsNullOrEmpty(mRecordPrimaryField) && table.Columns.Contains(this.mRecordPrimaryField)) { // 检查数据是否为分配后的行 if (!string.IsNullOrEmpty(rowItem[this.mRecordPrimaryField] + "") && !this.BillModelObj.IgnoreAllocated) { MessageUtil.Show("该行数据为已分配后的数据,无需分配!"); return; } } string[] args = { this.SysModel.FormText, this.SysModel.UserId, this.SysModel.UserName, this.SysModel.Privilege, this.SysModel.ModuleCode, this.SysModel.ModuleId + "", this.BillModelObj.PopupUnionCode, "1000" }; DynamicBaseSelectModel baseModel = new DynamicBaseSelectModel(args); using (FrmBaseSelect frmSelect = new FrmBaseSelect(baseModel, this.ControlObj, this.gcDetail)) { //if (frmSelect.SelectRowItem == null) //{ // frmSelect = new FrmBaseSelect(baseModel, this.ControlObj, this.gcMain); //} frmSelect.Text = this.BillModelObj.TypeName; frmSelect.SelectRowItem = rowItem; bool isNextOne = false; if (!string.IsNullOrEmpty(mRecordPrimaryField)) { frmSelect.FpRows = table.Rows.Cast().Where(x => (rowItem[guidField] + "").Equals(x[guidField] + "")).ToArray(); if (frmSelect.FpRows != null && frmSelect.FpRows.Length > 0) { List rows = frmSelect.FpRows.ToList(); rows.Remove(rowItem); frmSelect.FpRows = rows.ToArray(); } if (table.Columns.Contains(mRecordPrimaryField)) { frmSelect.FpOtherRows = table.Rows.Cast().Where(x => !(rowItem[guidField] + "").Equals(x[guidField] + "") && !string.IsNullOrEmpty(x[mRecordPrimaryField] + "")).ToArray(); } } if (frmSelect.ShowDialog() == DialogResult.OK) { if (frmSelect.SelectedRows != null && frmSelect.SelectedRows.Length > 0) { //if (frmSelect.isNextOne) //{ // isNextOne = true; //} //else //{ // isNextOne = false; //} // 增加标识列 if (!table.Columns.Contains(frmSelect.RecordPrimaryField)) { this.mRecordPrimaryField = frmSelect.RecordPrimaryField; table.Columns.Add(this.mRecordPrimaryField, typeof(String)); } foreach (DataRow item in frmSelect.SelectedRows) { DataRow newRow = table.NewRow(); newRow.ItemArray = rowItem.ItemArray; newRow[guidField] = rowItem[guidField]; DataColumn IsIdentCol = newRow.Table.Columns.Cast().FirstOrDefault(x => x.ColumnName == BaseImpl.GetResult(string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='{0}' AND COLUMNPROPERTY(OBJECT_ID('{0}'),COLUMN_NAME,'IsIdentity')=1", BillModelObj.DetailTable)) + ""); //自增长列分配按空值取 if (IsIdentCol != null) { if (IsIdentCol.DataType == typeof(Decimal) || IsIdentCol.DataType == typeof(Double) || IsIdentCol.DataType == typeof(Int16) || IsIdentCol.DataType == typeof(Int32) || IsIdentCol.DataType == typeof(Int64)) { newRow[IsIdentCol.ColumnName] = 0; } } foreach (DataColumn col in item.Table.Columns) { if (table.Columns.Contains(col.ColumnName)) { //newRow[col.ColumnName] = item[col.ColumnName]; newRow[col.ColumnName] = item[col.ColumnName]; GridColumn column = this.gcDetail.GridView.Columns[col.ColumnName]; if (column != null) { GridColumnModel model = column.Tag as GridColumnModel; if (!string.IsNullOrEmpty(model.UnionFields)) { this.SetUnionValue(model, rowItem[column.FieldName] + "", newRow); } SetCalcValue(model, rowItem[column.FieldName] + "", newRow); } } } newRow[frmSelect.AmountField] = item[frmSelect.AmountField]; newRow[frmSelect.RecordPrimaryField] = item[frmSelect.RecordPrimaryField]; table.Rows.Add(newRow); } NumberMc = frmSelect.AmountField; //double syAmount = frmSelect.GetSyAmount(); //if (syAmount > 0) //{ // rowItem[frmSelect.AmountField] = frmSelect.GetSyAmount(); //} //else //{ // table.Rows.Remove(rowItem); //} table.Rows.Remove(rowItem); // 重排顺序 table.OrderBy(this.BillModelObj.DetailOrderField); this.gcDetail.GridView.UpdateCurrentRow(); this.gcDetail.GridView.ShowEditor(); } } if (frmSelect.isNextOne) { int SourceRowIndex = this.gcDetail.GridView.GetFocusedDataSourceRowIndex(); DataRow[] a = table.Rows.Cast().Where(x => string.IsNullOrEmpty(x[guidField].ToString())).ToArray(); if (a.Length != 0) { this.gcDetail.GridView.FocusedRowHandle = SourceRowIndex; OnBtnFPOldClick(null, null); } else { MessageUtil.Show("全部分配完毕"); // frmSelect.SelectRowItem = null; } } } } catch (Exception ex) { MessageUtil.Show(ex); } } /// /// 说明:计算列关联字段 /// 创建人:龚宇超 /// 创建日期:2017-12-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. /// The field value. protected virtual void SetUnionValue(GridColumnModel model, string fieldValue, DataRow rowItem) { DataTable table = this.gcDetail.gridControl.DataSourceTable(); //DataRow rowItem = this.gridView.GetFocusedDataRow(); string unionValues = model.UnionValues; if (rowItem != null && model != null) { unionValues = ReplaceHelper.ReplaceRowParam(rowItem, unionValues.Replace("{" + model.FieldName + "}", fieldValue)); if (this.ControlObj != null) { unionValues = ControlObj.ReplaceParentControlValue(unionValues); } try { string[] fields = model.UnionFields.Trim(',').Split(','); DataRow rowResult = BaseImpl.GetDataRowResult(unionValues); if (rowResult != null) { for (int i = 0; i < fields.Length; i++) { string field = fields[i]; string value = rowResult.Table.Columns.Contains(field) ? rowResult[field] + "" : null; rowItem[field] = value; } } else { // 设置为空 for (int i = 0; i < fields.Length; i++) { string field = fields[i]; rowItem[field] = DBNull.Value; } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("计算列关联字段--错误-->" + unionValues, ex); } } } /// /// 说明:计算列计算公式 /// 创建人:龚宇超 /// 创建日期:2017-12-18 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The model. /// The field value. protected virtual void SetCalcValue(GridColumnModel model, string fieldValue, DataRow rowItem) { try { DataTable table = this.gcDetail.gridControl.DataSourceTable(); if (rowItem != null && model != null) { List calcModels = this.gcDetail.ObjmControlList.FindAll(x => !string.IsNullOrEmpty(x.CalcExpr)).OrderBy(y => y.CalcOrder).ToList(); foreach (GridColumnModel gridModel in calcModels) { // 计算顺序小于当前控件则不计算 if (gridModel.CalcOrder < model.CalcOrder) continue; if (!gridModel.FieldName.Equals(model.FieldName, StringComparison.OrdinalIgnoreCase)) { bool isTruncate = false; string calcExpr = gridModel.CalcExpr; if (calcExpr.StartsWith("@truncate:")) { calcExpr = calcExpr.Substring(10); isTruncate = true; } try { if (this.ControlObj != null) calcExpr = ControlObj.ReplaceParentControlValue(calcExpr); calcExpr = ReplaceHelper.ReplaceRowParam(rowItem, calcExpr); //EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + "" string result = EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + ""; if (isTruncate) { result += result.Contains(".") ? "0000000000" : ".0000000000"; rowItem[gridModel.FieldName] = result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1); //this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1)); } else { try { double d = 0; if (!string.IsNullOrEmpty(result) && !"NaN".Equals(result, StringComparison.OrdinalIgnoreCase) && !"非数字".Equals(result, StringComparison.OrdinalIgnoreCase) && !"undefined".Equals(result, StringComparison.OrdinalIgnoreCase) && result != "∞" && result != "-∞" && !"正无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) && !"负无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) && double.TryParse(result, out d)) { if (string.IsNullOrEmpty(gridModel.DataFormat)) { result = Math.Round(Convert.ToDouble(d), model.Decimals, MidpointRounding.AwayFromZero) + ""; } else { //计算后先执行保存小数位数 result = string.Format("{0:" + gridModel.DataFormat + "}", Convert.ToDecimal(result)); } if (model.FieldType == 7 && result.Contains('%')) { result = (double.Parse(result.Replace("%", "")) * 0.01).ToString(); } rowItem[gridModel.FieldName] = result; // 判断计算列有无关联值 GridColumnModel UnionModel = calcModels.FirstOrDefault(x => x.FieldName == gridModel.FieldName); if (!string.IsNullOrEmpty(UnionModel.UnionFields)) { this.SetUnionValue(UnionModel, rowItem[gridModel.FieldName] + "", rowItem); } //this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result); } } catch (Exception) { } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); LogUtil.WriteError("计算列计算公式--错误-->" + rowItem[gridModel.FieldName], ex); } } } } } catch (Exception ex) { LogHelper.Instance.WriteError(ex); string Message = ErrorMessage.PromptErrorMessage(ex); // MessageUtil.Show(Message,ex.Message); } } /// /// 设置修改过的控件颜色 /// public void SetColor() { this.ControlObj.SetClearBackgroundColor(); List FieldList = AuditChangeLog.GetChangeLogFields(this.SysModel.BillDocumentId); foreach (string item in FieldList) { this.ControlObj.SetBackgroundColor(item); } } } }