|
|
@ -0,0 +1,384 @@ |
|
|
|
|
|
using BWP.B3Frameworks; |
|
|
|
|
|
using BWP.B3Frameworks.BO; |
|
|
|
|
|
using BWP.B3Frameworks.BO.MoneyTemplate; |
|
|
|
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate; |
|
|
|
|
|
using BWP.B3Sale.BO; |
|
|
|
|
|
using BWP.Web.Utils; |
|
|
|
|
|
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.B3QingDaoWanFu.Reports.SaleSummaryReport_ |
|
|
|
|
|
{ |
|
|
|
|
|
class SaleSummaryReport : ClickQueryReportPage |
|
|
|
|
|
{ |
|
|
|
|
|
protected override string AccessRoleName |
|
|
|
|
|
{ |
|
|
|
|
|
get { return "B3QingDaoWanFu.报表.销售统计表"; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected override string Caption |
|
|
|
|
|
{ |
|
|
|
|
|
get { return "销售统计表"; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected override void InitDFGrid(DFGrid mDfGrid) |
|
|
|
|
|
{ |
|
|
|
|
|
base.InitDFGrid(mDfGrid); |
|
|
|
|
|
mDfGrid.AllowRowGroup = true; |
|
|
|
|
|
mDfGrid.AllowColGroup = true; |
|
|
|
|
|
mDfGrid.AllowSorting = true; |
|
|
|
|
|
mDfGrid.HeaderPagerLock = true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
DateTime SelectDate |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["SelectDate"] == null) |
|
|
|
|
|
ViewState["SelectDate"] = DateTime.Today; |
|
|
|
|
|
return (DateTime)ViewState["SelectDate"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["SelectDate"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static FilterTree monthTree, dayTree; |
|
|
|
|
|
|
|
|
|
|
|
protected override void CreateQueryPanel(VLayoutPanel vPanel) |
|
|
|
|
|
{ |
|
|
|
|
|
var tablePanel = vPanel.Add(new TableLayoutPanel(1, 4), new VLayoutOption(System.Web.UI.WebControls.HorizontalAlign.Justify)); |
|
|
|
|
|
|
|
|
|
|
|
tablePanel.Add(0, 1, 0, 1, CreateMonth()); |
|
|
|
|
|
tablePanel.Add(0, 1, 1, 2, CreateDay()); |
|
|
|
|
|
tablePanel.Add(0, 1, 2, 3, CreateFirstDept()); |
|
|
|
|
|
tablePanel.Add(0, 1, 3, 4, CreateSecondDept()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Control CreateMonth() |
|
|
|
|
|
{ |
|
|
|
|
|
monthTree = new FilterTree() { DisableCancelSelectButton = true }; |
|
|
|
|
|
monthTree.HorizontalRepeatColumns = 10; |
|
|
|
|
|
this.Load += delegate |
|
|
|
|
|
{ |
|
|
|
|
|
if (!IsPostBack) |
|
|
|
|
|
{ |
|
|
|
|
|
monthTree.DataSource.Childs.Clear(); |
|
|
|
|
|
var selected = false; |
|
|
|
|
|
for (var i = 0; i < 6; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
var date = DateTime.Today.AddMonths(i - 5); |
|
|
|
|
|
var v = date.ToString("yyyy-MM"); |
|
|
|
|
|
var node = new FilterTreeNode(v, v, date); |
|
|
|
|
|
if (!selected && date.Year == SelectDate.Year && date.Month == SelectDate.Month) |
|
|
|
|
|
{ |
|
|
|
|
|
node.Selected = true; |
|
|
|
|
|
selected = true; |
|
|
|
|
|
} |
|
|
|
|
|
monthTree.DataSource.Childs.Add(node); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
monthTree.Select += (sender, e) => |
|
|
|
|
|
{ |
|
|
|
|
|
var dt = (DateTime)monthTree.GetSelecteItem().Tag; |
|
|
|
|
|
SelectDate = new DateTime(dt.Year, dt.Month, Math.Min(SelectDate.Day, DateTime.DaysInMonth(dt.Year, dt.Month))); |
|
|
|
|
|
BuildDayTree(); |
|
|
|
|
|
}; |
|
|
|
|
|
monthTree.FilterAction = (query, node) => { }; |
|
|
|
|
|
mTreeContainer.Add("monthTree", monthTree); |
|
|
|
|
|
return monthTree; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Control CreateDay() |
|
|
|
|
|
{ |
|
|
|
|
|
dayTree = new FilterTree() { DisableCancelSelectButton = true }; |
|
|
|
|
|
dayTree.HorizontalRepeatColumns = 31; |
|
|
|
|
|
this.Load += delegate |
|
|
|
|
|
{ |
|
|
|
|
|
if (!IsPostBack) |
|
|
|
|
|
BuildDayTree(); |
|
|
|
|
|
}; |
|
|
|
|
|
dayTree.Select += (sender, e) => |
|
|
|
|
|
{ |
|
|
|
|
|
SelectDate = new DateTime(SelectDate.Year, SelectDate.Month, int.Parse(dayTree.GetSelecteItem().Value)); |
|
|
|
|
|
}; |
|
|
|
|
|
dayTree.FilterAction = (query, node) => { }; |
|
|
|
|
|
mTreeContainer.Add("dayTree", dayTree); |
|
|
|
|
|
return dayTree; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void BuildDayTree() |
|
|
|
|
|
{ |
|
|
|
|
|
dayTree.DataSource.Childs.Clear(); |
|
|
|
|
|
var total = DateTime.DaysInMonth(SelectDate.Year, SelectDate.Month); |
|
|
|
|
|
bool selected = false; |
|
|
|
|
|
for (var i = 1; i <= total; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
var node = new FilterTreeNode(i.ToString(), i.ToString()); |
|
|
|
|
|
if (!selected && SelectDate.Day == i) |
|
|
|
|
|
{ |
|
|
|
|
|
node.Selected = true; |
|
|
|
|
|
selected = true; |
|
|
|
|
|
} |
|
|
|
|
|
dayTree.DataSource.Childs.Add(node); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Tuple<long, string, int>> FirstDepts |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["FirstDepts"] == null) |
|
|
|
|
|
ViewState["FirstDepts"] = GetFirstDepts(); |
|
|
|
|
|
return (List<Tuple<long, string, int>>)ViewState["FirstDepts"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["FirstDepts"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Tuple<long, string, int>> GetFirstDepts() |
|
|
|
|
|
{ |
|
|
|
|
|
var dept = SaleDepartmentInfo; |
|
|
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(Department))); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Name")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Depth")); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", dept.Item2 + 1))); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", dept.Item2), dept.Item1)); |
|
|
|
|
|
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); |
|
|
|
|
|
return query.EExecuteList<long, string, int>(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Tuple<long, int> SaleDepartmentInfo |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["SaleDepartmentInfo"] == null) |
|
|
|
|
|
{ |
|
|
|
|
|
var dept = WebBLUtil.GetSingleDmo<Department>("Name", "销售部", "ID", "Depth"); |
|
|
|
|
|
if (dept == null) |
|
|
|
|
|
throw new Exception("没有名称为销售部的部门"); |
|
|
|
|
|
ViewState["SaleDepartmentInfo"] = new Tuple<long, int>(dept.ID, dept.Depth); |
|
|
|
|
|
} |
|
|
|
|
|
return (Tuple<long, int>)ViewState["SaleDepartmentInfo"]; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Tuple<long, string, int>> SecondDepts |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["SecondDepts"] == null) |
|
|
|
|
|
ViewState["SecondDepts"] = GetSecondDepts(); |
|
|
|
|
|
return (List<Tuple<long, string, int>>)ViewState["SecondDepts"]; |
|
|
|
|
|
} |
|
|
|
|
|
set { ViewState["SecondDepts"] = value; } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Tuple<long, string, int>> GetSecondDepts() |
|
|
|
|
|
{ |
|
|
|
|
|
var selectedItem = firstFilterTree.GetSelecteItem(); |
|
|
|
|
|
if (!selectedItem.Selected || string.IsNullOrEmpty(selectedItem.Value)) |
|
|
|
|
|
return new List<Tuple<long, string, int>>(); |
|
|
|
|
|
var info = selectedItem.Tag as Tuple<long, string, int>; |
|
|
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(Department))); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Name")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Depth")); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", info.Item3 + 1))); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", info.Item3), info.Item1)); |
|
|
|
|
|
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); |
|
|
|
|
|
return query.EExecuteList<long, string, int>(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static FilterTree firstFilterTree; |
|
|
|
|
|
private Control CreateFirstDept() |
|
|
|
|
|
{ |
|
|
|
|
|
firstFilterTree = new FilterTree() { AllLinkOnFirst = true }; |
|
|
|
|
|
firstFilterTree.HorizontalRepeatColumns = 10; |
|
|
|
|
|
this.Load += delegate |
|
|
|
|
|
{ |
|
|
|
|
|
if (!IsPostBack) |
|
|
|
|
|
{ |
|
|
|
|
|
firstFilterTree.DataSource.Childs.Clear(); |
|
|
|
|
|
foreach (var item in FirstDepts) |
|
|
|
|
|
{ |
|
|
|
|
|
var node = new FilterTreeNode(item.Item2, item.Item1.ToString()); |
|
|
|
|
|
node.Tag = item; |
|
|
|
|
|
firstFilterTree.DataSource.Childs.Add(node); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
mTreeContainer.Add("First", firstFilterTree); |
|
|
|
|
|
firstFilterTree.Select += (sender, e) => |
|
|
|
|
|
{ |
|
|
|
|
|
SecondDepts = GetSecondDepts(); |
|
|
|
|
|
BuildSecond(); |
|
|
|
|
|
}; |
|
|
|
|
|
firstFilterTree.FilterAction = (query, node) => |
|
|
|
|
|
{ |
|
|
|
|
|
if (!string.IsNullOrEmpty(node.Value)) |
|
|
|
|
|
{ |
|
|
|
|
|
var info = node.Tag as Tuple<long, string, int>; |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), string.Format("TreeDeep{0}ID", info.Item3), info.Item1)); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
return firstFilterTree; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void BuildSecond() |
|
|
|
|
|
{ |
|
|
|
|
|
secondFilterTree.DataSource.Childs.Clear(); |
|
|
|
|
|
foreach (var item in SecondDepts) |
|
|
|
|
|
{ |
|
|
|
|
|
var node = new FilterTreeNode(item.Item2, item.Item1.ToString()); |
|
|
|
|
|
node.Tag = item; |
|
|
|
|
|
secondFilterTree.DataSource.Childs.Add(node); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static FilterTree secondFilterTree; |
|
|
|
|
|
private Control CreateSecondDept() |
|
|
|
|
|
{ |
|
|
|
|
|
secondFilterTree = new FilterTree() { AllLinkOnFirst = true }; |
|
|
|
|
|
secondFilterTree.HorizontalRepeatColumns = 10; |
|
|
|
|
|
this.Load += delegate |
|
|
|
|
|
{ |
|
|
|
|
|
if (!IsPostBack) |
|
|
|
|
|
BuildSecond(); |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
mTreeContainer.Add("Second", secondFilterTree); |
|
|
|
|
|
secondFilterTree.FilterAction = (query, node) => |
|
|
|
|
|
{ |
|
|
|
|
|
if (!string.IsNullOrEmpty(node.Value)) |
|
|
|
|
|
{ |
|
|
|
|
|
var info = node.Tag as Tuple<long, string, int>; |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), string.Format("TreeDeep{0}ID", info.Item3), info.Item1)); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
return secondFilterTree; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品" }; |
|
|
|
|
|
|
|
|
|
|
|
protected override DQueryDom GetQueryDom() |
|
|
|
|
|
{ |
|
|
|
|
|
var saleDepth = SaleDepartmentInfo.Item2; |
|
|
|
|
|
var main = new JoinAlias(typeof(TempClass)); |
|
|
|
|
|
var dept = new JoinAlias("dept", typeof(Department)); |
|
|
|
|
|
var _3Dept = new JoinAlias("_3Dept", typeof(Department)); |
|
|
|
|
|
var customer = new JoinAlias(typeof(Customer)); |
|
|
|
|
|
var goods = new JoinAlias(typeof(SaleGoods)); |
|
|
|
|
|
var query = new DQueryDom(main); |
|
|
|
|
|
TempClass.Register(query, SelectDate); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID")); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(DQExpression.LogicCase(DQCondition.GreaterThanOrEqual(dept, "Depth", saleDepth + 3), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 3)), DQCondition.EQ(dept, "Depth", saleDepth + 2), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 2)), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 1))), DQExpression.Field(_3Dept, "ID"))); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(main, "Customer_ID", customer, "ID")); |
|
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID")); |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Name", _3Dept, "销售部门")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "Name")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ExtensionsCatalog1_Name", customer, "客户分类")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_Name")); |
|
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "ID")); |
|
|
|
|
|
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(_3Dept, "ID")); |
|
|
|
|
|
foreach (var item in goodsBrand) |
|
|
|
|
|
{ |
|
|
|
|
|
if (item == "条类") |
|
|
|
|
|
{ |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<整数>?>(), item + "|上周日均头数")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("SecondNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), item + "|头数")); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<整数>?>(), item + "|上周日均重量")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), item + "|重量")); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 2), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<整数>?>(), "上周日均重量")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 1), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), "当日重量合计")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<整数>?>(), "熟食|上周日均重量")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), "熟食|重量")); |
|
|
|
|
|
|
|
|
|
|
|
var idx = 0; |
|
|
|
|
|
foreach (var col in query.Columns) |
|
|
|
|
|
{ |
|
|
|
|
|
ColumnNames.Add(col.Name); |
|
|
|
|
|
if (idx > 1) |
|
|
|
|
|
{ |
|
|
|
|
|
SumColumnNames.Add(col.Name); |
|
|
|
|
|
GroupSumColumnNamnes.Add(col.Name); |
|
|
|
|
|
} |
|
|
|
|
|
idx++; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
class TempClass |
|
|
|
|
|
{ |
|
|
|
|
|
public long? Department_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long? Customer_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public long? Goods_ID { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public int Type { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public Money<decimal>? MainNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public Money<decimal>? SecondNumber { get; set; } |
|
|
|
|
|
|
|
|
|
|
|
public static void Register(DQueryDom root, DateTime date) |
|
|
|
|
|
{ |
|
|
|
|
|
var q1 = GetSaleOutStore(true, date); |
|
|
|
|
|
q1.UnionNext.Select = GetSaleOutStore(false, date); |
|
|
|
|
|
|
|
|
|
|
|
root.RegisterQueryTable(typeof(TempClass), new string[] { "Department_ID", "Customer_ID", "Goods_ID", "Type", "MainNumber", "SecondNumber" }, q1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static DQueryDom GetSaleOutStore(bool today, DateTime date) |
|
|
|
|
|
{ |
|
|
|
|
|
var main = new JoinAlias(today + "M", typeof(SaleOutStore)); |
|
|
|
|
|
var detail = new JoinAlias(today + "D", typeof(SaleOutStore_Detail)); |
|
|
|
|
|
//var dept = new JoinAlias("dept", typeof(Department));
|
|
|
|
|
|
var query = new DQueryDom(main); |
|
|
|
|
|
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID")); |
|
|
|
|
|
// query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID"));
|
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Department_ID", main)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("Customer_ID", main)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(today ? 1 : 2), "Type")); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail)); |
|
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); |
|
|
|
|
|
var timeRange = GetDateRange(today, date); |
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.GreaterThanOrEqual("BillState", 单据状态.已审核), DQCondition.Between("LoadTime", timeRange.Item1, timeRange.Item2))); |
|
|
|
|
|
return query; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static Tuple<DateTime, DateTime> GetDateRange(bool today, DateTime date) |
|
|
|
|
|
{ |
|
|
|
|
|
if (today) |
|
|
|
|
|
return new Tuple<DateTime, DateTime>(date, date + new TimeSpan(23, 59, 59)); |
|
|
|
|
|
var d = (int)date.DayOfWeek; |
|
|
|
|
|
if (date.DayOfWeek == DayOfWeek.Sunday) |
|
|
|
|
|
d = 7; |
|
|
|
|
|
var beforeWeek = date.AddDays(-d); |
|
|
|
|
|
return new Tuple<DateTime, DateTime>(beforeWeek.AddDays(-6), beforeWeek); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |