|
|
@ -0,0 +1,661 @@ |
|
|
|
|
|
using BWP.B3ButcherManage.BO; |
|
|
|
|
|
using BWP.B3Frameworks; |
|
|
|
|
|
using BWP.B3Frameworks.BO; |
|
|
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate; |
|
|
|
|
|
using BWP.B3Frameworks.Utils; |
|
|
|
|
|
using BWP.B3Sale.BO; |
|
|
|
|
|
using BWP.B3UnitedInfos.BO; |
|
|
|
|
|
using BWP.Web.Layout; |
|
|
|
|
|
using BWP.Web.Utils; |
|
|
|
|
|
using BWP.Web.WebControls; |
|
|
|
|
|
using Forks.EnterpriseServices; |
|
|
|
|
|
using Forks.EnterpriseServices.DataForm; |
|
|
|
|
|
using Forks.EnterpriseServices.DomainObjects2; |
|
|
|
|
|
using Forks.EnterpriseServices.DomainObjects2.DQuery; |
|
|
|
|
|
using Forks.EnterpriseServices.SqlDoms; |
|
|
|
|
|
using Forks.Utils; |
|
|
|
|
|
using System; |
|
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
|
using System.Linq; |
|
|
|
|
|
using System.Text; |
|
|
|
|
|
using System.Web.UI; |
|
|
|
|
|
using System.Web.UI.WebControls; |
|
|
|
|
|
using TSingSoft.WebControls2; |
|
|
|
|
|
using TSingSoft.WebPluginFramework; |
|
|
|
|
|
using TSingSoft.WebPluginFramework.Pages; |
|
|
|
|
|
using Forks.Utils.Collections; |
|
|
|
|
|
using System.Web; |
|
|
|
|
|
using Newtonsoft.Json; |
|
|
|
|
|
using Forks.EnterpriseServices.BusinessInterfaces; |
|
|
|
|
|
using BWP.B3Sale.BL; |
|
|
|
|
|
|
|
|
|
|
|
namespace BWP.Web.Pages.B3ButcherManageToSale.Overlays |
|
|
|
|
|
{ |
|
|
|
|
|
class SaleOutStoreBalance : B3ButcherManage.Tools.SaleOutStoreBalance |
|
|
|
|
|
{ |
|
|
|
|
|
QueryContainer mQueryContainer; |
|
|
|
|
|
readonly DFInfo _dFInfo; |
|
|
|
|
|
public SaleOutStoreBalance() |
|
|
|
|
|
{ |
|
|
|
|
|
var type = this.GetType(); |
|
|
|
|
|
mQueryContainer = QueryContainer.FromResource(type.FullName + ".xml", type.Assembly); |
|
|
|
|
|
_dFInfo = DFInfo.Get(typeof(SaleOutStore)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<SendOutStoreDetail> details |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["details"] == null) |
|
|
|
|
|
ViewState["details"] = new List<SendOutStoreDetail>(); |
|
|
|
|
|
return (List<SendOutStoreDetail>)ViewState["details"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["details"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<InnerDetail> innerDetails |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["innerDetails"] == null) |
|
|
|
|
|
ViewState["innerDetails"] = new List<InnerDetail>(); |
|
|
|
|
|
return (List<InnerDetail>)ViewState["innerDetails"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["innerDetails"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
DFBrowseGrid _browseGrid; |
|
|
|
|
|
private Label goodsNameShow, _difNumber, _adjustNumberLabel; |
|
|
|
|
|
DFBoolRadioBox adjustType; |
|
|
|
|
|
DFCheckBox avgAdjust; |
|
|
|
|
|
VLayoutPanel panel1, panel2; |
|
|
|
|
|
DFEditGrid _editGrid1, _editGrid2; |
|
|
|
|
|
bool byLine |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["byLine"] == null) |
|
|
|
|
|
return true; |
|
|
|
|
|
return (bool)ViewState["byLine"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["byLine"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form) |
|
|
|
|
|
{ |
|
|
|
|
|
base.InitForm(form); |
|
|
|
|
|
CreateQueryPanel(form.EAdd(new VLayoutPanel())); |
|
|
|
|
|
CreateBrowseGrid(form.EAdd(new TitlePanel("缺货存货明细"))); |
|
|
|
|
|
CreateEditGrid(form.EAdd(new TitlePanel("配货明细"))); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
decimal productNumber |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["productNumber"] == null) |
|
|
|
|
|
return 0; |
|
|
|
|
|
return (decimal)ViewState["productNumber"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["productNumber"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
private void CreateQueryPanel(VLayoutPanel panel) |
|
|
|
|
|
{ |
|
|
|
|
|
var manager = new LayoutManager("", _dFInfo, mQueryContainer); |
|
|
|
|
|
manager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部)); |
|
|
|
|
|
manager.Add("Store_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Store_ID"], B3FrameworksConsts.DataSources.授权仓库全部)); |
|
|
|
|
|
|
|
|
|
|
|
manager.Add("LoadTime", QueryCreator.TimeRange(_dFInfo.Fields["LoadTime"], mQueryContainer, "MinLoadTime", "MaxLoadTime")); |
|
|
|
|
|
var config = manager.CreateDefaultConfig(6); |
|
|
|
|
|
config.Expand = false; |
|
|
|
|
|
panel.Add(manager.CreateLayout(), new VLayoutOption(HorizontalAlign.Left)); |
|
|
|
|
|
panel.Add(new TSButton("查询缺货", delegate { StartQuery(); }), new VLayoutOption(HorizontalAlign.Left)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
string dateStr |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["dateStr"] == null) |
|
|
|
|
|
return string.Empty; |
|
|
|
|
|
return ViewState["dateStr"].ToString(); |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["dateStr"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void CreateBrowseGrid(TitlePanel titlePanel) |
|
|
|
|
|
{ |
|
|
|
|
|
_browseGrid = titlePanel.EAdd(new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) }); |
|
|
|
|
|
_browseGrid.Columns.Add(new DFBrowseGridAutoColumn("Goods_ID", "Store_ID")); |
|
|
|
|
|
_browseGrid.SingleSelection += (sender, e) => |
|
|
|
|
|
{ |
|
|
|
|
|
byLine = adjustType.Value.Value; |
|
|
|
|
|
var gid = (long)e.Row["Goods_ID"]; |
|
|
|
|
|
var sid = (long?)e.Row["Store_ID"]; |
|
|
|
|
|
goodsNameShow.Text = (string)e.Row["Name"]; |
|
|
|
|
|
_difNumber.Text = ((decimal)e.Row["差异数量"]).ToString("0.00"); |
|
|
|
|
|
_adjustNumberLabel.Text = ((decimal)e.Row["Number"]).ToString("0.00"); |
|
|
|
|
|
details.Clear(); |
|
|
|
|
|
innerDetails.Clear(); |
|
|
|
|
|
SaveCookie(""); |
|
|
|
|
|
productNumber = (decimal)e.Row["ProductNumber"]; |
|
|
|
|
|
var list = CreateDetails(gid, sid); |
|
|
|
|
|
foreach (var item in list.OrderByDescending(x => x.Number)) |
|
|
|
|
|
details.Add(item); |
|
|
|
|
|
_editGrid1.DataBind(); |
|
|
|
|
|
_editGrid2.DataBind(); |
|
|
|
|
|
panel1.Visible = byLine; |
|
|
|
|
|
panel2.Visible = !byLine; |
|
|
|
|
|
avgAdjust.Visible = byLine; |
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private List<SendOutStoreDetail> CreateDetails(long goodsID, long? storeID) |
|
|
|
|
|
{ |
|
|
|
|
|
if (byLine) |
|
|
|
|
|
return CreateDetailsByDriveLine(goodsID, storeID); |
|
|
|
|
|
return CreateDetailsByBill(goodsID, storeID); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private List<SendOutStoreDetail> CreateDetailsByBill(long goodsId, long? storeID) |
|
|
|
|
|
{ |
|
|
|
|
|
var query = mQueryContainer.Build(); |
|
|
|
|
|
var detail = JoinAlias.Create("detail"); |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("LoadTime")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Customer_Name")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Unit", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail)); |
|
|
|
|
|
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", 单据状态.未审核))); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "SaleGoods_ID", goodsId), DQCondition.EQ("Store_ID", storeID))); |
|
|
|
|
|
var list = new List<SendOutStoreDetail>(); |
|
|
|
|
|
using (var session = Dmo.NewSession()) |
|
|
|
|
|
{ |
|
|
|
|
|
using (var reader = session.ExecuteReader(query)) |
|
|
|
|
|
{ |
|
|
|
|
|
while (reader.Read()) |
|
|
|
|
|
{ |
|
|
|
|
|
var item = new SendOutStoreDetail(); |
|
|
|
|
|
item.Date = (DateTime?)reader[0]; |
|
|
|
|
|
item.ID = (long)reader[1]; |
|
|
|
|
|
item.CustomerName = (string)reader[2]; |
|
|
|
|
|
item.DetailID = (long)reader[3]; |
|
|
|
|
|
item.SecondUnit = (string)reader[4]; |
|
|
|
|
|
item.SecondNumber = (Money<decimal>?)reader[5]; |
|
|
|
|
|
item.Unit = (string)reader[6]; |
|
|
|
|
|
item.Number = (Money<decimal>?)reader[7]; |
|
|
|
|
|
item.SendNumber = item.Number.EToDecimal(); |
|
|
|
|
|
list.Add(item); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return list; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private List<SendOutStoreDetail> CreateDetailsByDriveLine(long goodsId, long? storeID) |
|
|
|
|
|
{ |
|
|
|
|
|
var query = mQueryContainer.Build(); |
|
|
|
|
|
var detail = JoinAlias.Create("detail"); |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_Name")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "SecondNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Unit", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum")); |
|
|
|
|
|
|
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("DeliverGoodsLine_ID")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("DeliverGoodsLine_Name")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_SecondUnit")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Unit")); |
|
|
|
|
|
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", 单据状态.未审核))); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "SaleGoods_ID", goodsId), DQCondition.EQ("Store_ID", storeID))); |
|
|
|
|
|
var list = new List<SendOutStoreDetail>(); |
|
|
|
|
|
using (var session = Dmo.NewSession()) |
|
|
|
|
|
{ |
|
|
|
|
|
using (var reader = session.ExecuteReader(query)) |
|
|
|
|
|
{ |
|
|
|
|
|
while (reader.Read()) |
|
|
|
|
|
{ |
|
|
|
|
|
var item = new SendOutStoreDetail(); |
|
|
|
|
|
item.DeliverGoodsLine_ID = (long?)reader[0]; |
|
|
|
|
|
item.DeliverGoodsLine_Name = (string)reader[1]; |
|
|
|
|
|
item.SecondUnit = (string)reader[2]; |
|
|
|
|
|
item.SecondNumber = (Money<decimal>?)reader[3]; |
|
|
|
|
|
item.Unit = (string)reader[4]; |
|
|
|
|
|
item.Number = (Money<decimal>?)reader[5]; |
|
|
|
|
|
item.SendNumber = item.Number.EToDecimal(); |
|
|
|
|
|
item.Goods_ID = goodsId; |
|
|
|
|
|
item.Store_ID = storeID; |
|
|
|
|
|
list.Add(item); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return list; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void StartQuery() |
|
|
|
|
|
{ |
|
|
|
|
|
_browseGrid.Query = GetQueryDom(); |
|
|
|
|
|
_browseGrid.DataBind(); |
|
|
|
|
|
_browseGrid.CurrentPageIndex = 0; |
|
|
|
|
|
if (details.Any()) |
|
|
|
|
|
{ |
|
|
|
|
|
SaveCookie(""); |
|
|
|
|
|
goodsNameShow.Text = ""; |
|
|
|
|
|
_difNumber.Text = ""; |
|
|
|
|
|
_adjustNumberLabel.Text = ""; |
|
|
|
|
|
details.Clear(); |
|
|
|
|
|
innerDetails.Clear(); |
|
|
|
|
|
_editGrid1.DataBind(); |
|
|
|
|
|
_editGrid2.DataBind(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private DQueryDom GetQueryDom() |
|
|
|
|
|
{ |
|
|
|
|
|
var temp = new JoinAlias(typeof(SaleOutStoreTemp)); |
|
|
|
|
|
var forecast = new JoinAlias(typeof(ForecastTemp)); |
|
|
|
|
|
var goods = new JoinAlias(typeof(Goods)); |
|
|
|
|
|
var store = new JoinAlias(typeof(Store)); |
|
|
|
|
|
var query = new DQueryDom(temp); |
|
|
|
|
|
query.RegisterQueryTable(typeof(SaleOutStoreTemp), new string[] { "Goods_ID", "Store_ID", "Number" }, SaleOutStoreTemp.GetQuery(mQueryContainer)); |
|
|
|
|
|
var v = string.Empty; |
|
|
|
|
|
query.RegisterQueryTable(typeof(ForecastTemp), new string[] { "Goods_ID", "ProductNumber" }, ForecastTemp.GetQuery(mQueryContainer, out v)); |
|
|
|
|
|
dateStr = v; |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(forecast), DQCondition.EQ(temp, "Goods_ID", forecast, "Goods_ID")); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(temp, "Goods_ID", goods, "ID")); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(store), DQCondition.EQ(temp, "Store_ID", store, "ID")); |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Goods_ID", temp)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Store_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Code", goods, "存货编码")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Name", goods, "存货名称")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Spec", goods, "规格")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(store, "Name"), "仓库")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("MainUnit", goods, "主单位")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Number")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ProductNumber", forecast, "预估产量")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.Field("Number"), DQExpression.Field(forecast, "ProductNumber")).ECastType<decimal>(), "差异数量")); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.GreaterThan(DQExpression.Field("Number"), DQExpression.Field(forecast, "ProductNumber"))); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void CreateEditGrid(TitlePanel titlePanel) |
|
|
|
|
|
{ |
|
|
|
|
|
adjustType = titlePanel.EAdd(new DFBoolRadioBox() { Value = true, TrueIsFirst = true, TrueDisplayValue = "按线路调整", FalseDisplayValue = "按客户调整" }); |
|
|
|
|
|
var hPanel = titlePanel.EAdd(new HLayoutPanel()); |
|
|
|
|
|
|
|
|
|
|
|
hPanel.Add(new LiteralControl(" ")); |
|
|
|
|
|
hPanel.Add(new Label() { Text = "存货:" }); |
|
|
|
|
|
goodsNameShow = hPanel.Add(new Label()); |
|
|
|
|
|
goodsNameShow.Font.Size = 12; |
|
|
|
|
|
goodsNameShow.Font.Bold = true; |
|
|
|
|
|
|
|
|
|
|
|
var label1 = new Label(); |
|
|
|
|
|
label1.Text = "差异数量:"; |
|
|
|
|
|
_difNumber = new Label(); |
|
|
|
|
|
_difNumber.ID = "difNumber"; |
|
|
|
|
|
_difNumber.Font.Size = 12; |
|
|
|
|
|
_difNumber.Font.Bold = true; |
|
|
|
|
|
|
|
|
|
|
|
var label2 = new Label(); |
|
|
|
|
|
label2.Text = "配货数量:"; |
|
|
|
|
|
_adjustNumberLabel = new Label(); |
|
|
|
|
|
_adjustNumberLabel.ID = "adjustNumberLabel"; |
|
|
|
|
|
_adjustNumberLabel.Font.Size = 12; |
|
|
|
|
|
_adjustNumberLabel.Font.Bold = true; |
|
|
|
|
|
|
|
|
|
|
|
hPanel.Add(new LiteralControl(" ")); |
|
|
|
|
|
hPanel.Add(label1); |
|
|
|
|
|
hPanel.Add(_difNumber); |
|
|
|
|
|
hPanel.Add(new LiteralControl(" ")); |
|
|
|
|
|
hPanel.Add(label2); |
|
|
|
|
|
hPanel.Add(_adjustNumberLabel); |
|
|
|
|
|
hPanel.Add(new LiteralControl(" ")); |
|
|
|
|
|
|
|
|
|
|
|
avgAdjust = hPanel.Add(new DFCheckBox() { Text = "平均分配" }); |
|
|
|
|
|
avgAdjust.Style.Add("margin", "0px 20px"); |
|
|
|
|
|
hPanel.Add(new TSButton("更新报价数量", delegate { AdjustSaleOutStore(); })); |
|
|
|
|
|
|
|
|
|
|
|
AddGrid1(titlePanel); |
|
|
|
|
|
AddGrid2(titlePanel); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void AddGrid1(TitlePanel titlePanel) |
|
|
|
|
|
{ |
|
|
|
|
|
panel1 = titlePanel.EAdd(new VLayoutPanel()); |
|
|
|
|
|
var editor = new DFCollectionEditor<SendOutStoreDetail>(() => details); |
|
|
|
|
|
|
|
|
|
|
|
_editGrid1 = panel1.Add(new DFEditGrid(editor) { Width = Unit.Percentage(100) }); |
|
|
|
|
|
_editGrid1.Columns.Add(new DFEditGridColumn("DeliverGoodsLine_Name")); |
|
|
|
|
|
_editGrid1.Columns.Add(new DFEditGridColumn("SecondUnit")); |
|
|
|
|
|
_editGrid1.Columns.Add(new DFEditGridColumn("SecondNumber")); |
|
|
|
|
|
_editGrid1.Columns.Add(new DFEditGridColumn("Unit")); |
|
|
|
|
|
_editGrid1.Columns.Add(new DFEditGridColumn("Number")); |
|
|
|
|
|
_editGrid1.Columns.EAdd(new DFGridCustomExtColumn((obj, cell, rowIndex) => |
|
|
|
|
|
{ |
|
|
|
|
|
var detail = (SendOutStoreDetail)obj; |
|
|
|
|
|
var dgBtn = new DialogButton() { Width = Unit.Pixel(120) }; |
|
|
|
|
|
dgBtn.Text = string.Format("{0:#0.##}", detail.SendNumber); |
|
|
|
|
|
var url = string.Format("~/../B3ButcherManageToSale/Overlays/CustomerAdjust.aspx?lineID={0}&goodsID={1}&storeID={2}&{3}", detail.DeliverGoodsLine_ID, detail.Goods_ID, detail.Store_ID, dateStr); |
|
|
|
|
|
dgBtn.Enabled = detail.DeliverGoodsLine_ID.HasValue; |
|
|
|
|
|
dgBtn.Url = WpfPageUrl.ToGlobal(url); |
|
|
|
|
|
dgBtn.Click += delegate |
|
|
|
|
|
{ |
|
|
|
|
|
var back = DialogUtil.GetCachedObj<InnerDetail>(this); |
|
|
|
|
|
var tags = innerDetails.Where(x => x.DeliverGoodsLine_ID == detail.DeliverGoodsLine_ID).ToList(); |
|
|
|
|
|
foreach (var item in tags) |
|
|
|
|
|
innerDetails.Remove(item); |
|
|
|
|
|
innerDetails.AddRange(back); |
|
|
|
|
|
var d = details.First(x => x.DeliverGoodsLine_ID == detail.DeliverGoodsLine_ID); |
|
|
|
|
|
d.SendNumber = back.Sum(x => (x.SendNumber ?? 0)); |
|
|
|
|
|
d.AdjustNumber = d.Number - d.SendNumber; |
|
|
|
|
|
var adNumber = details.Sum(x => (x.SendNumber ?? 0)); |
|
|
|
|
|
_adjustNumberLabel.Text = adNumber.ToString("0.00"); |
|
|
|
|
|
_difNumber.Text = (adNumber - productNumber).ToString("0.00"); |
|
|
|
|
|
_editGrid1.DataBind(); |
|
|
|
|
|
SaveCookie(JsonConvert.SerializeObject(innerDetails)); |
|
|
|
|
|
}; |
|
|
|
|
|
cell.Controls.Add(dgBtn); |
|
|
|
|
|
cell.Align = "center"; |
|
|
|
|
|
})).HeaderText = "配货数量"; |
|
|
|
|
|
_editGrid1.Columns.Add(new DFEditGridColumn("AdjustNumber")); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void SaveCookie(string value) |
|
|
|
|
|
{ |
|
|
|
|
|
HttpCookie cookie = new HttpCookie("innerDetails", value); |
|
|
|
|
|
cookie.Expires = DateTime.Now.AddHours(2); |
|
|
|
|
|
Response.Cookies.Add(cookie); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void AddGrid2(TitlePanel titlePanel) |
|
|
|
|
|
{ |
|
|
|
|
|
panel2 = titlePanel.EAdd(new VLayoutPanel()); |
|
|
|
|
|
var editor = new DFCollectionEditor<SendOutStoreDetail>(() => details); |
|
|
|
|
|
editor.IsEditableFunc = (field, detail) => { return field.Name == "SendNumber"; }; |
|
|
|
|
|
|
|
|
|
|
|
_editGrid2 = panel2.Add(new DFEditGrid(editor) { Width = Unit.Percentage(100) }); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("Date")); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("ID")); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("CustomerName")); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("SecondUnit")); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("SecondNumber")); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("Unit")); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("Number")); |
|
|
|
|
|
|
|
|
|
|
|
var col = new DFEditGridColumn<DFTextBox>("SendNumber"); |
|
|
|
|
|
col.InitEditControl += (sender, e) => |
|
|
|
|
|
{ |
|
|
|
|
|
e.Control.Attributes["onchange"] = "_SumNumber();"; |
|
|
|
|
|
}; |
|
|
|
|
|
_editGrid2.Columns.Add(col); |
|
|
|
|
|
_editGrid2.Columns.Add(new DFEditGridColumn("AdjustNumber")); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void AdjustSaleOutStore() |
|
|
|
|
|
{ |
|
|
|
|
|
if (byLine) |
|
|
|
|
|
{ |
|
|
|
|
|
if (avgAdjust.Checked) |
|
|
|
|
|
{ |
|
|
|
|
|
innerDetails.Clear(); |
|
|
|
|
|
AvgAdjust(); |
|
|
|
|
|
} |
|
|
|
|
|
Adjust(innerDetails.Where(x => x.Number != (x.SendNumber ?? 0))); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
_editGrid2.GetFromUI(); |
|
|
|
|
|
Adjust(details.Where(x => x.Number != (x.SendNumber ?? 0))); |
|
|
|
|
|
} |
|
|
|
|
|
AspUtil.Alert(this, "更新完毕"); |
|
|
|
|
|
StartQuery(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void AvgAdjust() |
|
|
|
|
|
{ |
|
|
|
|
|
var total = details.Sum(x => (x.Number ?? 0).Value); |
|
|
|
|
|
if (total == 0) |
|
|
|
|
|
return; |
|
|
|
|
|
var avg = productNumber / total; |
|
|
|
|
|
var f = details.First(); |
|
|
|
|
|
var list = CreateDetailsByBill(f.Goods_ID, f.Store_ID); |
|
|
|
|
|
foreach (var item in list) |
|
|
|
|
|
{ |
|
|
|
|
|
var entity = new InnerDetail(); |
|
|
|
|
|
entity.ID = item.ID; |
|
|
|
|
|
entity.DetailID = item.DetailID; |
|
|
|
|
|
entity.Number = item.Number.EToDecimal(); |
|
|
|
|
|
entity.SendNumber = entity.Number * avg; |
|
|
|
|
|
innerDetails.Add(entity); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Adjust<T>(IEnumerable<T> list) |
|
|
|
|
|
where T : CanAdjust |
|
|
|
|
|
{ |
|
|
|
|
|
using (var session = Dmo.NewSession()) |
|
|
|
|
|
{ |
|
|
|
|
|
var bl = BIFactory.Create<ISaleOutStoreBL>(session); |
|
|
|
|
|
foreach (var dmoGroupby in list.GroupBy(x => x.ID)) |
|
|
|
|
|
{ |
|
|
|
|
|
var entity = bl.Load(dmoGroupby.Key); |
|
|
|
|
|
//此时销售出库单据可能已经审核--- 已审核的单据不修改 详见错误单46102
|
|
|
|
|
|
if (entity.BillState == 单据状态.已审核) |
|
|
|
|
|
{ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var updateDetail = entity.Details.Where(x => dmoGroupby.Any(y => y.DetailID == x.ID)); |
|
|
|
|
|
foreach (var d in updateDetail) |
|
|
|
|
|
{ |
|
|
|
|
|
var first = dmoGroupby.First(x => x.DetailID == d.ID); |
|
|
|
|
|
d.UnitNum = first.SendNumber; |
|
|
|
|
|
} |
|
|
|
|
|
bl.Update(entity); |
|
|
|
|
|
} |
|
|
|
|
|
session.Commit(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected override void OnPreRender(EventArgs e) |
|
|
|
|
|
{ |
|
|
|
|
|
base.OnPreRender(e); |
|
|
|
|
|
|
|
|
|
|
|
var pageIndex = _editGrid1.CurrentPageIndex; |
|
|
|
|
|
var size = _editGrid1.PageSize; |
|
|
|
|
|
var index = 0; |
|
|
|
|
|
Money<decimal> unitNum = 0; |
|
|
|
|
|
|
|
|
|
|
|
foreach (var detail in details) |
|
|
|
|
|
{ |
|
|
|
|
|
var begin = size * pageIndex; |
|
|
|
|
|
var end = Math.Min(details.Count, (pageIndex + 1) * size); |
|
|
|
|
|
if (index < begin || index > end - 1) |
|
|
|
|
|
{ |
|
|
|
|
|
unitNum += (detail.SendNumber ?? 0); |
|
|
|
|
|
} |
|
|
|
|
|
index++; |
|
|
|
|
|
} |
|
|
|
|
|
var s = string.Format(@"<script language=javascript>
|
|
|
|
|
|
var sumUnitNumOtherPage = {0}; |
|
|
|
|
|
</script>", unitNum);
|
|
|
|
|
|
Page.ClientScript.RegisterClientScriptBlock(GetType(), "OtherPageNumber", s, false); |
|
|
|
|
|
|
|
|
|
|
|
string script = @"var defaultGrid=document.all." + _editGrid1.ClientID + @";
|
|
|
|
|
|
function _SumNumber() |
|
|
|
|
|
{ |
|
|
|
|
|
var grid = defaultGrid.behind; |
|
|
|
|
|
|
|
|
|
|
|
var itemEndIndex = grid.mItemEndIndex - 1; |
|
|
|
|
|
var sumN = sumUnitNumOtherPage; |
|
|
|
|
|
|
|
|
|
|
|
for (i = 1; i <= itemEndIndex; i++) { |
|
|
|
|
|
var row = grid.front.rows[i]; |
|
|
|
|
|
|
|
|
|
|
|
var m = row.dfContainer.getValue('SendNumber'); |
|
|
|
|
|
var rownumber=row.dfContainer.getValue('Number'); |
|
|
|
|
|
row.dfContainer.setValue('AdjustNumber',(rownumber-m).toFixed(2)); |
|
|
|
|
|
|
|
|
|
|
|
if (m != null && m != '') { |
|
|
|
|
|
sumN = sumN + 1 * m; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
var label = document.getElementById('{adjustNumberLabel}') |
|
|
|
|
|
label.innerText = sumN.toFixed(2); |
|
|
|
|
|
if( sumN > {thisNumber}){ |
|
|
|
|
|
label.style.color = 'red'; |
|
|
|
|
|
} else { |
|
|
|
|
|
label.style.color = 'black'; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var labelDiffNumber = document.getElementById('{difNumber}') |
|
|
|
|
|
labelDiffNumber.innerText = (sumN-{thisNumber}).toFixed(2); |
|
|
|
|
|
|
|
|
|
|
|
} ";
|
|
|
|
|
|
script = script.Replace("{thisNumber}", productNumber.ToString()); |
|
|
|
|
|
script = script.Replace("{adjustNumberLabel}", _adjustNumberLabel.ClientID); |
|
|
|
|
|
script = script.Replace("{difNumber}", _difNumber.ClientID); |
|
|
|
|
|
Page.ClientScript.RegisterStartupScript(GetType(), "Startup", script, true); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[DFClass] |
|
|
|
|
|
class SaleOutStoreTemp |
|
|
|
|
|
{ |
|
|
|
|
|
public long Goods_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long? Store_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("订货数量")] |
|
|
|
|
|
public decimal? Number { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public static DQueryDom GetQuery(QueryContainer mQueryContainer) |
|
|
|
|
|
{ |
|
|
|
|
|
var query = mQueryContainer.Build(); |
|
|
|
|
|
var detail = JoinAlias.Create("detail"); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Store_ID")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "SaleGoods_ID")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("Store_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum")); |
|
|
|
|
|
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", 单据状态.未审核), DQCondition.GreaterThan(detail, "UnitNum", 0))); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[DFClass] |
|
|
|
|
|
class ForecastTemp |
|
|
|
|
|
{ |
|
|
|
|
|
public long Goods_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public decimal? ProductNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public static DQueryDom GetQuery(QueryContainer mQueryContainer, out string dateStr) |
|
|
|
|
|
{ |
|
|
|
|
|
dateStr = string.Empty; |
|
|
|
|
|
var main = new JoinAlias(typeof(ButcherForecast)); |
|
|
|
|
|
var detail = new JoinAlias(typeof(ButcherForecast_Detail)); |
|
|
|
|
|
var query = new DQueryDom(main); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ButcherForecast_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail)); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "ProductNumber")); |
|
|
|
|
|
|
|
|
|
|
|
var min = mQueryContainer.GetControl<DFDateTimeInput>("MinLoadTime").Value; |
|
|
|
|
|
if (min.HasValue) |
|
|
|
|
|
{ |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("SendDate", min)); |
|
|
|
|
|
dateStr = string.Format("minDate={0:yyyy/MM/dd HH:mm:ss}&", min.Value); |
|
|
|
|
|
} |
|
|
|
|
|
var max = mQueryContainer.GetControl<DFDateTimeInput>("MaxLoadTime").Value; |
|
|
|
|
|
if (max.HasValue) |
|
|
|
|
|
{ |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.LessThanOrEqual("SendDate", max)); |
|
|
|
|
|
dateStr += string.Format("maxDate={0:yyyy/MM/dd HH:mm:ss}&", max.Value); |
|
|
|
|
|
} |
|
|
|
|
|
dateStr = dateStr.TrimEnd('&'); |
|
|
|
|
|
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", 单据状态.未审核), DQCondition.GreaterThan(detail, "ProductNumber", 0))); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[DFClass, Serializable] |
|
|
|
|
|
class SendOutStoreDetail : CanAdjust |
|
|
|
|
|
{ |
|
|
|
|
|
[LogicName("日期")] |
|
|
|
|
|
public DateTime? Date { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("单号")] |
|
|
|
|
|
public long ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("客户")] |
|
|
|
|
|
public string CustomerName { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long? DeliverGoodsLine_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("送货线路")] |
|
|
|
|
|
public string DeliverGoodsLine_Name { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("辅单位")] |
|
|
|
|
|
public string SecondUnit { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("辅数量")] |
|
|
|
|
|
public Money<decimal>? SecondNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("报价单位")] |
|
|
|
|
|
public string Unit { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("报价数量")] |
|
|
|
|
|
public Money<decimal>? Number { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("配货数量")] |
|
|
|
|
|
public decimal? SendNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("调整数量")] |
|
|
|
|
|
public Money<decimal>? AdjustNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long DetailID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long Goods_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long? Store_ID { get; set; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[DFClass, Serializable] |
|
|
|
|
|
class InnerDetail : CanAdjust |
|
|
|
|
|
{ |
|
|
|
|
|
public long? DeliverGoodsLine_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("单号")] |
|
|
|
|
|
public long ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long DetailID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("客户")] |
|
|
|
|
|
public string CustomerName { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("报价数量")] |
|
|
|
|
|
public decimal? Number { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
[LogicName("配货数量")] |
|
|
|
|
|
public decimal? SendNumber { get; set; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
interface CanAdjust |
|
|
|
|
|
{ |
|
|
|
|
|
long ID { get; set; } |
|
|
|
|
|
long DetailID { get; set; } |
|
|
|
|
|
decimal? SendNumber { get; set; } |
|
|
|
|
|
} |
|
|
|
|
|
} |