public async Task <IActionResult> ConvertMiles(ConvertMilesViewModel model) { if (ModelState.IsValid) { if (model.Quantity != 2000) { ModelState.AddModelError(string.Empty, "Can only convert 2000 miles per transaction"); } var client = await _clientRepository.GetClientByEmailAsync(User.Identity.Name); if (client == null) { return(NotFound()); } model.CreditCardInfo.Client = client; await _creditCardRepository.CheckExistingCreditCardByNumberAsync(model.CreditCardInfo); ViewData["Message"] = await _milesTransactionRepository.ConvertMilesAsync(model.Quantity, client); ResetModel(model); return(View(model)); } return(View(model)); }
public IActionResult ConvertMiles() { // Generates a new instance of ProlongMilesViewModel var model = new ConvertMilesViewModel { BonusAmount = 2000, StatusAmount = 1000 }; return(View(model)); }
public IActionResult ConvertMiles() { var model = new ConvertMilesViewModel { Quantity = 2000 }; model.ValueToPay = Math.Round(model.Quantity * 0.035m, 0); model.StatusMilesToReceive = model.Quantity / 2; return(View(model)); }
public Mile ToMile(ConvertMilesViewModel model, int clientId) { return(new Mile { ClientId = clientId, ExpirationDate = DateTime.Now.AddYears(1), IsAproved = true, IsDeleted = false, MilesTypeId = 1, Qtd = model.StatusAmount }); }
public Transaction ToTransaction(ConvertMilesViewModel model, Mile mile) { return(new Transaction { ClientID = mile.ClientId, Description = "Converted", IsAproved = true, IsDeleted = false, Price = 70, IsCreditCard = true, TransactionDate = DateTime.Now, Value = -model.BonusAmount }); }
public async Task <IActionResult> ConvertMiles(ConvertMilesViewModel model) { if (ModelState.IsValid) { var client = await _clientRepository.GetByEmailAsync(this.User.Identity.Name); if (client == null) { return(NotFound()); } //Checks if the maximum value of transfered miles has been reached var convertMiles = model.BonusAmount + client.ExtendedMiles; if (convertMiles > 20000) { this.ModelState.AddModelError(string.Empty, "You can only convert a maximum of 20.000 Miles per Year"); return(View(model)); } //Checks if client is eligeable for mile conversion int totalStatusMiles = _mileRepository.GetClientTotalStatusMiles(client.Id); var status = await _userRepository.GetClientStatusRoleAsync(this.User.Identity.Name); if (string.IsNullOrEmpty(status)) { return(NotFound()); } if ((status == "Basic" && (totalStatusMiles < 25000 || totalStatusMiles >= 30000)) || (status == "Silver" && (totalStatusMiles < 65000 || totalStatusMiles >= 70000)) || status == "Gold") { ViewBag.Message = "You aren't eligeable for mile conversion"; return(View(model)); } // Gets a list of the client Bonus Miles var clientMiles = _mileRepository.GetAllBonusMiles(client.Id); // Creates a new Mile Object for the client var mile = _converterHelper.ToMile(model, client.Id); var convertedMiles = _converterHelper.ToTransaction(model, mile); // Creates a transaction on the Database try { await _transactionRepository.CreateAsync(convertedMiles); } catch (Exception) { this.ModelState.AddModelError(string.Empty, "There was an error processing your conversion. Please try again later"); return(View(model)); } // Converts the Miles var convertSuccess = await _mileRepository.SpendMilesAsync(clientMiles, model.BonusAmount); if (!convertSuccess) { this.ModelState.AddModelError(string.Empty, "There was a critical error with the conversion algorithm. Please contact the Administrator as soon as possible"); return(View(model)); } // Creates a new Mile on the DataBase try { await _mileRepository.CreateAsync(mile); } catch (Exception) { this.ModelState.AddModelError(string.Empty, "There was an error processing your purchase.Please try again later"); return(View(model)); } // Updates the client Converted Miles on the DataBase try { client.ConvertedMiles = convertMiles; await _clientRepository.UpdateAsync(client); } catch (Exception) { this.ModelState.AddModelError(string.Empty, "There was an error processing your purchase.Please try again later"); return(View(model)); } ViewBag.Message = "Your conversion of miles was successful!"; } return(View(model)); }