Example #1
0
        internal void RefreshPrice(TradeInfo trade, NormalPayRoleBill roleBill)
        {
            var rebate                = roleBill.Source.Rebate;
            var firstPassengerId      = roleBill.Source.Details.First().Passenger;
            var singleDetailBills     = roleBill.Source.Details.Where(d => d.Passenger == firstPassengerId);
            var singleTotalCommission = singleDetailBills.Sum(d => d.Commission);
            var singleTotalTradeFee   = singleDetailBills.Sum(d => d.TradeFee);
            var detailBills           = new List <NormalPayDetailBill>();
            var totalFlightCount      = trade.Flights.Count();

            foreach (var passenger in trade.Passengers)
            {
                var residualCommission = singleTotalCommission;
                var residualTradeFee   = singleTotalTradeFee;
                var flightIndex        = 1;
                foreach (var flight in trade.Flights)
                {
                    var increasing = roleBill.Source.Details.First(b => b.Passenger == passenger && b.Flight.Id == flight.Id).Increasing;
                    var detailBill = makePayDetailBill(trade.IsThirdRelation, passenger, flight, rebate, increasing, residualCommission, residualTradeFee, flightIndex == totalFlightCount);
                    residualCommission -= detailBill.Commission;
                    residualTradeFee   -= detailBill.TradeFee;
                    detailBills.Add(detailBill);
                    flightIndex++;
                }
            }
            roleBill.Source.Details = detailBills;
        }
Example #2
0
 internal void RefreshFare(TradeInfo trade, NormalPayRoleBill roleBill)
 {
     foreach (var flight in trade.Flights)
     {
         var flightBills = roleBill.Source.Details.Where(d => d.Flight.Id == flight.Id);
         foreach (var fb in flightBills)
         {
             fb.Flight.Fare   = flight.Fare;
             fb.ServiceCharge = GetServiceCharge(trade.IsThirdRelation, fb.Flight);
         }
     }
 }
Example #3
0
 internal void AddRoyalty(NormalPayRoleBill royalty)
 {
     if (royalty == null)
     {
         throw new ArgumentNullException("royalty");
     }
     if (_royalties == null)
     {
         _royalties = new List <NormalPayRoleBill>();
     }
     _royalties.Add(royalty);
 }
Example #4
0
        /// <summary>
        /// 生成退款账单
        /// </summary>
        internal NormalRefundRoleBill MakeRefundBill(NormalPayRoleBill payBill, RefundInfo refundInfo, IEnumerable <NormalRefundRoleBill> refundedNormalBills)
        {
            var refundDetailBills = (from payDetail in payBill.Source.Details
                                     where hasApply(refundInfo, payDetail.Flight.Id, payDetail.Passenger)
                                     let refundedDetails = getRefundedDetailBills(refundedNormalBills, payDetail.Flight.Id, payDetail.Passenger)
                                                           select makeRefundDetailBill(payDetail, refundInfo, refundedDetails)).ToList();
            var bill = new NormalRefundRoleBill(this)
            {
                PayRoleBill = payBill,
                Source      = new NormalRefundRoleBillSource {
                    Details = refundDetailBills
                }
            };

            return(bill);
        }
Example #5
0
 internal void RefreshReleaseFare(TradeInfo trade, NormalPayRoleBill roleBill)
 {
     foreach (var flight in trade.Flights)
     {
         var flightBills = roleBill.Source.Details.Where(d => d.Flight.Id == flight.Id);
         foreach (var fb in flightBills)
         {
             fb.Flight.ReleasedFare = flight.ReleasedFare;
             fb.Commission          = CalcCommission(flight, roleBill.Source.Rebate);
             fb.ServiceCharge       = GetServiceCharge(trade.IsThirdRelation, fb.Flight);
             fb.Anticipation        = GetAnticipation(flight, fb.ServiceCharge, fb.Commission, fb.Increasing);
             fb.TradeFee            = CalcTradeFee(fb.Anticipation);
             fb.RefreshAmount();
         }
     }
 }
Example #6
0
        /// <summary>
        /// 生成支付账单
        /// </summary>
        internal NormalPayRoleBill MakePayBill(TradeInfo trade, Deduction deduction)
        {
            _rate = GetTradeRate(trade);
            var detailBills = (from flight in trade.Flights
                               from passenger in trade.Passengers
                               select makePayDetailBill(trade.IsThirdRelation, passenger, flight, deduction)).ToList();
            var roleBill = new NormalPayRoleBill(this)
            {
                Source = new NormalPayRoleBillSource {
                    Details = detailBills,
                    Rebate  = deduction == null ? 0 : deduction.Rebate,
                },
            };

            return(roleBill);
        }
Example #7
0
        private static decimal getFreezeAmount(BalanceRefundApplyform refundOrScrapApplyform, NormalPayRoleBill roleBill, NormalRefundRoleBill provider)
        {
            var payAmount = roleBill.Source.Details.Where(
                item =>
                refundOrScrapApplyform.Applyform.Passengers.Any(p => p.Id == item.Passenger) &&
                refundOrScrapApplyform.Applyform.Flights.Any(f => f.OriginalFlight.ReservateFlight == item.Flight.Id)).Sum(item => item.Amount);

            return(payAmount - Math.Abs(provider.Amount));
        }
Example #8
0
 private static decimal getFreezeAmount(RefundOrScrapApplyform refundOrScrapApplyform, NormalPayRoleBill roleBill)
 {
     return(roleBill.Source.Details.Where(
                item =>
                refundOrScrapApplyform.Passengers.Any(p => p.Id == item.Passenger) &&
                refundOrScrapApplyform.Flights.Any(f => f.OriginalFlight.ReservateFlight == item.Flight.Id)).Sum(item => item.Amount));
 }
Example #9
0
        /// <summary>
        /// 生成退款账单
        /// </summary>
        internal PlatformBill <NormalRefundRoleBill, NormalRefundRoleBillSource, NormalRefundDetailBill> MakeRefundBill(NormalPayRoleBill payBill, RefundInfo refundInfo, IEnumerable <NormalRefundRoleBill> refundedBills, IEnumerable <NormalRefundRoleBill> tradeRoleRefundBills)
        {
            var refundBill = new PlatformBill <NormalRefundRoleBill, NormalRefundRoleBillSource, NormalRefundDetailBill> {
                Deduction = makeDeductionProfit(payBill, refundInfo, refundedBills)
            };

            refundBill.Premium  = getPremiumProfit(tradeRoleRefundBills, refundBill.Deduction);
            refundBill.TradeFee = makeTradeFeeProfit(tradeRoleRefundBills);
            refundBill.Account  = Account;
            return(refundBill);
        }
Example #10
0
        private decimal getPremiumProfit(IEnumerable <NormalPayRoleBill> tradeRoleBills, NormalPayRoleBill deductionBill)
        {
            decimal tradeRoleBalance = 0;

            if (tradeRoleBills != null)
            {
                var userRoleBalance   = tradeRoleBills.Sum(item => item.Source.Anticipation);
                var platformDeduction = deductionBill == null ? 0 : deductionBill.Source.Anticipation;
                tradeRoleBalance = userRoleBalance + platformDeduction;
            }
            return(tradeRoleBalance * -1);
        }
Example #11
0
 private NormalRefundRoleBill makeDeductionProfit(NormalPayRoleBill payBill, RefundInfo refundInfo, IEnumerable <NormalRefundRoleBill> refundedBills)
 {
     return(payBill == null ? null : payBill.MakeRefundBill(refundInfo, refundedBills));
 }