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.

338 lines
12 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 PaySummary : BusinessForm
{
public int orderType = -1;
public int incomeFlag = -1;
public string workerNo = "";
public PaySummary()
{
InitializeComponent();
this.controlBox1.Text = LangProxy.ToLang("支付方式汇总");
this.controlBox1.ShowApplicationVersion = false;
}
List<SalesPaySummary> listPay = new List<SalesPaySummary>();
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
DefaultGridStyle.setDefaultGridStyle(this.payListTable);
this.startPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.StartTimeSimple);
this.endPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.EndTimeSimple);
//打开界面默认加载第一个TAB
QueryTicket();
}
public List<SalesPaySummary> getDishList(string workerNo ,int incomeF, int busMode,string startTime, string endTime)
{
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select pos_order_pay.no as payTypeNo ,pos_order_pay.name as payTypeName, count(pos_order_pay.id) as payCount, ");
sqlBuld.Append(" sum(pos_order_pay.amount) as amount,sum(pos_order_pay.paidAmount) as paidAmount,sum(pos_order_pay.changeAmount) as changeAmount, ");
sqlBuld.Append(" sum(pos_order_pay.overAmount) as overAmount,incomeFlag ");
sqlBuld.Append(" from pos_order_pay ");
sqlBuld.Append(" left join pos_order on pos_order_pay.orderId= pos_order.id ");
sqlBuld.Append(" where pos_order.finishDate >= '{0}' and pos_order.finishDate <= '{1}' ");
if (busMode >= 0)
{
sqlBuld.Append(" and pos_order.orderType = " + busMode + " ");
}
if (incomeF >= 0)
{
sqlBuld.Append(" and pos_order_pay.incomeFlag = " + incomeF + " ");
}
if (!"".Equals(workerNo)) {
sqlBuld.Append(" and pos_order.workerNo = '" + workerNo + "' ");
}
sqlBuld.Append(" and pos_order.orderStatus in(2,4) ");
sqlBuld.Append(" group by pos_order_pay.no ");
sqlBuld.Append(" order by payCount desc");
string sql = string.Format(sqlBuld.ToString(), startTime, endTime);
listPay = db.Query<SalesPaySummary>(sql).ToList();
if (listPay == null)
{
listPay = new List<SalesPaySummary>();
}
decimal sumPayCount = 0;
decimal sumAmount = 0.0M;
decimal overAmount = 0.0M;
foreach (SalesPaySummary salesPaySummary in listPay)
{
sumPayCount = sumPayCount + salesPaySummary.PayCount;
sumAmount = sumAmount + salesPaySummary.Amount;
overAmount = overAmount + salesPaySummary.OverAmount;
if (salesPaySummary.IncomeFlag==0) {
salesPaySummary.Income = "否";
}
else {
salesPaySummary.Income = "是";
}
}
foreach (SalesPaySummary salesPaySummary in listPay)
{
if (sumPayCount > 0)
{
salesPaySummary.CountScale = string.Format("{0}%", ((salesPaySummary.PayCount / sumPayCount) * 100).ToString("#0.0000"));
}
else
{
salesPaySummary.CountScale = "0%";
}
if (sumAmount > 0)
{
salesPaySummary.SumRealMoneyScale = string.Format("{0}%", ((salesPaySummary.Amount / sumAmount) * 100).ToString("#0.0000"));
}
else
{
salesPaySummary.SumRealMoneyScale = "0%";
}
}
SalesPaySummary summary = new SalesPaySummary();
summary.PayTypeNo ="合计";
summary.PayCount = (int)sumPayCount;
summary.Amount = sumAmount;
summary.OverAmount = overAmount;
listPay.Add(summary);
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
return listPay;
}
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_exit_Click(object sender, EventArgs e)
{
OnCloseTouchClick(sender, e);
}
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;
QueryTicket();
}
private void btn_query_Click(object sender, EventArgs e)
{
QueryTicket();
}
private void tab_onclick(object sender, EventArgs e)
{
var obj = sender as SuperTabItem;
var name = obj.Tag as string;
switch (name)
{
case "superTabItem1"://支付方式汇总
QueryTicket();
break;
}
}
private void OnGridPostRenderRow(object sender, GridPostRenderRowEventArgs e)
{
var row = e.GridRow as GridRow;
row.CellStyles.Default.Background.Color1 = Color.AliceBlue;
}
private void OnBind(object sender, GridDataBindingCompleteEventArgs e)
{
var panel = e.GridPanel;
foreach (var r in panel.Rows)
{
var row = r as GridRow;
var payTypeNo = row.Cells["payTypeNo"].Value.ToString();
if ("合计".Equals(payTypeNo))
{
row.CellStyles.Default.Background.Color1 = Color.AliceBlue;
row.CellStyles.Default.Font = new Font("微软雅黑", 14.00f, FontStyle.Bold, GraphicsUnit.Pixel);
}
}
}
private void btn_print_Click(object sender, EventArgs e)
{
PrintSalesPaySummary printSalesPaySummary = new PrintSalesPaySummary();
printSalesPaySummary.StoreNo = Global.Instance.Worker.StoreInfo.No;
printSalesPaySummary.StoreName = Global.Instance.Worker.StoreInfo.PrintName;
printSalesPaySummary.WorkerNo = workerNo;
printSalesPaySummary.WorkerName = "";
printSalesPaySummary.PrintTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
printSalesPaySummary.StartTime = this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
printSalesPaySummary.EndTime = this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
printSalesPaySummary.TotalCount = string.Format("{0}", 0);
printSalesPaySummary.TotalMoney = string.Format("{0}", 0.00M);
List<SalesPaySummary> imtes = new List<SalesPaySummary>();
foreach (SalesPaySummary pay in listPay)
{
if (!"合计".Equals(pay.PayTypeNo))
{
imtes.Add(pay);
}
else
{
printSalesPaySummary.TotalCount = string.Format("{0}", pay.PayCount);
printSalesPaySummary.TotalMoney = string.Format("{0}", pay.Amount);
}
}
printSalesPaySummary.Items = imtes;
this.ShowToastNotify(this, "开始打印");
//构建收银小票模版参数
var vars = ReportHelper.BuilderPayVariable(printSalesPaySummary);
Tuple<bool, string> result = ReportHelper.PrinterTicket("收银方式汇总", vars, true, false);
this.ShowToastNotify(this, string.Format("{0}", result.Item2));
}
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() {
workerNo = StringUtils.GetString(txtWorkNo.Text);
if (!"".Equals(workerNo) && workerNo.Length < 5)
{
int length = 5 - workerNo.Length;
for (int i = 0; i < length; i++)
{
workerNo = "0" + workerNo;
}
}
listPay = getDishList(workerNo, incomeFlag , orderType,this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"), this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"));
payListTable.PrimaryGrid.DataSource = listPay;
}
private void cb_change_click(object sender, EventArgs e)
{
var obj = sender as CheckBoxX;
var indexT = obj.Tag as string;
if ("全部".Equals(indexT))
{
orderType = -1;
}
if ("堂食".Equals(indexT))
{
orderType = 0;
}
if ("外带".Equals(indexT))
{
orderType = 1;
}
if ("电话外卖".Equals(indexT))
{
orderType = 2;
}
if ("餐桌".Equals(indexT))
{
orderType = 3;
}
if ("美团外卖".Equals(indexT))
{
orderType = 4;
}
if ("饿了么".Equals(indexT))
{
orderType = 5;
}
if ("百度外卖".Equals(indexT))
{
orderType = 6;
}
if ("微信点餐".Equals(indexT))
{
orderType = 7;
}
QueryTicket();
}
private void CbIncomeChangeClick(object sender, EventArgs e)
{
var obj = sender as CheckBoxX;
var indexT = obj.Tag as string;
if ("全部".Equals(indexT))
{
incomeFlag = -1;
}
if ("实收".Equals(indexT))
{
incomeFlag = 1;
}
if ("虚收".Equals(indexT))
{
incomeFlag = 0;
}
QueryTicket();
}
}
}