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; /// /// 状态变更 /// /// /// 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); } } /// /// 刷新 /// private void OnFlushClick(object sender, EventArgs e) { var panel = this.deliveryGrid.PrimaryGrid; panel.Rows.Clear(); this.superGridControl1.PrimaryGrid.Rows.Clear(); List 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(@"where status = @0 order by createDate", status); } else { deliveryList = db.Fetch(@"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(string.Format("where tradeNo = '{0}'", order.TradeNo)); foreach (var item in _itemdata) { item.Promotions = db.Fetch(@"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 itemList = new List(); //using (var db = Global.Instance.OpenDataBase) //{ // var itemList = db.Query(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 itemList = new List(); using (var db = Global.Instance.OpenDataBase) { itemList = db.Fetch(@"where tradeNo = @0", tradeNo); } using (var db = Global.Instance.OpenDataBase) { foreach (var item in itemList) { item.Promotions = db.Fetch(@"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 tradeNoList = new List(); 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(@"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, "请勾选订单!"); } } /// /// 交单 /// /// /// private void OnOrderSubmitClick(object sender, EventArgs e) { //获取选中的tradeNo List tradeNoList = new List(); 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, "请勾选订单"); } } /// /// 重打印 /// /// /// private void RePrintClick(object sender, EventArgs e) { List tradeNoList = new List(); 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); } } } } /// /// 全选反选 /// /// /// 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 tradeNoList = new List(); 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(string.Format("where tradeNo in ({0})", tradeNos)); foreach (var item in _order) { var _item = db.Query(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(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(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 tradeNoList = new List(); 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, "请勾选订单"); } } } }