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#

9 months ago
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, "请勾选订单");
}
}
}
}