public async Task <CartExtendedResponse> Handle( CreateCartCommand command, CancellationToken cancellationToken) { var entity = new Entities.Cart { Items = command.ItemsIds.Select(x => new CartItem { CartItemId = new Guid(x), Quantity = 1 }).ToList(), User = new CartUser { Email = command.UserEmail }, ValidityDate = DateTimeOffset.Now.AddMonths(2), Id = Guid.NewGuid().ToString() }; var result = await _repository.AddOrUpdateAsync(entity); var response = _mapper.Map <CartExtendedResponse>(result); var tasks = response.Items .Select(async x => await _catalogService.EnrichCartItem(x, cancellationToken)); response.Items = await Task.WhenAll(tasks); return(response); }
public async Task <ResponseGeneric> Handle(ChangeQuantityRequest request, CancellationToken cancellationToken) { request.Validate(); if (request.Invalid) { AddNotifications(request.Notifications); return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Item inválido.", request.Notifications)); } Entities.User user = this.userRepository.GetBy(x => x.Id == request.UserId); if (user == null) { AddNotification("User", "Usuário inválido"); return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Usuário inválido.", Notifications)); } Entities.Cart cartAdd = this.cartRepository.GetBy(x => x.Id == request.Id, x => x.User); if (cartAdd == null) { AddNotification("Cart", "Item inválido"); return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Item não encontrado.", Notifications)); } if (cartAdd.User.Id != user.Id) { AddNotification("User", "Operação não permitida"); return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Usuário inválido.", Notifications)); } if (request.Operation == Enums.ECartOperation.Add) { cartAdd.incrementQuantity(); } else if (request.Operation == Enums.ECartOperation.Rem) { if (cartAdd.Quantity == 1) { AddNotification("User", "Operação não permitida"); return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho! Quantidade é 1.", Notifications)); } cartAdd.decrementQuantity(); } this.cartRepository.Update(cartAdd); if (await this.unitOfWork.SaveChanges() == 0) { AddNotification("Cart", "Erro ao adicionar/remover o item do carrinho"); return(new ResponseGeneric(false, "Não foi possível adicionar/remover o item do carrinho!", Notifications)); } var response = new ResponseGeneric(true, "Item adicionar/removido com sucesso do carrinho", null); return(await Task.FromResult(response)); }
public IActionResult CreateCart() { var cart = new Entities.Cart(); SaveCartToCache(cart); return(Ok(cart)); }
public async Task <IActionResult> OnGetAsync() { Cart = Entities.Cart.GetFrom(HttpContext.Session); var movieSessionIds = Cart.CartItems.Select(ci => ci.MovieSessionId); if (Cart.CartItems.Count() == 0) { return(Page()); } var movieSessions = await _dbContext.MovieSessions .Include(ms => ms.Movie) .Include(ms => ms.Theater) .Where(ms => movieSessionIds.Contains(ms.Id)) .AsNoTracking() .ToListAsync(); foreach (var cartItem in Cart.CartItems) { cartItem.MovieSession = movieSessions.FirstOrDefault(ms => ms.Id == cartItem.MovieSessionId); } return(Page()); }
public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingInfo) { using (SmtpClient smtpClient = new SmtpClient()) { smtpClient.EnableSsl = emailSettings.UseSsl; smtpClient.Host = emailSettings.Servername; smtpClient.Port = emailSettings.ServerPort; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(emailSettings.Username, emailSettings.Password); if (emailSettings.WriteAsFile) { smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.PickupDirectoryLocation = emailSettings.FileLocation; smtpClient.EnableSsl = false; } StringBuilder body = new StringBuilder() .AppendLine("A new order has been submitted") .AppendLine("---") .AppendLine("Items:"); foreach (var line in cart.Lines) { var subtotal = line.Product.Price * line.Quantity; body.AppendFormat("{0} x {1} (subtotal: {2:c}", line.Quantity, line.Product.Name, subtotal); } body.AppendFormat("Total order value: {0:c}", cart.ComputeTotalValue()) .AppendLine("---") .AppendLine("Ship to:") .AppendLine(shippingInfo.Name) .AppendLine(shippingInfo.Line1) .AppendLine(shippingInfo.Line2 ?? "") .AppendLine(shippingInfo.Line3 ?? "") .AppendLine(shippingInfo.City) .AppendLine(shippingInfo.State ?? "") .AppendLine(shippingInfo.Country) .AppendLine(shippingInfo.Zip) .AppendLine("---") .AppendFormat("Gift wrap: {0}", shippingInfo.GiftWrap ? "Yes" : "No"); MailMessage mailMessage = new MailMessage( emailSettings.MailFromAddress, // From emailSettings.MailToAddress, // To "New order submitted!", // Subject body.ToString()); // Body if (emailSettings.WriteAsFile) { mailMessage.BodyEncoding = Encoding.ASCII; } smtpClient.Send(mailMessage); } }
public void ClearCart(Entities.Cart cart) { foreach (var cartItem in cart.CartItems) { this.cartItemProvider.Delete(cartItem); } this.SaveChanges(); }
public void RemoveFromCart(Entities.Cart cart, Guid productId) { var cartItem = this.GetCartItemByProductId(productId); if (cartItem != null) { this.cartItemProvider.Delete(cartItem); this.SaveChanges(); } }
public void ProcessorOrder(Entities.Cart cart, Entities.ShoppingDetails shoppingDetails) { using (var smtpClient = new SmtpClient()) { smtpClient.EnableSsl = emailSetting.UseSsl; smtpClient.Host = emailSetting.ServerName; smtpClient.Port = emailSetting.ServerPort; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(emailSetting.Username, emailSetting.Password); if (emailSetting.WriteAsFile) { smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.PickupDirectoryLocation = emailSetting.FileLication; smtpClient.EnableSsl = false; } StringBuilder body = new StringBuilder() .AppendLine("New order compete") .AppendLine("---") .AppendLine("Goods"); foreach (var line in cart.Lines) { var subtotal = line.Book.Price * line.Quantity; body.AppendFormat("{0} x {1} (Total: {2:c}", line.Quantity, line.Book.Name, subtotal); } body.AppendFormat("Total cost: {0:c}", cart.ComputeTotalValue()) .AppendLine("---") .AppendLine("Delivery:") .AppendLine(shoppingDetails.Name) .AppendLine(shoppingDetails.Line1) .AppendLine(shoppingDetails.Line2 ?? "") .AppendLine(shoppingDetails.Line3 ?? "") .AppendLine(shoppingDetails.City) .AppendLine(shoppingDetails.Country) .AppendLine("---") .AppendFormat("Gift wrap: {0}", shoppingDetails.GiftWrap ? "Yes":"No"); MailMessage mailMessage = new MailMessage( emailSetting.MailFromAdress, emailSetting.MailToAdress, "New order complete!", body.ToString() ); if (emailSetting.WriteAsFile) { mailMessage.BodyEncoding = Encoding.UTF8; } smtpClient.Send(mailMessage); } }
public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingDetails) { using (var smtpClient = new SmtpClient()) { smtpClient.EnableSsl = emailSettings.UseSsl; smtpClient.Host = emailSettings.ServerName; smtpClient.Port = emailSettings.ServerPort; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(emailSettings.Username, emailSettings.Password); if (emailSettings.WriteAsFile) { smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.PickupDirectoryLocation = emailSettings.FileLocation; smtpClient.EnableSsl = false; } StringBuilder body = new StringBuilder() .AppendLine("Нове замовлення опрацьоване") .AppendLine("---") .AppendLine("Товари:"); foreach (var line in cart.Lines) { var subtotal = line.Product.Price * line.Quantity; body.AppendFormat("{0} x {1} (Всього: {2:c}", line.Quantity, line.Product.Name, subtotal); } body.AppendFormat("Загальна вартість: {0:c}", cart.ComputeTotalValue()) .AppendLine("---") .AppendLine("Доставка:") .AppendLine(shippingDetails.Name) .AppendLine(shippingDetails.Line1) .AppendLine(shippingDetails.Line2 ?? "") .AppendLine(shippingDetails.Line3 ?? "") .AppendLine(shippingDetails.City) .AppendLine(shippingDetails.Phone) .AppendLine("---") .AppendFormat("Подарункове пакування: {0}", shippingDetails.GiftWrap ? "Так" : "Ні"); MailMessage mailMessage = new MailMessage( emailSettings.MailFromAddress, emailSettings.MailToAddress, "Нове замовлення відправлене!", body.ToString() ); if (emailSettings.WriteAsFile) { mailMessage.BodyEncoding = Encoding.UTF8; } smtpClient.Send(mailMessage); } }
public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingDetails) { using (var smtpClient = new SmtpClient()) { smtpClient.EnableSsl = emailSettings.UseSsl; smtpClient.Host = emailSettings.ServerName; smtpClient.Port = emailSettings.ServerPort; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(emailSettings.Username, emailSettings.Password); if (emailSettings.WriteAsFile) { smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.PickupDirectoryLocation = emailSettings.FileLocation; smtpClient.EnableSsl = false; } StringBuilder body = new StringBuilder() .AppendLine("Новый заказ обработан") .AppendLine("---") .AppendLine("Товары:"); foreach (var line in cart.Lines) { var subtotal = line.Book.Price * line.Quantity; body.AppendFormat("{0} x {1} (итого: {2:c}", line.Quantity, line.Book.Name, subtotal); } body.AppendFormat("Общая стоимость: {0:c}", cart.ComputeTotalValue()) .AppendLine("---") .AppendLine("Доставка:") .AppendLine(shippingDetails.Name) .AppendLine(shippingDetails.Line1) .AppendLine(shippingDetails.Line2 ?? "") .AppendLine(shippingDetails.Line3 ?? "") .AppendLine(shippingDetails.City) .AppendLine(shippingDetails.Country) .AppendLine("---") .AppendFormat("Упаковка: {0}", shippingDetails.GiftWrap ? "Да" : "Нет"); MailMessage mailMessage = new MailMessage( emailSettings.MailFromAddress, emailSettings.MailToAddress, "Новый заказ отправлен!", body.ToString() ); if (emailSettings.WriteAsFile) { mailMessage.BodyEncoding = Encoding.UTF8; } smtpClient.Send(mailMessage); } }
public async Task <Entities.Cart> UpdateCart(Entities.Cart cart) { var cartEdit = await _context.Redis.StringSetAsync(cart.UserName, JsonSerializer.Serialize(cart)); if (!cartEdit) { return(null); } return(await GrtCart(cart.UserName)); }
public void ProcessReservation(Entities.Cart cart, Entities.BookingDetails bookingDetails) { using (var smtpClient = new SmtpClient()) { smtpClient.EnableSsl = emailSettings.UseSsl; smtpClient.Host = emailSettings.ServerName; smtpClient.Port = emailSettings.ServerPort; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(emailSettings.Username, emailSettings.Password); if (emailSettings.WriteAsFile) { smtpClient.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.PickupDirectoryLocation = @"c:\bookingshop_emails"; smtpClient.EnableSsl = false; } StringBuilder body = new StringBuilder() .AppendLine("Новая заявка обработана") .AppendLine("---") .AppendLine("Подробности заявки:"); foreach (var line in cart.Lines) { var sum = line.Hotel.PriceForPerson * bookingDetails.PersonAmount * bookingDetails.NightsAmount; body.AppendFormat("Общая стоимость: {0:c}", sum); } body.AppendFormat(":") .AppendLine("---") .AppendLine(bookingDetails.FullName + "\n") .AppendLine(bookingDetails.ArrivalDate + "\n") .AppendLine(bookingDetails.PersonAmount + "\n") .AppendLine(bookingDetails.NightsAmount + "\n") .AppendLine("---") .AppendLine("Почта для обратной связи: \n" + bookingDetails.Email); MailMessage mailMessage = new MailMessage( emailSettings.MailFromAddress, emailSettings.MailToAddress, "Новая заявка отправлена!", body.ToString() ); if (emailSettings.WriteAsFile) { mailMessage.BodyEncoding = Encoding.UTF8; } smtpClient.Send(mailMessage); } }
public static Cart GetFrom(ISession session) { var cart = session.Get <Cart>("cart"); if (cart == null) { cart = new Entities.Cart { CartItems = new List <CartItem>() }; } return(cart); }
public void UpdateCartItem(Entities.Cart cart, Guid productId, int quantity) { var cartItem = this.GetCartItemByProductId(productId); if (cartItem == null) { this.AddToCart(cart, productId, quantity); } else { cartItem.Quantity = quantity; } this.SaveChanges(); }
public async Task GivenItemNotInCart_AddOrUpdate_SetsCountToOne() { //arrange var actual = new Entities.Cart { Count = 1 }; Mapper.Setup(mapper => mapper.Map <Entities.Cart>(It.IsAny <Cart>())).Returns(actual); var sut = new CartService(CartCalculatorService.Object, CartRepository.Object, Mapper.Object); //act await sut.AddOrUpdate(new Cart()); //assert Assert.Equal(1, actual.Count); }
public void UpdateCartItems(Entities.Cart cart, IEnumerable <CartItem> cartItems) { foreach (var cartItem in cartItems) { var persistedCartItem = cart.CartItems.First(i => i.Id == cartItem.Id); if (persistedCartItem == null) { continue; } persistedCartItem.Product = cartItem.Product; persistedCartItem.Quantity = cartItem.Quantity; } this.SaveChanges(); }
public async Task <IActionResult> OnGetAsync() { var cart = Entities.Cart.GetFrom(HttpContext.Session); // No items in the cart if (cart.CartItems.Count() == 0) { return(RedirectToPage("/Cart/Index")); } // If there are remaining seats to be filled in if (cart.RemainingSeats != 0) { TempData["Danger"] = $"There are still {cart.RemainingSeats} seat{(cart.RemainingSeats != 1 ? "s" : "")} remaining to be filled in"; return(RedirectToPage("/Cart/Index")); } //// If a seat is missing, redirect back to cart page //var hasSelectedAllSeats = cart.CartItems.All( // ci => ci.Seats != null && // ci.Seats.Count(s => !string.IsNullOrWhiteSpace(s)) == ci.TicketQuantity //); //if (hasSelectedAllSeats == false) //{ // TempData["Danger"] = "You can only proceed to cart after you have selected all your seats"; // return RedirectToPage("/Cart/Index"); //} // Get all movie sessions var movieSessionIds = cart.CartItems.Select(ci => ci.MovieSessionId); var movieSessions = await _context.MovieSessions .Include(ms => ms.Movie) .Include(ms => ms.Theater) .Where(ms => movieSessionIds.Contains(ms.Id)) .AsNoTracking() .ToListAsync(); foreach (var cartItem in cart.CartItems) { cartItem.MovieSession = movieSessions.FirstOrDefault(ms => ms.Id == cartItem.MovieSessionId); } Cart = cart; return(Page()); }
public async Task <ResponseGeneric> Handle(RemoveProductRequest request, CancellationToken cancellationToken) { request.Validate(); if (request.Invalid) { AddNotifications(request.Notifications); return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Item inválido.", request.Notifications)); } Entities.User user = this.userRepository.GetBy(x => x.Id == request.UserId); if (user == null) { AddNotification("User", "Usuário inválido"); return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Usuário inválido.", Notifications)); } Entities.Cart cartAdd = this.cartRepository.GetBy(x => x.Id == request.Id, x => x.User); if (cartAdd == null) { AddNotification("Cart", "Item inválido"); return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Item não encontrado.", Notifications)); } if (cartAdd.User.Id != user.Id) { AddNotification("User", "Operação não permitida"); return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho! Usuário inválido.", Notifications)); } cartAdd.setRemoved(); this.cartRepository.Update(cartAdd); if (await this.unitOfWork.SaveChanges() == 0) { AddNotification("Cart", "Erro ao remover o item do carrinho"); return(new ResponseGeneric(false, "Não foi possível remover o item do carrinho!", Notifications)); } var response = new ResponseGeneric(true, "Item removido com sucesso do carrinho", null); return(await Task.FromResult(response)); }
public async Task <IActionResult> OnPostCheckOutAsync() { Cart = await _cartRepository.GetCartByUserName("test"); if (!ModelState.IsValid) { return(Page()); } Order.UserName = "******"; Order.TotalPrice = Cart.TotalPrice; await _orderRepository.CheckOut(Order); await _cartRepository.ClearCart("test"); return(RedirectToPage("Confirmation", "OrderSubmitted")); }
public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingInfo) { using (var smtpClient = new SmtpClient()) { smtpClient.EnableSsl = emailSettings.UseSsl; smtpClient.Host = emailSettings.ServerName; smtpClient.Port = emailSettings.ServerPort; smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(emailSettings.UserName, emailSettings.Password); StringBuilder emailBody = new StringBuilder() .AppendLine("A new order has been submitted") .AppendLine("---") .AppendLine("Items:"); foreach (var line in cart.CartItems) { var subtotal = line.Product.Price * line.Quantity; emailBody.AppendFormat("{0} x {1} (subtotal: {2:c})\n", line.Quantity, line.Product.Name, subtotal); } emailBody.AppendFormat("Total order value: {0:c}", cart.ComputeTotalPrice()) .AppendLine("---") .AppendLine("Ship to:") .AppendLine(shippingInfo.Name) .AppendLine(shippingInfo.AddressLine1) .AppendLine(shippingInfo.AddressLine2 ?? "") .AppendLine(shippingInfo.AddressLine3 ?? "") .AppendLine(shippingInfo.City) .AppendLine(shippingInfo.State ?? "") .AppendLine(shippingInfo.Country) .AppendLine(shippingInfo.Zip) .AppendLine("---") .AppendFormat("Gift wrap: {0}", shippingInfo.GiftWrap ? "Yes" : "No"); MailMessage mailMessage = new MailMessage(new MailAddress(emailSettings.MailFromAddress).Address, new MailAddress(emailSettings.MailToAddress).Address, "New order submitted!", emailBody.ToString()); smtpClient.Send(mailMessage); } }
private async Task RemoveItemsInCart(string itemToRemove, Entities.Cart cart) { if (string.IsNullOrEmpty(itemToRemove)) { return; } var toDelete = cart?.Items?.Where(x => x.CartItemId.ToString() == itemToRemove).ToList(); if (toDelete == null || toDelete.Count == 0) { return; } foreach (var item in toDelete) { cart.Items?.Remove(item); } await _cartRepository.AddOrUpdateAsync(cart); }
public IActionResult OnPostAddToCart() { if (!ModelState.IsValid) { return(RedirectToLocal(ReturnUrl)); } var cart = HttpContext.Session.Get <Entities.Cart>("cart"); if (cart == null) { cart = new Entities.Cart { CartItems = new List <CartItem>() }; } cart.Add(CartItem); cart.SaveTo(HttpContext.Session); TempData["Success"] = "Successfully added movie session to cart"; return(RedirectToPage("/Cart/Index")); }
public void AddToCart(Entities.Cart cart, Guid productId, int quantity) { var cartItem = this.GetCartItemByProductId(productId); if (cartItem == null) { var product = this.productProvider.GetBy(p => p.Id == productId).SingleOrDefault(); if (product == null) { throw new ArgumentException("Product not found."); } cartItem = this.CreateCartItem(product, quantity); cart.CartItems.Add(cartItem); } else { cartItem.Quantity += quantity; } this.SaveChanges(); }
public async Task <Entities.Cart> CreateCart(CreateCartRequest payload) { var product = await GetProductBySKU(payload.Item.SKU); var cart = new Entities.Cart() { CustomerId = payload.CustomerID, Status = STATUS_PENDING, Items = new[] { new Entities.CartItem() { Price = product.Price.Amount * payload.Item.Quantity, Scale = product.Price.Scale, Quantity = payload.Item.Quantity, Product = product } } }; _cartsCollection.InsertOne(cart); return(cart); }
public void ProcessOrder(Entities.Cart cart, Entities.ShippingDetails shippingDetails) { }
private void SaveCartToCache(Entities.Cart cart) => _cache.Set(cart.Guid, cart);
public async Task <ResponseGeneric> Handle(AddProductInCartRequest request, CancellationToken cancellationToken) { request.Validate(); if (request.Invalid) { AddNotifications(request.Notifications); return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Item inválido.", request.Notifications)); } Entities.Product product = this.productRepository.GetBy(x => x.Id == request.ProductId); if (product == null) { AddNotification("Product", "Produto inválido"); return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Produto inválido.", Notifications)); } Entities.User user = this.userRepository.GetBy(x => x.Id == request.UserId); if (user == null) { AddNotification("User", "Usuário inválido"); return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Usuário inválido.", Notifications)); } Entities.Cart cartAdd = this.cartRepository.GetBy(x => x.Product.Id == product.Id && x.User.Id == user.Id && x.Status == Enums.ECartStatus.Added && x.Size == request.Size, x => x.Product); if (cartAdd == null) { cartAdd = new Entities.Cart(request.Size, request.Quantity, request.Origin); cartAdd.setProduct(product); cartAdd.setUser(user); this.cartRepository.Add(cartAdd); if (cartAdd == null) { AddNotification("Cart", "Carrinho inválido"); return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho! Item inválido.", Notifications)); } } else { cartAdd.incrementQuantity(); this.cartRepository.Update(cartAdd); } if (await this.unitOfWork.SaveChanges() == 0) { AddNotification("Cart", "Erro ao salvar item no carrinho"); return(new ResponseGeneric(false, "Não foi possível adicionar o item no carrinho!", Notifications)); } cartAdd.User.SetPassword(null); AddProductInCartResponse modelResponse = new AddProductInCartResponse(cartAdd.Id, cartAdd.Size, cartAdd.Quantity, cartAdd.Product.Id, cartAdd.Origin); var response = new ResponseGeneric(true, "Item adicionado com sucesso ao carrinho", modelResponse); return(await Task.FromResult(response)); }
public async Task <ActionResult <Entities.Cart> > UpdateCart([FromBody] Entities.Cart cart) { return(Ok(await _repo.UpdateCart(cart))); }
public async Task <IActionResult> OnGetAsync() { Cart = await _cartRepository.GetCartByUserName("test"); return(Page()); }
public async Task <IActionResult> UpdateCartAsync([FromBody] Entities.Cart cart) { return(Ok(await _cartService.UpdateCartAsync(cart))); }