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.
 

219 lines
11 KiB

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;
}
}
}