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.
 

824 lines
30 KiB

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("&nbsp;&nbsp;"));
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("&nbsp;&nbsp;"));
hPanel.Add(label1);
hPanel.Add(_difNumber);
hPanel.Add(new LiteralControl("&nbsp;&nbsp;"));
hPanel.Add(label2);
hPanel.Add(_adjustNumberLabel);
hPanel.Add(new LiteralControl("&nbsp;&nbsp;"));
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; }
}
}