|
|
@ -1,18 +1,27 @@ |
|
|
using BWP.B3Frameworks; |
|
|
|
|
|
|
|
|
using BWP.B3ButcherManage.BO; |
|
|
|
|
|
using BWP.B3Frameworks; |
|
|
|
|
|
using BWP.B3Frameworks.BO; |
|
|
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate; |
|
|
using BWP.B3Frameworks.Utils; |
|
|
using BWP.B3Frameworks.Utils; |
|
|
using BWP.B3Sale.BO; |
|
|
using BWP.B3Sale.BO; |
|
|
|
|
|
using BWP.B3UnitedInfos.BO; |
|
|
using BWP.Web.Layout; |
|
|
using BWP.Web.Layout; |
|
|
using BWP.Web.Utils; |
|
|
using BWP.Web.Utils; |
|
|
using BWP.Web.WebControls; |
|
|
using BWP.Web.WebControls; |
|
|
using Forks.EnterpriseServices.DataForm; |
|
|
using Forks.EnterpriseServices.DataForm; |
|
|
|
|
|
using Forks.EnterpriseServices.DomainObjects2; |
|
|
using Forks.EnterpriseServices.DomainObjects2.DQuery; |
|
|
using Forks.EnterpriseServices.DomainObjects2.DQuery; |
|
|
using Forks.EnterpriseServices.SqlDoms; |
|
|
using Forks.EnterpriseServices.SqlDoms; |
|
|
|
|
|
using Forks.Utils; |
|
|
using System; |
|
|
using System; |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
using System.Linq; |
|
|
using System.Linq; |
|
|
using System.Text; |
|
|
using System.Text; |
|
|
|
|
|
using System.Web; |
|
|
|
|
|
using System.Web.UI.HtmlControls; |
|
|
using System.Web.UI.WebControls; |
|
|
using System.Web.UI.WebControls; |
|
|
using TSingSoft.WebControls2; |
|
|
using TSingSoft.WebControls2; |
|
|
|
|
|
using TSingSoft.WebPluginFramework; |
|
|
|
|
|
|
|
|
namespace BWP.Web.Pages.B3ButcherManageToSale.Overlays |
|
|
namespace BWP.Web.Pages.B3ButcherManageToSale.Overlays |
|
|
{ |
|
|
{ |
|
|
@ -28,44 +37,196 @@ namespace BWP.Web.Pages.B3ButcherManageToSale.Overlays |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
DFBrowseGrid _browseGrid; |
|
|
DFBrowseGrid _browseGrid; |
|
|
|
|
|
string rootPath = "~/B3ButcherManageToSale/Overlays/"; |
|
|
protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form) |
|
|
protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form) |
|
|
{ |
|
|
{ |
|
|
base.InitForm(form); |
|
|
base.InitForm(form); |
|
|
CreateQueryPanel(form.EAdd(new VLayoutPanel())); |
|
|
CreateQueryPanel(form.EAdd(new VLayoutPanel())); |
|
|
CreateResultPanel(form.EAdd(new TitlePanel("查询结果"))); |
|
|
CreateResultPanel(form.EAdd(new TitlePanel("查询结果"))); |
|
|
|
|
|
_browseGrid.OnDetailDataBound = (tr, obj, index) => |
|
|
|
|
|
{ |
|
|
|
|
|
var row = obj as DFDataRow; |
|
|
|
|
|
var gid = string.Format("{0}", row["ID"]); |
|
|
|
|
|
|
|
|
|
|
|
var url = BuildUrl("OrderInfo.aspx", gid); |
|
|
|
|
|
SetCellAtt(tr.Cells[1], url, "订货明细"); |
|
|
|
|
|
|
|
|
|
|
|
url = rootPath + "StoreDetailPage.aspx"; |
|
|
|
|
|
url = AspUtil.AddParamToUrl(url, "ID", gid); |
|
|
|
|
|
SetCellAtt(tr.Cells[3], WpfPageUrl.ToGlobal(url), "库存明细"); |
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
string BuildUrl(string url, string pawsID) |
|
|
|
|
|
{ |
|
|
|
|
|
url = rootPath + url; |
|
|
|
|
|
url = AspUtil.AddParamToUrl(url, "AccountingUnitID", mQueryContainer.GetControl<DFChoiceBox>("AccountingUnit_ID").Value); |
|
|
|
|
|
url = AspUtil.AddParamToUrl(url, "DepartmentID", mQueryContainer.GetControl<DFChoiceBox>("Department_ID").Value); |
|
|
|
|
|
url = AspUtil.AddParamToUrl(url, "Date", HttpUtility.UrlEncode(mQueryContainer.GetControl<DFDateInput>("LoadTime").Date.ToString("yyyy/MM/dd"))); |
|
|
|
|
|
url = AspUtil.AddParamToUrl(url, "ID", pawsID); |
|
|
|
|
|
return WpfPageUrl.ToGlobal(url); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void SetCellAtt(HtmlTableCell cell, string url, string title) |
|
|
|
|
|
{ |
|
|
|
|
|
cell.Attributes["onclick"] = "OpenUrlInTopTab('" + url + "','" + title + "');"; |
|
|
|
|
|
cell.Style.Add("color", "blue"); |
|
|
|
|
|
cell.Style.Add("text-decoration", "underline"); |
|
|
|
|
|
cell.Style.Add("cursor", "pointer"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TSButton createBt; |
|
|
private void CreateQueryPanel(VLayoutPanel panel) |
|
|
private void CreateQueryPanel(VLayoutPanel panel) |
|
|
{ |
|
|
{ |
|
|
var manager = new LayoutManager("", _dFInfo, mQueryContainer); |
|
|
var manager = new LayoutManager("", _dFInfo, mQueryContainer); |
|
|
manager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部)); |
|
|
manager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部)); |
|
|
manager.Add("Department_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Department_ID"], B3FrameworksConsts.DataSources.授权部门全部)); |
|
|
manager.Add("Department_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Department_ID"], B3FrameworksConsts.DataSources.授权部门全部)); |
|
|
|
|
|
|
|
|
manager.Add("LoadTime", QueryCreator.TimeRange(_dFInfo.Fields["LoadTime"], mQueryContainer, "MinLoadTime", "MaxLoadTime", DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 59))); |
|
|
|
|
|
|
|
|
var d = manager.Add("LoadTime", new DFDateInput(_dFInfo.Fields["LoadTime"])); |
|
|
|
|
|
d.Date = DateTime.Today; |
|
|
var config = manager.CreateDefaultConfig(6); |
|
|
var config = manager.CreateDefaultConfig(6); |
|
|
config.Expand = false; |
|
|
config.Expand = false; |
|
|
panel.Add(manager.CreateLayout()); |
|
|
|
|
|
|
|
|
panel.Add(manager.CreateLayout(), new VLayoutOption(HorizontalAlign.Left)); |
|
|
var hPanel = panel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Left)); |
|
|
var hPanel = panel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Left)); |
|
|
hPanel.Add(new TSButton("查询", delegate |
|
|
hPanel.Add(new TSButton("查询", delegate |
|
|
{ |
|
|
{ |
|
|
StartQuery(); |
|
|
StartQuery(); |
|
|
|
|
|
if (!createBt.Enabled) |
|
|
|
|
|
createBt.Enabled = true; |
|
|
})); |
|
|
})); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void CreateResultPanel(TitlePanel titlePanel) |
|
|
private void CreateResultPanel(TitlePanel titlePanel) |
|
|
{ |
|
|
{ |
|
|
_browseGrid = new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) }; |
|
|
|
|
|
_browseGrid.Columns.Add(new DFBrowseGridAutoColumn()); |
|
|
|
|
|
|
|
|
_browseGrid = titlePanel.EAdd(new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) }); |
|
|
|
|
|
_browseGrid.Columns.Add(new DFBrowseGridAutoColumn("ID")); |
|
|
|
|
|
createBt = titlePanel.EAdd(new TSButton("创建缺货/剩货单", delegate { }) { Enabled = false }); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void StartQuery() |
|
|
private void StartQuery() |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
_browseGrid.Query = GetQueryDom(); |
|
|
|
|
|
_browseGrid.DataBind(); |
|
|
|
|
|
_browseGrid.CurrentPageIndex = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
DQueryDom GetQueryDom() |
|
|
DQueryDom GetQueryDom() |
|
|
{ |
|
|
{ |
|
|
return null; |
|
|
|
|
|
|
|
|
var dateInput = mQueryContainer.GetControl<DFDateInput>("LoadTime"); |
|
|
|
|
|
if (dateInput.IsEmpty) |
|
|
|
|
|
throw new Exception("请选择发货日期"); |
|
|
|
|
|
var alias = new JoinAlias(typeof(UnionTemp)); |
|
|
|
|
|
var paws = new JoinAlias("_paws2", typeof(ProductAvgWeightSet)); |
|
|
|
|
|
var query = new DQueryDom(alias); |
|
|
|
|
|
UnionTemp.Register(query, mQueryContainer, dateInput.Date); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(paws), DQCondition.EQ(alias, "ProductAvgWeightSet_ID", paws, "ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID", paws)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Name", paws, "品项")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("OrderNumber")), "订货数量")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("ProductNumber")), "预计产量")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("StoreNumber")), "库存数量")); |
|
|
|
|
|
|
|
|
|
|
|
var col = DQExpression.Sum(DQExpression.Subtract(DQExpression.Add(DQExpression.IfNull(DQExpression.Field("ProductNumber"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field("StoreNumber"), DQExpression.Value(0))), DQExpression.IfNull(DQExpression.Field("OrderNumber"), DQExpression.Value(0)))); |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.LessThan(col, DQExpression.Value(0)), DQExpression.Subtract(DQExpression.Value(0), col), DQExpression.NULL).ECastType<Money<decimal>?>(), "缺货数量")); |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.GreaterThan(col, DQExpression.Value(0)), col, DQExpression.NULL).ECastType<Money<decimal>?>(), "剩余数量")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(paws, "ID")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(paws, "Name")); |
|
|
|
|
|
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(paws, "ID")); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class ProductAvgWeightSetTemp |
|
|
|
|
|
{ |
|
|
|
|
|
public long Goods_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long ProductAvgWeightSet_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public static void Register(DQueryDom root) |
|
|
|
|
|
{ |
|
|
|
|
|
var main = new JoinAlias("_paws1", typeof(ProductAvgWeightSet)); |
|
|
|
|
|
var detail = new JoinAlias(typeof(ProductAvgWeightSet_Detail)); |
|
|
|
|
|
var query = new DQueryDom(main); |
|
|
|
|
|
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ProductAvgWeightSet_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID", main)); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false))); |
|
|
|
|
|
root.RegisterQueryTable(typeof(ProductAvgWeightSetTemp), new string[] { "Goods_ID", "ProductAvgWeightSet_ID" }, query); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class UnionTemp |
|
|
|
|
|
{ |
|
|
|
|
|
public long ProductAvgWeightSet_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public Money<decimal>? OrderNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public Money<decimal>? ProductNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public Money<decimal>? StoreNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public static void Register(DQueryDom root, QueryContainer container, DateTime date) |
|
|
|
|
|
{ |
|
|
|
|
|
var q1 = GetOrderQuery(root, container, date); |
|
|
|
|
|
var q2 = GetCompute(date); |
|
|
|
|
|
var q3 = GetStoreQuery(); |
|
|
|
|
|
q1.UnionNext.Select = q2; |
|
|
|
|
|
q2.UnionNext.Select = q3; |
|
|
|
|
|
root.RegisterQueryTable(typeof(UnionTemp), new string[] { "ProductAvgWeightSet_ID", "OrderNumber", "ProductNumber", "StoreNumber" }, q1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static DQueryDom GetOrderQuery(DQueryDom root, QueryContainer container, DateTime date) |
|
|
|
|
|
{ |
|
|
|
|
|
var detail = new JoinAlias(typeof(Order_Detail)); |
|
|
|
|
|
var query = container.Build(); |
|
|
|
|
|
var main = query.From.RootSource.Alias; |
|
|
|
|
|
var temp = new JoinAlias("_temp1", typeof(ProductAvgWeightSetTemp)); |
|
|
|
|
|
ProductAvgWeightSetTemp.Register(root); |
|
|
|
|
|
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "Order_ID")); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(temp), DQCondition.EQ(detail, "SaleGoods_ID", temp, "Goods_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ProductAvgWeightSet_ID", temp)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum", "OrderNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "ProductNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "StoreNumber")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(temp, "ProductAvgWeightSet_ID")); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.Between("LoadTime", date, date + new TimeSpan(23, 59, 59))); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ("BillState", 单据状态.已审核), DQCondition.EQ("IsLocked", true))); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static DQueryDom GetCompute(DateTime date) |
|
|
|
|
|
{ |
|
|
|
|
|
var main = new JoinAlias(typeof(ProductCompute)); |
|
|
|
|
|
var detail = new JoinAlias(typeof(ProductCompute_Detail)); |
|
|
|
|
|
var query = new DQueryDom(main); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ProductCompute_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ProductAvgWeightSet_ID", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "OrderNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ProductNumber", detail, "ProductNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "StoreNumber")); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThanOrEqual("BillState", 单据状态.已审核), DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Date", date))); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static DQueryDom GetStoreQuery() |
|
|
|
|
|
{ |
|
|
|
|
|
var main = new JoinAlias(typeof(StoreDetail)); |
|
|
|
|
|
var store = new JoinAlias(typeof(Store)); |
|
|
|
|
|
var temp = new JoinAlias("_temp2", typeof(ProductAvgWeightSetTemp));//这个临时表在前面已经注册过了。
|
|
|
|
|
|
var query = new DQueryDom(main); |
|
|
|
|
|
|
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(store), DQCondition.EQ(main, "Store_ID", store, "ID")); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(temp), DQCondition.EQ(main, "Goods_ID", temp, "Goods_ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ProductAvgWeightSet_ID", temp)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "OrderNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "ProductNumber")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Sum(main, "Number", "StoreNumber")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(temp, "ProductAvgWeightSet_ID")); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(store, "Domain_ID", DomainContext.Current.ID)); |
|
|
|
|
|
return query; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |