|
|
|
@ -0,0 +1,146 @@ |
|
|
|
using BWP.B3ButcherManage.BO; |
|
|
|
using BWP.B3Frameworks; |
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate; |
|
|
|
using BWP.B3Frameworks.Utils; |
|
|
|
using BWP.B3Sale.BO; |
|
|
|
using BWP.B3UnitedInfos.BO; |
|
|
|
using BWP.Web.Utils; |
|
|
|
using BWP.Web.WebControls; |
|
|
|
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 TSingSoft.WebControls2; |
|
|
|
using TSingSoft.WebPluginFramework; |
|
|
|
|
|
|
|
namespace BWP.Web.Pages.B3ButcherManageToSale.Reports.OutputToSaleOutDiff_ |
|
|
|
{ |
|
|
|
class OutputToSaleOutDiff : DFBrowseGridReportPage<Output> |
|
|
|
{ |
|
|
|
protected override string AccessRoleName |
|
|
|
{ |
|
|
|
get { return "B3ButcherManageToSale.报表分析.订单完成情况"; } |
|
|
|
} |
|
|
|
|
|
|
|
protected override string Caption |
|
|
|
{ |
|
|
|
get { return "订单完成情况"; } |
|
|
|
} |
|
|
|
|
|
|
|
protected override void InitQueryPanel(QueryPanel queryPanel) |
|
|
|
{ |
|
|
|
//base.InitQueryPanel(queryPanel);
|
|
|
|
queryPanel.ConditonPanel.EAdd(CreateDataRangePanel()); |
|
|
|
} |
|
|
|
|
|
|
|
HLayoutPanel CreateDataRangePanel() |
|
|
|
{ |
|
|
|
var hPanel = new HLayoutPanel(); |
|
|
|
hPanel.Add(new LiteralControl("<span style='color:red'>*</span>仓库:")); |
|
|
|
hPanel.Add(QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["ID"], mQueryContainer, "Store_ID", B3FrameworksConsts.DataSources.授权仓库全部)); |
|
|
|
hPanel.Add(new LiteralControl("<span style='color:red'>*</span>日期:")); |
|
|
|
hPanel.Add(QueryCreator.DateRange(mDFInfo.Fields["Date"], mQueryContainer, "MinDate", "MaxDate", DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 29))); |
|
|
|
return hPanel; |
|
|
|
} |
|
|
|
|
|
|
|
protected override DQueryDom GetQueryDom() |
|
|
|
{ |
|
|
|
var minInput = mQueryContainer.GetControl<DateInput>("MinDate"); |
|
|
|
var maxInput = mQueryContainer.GetControl<DateInput>("MaxDate"); |
|
|
|
var storeInput = mQueryContainer.GetControl<DFChoiceBox>("Store_ID"); |
|
|
|
if (minInput.IsEmpty) |
|
|
|
throw new Exception("请选择开始日期"); |
|
|
|
if (maxInput.IsEmpty) |
|
|
|
throw new Exception("请选择结束日期"); |
|
|
|
if (storeInput.IsEmpty) |
|
|
|
throw new Exception("请选择仓库"); |
|
|
|
|
|
|
|
var main = new JoinAlias(typeof(UnionTemp)); |
|
|
|
var goods = new JoinAlias(typeof(Goods)); |
|
|
|
var query = new DQueryDom(main); |
|
|
|
UnionTemp.Register(query, minInput.Date, maxInput.Date, storeInput.GetValues().Select(x => long.Parse(x))); |
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "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.Sum("UnitNum", "订货|数量")); |
|
|
|
SumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("MainUnit", goods, "订货|单位")); |
|
|
|
query.Columns.Add(DQSelectColumn.Sum("SecondNumber", "订货|辅数量")); |
|
|
|
SumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondUnit", goods, "订货|辅单位")); |
|
|
|
query.Columns.Add(DQSelectColumn.Sum("OutUnitNum", "产出|数量")); |
|
|
|
SumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
query.Columns.Add(DQSelectColumn.Sum("OutSecondNumber", "产出|辅数量")); |
|
|
|
SumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.IfNull(DQExpression.Sum(DQExpression.Field("UnitNum")), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Sum(DQExpression.Field("OutUnitNum")), DQExpression.Value(0))).ECastType<Money<decimal>?>(), "差异|数量")); |
|
|
|
SumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
GroupSumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.IfNull(DQExpression.Sum(DQExpression.Field("SecondNumber")), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Sum(DQExpression.Field("OutSecondNumber")), DQExpression.Value(0))).ECastType<Money<decimal>?>(), "差异|辅数量")); |
|
|
|
SumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
GroupSumColumnIndexs.Add(query.Columns.Count - 1); |
|
|
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(goods, "Code")); |
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(goods, "Name")); |
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(goods, "Spec")); |
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(goods, "MainUnit")); |
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(goods, "SecondUnit")); |
|
|
|
|
|
|
|
return query; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
class UnionTemp |
|
|
|
{ |
|
|
|
public long Goods_ID { get; set; } |
|
|
|
public Money<decimal>? UnitNum { get; set; } |
|
|
|
public Money<decimal>? SecondNumber { get; set; } |
|
|
|
public Money<decimal?> OutUnitNum { get; set; } |
|
|
|
public Money<decimal>? OutSecondNumber { get; set; } |
|
|
|
|
|
|
|
public static void Register(DQueryDom root, DateTime minDate, DateTime maxDate, IEnumerable<long> storeID) |
|
|
|
{ |
|
|
|
var query = GetSaleOutStore(minDate, maxDate, storeID); |
|
|
|
query.UnionNext.Select = GetOutput(minDate, maxDate); |
|
|
|
OrganizationUtil.RegisterOrganizationQueryTable(root); |
|
|
|
root.RegisterQueryTable(typeof(UnionTemp), new string[] { "Goods_ID", "UnitNum", "SecondNumber", "OutUnitNum", "OutSecondNumber" }, query); |
|
|
|
} |
|
|
|
|
|
|
|
static DQueryDom GetSaleOutStore(DateTime minDate, DateTime maxDate, IEnumerable<long> storeID) |
|
|
|
{ |
|
|
|
var main = new JoinAlias(typeof(SaleOutStore)); |
|
|
|
var detail = new JoinAlias(typeof(SaleOutStore_Detail)); |
|
|
|
var query = new DQueryDom(main); |
|
|
|
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID")); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail)); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail)); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); |
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "OutUnitNum")); |
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "OutSecondNumber")); |
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("LoadTime", minDate, maxDate), DQCondition.InList(DQExpression.Field("Store_ID"), storeID.Select(x => DQExpression.Value(x)).ToArray()), DQCondition.EQ("BillState", 单据状态.未审核))); |
|
|
|
OrganizationUtil.AddOrganizationLimit(query, typeof(SaleOutStore)); |
|
|
|
return query; |
|
|
|
} |
|
|
|
|
|
|
|
static DQueryDom GetOutput(DateTime minDate, DateTime maxDate) |
|
|
|
{ |
|
|
|
var main = new JoinAlias(typeof(Output)); |
|
|
|
var detail = new JoinAlias(typeof(Output_Detail)); |
|
|
|
var query = new DQueryDom(main); |
|
|
|
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "Output_ID")); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail)); |
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "UnitNum")); |
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "SecondNumber")); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("Number", detail)); |
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); |
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("Date", minDate, maxDate), DQCondition.InEQ("BillState", 单据状态.已作废))); |
|
|
|
OrganizationUtil.AddOrganizationLimit(query, typeof(Output)); |
|
|
|
return query; |
|
|
|
} |
|
|
|
} |
|
|
|
} |