Browse Source

销售汇总分析。

master^2
yibo 7 years ago
parent
commit
d8c3c7b5ce
1 changed files with 103 additions and 24 deletions
  1. +103
    -24
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs

+ 103
- 24
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs View File

@ -38,19 +38,98 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_
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 list = new List<Tuple<string, string>>();
list.Add(new Tuple<string, string>("First", "一级部门"));
list.Add(new Tuple<string, string>("Second", "二级部门"));
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);
}
}
};
var dic = list.Select((item) => item.Item1).EToHashSet();
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;
}
var tablePanel = vPanel.Add(new TableLayoutPanel(1, 2), new VLayoutOption(System.Web.UI.WebControls.HorizontalAlign.Justify));
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;
}
tablePanel.Add(0, 1, 0, 1, CreateFirstDept());
tablePanel.Add(0, 1, 1, 2, CreateSecondDept());
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>> FirstDepts
@ -195,18 +274,18 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_
var customer = new JoinAlias(typeof(Customer));
var goods = new JoinAlias(typeof(SaleGoods));
var query = new DQueryDom(main);
TempClass.Register(query);
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(dept, "TreeDeep3ID", _3Dept, "ID"));
query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 3), _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("CustomerCatalog_Name", customer));
query.GroupBy.Expressions.Add(DQExpression.Field(customer, "CustomerCatalog_Name"));
query.GroupBy.Expressions.Add(DQExpression.Field(customer, "CustomerCatalog_ID"));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(customer, "CustomerCatalog_ID"));
query.Columns.Add(DQSelectColumn.Field("ExtensionsCatalog1_Name", customer, "客户分类"));
query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_Name"));
query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_ID"));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(customer, "ExtensionsCatalog1_ID"));
foreach (var item in goodsBrand)
{
if (item == "条类")
@ -251,15 +330,15 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_
public Money<decimal>? SecondNumber { get; set; }
public static void Register(DQueryDom root)
public static void Register(DQueryDom root, DateTime date)
{
var q1 = GetSaleOutStore(true);
q1.UnionNext.Select = GetSaleOutStore(false);
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)
static DQueryDom GetSaleOutStore(bool today, DateTime date)
{
var main = new JoinAlias(today + "M", typeof(SaleOutStore));
var detail = new JoinAlias(today + "D", typeof(SaleOutStore_Detail));
@ -273,20 +352,20 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_
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);
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)
static Tuple<DateTime, DateTime> GetDateRange(bool today, DateTime date)
{
if (today)
return new Tuple<DateTime, DateTime>(DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 59));
var d = (int)DateTime.Today.DayOfWeek;
if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday)
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 date = DateTime.Today.AddDays(-d);
return new Tuple<DateTime, DateTime>(date.AddDays(-6), date);
var beforeWeek = date.AddDays(-d);
return new Tuple<DateTime, DateTime>(beforeWeek.AddDays(-6), beforeWeek);
}
}
}


Loading…
Cancel
Save