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