diff --git a/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateEdit.cs b/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateEdit.cs index c398c4c..dd0f306 100644 --- a/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateEdit.cs +++ b/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateEdit.cs @@ -4,11 +4,15 @@ using System.Linq; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; +using B3_DongFangWanQi.BO; +using BWP.B3Frameworks; +using BWP.B3Frameworks.BO; using BWP.B3Frameworks.BO.MoneyTemplate; using BWP.B3Frameworks.BO.NamedValueTemplate; using BWP.B3Frameworks.Utils; using BWP.B3Sale.BL; using BWP.B3Sale.BO; +using BWP.B3Sale.Utils; using BWP.B3UnitedInfos.BO; using BWP.Web.Utils; using Forks.EnterpriseServices; @@ -20,6 +24,7 @@ using Forks.EnterpriseServices.SqlDoms; using Forks.Utils; using Forks.Utils.Collections; using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework; using TSingSoft.WebPluginFramework.Controls; using TSingSoft.WebPluginFramework.Pages; @@ -166,7 +171,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { form.Controls.Add(_dfContainer); var panel = new HLayoutPanel(); - panel.Add(new SimpleLabel("可用数量")); + panel.Add(new SimpleLabel("预计库存")); var label = new Label(); label.Font.Size = 14; label.Width = 120; @@ -181,13 +186,15 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { _l1.Width = 120; _l1.Font.Bold = true; panel.Add(_l1); - panel.Add(new SimpleLabel("合计金额")); + + panel.Add(new SimpleLabel("预计剩余数量")); _l2 = new Label(); _l2.ID = "l2"; _l2.Font.Size = 14; _l2.Font.Bold = true; _l2.Width = 120; panel.Add(_l2); + vPanel.Add(panel); _dfContainer.AddNonDFControl(_l1, "$l1"); _dfContainer.AddNonDFControl(_l2, "$l2"); @@ -203,8 +210,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { if (field.Name == "SecondNumber") { var hasSecondUnit = !string.IsNullOrEmpty(detail.Goods_SecondUnit); return hasSecondUnit; - } - + } return true; }; @@ -213,34 +219,39 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { _goodsGrid.Width = Unit.Percentage(100); _goodsGrid.ShowLineNo = true; + _goodsGrid.Columns.Add(new DFEditGridColumn("Order_ID")); - _goodsGrid.Columns.Add(new DFEditGridColumn("Customer_Name")); - _goodsGrid.Columns.Add(new DFEditGridColumn("OrderDate")); - _goodsGrid.Columns.Add(new DFEditGridColumn("LoadTime")); + _goodsGrid.Columns.Add(new DFEditGridColumn("Customer_Name")); + _goodsGrid.Columns.Add(new DFEditGridColumn("Goods_Code")); _goodsGrid.Columns.Add(new DFEditGridColumn("Goods_Name")); _goodsGrid.Columns.Add(new DFEditGridColumn("Goods_Spec")); + + var col = new DFEditGridColumn("UnitNum"); + col.InitEditControl += (sender, e) => { + e.Control.Attributes["onchange"] = @"SetSumInfo();this.dfContainer.setValue('ChangeFlag','true'); "; - _goodsGrid.Columns.EAdd(new DFEditGridColumn("UnitNum")).SumMode = SumMode.Sum; + }; + _goodsGrid.Columns.EAdd(col).SumMode = SumMode.Sum; + _goodsGrid.Columns.Add(new DFEditGridColumn("Unit")); - _goodsGrid.Columns.EAdd(new DFEditGridColumn("SecondNumber")).SumMode = SumMode.Sum; - _goodsGrid.Columns.EAdd(new DFEditGridColumn("Goods_SecondUnit")); - _goodsGrid.Columns.EAdd(new DFEditGridColumn("Price")); - _goodsGrid.Columns.EAdd(new DFEditGridColumn("Money")).SumMode = SumMode.Sum; - _goodsGrid.Columns.EAdd(new DFEditGridColumn("PolicyPrice")); - _goodsGrid.Columns.Add(new DFEditGridColumn("GoodsBatch_Name")); + _goodsGrid.Columns.EAdd(new DFEditGridColumn("Money")).SumMode = SumMode.Sum; + _goodsGrid.Columns.Add(new DFEditGridColumn("OrderDate")); + _goodsGrid.Columns.Add(new DFEditGridColumn("LoadTime")); + _goodsGrid.Columns.Add(new DFEditGridColumn("ChangeFlag")); _goodsGrid.ValueColumns.Add("SaleGoods_ID"); _goodsGrid.ValueColumns.Add("Goods_UnitConvertDirection"); _goodsGrid.ValueColumns.Add("Goods_MainUnitRatio"); _goodsGrid.ValueColumns.Add("Goods_SecondUnitRatio"); - _goodsGrid.ValueColumns.Add("LeftRatio"); + _goodsGrid.ValueColumns.Add("LeftRatio"); + _goodsGrid.ValueColumns.Add("Price"); _goodsGrid.ValueColumns.Add("RightRatio"); - + vPanel.Add(_goodsGrid); - new MainToSecondConvertRowManger(_goodsGrid); + //new MainToSecondConvertRowManger(_goodsGrid); _dfContainer.AddNonDFControl(_goodsGrid, "$Grid"); var hl = vPanel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Center)); var saveBt = hl.Add(new TSButton("保存")); @@ -257,7 +268,8 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { void SaveBtClick(object sender, EventArgs e) { _goodsGrid.GetFromUI(); - var groupByOrderID = Details.GroupBy(x => x.Order_ID); + var groupByOrderID = Details.Where(x => !string.IsNullOrEmpty(x.ChangeFlag)).GroupBy(x => x.Order_ID); + var bl = BIFactory.Create(); var cannotUpdateID = new List(); var updateIDs = new List(); @@ -313,6 +325,59 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { BindGrid(); } } + protected override void OnPreRender(EventArgs e) { + base.OnPreRender(e); + var pageIndex = _goodsGrid.CurrentPageIndex; + var size = _goodsGrid.PageSize; + var index = 0; + Money unitNum = 0; + var number =decimal.Parse(Request.QueryString["number"]); + foreach (var detail in Details) { + detail.Money = detail.UnitNum * detail.Price; + var begin = size * pageIndex; + var end = Math.Min(Details.Count, (pageIndex + 1) * size); + if (index < begin || index > end - 1) { + unitNum += (detail.UnitNum ?? 0); + } + index++; + } + var s = string.Format(@"", unitNum,number.ToString("0.00")); + Page.ClientScript.RegisterClientScriptBlock(GetType(), "OtherPageNumber", s, false); + + var script = @" +"; + script = script.Replace("{GridID}", _goodsGrid.ClientID); + script = script.Replace("{allUnitNumlabel}", _l1.ClientID); + script = script.Replace("{allleftlabel}", _l2.ClientID); + script = script.Replace("{sumUnitNum}", Details.Sum(x => (x.UnitNum ?? 0).Value).ToString()); + script = script.Replace("{sumleft}", (number - Details.Sum(x => (x.UnitNum ?? 0).Value)).ToString("0.00")); + + Page.ClientScript.RegisterStartupScript(this.GetType(), "Startup", script); + + } private void BindGrid() { @@ -323,6 +388,8 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { var goodsProperty = new JoinAlias("_gp", typeof(GoodsProperty)); var goods = new JoinAlias("_g", typeof(SaleGoods)); var customer = new JoinAlias("_c", typeof(Customer)); + //var storeDetail = new JoinAlias(typeof(StoreDetailTmp)); + //var output = new JoinAlias(typeof(OutputTmp)); dom.From.AddJoin(JoinType.Inner, new DQDmoSource(detailAlias), DQCondition.EQ(order, "ID", detailAlias, "Order_ID")); dom.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(detailAlias, "SaleGoods_ID", goods, "ID")); @@ -330,6 +397,12 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { dom.From.AddJoin(JoinType.Left, new DQDmoSource(goodsPropertyCatalog), DQCondition.EQ(goodsProperty, "GoodsPropertyCatalog_ID", goodsPropertyCatalog, "ID")); dom.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(order, "Customer_ID", customer, "ID")); OrganizationUtil.RegisterOrganizationQueryTable(dom); + + //dom.RegisterQueryTable(typeof(StoreDetailTmp), new[] { "GoodsProperty_ID", "Number", "SecondNumber" }, GetStoreDetailDQueryDom()); + //dom.RegisterQueryTable(typeof(OutputTmp), new[] { "GoodsProperty_ID", "Number" }, GetOutputDQueryDom()); + //dom.From.AddJoin(JoinType.Left, new DQDmoSource(storeDetail), DQCondition.EQ(goodsProperty, "ID", storeDetail, "GoodsProperty_ID")); + //dom.From.AddJoin(JoinType.Left, new DQDmoSource(output), DQCondition.EQ(goodsProperty, "ID", output, "GoodsProperty_ID")); + dom.Columns.Add(DQSelectColumn.Field("ID", detailAlias)); dom.Columns.Add(DQSelectColumn.Field("UnitNum", detailAlias)); dom.Columns.Add(DQSelectColumn.Field("SecondNumber", detailAlias)); @@ -345,14 +418,14 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { dom.Columns.Add(DQSelectColumn.Field("GoodsBatch_Name", detailAlias)); dom.Columns.Add(DQSelectColumn.Field("LoadTime", order)); dom.Columns.Add(DQSelectColumn.Field("OrderDate", order)); - var condition = (IList)ViewStateUtil.Current.LoadFromPersistenceMedium(uint.Parse(Request.QueryString["cacheid"]),true); - foreach (var expression in condition) - { + //dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), "Number1")); + var condition = (IList)ViewStateUtil.Current.LoadFromPersistenceMedium(uint.Parse(Request.QueryString["cacheid"]), true); + foreach (var expression in condition) { dom.Where.Conditions.Add(expression); } if (GoodsProperty_ID != null) { dom.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", GoodsProperty_ID)); - } + } OrganizationUtil.AddOrganizationLimit(dom, typeof(Order)); Details.Clear(); using (var context = new TransactionContext()) { @@ -373,7 +446,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { GoodsBatch_ID = (long?)reader[11], GoodsBatch_Name = (string)reader[12], LoadTime = (DateTime?)reader[13], - OrderDate = (DateTime?)reader[14], + OrderDate = (DateTime?)reader[14], }; Details.Add(detail); } @@ -382,13 +455,13 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { foreach (var detail in Details) { Dmo.RefreshDependency(detail, "SaleGoods_ID"); } - + _goodsGrid.DataBind(); _l1.Text = Math.Round(Details.Sum(x => (decimal?)(x.UnitNum) ?? 0), 2).ToString(); - _l2.Text = Math.Round(Details.Sum(x => (decimal?)(x.Money) ?? 0), 2).ToString(); + _l2.Text = Math.Round(decimal.Parse(Request.QueryString["number"]) - Details.Sum(x => (decimal?)(x.UnitNum) ?? 0), 2).ToString(); } - [DFClass,Serializable] + [DFClass, Serializable] class Order_DetailExt : Order_Detail { [LogicName("发货时间")] public DateTime? LoadTime { get; set; } @@ -396,6 +469,92 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { [LogicName("订货时间")] public DateTime? OrderDate { get; set; } + [LogicName("预计库存")] + public Money? Number1 { get; set; } + + + [LogicName(" ")] + [NonDmoProperty] + [DFExtProperty("Width", "1px")] + public string ChangeFlag { get; set; } + } + + class StoreDetailTmp { + public long GoodsProperty_ID { get; set; } + public long Goods_ID { get; set; } + [LogicName("主数量")] + public Money? Number { get; set; } + + [LogicName("辅数量")] + public Money? SecondNumber { get; set; } + + } + + class OutputTmp { + public long GoodsProperty_ID { get; set; } + public long Goods_ID { get; set; } + [LogicName("主数量")] + public Money? Number { get; set; } + + [LogicName("辅数量")] + public Money? SecondNumber { get; set; } + + } + DQueryDom GetStoreDetailDQueryDom() { + var storeDetail = new JoinAlias(typeof(StoreDetail)); + var store = new JoinAlias(typeof(Store)); + var query = new DQueryDom(storeDetail); + var goodsProperty = new JoinAlias("_s2",typeof(GoodsProperty)); + var goods = new JoinAlias("_s3",typeof(SaleGoods)); + + query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(storeDetail, "Goods_ID", goods, "ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", goods, "GoodsProperty_ID")); + + if (GoodsProperty_ID != null) { + query.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", GoodsProperty_ID)); + } + + query.From.AddJoin(JoinType.Left, new DQDmoSource(store), DQCondition.EQ(store, "ID", storeDetail, "Store_ID")); + + query.Columns.Add(DQSelectColumn.Field("ID", goodsProperty)); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "主数量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "主数量")); + + query.GroupBy.Expressions.Add(DQExpression.Field(goodsProperty, "ID")); + + query.Where.Conditions.Add(DQCondition.EQ(store, "Domain_ID", DomainContext.Current.ID)); + + return query; + } + + DQueryDom GetOutputDQueryDom() { + var dom = new DQueryDom(new JoinAlias(typeof(OutputForecast))); + dom.Columns.Add(DQSelectColumn.Max("ID")); + dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); + dom.EAddCheckedCondition(dom.From.RootSource.Alias); + var id = dom.EExecuteScalar() ?? 0; + + var detail = new JoinAlias(typeof(OutputForecast_Detail)); + var bill = new JoinAlias(typeof(OutputForecast)); + var goodsProperty = new JoinAlias("_s5", typeof(GoodsProperty)); + + var query = new DQueryDom(detail); + query.From.AddJoin(JoinType.Inner, new DQDmoSource(bill), + DQCondition.EQ(bill, "ID", detail, "OutputForecast_ID")); + + query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", detail, "GoodsProperty_ID")); + + if (GoodsProperty_ID != null) { + query.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", GoodsProperty_ID)); + } + + query.Columns.Add(DQSelectColumn.Field("GoodsProperty_ID")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "主数量")); + + query.GroupBy.Expressions.Add(DQExpression.Field("GoodsProperty_ID")); + query.Where.Conditions.Add(DQCondition.EQ(bill, "ID", id)); + query.Where.Conditions.Add(DQCondition.GreaterThan(detail, "GoodsProperty_ID", 0)); + return query; } } } diff --git a/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.cs b/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.cs index 4547822..2f07326 100644 --- a/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.cs +++ b/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.cs @@ -8,6 +8,7 @@ using System.Web.UI.WebControls; using B3_DongFangWanQi.BO; using BWP.B3Frameworks; using BWP.B3Frameworks.BO; +using BWP.B3Frameworks.BO.MoneyTemplate; using BWP.B3Frameworks.BO.NamedValueTemplate; using BWP.B3Frameworks.Utils; using BWP.B3Sale.BO; @@ -60,9 +61,9 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { layoutManager.Add("Customer_ID", _customerInput = QueryCreator.DFChoiceBox(_dFInfo.Fields["Customer_ID"], B3SaleDataSources.用户配置客户)); _customerCatalogt = QueryCreator.DFChoiceBox(_dFInfo.Fields["CustomerCatalog_ID"], B3SaleDataSources.客户分类); - layoutManager.Add("CustomerCatalog_ID", new SimpleLabel("客户分类"), _customerCatalogt ); + layoutManager.Add("CustomerCatalog_ID", new SimpleLabel("客户分类"), _customerCatalogt); var config = new AutoLayoutConfig(); - + config.Add("LoadTime"); config.Add("OrderDate"); config.Add("AccountingUnit_ID"); config.Add("Employee_ID"); @@ -77,7 +78,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { section.SetDisplayName("GoodsProperty_ID", "存货属性"); section.SetDisplayName("GoodsPropertyCatalog_ID", "存货属性分类"); VLayoutPanel vp; - titlePanel.Controls.Add(vp=new VLayoutPanel()); + titlePanel.Controls.Add(vp = new VLayoutPanel()); vp.Add(layoutManager.CreateLayout()); var tsbtn = new TSButton("开始查询"); @@ -91,7 +92,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { AddDetails(form.EAdd(new TitlePanel("订单明细", "订单明细"))); mDFContainer.ID = "DFContainer"; - form.Controls.Add(mDFContainer); + form.Controls.Add(mDFContainer); var vPanel = new VLayoutPanel(); form.Controls.Add(vPanel); @@ -137,9 +138,9 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { DFBrowseGrid _grid; void AddDetails(TitlePanel tPanel) { - + tPanel.Controls.Add(new LiteralControl("

")); - + var editor = new DFDataTableEditor(); _grid = new DFBrowseGrid(editor) { Width = Unit.Percentage(100), @@ -148,47 +149,55 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { }; _grid.Columns.Add(new DFBrowseGridColumn("GoodsProperty_Name")); - _grid.Columns.Add(new DFBrowseGridColumn("UnitNum")); + _grid.Columns.Add(new DFBrowseGridColumn("UnitNum")); _grid.Columns.Add(new DFBrowseGridColumn("库存数量")); - _grid.Columns.Add(new DFBrowseGridColumn("测算数量")); - _grid.Columns.Add(new DFBrowseGridColumn("可用数量")); - _grid.Columns.Add(new DFBrowseGridColumn("差异数量")); - + _grid.Columns.Add(new DFBrowseGridColumn("测算数量")); + _grid.Columns.Add(new DFBrowseGridColumn("可用数量")); + _grid.Columns.Add(new DFBrowseGridColumn("预计剩余数量")); + _grid.Columns.Add(new DFBrowseGridColumn("预计剩余头数")); _grid.OnDetailDataBound += (htmlRow, dataRow, o) => { var row = dataRow as DFDataRow; if (row == null) return; - var diff = (decimal?)row["差异数量"]; - var numberIndext = 5; - var bt = new DialogButton(); - bt.CssClass = "btn"; - bt.Text = htmlRow.Cells[numberIndext].InnerText; - - if (o % 2 != 1) { - bt.CssClass = "btn evenbtn"; - } - - if (diff < 0) { - bt.BorderStyle = BorderStyle.Solid; - bt.BorderColor = Color.Red; - bt.BorderWidth = 1; - } - htmlRow.Cells[numberIndext].InnerHtml = ""; - htmlRow.Cells[numberIndext].Controls.Add(bt); - var idField = (long?)row["GoodsProperty_ID"]; - var number = ((decimal?)row["可用数量"]) ?? 0; - var url = AspUtil.UpdateUrlParam("SaleOrderUpdateEdit.aspx", "GoodsProperty_ID", ( idField??0).ToString()); - url = AspUtil.UpdateUrlParam(url, "number", number.ToString()); - url = AspUtil.UpdateUrlParam(url, "cacheid", "'+__DFContainer.getValue('$HiddenField01')+'"); - bt.Url = url; - bt.Width = 100; - bt.Click += delegate { - _grid.DataBind(); - }; + var diff = (decimal?)row["预计剩余数量"]; + + AddLinkBt(o, row, 5, diff, htmlRow); + AddLinkBt(o, row, 6, diff, htmlRow); }; tPanel.Controls.Add(_grid); - + + } + + private void AddLinkBt(int o, DFDataRow row, int numberIndext, decimal? diff, HtmlTableRow htmlRow) + { + var bt = new DialogButton(); + bt.CssClass = "btn"; + bt.Text = htmlRow.Cells[numberIndext].InnerText; + + if (o%2 != 1) + { + bt.CssClass = "btn evenbtn"; + } + + if (diff < 0) + { + bt.BorderStyle = BorderStyle.Solid; + bt.BorderColor = Color.Red; + bt.BorderWidth = 1; + } + htmlRow.Cells[numberIndext].InnerHtml = ""; + htmlRow.Cells[numberIndext].Controls.Add(bt); + + + var idField = (long?) row["GoodsProperty_ID"]; + var number = ((decimal?) row["可用数量"]) ?? 0; + var url = AspUtil.UpdateUrlParam("SaleOrderUpdateEdit.aspx", "GoodsProperty_ID", (idField ?? 0).ToString()); + url = AspUtil.UpdateUrlParam(url, "number", number.ToString()); + url = AspUtil.UpdateUrlParam(url, "cacheid", "'+__DFContainer.getValue('$HiddenField01')+'"); + bt.Url = url; + bt.Width = 100; + bt.Click += delegate { _grid.DataBind(); }; } private void DataBindGrid() { @@ -202,30 +211,77 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { } private DQueryDom GetQueryDom() { + var bill = new JoinAlias(typeof(OrderTmp)); var goodsProperty = new JoinAlias(typeof(GoodsProperty)); var storeDetail = new JoinAlias(typeof(StoreDetailTmp)); var output = new JoinAlias(typeof(OutputTmp)); - var dom = new DQueryDom(bill); + var outputConfig = new JoinAlias(typeof(OutputConfigTmp)); + var dom = new DQueryDom(bill); OrganizationUtil.RegisterOrganizationQueryTable(dom); - dom.RegisterQueryTable(typeof(OrderTmp), new[] { "GoodsProperty_ID", "Number", "SecondNumber", "UnitNum" }, GetOrderDQueryDom()); + dom.RegisterQueryTable(typeof(OrderTmp), new[] { "GoodsProperty_ID", "Number", "SecondNumber", "UnitNum" }, GetOrderDQueryDom()); dom.RegisterQueryTable(typeof(StoreDetailTmp), new[] { "GoodsProperty_ID", "Number", "SecondNumber" }, GetStoreDetailDQueryDom()); - dom.RegisterQueryTable(typeof(OutputTmp), new[] { "GoodsProperty_ID", "Number" }, GetOutputDQueryDom()); - + dom.RegisterQueryTable(typeof(OutputTmp), new[] { "GoodsProperty_ID", "Number" }, GetOutputDQueryDom()); + dom.RegisterQueryTable(typeof(OutputConfigTmp), new[] { "GoodsProperty_ID", "Number" }, GetOutputConfigureDom()); dom.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(bill, "GoodsProperty_ID", goodsProperty, "ID")); dom.From.AddJoin(JoinType.Left, new DQDmoSource(storeDetail), DQCondition.EQ(bill, "GoodsProperty_ID", storeDetail, "GoodsProperty_ID")); dom.From.AddJoin(JoinType.Left, new DQDmoSource(output), DQCondition.EQ(bill, "GoodsProperty_ID", output, "GoodsProperty_ID")); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(outputConfig), DQCondition.EQ(bill, "GoodsProperty_ID", outputConfig, "GoodsProperty_ID")); dom.Columns.Add(DQSelectColumn.Field("GoodsProperty_ID", bill)); - dom.Columns.Add(DQSelectColumn.Field("GoodsProperty_Name", bill)); - dom.Columns.Add(DQSelectColumn.Field("UnitNum", bill)); + dom.Columns.Add(DQSelectColumn.Field("GoodsProperty_Name", bill)); + dom.Columns.Add(DQSelectColumn.Field("UnitNum", bill)); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(storeDetail, "Number"), "库存数量")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(output, "Number"), "测算数量")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(output, "Number"), "测算数量")); + + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), "可用数量")); + + dom.Columns.Add(DQSelectColumn.Create( + ESubtract(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), DQExpression.Field(bill, "UnitNum")), "预计剩余数量")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), "可用数量")); dom.Columns.Add(DQSelectColumn.Create( - ESubtract(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), DQExpression.Field(bill, "UnitNum")), "差异数量")); - return dom; + ESubtract(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), DQExpression.Field(bill, "UnitNum")).ESafeDivide(DQExpression.Field(outputConfig, "Number")).ECastType?>(), "预计剩余头数")); + + return dom; + } + + class OutputConfigTmp { + public long GoodsProperty_ID { get; set; } + + [LogicName("主数量")] + public Money? Number { get; set; } + + + } + private DQueryDom GetOutputConfigureDom() { + + var dom = new DQueryDom(new JoinAlias(typeof(OutputConfigure))); + dom.Columns.Add(DQSelectColumn.Max("ID")); + dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); + dom.Where.Conditions.Add(DQCondition.EQ("Stopped", false)); + var id = dom.EExecuteScalar() ?? 0; + + var detail = new JoinAlias(typeof(OutputConfigure_Detail)); + var bill = new JoinAlias(typeof(OutputConfigure)); + var goodsPropertyCatalog = new JoinAlias(typeof(GoodsPropertyCatalog)); + var goodsProperty = new JoinAlias(typeof(GoodsProperty)); + + var query = new DQueryDom(detail); + query.From.AddJoin(JoinType.Inner, new DQDmoSource(bill), + DQCondition.EQ(bill, "ID", detail, "OutputConfigure_ID")); + + query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", detail, "GoodsProperty_ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsPropertyCatalog), DQCondition.EQ(goodsProperty, "GoodsPropertyCatalog_ID", goodsPropertyCatalog, "ID")); + + AddGoodsCondition(goodsPropertyCatalog, goodsProperty, query); + + query.Columns.Add(DQSelectColumn.Field("GoodsProperty_ID")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "主数量")); + + query.GroupBy.Expressions.Add(DQExpression.Field("GoodsProperty_ID")); + query.Where.Conditions.Add(DQCondition.EQ(bill, "ID", id)); + query.Where.Conditions.Add(DQCondition.GreaterThan(detail, "GoodsProperty_ID", 0)); + return query; } static IDQExpression ESubtract(IDQExpression expression, IDQExpression right) { @@ -234,7 +290,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { [DFClass] class OrderTmp { - [LogicName("存货属性")] + [LogicName("存货属性")] public long? GoodsProperty_ID { get; set; } [LogicName("主数量")] @@ -245,12 +301,12 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { [LogicName("订货报价数量")] public Money? UnitNum { get; set; } - + [LogicName("存货属性名称")] [ReferenceTo(typeof(GoodsProperty), "Name")] [Join("GoodsProperty_ID", "ID")] public string GoodsProperty_Name { get; set; } - + } class StoreDetailTmp { @@ -279,10 +335,10 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { var dom = _queryContainer.Build(); var bill = dom.From.RootSource.Alias; var detail = new JoinAlias("detail", typeof(Order_Detail)); - var goodsPropertyCatalog = new JoinAlias("_gpc",typeof(GoodsPropertyCatalog)); - var goodsProperty = new JoinAlias("_gp",typeof(GoodsProperty)); - var goods = new JoinAlias("_g",typeof(SaleGoods)); - var customer = new JoinAlias("_c",typeof(Customer)); + var goodsPropertyCatalog = new JoinAlias("_gpc", typeof(GoodsPropertyCatalog)); + var goodsProperty = new JoinAlias("_gp", typeof(GoodsProperty)); + var goods = new JoinAlias("_g", typeof(SaleGoods)); + var customer = new JoinAlias("_c", typeof(Customer)); dom.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(bill, "ID", detail, "Order_ID")); dom.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(detail, "SaleGoods_ID", goods, "ID")); @@ -291,14 +347,14 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { dom.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(bill, "Customer_ID", customer, "ID")); AddGoodsCondition(goodsPropertyCatalog, goodsProperty, dom); - dom.Columns.Add(DQSelectColumn.Field("ID", goodsProperty)); + dom.Columns.Add(DQSelectColumn.Field("ID", goodsProperty)); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(detail, "Number")), "主数量")); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(detail, "SecondNumber")), "主数量")); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(detail, "UnitNum")), "主数量")); - dom.GroupBy.Expressions.Add(DQExpression.Field(goodsProperty, "ID")); + dom.GroupBy.Expressions.Add(DQExpression.Field(goodsProperty, "ID")); dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); - + dom.Where.Conditions.Add(DQCondition.EQ(bill, "Domain_ID", DomainContext.Current.ID)); if (!_customerCatalogt.IsEmpty) { var strs = B3SaleWebUtil.GetDeepByTreeName(_customerCatalogt.DisplayValue); @@ -311,7 +367,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { dom.Where.Conditions.Add(DQCondition.Or(conditions)); } uint id = ViewStateUtil.Current.SaveToPersistenceMedium(dom.Where.Conditions); - hidden.Value = id.ToString(); + hidden.Value = id.ToString(); OrganizationUtil.AddOrganizationLimit(dom, typeof(Order)); return dom; } @@ -332,7 +388,7 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { query.From.AddJoin(JoinType.Left, new DQDmoSource(store), DQCondition.EQ(store, "ID", storeDetail, "Store_ID")); - query.Columns.Add(DQSelectColumn.Field("ID", goodsProperty)); + query.Columns.Add(DQSelectColumn.Field("ID", goodsProperty)); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "主数量")); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "主数量")); @@ -354,11 +410,11 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { var bill = new JoinAlias(typeof(OutputForecast)); var goodsPropertyCatalog = new JoinAlias(typeof(GoodsPropertyCatalog)); var goodsProperty = new JoinAlias(typeof(GoodsProperty)); - + var query = new DQueryDom(detail); query.From.AddJoin(JoinType.Inner, new DQDmoSource(bill), DQCondition.EQ(bill, "ID", detail, "OutputForecast_ID")); - + query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", detail, "GoodsProperty_ID")); query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsPropertyCatalog), DQCondition.EQ(goodsProperty, "GoodsPropertyCatalog_ID", goodsPropertyCatalog, "ID")); @@ -395,6 +451,6 @@ namespace BWP.Web.Pages.B3_DongFangWanQi.Tools { DataBindGrid(); } } - + } } diff --git a/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.xml b/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.xml index 71840db..ba15cfe 100644 --- a/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.xml +++ b/B3_DongFangWanQi.Web/Pages/B3_DongFangWanQi/Tools/SaleOrderUpdateList.xml @@ -36,6 +36,14 @@ + + + + + + + +