You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

425 lines
19 KiB
C#

9 months ago
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,234,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;
}
}
}
}