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.

586 lines
22 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 System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using POSV.ShoppingCart;
using DevComponents.DotNetBar.Controls;
using POSV.Utils;
using DevComponents.DotNetBar.SuperGrid;
using POSV.Entity;
using POSV.Helper;
using POSV.Component;
namespace POSV.WaiMai
{
public partial class DeliveryManager : BusinessForm
{
public DeliveryManager()
{
InitializeComponent();
this.Name = "DeliveryManager";
this.WindowState = FormWindowState.Maximized;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
DefaultGridStyle.setDefaultGridStyle(this.deliveryGrid);
DefaultGridStyle.setDefaultGridStyle(this.superGridControl1);
this.controlBox.ForeColor = Color.White;
this.controlBox.Text = "外送单管理";
this.panelEx4.Width = this.Width / 2;
Task.Factory.StartNew(() =>
{
this.Invoke(new Action(() =>
{
this.checkBoxX5.Checked = true;
}));
});
}
private void OnControlBoxMinClick(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
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();
}
int status = 0;
/// <summary>
/// 状态变更
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnStatusCheckedChanged(object sender, EventArgs e)
{
//0 - 新建未配送,1 - 已配送2 - 已交单
if (sender is CheckBoxX)
{
var check = sender as CheckBoxX;
status = StringUtils.GetInt(check.Tag);
OnFlushClick(sender, e);
}
}
/// <summary>
/// 刷新
/// </summary>
private void OnFlushClick(object sender, EventArgs e)
{
var panel = this.deliveryGrid.PrimaryGrid;
panel.Rows.Clear();
this.superGridControl1.PrimaryGrid.Rows.Clear();
List<OrderDelivery> deliveryList = null;
var worker = this.txtWorker.Tag as Worker;
string postWorkerNo = null;
if (worker != null)
{
postWorkerNo = worker.No;
}
using (var db = Global.Instance.OpenDataBase)
{
if (string.IsNullOrEmpty(postWorkerNo))
{
deliveryList = db.Fetch<OrderDelivery>(@"where status = @0 order by createDate", status);
}
else
{
deliveryList = db.Fetch<OrderDelivery>(@"where workerNo = @0 and status = @1 order by createDate", postWorkerNo, status);
}
}
if (deliveryList != null)
{
using (var db = Global.Instance.OpenDataBase)
{
foreach (var order in deliveryList)
{
string statusStr = string.Empty;
switch (order.Status)
{
case 0:
statusStr = "已下单";
break;
case 1:
statusStr = "已送出";
break;
case 2:
statusStr = "已交单";
break;
}
order.StatusStr = statusStr;
var _itemdata = db.Fetch<OrderItem>(string.Format("where tradeNo = '{0}'", order.TradeNo));
foreach (var item in _itemdata)
{
item.Promotions = db.Fetch<PromotionItem>(@"where tradeNo = @0 and itemId= @1", order.TradeNo, item.Id);
}
order.Amount = _itemdata.Where(f => f.RowState != OrderRowState.).Sum(f => f.ReceivableAmount);
}
}
}
panel.DataSource = deliveryList;
//var tradeNos = string.Join("','", deliveryList.Select(f => f.TradeNo).ToArray());
//tradeNos = "'" + tradeNos + "'";
//// List<OrderItem> itemList = new List<OrderItem>();
//using (var db = Global.Instance.OpenDataBase)
//{
// var itemList = db.Query<OrderItem>(string.Format("where tradeNo in ({0})", tradeNos)).ToList();
this.lbldeliverymoney.Text = deliveryList.Sum(f => f.Amount).ToString();
//}
this.lbldeliverycount.Text = deliveryList.Count.ToString();
}
private void OnOrderRowActivated(object sender, DevComponents.DotNetBar.SuperGrid.GridRowActivatedEventArgs e)
{
var grid = e.GridPanel;
if (e.NewActiveRow != null)
{
GridRow row = e.NewActiveRow as GridRow;
grid.SetSelected(e.NewActiveRow, false);
grid.SetActiveRow(e.NewActiveRow);
var tradeNo = row.Cells["TradeNo"].Value.ToString();
QueryOrderItem(tradeNo);
}
}
private void QueryOrderItem(string tradeNo)
{
List<OrderItem> itemList = new List<OrderItem>();
using (var db = Global.Instance.OpenDataBase)
{
itemList = db.Fetch<OrderItem>(@"where tradeNo = @0", tradeNo);
}
using (var db = Global.Instance.OpenDataBase)
{
foreach (var item in itemList)
{
item.Promotions = db.Fetch<PromotionItem>(@"where tradeNo = @0 and itemId= @1", tradeNo, item.Id);
if (item.RowState == OrderRowState.)
{
item.Price = 0M;
}
}
}
this.superGridControl1.PrimaryGrid.DataSource = itemList;
this.lblsupercount.Text = itemList.Where(f => f.RowState != OrderRowState.).Sum(f => f.Quantity).ToString();
this.lblRefundQuantity.Text = itemList.Where(f => f.RowState != OrderRowState.).Sum(f => f.RefundQuantity).ToString();
this.lblsupermoney.Text = itemList.Where(f => f.RowState != OrderRowState.).Sum(f => f.ReceivableAmount).ToString();
}
private void OnQuerySendWorkerClick(object sender, EventArgs e)
{
this.txtWorker.Text = string.Empty;
this.txtWorker.Tag = null;
WorkerSelectForm workerForm = new WorkerSelectForm();
workerForm.OnSelectedWorker -= OnSelectedWorker;
workerForm.OnSelectedWorker += OnSelectedWorker;
workerForm.ShowDialog();
}
private void OnSelectedWorker(Worker worker)
{
this.txtWorker.Text = worker.Name;
this.txtWorker.Tag = worker;
OnFlushClick(this, null);
}
private void OnOrderSendTouchClick(object sender, EventArgs e)
{
List<string> tradeNoList = new List<string>();
var panel = this.deliveryGrid.PrimaryGrid;
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
if (row.Checked)
{
var status = StringUtils.GetString(row["StatusStr"].Value);
if (status == "已下单")
{
var no = StringUtils.GetString(row["TradeNo"].Value);
tradeNoList.Add(no);
}
else
{
ShowToastNotify(this, "已下单的订单才允许送出!");
return;
}
}
}
if (tradeNoList.Count > 0)
{
if (tradeNoList.Count > 1)
{
ShowToastNotify(this, "每次只能操作一单");
}
else
{
OrderDelivery _order = null;
using (var db = Global.Instance.OpenDataBase)
{
_order = db.FirstOrDefault<OrderDelivery>(@"where tradeNo = @0 and status = 0", tradeNoList[0]);
}
if (_order == null)
{
this.ShowToastNotify(this, "无此订单!");
}
else
{
var dialogForm = new DeliverySendForm(_order);
dialogForm.AcceptButtonClick += (o, args) =>
{
OnFlushClick(this, null);
};
dialogForm.CancelButtonClick += (o, args) => { };
TransparentForm trans = new TransparentForm(this, dialogForm);
trans.Show(this);
}
}
}
else
{
ShowToastNotify(this, "请勾选订单!");
}
}
/// <summary>
/// 交单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnOrderSubmitClick(object sender, EventArgs e)
{
//获取选中的tradeNo
List<string> tradeNoList = new List<string>();
var panel = this.deliveryGrid.PrimaryGrid;
string sWorker = null;
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
if (row.Checked)
{
var tempWorker = StringUtils.GetString(row["WorkerNo"].Value);
if (sWorker == null)
{
sWorker = tempWorker;
}
else if (sWorker != tempWorker)
{
ShowToastNotify(this, "请选择相同配送员进行交单!");
return;
}
var status = StringUtils.GetString(row["StatusStr"].Value);
if (status == "已送出")
{
var no = StringUtils.GetString(row["TradeNo"].Value);
tradeNoList.Add(no);
}
else
{
ShowToastNotify(this, "已送出的订单才允许交单!");
return;
}
}
}
if (tradeNoList.Count > 0)
{
var dialogForm = new DeliverySubmitForm(tradeNoList);
dialogForm.AcceptButtonClick += (o, args) =>
{
OnFlushClick(this, null);
};
dialogForm.CancelButtonClick += (o, args) => { };
TransparentForm trans = new TransparentForm(this, dialogForm);
trans.Show(this);
}
else
{
ShowToastNotify(this, "请勾选订单");
}
}
/// <summary>
/// 重打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RePrintClick(object sender, EventArgs e)
{
List<string> tradeNoList = new List<string>();
var panel = this.deliveryGrid.PrimaryGrid;
if (panel.Rows.Count <= 0)
{
ShowToastNotify(this, "请选择订单");
return;
}
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
if (row.Checked)
{
//自动切纸
bool cutPager = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_CASHIER_ALLOW_CUT_PAGER, false);
//票头空白行
int headerLine = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_HEADER_EMPTY, 0);
//票尾空白行
int footerLine = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_FOOTER_EMPTY, 0);
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo(row["TradeNo"].Value.ToString());
_OrderObject.RPrint = true;
var ret = PrintHelper.BuilderDeliveryTicketVariable(_OrderObject);
LOGGER.Info("开始打印电话外送小票<{0}>", _OrderObject.TradeNo);
var prt = PrintHelper.PrinterTicket("电话外卖", ret, cutPager, false, headerLine, footerLine);
LOGGER.Info("补打电话外送小票打印结果<{0},{1},{2}>", _OrderObject.TradeNo, prt.Item1, prt.Item2);
if (!prt.Item1)
{
this.ShowToastNotify(this, prt.Item2);
}
}
}
}
/// <summary>
/// 全选反选
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnCheckedAllChanged(object sender, EventArgs e)
{
var obj = sender as CheckBoxX;
var panel = this.deliveryGrid.PrimaryGrid;
if (obj.Checked)
{
//全选
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
row.Checked = true;
}
}
else
{
//全取消
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
row.Checked = false;
}
}
}
private void buttonX3_Click(object sender, EventArgs e)
{
try
{
//获取选中的tradeNo
List<string> tradeNoList = new List<string>();
var panel = this.deliveryGrid.PrimaryGrid;
string sWorker = null;
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
if (row.Checked)
{
var tempWorker = StringUtils.GetString(row["WorkerNo"].Value);
if (sWorker == null)
{
sWorker = tempWorker;
}
else if (sWorker != tempWorker)
{
ShowToastNotify(this, "请选择相同配送员进行退单!");
return;
}
var status = StringUtils.GetString(row["StatusStr"].Value);
if (status == "已送出")
{
var no = StringUtils.GetString(row["TradeNo"].Value);
tradeNoList.Add(no);
}
else
{
ShowToastNotify(this, "已送出的订单才允许退单!");
return;
}
}
}
if (tradeNoList.Count > 0)
{
DialogForm dialog = new DialogForm("操作提醒", "您确定退此外卖订单吗?", MessageBoxIcon.Warning, MessageBoxButtons.OKCancel);
if (DialogResult.OK != dialog.ShowDialog())
{
return;
}
var tradeNos = string.Join("','", tradeNoList);
tradeNos = "'" + tradeNos + "'";
using (var db = Global.Instance.OpenDataBase)
{
using (var _Tran = db.GetTransaction())
{
//变更外送单状态
string takeOutSqlTem = string.Format("update pos_order_delivery set [status] = 2, [settlementDate] = '{0}' where [tradeNo] in ({1});", DateTimeUtils.GetNowFormat(), tradeNos);
SqliteUtils.Execute(takeOutSqlTem);
var _order = db.Query<OrderObject>(string.Format("where tradeNo in ({0})", tradeNos));
foreach (var item in _order)
{
var _item = db.Query<OrderItem>(string.Format("where orderId = '{0}'", item.Id)).ToList();
_item.ForEach(f =>
{
f.RefundQuantity = f.Quantity;
db.Update(f);
});
foreach (var orderitem in _item)
{
var _mack = db.Query<FlavorItem>(string.Format("where itemId = '{0}'", orderitem.Id)).ToList();
if (_mack.Count == 0)
{
continue;
}
_mack.ForEach(f => { f.RefundQuantity = f.Quantity; });
orderitem.Flavors = _mack;
db.Update(_mack);
}
item.Items = _item;
var _pay = db.FirstOrDefault<OrderPay>(string.Format("where orderId = '{0}'", item.Id));
_pay.PaidAmount = item.ProductReceivableAmount;
_pay.Amount = item.ProductReceivableAmount;
_pay.Status = ((int)OrderPaymentStatus.).ToString();
_pay.No = "01";
_pay.Name = "人民币";
_pay.StatusDesc = "电话外卖交单";
_pay.Memo = "电话外卖交单";
db.Update(_pay);
item.OrderStatus = OrderStatus.退;
item.PayState = ((int)OrderPaymentStatus.).ToString();
item.UploadStatus = 0;
item.Items = _item.ToList();
item.SyncStatus = 0;
item.UploadErrors = 0;
db.Update(item);
}
_Tran.Complete();
}
}
ShowToastNotify(this, "退单成功!");
OnFlushClick(sender, e);
}
}
catch (Exception ex)
{
ShowToastNotify(this, "退单失败!");
return;
}
}
private void buttonX4_Click(object sender, EventArgs e)
{
//获取选中的tradeNo
List<string> tradeNoList = new List<string>();
var panel = this.deliveryGrid.PrimaryGrid;
string sWorker = null;
foreach (var tempRow in panel.Rows)
{
var row = tempRow as GridRow;
if (row.Checked)
{
var tempWorker = StringUtils.GetString(row["WorkerNo"].Value);
if (sWorker == null)
{
sWorker = tempWorker;
}
else if (sWorker != tempWorker)
{
ShowToastNotify(this, "请选择相同配送员进行退菜!");
return;
}
var status = StringUtils.GetString(row["StatusStr"].Value);
if (status == "已送出")
{
var no = StringUtils.GetString(row["TradeNo"].Value);
tradeNoList.Add(no);
}
else
{
ShowToastNotify(this, "已送出的订单才允许退菜!");
return;
}
}
}
if (tradeNoList.Count > 0)
{
var dialogForm = new DeliverySubmitForm(tradeNoList, true);
dialogForm.AcceptButtonClick += (o, args) =>
{
OnFlushClick(this, null);
};
dialogForm.CancelButtonClick += (o, args) => { };
TransparentForm trans = new TransparentForm(this, dialogForm);
trans.Show(this);
}
else
{
ShowToastNotify(this, "请勾选订单");
}
}
}
}