public async Task <IActionResult> BuyProductWithoutCard(BuyProductsViewModel dto)
        {
            if (dto.ProductId is null)
            {
                return(NotFound());
            }

            if (!ModelState.IsValid)
            {
                return(View("~/Areas/Guest/Views/Transactions/Buy.cshtml", dto));
            }

            var product = await this.productService.GetByIdAsync(dto.ProductId.Value);

            if (product.Quantity < 1)
            {
                return(View("~/Areas/Guest/Views/Transactions/TransactionError.cshtml"));
            }

            var priceConverted = CurrencyConversion(product.Price, Currency.RON, dto.Currency);

            var transaction = new Transaction
            {
                Products = JsonConvert.SerializeObject(new List <Product> {
                    product
                }),
                DeliveryDetails = JsonConvert.SerializeObject(dto.DeliveryDetails),
                DeliveryPayment = true,
                Currency        = dto.Currency,
                Value           = priceConverted
            };
            await transactionService.CreateAsync(transaction);

            return(View("~/Areas/Guest/Views/Transactions/TransactionSuccess.cshtml"));
        }
Exemple #2
0
        public async Task <IActionResult> BuyProducts()
        {
            var currentUserId = this.userManager.GetUserId(this.User);
            var cards         = await this.cardService.GetEagerAllActiveByUserIdAsync(currentUserId);

            var viewModel = new BuyProductsViewModel
            {
                Cards = cards
            };

            return(View("~/Areas/Admin/Views/Transactions/Buy.cshtml", viewModel));
        }
        public async Task <IActionResult> BuyProduct(Guid?id)
        {
            if (id is null)
            {
                return(NotFound());
            }
            var viewModel = new BuyProductsViewModel
            {
                ProductId = id.Value
            };

            return(View("~/Areas/Guest/Views/Transactions/Buy.cshtml", viewModel));
        }
        public async Task <IActionResult> BuyProducts()
        {
            var viewModel = new BuyProductsViewModel();

            return(View("~/Areas/Guest/Views/Transactions/Buy.cshtml", viewModel));
        }
        public async Task <IActionResult> BuyProductsWithCard(BuyProductsViewModel dto)
        {
            if (dto.CardId is null)
            {
                ModelState.AddModelError("CardRequired", "Card is required");
            }
            if (!ModelState.IsValid)
            {
                return(View("~/Areas/Admin/Views/Transactions/Buy.cshtml", dto));
            }

            var card = await this.cardService.GetByIdAsync(dto.CardId.Value);

            var currentUserId = this.userManager.GetUserId(this.User);
            var currentUser   = await this.applicationUserService.GetByIdAsync(currentUserId);

            if (currentUser is null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            var shoppingCart = new List <Guid>();

            if (currentUser.ShoppingCart != null)
            {
                shoppingCart = JsonConvert.DeserializeObject <List <Guid> >(currentUser.ShoppingCart);
            }

            var productsBought = new List <Guid>();
            var productsAmount = 0.0;
            var productsTemp   = await this.productService.GetByIdsAsync(shoppingCart);

            foreach (var product in productsTemp)
            {
                if (product.Quantity > 0)
                {
                    product.Quantity--;
                    productsBought.Add(product.Id);
                    productsAmount += product.Price;
                    await this.productService.UpdateAsync(product);
                }
            }

            if (!productsBought.Any())
            {
                return(View("~/Areas/Admin/Views/Transactions/TransactionError.cshtml"));
            }

            var priceConverted = CurrencyConversion(productsAmount, Currency.RON, card.Currency);

            if (priceConverted >= card.Amount)
            {
                return(RedirectToAction(nameof(Index)));
            }

            var transaction = new Transaction
            {
                CardId          = card.Id,
                DeliveryDetails = JsonConvert.SerializeObject(dto.DeliveryDetails),
                Products        = currentUser.ShoppingCart,
                BuyerId         = currentUser.Id,
                Currency        = card.Currency,
                Value           = priceConverted
            };
            await transactionService.CreateAsync(transaction);

            card.Amount = card.Amount - priceConverted;
            await this.cardService.UpdateAsync(card);

            currentUser.ShoppingCart = JsonConvert.SerializeObject(new List <Guid>());
            await this.applicationUserService.UpdateAsync(currentUser);

            var viewModel = this.autoMapper.Map <TransactionDetailsViewModel>(transaction);

            viewModel.Buyer = currentUser;
            productsTemp    = new List <Product>();
            foreach (var id in productsBought)
            {
                productsTemp.Add(await this.productService.GetEagerByIdAsync(id));
            }
            viewModel.ProductsDeserialized = productsTemp;

            return(View("~/Areas/Admin/Views/Transactions/Details.cshtml", viewModel));
        }