private async Task RemoveEarningsAfterStopDate(DateTime dateStopped, ICollectionCalendarService collectionCalendarService) { var collectionCalendar = await collectionCalendarService.Get(); RemoveUnpaidEarnings(Model.PendingPaymentModels.Where(x => x.DueDate >= dateStopped)); ClawbackPayments(PendingPayments.Where(x => x.DueDate >= dateStopped), collectionCalendar.GetActivePeriod()); }
private PendingPayment GetPendingPaymentForValidationCheck(Guid pendingPaymentId) { var pendingPayment = PendingPayments.SingleOrDefault(x => x.Id == pendingPaymentId); if (pendingPayment == null) { throw new InvalidPendingPaymentException($"Unable to validate PendingPayment {pendingPaymentId} of ApprenticeshipIncentive {Model.Id} because the pending payment record does not exist."); } return(pendingPayment); }
private PendingPayment GetPendingPayment(Guid pendingPaymentId) { var pendingPayment = PendingPayments.SingleOrDefault(x => x.Id == pendingPaymentId); if (pendingPayment == null) { throw new ArgumentException("Pending payment does not exist."); } return(pendingPayment); }
private void AddPendingPaymentsAndClawbackWhereRequired(ValueObjects.Payment payment, CollectionCalendar collectionCalendar) { var pendingPayment = PendingPayment.New( Guid.NewGuid(), Model.Account, Model.Id, payment.Amount, payment.PaymentDate, DateTime.Now, payment.EarningType); pendingPayment.SetPaymentPeriod(collectionCalendar); var existingPendingPayment = PendingPayments.SingleOrDefault(x => x.EarningType == pendingPayment.EarningType && !x.ClawedBack); if (existingPendingPayment == null) { Model.PendingPaymentModels.Add(pendingPayment.GetModel()); return; } if (ExistingPendingPaymentHasBeenPaid(existingPendingPayment)) { if (!existingPendingPayment.RequiresNewPayment(pendingPayment)) { return; } AddClawback(existingPendingPayment, collectionCalendar.GetActivePeriod()); Model.PendingPaymentModels.Add(pendingPayment.GetModel()); return; } RemoveUnpaidPaymentIfExists(existingPendingPayment); if (!existingPendingPayment.EquivalentTo(pendingPayment)) { if (!existingPendingPayment.RequiresNewPaymentAfterBreakInLearning(Model.BreakInLearnings)) { return; } var existingPendingPaymentModel = existingPendingPayment.GetModel(); if (Model.PendingPaymentModels.Remove(existingPendingPaymentModel)) { AddEvent(new PendingPaymentDeleted(Model.Account.Id, Model.Account.AccountLegalEntityId, Model.Apprenticeship.UniqueLearnerNumber, existingPendingPaymentModel)); } Model.PendingPaymentModels.Add(pendingPayment.GetModel()); } }