private async Task <CartDTO> GenerateCartDto(App.Support.Common.Models.CartService.Cart cart) { var subTotalAmount = 0m; var cartDto = new CartDTO { Id = cart.Id, AccountId = cart.AccountId.ToString(), CreatedAt = cart.CreatedAt.ToString() }; if (cart.DiscountCode != null) { cartDto.DiscountCode = cart.DiscountCode; } foreach (var cartItem in cart.CartItems) { var cartItemDto = await GenerateCartItemDto(cartItem); subTotalAmount += cartItemDto.ItemSubTotalAmount.ToDecimal(); cartDto.CartItems.Add(cartItemDto); } cartDto.SubTotalAmount = DecimalValue.FromDecimal(subTotalAmount); return(cartDto); }
public async Task <bool> RemoveDiscountCode(App.Support.Common.Models.CartService.Cart cart) { cart.DiscountCode = null; await _cartRepository.InsertOrUpdateCart(cart); return(true); }
public async Task <bool> EmptyCart(App.Support.Common.Models.CartService.Cart cart) { foreach (var cartItem in cart.CartItems) { await _cartItemRepository.DeleteCartItem(cartItem); } _cartRepository.DeleteCart(cart); return(true); }
public App.Support.Common.Models.CartService.Cart GenerateAnEmptyCart(Guid accountId) { var cart = new App.Support.Common.Models.CartService.Cart() { AccountId = accountId, CreatedAt = DateTime.Now, Id = Guid.NewGuid().ToString(), CartItems = new List <CartItem>() }; return(cart); }
public async Task <ValidateDiscountCodeDTO> ValidateDiscountCode(App.Support.Common.Models.CartService.Cart cart, string discountCode) { var promotionGrpcClient = _grpcClientFactory.CreatePromotionGrpcClient(); var rq = new ValidateDiscountCodeWithCartRequest() { DiscountCode = discountCode, Cart = await GenerateCartDto(cart) }; var response = await promotionGrpcClient.ValidateDiscountCodeAsync(rq); return(response.ValidateDiscountCode); }
public async Task <ValidateDiscountCodeDTO> AddDiscountCodeToCart( App.Support.Common.Models.CartService.Cart cart, string discountCode) { var validateDiscountCodeDto = await ValidateDiscountCode(cart, discountCode); if (!validateDiscountCodeDto.IsValid) { return(validateDiscountCodeDto); } cart.DiscountCode = discountCode; await _cartRepository.InsertOrUpdateCart(cart); return(validateDiscountCodeDto); }
public CartViewModel(App.Support.Common.Models.CartService.Cart cart) { Id = Guid.Parse(cart.Id); AccountId = cart.AccountId; CreatedAt = cart.CreatedAt; CartItems = new List <CartItemViewModel>(); DiscountCode = cart.DiscountCode; foreach (var cartItem in cart.CartItems) { CartItems.Add(new CartItemViewModel(cartItem)); } }
public async Task <CartViewModel> GenerateCartViewModel(App.Support.Common.Models.CartService.Cart cart) { var discountCategory = ""; DiscountCampaign discountCampaign = null; DiscountCampaignDTO discountCampaignDto = null; if (cart.DiscountCode != null) { discountCampaignDto = await GetDiscountCampaignDetail(cart.DiscountCode); discountCampaign = DiscountCampaign.GenerateDiscountCampaignFromGrpcDto(discountCampaignDto); switch (discountCampaign.DiscountCampaignApplyOn) { case DiscountCampaignApplyOn.Bill: { break; } case DiscountCampaignApplyOn.ProductCategory: { if (discountCampaign.ApplyOnId != null) { discountCategory = discountCampaign.ApplyOnId.Value.ToString(); } break; } default: throw new ArgumentOutOfRangeException(); } } var cartViewModel = new CartViewModel(cart); var subTotalAmount = 0m; var discountAmount = 0m; var totalAmount = 0m; foreach (var cartItemViewModel in cartViewModel.CartItems) { var productId = cartItemViewModel.ProductId; var product = await GetProductFromProductId(productId); cartItemViewModel.Product = product; cartItemViewModel.ItemSubTotalAmount = product.PriceValue * cartItemViewModel.Quantity; subTotalAmount += cartItemViewModel.ItemSubTotalAmount; if (cartItemViewModel.Product.Category.Id == discountCategory) { if (discountCampaign != null) { switch (discountCampaign.DiscountCampaignType) { case DiscountCampaignType.Percentage: { if (discountCampaign.DiscountValue != null) { cartItemViewModel.ItemDiscountAmount = cartItemViewModel.ItemSubTotalAmount * discountCampaign.DiscountValue.Value / 100; } break; } } } } discountAmount += cartItemViewModel.ItemDiscountAmount; cartItemViewModel.ItemTotalAmount = cartItemViewModel.ItemSubTotalAmount - cartItemViewModel.ItemDiscountAmount; totalAmount += cartItemViewModel.ItemTotalAmount; } if (discountCampaign != null) { switch (discountCampaign.DiscountCampaignType) { case DiscountCampaignType.Money: { switch (discountCampaign.DiscountCampaignApplyOn) { case DiscountCampaignApplyOn.Bill: { if (discountCampaign.DiscountValue != null) { discountAmount = discountCampaign.DiscountValue.Value; totalAmount -= discountAmount; } } break; } break; } } } cartViewModel.SubTotalAmount = subTotalAmount; cartViewModel.DiscountAmount = discountAmount; cartViewModel.TotalAmount = totalAmount; if (cart.DiscountCode == null) { return(cartViewModel); } if (discountCampaign != null) { cartViewModel.DiscountCampaignDto = discountCampaignDto; } cartViewModel.AmountUnit = "GPB"; return(cartViewModel); }