| @ -1,131 +1,173 @@ | |||
| //using BWP.B3ClientService; | |||
| //using BWP.B3ClientService.BO; | |||
| //using BWP.B3Frameworks.Utils; | |||
| //using BWP.Web.Utils; | |||
| //using BWP.Web.WebControls; | |||
| //using Forks.EnterpriseServices.DataForm; | |||
| //using Forks.EnterpriseServices.DomainObjects2; | |||
| //using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||
| //using Forks.EnterpriseServices.SqlDoms; | |||
| //using System; | |||
| //using System.Collections.Generic; | |||
| //using System.Linq; | |||
| //using System.Security; | |||
| //using System.Text; | |||
| //using System.Web.UI; | |||
| //using System.Web.UI.HtmlControls; | |||
| //using System.Web.UI.WebControls; | |||
| //using TSingSoft.WebControls2; | |||
| //using TSingSoft.WebPluginFramework.Controls; | |||
| //using TSingSoft.WebPluginFramework.Pages; | |||
| //using TSingSoft.WebPluginFramework; | |||
| //namespace BWP.Web.Pages.B3ClientService.Reports.SectionLossAnalyse_ | |||
| //{ | |||
| // class SectionLossAnalyse : ServerPage | |||
| // { | |||
| // protected override void OnInit(EventArgs e) | |||
| // { | |||
| // if (!User.IsInRole("B3ClientService.报表展示.条段损耗")) | |||
| // throw new SecurityException(); | |||
| // base.OnInit(e); | |||
| // } | |||
| // DFBrowseGrid mBrowseGrid; | |||
| // protected override void InitForm(HtmlForm form) | |||
| // { | |||
| // form.EAdd(new PageTitle("条段损耗")); | |||
| // var queryPanel = new Panel(); | |||
| // queryPanel.Style.Add(HtmlTextWriterStyle.BackgroundColor, "white"); | |||
| // queryPanel.CssClass = "QueryPanel PrintInVisible"; | |||
| // form.Controls.Add(queryPanel); | |||
| // AddQueryControl(queryPanel); | |||
| // var mZone = new TitlePanelZone(); | |||
| // form.Controls.Add(mZone); | |||
| // mZone.Add(CreateResultTab()); | |||
| // } | |||
| // ChoiceBox batchSelect; | |||
| // private void AddQueryControl(Panel queryPanel) | |||
| // { | |||
| // var hp = queryPanel.EAdd(new Panel()); | |||
| // hp.Style.Add("float", "right"); | |||
| // hp.EAdd(new SimpleLabel("生产批次")); | |||
| // batchSelect = hp.EAdd(new ChoiceBox(B3ClientServiceConsts.DataSources.生产批次) { EnableInputArgument = true, EnableTopItem = true, AutoPostBack = true, Width = Unit.Pixel(180) }); | |||
| // var batch = GetYesterdayBatch(); | |||
| // if (batch != null) | |||
| // batchSelect.Fill(batch.Item1.ToString(), batch.Item2); | |||
| // batchSelect.SelectedValueChanged += delegate | |||
| // { | |||
| // StartQuery(); | |||
| // }; | |||
| // } | |||
| // Tuple<long, string> GetYesterdayBatch() | |||
| // { | |||
| // var dom = new DQueryDom(new JoinAlias(typeof(ProductBatch))); | |||
| // dom.Columns.Add(DQSelectColumn.Field("ID")); | |||
| // dom.Columns.Add(DQSelectColumn.Field("Name")); | |||
| // dom.OrderBy.Expressions.Add(DQOrderByExpression.Create("Date", true)); | |||
| // dom.Where.Conditions.Add(DQCondition.LessThan("Date", DateTime.Today)); | |||
| // dom.Range = SelectRange.Top(1); | |||
| // return dom.EExecuteScalar<long, string>(); | |||
| // } | |||
| // private TitlePanel CreateResultTab() | |||
| // { | |||
| // var result = new TitlePanel("查询结果"); | |||
| // mBrowseGrid = result.EAdd(new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) }); | |||
| // mBrowseGrid.Columns.Add(new DFBrowseGridAutoColumn()); | |||
| // var hPanel = result.EAdd(new HLayoutPanel()); | |||
| // PageUtil.AddExcelExportPanel(hPanel, mBrowseGrid, "条段损耗"); | |||
| // return result; | |||
| // } | |||
| // void StartQuery() | |||
| // { | |||
| // var sumColumns = new List<int>(); | |||
| // var groupSumColumns = new List<int>(); | |||
| // var main = new JoinAlias(typeof(SectionStoreDetail)); | |||
| // var goods = new JoinAlias("iGoods", typeof(Goods)); | |||
| // var query = new DQueryDom(main); | |||
| // query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID")); | |||
| // query.Columns.Add(DQSelectColumn.Field("Name", goods, "存货名称")); | |||
| // query.GroupBy.Expressions.Add(DQExpression.Field(goods, "Name")); | |||
| // query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Value(1)).ECastType<int?>(), "头数")); | |||
| // sumColumns.Add(query.Columns.Count - 1); | |||
| // groupSumColumns.Add(query.Columns.Count - 1); | |||
| // query.Columns.Add(DQSelectColumn.Sum("GradeWeight", "胴体重量")); | |||
| // sumColumns.Add(query.Columns.Count - 1); | |||
| // query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(inGoods, "Name"), "存货名称")); | |||
| // query.GroupBy.Expressions.Add(DQExpression.Field(inGoods, "Name")); | |||
| // query.Columns.Add(DQSelectColumn.Sum("InStoreWeight", "入库重量")); | |||
| // sumColumns.Add(query.Columns.Count - 1); | |||
| // query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Subtract(DQExpression.Field("GradeWeight"), DQExpression.IfNull(DQExpression.Field("InStoreWeight"), DQExpression.Value(0)))), "损耗")); | |||
| // sumColumns.Add(query.Columns.Count - 1); | |||
| // groupSumColumns.Add(query.Columns.Count - 1); | |||
| // if (!batchSelect.IsEmpty) | |||
| // query.Where.Conditions.Add(DQCondition.EQ("ProductBatch_ID", long.Parse(batchSelect.Value))); | |||
| // var args = new LoadArguments(query); | |||
| // foreach (var idx in sumColumns) | |||
| // args.SumColumns.Add(idx); | |||
| // foreach (var idx in groupSumColumns) | |||
| // args.GroupSumColumns.Add(idx); | |||
| // mBrowseGrid.LoadArguments = args; | |||
| // mBrowseGrid.DataBind(); | |||
| // } | |||
| // protected override void OnLoad(EventArgs e) | |||
| // { | |||
| // base.OnLoad(e); | |||
| // if (!IsPostBack) | |||
| // StartQuery(); | |||
| // } | |||
| // } | |||
| //} | |||
| using BWP.B3ClientService; | |||
| using BWP.B3ClientService.BO; | |||
| using BWP.B3Frameworks.Utils; | |||
| using BWP.Web.Utils; | |||
| using BWP.Web.WebControls; | |||
| using Forks.EnterpriseServices.DataForm; | |||
| using Forks.EnterpriseServices.DomainObjects2; | |||
| using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||
| using Forks.EnterpriseServices.SqlDoms; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Linq; | |||
| using System.Security; | |||
| using System.Text; | |||
| using System.Web.UI; | |||
| using System.Web.UI.HtmlControls; | |||
| using System.Web.UI.WebControls; | |||
| using TSingSoft.WebControls2; | |||
| using TSingSoft.WebPluginFramework.Controls; | |||
| using TSingSoft.WebPluginFramework.Pages; | |||
| using TSingSoft.WebPluginFramework; | |||
| using BWP.B3ClientService.NamedValueTemplate; | |||
| namespace BWP.Web.Pages.B3ClientService.Reports.SectionLossAnalyse_ | |||
| { | |||
| class SectionLossAnalyse : ServerPage | |||
| { | |||
| protected override void OnInit(EventArgs e) | |||
| { | |||
| if (!User.IsInRole("B3ClientService.报表展示.条段损耗")) | |||
| throw new SecurityException(); | |||
| base.OnInit(e); | |||
| } | |||
| DFBrowseGrid mBrowseGrid; | |||
| protected override void InitForm(HtmlForm form) | |||
| { | |||
| form.EAdd(new PageTitle("条段损耗")); | |||
| var queryPanel = new Panel(); | |||
| queryPanel.Style.Add(HtmlTextWriterStyle.BackgroundColor, "white"); | |||
| queryPanel.CssClass = "QueryPanel PrintInVisible"; | |||
| form.Controls.Add(queryPanel); | |||
| AddQueryControl(queryPanel); | |||
| var mZone = new TitlePanelZone(); | |||
| form.Controls.Add(mZone); | |||
| mZone.Add(CreateResultTab()); | |||
| } | |||
| ChoiceBox batchSelect; | |||
| private void AddQueryControl(Panel queryPanel) | |||
| { | |||
| var hp = queryPanel.EAdd(new Panel()); | |||
| hp.Style.Add("float", "right"); | |||
| hp.EAdd(new SimpleLabel("生产批次")); | |||
| batchSelect = hp.EAdd(new ChoiceBox(B3ClientServiceConsts.DataSources.生产批次) { EnableInputArgument = true, EnableTopItem = true, AutoPostBack = true, Width = Unit.Pixel(180) }); | |||
| var batch = GetYesterdayBatch(); | |||
| if (batch != null) | |||
| batchSelect.Fill(batch.Item1.ToString(), batch.Item2); | |||
| batchSelect.SelectedValueChanged += delegate | |||
| { | |||
| StartQuery(); | |||
| }; | |||
| } | |||
| Tuple<long, string> GetYesterdayBatch() | |||
| { | |||
| var dom = new DQueryDom(new JoinAlias(typeof(ProductBatch))); | |||
| dom.Columns.Add(DQSelectColumn.Field("ID")); | |||
| dom.Columns.Add(DQSelectColumn.Field("Name")); | |||
| dom.OrderBy.Expressions.Add(DQOrderByExpression.Create("Date", true)); | |||
| dom.Where.Conditions.Add(DQCondition.LessThan("Date", DateTime.Today)); | |||
| dom.Range = SelectRange.Top(1); | |||
| return dom.EExecuteScalar<long, string>(); | |||
| } | |||
| private TitlePanel CreateResultTab() | |||
| { | |||
| var result = new TitlePanel("查询结果"); | |||
| mBrowseGrid = result.EAdd(new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) }); | |||
| mBrowseGrid.Columns.Add(new DFBrowseGridAutoColumn()); | |||
| var hPanel = result.EAdd(new HLayoutPanel()); | |||
| PageUtil.AddExcelExportPanel(hPanel, mBrowseGrid, "条段损耗"); | |||
| return result; | |||
| } | |||
| void StartQuery() | |||
| { | |||
| long? productBatch = null; | |||
| if (!batchSelect.IsEmpty) | |||
| productBatch = long.Parse(batchSelect.Value); | |||
| var main = new JoinAlias(typeof(UnionTemp)); | |||
| var batch = new JoinAlias(typeof(ProductBatch)); | |||
| var query = new DQueryDom(main); | |||
| UnionTemp.Register(query, productBatch); | |||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(batch), DQCondition.EQ(main, "ProductBatch_ID", batch, "ID")); | |||
| query.Columns.Add(DQSelectColumn.Field("Name", batch, "生产批次")); | |||
| query.GroupBy.Expressions.Add(DQExpression.Field(batch, "Name")); | |||
| query.Columns.Add(DQSelectColumn.Sum("PickNumber", "领料|头数")); | |||
| query.Columns.Add(DQSelectColumn.Sum("PickWeight", "领料|重量")); | |||
| query.Columns.Add(DQSelectColumn.Sum("InNumber", "入库|头数")); | |||
| query.Columns.Add(DQSelectColumn.Sum("InWeight", "入库|重量")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Subtract(DQExpression.IfNull(DQExpression.Field("PickWeight"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field("InWeight"), DQExpression.Value(0)))).ECastType<int>(), "差异")); | |||
| if (!batchSelect.IsEmpty) | |||
| query.Where.Conditions.Add(DQCondition.EQ("ProductBatch_ID", long.Parse(batchSelect.Value))); | |||
| var args = new LoadArguments(query); | |||
| for (var i = 1; i < query.Columns.Count; i++) | |||
| args.SumColumns.Add(i); | |||
| args.GroupSumColumns.Add(query.Columns.Count - 1); | |||
| mBrowseGrid.LoadArguments = args; | |||
| mBrowseGrid.DataBind(); | |||
| } | |||
| protected override void OnLoad(EventArgs e) | |||
| { | |||
| base.OnLoad(e); | |||
| if (!IsPostBack) | |||
| StartQuery(); | |||
| } | |||
| } | |||
| class UnionTemp | |||
| { | |||
| public long ProductBatch_ID { get; set; } | |||
| public int? PickNumber { get; set; } | |||
| public decimal? PickWeight { get; set; } | |||
| public int? InNumber { get; set; } | |||
| public decimal? InWeight { get; set; } | |||
| public static void Register(DQueryDom root, long? productBatch) | |||
| { | |||
| var u1 = GetPickInfo(productBatch); | |||
| var u2 = GetSectionInStoreInfo(productBatch); | |||
| u1.UnionNext.Select = u2; | |||
| u1.UnionNext.Type = UnionType.All; | |||
| root.RegisterQueryTable(typeof(UnionTemp), new string[] { "ProductBatch_ID", "PickNumber", "PickWeight", "InNumber", "InWeight" }, u1); | |||
| } | |||
| static DQueryDom GetPickInfo(long? batch) | |||
| { | |||
| var query = new DQueryDom(new JoinAlias(typeof(CarcassFullInfo))); | |||
| query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "PickNumber")); | |||
| query.Columns.Add(DQSelectColumn.Field("InStoreWeight", "PickWeight")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "InNumber")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "InWeight")); | |||
| query.Where.Conditions.Add(DQCondition.EQ("PickType", 领用类型.条转段)); | |||
| if (batch.HasValue) | |||
| query.Where.Conditions.Add(DQCondition.EQ("ProductBatch_ID", batch)); | |||
| return query; | |||
| } | |||
| static DQueryDom GetSectionInStoreInfo(long? batch) | |||
| { | |||
| var query = new DQueryDom(new JoinAlias(typeof(SectionStoreDetail))); | |||
| query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "PickNumber")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.NULL, "PickWeight")); | |||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.IsNotNull(DQExpression.Field("BarCode")), DQExpression.Value(1)), "InNumber")); | |||
| query.Columns.Add(DQSelectColumn.Field("Weight", "InWeight")); | |||
| if (batch.HasValue) | |||
| query.Where.Conditions.Add(DQCondition.EQ("ProductBatch_ID", batch)); | |||
| return query; | |||
| } | |||
| } | |||
| } | |||