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"); } }