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