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;