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); }
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); }