public override void Credit() { if (CurrentMovement?.AtmWithdrawId != null) { var atmWithdraw = AtmWithdrawRepository.GetById(CurrentMovement.AtmWithdrawId.Value); Credit(atmWithdraw, CurrentMovement); } else { throw new ArgumentException("ATM Withdraw can't be null."); } }
public override void UpdateDebit(Movement newMovement) { if (CurrentMovement.AtmWithdrawId.HasValue) { var atmWithdraw = AtmWithdrawRepository.GetById(CurrentMovement.AtmWithdrawId.Value); if (CurrentMovement.PaymentMethod != newMovement.PaymentMethod) { Credit(atmWithdraw, CurrentMovement); var strategy = ContextMovementStrategy.GetMovementStrategy(newMovement, BankAccountRepository, HistoricMovementRepository, IncomeRepository, AtmWithdrawRepository); strategy.Debit(); } else { if (!newMovement.AtmWithdrawId.HasValue) { throw new ArgumentException("New Target account can't be null."); } if (CurrentMovement.AtmWithdrawId.Value != newMovement.AtmWithdrawId.Value) { var newAtmWithdraw = AtmWithdrawRepository.GetById(newMovement.AtmWithdrawId.Value); Credit(atmWithdraw, CurrentMovement); Debit(newAtmWithdraw, newMovement); } else if (CurrentMovement.Amount != newMovement.Amount) { Credit(atmWithdraw, CurrentMovement); Debit(atmWithdraw, newMovement); } } } else { throw new ArgumentException("Current Source account & Target ATM can't be null."); } }