You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

115 lines
3.9 KiB

using BWP.Web.Pages.B3Sale.Bills.SaleForecast_;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BWP.B3Frameworks;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BO;
using BWP.Web.Layout;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils;
using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework;
using BWP.B3Sale.BL;
using Forks.EnterpriseServices.BusinessInterfaces;
namespace BWP.Web.Pages.B3YunKen.Overlays
{
public class SaleForecastEdit_Ext: SaleForecastEdit
{
protected override void AddCustomerLayoutConfig(AutoLayoutConfig config)
{
config.AddAfter("FreightBear", "DeliverAddress");
}
protected override void AddCustomerToolBar(HLayoutPanel toobar)
{
var btn=new TSButton("载入存货");
btn.Click += Btn_Click;
toobar.Add(btn);
}
private void Btn_Click(object sender, EventArgs e)
{
Dmo.Details.Clear();
foreach (SaleForecast_Detail detail in LoadList())
{
Dmo.Details.Add(detail);
}
_detailGrid.DataBind();
}
List<SaleForecast_Detail> LoadList()
{
var list=new List<SaleForecast_Detail>();
var factor = new PriceFactor {
Customer_ID = Dmo.Customer_ID,
Time = Dmo.Date,
AccountingUnit_ID = Dmo.AccountingUnit_ID
};
using (var session=Forks.EnterpriseServices.DomainObjects2.Dmo.NewSession())
{
var maxid = GetMaxId(session);
var bill = new JoinAlias(typeof(CustomerGoodsTable));
var detail = new JoinAlias(typeof(CustomerGoodsTable_Detail));
var query = new DQueryDom(bill);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(bill, "ID", detail, "CustomerGoodsTable_ID"));
query.Where.Conditions.Add(DQCondition.EQ("ID", maxid));
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail));
query.Columns.Add(DQSelectColumn.Field("BrandItem_ID", detail));
query.Columns.Add(DQSelectColumn.Field("BrandItem_Name", detail));
query.Columns.Add(DQSelectColumn.Field("Unit", detail));
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail));
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail));
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var dmodetail = new SaleForecast_Detail()
{
SaleGoods_ID = (long)reader[0],
BrandItem_ID = (long?)reader[1],
BrandItem_Name = (string)reader[2],
Unit = (string)reader[3],
UnitNum = (Money<decimal>?)reader[4],
SecondNumber = (Money<decimal>?)reader[5],
};
list.Add(dmodetail);
}
}
}
IRebateBL bl = BIFactory.Create<IRebateBL>();
foreach (SaleForecast_Detail detail in list)
{
DmoUtil.RefreshDependency(detail, "SaleGoods_ID");
detail.Rebate = bl.GetRebate(factor.Customer_ID, factor.Time, detail.SaleGoods_ID);
detail.SetPrice(factor);
detail.NetPrice = detail.Price;
}
return list;
}
private long? GetMaxId(IDmoSession session)
{
var bill = new JoinAlias(typeof(CustomerGoodsTable));
var query = new DQueryDom(bill);
query.Where.Conditions.Add(DQCondition.EQ("AccountingUnit_ID", Dmo.AccountingUnit_ID));
query.Where.Conditions.Add(DQCondition.EQ("Customer_ID", Dmo.Customer_ID));
query.EAddCheckedCondition(bill);
query.Where.Conditions.Add(DQCondition.EQ("Domain_ID",DomainContext.Current.ID));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID",true));
query.Range=SelectRange.Top(1);
query.Columns.Add(DQSelectColumn.Field("ID"));
return query.EExecuteScalar<long?>(session);
}
}
}