Пример #1
0
        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));
        }
Пример #2
0
        public IActionResult ConvertMiles()
        {
            // Generates a new instance of ProlongMilesViewModel
            var model = new ConvertMilesViewModel
            {
                BonusAmount  = 2000,
                StatusAmount = 1000
            };

            return(View(model));
        }
Пример #3
0
        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));
        }
Пример #4
0
 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
     });
 }
Пример #5
0
 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
     });
 }
Пример #6
0
        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));
        }