Browse Source

订单加订单合并。

master^2
yibo 7 years ago
parent
commit
d050d80c29
4 changed files with 195 additions and 6 deletions
  1. +3
    -0
      B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj
  2. +183
    -0
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs
  3. +1
    -0
      B3QingDaoWanFu.Web/PluginClass.cs
  4. +8
    -6
      B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs

+ 3
- 0
B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj View File

@ -187,6 +187,9 @@
<Compile Include="Pages\B3QingDaoWanFu\ExportUI\GoodsExportToMES.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3QingDaoWanFu\Overlays\OrderEdit_Ext.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3QingDaoWanFu\Overlays\PayList_Ext.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>


+ 183
- 0
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs View File

@ -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<int>(session, typeof(Order), "RowVersion", Dmo.ID);
if (rowVersion != Dmo.RowVersion)
throw new Exception("当前单据已被更改,请重新打开");
}
Tuple<long, long?> 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<long, long?>(session);
}
bool CombineOrder(IDmoSession session, long id, bool existSaleOut)
{
var bl = BIFactory.Create<IOrderBL>(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<ISaleOutStoreBL>(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);
}
}
}

+ 1
- 0
B3QingDaoWanFu.Web/PluginClass.cs View File

@ -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);


+ 8
- 6
B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs View File

@ -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;


Loading…
Cancel
Save