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.

873 lines
35 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.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using NLog;
using POS.Language.Language;
using POSV.Bill;
using POSV.Card;
using POSV.Entity;
using POSV.MessageEvent;
using POSV.Payment.AllinPay;
using POSV.ShoppingCart;
using POSV.Utils;
namespace POSV
{
public partial class BillFormExt : BusinessForm
{
/// <summary>
/// 收银方式集合
/// </summary>
private Dictionary<string, SuperTabItem> _tabs = null;
/// <summary>
/// 当前选择的收银方式
/// </summary>
private SuperTabItem _currentTabItem = null;
/// <summary>
/// 收银标识列表
/// </summary>
private List<PayType> _payTypeList = null;
/// <summary>
/// 支付方式列表
/// </summary>
private List<PayMode> _payModeList = null;
/// <summary>
/// 当前选择的收银方式
/// </summary>
private PayType _currentPayType = null;
/// <summary>
/// 当前选择的付款类型
/// </summary>
private PayMode _currentPayMode = null;
/// <summary>
/// 当前选择的付款类型
/// </summary>
private string _defaultSelected = string.Empty;
/// <summary>
/// 当期订单对象的复制对象,避免取消结账污染元数据
/// </summary>
private OrderObject _orderObject = null;
public BillFormExt()
{
InitializeComponent();
MsgEvent.RemoveListener(Constant.PAY_MESSAGE_EVENT_NOTIFY, MessageEventNotify);
MsgEvent.Receive(Constant.PAY_MESSAGE_EVENT_NOTIFY, MessageEventNotify);
MsgEvent.RemoveListener(Constant.PAY_AUTO_EVENT_NOTIFY, FinishedEventNotify);
MsgEvent.Receive(Constant.PAY_AUTO_EVENT_NOTIFY, FinishedEventNotify);
this._tabs = new Dictionary<string, SuperTabItem>();
this.ImeMode = ImeMode.Disable;
InitializePayType();
//第一次加载的时候触发切换标签事件
this.tabPayType.SelectedTab = null;
ButtonAccept.Text = LangProxy.ToLang(ButtonAccept.Text);
ButtonCancel.Text = LangProxy.ToLang(ButtonCancel.Text);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
}
private void InitializePayType()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
try
{
//获取付款方式列表
this._payTypeList = OrderUtils.GetPayTypeList();
//获取收银方式列表,获取前台展示 排除抹零
this._payModeList = OrderUtils.GetPayModeList().FindAll(x => x.FrontFlag == 1 && x.No != "06");
#region subin 2023-07-01 增加通联付款方式、通联收银方式
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
//var allinPayType = new PayType
//{
// Id = ts.TotalSeconds.ToString(),
// Name = "通联支付",
// TenantId = Global.Instance.BusinessPlanLog.TenantId,
// No = "50",
// Sign = "allinpay",
// CreateUser = "sync",
// CreateDate = DateTime.Now.ToString()
//};
//this._payTypeList.Add(allinPayType);
var allinPayType = this._payModeList.FirstOrDefault(m => m.No == "50");
if (allinPayType != null)
{
if (allinPayType.Body.Count() == 0)
{
var payModelBody = new Dictionary<string, object>();
payModelBody.Add("channel", "allinpay");
payModelBody.Add("appId", AllinpayLib.AppId);
payModelBody.Add("appKey", AllinpayLib.AppKey);
payModelBody.Add("gatewayUrl", AllinpayLib.Url);
var store = Global.Instance.Worker.StoreInfo;
if (store == null)
{
using (var db = Global.Instance.OpenDataBase)
{
store = db.FirstOrDefault<StoreInfo>("where id = @0", Global.Instance.Authc.StoreId);
}
}
if (!string.IsNullOrEmpty(store.Ext1))
{
var storeAllinParams = JsonUtils.Deserialize<StoreAllinParams>(store.Ext1);
AllinpayLib.Payuserid = storeAllinParams.PayuserId;
AllinpayLib.VspCusid = storeAllinParams.VspCusid;
AllinpayLib.BizUserId = storeAllinParams.BizUserId;
}
payModelBody.Add("payuserid", AllinpayLib.Payuserid);
payModelBody.Add("vspCusid", AllinpayLib.VspCusid);
payModelBody.Add("bizUserId", AllinpayLib.BizUserId);
allinPayType.Body = payModelBody;
}
}
//var p = this._payModeList.Find(m => m.No == "50");
//if (p == null)
//{
// this._payModeList.Add(new PayMode
// {
// Id = ts.TotalSeconds.ToString(),
// TenantId = Global.Instance.BusinessPlanLog.TenantId,
// TypeId = allinPayType.Id,
// Name = "通联支付",
// No = "50",
// Body = payModelBody,
// CertText = null,
// CreateUser = "sync",
// CreateDate = DateTime.Now.ToString(),
// Discount = 100,
// FrontFlag = 1,
// PointFlag = 1,
// RechargeFlag = 0,
// Shortcut = "",
// FixeAmount = 0,
// IncomeFlag = 0,
// OtherRateType = 0,
// OtherRateValue = 0
// });
//}
//else
//{
// p.TypeId = allinPayType.Id;
// p.Body = payModelBody;
//}
#endregion
//获取默认的收银
if (!string.IsNullOrEmpty(this._defaultSelected))
{
if (Constant.HEMA_CODE.Equals(this._defaultSelected))
{
this._currentPayMode = this._payModeList.FirstOrDefault(x => Constant.HEMA_PAY.Contains(x.No));
}
else
{
this._currentPayMode = this._payModeList.FirstOrDefault(x => x.No.Equals(this._defaultSelected));
}
}
//选择默认
if (this._currentPayMode == null)
{
this._currentPayMode = OrderUtils.GetDefaultPayMode();
}
foreach (var type in this._payTypeList)
{
//如果收银标识中有可用的支付方式
if (this._payModeList.Exists(x => x.TypeId == type.Id))
{
var tabText = type.Name;
//如果只有一个支付方式
if (this._payModeList.Count(x => x.TypeId == type.Id) == 1)
{
var mode = this._payModeList.First(x => x.TypeId == type.Id);
tabText = mode.Name;
}
var tab = this.tabPayType.CreateTab(tabText);
//支付方式压入
tab.Tag = type;
tab.FixedTabSize = new Size(100, 45);
tab.Text = LangProxy.ToLang(tab.Text);
this._tabs.Add(type.Id, tab);
//选择默认付款类型
if (type.Id.Equals(this._currentPayMode.TypeId))
{
this._currentTabItem = tab;
this._currentPayType = type;
}
}
}
this.tabPayType.SelectedTabChanging -= OnTabPayTypeSelectedTabChanging;
this.tabPayType.SelectedTabChanging += OnTabPayTypeSelectedTabChanging;
this.tabPayType.SelectedTabChanged -= OnTabPayTypeSelectedTabChanged;
this.tabPayType.SelectedTabChanged += OnTabPayTypeSelectedTabChanged;
}
catch (Exception ex)
{
LOGGER.Error(ex, "初始化收银方式异常");
}
finally
{
sw.Stop();
LOGGER.Info("PayType耗时<{0}>", sw.ElapsedMilliseconds);
}
}
public void RefreshUi(string payModeNo, OrderObject orderObject)
{
try
{
this._orderObject = orderObject;
//默认选择的付款标识
this._defaultSelected = payModeNo;
//复制新对象,避免取消后污染原对象
this._orderObject = ObjectUtils.Copy<OrderObject>(orderObject);
//获取默认的收银
if (!string.IsNullOrEmpty(this._defaultSelected))
{
if (Constant.HEMA_CODE.Equals(this._defaultSelected))
{
this._currentPayMode = this._payModeList.FirstOrDefault(x => Constant.HEMA_PAY.Contains(x.No));
}
else
{
this._currentPayMode = this._payModeList.FirstOrDefault(x => x.No.Equals(this._defaultSelected));
}
}
//选择默认
if (this._currentPayMode == null)
{
this._currentPayMode = OrderUtils.GetDefaultPayMode();
}
LOGGER.Info("选择的支付方式<{0},{1}>", _currentPayMode.No, _currentPayMode.Name);
foreach (var type in this._payTypeList)
{
//如果收银标识中有可用的支付方式
if (this._payModeList.Exists(x => x.TypeId == type.Id))
{
//选择默认付款类型
if (type.Id.Equals(this._currentPayMode.TypeId))
{
this._currentPayType = type;
this._currentTabItem = this._tabs[type.Id];
}
}
}
LOGGER.Info("选择的支付方式后<{0}>", this._currentPayType.Name);
}
catch (Exception ex)
{
LOGGER.Error(ex, "RefreshUi异常");
}
}
private void RefreshUi(PayType payType)
{
this._currentTabItem = this._tabs[payType.Id];
BillControl bill = null;
int attached = this.tabPayType.SelectedTab.AttachedControl.Controls.Count;
if (attached == 0)
{
bill = new BillControl();
bill.Dock = DockStyle.Fill;
this.tabPayType.SelectedTab.AttachedControl.Controls.Add(bill);
LOGGER.Info("注册支付模块");
}
else
{
bill = this.tabPayType.SelectedTab.AttachedControl.Controls[0] as BillControl;
LOGGER.Info("加载支付模块");
}
//获取收银方式列表
var data = this._payModeList.FindAll(x => x.TypeId == payType.Id);
bill.RefreshUi(data, this._currentPayMode, this._orderObject);
this.ActiveControl = bill;
}
private void OnTabPayTypeSelectedTabChanged(object sender, SuperTabStripSelectedTabChangedEventArgs e)
{
if (e.NewValue != null && e.NewValue.Tag != null)
{
var payType = e.NewValue.Tag as PayType;
this.RefreshUi(payType);
}
}
private void OnTabPayTypeSelectedTabChanging(object sender, SuperTabStripSelectedTabChangingEventArgs e)
{
if (e.NewValue != null && e.NewValue.Tag != null)
{
var payType = e.NewValue.Tag as PayType;
//获取当前付款类型下的全部收银方式
var modes = this._payModeList.FindAll(x => x.TypeId == payType.Id);
//判断当前收银方式是否包含,如果不包含自动选择第一个为当前收银方式
if (!modes.Exists(x => x.No == this._currentPayMode.No))
{
this._currentPayMode = modes.OrderByDescending(m=>m.No).First<PayMode>();
}
}
}
/// <summary>
/// 操作提示
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
protected virtual void MessageEventNotify(object sender, MsgEventArgs args)
{
if (args.Data != null && args.Data is Tuple<bool, string>)
{
var data = args.Data as Tuple<bool, string>;
this.ShowMessage(this.lblInfo, data.Item2, data.Item1);
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
protected virtual void FinishedEventNotify(object sender, MsgEventArgs args)
{
this.Invoke(new Action(() =>
{
this.OnFinishedClick(this.ButtonAccept, EventArgs.Empty);
}));
}
private void OnControlBoxCloseClick(object sender, EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Close();
}
#region subin 20231011 add 关闭时清理数据
if (((System.Windows.Forms.Control)sender).Tag == null)
{
//通知结账缓存界面清理数据,无论支付完成还是取消都要调用
MsgEvent.Send(Constant.ORDER_PAYMENT_FINISHED, this._orderObject.TradeNo);
}
#endregion
this.Close();
}
protected void OnEscapeClick(object sender, EventArgs e)
{
//通知结账缓存界面清理数据,无论支付完成还是取消都要调用
MsgEvent.Send(Constant.ORDER_PAYMENT_FINISHED, this._orderObject.TradeNo);
OnControlBoxCloseClick(sender, e);
}
protected void OnFinishedClick(object sender, EventArgs e)
{
Stopwatch watch = Stopwatch.StartNew();
try
{
var billControl = this._currentTabItem.AttachedControl.Controls[0] as BillControl;
billControl.SimulateKeyboard();
var button = sender as ButtonX;
//输入是否满足结账条件:消费金额 = 实收金额 + 优惠金额 + 抹零金额
//bool isVerify = this._orderObject.Amount == this._orderObject.PaidAmount + this._orderObject.DiscountAmount + this._orderObject.MalingAmount;
//重新计算人民币的应收金额
RefreshCashShouldAmount();
//输入是否满足结账条件:消费明细中实收金额的合计 = 主单中的实收金额
var isVerify = this._orderObject.Pays.Sum(x => x.PaidAmount) >= this._orderObject.PaidAmount;
//支付金额为零,不需要支付方式,这时添加默认支付方式,主要是弹框无支付方式情况的特殊处理
if (isVerify && this._orderObject.Pays.Count == 0)
{
//构建现金支付方式
var cashPayMode = OrderUtils.GetDefaultPayMode();
PayItem item = OrderUtils.ToPayItem(cashPayMode);
//订单ID
item.OrderId = this._orderObject.Id;
//收银票号
item.TradeNo = this._orderObject.TradeNo;
//实收金额
item.Amount = 0.00M;
//操作员输入的金额
item.PaidAmount = 0.00M;
//找零金额
item.ChangeAmount = 0.00M;
item.CardNo = "";
item.Memo = "弹框现金快速结账";
item.Status = (int)OrderPaymentStatus.;
item.StatusDesc = "弹框默认现金快速结账";
item.PayTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//将支付方式压入整单支付明细中
this._orderObject.Pays.Add(item);
}
//满足结账条件
if (isVerify)
{
this.ShowMessage(this.lblInfo, "满足结账条件", false);
//默认支付成功
bool isPaySuccess = true;
//查找会员卡支付列表,如果有会员卡先扣会员卡钱
var cards = this._orderObject.Pays.FindAll(x => x.No.Equals("02") || x.No.Equals("49"));
//包含会员卡支付,构建会员卡扣款列表
if (cards != null && cards.Count > 0)
{
LOGGER.Warn("满足结账条件,共{0}张会员卡参与支付", cards.Count);
//交易参考号
string tradeVoucherNo = string.Empty;
//扣款卡列表
var payCards = new List<PayInfo>();
foreach (var card in cards)
{
if (card.Amount <= 0)
{
continue;
}
PayInfo c = new PayInfo();
c.PrePayment = cards[cards.Count - 1].PrePayNo;
c.CardNo = card.CardNo;
c.Amount = Convert.ToInt32(card.Amount * 100);
c.IsNoPwd = card.UseConfirmed ? 0 : 1;
c.Passwd = card.Passwd;
payCards.Add(c);
tradeVoucherNo = card.TradeVoucherNo;
LOGGER.Warn("卡号:{0},扣款:{1}", c.CardNo, c.Amount);
}
//记积分金额
var pointAmount = this._orderObject.Pays.FindAll(x => x.PointFlag == 1).Sum(x => x.Amount);
var request = new CardTradePayRequest();
request.TradeNo = this._orderObject.TradeNo;
request.MemberId = this._orderObject.Member == null ? string.Empty : this._orderObject.Member.Id;
request.Mobile = this._orderObject.Member == null ? string.Empty : this._orderObject.Member.Mobile;
request.TradeVoucherNo = tradeVoucherNo;
request.TotalAmount = Convert.ToInt32(this._orderObject.Amount * 100);
//实收金额
request.RealAmount = Convert.ToInt32(this._orderObject.PaidAmount * 100);
request.PointAmount = this._orderObject.Member == null ? 0 : Convert.ToInt32(pointAmount * 100);
request.PayCardAmount = payCards.Sum(x => x.Amount);
request.DiscountAmount = Convert.ToInt32(this._orderObject.DiscountAmount * 100);
request.PointFlag = 2;//以卡系统计算为准
request.PointValue = 0;
request.PayInfo = payCards;
var pays = new List<Pay>();
foreach (var p in this._orderObject.Pays)
{
var pay = new Pay();
pay.PayTypeNo = p.No;
pay.PayType = p.Name;
pay.Money = Convert.ToInt32(p.Amount * 100);
pay.PointRule = string.Empty;
pay.Point = 0;
pays.Add(pay);
}
//特殊处理
if (Integral(this._orderObject))
{
var item = OrderUtils.GetPayTypeList().FirstOrDefault(f => f.No.Equals("02"));
if (item != null)
{
var pay = new Pay();
pay.PayTypeNo = item.No;
pay.PayType = item.Name;
pay.Money = 0;
pay.PointRule = string.Empty;
pay.Point = 0;
pays.Add(pay);
request.PointAmount = (int)(this._orderObject.Pays.Sum(x => x.Amount) * 100);
}
}
request.Pay = pays;
int couponTotalAmount = 0;
var coupons = new List<Coupon>();
if (this._orderObject.Promotions != null)
{
foreach (PromotionOrder promotionOrder in this._orderObject.Promotions)
{
if (PromotionType. == promotionOrder.PromotionType)
{
Coupon coupon = new Coupon();
coupon.CouponId = promotionOrder.CouponId;
coupon.CouponType = "CASH";
coupon.Title = promotionOrder.PlanName;
coupon.Code = promotionOrder.PlanNo;
coupon.Discount = String.Format("{0}", promotionOrder.DiscountRate);
coupon.Cash = String.Format("{0}", promotionOrder.DiscountAmount);
coupon.Gift = promotionOrder.PlanName;
coupon.Memo = String.Format("电子代金券,优惠{0}", promotionOrder.DiscountAmount);
couponTotalAmount += Convert.ToInt32(promotionOrder.DiscountAmount * 100);
coupons.Add(coupon);
}
else if (PromotionType. == promotionOrder.PromotionType)
{
Coupon coupon = new Coupon();
coupon.CouponId = promotionOrder.CouponId;
coupon.CouponType = "DISCOUNT";
coupon.Title = promotionOrder.PlanName;
coupon.Code = promotionOrder.PlanNo;
coupon.Discount = String.Format("{0}", promotionOrder.DiscountRate);
coupon.Cash = String.Format("{0}", promotionOrder.DiscountAmount);
coupon.Gift = promotionOrder.PlanName;
coupon.Memo = String.Format("电子折扣券,优惠{0}", promotionOrder.DiscountAmount);
couponTotalAmount += Convert.ToInt32(promotionOrder.DiscountAmount * 100);
coupons.Add(coupon);
}
}
}
if (this._orderObject.Items != null)
{
foreach (OrderItem orderItem in this._orderObject.Items)
{
if (orderItem.Promotions != null)
{
foreach (PromotionItem promotionItem in orderItem.Promotions)
{
if (PromotionType. == promotionItem.PromotionType)
{
Coupon coupon = new Coupon();
coupon.CouponId = promotionItem.CouponId;
coupon.CouponType = "GIFT";
coupon.Title = promotionItem.PlanName;
coupon.Code = promotionItem.PlanNo;
coupon.Discount = String.Format("{0}", promotionItem.DiscountRate);
coupon.Cash = String.Format("{0}", promotionItem.DiscountAmount);
coupon.Gift = promotionItem.PlanName;
coupon.Memo = String.Format("电子兑换券,优惠{0}", promotionItem.DiscountAmount);
couponTotalAmount += Convert.ToInt32(promotionItem.DiscountAmount * 100);
coupons.Add(coupon);
}
}
}
}
}
request.Coupon = coupons;
request.CouponTotalAmount = couponTotalAmount;
request.ShopNo = Global.Instance.Authc.StoreNo;
request.WorkerNo = Global.Instance.Worker.No;
request.PosNo = Global.Instance.Authc.PosNo;
//var _data = ObjectUtils.Copy<OrderObject>(this._orderObject);
////_data. = OrderUtils.Instance.GenerateTicketNo();
//var result = BusinessUtils.Instance.AddCardPoint4Order(this._orderObject);
//if (result.Item1)
//{
// isPaySuccess = true;
//}
//else
//{
// MsgEvent.Send(Constant.PAY_MESSAGE_EVENT_NOTIFY, new Tuple<bool, string>(true, result.Item2));
// isPaySuccess = false;
//}
LOGGER.Warn("发起会员卡扣款.....");
var payResult = CardUtils.CardTradePay(request);
LOGGER.Warn("会员卡扣款耗时<{0}>毫秒", watch.ElapsedMilliseconds);
if (payResult.Item1)
{
//会员卡扣款清单,用于打印
this._orderObject.CardPayResult = payResult.Item3;
var payRes = payResult.Item3;
//刷卡后积分计入主单
this._orderObject.PrePoint = OrderUtils.ToRound(payRes.PrePoint / 100.00M);
this._orderObject.AddPoint = OrderUtils.ToRound(payRes.GiftPoint / 100.00M);
this._orderObject.AftPoint = OrderUtils.ToRound(payRes.AftPoint / 100.00M);
//调整每张卡的扣款状态
foreach (var card in cards)
{
var payCard = payRes.CardList.Find(x => x.CardNo == card.CardNo);
if (payCard == null)
{
LOGGER.Error(string.Format("会员卡[{0}]支付成功后返回结果未包含该卡支付信息", card.CardNo));
}
else
{
card.CardBeforeBalance = OrderUtils.ToRound(payCard.PreAmount / 100.00M);
card.CardAftAmount = OrderUtils.ToRound(payCard.AftAmount / 100.00M);
}
card.Status = (int)OrderPaymentStatus.;
card.StatusDesc = payResult.Item2;
card.PayTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
this.ShowMessage(this.lblInfo, payResult.Item2, false);
}
//会员卡扣款成功
isPaySuccess = true;
}
else
{
//会员卡扣款失败
isPaySuccess = false;
this.ShowMessage(this.lblInfo, payResult.Item2, true);
}
}
else
{
//不包含会员卡,进行判断是否使用会员,会员充值积分
if (this._orderObject.IsMember == 1)
{
var result = BusinessUtils.Instance.AddCardPoint4Order(this._orderObject);
if (result.Item1)
{
isPaySuccess = true;
}
else
{
MsgEvent.Send(Constant.PAY_MESSAGE_EVENT_NOTIFY, new Tuple<bool, string>(true, result.Item2));
isPaySuccess = false;
}
}
}
//会员卡支付成功,核销美团券支付方式
if (isPaySuccess)
{
LOGGER.Info("检测是否有美团券需要核销......");
//zhangy 2020-04-24 优先核销美团团购券
var meituanCouponResult = BusinessUtils.Instance.MeituanCouponConsume(this._orderObject);
if (meituanCouponResult.Item1)
{
//美团团购券核销成功
isPaySuccess = true;
}
else
{
MsgEvent.Send(Constant.PAY_MESSAGE_EVENT_NOTIFY, new Tuple<bool, string>(true, meituanCouponResult.Item2));
isPaySuccess = false;
LOGGER.Info("美团券需要核销失败,原因:" + meituanCouponResult.Item2);
}
}
//支付成功
if (isPaySuccess)
{
//整单状态
this._orderObject.OrderStatus = OrderStatus.;
//整单支付状态
this._orderObject.PaymentStatus = OrderPaymentStatus.;
//通知主界面结账成功
MsgEvent.Send(Constant.ORDER_PAYMENT_NOTIFY, this._orderObject);
//关闭界面,清理资源
this.OnEscapeClick(this.ButtonCancel, EventArgs.Empty);
}
}
else
{
this.ShowMessage(this.lblInfo, "不满足结账条件", false);
}
}
catch (Exception ex)
{
this.ShowMessage(this.lblInfo, "结账操作发生异常", false);
LOGGER.Error(ex, "结账操作发生异常");
///上报异常信息
Global.Instance.BugReport(ex);
}
finally
{
LOGGER.Warn("调用完成结账方法,耗时<{0}>毫秒", watch.ElapsedMilliseconds);
}
}
private bool Integral(OrderObject _orderObject)
{
var _why = _orderObject.Pays.FirstOrDefault(f => f.No.Equals("02"));
var _xmk = _orderObject.Pays.FirstOrDefault(f => f.No.Equals("49"));
if (_xmk == null)
{
return false;
}
if (_why != null)
{
return false;
}
if (_orderObject.Member == null)
{
return false;
}
return true;
}
/// <summary>
/// 人民币付款方式的应收在混合支付中,应该在最后重新计算应收。
/// 比如订单金额10元付款方式和顺序如下
/// 人民币付款5元这时人民币的应收为10元
/// 其他付款5元这时其他付款的应收为5元
/// 这样支付方式合计应收为15元不正确了而且人民币的找零金额计算方式为实收 - 应收 = -5元不正确
/// </summary>
private void RefreshCashShouldAmount()
{
var cashPay = this._orderObject.Pays.Find(x => x.No == "01");
if (cashPay != null)
{
//现金应收 = 订单实收 - 除现金以外的支付金额
var cashShould = this._orderObject.PaidAmount - this._orderObject.Pays.FindAll(x => x.No != "01").Sum(x => x.PaidAmount);
cashPay.Amount = cashShould;
}
}
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (this.Visible)
{
this.tabPayType.SelectedTab = this._currentTabItem;
//this.RefreshUi(this._currentPayType);
LOGGER.Info("选择支付界面<{0}>", this._currentTabItem.Text);
}
else
{
this.tabPayType.SelectedTab = null;
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
e.Cancel = true;
this.Visible = false;
}
}
}