예제 #1
0
 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.");
     }
 }
예제 #2
0
        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.");
            }
        }