using BWP.B3UnitedInfos.BO; using Forks.EnterpriseServices.DataForm; using System; using TSingSoft.WebControls2; using System.Web.UI.HtmlControls; using TSingSoft.WebPluginFramework.BLExports; using TSingSoft.WebPluginFramework.Controls; using BWP.Web.WebControls; using BWP.Web.Layout; using BWP.Web.Utils; using BWP.B3Sale.Utils; using BWP.B3Frameworks; using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.DomainObjects2; using BWP.B3Frameworks.Utils; using System.Web.UI.WebControls; using BWP.B3UnitedInfos; using BWP.B3Frameworks.BO.NamedValueTemplate; using BWP.B3ProduceUnitedInfos; using System.Linq; using System.Collections.Generic; using Forks.Utils; using Forks.EnterpriseServices.BusinessInterfaces; using BWP.B3Butchery.BL; using BWP.B3Butchery.BO; using BWP.Web.Pages.Utils; namespace BWP.Web.Pages.B3YunKen.ProductTask_ { public class SaleOrderToProductNoticePage : AppBasePage { QueryContainer mQueryContainer; DFBrowseGrid mBrowseGrid; private DFCheckBox cbxHideAlready; Type mType, mDetailType; DFInfo mDFInfo; DFInfo mDetailDFInfo; protected static DFInfo mGoodsDFInfo = DFInfo.Get(typeof(Goods)); protected static DFInfo mPropDFInfo = DFInfo.Get(typeof(GoodsProperty)); private DFChoiceBox ccbxEmployeeUnit, ccbxDepartment, ccbxProductionUnit; private DFDateInput cDateInput; private DFTextBox ccbxRemark; protected override void InitForm(HtmlForm form) { if (!PluginInstalled.Installed("MainSystem", "B3Sale")) { AspUtil.Alert(this, "没有安装销售模块"); return; } mType = Type.GetType("BWP.B3Sale.BO.Order,B3Sale"); mDetailType = Type.GetType("BWP.B3Sale.BO.Order_Detail,B3Sale"); mDFInfo = DFInfo.Get(mType); mDetailDFInfo = DFInfo.Get(mDetailType); mQueryContainer = QueryContainer.FromResource(GetType().FullName + ".xml", GetType().Assembly); form.Controls.Add(new PageTitle("订单转生产")); CreateQueryPanel(form.EAdd(new TitlePanel("查询条件"))); CreateResultPanel(form.EAdd(new TitlePanel("查询结果"))); } private void CreateResultPanel(TitlePanel titlePanel) { mBrowseGrid = new DFBrowseGrid(new DFDataTableEditor()) { MultiSelectionEnabled = true, Width = Unit.Percentage(100) }; BuildGrid(mBrowseGrid); titlePanel.EAdd(mBrowseGrid); new Second_ConvertRatioRowManager(mBrowseGrid, "本次生产数量", "本次生产辅数量"); var hPanelB = titlePanel.EAdd(new HLayoutPanel()); hPanelB.Add(new SimpleLabel("生产单位")); hPanelB.Add(ccbxProductionUnit = new DFChoiceBox() { Width = 130, EnableTopItem = true, DataKind = B3ProduceUnitedInfosDataSources.生产单位全部 }); hPanelB.Add(new SimpleLabel("部门")); hPanelB.Add(ccbxDepartment = new DFChoiceBox() { Width = 130, EnableTopItem = true, DataKind = B3FrameworksConsts.DataSources.授权部门全部 }); hPanelB.Add(new SimpleLabel("经办人")); hPanelB.Add(ccbxEmployeeUnit = new DFChoiceBox() { Width = 130, EnableTopItem = true, DataKind = "授权员工" }); hPanelB.Add(new SimpleLabel("日期")); hPanelB.Add(cDateInput = new DFDateInput() { Width = 130, Date = DateTime.Today }); hPanelB.Add(new SimpleLabel("摘要")); hPanelB.Add(ccbxRemark = new DFTextBox(mDFInfo.Fields["Remark"])); hPanelB.Add(new TSButton("创建生产通知单", (sender, e) => CreateTruckLoadingClick())); titlePanel.EAdd(new Panel() { Height = 150 }); } private void CreateTruckLoadingClick() { if (string.IsNullOrEmpty(ccbxProductionUnit.Value)) throw new Exception("请选择生产单位"); if (string.IsNullOrEmpty(ccbxDepartment.Value)) throw new Exception("请选择部门"); if (string.IsNullOrEmpty(ccbxEmployeeUnit.Value)) throw new Exception("请选择经办人"); if (!cDateInput.Value.HasValue) throw new Exception("请选择日期"); if (!mBrowseGrid.GetSelectedItems().Any()) throw new Exception("请选择行"); mBrowseGrid.GetFromUI(); var list = new List(); foreach (var row in mBrowseGrid.GetSelectedItems()) { var customerId = (long)row["Customer_ID"]; var detailId = (long)row["Detail_ID"]; var goodsId = (long)row["Goods_ID"]; var remark = (string)row["Remark"]; var brandItem = Convert.ToInt64(row["BrandItem_ID"]); var unitNum = (Money?)row["本次生产数量"]; var secondNumber = (Money?)row["本次生产辅数量"]; var dmoid = (long?)row["DmoID"]; var dmotypeid = (short?)row["DmoTypeID"]; var goodsUnitConvertDirection = (NamedValue<主辅转换方向>?)row["Goods_UnitConvertDirection"]; var leftRatio = (Money)row["LeftRatio"]; var rightRatio = (Money)row["RightRatio"]; var model = new tempSaleOrderToProductTaskModel(); model.CustomerId = customerId; model.DetailId = detailId; model.GoodsId = goodsId; model.UnitNum = unitNum; model.SecondNumber = secondNumber; model.DmoID = dmoid; model.DmoTypeID = dmotypeid; if (brandItem > 0) model.BrandItem_ID = brandItem; model.Remark = remark; if (goodsUnitConvertDirection == 主辅转换方向.双向转换 || goodsUnitConvertDirection == 主辅转换方向.由主至辅) { model.Number = unitNum * rightRatio / leftRatio; } list.Add(model); } long taskId = 0; using (var context = new TransactionContext()) { UpdateOrderDetail(context.Session, list); taskId = CreateProductTask(context.Session, list); context.Commit(); } AspUtil.Alert(this, "成功创建生产通知单:" + taskId); StartQuery(); } private long CreateProductTask(IDmoSessionWithTransaction session, List list) { var bl = BIFactory.Create(session); //var accounitingId = long.Parse(ccbxAccountUnit.Value); var departmentId = long.Parse(ccbxDepartment.Value); var productionUnitId = long.Parse(ccbxProductionUnit.Value); var inputDate = cDateInput.Value.Value; var remark = ccbxRemark.Text; var employeeID = long.Parse(ccbxEmployeeUnit.Value); var dmo = new ProductNotice(); //dmo.AccountingUnit_ID = accounitingId; bl.InitNewDmo(dmo); dmo.Department_ID = departmentId; dmo.ProductionUnit_ID = productionUnitId; dmo.Date = inputDate; dmo.Employee_ID = employeeID; dmo.Remark = remark; foreach (var grouping in list.GroupBy(x => x.GoodsId)) { var goodsId = grouping.Key; var fd = grouping.FirstOrDefault(); if (fd == null) { continue; } foreach (IGrouping models in grouping.GroupBy(x => x.CustomerId)) { var det = models.FirstOrDefault(); var customerId = models.Key; var number = models.Sum(x => (decimal?)x.UnitNum ?? 0); var secondNumber = models.Sum(x => (decimal?)x.SecondNumber ?? 0); var detail = new ProductNotice_Detail(); detail.Goods_ID = goodsId; detail.Number = number; detail.SecondNumber = secondNumber; detail.Detail_Customer_ID = customerId; detail.BrandItem_ID = det.BrandItem_ID; detail.Remark = det.Remark; detail.DmoID = det.DmoID; detail.DmoTypeID = det.DmoTypeID; dmo.Details.Add(detail); } } bl.Insert(dmo); return dmo.ID; } private void UpdateOrderDetail(IDmoSessionWithTransaction session, List list) { foreach (var model in list) { var updateDom = new DQUpdateDom(mDetailType); updateDom.Where.Conditions.Add(DQCondition.EQ("ID", model.DetailId)); updateDom.Columns.Add(new DQUpdateColumn("B3Butcher_UnitNum", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("B3Butcher_UnitNum"), DQExpression.Value(0)), DQExpression.Value(model.UnitNum)))); updateDom.Columns.Add(new DQUpdateColumn("B3Butcher_Num", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("B3Butcher_Num"), DQExpression.Value(0)), DQExpression.Value(model.Number)))); updateDom.Columns.Add(new DQUpdateColumn("B3Butcher_SecondNumber", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("B3Butcher_SecondNumber"), DQExpression.Value(0)), DQExpression.Value(model.SecondNumber)))); session.ExecuteNonQuery(updateDom); } } private void BuildGrid(DFBrowseGrid grid) { grid.Columns.Add(new DFBrowseGridColumn("ID")); grid.Columns.Add(new DFBrowseGridColumn("BillState")); grid.Columns.Add(new DFBrowseGridColumn("BrandItem_Name")); grid.Columns.Add(new DFBrowseGridColumn("Customer_Name")); grid.Columns.Add(new DFBrowseGridColumn("Department_Name")); grid.Columns.Add(new DFBrowseGridColumn("OrderDate")); grid.Columns.Add(new DFBrowseGridColumn("Goods_Name")); grid.Columns.Add(new DFBrowseGridColumn("Goods_MainUnit")); grid.Columns.Add(new DFBrowseGridColumn("Number")); grid.Columns.Add(new DFBrowseGridColumn("Goods_SecondUnit")); grid.Columns.Add(new DFBrowseGridColumn("SecondNumber")); grid.Columns.Add(new DFEditGridColumn("Remark")); grid.Columns.Add(new DFEditGridColumn("本次生产数量")); grid.Columns.Add(new DFEditGridColumn("本次生产辅数量")); grid.Columns.Add(new DFBrowseGridColumn("AccountingUnit_Name")); grid.Columns.Add(new DFBrowseGridColumn("BrandItem_Name")); grid.ValueColumns.Add("Goods_MainUnitRatio"); grid.ValueColumns.Add("Goods_SecondUnitRatio"); grid.ValueColumns.Add("Goods_UnitConvertDirection"); grid.ValueColumns.Add("LeftRatio"); grid.ValueColumns.Add("RightRatio"); grid.ValueColumns.Add("Detail_ID"); grid.ValueColumns.Add("Goods_ID"); grid.ValueColumns.Add("Customer_ID"); grid.ValueColumns.Add("BrandItem_ID"); grid.ValueColumns.Add("DmoID"); grid.ValueColumns.Add("DmoTypeID"); } public void CreateQueryPanel(TitlePanel panel) { var manager = new LayoutManager("", mDFInfo, mQueryContainer); manager.Add("Customer_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Customer_ID"], B3SaleDataSources.客户)); manager.Add("Department_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Department_ID"], "授权部门")); manager.Add("OrderDate", QueryCreator.TimeRange(mDFInfo.Fields["OrderDate"], mQueryContainer, "MinOrderDate", "MaxOrderDate")); manager.Add("LoadTime", new SimpleLabel("出库时间"), QueryCreator.TimeRange(mDFInfo.Fields["LoadTime"], mQueryContainer, "MinLoadTime", "MaxLoadTime")); manager.Add("CustomerCatalog_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["CustomerCatalog_ID"], "客户分类")); manager.Add("Employee_ID", new SimpleLabel("经办人"), QueryCreator.DFChoiceBox(mDFInfo.Fields["Employee_ID"], "授权员工")); manager.Add("Store_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Store_ID"], B3FrameworksConsts.DataSources.授权仓库)); manager.Add("ID", QueryCreator.DFTextBox(mDFInfo.Fields["ID"])); manager.Add("ProductLine_ID", new SimpleLabel("产品线"), QueryCreator.DFChoiceBox(mGoodsDFInfo.Fields["ProductLine_ID"], "B3UnitedInfos.产品线")); manager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部)); manager.Add("BillState", QueryCreator.一般单据状态(mDFInfo.Fields["BillState"])); manager.Add("BrandItem_ID", new SimpleLabel("品牌项"), QueryCreator.DFChoiceBox(mDetailDFInfo.Fields["BrandItem_ID"], B3UnitedInfosConsts.DataSources.品牌项)); cbxHideAlready = new DFCheckBox() { Text = "隐藏已转明细", Checked = true }; manager.Add("隐藏已转明细", cbxHideAlready); manager["隐藏已转明细"].NoLabel = true; manager.CreateDefaultConfig(8); panel.Controls.Add(manager.CreateLayout()); var hPanel = panel.EAdd(new HLayoutPanel()); hPanel.Add(new TSButton("开始查询", delegate { StartQuery(); })); hPanel.Add(new RedirectTSButton("清除条件")); } void StartQuery() { mBrowseGrid.Reset(); mBrowseGrid.Query = GetQueryDom(); mBrowseGrid.DataBind(); } private DQueryDom GetQueryDom() { var detail = JoinAlias.Create("detail"); var dom = mQueryContainer.Build(); dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.已审核)); dom.Columns.Add(DQSelectColumn.Field("ID", "单号")); dom.Columns.Add(DQSelectColumn.Field("Customer_ID")); dom.Columns.Add(DQSelectColumn.Field("Department_ID")); dom.Columns.Add(DQSelectColumn.Field("BillState")); dom.Columns.Add(DQSelectColumn.Field("OrderDate")); dom.Columns.Add(DQSelectColumn.Field("LoadTime")); dom.Columns.Add(DQSelectColumn.Field("CustomerCatalog_ID")); dom.Columns.Add(DQSelectColumn.Field("AccountingUnit_ID")); dom.Columns.Add(DQSelectColumn.Field("Remark")); dom.Columns.Add(DQSelectColumn.Field("Remark", detail)); dom.Columns.Add(DQSelectColumn.Field("DmoTypeID", detail)); dom.Columns.Add(DQSelectColumn.Field("DmoID", detail)); dom.Columns.Add(DQSelectColumn.Field("BrandItem_ID", detail)); dom.Columns.Add(DQSelectColumn.Field("BrandItem_Name", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_Code", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_Name", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_Spec", detail)); dom.Columns.Add(DQSelectColumn.Field("UnitNum", detail)); dom.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_MainUnit", detail)); dom.Columns.Add(DQSelectColumn.Field("Number", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_MainUnitRatio", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_SecondUnitRatio", detail)); dom.Columns.Add(DQSelectColumn.Field("Goods_UnitConvertDirection", detail)); dom.Columns.Add(DQSelectColumn.Field("LeftRatio", detail)); dom.Columns.Add(DQSelectColumn.Field("RightRatio", detail)); dom.Columns.Add(DQSelectColumn.Field("LeftRatio", detail)); dom.Columns.Add(DQSelectColumn.Field("RightRatio", detail)); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(detail, "ID"), "Detail_ID")); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(detail, "SaleGoods_ID"), "Goods_ID")); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.Field(detail, "UnitNum"), DQExpression.IfNull(DQExpression.Field(detail, "B3Butcher_Num"), DQExpression.Value(0))), "本次生产数量")); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.Field(detail, "SecondNumber"), DQExpression.IfNull(DQExpression.Field(detail, "B3Butcher_SecondNumber"), DQExpression.Value(0))), "本次生产辅数量")); dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); if (cbxHideAlready.Checked) { dom.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(detail, "B3Butcher_UnitNum")), DQCondition.LessThan(DQExpression.IfNull(DQExpression.Field(detail, "B3Butcher_UnitNum"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(detail, "UnitNum"), DQExpression.Value(0))))); } return dom; } } class tempSaleOrderToProductTaskModel { public long DetailId { get; set; } public long GoodsId { get; set; } public long? CustomerId { get; set; } public long? DmoID { get; set; } public short? DmoTypeID { get; set; } public Money? UnitNum { get; set; } public Money? SecondNumber { get; set; } public Money? Number { get; set; } public long BrandItem_ID { get; set; } public string Remark { get; set; } } }