|
|
|
@ -0,0 +1,131 @@ |
|
|
|
using BWP.B3Frameworks; |
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate; |
|
|
|
using BWP.B3Frameworks.Utils; |
|
|
|
using BWP.B3QingDaoWanFu.Utils; |
|
|
|
using BWP.B3Sale.BL; |
|
|
|
using BWP.B3Sale.BO; |
|
|
|
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.WebPluginFramework; |
|
|
|
|
|
|
|
namespace BWP.B3QingDaoWanFu.TypeIOCs |
|
|
|
{ |
|
|
|
[TypeIOC(typeof(OrderBL), typeof(OrderBL.BaseBLIOCs.AfterInsert))] |
|
|
|
public class SaleOrderAfterInsert : OrderBL.BaseBLIOCs.AfterInsert |
|
|
|
{ |
|
|
|
IOrderBL orderBL = null; |
|
|
|
public void Invoke(IDmoContext context, Order dmo) |
|
|
|
{ |
|
|
|
if (new WanFuOnlineConfig().AutoCombineOrder.Value == false) |
|
|
|
return; |
|
|
|
orderBL = BIFactory.Create<IOrderBL>(context); |
|
|
|
var existInfo = GetExistOrderAndSaleOutStore(context.Session, dmo); |
|
|
|
if (existInfo == null) |
|
|
|
{ |
|
|
|
if (dmo.SaleForecast_ID.HasValue) |
|
|
|
orderBL.Check(dmo); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var ok = CombineOrder(context.Session, dmo, existInfo.Item1, existInfo.Item2.HasValue); |
|
|
|
if (!ok) |
|
|
|
return; |
|
|
|
|
|
|
|
if (existInfo.Item2.HasValue) |
|
|
|
CombineSaleOutStore(context.Session, dmo, existInfo.Item2.Value); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Tuple<long, long?> GetExistOrderAndSaleOutStore(IDmoSession session, Order order) |
|
|
|
{ |
|
|
|
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("ID", order.ID), DQCondition.EQ("Customer_ID", order.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(order.LoadTime.Value)), DQCondition.InEQ("BillState", 单据状态.已作废))); |
|
|
|
query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", 单据状态.未审核))); |
|
|
|
return query.EExecuteScalar<long, long?>(session); |
|
|
|
} |
|
|
|
|
|
|
|
bool CombineOrder(IDmoSession session, Order order, long id, bool existSaleOut) |
|
|
|
{ |
|
|
|
var comb = orderBL.Load(id); |
|
|
|
if (comb.Details.Any(x => order.Details.Any(y => x.SaleGoods_ID == y.SaleGoods_ID && x.Price != y.Price))) |
|
|
|
return false; |
|
|
|
foreach (var detail in order.Details) |
|
|
|
{ |
|
|
|
var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID); |
|
|
|
if (first == null) |
|
|
|
{ |
|
|
|
var nd = new Order_Detail(); |
|
|
|
DmoUtil.CopyDmoFields(detail, nd, "ID", "Order_ID"); |
|
|
|
comb.Details.Add(nd); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0); |
|
|
|
first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; |
|
|
|
first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value; |
|
|
|
} |
|
|
|
if (existSaleOut) |
|
|
|
{ |
|
|
|
first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; |
|
|
|
first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum).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); |
|
|
|
} |
|
|
|
orderBL.Update(comb); |
|
|
|
if (comb.BillState == 单据状态.未审核 && order.SaleForecast_ID.HasValue) |
|
|
|
orderBL.Check(comb); |
|
|
|
order.OldOrderID = id; |
|
|
|
orderBL.Update(order); |
|
|
|
orderBL.Nullify(order); |
|
|
|
order.ID = id; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
void CombineSaleOutStore(IDmoSession session, Order order, long id) |
|
|
|
{ |
|
|
|
var bl = BIFactory.Create<ISaleOutStoreBL>(session); |
|
|
|
var saleOut = bl.Load(id); |
|
|
|
foreach (var orderDetail in order.Details) |
|
|
|
{ |
|
|
|
var first = saleOut.Details.FirstOrDefault(x => x.SaleGoods_ID == orderDetail.SaleGoods_ID); |
|
|
|
if (first == null) |
|
|
|
{ |
|
|
|
var outStoreDetail = new SaleOutStore_Detail(); |
|
|
|
DmoUtil.CopyDmoFields(orderDetail, outStoreDetail); |
|
|
|
outStoreDetail.Order_DetailID = orderDetail.ID; |
|
|
|
outStoreDetail.Order_Detail_Number = orderDetail.Number; |
|
|
|
outStoreDetail.Order_Detail_SecondNumber = orderDetail.SecondNumber; |
|
|
|
outStoreDetail.Order_Detail_UnitNum = orderDetail.UnitNum; |
|
|
|
outStoreDetail.HiddenUnitNum = orderDetail.UnitNum; |
|
|
|
outStoreDetail.HiddenNumber = orderDetail.Number; |
|
|
|
outStoreDetail.HiddenSecondNumber = orderDetail.SecondNumber; |
|
|
|
outStoreDetail.IsOutsourcing = orderDetail.IsOutsourcing; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0); |
|
|
|
first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value; |
|
|
|
first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value; |
|
|
|
} |
|
|
|
} |
|
|
|
bl.Update(saleOut); |
|
|
|
} |
|
|
|
} |
|
|
|
} |