コード例 #1
0
 public List <(byte deliveryPeriod, RequiredPayment payment)> RefundLearningAim(List <Payment> historicPayments)
 {
     return(historicPayments
            .GroupBy(payment => payment.DeliveryPeriod)
            .SelectMany(group =>
     {
         var historicPaymentsPerPeriod = group.ToList();
         var payments = refundService.GetRefund(paymentDueProcessor.CalculateRequiredPaymentAmount(0, historicPaymentsPerPeriod), historicPaymentsPerPeriod);
         return payments.Select(payment => (group.Key, payment));
     })
            .ToList());
 }
        public List <RequiredPayment> GetRequiredPayments(Earning earning, List <Payment> paymentHistory)
        {
            var result = new List <RequiredPayment>();

            if (earning.EarningType != EarningType.Incentive && earning.SfaContributionPercentage.HasValue)
            {
                result.AddRange(RefundPaymentsWithDifferentSfaContribution(earning.SfaContributionPercentage.Value, paymentHistory));
            }

            var validPaymentHistory = paymentHistory
                                      .Where(p => earning.EarningType == EarningType.Incentive ||
                                             !earning.SfaContributionPercentage.HasValue ||
                                             p.SfaContributionPercentage == earning.SfaContributionPercentage)
                                      .ToList();

            var amount = paymentsDue.CalculateRequiredPaymentAmount(earning.Amount, validPaymentHistory);

            if (amount < 0)
            {
                result.AddRange(refundService.GetRefund(amount, validPaymentHistory));
                return(result);
            }

            if (amount == 0)
            {
                return(result);
            }

            if (!earning.SfaContributionPercentage.HasValue)
            {
                throw new ArgumentException("Trying to use a null SFA Contribution % for a positive earning");
            }

            result.Add(new RequiredPayment
            {
                Amount      = amount,
                EarningType = earning.EarningType,
                SfaContributionPercentage = earning.SfaContributionPercentage.Value,
                PriceEpisodeIdentifier    = earning.PriceEpisodeIdentifier,
                AccountId = earning.AccountId,
                TransferSenderAccountId = earning.TransferSenderAccountId
            });

            return(result);
        }