|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Drawing;
|
|
|
using System.Data;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Windows.Forms;
|
|
|
using POSV.ShoppingCart;
|
|
|
using POSV.Entity;
|
|
|
using DevComponents.DotNetBar;
|
|
|
using System.Threading;
|
|
|
using POSV.MessageEvent;
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace POSV.Bill
|
|
|
{
|
|
|
public partial class BillControl : BaseUserControl
|
|
|
{
|
|
|
|
|
|
private Dictionary<string, AbstractBill> _bills = null;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 收银方式集合
|
|
|
/// </summary>
|
|
|
private Dictionary<string, SuperTabItem> _tabs = null;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 当前选择的付款类型
|
|
|
/// </summary>
|
|
|
private PayMode _currentPayMode = null;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 当期订单对象
|
|
|
/// </summary>
|
|
|
private OrderObject _orderObject = null;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 当前选中的
|
|
|
/// </summary>
|
|
|
private SuperTabItem _currentTabItem = null;
|
|
|
|
|
|
public BillControl()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
|
|
|
//注册结算支付事件通知
|
|
|
MsgEvent.RemoveListener(Constant.ORDER_PAYMENT_FINISHED, this.OrderFinishedEventNotify);
|
|
|
MsgEvent.Receive(Constant.ORDER_PAYMENT_FINISHED, this.OrderFinishedEventNotify);
|
|
|
|
|
|
this._tabs = new Dictionary<string, SuperTabItem>();
|
|
|
|
|
|
|
|
|
this.tabPayMode.SelectedTabChanging -= OnTabPayModeSelectedTabChanging;
|
|
|
this.tabPayMode.SelectedTabChanging += OnTabPayModeSelectedTabChanging;
|
|
|
|
|
|
this.tabPayMode.SelectedTabChanged -= OnTabPayModeSelectedTabChanged;
|
|
|
this.tabPayMode.SelectedTabChanged += OnTabPayModeSelectedTabChanged;
|
|
|
|
|
|
|
|
|
this._bills = new Dictionary<string, AbstractBill>();
|
|
|
//现金
|
|
|
this._bills.Add("01", new CashControl());
|
|
|
|
|
|
//享迷卡
|
|
|
this._bills.Add("49", new MCardControl());
|
|
|
|
|
|
//会员卡
|
|
|
this._bills.Add("02", new MCardControl());
|
|
|
|
|
|
//合码支付,支持微信、支付宝
|
|
|
this._bills.Add("00", new MPayControl());
|
|
|
|
|
|
#region subin 2023-07-01 add
|
|
|
//通联支付
|
|
|
this._bills.Add("50", new AllinPayControl());
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
protected virtual void OrderFinishedEventNotify(object sender, MsgEventArgs args)
|
|
|
{
|
|
|
this.Invoke(new Action(() =>
|
|
|
{
|
|
|
//如果是合码支付,取00
|
|
|
var payModeNo = Constant.HEMA_PAY.Contains(this._currentPayMode.No) ? Constant.HEMA_CODE : this._currentPayMode.No;
|
|
|
var bill = this._bills[payModeNo];
|
|
|
if (bill != null)
|
|
|
{
|
|
|
bill.Clear();
|
|
|
}
|
|
|
|
|
|
}));
|
|
|
}
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
{
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
if (this.DesignMode) return;
|
|
|
}
|
|
|
|
|
|
private void OnTabPayModeSelectedTabChanged(object sender, SuperTabStripSelectedTabChangedEventArgs e)
|
|
|
{
|
|
|
if (e.NewValue != null && e.NewValue.Tag != null)
|
|
|
{
|
|
|
var payMode = e.NewValue.Tag as PayMode;
|
|
|
|
|
|
this._currentPayMode = payMode;
|
|
|
|
|
|
if (RefreshUiLock)
|
|
|
{
|
|
|
this.RefreshUi(this._dataSource, payMode, this._orderObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void OnTabPayModeSelectedTabChanging(object sender, SuperTabStripSelectedTabChangingEventArgs e) { }
|
|
|
|
|
|
private List<PayMode> _dataSource = null;
|
|
|
|
|
|
private List<PayMode> _pagingdataSource = new List<PayMode>();
|
|
|
|
|
|
private int PageNumber = 0;
|
|
|
|
|
|
private bool PagingButton = false;
|
|
|
|
|
|
private bool RefreshUiLock = true;
|
|
|
|
|
|
public void RefreshUi(List<PayMode> dataSource, PayMode selected, OrderObject orderObject)
|
|
|
{
|
|
|
|
|
|
try
|
|
|
{
|
|
|
if (RefreshUiLock)
|
|
|
{
|
|
|
RefreshUiLock = false;
|
|
|
|
|
|
//如果是合码支付,取00
|
|
|
var payModeNo = Constant.HEMA_PAY.Contains(selected.No) ? Constant.HEMA_CODE : selected.No;
|
|
|
|
|
|
//1、判断支付方式是否存本页
|
|
|
if (!this._tabs.ContainsKey(payModeNo))
|
|
|
{
|
|
|
//2、判断是否需分页
|
|
|
if (dataSource.Count >= 8)
|
|
|
{
|
|
|
_pagingdataSource.Clear();
|
|
|
_tabs.Clear();
|
|
|
this.tabPayMode.Tabs.Clear();
|
|
|
ButtonItem buttonItem = new DevComponents.DotNetBar.ButtonItem();
|
|
|
this.tabPayMode.Tabs.AddRange(new DevComponents.DotNetBar.BaseItem[] {
|
|
|
buttonItem});
|
|
|
buttonItem.Image = global::POSV.Properties.Resources.up;
|
|
|
buttonItem.Name = "UpPayType";
|
|
|
buttonItem.Text = "";
|
|
|
buttonItem.Click += ButtonItem_Click;
|
|
|
PagingButton = true;
|
|
|
|
|
|
var _data = dataSource.FirstOrDefault(f => f.No.Equals(selected.No));
|
|
|
|
|
|
_pagingdataSource.Add(_data);
|
|
|
//3、分页
|
|
|
_pagingdataSource.AddRange(dataSource.Where(f => !f.No.Equals(_data.No)).Skip(PageNumber * 8).Take(7).ToList());
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
_pagingdataSource = dataSource;
|
|
|
}
|
|
|
}
|
|
|
this._dataSource = dataSource;
|
|
|
|
|
|
this._orderObject = orderObject;
|
|
|
|
|
|
this.tabPayMode.Visible = false;
|
|
|
|
|
|
AbstractBill bill = null;
|
|
|
|
|
|
foreach (var mode in this._pagingdataSource)
|
|
|
{
|
|
|
if (!this._tabs.ContainsKey(mode.No))
|
|
|
{
|
|
|
//支付宝和微信并入合码支付
|
|
|
if (Constant.HEMA_PAY.Contains(mode.No))
|
|
|
{
|
|
|
//尚未添加合码支付
|
|
|
if (!this._tabs.ContainsKey(Constant.HEMA_CODE))
|
|
|
{
|
|
|
SuperTabItem tab = this.tabPayMode.CreateTab("合码支付");
|
|
|
|
|
|
tab.Tag = mode;
|
|
|
tab.FixedTabSize = new Size(0, 45);
|
|
|
this._tabs.Add(Constant.HEMA_CODE, tab);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
SuperTabItem tab = this.tabPayMode.CreateTab(mode.Name);
|
|
|
|
|
|
tab.Tag = mode;
|
|
|
tab.FixedTabSize = new Size(0, 45);
|
|
|
this._tabs.Add(mode.No, tab);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (PagingButton)
|
|
|
{
|
|
|
PagingButton = false;
|
|
|
ButtonItem buttonItem = new DevComponents.DotNetBar.ButtonItem();
|
|
|
this.tabPayMode.Tabs.AddRange(new DevComponents.DotNetBar.BaseItem[] {
|
|
|
buttonItem});
|
|
|
buttonItem.Image = global::POSV.Properties.Resources.below;
|
|
|
buttonItem.Name = "BelowPayType";
|
|
|
buttonItem.Click += ButtonItem_Click;
|
|
|
buttonItem.Text = "";
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
this._currentTabItem = this._tabs[payModeNo];
|
|
|
|
|
|
this.tabPayMode.SelectedTab = this._currentTabItem;
|
|
|
|
|
|
//如果不需要系统特殊处理
|
|
|
int attached = this.tabPayMode.SelectedTab.AttachedControl.Controls.Count;
|
|
|
if (attached == 0)
|
|
|
{
|
|
|
if (!this._bills.ContainsKey(payModeNo))
|
|
|
{
|
|
|
this._bills.Add(payModeNo, new SharedControl());
|
|
|
}
|
|
|
|
|
|
bill = this._bills[payModeNo];
|
|
|
bill.Dock = DockStyle.Fill;
|
|
|
|
|
|
this.tabPayMode.SelectedTab.AttachedControl.Controls.Add(bill);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
bill = this.tabPayMode.SelectedTab.AttachedControl.Controls[0] as AbstractBill;
|
|
|
bill.Dock = DockStyle.Fill;
|
|
|
}
|
|
|
|
|
|
if (bill != null)
|
|
|
{
|
|
|
//绑定收银方式
|
|
|
var mode = this.tabPayMode.SelectedTab.Tag as PayMode;
|
|
|
this._currentPayMode = mode;
|
|
|
|
|
|
bill.Tag = mode;
|
|
|
//设置焦点
|
|
|
bill.SetFocus();
|
|
|
bill.PayNo = mode.No;
|
|
|
//绑定数据
|
|
|
bill.BindUi(this._orderObject);
|
|
|
}
|
|
|
|
|
|
if (this.tabPayMode.Tabs.Count == 1)
|
|
|
{
|
|
|
this.tabPayMode.TabsVisible = false;
|
|
|
this.tabPayMode.FixedTabSize = new Size(0, 45);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.tabPayMode.TabsVisible = true;
|
|
|
this.tabPayMode.FixedTabSize = new Size(130, 45);
|
|
|
}
|
|
|
|
|
|
|
|
|
this.tabPayMode.Visible = true;
|
|
|
//设置焦点
|
|
|
bill.SetFocus();
|
|
|
|
|
|
//享迷卡
|
|
|
if (!"49".Equals(selected.No))
|
|
|
{
|
|
|
this._bills["49"].Close();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//读卡器控制
|
|
|
if (!"02".Equals(selected.No))
|
|
|
{
|
|
|
if (this._bills.ContainsKey("02"))
|
|
|
{
|
|
|
this._bills["02"].Close();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception)
|
|
|
{
|
|
|
RefreshUiLock = true;
|
|
|
}
|
|
|
finally { RefreshUiLock = true; }
|
|
|
|
|
|
}
|
|
|
|
|
|
private void ButtonItem_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
var _btn = sender as ButtonItem;
|
|
|
|
|
|
if (_btn == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
switch (_btn.Name)
|
|
|
{
|
|
|
case "UpPayType":
|
|
|
if (PageNumber == 0)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
PageNumber--;
|
|
|
this._tabs.Clear();
|
|
|
this.RefreshUi(this._dataSource, this._dataSource.Skip(PageNumber * 8).Take(1).FirstOrDefault(), this._orderObject);
|
|
|
break;
|
|
|
case "BelowPayType":
|
|
|
if ((PageNumber + 1) * 8 > this._dataSource.Count)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
PageNumber++;
|
|
|
this._tabs.Clear();
|
|
|
this.RefreshUi(this._dataSource, this._dataSource.Skip(PageNumber * 8).Take(1).FirstOrDefault(), this._orderObject);
|
|
|
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void SimulateKeyboard()
|
|
|
{
|
|
|
//如果是合码支付,取00
|
|
|
var payModeNo = Constant.HEMA_PAY.Contains(this._currentPayMode.No) ? Constant.HEMA_CODE : this._currentPayMode.No;
|
|
|
|
|
|
var bill = this._bills[payModeNo];
|
|
|
|
|
|
bill.SimulateKeyboard(new BillKeyboardEventArgs("accept"));
|
|
|
}
|
|
|
}
|
|
|
}
|