public ActionResult Transfer(TrensferFrom trensferFrom)
        {
            if (TransactionCustomer == null)
            {
                TempData["error"] = "Client inconnu";
                return(RedirectToAction("Index", "Home"));
            }
            var customer = customerRepo.GetCustomerByID(TransactionCustomer.ID);

            if (ModelState.IsValid)
            {
                var sourceAccount = accountRepo.GetAccountByID(trensferFrom.SourceAccount);
                ValideTrensfer(trensferFrom, customer, sourceAccount);
                if (ModelState.IsValid)
                {
                    var accounts             = accountRepo.GetAccounts();
                    var destinationAccount   = accounts.FirstOrDefault(account => account.IBAN == trensferFrom.IBAN);
                    var sourceAtaTransaction = new AccountToAcountTransaction
                    {
                        Account         = sourceAccount,
                        Source          = sourceAccount,
                        Destination     = destinationAccount,
                        Date            = DateTime.Now,
                        Amount          = trensferFrom.Amount,
                        TransactionType = TransactionType.DEBIT,
                        Title           = trensferFrom.Label + " - " + trensferFrom.DestinationFullName
                    };
                    transactionRepo.InsertTransaction(sourceAtaTransaction);
                    sourceAccount.Debit(trensferFrom.Amount);
                    if (destinationAccount != null)
                    {
                        var destinationAtaTransaction = new AccountToAcountTransaction
                        {
                            Account         = destinationAccount,
                            Date            = DateTime.Now,
                            Amount          = trensferFrom.Amount,
                            TransactionType = TransactionType.CREDIT,
                            Title           = trensferFrom.Label + " - " + trensferFrom.DestinationFullName
                        };
                        transactionRepo.InsertTransaction(destinationAtaTransaction);
                        destinationAccount.Credit(trensferFrom.Amount);
                    }
                    TempData["notice"] = "virement enregistré";
                    accountRepo.Save();
                    return(RedirectToAction("Index", "Customer"));
                }
            }
            return(View(getSelectableAccounts(customer)));
        }
 private void ValideTrensfer(TrensferFrom trensferFrom, Customer customer, Account sourceAccount)
 {
     if (trensferFrom.Amount <= 0 || trensferFrom.Amount > 5000)
     {
         ModelState.AddModelError("Amount", "Montant invalid : le montant doit etre compris entre 1 € et 5000 €");
     }
     if (!customer.Accounts.Exists(ac => ac.ID == trensferFrom.SourceAccount))
     {
         ModelState.AddModelError("SourceAcount", "Compte invalide");
     }
     if (customer.Accounts.Single(a => a.ID == trensferFrom.SourceAccount).IBAN == trensferFrom.IBAN)
     {
         ModelState.AddModelError("IBAN", "Compte source et distination son les memes");
     }
     if (sourceAccount.Solde - trensferFrom.Amount < 0)
     {
         ModelState.AddModelError("Amount", "Solde insufissant pour effectuer ce virement");
     }
 }