|
|
using DevComponents.DotNetBar;
|
|
|
using DevComponents.DotNetBar.Controls;
|
|
|
using DevComponents.DotNetBar.SuperGrid;
|
|
|
using POS.Language.Language;
|
|
|
using POSV.Component;
|
|
|
using POSV.Entity.Report;
|
|
|
using POSV.Entity.ReportPrint;
|
|
|
using POSV.Helper;
|
|
|
using POSV.Utils;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Data;
|
|
|
using System.Drawing;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
namespace POSV.Report
|
|
|
{
|
|
|
public partial class TimeSummary : BusinessForm
|
|
|
{
|
|
|
public TimeSummary()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
this.controlBox1.Text = LangProxy.ToLang("时段分析");
|
|
|
this.controlBox1.ShowApplicationVersion = false;
|
|
|
}
|
|
|
public int Timetype = 0;//0不按日期1按日期
|
|
|
public int Index = 1;//时间间隔 1,2,3,4,6
|
|
|
/// <summary>
|
|
|
/// 不按日期汇总
|
|
|
/// </summary>
|
|
|
List<TimeSummaryTicket> listTimeType0 = new List<TimeSummaryTicket>();
|
|
|
/// <summary>
|
|
|
/// 按日期汇总
|
|
|
/// </summary>
|
|
|
List<TimeSummaryTicket> listTimeType1 = new List<TimeSummaryTicket>();
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
{
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
if (this.DesignMode) return;
|
|
|
|
|
|
DefaultGridStyle.setDefaultGridStyle(this.timeDateListTable);
|
|
|
|
|
|
DefaultGridStyle.setDefaultGridStyle(this.timeListTable);
|
|
|
|
|
|
this.startPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.StartTimeSimple);
|
|
|
this.endPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.EndTimeSimple);
|
|
|
listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeListTable.PrimaryGrid.DataSource = listTimeType0;
|
|
|
}
|
|
|
|
|
|
private void OnControlBoxCloseClick(object sender, EventArgs e)
|
|
|
{
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
}
|
|
|
|
|
|
|
|
|
private void OnCloseTouchClick(object sender, EventArgs e)
|
|
|
{
|
|
|
//先关闭父窗体
|
|
|
if (this.Owner != null)
|
|
|
{
|
|
|
this.Owner.Close();
|
|
|
}
|
|
|
//再关闭当前窗体
|
|
|
this.Close();
|
|
|
}
|
|
|
|
|
|
|
|
|
private void btn_query_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
QueryTicket();
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void btn_time_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
var obj = sender as ButtonX;
|
|
|
var typeStr = obj.Tag as string;
|
|
|
var type = (ReportQuickDate)Enum.Parse(typeof(ReportQuickDate), typeStr);
|
|
|
var res = DateTimeUtils.CalculateBusinessPlanDate(type, this.startPicker.Value, this.endPicker.Value);
|
|
|
this.startPicker.Value = res.Item1;
|
|
|
this.endPicker.Value = res.Item2;
|
|
|
if (Timetype == 0)
|
|
|
{
|
|
|
listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeListTable.PrimaryGrid.DataSource = listTimeType0;
|
|
|
|
|
|
}
|
|
|
else if (Timetype == 1)
|
|
|
{
|
|
|
listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeDateListTable.PrimaryGrid.DataSource = listTimeType1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public List<TimeSummaryTicket> getTimeList(DateTime startTime, DateTime endTime)
|
|
|
{
|
|
|
List<TimeSummaryTicket> listSum = new List<TimeSummaryTicket>();
|
|
|
List<TimeSummaryTicket> list = null;
|
|
|
try
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
StringBuilder sqlBuld = new StringBuilder();
|
|
|
if (Timetype == 0)
|
|
|
{
|
|
|
sqlBuld.Append(" select SUBSTR(finishDate,12,2) as dateHour, count(*) as sumCount,sum(amount) as sumAmount,sum(receivableAmount) as sumReceivableAmount ");
|
|
|
sqlBuld.Append(" from pos_order ");
|
|
|
sqlBuld.Append(" where pos_order.finishDate >= '{0}' and pos_order.finishDate <= '{1}' ");
|
|
|
sqlBuld.Append(" and pos_order.orderStatus in(2,4) ");
|
|
|
sqlBuld.Append(" group by dateHour order by dateHour ");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
sqlBuld.Append(" select SUBSTR(finishDate,0,14) as dateHour, count(*) as sumCount,sum(amount) as sumAmount,sum(receivableAmount) as sumReceivableAmount ");
|
|
|
sqlBuld.Append(" from pos_order ");
|
|
|
sqlBuld.Append(" where pos_order.finishDate >= '{0}' and pos_order.finishDate <= '{1}' ");
|
|
|
sqlBuld.Append(" and pos_order.orderStatus in(2,4) ");
|
|
|
sqlBuld.Append(" group by dateHour order by dateHour ");
|
|
|
}
|
|
|
string sql = string.Format(sqlBuld.ToString(), startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
list = db.Query<TimeSummaryTicket>(sql).ToList();
|
|
|
if (list == null)
|
|
|
{
|
|
|
list = new List<TimeSummaryTicket>();
|
|
|
}
|
|
|
//格式化开始结束时间
|
|
|
if (Timetype == 0)
|
|
|
{
|
|
|
DateTime startDateTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
|
|
|
DateTime endDateTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
|
|
|
while (startDateTime < endDateTime)
|
|
|
{
|
|
|
string dateHour = string.Format("{0}-{1}", startDateTime.ToString("HH"), startDateTime.AddHours(+Index).ToString("HH"));
|
|
|
TimeSummaryTicket ticket = new TimeSummaryTicket();
|
|
|
decimal sumCountTicket = 0.0M;
|
|
|
decimal sumAmountTicket = 0.0M;
|
|
|
decimal sumReceivableAmountTicket = 0.0M;
|
|
|
foreach (TimeSummaryTicket timeSummaryTicket in list)
|
|
|
{
|
|
|
DateTime summaryHour = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + timeSummaryTicket.DateHour + ":00:00");
|
|
|
if (DateTime.Compare(startDateTime, summaryHour) <= 0 && DateTime.Compare(startDateTime.AddHours(+Index), summaryHour) > 0)
|
|
|
{
|
|
|
sumCountTicket = sumCountTicket + timeSummaryTicket.SumCount;
|
|
|
sumAmountTicket = sumAmountTicket + timeSummaryTicket.SumAmount;
|
|
|
sumReceivableAmountTicket = sumReceivableAmountTicket + timeSummaryTicket.SumReceivableAmount;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
ticket.DateHour = dateHour;
|
|
|
ticket.SumCount = (int)sumCountTicket;
|
|
|
ticket.SumAmount = sumAmountTicket;
|
|
|
ticket.SumReceivableAmount = sumReceivableAmountTicket;
|
|
|
listSum.Add(ticket);
|
|
|
startDateTime = DateTime.Parse(startDateTime.AddHours(+Index).ToString("yyyy-MM-dd HH:00:00"));
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
DateTime startDateTime = DateTime.Parse(startTime.ToString("yyyy-MM-dd 00:00:00"));
|
|
|
DateTime endDateTime = DateTime.Parse(endTime.ToString("yyyy-MM-dd 23:59:59"));
|
|
|
while (startDateTime < endDateTime)
|
|
|
{
|
|
|
string dateHour = string.Format("{0}-{1}", startDateTime.ToString("yyyy-MM-dd HH:00:00"), startDateTime.AddHours(Index - 1).ToString("yyyy-MM-dd HH:59:59"));
|
|
|
|
|
|
TimeSummaryTicket ticket = new TimeSummaryTicket();
|
|
|
decimal sumCountTicket = 0.0M;
|
|
|
decimal sumAmountTicket = 0.0M;
|
|
|
decimal sumReceivableAmountTicket = 0.0M;
|
|
|
foreach (TimeSummaryTicket timeSummaryTicket in list)
|
|
|
{
|
|
|
DateTime summaryHour = DateTime.Parse(timeSummaryTicket.DateHour + ":00:00");
|
|
|
if (DateTime.Compare(startDateTime, summaryHour) <= 0 && DateTime.Compare(startDateTime.AddHours(Index - 1), summaryHour) >= 0)
|
|
|
{
|
|
|
sumCountTicket = sumCountTicket + timeSummaryTicket.SumCount;
|
|
|
sumAmountTicket = sumAmountTicket + timeSummaryTicket.SumAmount;
|
|
|
sumReceivableAmountTicket = sumReceivableAmountTicket + timeSummaryTicket.SumReceivableAmount;
|
|
|
}
|
|
|
}
|
|
|
ticket.DateHour = dateHour;
|
|
|
ticket.SumCount = (int)sumCountTicket;
|
|
|
ticket.SumAmount = sumAmountTicket;
|
|
|
ticket.SumReceivableAmount = sumReceivableAmountTicket;
|
|
|
|
|
|
if (DateTime.Compare(startTime, DateTime.Parse(startDateTime.ToString("yyyy-MM-dd HH:00:00"))) <= 0 && DateTime.Compare(endTime, DateTime.Parse(startDateTime.AddHours(Index - 1).ToString("yyyy-MM-dd HH:59:59"))) >= 0)
|
|
|
{
|
|
|
listSum.Add(ticket);
|
|
|
}
|
|
|
startDateTime = DateTime.Parse(startDateTime.AddHours(Index).ToString("yyyy-MM-dd HH:00:00"));
|
|
|
}
|
|
|
}
|
|
|
decimal sumCount = 0;
|
|
|
decimal sumAmount = 0.0M;
|
|
|
decimal sumReceivableAmount = 0.0M;
|
|
|
foreach (TimeSummaryTicket timeSummaryTicket in listSum)
|
|
|
{
|
|
|
sumCount = sumCount + timeSummaryTicket.SumCount;
|
|
|
sumAmount = sumAmount + timeSummaryTicket.SumAmount;
|
|
|
sumReceivableAmount = sumReceivableAmount + timeSummaryTicket.SumReceivableAmount;
|
|
|
}
|
|
|
TimeSummaryTicket dish = new TimeSummaryTicket();
|
|
|
dish.DateHour = LangProxy.ToLang("合计");
|
|
|
dish.SumCount = (int)sumCount;
|
|
|
dish.SumAmount = sumAmount;
|
|
|
dish.SumReceivableAmount = sumReceivableAmount;
|
|
|
listSum.Add(dish);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
LOGGER.Error(ex);
|
|
|
}
|
|
|
|
|
|
return listSum;
|
|
|
}
|
|
|
|
|
|
private void btn_exit_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
}
|
|
|
|
|
|
private void cb_change_click(object sender, EventArgs e)
|
|
|
{
|
|
|
var obj = sender as CheckBoxX;
|
|
|
var indexT = obj.Tag as string;
|
|
|
if ("Box1".Equals(indexT) && obj.Checked)
|
|
|
{
|
|
|
Index = 1;
|
|
|
}
|
|
|
else if ("Box2".Equals(indexT) && obj.Checked)
|
|
|
{
|
|
|
Index = 2;
|
|
|
}
|
|
|
else if ("Box3".Equals(indexT) && obj.Checked)
|
|
|
{
|
|
|
Index = 3;
|
|
|
}
|
|
|
else if ("Box4".Equals(indexT) && obj.Checked)
|
|
|
{
|
|
|
Index = 4;
|
|
|
}
|
|
|
else if ("Box6".Equals(indexT) && obj.Checked)
|
|
|
{
|
|
|
Index = 6;
|
|
|
}
|
|
|
if (Timetype == 0)
|
|
|
{
|
|
|
listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeListTable.PrimaryGrid.DataSource = listTimeType0;
|
|
|
|
|
|
}
|
|
|
else if (Timetype == 1)
|
|
|
{
|
|
|
listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeDateListTable.PrimaryGrid.DataSource = listTimeType1;
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private void OnBind(object sender, DevComponents.DotNetBar.SuperGrid.GridDataBindingCompleteEventArgs e)
|
|
|
{
|
|
|
var panel = e.GridPanel;
|
|
|
|
|
|
foreach (var r in panel.Rows)
|
|
|
{
|
|
|
var row = r as GridRow;
|
|
|
|
|
|
var dateHour = row.Cells["dateHour"].Value.ToString();
|
|
|
if (LangProxy.ToLang("合计").Equals(dateHour))
|
|
|
{
|
|
|
row.CellStyles.Default.Background.Color1 = Color.AliceBlue;
|
|
|
|
|
|
row.CellStyles.Default.Font = new Font("宋体", 14.00f, FontStyle.Bold, GraphicsUnit.Pixel);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void tab_onclick(object sender, EventArgs e)
|
|
|
{
|
|
|
var obj = sender as SuperTabItem;
|
|
|
var name = obj.Tag as string;
|
|
|
switch (name)
|
|
|
{
|
|
|
case "superTabItem1"://不按日期
|
|
|
Timetype = 0;
|
|
|
break;
|
|
|
case "superTabItem2"://按日期
|
|
|
Timetype = 1;
|
|
|
break;
|
|
|
}
|
|
|
if (Timetype == 0)
|
|
|
{
|
|
|
listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeListTable.PrimaryGrid.DataSource = listTimeType0;
|
|
|
|
|
|
}
|
|
|
else if (Timetype == 1)
|
|
|
{
|
|
|
listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeDateListTable.PrimaryGrid.DataSource = listTimeType1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void btn_print_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
switch (Timetype)
|
|
|
{
|
|
|
|
|
|
case 0:
|
|
|
{
|
|
|
PrintTimeSummaryTicket printTimeSummaryTicket = new PrintTimeSummaryTicket();
|
|
|
printTimeSummaryTicket.StoreNo = Global.Instance.Worker.StoreInfo.No;
|
|
|
printTimeSummaryTicket.StoreName = Global.Instance.Worker.StoreInfo.PrintName;
|
|
|
printTimeSummaryTicket.WorkerNo = Global.Instance.Worker.No;
|
|
|
printTimeSummaryTicket.WorkerName = Global.Instance.Worker.Name;
|
|
|
printTimeSummaryTicket.PrintTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
printTimeSummaryTicket.StartTime = this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
printTimeSummaryTicket.EndTime = this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
printTimeSummaryTicket.TotalCount = string.Format("{0}", 0);
|
|
|
printTimeSummaryTicket.TotalMoney = string.Format("{0}", 0.00M);
|
|
|
List<TimeSummaryTicket> imtes = new List<TimeSummaryTicket>();
|
|
|
foreach (TimeSummaryTicket ticket in listTimeType0)
|
|
|
{
|
|
|
if (!LangProxy.ToLang("合计").Equals(ticket.DateHour))
|
|
|
{
|
|
|
imtes.Add(ticket);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
printTimeSummaryTicket.TotalCount = string.Format("{0}", ticket.SumCount);
|
|
|
printTimeSummaryTicket.TotalMoney = string.Format("{0}", ticket.SumAmount);
|
|
|
}
|
|
|
}
|
|
|
printTimeSummaryTicket.Items = imtes;
|
|
|
this.ShowToastNotify(this, LangProxy.ToLang("开始打印"));
|
|
|
//构建收银小票模版参数
|
|
|
var vars = ReportHelper.BuilderTimeVariable(printTimeSummaryTicket);
|
|
|
Tuple<bool, string> result = ReportHelper.PrinterTicket("时段分析", vars, true, false);
|
|
|
this.ShowToastNotify(this, string.Format("{0}", result.Item2));
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
case 1:
|
|
|
{
|
|
|
PrintTimeSummaryTicket printTimeSummaryTicket = new PrintTimeSummaryTicket();
|
|
|
printTimeSummaryTicket.StoreNo = Global.Instance.Worker.StoreInfo.No;
|
|
|
printTimeSummaryTicket.StoreName = Global.Instance.Worker.StoreInfo.Name;
|
|
|
printTimeSummaryTicket.WorkerNo = Global.Instance.Worker.No;
|
|
|
printTimeSummaryTicket.WorkerName = Global.Instance.Worker.Name;
|
|
|
printTimeSummaryTicket.PrintTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
printTimeSummaryTicket.StartTime = this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
printTimeSummaryTicket.EndTime = this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
printTimeSummaryTicket.TotalCount = string.Format("{0}", 0);
|
|
|
printTimeSummaryTicket.TotalMoney = string.Format("{0}", 0.00M);
|
|
|
List<TimeSummaryTicket> imtes = new List<TimeSummaryTicket>();
|
|
|
foreach (TimeSummaryTicket ticket in listTimeType1)
|
|
|
{
|
|
|
if (!LangProxy.ToLang("合计").Equals(ticket.DateHour))
|
|
|
{
|
|
|
imtes.Add(ticket);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
printTimeSummaryTicket.TotalCount = string.Format("{0}", ticket.SumCount);
|
|
|
printTimeSummaryTicket.TotalMoney = string.Format("{0}", ticket.SumAmount);
|
|
|
}
|
|
|
}
|
|
|
printTimeSummaryTicket.Items = imtes;
|
|
|
this.ShowToastNotify(this, LangProxy.ToLang("开始打印"));
|
|
|
//构建收银小票模版参数
|
|
|
var vars = ReportHelper.BuilderTimeVariable(printTimeSummaryTicket);
|
|
|
Tuple<bool, string> result = ReportHelper.PrinterTicket("时段分析", vars, true, false);
|
|
|
this.ShowToastNotify(this, string.Format("{0}", result.Item2));
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void OnControlBoxMinClick(object sender, EventArgs e)
|
|
|
{
|
|
|
|
|
|
this.WindowState = FormWindowState.Minimized;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 日期变更
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
private void onDateChange(object sender, EventArgs e)
|
|
|
{
|
|
|
//QueryTicket();
|
|
|
}
|
|
|
|
|
|
public void QueryTicket()
|
|
|
{
|
|
|
|
|
|
if (Timetype == 0)
|
|
|
{
|
|
|
listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeListTable.PrimaryGrid.DataSource = listTimeType0;
|
|
|
|
|
|
}
|
|
|
else if (Timetype == 1)
|
|
|
{
|
|
|
listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value);
|
|
|
timeDateListTable.PrimaryGrid.DataSource = listTimeType1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|