Exemplo n.º 1
0
        public DiscountCampaignDTO GenerateGrpcDtoFromDiscountCampaign()
        {
            var discountCampaignDto = new DiscountCampaignDTO
            {
                Id = Id.ToString(), Name = Name,
            };

            var discountValue = DiscountValue;

            if (CodePrefix != null)
            {
                discountCampaignDto.CodePrefix = CodePrefix;
            }
            if (discountValue != null)
            {
                discountCampaignDto.DiscountValue = DecimalValue.FromDecimal(discountValue.Value);
            }
            discountCampaignDto.StartDate               = StartDate.ToString();
            discountCampaignDto.ExpirationDate          = ExpirationDate.ToString();
            discountCampaignDto.ApplyOnId               = ApplyOnId.ToString();
            discountCampaignDto.DiscountCampaignType    = (uint)DiscountCampaignType.GetHashCode();
            discountCampaignDto.DiscountUnitId          = DiscountUnitId.ToString();
            discountCampaignDto.DiscountCampaignApplyOn = (uint)DiscountCampaignApplyOn.GetHashCode();

            foreach (var discountValidation in DiscountValidations)
            {
                var discountValidationDto = discountValidation.GenerateGrpcDtoFromProductValidation();
                discountCampaignDto.DiscountValidations.Add(discountValidationDto);
            }

            return(discountCampaignDto);
        }
Exemplo n.º 2
0
        public static DiscountCampaign GenerateDiscountCampaignFromGrpcDto(DiscountCampaignDTO discountCampaignDto)
        {
            var discountCampaign = new DiscountCampaign
            {
                Id             = Guid.Parse(discountCampaignDto.Id),
                Name           = discountCampaignDto.Name,
                CodePrefix     = discountCampaignDto.CodePrefix,
                DiscountValue  = discountCampaignDto.DiscountValue.ToDecimal(),
                ExpirationDate = DateTimeOffset.Parse(discountCampaignDto.ExpirationDate),
                StartDate      = DateTimeOffset.Parse(discountCampaignDto.StartDate)
            };

            if (!discountCampaignDto.ApplyOnId.Equals(""))
            {
                discountCampaign.ApplyOnId = Guid.Parse(discountCampaignDto.ApplyOnId);
            }
            if (!discountCampaignDto.DiscountUnitId.Equals(""))
            {
                discountCampaign.DiscountUnitId = Guid.Parse(discountCampaignDto.DiscountUnitId);
            }

            discountCampaign.DiscountCampaignType =
                DiscountCampaignTypeEnum.Convert((int)discountCampaignDto.DiscountCampaignType);

            discountCampaign.DiscountCampaignApplyOn =
                DiscountCampaignApplyOnEnum.Convert((int)discountCampaignDto.DiscountCampaignApplyOn);
            return(discountCampaign);
        }
        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);
        }