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; }
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); } } }
internal void AddRoyalty(NormalPayRoleBill royalty) { if (royalty == null) { throw new ArgumentNullException("royalty"); } if (_royalties == null) { _royalties = new List <NormalPayRoleBill>(); } _royalties.Add(royalty); }
/// <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); }
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(); } } }
/// <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); }
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)); }
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)); }
/// <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); }
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); }
private NormalRefundRoleBill makeDeductionProfit(NormalPayRoleBill payBill, RefundInfo refundInfo, IEnumerable <NormalRefundRoleBill> refundedBills) { return(payBill == null ? null : payBill.MakeRefundBill(refundInfo, refundedBills)); }