public async Task <AnonymousCartViewModel> GetLastCheckoutDetailsAsync(string username) { var result = new AnonymousCartViewModel(); result.Products = new List <PurchaseProductsAnonymousViewModel>(); var user = await this.context.Users.FirstOrDefaultAsync(x => x.UserName == username); var lastShipment = user.Shipments.OrderByDescending(x => x.PurchaseDate).ToList().Take(1); foreach (var shipment in lastShipment) { foreach (var productShipment in shipment.ShipmentProducts) { var product = productShipment.Product; result.Products.Add(new PurchaseProductsAnonymousViewModel { Id = shipment.Id.ToString(), PictureUrl = product.MainPicture.Url, Price = product.Price * productShipment.Quantity, Title = product.Title, Quantity = productShipment.Quantity, }); } } result.FirstName = user.FirstName; result.LastName = user.LastName; result.PhoneNumber = user.PhoneNumber; result.Address = user.Address; result.Email = user.Email; result.City = user.City; return(result); }
public async Task <IActionResult> CheckoutDetailsAnonymous(AnonymousCartViewModel form) { var cookiesJson = this.HttpContext.Session.GetString("Cart"); var cookieModel = JsonConvert.DeserializeObject <CartCookieModel>(cookiesJson); if (form.Products == null) { form.Products = new List <PurchaseProductsAnonymousViewModel>(); } foreach (var product in cookieModel.Products) { var pr = await this.productService.GetProductAsync(product.ProductId); form.Products.Add(new PurchaseProductsAnonymousViewModel { Id = pr.Id, PictureUrl = pr.MainPicture.Url, Price = pr.Price, ProductUrl = "/Products/" + pr.Category.Name + "/" + pr.Id, Title = pr.Title, Quantity = product.Quantity }); } this.HttpContext.Session.SetString("Cart", "empty"); return(this.View("CheckoutDetails", form)); }
public async Task <IActionResult> CheckoutAnonymous(AnonymousCartViewModel form) { if (this.ModelState.IsValid) { if (this.User.Identity.IsAuthenticated) { return(this.RedirectToAction("Error", "Home")); } if (this.HttpContext.Session.GetString("Cart") == "empty") { return(this.RedirectToAction("EmptyCart")); } var cookiesJson = this.HttpContext.Session.GetString("Cart"); var cookieModel = JsonConvert.DeserializeObject <CartCookieModel>(cookiesJson); var quantity = cookieModel.Products.Sum(x => x.Quantity); if (quantity == 0) { return(this.RedirectToAction("EmptyCart")); } if (form.Products == null) { form.Products = new List <PurchaseProductsAnonymousViewModel>(); } foreach (var product in cookieModel.Products) { var pr = await this.productService.GetProductAsync(product.ProductId); form.Products.Add(new PurchaseProductsAnonymousViewModel { Id = pr.Id, PictureUrl = pr.MainPicture.Url, Price = pr.Price, ProductUrl = "/Products/" + pr.Category.Name + "/" + pr.Id, Title = pr.Title, Quantity = product.Quantity }); } await this.service.ChechoutAnonymousAsync(form); return(this.RedirectToAction("CheckoutDetailsAnonymous", form)); } else { return(this.View("ReviewCartAnonymous", form)); } }
public async Task ChechoutAnonymousAsync(AnonymousCartViewModel form) { var user = new User { FirstName = form.FirstName, LastName = form.LastName, Email = form.Email, City = form.City, PhoneNumber = form.PhoneNumber, Address = form.Address }; var userCartProducts = form.Products; var shipmentProducts = new List <ShipmentProduct>(); foreach (var cartProduct in userCartProducts) { shipmentProducts.Add(new ShipmentProduct { ProductId = cartProduct.Id, Quantity = cartProduct.Quantity }); } var shipment = new Shipment { ClientResponse = Data.Models.Enums.ClientResponse.AwaitingResponse, ConfirmationStatus = Data.Models.Enums.ConfirmationStatus.AwaitingResponse, PurchaseDate = DateTime.UtcNow, ShipmentProducts = shipmentProducts, ShippingCompany = (ShippingCompany)Enum.Parse(typeof(ShippingCompany), form.ShippingCompany.ToString("g")), ShipmentDetails = ShipmentDetails.Send, }; user.Shipments.Add(shipment); await this.context.Users.AddAsync(user); await this.context.SaveChangesAsync(); }
public async Task CheckoutAnonumousUserWorksAsExected() { var context = PCHUBDbContextInMemoryInitializer.InitializeContext(); var productService = new ProductServices(context); var shopService = new ShopServices(context, productService); var products = new List <PurchaseProductsAnonymousViewModel>(); products.Add(new PurchaseProductsAnonymousViewModel { Id = "randomId", Quantity = 1, Title = "Laptop Acer 31", Price = 2000, }); var anonymousCartViewModel = new AnonymousCartViewModel { FirstName = "Sensei", LastName = "Senseev", Address = "SenseiTv never purchase dot com", City = "Senseevo", ShippingCompany = View.Models.ShoppingCartViewModels.Enums.ShippingCompany.Econt, Email = "*****@*****.**", PhoneNumber = "023231233", Products = products, }; await shopService.ChechoutAnonymousAsync(anonymousCartViewModel); var user = await context.Users.FirstOrDefaultAsync(x => x.FirstName == "Sensei"); Assert.NotNull(user); var userShipmentsExist = user.Shipments.Any(); Assert.True(userShipmentsExist); }