Form - 生产计划排程窗体C#源码


Form - 生产计划排程窗体C#源码-开发框架文库

Form - 生产计划排程窗体C#源码

生产计划排程单

Form - 生产计划排程窗体C#源码

Form - 生产计划排程窗体C#源码

C# 全选
using CartonERP.Business;
using CartonERP.Common;
using CartonERP.Library;
using CartonERP.Library.CommonClass;
using CartonERP.Library.Extensions;
using CartonERP.Models;
using CartonERP.Models.ResModels;
using CartonERP.ReportModule;
using CSFrameworkV6.Core;
using CSFrameworkV6.Core.Extensions;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using System;
using System.Collections.Generic;
using System.Windows.Forms;

/*===================================================================
 *   程序说明: PFPlan - 业务单据窗体
 *   创建日期: 2023/08/08
 *   最后修改: 2023/08/08
 *   作者资料: CSFramework
 *   版权所有 Copyright 2006~2023, C/S框架网 (www.csframework.com)
 *   ----------------------------------------------------------------
 *   修改记录:
 *      2023/08/08: 自动生成代码
 *      2023/08/08: 您的修改记录
 *===================================================================*/

namespace CartonERP.ProductionModule
{
    ///<summary>
    /// PFPlan的资料管理窗体,界面由代码生成器(Code Generator)自动生成
    /// </summary>
    public partial class frm_PFPlan : frmBaseBusinessForm
    {
        private bll_PFPlan _BLL;//业务逻辑层对象引用

        public frm_PFPlan()
        {
            InitializeComponent();
        }

        private void frm_PFPlan_Load(object sender, EventArgs e)
        {
            this.InitializeForm();//自定义初始化操作
            this.BoundLookupData();
        }

        protected override void InitializeForm()
        {
            _BLL = new bll_PFPlan(); //实例化业务逻辑层
            _SummaryView = new DevGridView(gvSummary);//实例化表格视图,框架支持多种表格视图,如表格GridControl,树列表TreeList.
            _DetailGroupControl = pcDetailEditor;//【资料编辑】页面所有文本输入框的容器

            base.InitializeForm();

            frmGridCustomize.RegisterGrid(gvSummary);//注册表格组件,自动添加右键弹出菜单功能
            DevStyle.SetGridControlLayout(gcSummary, false);//设置主表表格样式
            DevStyle.SetSummaryGridViewLayout(gvSummary, false, true, true);//设置主表表格样式
            gvSummary.DoubleClick += new EventHandler(OnGridViewDoubleClick); //绑定主表的DoubleClick事件

            frmGridCustomize.RegisterGrid(gvDetail);//注册表格组件,自动添加右键弹出菜单功能
            DevStyle.SetGridControlLayout(gcDetail, true);//明细表表格样式设置
            DevStyle.SetDetailGridViewLayout(gvDetail);//明细表表格样式设置
            gcDetail.EmbeddedNavigator.ButtonClick += new NavigatorButtonClickEventHandler(this.OnEmbeddedNavigatorButtonClick); //绑定明细表格的按钮事件
            gvDetail.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(OnCellValueChanged); //绑定明细表格单元格数据修改时触发的事件

            BindingSummaryNavigator(controlNavigatorSummary, gcSummary); //绑定表格导航按钮的数据源.

            this.ShowSummaryPage(true); //初始化完成后显示表格页    
        }

        //绑定LookupEdit组件数据源
        public override void BoundLookupData()
        {
            DataBinderTools.BoundApprovalStatus(txt_ApprovalStatus.Properties);
            DataBinderTools.BoundUser(txt_DocUser.Properties);
            DataBinderTools.BoundUser(lucCreatedBy);
            DataBinderTools.BoundUser(lucLastUpdatedBy);
            DataBinderTools.BoundUser(lucAppUser);
            DataBinderTools.BoundUser(txtCreatedBy.Properties);
            DataBinderTools.BoundUser(txtLastUpdatedBy.Properties);
            DataBinderTools.BoundUser(txtAppUser.Properties);
            DataBinderTools.BoundCheckEdit(ckhFlagApp);
        }

        //打印报表
        public override void DoPrint(IButtonInfo button)
        {
            AssertFocusedRow();

            var docNo = gvSummary.GetObject<res_tb_PFPlan>().PLNO;
            rptPFPlan report = new rptPFPlan();
            report.ShowReport(docNo);
        }

        //修改单元格数据时触发的事件
        private void OnCellValueChanged(object sender, CellValueChangedEventArgs e)
        {
            //开发实例:修改单元格关联更新其它列的值
            //参考(frmPO/frmSO).OnCellValueChanged方法}
        }

        //审核
        public override void DoApproval(IButtonInfo button)
        {
            AssertFocusedRow();
            var row = (res_tb_PFPlan)_SummaryView.GetFocusedRow();
            var docNo = row.PLNO;
            if (_BLL.IsApproved(row))
            {
                Msg.Warning($"单据 <{docNo}> 已经审核,不可重复操作!");
            }
            else
            {
                if (Msg.AskQuestion($"确定要审核单据 <{docNo}> 吗? "))
                {
                    _BLL.ApprovalBusiness(row); //审核单据
                    _SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
                    this.DoViewContent(null);//显示单据明细
                }
            }
        }

        //反审核
        public override void DoApprovalUndo(IButtonInfo button)
        {
            AssertFocusedRow();
            var row = (res_tb_PFPlan)_SummaryView.GetFocusedRow();
            var docNo = row.PLNO;
            if (_BLL.IsApproved(row) == false)
            {
                Msg.Warning($"单据 <{docNo}> 没有审核,不需要反审核操作!");
            }
            else
            {
                if (Msg.AskQuestion($"确定要反审核单据 <{docNo}> 吗? "))
                {
                    _BLL.ApprovalBusinessUndo(row); //审核单据
                    _SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
                    this.DoViewContent(null);//显示单据明细
                }
            }
        }

        /// <summary>
        /// 重要!!当按钮状态改变时触发的事件
        /// </summary>
        /// <param name="currentState"></param>
        protected override void ButtonStateChanged(UpdateType currentState)
        {
            bool isEditMode = (currentState == UpdateType.Add) || (currentState == UpdateType.Modify);

            //设置编辑页面的文本框控件只读和可编辑状态
            base.SetDetailEditorsAccessable(pcDetailEditor, isEditMode);
            //设置明细表格的按钮禁用和可用状态
            base.SetGridCustomButtonAccessable(gcDetail, isEditMode);
            //设置明细表格的可修改状态
            gvDetail.OptionsBehavior.Editable = isEditMode;
            txtPLNO.Properties.ReadOnly = true;//不允许修改单号
            txtCreationDate.Properties.ReadOnly = true;//禁止修改
            txtCreatedBy.Properties.ReadOnly = true;//禁止修改
            txtLastUpdateDate.Properties.ReadOnly = true;//禁止修改
            txtLastUpdatedBy.Properties.ReadOnly = true;//禁止修改
            txtAppUser.Properties.ReadOnly = true;//禁止修改
            txtAppDate.Properties.ReadOnly = true;//禁止修改
            lbStateName.Text = this.UpdateTypeName;
            ucOpacityImage1.ShowImage(_BLL);//审核图片
        }

        //绑定明细表的数据源.
        protected override void DoBindingDetailGrid(object dataSource)
        {
            gcDetail.DataSource = null;
            gcDetail.DataSource = _BLL.CurrentBusiness.Details;
        }

        /// <summary>
        /// 绑定【编辑页面】所有文本输入框的数据源
        /// </summary>
        /// <param name="summary">数据源</param>
        protected override void DoBindingSummaryEditor(object dataSource)
        {
            this.DoBindingEditorPanel(pcDetailEditor, dataSource);
        }

        /// <summary>
        /// 明细表格按钮事件
        /// </summary>
        /// <param name="sender">GridControlNavigator组件</param>
        /// <param name="e">事件参数</param>
        private void OnEmbeddedNavigatorButtonClick(object sender, NavigatorButtonClickEventArgs e)
        {
            try
            {
                GridControl gc = (GridControl)((GridControlNavigator)sender).Parent;
                GridView gv = (GridView)gc.Views[0]; //明细表格:取GridControl第一个GridView组件.

                var tag = e.Button.Tag.ToStringEx();

                //新增记录
                if (tag == nameof(DetailButtons.Add))
                {
                    var row = new res_tb_PFPlanDetails();
                    if (tag == nameof(DetailButtons.Add))//增加-Add
                    {
                        //选择生产单
                        frmFuzzySearchPF.Execute(this.OnSearchCallBackPF, "", true);
                    }
                    gv.FocusedColumn = gv.VisibleColumns[0];//第1列设置焦点单元格

                }
                else if (tag == nameof(DetailButtons.Delete))
                {
                    if (Msg.AskQuestion("确定要删除这条记录?"))
                        gv.DeleteRow(gv.FocusedRowHandle);
                }
                e.Handled = true;
            }
            catch (Exception ex)
            {
                LogUserOperate.Write(ex);
                Msg.ShowException(ex);
            }
        }

        private void OnSearchCallBackPF(List<res_PFSummary> list)
        {
            if (list == null) return;
            var row = gvDetail.GetObject<res_tb_PFPlanDetails>(); //获取明细表当前记录

            foreach (var resultRow in list)
            {
                row = new res_tb_PFPlanDetails();
                row.isid = IdHelper.GetId();

                var PaperIN = _BLL.GetPaperIN(resultRow.PFNO);
                if (!PaperIN.IsEmpty())
                {
                    row.PaperInQty = PaperIN.PaperInQty;//采购入库数
                    row.PaperOutQty = PaperIN.PaperOutQty;//领料出库数
                }

                row.SortId = gvDetail.RowCount + 1;
                row.PFNO = resultRow.PFNO;
                row.PFDate = resultRow.PFDate;
                row.CustomerCode = resultRow.CustomerCode;
                row.CustomerName = resultRow.CustomerName;
                row.SONO = resultRow.SONO;
                row.SODate = resultRow.SODate;
                row.DeliveryDate = resultRow.DeliveryDate;
                row.CustomerOrderNo = resultRow.CustomerOrderNo;
                row.ProductCode = resultRow.ProductCode;
                row.ProductName = resultRow.ProductName;
                row.GoodsNo = resultRow.GoodsNo;
                row.CartonCode = resultRow.CartonCode;
                row.CartonName = resultRow.CartonName;
                row.CartonSpec = resultRow.CartonSpec;
                row.PaperName = resultRow.PaperName;
                row.PaperNameSupplier = resultRow.PaperNameProduce;
                row.PaperSpec = resultRow.PaperSpec;
                row.PaperQty = resultRow.TotalQty;
                row.OrderQty = resultRow.OrderQty;
                row.CartonInQty = resultRow.TotalProduceQty;
                row.CartonBalanceQty = resultRow.OrderQty - resultRow.TotalProduceQty;
                row.DOQty = resultRow.TotalDO;
                row.DOBalance = resultRow.TotalDOBalance;
                row.Price = resultRow.OrderPrice;
                row.SchedulQty = resultRow.OrderQty;

                gvDetail.AddRow(row);

            }

            gvDetail.RefreshData();
        }

        //新增按钮事件
        public override void DoAdd(IButtonInfo sender)
        {
            try
            {
                frmWaitingEx.ShowMe(this);
                _BLL.NewBusiness(); //新增业务单据,实例化_BLL.CurrentBusiness
                DoBindingSummaryEditor(_BLL.DataBinder); //绑定主表文本框数据源,显示数据
                this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
                base.DoAdd(sender);
                this.ShowDetailPage(true);
            }
            finally
            {
                frmWaitingEx.HideMe(this);
            }
        }

        //删除按钮事件
        public override void DoDelete(IButtonInfo sender)
        {
            AssertFocusedRow();

            var row = _SummaryView.GetFocusedRow() as res_tb_PFPlan;

            //删除前逻辑判断(如记录已审核、存档或有关联数据不可删除)
            if (!this.DoBeforeEditOrDelete(row)) return;
            if (Msg.AskQuestion($"单据号码:{row.PLNO},确定要删除当前单据吗 ? "))
            {
                try
                {
                    frmWaitingEx.ShowMe(this);
                    bool b = _BLL.Delete(row.PLNO); //调用删除数据接口
                    AssertEqual(b, true, "删除记录时发生错误!");
                    _SummaryView.RemoveRow(_SummaryView.FocusedRowHandle);//删除表格中当前记录
                    this.ShowSummaryPage(true);
                }
                finally
                {
                    frmWaitingEx.HideMe(this);
                }
            }
        }

        //修改按钮事件
        public override void DoEdit(IButtonInfo sender)
        {
            this.AssertFocusedRow();
            var row = (res_tb_PFPlan)_SummaryView.GetFocusedRow();

            //删除前逻辑判断(如记录已审核、存档或有关联数据不可删除)
            if (!this.DoBeforeEditOrDelete(row)) return;

            base.DoEdit(sender);
        }

        //查看按钮事件
        public override void DoViewContent(IButtonInfo sender)
        {
            AssertFocusedRow();
            string docNo = _SummaryView.GetObject<res_tb_PFPlan>(_SummaryView.FocusedRowHandle).PLNO;
            _BLL.CurrentBusiness = _BLL.GetDataByKey(docNo);//获取当前单据
            this.DoBindingSummaryEditor(_BLL.CurrentBusiness.Master); //绑定主表文本框的数据源
            this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
            this.ButtonStateChanged(_UpdateType);//触发按钮事件
            this.ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页
        }

        //保存按钮事件
        public override void DoSave(IButtonInfo sender)// 保存数据
        {
            this.UpdateLastControl();//更新最后一个输入框的数据

            if (!ValidatingSummaryData(_BLL.CurrentBusiness.Master)) return; //检查主表数据合法性
            if (!ValidatingDetailData(_BLL.CurrentBusiness.Details)) return; //检查从表数据合法性
            try
            {
                frmWaitingEx.ShowMe(this);

                //页面数据采集:创建用于保存的临时数据
                var dsTemplate = _BLL.CreateSaveData(_BLL.CurrentBusiness); //创建用于保存的临时数据
                SaveResult result = _BLL.Update(dsTemplate);//调用BLL层保存数据

                if (result.Success) //保存成功
                {
                    if (_UpdateType == UpdateType.Add) _BLL.CurrentBusiness.Master.PLNO = result.DocNo; //更新单据号码
                    base.UpdateSummaryRow(_BLL.CurrentBusiness.Master);//刷新表格内当前记录的缓存数据.
                    //this.DoBindingSummaryEditor(_BLL.DataBinder); //重新绑定文本框数据源
                    this.DoSave_ResetState(); //最后调用基类方法重置按钮状态
                    this.DoViewContent(sender); //刷新数据

                    frmWaitingEx.HideMe(this);
                    if (SystemSettings.Current.ShowOperateResultMsg) Msg.ShowInformation("保存成功!");
                }
                else
                {
                    Msg.Warning("保存失败!");
                }
            }
            finally
            {
                frmWaitingEx.HideMe(this);
            }
        }

        private bool DoBeforeEditOrDelete(res_tb_PFPlan row)
        {
            if (_BLL.IsOwnerChange(row, nameof(res_tb_PFPlan.CreatedBy)) == false)
            {
                Msg.Warning("您不能修改别人创建的单据!1.您不是制单人的上级 2.您没有制单人的权限!");
                return false;
            }

            if (_BLL.IsApproved(row))
            {
                Msg.Warning("单据已审核,禁止操作!");
                return false;
            }

            return true;
        }

        //主表数据校验,保存前检查数据完整性
        private bool ValidatingSummaryData(res_tb_PFPlan summary)
        {
            //多个输入项检查。若检查不通过,文本框右侧显示红色X图标
            var isInvalid = false
              | CommonTools.IsInvalid(txtDocDate);
            if (isInvalid) return false;

            //
            //其他数据检查
            //
            return true;
        }

        //明细表数据校验
        private bool ValidatingDetailData(List<res_tb_PFPlanDetails> detail)
        {
            foreach (var row in detail)
            {
                if (row.PFNO.IsEmpty())
                {
                    gcDetail.Focus();
                    gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
                    gvDetail.FocusedColumn = colD_PFNO;
                    Msg.Warning("生产单号不能为空!");
                    return false;
                }

                if (row.CustomerCode.IsEmpty())
                {
                    gcDetail.Focus();
                    gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
                    gvDetail.FocusedColumn = colD_CustomerCode;
                    Msg.Warning("客户编码不能为空!");
                    return false;
                }

                if (row.SONO.IsEmpty())
                {
                    gcDetail.Focus();
                    gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
                    gvDetail.FocusedColumn = colD_SONO;
                    Msg.Warning("销售单号不能为空!");
                    return false;
                }

                if (row.ProductCode.IsEmpty())
                {
                    gcDetail.Focus();
                    gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
                    gvDetail.FocusedColumn = colD_ProductCode;
                    Msg.Warning("货品编码不能为空!");
                    return false;
                }

                if (row.OrderQty == 0)
                {
                    gcDetail.Focus();
                    gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
                    gvDetail.FocusedColumn = colD_OrderQty;
                    Msg.Warning("订单数量不能为零!");
                    return false;
                }
            }
            return true;
        }

        //清空按钮事件
        private void btnEmpty_Click(object sender, EventArgs e)
        {
            base.ClearContainerEditorText(pnlSearch);
        }

        //查询按钮事件
        private void btnQuery_Click(object sender, EventArgs e)
        {
            try
            {
                frmWaitingEx.ShowMe(this);

                //实例化查询参数
                var input = new req_PFPlan
                {
                    PLNO = txt_PLNO.EditValue.ToStringEx(),
                    DocDate = txt_DateFrom.DateTime
                };

                var dt = _BLL.Query(input);//调用业务逻辑层接口
                this.DoBindingSummaryGrid(dt);//绑定表格的数据源
                this.ShowSummaryPage(true); //显示表格页面.
            }
            finally
            {
                frmWaitingEx.HideMe(this);
            }
        }

        //给明细表绑定KeyDown事件,按回车自动跳格
        private void gvDetail_KeyDown(object sender, KeyEventArgs e)
        {
            //表格按回车键自动跳转到下一个可编辑列, 若是最后一列,自动新增一条记录
            GridMovetor.OnGridViewKeyDown(gvDetail, e);
        }

        //显示数据操作日志
        public override void DoShowLog(IButtonInfo button)
        {
            //显示审计日志
            this.MainForm.OpenModuleForm(Globals.LogViewerForm, "", nameof(tb_PFPlan));
        }

    }
}
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
评论列表

发表评论

评论内容
昵称:
关联文章

Form - 生产计划C#
Form - 车辆管理C#
CSFramework.CodeGeneratorV6.0-将Form加入到VS解决方案
生成的Form集成到VS解决方案 - C/S框架三层架构代码生成器操作指南
C#异步操作等待,异步多线处理数据通用界面(frmThreadOperating)
C#多线异步处理数据通用界面(frmThreadOperating)
C#通用勾选复选 ()
Model - tb_PFPlan 生产计划实体模型
Winform三层架构教,CS三层结构图及实例讲解
C# 绘制边框(Form_Paint事件)
CSFrameworkV6旗舰版 - 单表基础资料完整C#
C# 数据实现增删改查(CRUD)下载(原)
CSFrameworkV6旗舰版展示(C#,LINQ+EF)
自定义消息 - 实例 - C/S快速开发框架旗舰版V5
MES系统 - 生产计划管理综述
踩坑日志:C# Form.ShowDialog显示模式立即关闭了
C# 按住鼠标左键移动Form的位置,C#拖动通用类
C#拖动鼠标移动Form,移动Panel面板通用类(FormDragDrop)
生产单 - Production Form
代码生成器 CodeGenerator - 将加入到VS解决方案