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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
}
}
}