|
|
using System.Collections.Generic;
|
|
|
using System.Web.UI.WebControls;
|
|
|
using BWP.B3Frameworks;
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate;
|
|
|
using BWP.B3Frameworks.Utils;
|
|
|
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 TSingSoft.WebControls2;
|
|
|
using TSingSoft.WebControls2.QBELinks;
|
|
|
using BWP.B3Sale.BO;
|
|
|
using BWP.B3Sale.Utils;
|
|
|
using BWP.B3Frameworks.BO;
|
|
|
using TSingSoft.WebPluginFramework;
|
|
|
using System;
|
|
|
using BWP.B3Sale;
|
|
|
using Sale = BWP.Web.Pages.B3Sale.Reports.CarLoadingAnalyse_;
|
|
|
|
|
|
namespace BWP.Web.Overlays.CarLoadingAnalyse_
|
|
|
{
|
|
|
public class CarLoadingAnalyse: DFBrowseGridReportPage
|
|
|
{
|
|
|
protected override string Caption
|
|
|
{
|
|
|
get { return "装车单分析"; }
|
|
|
}
|
|
|
|
|
|
protected override string AccessRoleName
|
|
|
{
|
|
|
get { return "B3Sale.装车单.访问"; }
|
|
|
}
|
|
|
|
|
|
protected override bool EnableQueryPanel
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
readonly DFInfo _mainInfo = DFInfo.Get(typeof(CarLoading));
|
|
|
readonly DFInfo _detailInfo = DFInfo.Get(typeof(CarLoading_BillDetail));
|
|
|
protected virtual void AddShowFields(List<Tuple<string, string>> showFields)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
CheckBoxListWithReverseSelect _checkbox;
|
|
|
readonly Dictionary<string, DFInfo> _fileInfo = new Dictionary<string, DFInfo>();
|
|
|
|
|
|
protected override void InitQueryPanel(QueryPanel queryPanel)
|
|
|
{
|
|
|
base.InitQueryPanel(queryPanel);
|
|
|
var panel = queryPanel.CreateTab("显示字段");
|
|
|
_fileInfo.Add("Date", _mainInfo);
|
|
|
_fileInfo.Add("ID", _mainInfo);
|
|
|
_fileInfo.Add("Car_Name", _mainInfo);
|
|
|
_fileInfo.Add("Employee_Name", _mainInfo);
|
|
|
_fileInfo.Add("Deliveryman_Name", _mainInfo);
|
|
|
_fileInfo.Add("AccountingUnit_Name", _mainInfo);
|
|
|
_fileInfo.Add("DeliverGoodsLine_Name", _mainInfo);
|
|
|
_fileInfo.Add("Remark", _mainInfo);
|
|
|
_fileInfo.Add("总数量", _mainInfo);
|
|
|
_fileInfo.Add("金额", _mainInfo);
|
|
|
_checkbox = new CheckBoxListWithReverseSelect { RepeatColumns = 6, RepeatDirection = RepeatDirection.Horizontal };
|
|
|
|
|
|
var showFields = new List<Tuple<string, string>>();
|
|
|
foreach (var item in _fileInfo)
|
|
|
{
|
|
|
if (item.Key == "总数量" || item.Key == "金额")
|
|
|
showFields.Add(new Tuple<string, string>(item.Key, item.Key));
|
|
|
else
|
|
|
showFields.Add(new Tuple<string, string>(item.Key, item.Value.Fields[item.Key].Prompt));
|
|
|
}
|
|
|
AddShowFields(showFields);
|
|
|
var section = mPageLayoutManager.AddSection("显示字段", "显示字段");
|
|
|
section.ApplyLayout(showFields, mPageLayoutManager);
|
|
|
foreach (var item in showFields)
|
|
|
{
|
|
|
_checkbox.Items.Add(new ListItem(item.Item2, item.Item1));
|
|
|
}
|
|
|
panel.EAdd(_checkbox);
|
|
|
var hPanel = new HLayoutPanel();
|
|
|
CreateDataRangePanel(hPanel);
|
|
|
queryPanel.ConditonPanel.EAdd(hPanel);
|
|
|
mQueryControls.Add("显示字段", _checkbox);
|
|
|
mQueryControls.EnableHoldLastControlNames.Add("显示字段");
|
|
|
}
|
|
|
|
|
|
void CreateDataRangePanel(HLayoutPanel hPanel)
|
|
|
{
|
|
|
hPanel.Add(new SimpleLabel(_mainInfo.Fields["Date"].Prompt));
|
|
|
hPanel.Add(QueryCreator.TimeRange(_mainInfo.Fields["Date"], mQueryContainer, "MinDate", "MaxDate"));
|
|
|
}
|
|
|
|
|
|
private ChoiceBox departmentSelect, custoemrSelect;
|
|
|
protected override void AddQueryControls(VLayoutPanel vPanel)
|
|
|
{
|
|
|
|
|
|
var layout = new LayoutManager("Main", _mainInfo);
|
|
|
layout.Add("ID", mQueryContainer.Add(new DFTextBox(_mainInfo.Fields["ID"]), "ID"));
|
|
|
|
|
|
layout.Add("Car_ID", mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(QueryCreator.DFChoiceBoxEnableMultiSelection(_mainInfo.Fields["Car_ID"], B3SaleDataSources.车辆), s => long.Parse(s)), "Car_ID"));
|
|
|
|
|
|
layout.Add("Employee_ID", mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(QueryCreator.DFChoiceBoxEnableMultiSelection(_mainInfo.Fields["Employee_ID"], B3FrameworksConsts.DataSources.授权员工全部), s => long.Parse(s)), "Employee_ID"));
|
|
|
|
|
|
layout.Add("Deliveryman_ID", mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(QueryCreator.DFChoiceBoxEnableMultiSelection(_mainInfo.Fields["Deliveryman_ID"], B3FrameworksConsts.DataSources.授权员工全部), s => long.Parse(s)), "Deliveryman_ID"));
|
|
|
|
|
|
layout.Add("AccountingUnit_ID", mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(QueryCreator.DFChoiceBoxEnableMultiSelection(_mainInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部), s => long.Parse(s)), "AccountingUnit_ID"));
|
|
|
|
|
|
layout.Add("Customer_ID", new SimpleLabel("购货客户"), custoemrSelect = new ChoiceBox() { DataKind = B3SaleDataSources.客户, Width = Unit.Empty, EnableTopItem = true, EnableMultiSelection = false, EnableMultiSelectionViewer = false, EnableInputArgument = true });
|
|
|
|
|
|
layout.Add("Department_ID", new SimpleLabel("销售部门"), departmentSelect = new ChoiceBox() { DataKind = B3FrameworksConsts.DataSources.授权部门全部, Width = Unit.Empty, EnableTopItem = true, EnableMultiSelection = true, EnableMultiSelectionViewer = true, EnableInputArgument = true });
|
|
|
|
|
|
var state = mQueryContainer.Add(CustomInputCreator_WQ.一般单据状态(_mainInfo.Fields["BillState"], true, false, true, true), "BillState");
|
|
|
((ChoiceBox)state).Value = 单据状态.已审核.Value.ToString() + "|";
|
|
|
state.DisplayValue = "已审核;";
|
|
|
state.EnableInputArgument = true;
|
|
|
layout.Add("BillState", state);
|
|
|
|
|
|
layout.Add("Remark", mQueryContainer.Add(new DFTextBox(_mainInfo.Fields["Remark"]), "Remark"));
|
|
|
var config = layout.CreateDefaultConfig(4);
|
|
|
config.Expand = false;
|
|
|
|
|
|
var section = mPageLayoutManager.AddSection("查询条件", "查询条件");
|
|
|
section.ApplyLayout(layout, config, mPageLayoutManager, _mainInfo);
|
|
|
section.SetDisplayName("ID", "单号");
|
|
|
section.SetDisplayName("Car_ID", "运输车辆");
|
|
|
section.SetDisplayName("Employee_ID", "经办人");
|
|
|
section.SetDisplayName("Deliveryman_ID", "送货人员");
|
|
|
section.SetDisplayName("AccountingUnit_ID", "会计单位");
|
|
|
section.SetDisplayName("Department_ID", "部门");
|
|
|
section.SetDisplayName("Customer_ID", "客户");
|
|
|
section.SetDisplayName("BillState", "单据状态");
|
|
|
section.SetDisplayName("Remark", "摘要");
|
|
|
vPanel.Add(layout.CreateLayout(), new VLayoutOption(HorizontalAlign.Left));
|
|
|
}
|
|
|
|
|
|
protected override DQueryDom GetQueryDom()
|
|
|
{
|
|
|
var dom = base.GetQueryDom();
|
|
|
var alias = dom.From.RootSource.Alias;
|
|
|
var department = new JoinAlias(typeof(Department));
|
|
|
dom.From.AddJoin(JoinType.Left, new DQDmoSource(department), DQCondition.EQ(alias, "Department_ID", department, "ID"));
|
|
|
|
|
|
foreach (ListItem field in _checkbox.Items)
|
|
|
{
|
|
|
if (field.Selected)
|
|
|
{
|
|
|
switch (field.Value)
|
|
|
{
|
|
|
case "ExtendField3":
|
|
|
case "ExtendField2":
|
|
|
case "ExtendField1":
|
|
|
dom.Columns.Add(DQSelectColumn.Field(field.Value, alias, field.Text));
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(field.Value));
|
|
|
break;
|
|
|
case "总数量":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(JoinDetail(dom, alias), "Number")), field.Value));
|
|
|
break;
|
|
|
case "金额":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(JoinDetail(dom, alias), "Money")), field.Value));
|
|
|
break;
|
|
|
case "BillTypeID":
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.EQ(JoinDetail(dom, alias), "BillTypeID", 777), DQExpression.Value("销售出库"), DQExpression.Value("调拨出库")), field.Text));
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(JoinDetail(dom, alias), "BillTypeID"));
|
|
|
break;
|
|
|
default:
|
|
|
dom.Columns.Add(DQSelectColumn.Field(field.Value, alias));
|
|
|
dom.GroupBy.Expressions.Add(DQExpression.Field(alias, field.Value));
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var _sd2 = mQueryContainer.GetControl<DFDateTimeInput>("MinDate");
|
|
|
if (_sd2.Value.HasValue)
|
|
|
{
|
|
|
dom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("Date", _sd2.Value.Value));
|
|
|
}
|
|
|
|
|
|
var _ed2 = mQueryContainer.GetControl<DFDateTimeInput>("MaxDate");
|
|
|
if (_ed2.Value.HasValue)
|
|
|
{
|
|
|
dom.Where.Conditions.Add(DQCondition.LessThanOrEqual("Date", _ed2.Value.Value));
|
|
|
}
|
|
|
|
|
|
if (!custoemrSelect.IsEmpty)
|
|
|
{
|
|
|
dom.Where.Conditions.Add(DQCondition.Like("ExtendField2", custoemrSelect.DisplayValue));
|
|
|
}
|
|
|
|
|
|
if (!departmentSelect.IsEmpty)
|
|
|
{
|
|
|
var strs = B3SaleWebUtil.GetDeepByTreeName(departmentSelect.DisplayValue);
|
|
|
var conditions = new List<IDQExpression>();
|
|
|
var values = departmentSelect.GetValues();
|
|
|
for (int index = 0; index < values.Length; index++)
|
|
|
{
|
|
|
var value = values[index];
|
|
|
conditions.Add(DQCondition.EQ(department, "TreeDeep" + strs[index] + "ID", value));
|
|
|
}
|
|
|
dom.Where.Conditions.Add(DQCondition.Or(conditions));
|
|
|
}
|
|
|
dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID));
|
|
|
OrganizationUtil.AddOrganizationLimit(dom, typeof(AcceptDiff));
|
|
|
return dom;
|
|
|
}
|
|
|
|
|
|
JoinAlias _detailAlias;
|
|
|
JoinAlias JoinDetail(DQueryDom query, JoinAlias alias)
|
|
|
{
|
|
|
if (_detailAlias != null)
|
|
|
return _detailAlias;
|
|
|
_detailAlias = new JoinAlias(typeof(DetailTmp));
|
|
|
query.RegisterQueryTable(typeof(DetailTmp), new[] { "CarLoading_ID", "BillTypeID", "Number", "Money" }, GetDetailDom());
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(_detailAlias), DQCondition.EQ(alias, "ID", _detailAlias, "CarLoading_ID"));
|
|
|
return _detailAlias;
|
|
|
}
|
|
|
|
|
|
private DQueryDom GetDetailDom()
|
|
|
{
|
|
|
var detail = new JoinAlias(typeof(CarLoading_BillDetail));
|
|
|
var outdetail = new JoinAlias(typeof(SaleOutStore_Detail));
|
|
|
var query = new DQueryDom(detail);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(outdetail), DQCondition.EQ(detail, "BillID", outdetail, "SaleOutStore_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("CarLoading_ID", detail));
|
|
|
query.Columns.Add(DQSelectColumn.Field("BillTypeID", detail));
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(detail, "Number")), "Number"));
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(outdetail, "Money")), "Money"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "CarLoading_ID"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "BillTypeID"));
|
|
|
return query;
|
|
|
}
|
|
|
|
|
|
class DetailTmp
|
|
|
{
|
|
|
public long CarLoading_ID { get; set; }
|
|
|
|
|
|
[LogicName("单据类型")]
|
|
|
public short BillTypeID { get; set; }
|
|
|
|
|
|
[LogicName("数量")]
|
|
|
public Money<decimal>? Number { get; set; }
|
|
|
|
|
|
[LogicName("金额")]
|
|
|
public Money<decimal>? Money { get; set; }
|
|
|
}
|
|
|
}
|
|
|
}
|