Esempio n. 1
0
        /// <summary>
        /// 修正退款的应收/退金额
        /// </summary>
        private void reviseRefundAnticipation(NormalPayDetailBill payBill, NormalRefundDetailBill refundBill, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var refundedAmount = refundedBills.Sum(item => item.Anticipation);

            if (Math.Abs(payBill.Anticipation) < Math.Abs(refundBill.Anticipation + refundedAmount))
            {
                refundBill.Anticipation = (payBill.Anticipation + refundedAmount) * -1;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 修正退还的加价金额
        /// </summary>
        private void reviseRefundIncreasing(NormalPayDetailBill payBill, NormalRefundDetailBill refundBill, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var refundedIncreasing = refundedBills.Sum(item => item.Increasing);

            if (Math.Abs(payBill.Increasing) < Math.Abs(refundBill.Increasing + refundedIncreasing))
            {
                refundBill.Increasing = (payBill.Increasing + refundedIncreasing) * -1;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 修改应该退还的服务费
        /// </summary>
        private void reviseRefundServiceCharge(NormalPayDetailBill payBill, NormalRefundDetailBill refundBill, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var refundedServiceCharge = refundedBills.Sum(item => item.ServiceCharge);

            if (Math.Abs(payBill.ServiceCharge) < Math.Abs(refundBill.ServiceCharge + refundedServiceCharge))
            {
                refundBill.ServiceCharge = (payBill.ServiceCharge + refundedServiceCharge) * -1;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 修改应该退还的佣金
        /// </summary>
        private void reviseRefundCommission(NormalPayDetailBill payBill, NormalRefundDetailBill refundBill, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var refundedCommission = refundedBills.Sum(item => item.Commission);

            if (Math.Abs(payBill.Commission) < Math.Abs(refundBill.Commission + refundedCommission))
            {
                refundBill.Commission = (payBill.Commission + refundedCommission) * -1;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 生成差错退款账单明细
        /// </summary>
        private NormalRefundDetailBill makeRefundDetailBill(NormalPayDetailBill payBill, ErrorRefundFlight refundFlight, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var result = new NormalRefundDetailBill(payBill.Passenger, payBill.Flight);

            result.Anticipation = GetErrorRefundAnticipation(refundFlight);
            reviseRefundAnticipation(payBill, result, refundedBills);
            result.TradeFee = CalcTradeFee(result.Anticipation);
            reviseRefundTradeFee(payBill, result, refundedBills);
            return(result);
        }
Esempio n. 6
0
        /// <summary>
        /// 生成支付账单明细
        /// </summary>
        private NormalPayDetailBill makePayDetailBill(bool isThirdRelation, Guid passenger, Flight flight, Deduction deduction)
        {
            var bill = new NormalPayDetailBill(passenger, flight)
            {
                Commission    = deduction == null ? 0 : CalcCommission(flight, deduction.Rebate),
                Increasing    = deduction == null ? 0 : GetIncreasing(deduction),
                ServiceCharge = GetServiceCharge(isThirdRelation, flight)
            };

            bill.Anticipation = GetAnticipation(flight, bill.ServiceCharge, bill.Commission, bill.Increasing);
            bill.TradeFee     = CalcTradeFee(bill.Anticipation);
            return(bill);
        }
Esempio n. 7
0
        /// <summary>
        /// 修改退款时的交易手续费
        /// </summary>
        private void reviseRefundTradeFee(NormalPayDetailBill payBill, NormalRefundDetailBill refundBill, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var refundedTradeFee     = refundedBills.Sum(item => item.TradeFee);
            var refundedAnticipation = refundedBills.Sum(b => b.Anticipation);
            var refundAnticipation   = refundedAnticipation + refundBill.Anticipation;

            // 退款金额与收款金额相同时,直接全退手续费
            // 退还的手续费不能超过收取的手续费
            if (Math.Abs(payBill.Anticipation) == Math.Abs(refundAnticipation) ||
                Math.Abs(payBill.TradeFee) < Math.Abs(refundBill.TradeFee + refundedTradeFee))
            {
                refundBill.TradeFee = (payBill.TradeFee + refundedTradeFee) * -1;
            }
        }
Esempio n. 8
0
        /// <summary>
        /// 生成退款账单明细
        /// </summary>
        private NormalRefundDetailBill makeRefundDetailBill(NormalPayDetailBill payBill, RefundInfo refundInfo, IEnumerable <NormalRefundDetailBill> refundedBills)
        {
            var refundFlight = refundInfo == null ? null : refundInfo.GetFlight(payBill.Flight.Id);
            var result       = new NormalRefundDetailBill(payBill.Passenger, payBill.Flight)
            {
                RefundRate = refundFlight == null ? 0 : refundFlight.Rate,
                RefundFee  = refundFlight == null ? 0 : GetRefundFee(payBill.Flight, payBill.Passenger, refundFlight)
            };

            result.Commission = GetRefundCommission(payBill);
            reviseRefundCommission(payBill, result, refundedBills);
            result.Increasing = refundFlight == null ? payBill.Increasing * -1 : GetRefundIncreasing(payBill, refundFlight.RefundServiceCharge.HasValue);
            reviseRefundIncreasing(payBill, result, refundedBills);
            result.ServiceCharge = refundFlight == null ? payBill.ServiceCharge * -1 : GetRefundServiceCharge(refundInfo.HasSupplier, refundFlight);
            reviseRefundServiceCharge(payBill, result, refundedBills);
            result.Anticipation = refundFlight == null ? payBill.Anticipation * -1 : GetRefundAnticipation(payBill, result.Commission, result.Increasing, result.ServiceCharge, result.RefundRate, result.RefundFee);
            reviseRefundAnticipation(payBill, result, refundedBills);
            result.TradeFee = CalcTradeFee(result.Anticipation);
            reviseRefundTradeFee(payBill, result, refundedBills);
            return(result);
        }
Esempio n. 9
0
        /// <summary>
        /// 生成支付账单明细
        /// </summary>
        private NormalPayDetailBill makePayDetailBill(bool isThirdRelation, Guid passenger, Flight flight, decimal rebate, decimal increasing, decimal maxCommission, decimal maxTradeFee, bool isLastFlight)
        {
            var bill = new NormalPayDetailBill(passenger, flight)
            {
                Commission    = CalcCommission(flight, rebate),
                Increasing    = increasing,
                ServiceCharge = GetServiceCharge(isThirdRelation, flight)
            };

            if (isLastFlight || Math.Abs(bill.Commission) > Math.Abs(maxCommission))
            {
                bill.Commission = maxCommission;
            }
            bill.Anticipation = GetAnticipation(flight, bill.ServiceCharge, bill.Commission, increasing);
            bill.TradeFee     = CalcTradeFee(bill.Anticipation);
            if (isLastFlight || Math.Abs(bill.TradeFee) > Math.Abs(maxTradeFee))
            {
                bill.TradeFee = maxTradeFee;
            }
            return(bill);
        }
Esempio n. 10
0
 /// <summary>
 /// 获取应退/收金额
 /// </summary>
 protected abstract decimal GetRefundAnticipation(NormalPayDetailBill payBill, decimal refundCommission, decimal refundIncreasing, decimal refundServiceCharge, decimal refundRate, decimal refundFee);
Esempio n. 11
0
 /// <summary>
 /// 获取应该退还的加价金额
 /// </summary>
 protected virtual decimal GetRefundIncreasing(NormalPayDetailBill payBill, bool providerRefundServiceCharge)
 {
     return(payBill.Increasing * -1);
 }
Esempio n. 12
0
 /// <summary>
 /// 获取应该退还的佣金
 /// </summary>
 protected virtual decimal GetRefundCommission(NormalPayDetailBill payBill)
 {
     return(payBill.Commission * -1);
 }