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