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;
|
|
using TSingSoft.WebControls2.DFGrids;
|
|
using TSingSoft.WebPluginFramework.Controls;
|
|
using TSingSoft.WebPluginFramework.Exports;
|
|
|
|
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, panel11, panel2;
|
|
DFEditGrid _editGrid1, _editGrid11, _editGrid2;
|
|
bool byLine
|
|
{
|
|
get
|
|
{
|
|
if (ViewState["byLine"] == null)
|
|
return true;
|
|
return (bool)ViewState["byLine"];
|
|
}
|
|
set { ViewState["byLine"] = value; }
|
|
}
|
|
|
|
TitlePanel v2Panel;
|
|
protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form)
|
|
{
|
|
base.InitForm(form);
|
|
CreateQueryPanel(form.EAdd(new VLayoutPanel()));
|
|
CreateBrowseGrid(form.EAdd(new TitlePanel("缺货存货明细")));
|
|
v2Panel = form.EAdd(new TitlePanel("配货明细"));
|
|
CreateEditGrid(v2Panel);
|
|
}
|
|
|
|
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", DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 59)));
|
|
var config = manager.CreateDefaultConfig(6);
|
|
config.Expand = false;
|
|
panel.Add(manager.CreateLayout(), new VLayoutOption(HorizontalAlign.Left));
|
|
var hPanel = panel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Left));
|
|
hPanel.Add(new TSButton("查询缺货", delegate
|
|
{
|
|
StartQuery(false);
|
|
if (!v2Panel.Visible)
|
|
v2Panel.Visible = true;
|
|
}));
|
|
hPanel.Add(new TSButton("查询余货", delegate
|
|
{
|
|
StartQuery(true);
|
|
if (v2Panel.Visible)
|
|
v2Panel.Visible = false;
|
|
}));
|
|
}
|
|
|
|
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();
|
|
_editGrid11.DataBind();
|
|
_editGrid2.DataBind();
|
|
panel1.Visible = byLine && !avgAdjust.Checked;
|
|
panel11.Visible = byLine && avgAdjust.Checked;
|
|
panel2.Visible = !byLine;
|
|
avgAdjust.Visible = byLine;
|
|
};
|
|
var hPanel = titlePanel.EAdd(new HLayoutPanel());
|
|
AddExcelExportPanel(hPanel, _browseGrid, string.Format("均衡计划导出{0:yyyyMMdd}", DateTime.Today));
|
|
}
|
|
|
|
static void AddExcelExportPanel(HLayoutPanel toolbar, DFBrowseGrid mBrowseGrid, string title)
|
|
{
|
|
var exporter = new Exporter();
|
|
toolbar.Add(new TSButton("导出到Excel", delegate
|
|
{
|
|
var lastQuery = mBrowseGrid.LastQuery;
|
|
if (lastQuery == null)
|
|
throw new Exception("请先进行查询");
|
|
var dom = new LoadArguments((DQueryDom)lastQuery.DQuery.Clone());
|
|
foreach (var colIndex in lastQuery.SumColumns)
|
|
dom.SumColumns.Add(colIndex);
|
|
foreach (var colIndex in lastQuery.GroupSumColumns)
|
|
dom.GroupSumColumns.Add(colIndex);
|
|
dom.DQuery.Range = SelectRange.All;
|
|
string fileName = title + ".xlsx";
|
|
exporter.Export(new QueryResultExcelExporter(fileName, GetQueryResult(dom)));
|
|
}));
|
|
toolbar.Add(exporter);
|
|
}
|
|
|
|
private static QueryResult GetQueryResult(LoadArguments arg)
|
|
{
|
|
var data = new DFDataTableEditor().Load(arg);
|
|
return new QueryResult(data.TotalCount, data.Data.Rows, data.Data.Columns, arg.SumColumns.Any() ? data.Data.SumRow : null);
|
|
}
|
|
|
|
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.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_ID"));
|
|
|
|
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();
|
|
item.DeliverGoodsLine_ID = (long?)reader[8];
|
|
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(bool moreThan)
|
|
{
|
|
_browseGrid.Query = GetQueryDom(moreThan);
|
|
_browseGrid.DataBind();
|
|
_browseGrid.CurrentPageIndex = 0;
|
|
if (details.Any())
|
|
{
|
|
SaveCookie("");
|
|
goodsNameShow.Text = "";
|
|
_difNumber.Text = "";
|
|
_adjustNumberLabel.Text = "";
|
|
details.Clear();
|
|
innerDetails.Clear();
|
|
_editGrid1.DataBind();
|
|
_editGrid11.DataBind();
|
|
_editGrid2.DataBind();
|
|
}
|
|
}
|
|
|
|
private DQueryDom GetQueryDom(bool moreThan)
|
|
{
|
|
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>(), "差异数量"));
|
|
if (moreThan)
|
|
query.Where.Conditions.Add(DQCondition.GreaterThan(DQExpression.Field(forecast, "ProductNumber"), DQExpression.Field("Number")));
|
|
else
|
|
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");
|
|
avgAdjust.AutoPostBack = true;
|
|
avgAdjust.CheckedChanged += delegate
|
|
{
|
|
panel1.Visible = !avgAdjust.Checked;
|
|
panel11.Visible = !panel1.Visible;
|
|
_editGrid1.DataBind();
|
|
_editGrid11.DataBind();
|
|
};
|
|
hPanel.Add(new TSButton("更新报价数量", delegate { AdjustSaleOutStore(); }));
|
|
|
|
AddGrid1(titlePanel);
|
|
AddGrid11(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 AddGrid11(TitlePanel titlePanel)
|
|
{
|
|
panel11 = titlePanel.EAdd(new VLayoutPanel());
|
|
var editor = new DFCollectionEditor<SendOutStoreDetail>(() => details);
|
|
editor.IsEditableFunc = (field, detail) => { return field.Name == "SendNumber"; };
|
|
|
|
_editGrid11 = panel11.Add(new DFEditGrid(editor) { Width = Unit.Percentage(100) });
|
|
_editGrid11.ID = "_gridUp";
|
|
_editGrid11.ClientIDMode = ClientIDMode.Static;
|
|
_editGrid11.Columns.Add(new DFEditGridColumn("DeliverGoodsLine_Name"));
|
|
_editGrid11.Columns.Add(new DFEditGridColumn("SecondUnit"));
|
|
_editGrid11.Columns.Add(new DFEditGridColumn("SecondNumber"));
|
|
_editGrid11.Columns.Add(new DFEditGridColumn("Unit"));
|
|
_editGrid11.Columns.Add(new DFEditGridColumn("Number"));
|
|
var col = new DFEditGridColumn<DFTextBox>("SendNumber");
|
|
col.InitEditControl += (sender, e) =>
|
|
{
|
|
e.Control.Attributes["onchange"] = "_SumNumberUp();";
|
|
};
|
|
_editGrid11.Columns.Add(col);
|
|
_editGrid11.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.ID = "_gird2";
|
|
_editGrid2.ClientIDMode = ClientIDMode.Static;
|
|
_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)
|
|
{
|
|
_editGrid11.GetFromUI();
|
|
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(false);
|
|
}
|
|
|
|
void AvgAdjust()
|
|
{
|
|
var f = details.FirstOrDefault();
|
|
if (f == null)
|
|
return;
|
|
var list = CreateDetailsByBill(f.Goods_ID, f.Store_ID);
|
|
foreach (var item in details)
|
|
{
|
|
if (item.Number == 0)
|
|
continue;
|
|
if ((item.SendNumber ?? 0) == item.Number.Value)
|
|
continue;
|
|
var avg = item.SendNumber / item.Number;
|
|
var tag = list.Where(x => x.DeliverGoodsLine_ID == item.DeliverGoodsLine_ID);
|
|
var lastNum = (item.SendNumber ?? 0);
|
|
bool exist = false;
|
|
foreach (var t in tag)
|
|
{
|
|
var entity = new InnerDetail();
|
|
entity.ID = t.ID;
|
|
entity.DetailID = t.DetailID;
|
|
entity.Number = t.Number.EToDecimal();
|
|
entity.SendNumber = entity.Number * avg;
|
|
if (entity.SendNumber.HasValue)
|
|
{
|
|
entity.SendNumber = decimal.Floor(entity.SendNumber.Value);
|
|
lastNum -= entity.SendNumber.Value;
|
|
}
|
|
innerDetails.Add(entity);
|
|
if (!exist)
|
|
exist = true;
|
|
}
|
|
if (lastNum != 0 && exist)
|
|
innerDetails.Last().SendNumber += lastNum;
|
|
}
|
|
}
|
|
|
|
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 = _editGrid2.CurrentPageIndex;
|
|
var size = _editGrid2.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._gird2;" + @";
|
|
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);
|
|
|
|
|
|
var pageIndex11 = _editGrid11.CurrentPageIndex;
|
|
var size11 = _editGrid11.PageSize;
|
|
var index11 = 0;
|
|
Money<decimal> unitNum11 = 0;
|
|
|
|
foreach (var detail in details)
|
|
{
|
|
var begin = size11 * pageIndex11;
|
|
var end = Math.Min(details.Count, (pageIndex11 + 1) * size11);
|
|
if (index11 < begin || index11 > end - 1)
|
|
{
|
|
unitNum11 += (detail.SendNumber ?? 0);
|
|
}
|
|
index11++;
|
|
}
|
|
var s11 = string.Format(@"<script language=javascript>
|
|
var sumUnitNumOtherPage11 = {0};
|
|
</script>", unitNum11);
|
|
Page.ClientScript.RegisterClientScriptBlock(GetType(), "OtherPageNumber11", s11, false);
|
|
|
|
string script11 = @"var defaultGrid11=document.all._gridUp;" + @";
|
|
function _SumNumberUp()
|
|
{
|
|
var grid = defaultGrid11.behind;
|
|
|
|
var itemEndIndex = grid.mItemEndIndex - 1;
|
|
var sumN = sumUnitNumOtherPage11;
|
|
|
|
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);
|
|
|
|
} ";
|
|
script11 = script11.Replace("{thisNumber}", productNumber.ToString());
|
|
script11 = script11.Replace("{adjustNumberLabel}", _adjustNumberLabel.ClientID);
|
|
script11 = script11.Replace("{difNumber}", _difNumber.ClientID);
|
|
Page.ClientScript.RegisterStartupScript(GetType(), "Startup11", script11, 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; }
|
|
}
|
|
}
|