From d050d80c29c4c550d12da5e47338c03e5557759f Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 3 Dec 2018 09:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8A=A0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj | 3 + .../B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs | 183 ++++++++++++++++++ B3QingDaoWanFu.Web/PluginClass.cs | 1 + B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 14 +- 4 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs diff --git a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj index 3efb91e..80f4b76 100644 --- a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj +++ b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj @@ -187,6 +187,9 @@ ASPXCodeBehind + + ASPXCodeBehind + ASPXCodeBehind diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs new file mode 100644 index 0000000..f7f8342 --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs @@ -0,0 +1,183 @@ +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3Frameworks.Utils; +using BWP.B3Sale.BL; +using BWP.B3Sale.BO; +using BWP.Web.Actions; +using BWP.Web.Pages.B3Sale.Bills.Order_; +using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework; + +namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays +{ + class OrderEdit_Ext : OrderEdit + { + protected override void AddActions(TSingSoft.WebControls2.ButtonGroup buttonGroup) + { + base.AddActions(buttonGroup); + if (!IsNew) + buttonGroup.Actions.Add(new SimpleServerAction("订单合并", () => CanSave, CombineOrder) + { + OnClientClick = "if(typeof(CheckDmoChanged) == 'function' && CheckDmoChanged()){ alert('您所要合并的单据还没有保存,请先保存单据后再操作'); return false;}" + }); + } + + void CombineOrder() + { + if (Dmo.LoadTime == null) + throw new Exception("订单发货时间不能为空"); + if (Dmo.Customer_ID == null) + throw new Exception("购货客户不能为空"); + using (var context = new TransactionContext()) + { + EnsuState(context.Session); + var existInfo = GetExistOrderAndSaleOutStore(context.Session); + if (existInfo == null) + { + AspUtil.Alert(this, "无订单可合并!"); + } + else + { + var ok = CombineOrder(context.Session, existInfo.Item1, existInfo.Item2.HasValue); + if (!ok) + return; + + if (existInfo.Item2.HasValue) + CombineSaleOutStore(context.Session, existInfo.Item2.Value); + context.Commit(); + NDmoSave(existInfo.Item1); + } + } + } + + void EnsuState(IDmoSession session) + { + var rowVersion = InnerBLUtil.GetDmoPropertyByID(session, typeof(Order), "RowVersion", Dmo.ID); + if (rowVersion != Dmo.RowVersion) + throw new Exception("当前单据已被更改,请重新打开"); + } + + Tuple GetExistOrderAndSaleOutStore(IDmoSession session) + { + var main = new JoinAlias("mOrder", typeof(Order)); + var saleOut = new JoinAlias(typeof(SaleOutStore)); + var query = new DQueryDom(main); + query.From.AddJoin(JoinType.Left, new DQDmoSource(saleOut), DQCondition.EQ(main, "ID", saleOut, "Order_ID")); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("ID", saleOut)); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Customer_ID", Dmo.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(Dmo.LoadTime.Value.Date)), DQCondition.InEQ("BillState", 单据状态.已作废))); + query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", 单据状态.未审核))); + if (!IsNew) + query.Where.Conditions.Add(DQCondition.InEQ("ID", Dmo.ID)); + return query.EExecuteScalar(session); + } + + bool CombineOrder(IDmoSession session, long id, bool existSaleOut) + { + var bl = BIFactory.Create(session); + var comb = bl.Load(id); + if (comb.Details.Any(x => Dmo.Details.Any(y => x.SaleGoods_ID == y.SaleGoods_ID && x.Price != y.Price))) + return false; + foreach (var detail in Dmo.Details) + { + var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID); + if (first == null) + { + first = new Order_Detail(); + DmoUtil.CopyDmoFields(detail, first, "ID", "Order_ID"); + comb.Details.Add(first); + } + else + { + first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; + first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; + first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value; + first.Money = (first.Money ?? 0).Value + (detail.Money ?? 0).Value; + } + if (existSaleOut) + { + first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; + first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum ?? 0).Value + (detail.Number ?? 0).Value; + first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; + } + } + if (existSaleOut) + { + comb.AlreadyOutStoreUnitNum = comb.Details.Sum(x => (x.AlreadyOutStoreUnitNum ?? 0).Value); + comb.AlreadyOutStoreNum = comb.Details.Sum(x => (x.AlreadyOutStoreNum ?? 0).Value); + comb.AlreadyOutStoreSecondNumber = comb.Details.Sum(x => (x.AlreadyOutStoreSecondNumber ?? 0).Value); + } + + Dmo.OldOrderID = id; + UpdateOldOrderID(session); + SaleForecastBL.CreateOrderContext = null; + bl.Nullify(Dmo); + bl.Update(comb); + return true; + } + + void UpdateOldOrderID(IDmoSession session) + { + var update = new DQUpdateDom(typeof(Order)); + update.Columns.Add(new DQUpdateColumn("OldOrderID", Dmo.OldOrderID)); + update.Where.Conditions.Add(DQCondition.EQ("ID", Dmo.ID)); + session.ExecuteNonQuery(update); + } + + void CombineSaleOutStore(IDmoSession session, long id) + { + var bl = BIFactory.Create(session); + var saleOut = bl.Load(id); + foreach (var orderDetail in Dmo.Details) + { + var first = saleOut.Details.FirstOrDefault(x => x.SaleGoods_ID == orderDetail.SaleGoods_ID); + if (first == null) + { + first = new SaleOutStore_Detail(); + DmoUtil.CopyDmoFields(orderDetail, first, "ID"); + first.Order_DetailID = orderDetail.ID; + first.Order_Detail_Number = orderDetail.Number; + first.Order_Detail_SecondNumber = orderDetail.SecondNumber; + first.Order_Detail_UnitNum = orderDetail.UnitNum; + first.HiddenUnitNum = orderDetail.UnitNum; + first.HiddenNumber = orderDetail.Number; + first.HiddenSecondNumber = orderDetail.SecondNumber; + first.IsOutsourcing = orderDetail.IsOutsourcing; + } + else + { + first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0).Value; + first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value; + first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value; + first.Money = (first.Money ?? 0).Value + (orderDetail.Money ?? 0).Value; + } + } + bl.Update(saleOut); + } + + void NDmoSave(long id) + { + var blMessage = BIFactory.GetLastMessage(); + var url = Request.RawUrl; + if (IsNew) + { + url = AspUtil.RemoveUrlParam(url, "ReferToID"); + url = AspUtil.AddParamToUrl(url, "ID", id.ToString()); + } + var message = "合并成功!"; + if (!string.IsNullOrEmpty(blMessage)) + { + message += "\r\n" + blMessage; + } + AspUtil.RedirectAndAlert(this, url, message); + } + + } +} diff --git a/B3QingDaoWanFu.Web/PluginClass.cs b/B3QingDaoWanFu.Web/PluginClass.cs index 41e0201..b4578ba 100644 --- a/B3QingDaoWanFu.Web/PluginClass.cs +++ b/B3QingDaoWanFu.Web/PluginClass.cs @@ -31,6 +31,7 @@ namespace BWP.B3QingDaoWanFu WpfPageFactory.RegisterPageOverlay(typeof(WeighBillList).FullName, typeof(WeighBillList_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3ButcherManage.Bills.Pay_.SelectStatPayDialog).FullName, typeof(SelectStatPayDialog_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.SaleOutStore_.SaleOutStoreList).FullName, typeof(SaleOutStoreList_Ext).FullName); + WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.Order_.OrderEdit).FullName, typeof(OrderEdit_Ext).FullName); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight); GlobalFlags.On(B3SaleConsts.Flags.MarketingActivityEnableAdjustPrice); GlobalFlags.On(B3SaleConsts.Flags.SendOutStoreNoAvailableStorage); diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs index ccd4e20..92895a8 100644 --- a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -22,6 +22,8 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs IOrderBL orderBL = null; public void Invoke(IDmoContext context, Order dmo) { + if (dmo.SaleForecast_ID == null) + return; if (new WanFuOnlineConfig().AutoCombineOrder.Value == false) return; if (dmo.LoadTime == null) @@ -30,8 +32,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs var existInfo = GetExistOrderAndSaleOutStore(context.Session, dmo); if (existInfo == null) { - if (dmo.SaleForecast_ID.HasValue) - orderBL.Check(dmo); + orderBL.Check(dmo); return; } @@ -73,14 +74,15 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs } else { - first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0); + first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value; + first.Money = (first.Money ?? 0).Value + (detail.Money ?? 0).Value; } if (existSaleOut) { first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; - first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum).Value + (detail.Number ?? 0).Value; + first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum ?? 0).Value + (detail.Number ?? 0).Value; first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; } } @@ -96,7 +98,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs SaleForecastBL.CreateOrderContext = null; orderBL.Nullify(order); orderBL.Update(comb); - if (comb.BillState == 单据状态.未审核 && order.SaleForecast_ID.HasValue) + if (comb.BillState == 单据状态.未审核) orderBL.Check(comb); order.ID = id; return true; @@ -120,7 +122,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs if (first == null) { var outStoreDetail = new SaleOutStore_Detail(); - DmoUtil.CopyDmoFields(orderDetail, outStoreDetail); + DmoUtil.CopyDmoFields(orderDetail, outStoreDetail, "ID"); outStoreDetail.Order_DetailID = orderDetail.ID; outStoreDetail.Order_Detail_Number = orderDetail.Number; outStoreDetail.Order_Detail_SecondNumber = orderDetail.SecondNumber;