|
|
using BWP.B3Frameworks;
|
|
|
using BWP.B3Frameworks.BO.MoneyTemplate;
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate;
|
|
|
using BWP.B3Frameworks.Utils;
|
|
|
using BWP.B3ProcurementInterface.Utils;
|
|
|
using BWP.B3SheepButcherManage.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.HtmlControls;
|
|
|
using System.Web.UI.WebControls;
|
|
|
using TSingSoft.WebControls2;
|
|
|
using TSingSoft.WebPluginFramework;
|
|
|
|
|
|
namespace BWP.Web.Pages.B3SheepButcherManage.Reports.ButcherAnalyse_
|
|
|
{
|
|
|
class ButcherAnalyse : DFGridReportPage
|
|
|
{
|
|
|
protected override string Caption
|
|
|
{
|
|
|
get { return "屠宰单分析"; }
|
|
|
}
|
|
|
|
|
|
protected override string AccessRoleName
|
|
|
{
|
|
|
get { return "B3SheepButcherManage.羊屠宰单.数据分析"; }
|
|
|
}
|
|
|
|
|
|
protected override void InitForm(HtmlForm form)
|
|
|
{
|
|
|
base.InitForm(form);
|
|
|
mDFGrid.AllowColGroup = true;
|
|
|
mDFGrid.AllowRowGroup = _checkbox.Items.FindByText("合并单元格").Selected;
|
|
|
mDFGrid.AllowSorting = true;
|
|
|
mDFGrid.HeaderPagerLock = true;
|
|
|
}
|
|
|
|
|
|
private readonly DFInfo _mDFInfo = DFInfo.Get(typeof(Butcher_Detail));
|
|
|
private readonly DFInfo _butcher = DFInfo.Get(typeof(Butcher));
|
|
|
private readonly DFInfo _weigh = DFInfo.Get(typeof(WeightBill));
|
|
|
protected override void AddQueryControls(VLayoutPanel vPanel)
|
|
|
{
|
|
|
var customPanel = new LayoutManager("Main", _mDFInfo, mQueryContainer);
|
|
|
customPanel.Add("Butcher_ID", new SimpleLabel("屠宰单号"), QueryCreator.DFTextBox(_mDFInfo.Fields["Butcher_ID"]));
|
|
|
customPanel.Add("Supplier_ID", new SimpleLabel("供应商"), QueryCreator.DFChoiceBox(_weigh.Fields["Supplier_ID"], B3ProcurementInterfaceDataSources.供应商用于屠宰场));
|
|
|
customPanel.Add("AccountingUnit_ID", new SimpleLabel("会计单位"), QueryCreator.DFChoiceBox(_weigh.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部));
|
|
|
customPanel.Add("Zone_ID", new SimpleLabel("来源区域"), QueryCreator.DFChoiceBox(_weigh.Fields["Zone_ID"], "B3ButcherManage_区域"));
|
|
|
customPanel.Add("WeightBill_ID", QueryCreator.DFTextBox(_mDFInfo.Fields["WeightBill_ID"]));
|
|
|
customPanel.Add("Livestock_ID", QueryCreator.DFChoiceBox(_mDFInfo.Fields["Livestock_ID"], BWP.B3SheepButcherManage.B3SheepButcherManageConsts.DataSources.活体级别));
|
|
|
DFNamedValueInput<单据状态> billStateInput;
|
|
|
customPanel.Add("BillState", new SimpleLabel("单据状态"), billStateInput = QueryCreator.一般单据状态(_butcher.Fields["BillState"]));
|
|
|
billStateInput.Value = 单据状态.已审核;
|
|
|
customPanel.Add("Date", new SimpleLabel("屠宰日期"), QueryCreator.TimeRange(_butcher.Fields["Date"], mQueryContainer, "MinDate", "MaxDate"));
|
|
|
var config = customPanel.CreateDefaultConfig(4);
|
|
|
config["Date"].ColSpan = 2;
|
|
|
config.Expand = false;
|
|
|
vPanel.Add(customPanel.CreateLayout());
|
|
|
}
|
|
|
|
|
|
private CheckBoxListWithReverseSelect _checkbox;
|
|
|
protected override void InitQueryPanel(QueryPanel queryPanel)
|
|
|
{
|
|
|
base.InitQueryPanel(queryPanel);
|
|
|
var panel = queryPanel.CreateTab("显示字段");
|
|
|
_checkbox = new CheckBoxListWithReverseSelect { RepeatColumns = 6, RepeatDirection = RepeatDirection.Horizontal };
|
|
|
_checkbox.Items.Add(new ListItem("会计单位", "AccountingUnit_Name"));
|
|
|
_checkbox.Items.Add(new ListItem("屠宰单号", "ID"));
|
|
|
_checkbox.Items.Add(new ListItem("过磅日期", "WeighTime"));
|
|
|
_checkbox.Items.Add(new ListItem("屠宰日期", "Date"));
|
|
|
_checkbox.Items.Add(new ListItem("阶段号", "PhaseCode"));
|
|
|
_checkbox.Items.Add(new ListItem("来源地", "Zone_Name"));
|
|
|
_checkbox.Items.Add(new ListItem("供应商", "Supplier_Name"));
|
|
|
_checkbox.Items.Add(new ListItem("过磅单号", "WeightBill_ID"));
|
|
|
_checkbox.Items.Add(new ListItem("收购重量", "WeightBill_BuyWeigh1"));
|
|
|
_checkbox.Items.Add(new ListItem("出肉率", "出肉率"));
|
|
|
_checkbox.Items.Add(new ListItem("级别", "Livestock_Name"));
|
|
|
_checkbox.Items.Add(new ListItem("级别头数", "级别头数"));
|
|
|
_checkbox.Items.Add(new ListItem("重量", "Weight"));
|
|
|
_checkbox.Items.Add(new ListItem("扣重", "SubtractWeight"));
|
|
|
_checkbox.Items.Add(new ListItem("结算重", "FinalWeight"));
|
|
|
_checkbox.Items.Add(new ListItem("业务员", "Employee_Name"));
|
|
|
_checkbox.Items.Add(new ListItem("备注", "Remark"));
|
|
|
_checkbox.Items.Add(new ListItem("合并单元格") { Selected = false });
|
|
|
panel.EAdd(_checkbox);
|
|
|
mQueryControls.Add("显示字段", _checkbox);
|
|
|
mQueryControls.EnableHoldLastControlNames.Add("显示字段");
|
|
|
}
|
|
|
|
|
|
protected override DQueryDom GetQueryDom()
|
|
|
{
|
|
|
mDFGrid.AllowRowGroup = _checkbox.Items.FindByText("合并单元格").Selected;
|
|
|
|
|
|
var dom = base.GetQueryDom();
|
|
|
var detail = dom.From.RootSource.Alias;
|
|
|
var butcher = new JoinAlias("butcher", typeof(Butcher));
|
|
|
dom.From.AddJoin(JoinType.Left, new DQDmoSource(butcher), DQCondition.EQ(detail, "Butcher_ID", butcher, "ID"));
|
|
|
|
|
|
var weigh = new JoinAlias("weigh", typeof(WeightBill));
|
|
|
dom.From.AddJoin(JoinType.Left, new DQDmoSource(weigh), DQCondition.EQ(detail, "WeightBill_ID", weigh, "ID"));
|
|
|
|
|
|
var butcherTemp = new JoinAlias("tempButcher", typeof(TempButcher));
|
|
|
dom.RegisterQueryTable(typeof(TempButcher), new[] { "ID", "WeightBill_ID", "WeightBill_Supplier_ID", "FinalWeight", "WeightBill_BuyWeigh1" }, TempButcher.GetQueryDom());
|
|
|
dom.From.AddJoin(JoinType.Left, new DQDmoSource(butcherTemp), DQCondition.And(DQCondition.EQ(butcher, "ID", butcherTemp, "ID"), DQCondition.EQ(weigh, "Supplier_ID", butcherTemp, "WeightBill_Supplier_ID"), DQCondition.EQ(detail, "WeightBill_ID", butcherTemp, "WeightBill_ID")));
|
|
|
var 级别头数 = false;
|
|
|
foreach (ListItem field in _checkbox.Items)
|
|
|
{
|
|
|
if (field.Selected)
|
|
|
{
|
|
|
switch (field.Text)
|
|
|
{
|
|
|
case "会计单位":
|
|
|
case "过磅日期":
|
|
|
case "来源区域":
|
|
|
case "供应商":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(weigh, field.Value), field.Text));
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(weigh, field.Value));
|
|
|
break;
|
|
|
case "屠宰单号":
|
|
|
case "屠宰日期":
|
|
|
case "业务员":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(butcher, field.Value), field.Text));
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(butcher, field.Value));
|
|
|
break;
|
|
|
case "阶段号":
|
|
|
//dom.OrderBy.Expressions.Add(DQOrderByExpression.Create(butcher, "Date", true));
|
|
|
//dom.GroupBy.Expressions.Add(DQExpression.Field(butcher, "Date"));
|
|
|
|
|
|
//dom.OrderBy.Expressions.Add(DQOrderByExpression.Create(detail, "Sequence"));
|
|
|
//dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "Sequence"));
|
|
|
|
|
|
//dom.OrderBy.Expressions.Add(DQOrderByExpression.Create(detail, "PhaseCode"));
|
|
|
//dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "PhaseCode"));
|
|
|
|
|
|
var snip = DQExpression.Snippet<int>("CAST(substring([detail].[PhaseCode],1,patindex('%-%',[detail].[PhaseCode])-1) AS int)");
|
|
|
dom.Columns.Add(DQSelectColumn.Create(snip, field.Text));
|
|
|
dom.GroupBy.Expressions.Add(snip);
|
|
|
if (dom.OrderBy.Expressions.Count == 0)
|
|
|
dom.OrderBy.Expressions.Add(DQOrderByExpression.Create(snip, false));
|
|
|
break;
|
|
|
case "过磅单号":
|
|
|
case "级别":
|
|
|
case "备注":
|
|
|
case "收购重量":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(detail, field.Value), field.Text));
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(detail, field.Value));
|
|
|
break;
|
|
|
case "重量":
|
|
|
case "扣重":
|
|
|
case "结算重":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(detail, field.Value)), field.Text));
|
|
|
SumColumnNames.Add(field.Text);
|
|
|
GroupSumColumnNamnes.Add(field.Text);
|
|
|
break;
|
|
|
case "级别头数":
|
|
|
级别头数 = true;
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Count(DQExpression.Field(detail, "Livestock_Name")), field.Text));
|
|
|
SumColumnNames.Add(field.Text);
|
|
|
GroupSumColumnNamnes.Add(field.Text);
|
|
|
break;
|
|
|
case "出肉率":
|
|
|
//var crl = 1;
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Max(DQExpression.Divide(DQExpression.Field(butcherTemp, "FinalWeight"), DQExpression.Field(butcherTemp, "WeightBill_BuyWeigh1"))).ECastType<Money<百分数>>(), "出肉率"));
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (级别头数 == false)
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "ID"));
|
|
|
foreach (var c in dom.Columns)
|
|
|
ColumnNames.Add(c.Name);
|
|
|
dom.Where.Conditions.Add(DQCondition.EQ(butcher, "Domain_ID", DomainContext.Current.ID));
|
|
|
OrganizationUtil.AddOrganizationLimit(dom, typeof(Butcher), butcher);
|
|
|
return dom;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
internal class TempButcher
|
|
|
{
|
|
|
public long? ID { get; set; }
|
|
|
|
|
|
[LogicName("过磅单号")]
|
|
|
public long WeightBill_ID { get; set; }
|
|
|
|
|
|
[LogicName("过磅单供应商")]
|
|
|
public long? WeightBill_Supplier_ID { get; set; }
|
|
|
|
|
|
[LogicName("结算重")]
|
|
|
public Money<decimal>? FinalWeight { get; set; }
|
|
|
|
|
|
[LogicName("收购重量")]
|
|
|
public Money<decimal>? WeightBill_BuyWeigh1 { get; set; }
|
|
|
public static DQueryDom GetQueryDom()
|
|
|
{
|
|
|
var main = new JoinAlias(typeof(Butcher));
|
|
|
var detail = new JoinAlias(typeof(Butcher_Detail));
|
|
|
var query = new DQueryDom(detail);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(main), DQCondition.EQ(main, "ID", detail, "Butcher_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID", main));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID", detail));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_Supplier_ID", detail));
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "FinalWeight"));
|
|
|
query.Columns.Add(DQSelectColumn.Max(detail, "WeightBill_BuyWeigh1"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(main, "ID"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "WeightBill_ID"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "WeightBill_Supplier_ID"));
|
|
|
return query;
|
|
|
}
|
|
|
}
|
|
|
}
|