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 override async Task <ReturnValidateDiscountCode> ValidateDiscountCode(ValidateDiscountCodeWithCartRequest request, ServerCallContext context) { var returnValidateDiscountCode = new ReturnValidateDiscountCode() { Status = GrpcStatus.Success }; var validateDiscountCodeDto = new ValidateDiscountCodeDTO() { IsValid = true, Message = "Discount code is valid to use" }; var discountCode = request.DiscountCode; var discountCodeObj = await _discountCodeRepository.GetDiscountCodeByCode(discountCode); if (discountCodeObj == null) { validateDiscountCodeDto = new ValidateDiscountCodeDTO() { IsValid = false, Message = "Error: Discount code is invalid to use" }; returnValidateDiscountCode.ValidateDiscountCode = validateDiscountCodeDto; return(returnValidateDiscountCode); } var discountCampaignId = discountCodeObj.DiscountCampaignId; var discountCampaignObj = await _discountCampaignRepository.GetById(discountCampaignId); var cartDto = request.Cart; // Check redemptionCount var redemptionsCount = discountCodeObj.Redemptions?.Count ?? 0; if (discountCodeObj.MaxRedeem == redemptionsCount) { validateDiscountCodeDto = new ValidateDiscountCodeDTO() { IsValid = false, Message = "This code already excess max redemption" }; } // Check expirationDate if (discountCampaignObj.ExpirationDate < DateTime.Now) { validateDiscountCodeDto = new ValidateDiscountCodeDTO() { IsValid = false, Message = "This code already expired" }; } // Check startDate if (discountCampaignObj.StartDate > DateTime.Now) { validateDiscountCodeDto = new ValidateDiscountCodeDTO() { IsValid = false, Message = "This campaign not yet start" }; } // Check discountValidations var discountValidations = discountCampaignObj.GetSortedDiscountValidations(); var productCatId = ""; foreach (var discountValidation in discountValidations) { switch (discountValidation.ValueType) { case DiscountValidationValueType.Bill: { var checkBillDiscountValidation = CheckBillDiscountValidation(discountValidation, cartDto); if (checkBillDiscountValidation != null) { validateDiscountCodeDto = checkBillDiscountValidation; } break; } case DiscountValidationValueType.ProductCat: { productCatId = CheckProductCategoryValidation(discountValidation); break; } case DiscountValidationValueType.Quantity: { var checkQuantityValidation = CheckQuantityValidation(discountValidation, cartDto, productCatId); if (checkQuantityValidation != null) { validateDiscountCodeDto = checkQuantityValidation; } break; } case DiscountValidationValueType.SpendingAmount: { var checkSpendingAmountValidation = CheckSpendingAmountValidation(discountValidation, cartDto, productCatId); if (checkSpendingAmountValidation != null) { validateDiscountCodeDto = checkSpendingAmountValidation; } break; } default: throw new ArgumentOutOfRangeException(); } } // Return returnValidateDiscountCode.ValidateDiscountCode = validateDiscountCodeDto; return(returnValidateDiscountCode); }