Beispiel #1
0
        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));
            }
        }
Beispiel #4
0
        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);
        }