/// <summary> /// Converts retail discount data from database to discount object. /// </summary> /// <param name="retailDiscount">Retail discount data from database.</param> /// <param name="priceContext">Price context.</param> /// <returns>Discount object.</returns> /// <remarks>This is private. Exposed as internal for test.</remarks> internal static DiscountBase ConvertRetailDiscountToDiscountBase(RetailDiscount retailDiscount, PriceContext priceContext) { DiscountBase discount = ConvertRetailDiscountToDiscountBase(retailDiscount); SetEffectiveDiscounDiscountPriorityFromPriceGroups(discount, priceContext); return(discount); }
/// <summary> /// Converts retail discount data from database to discount object. /// </summary> /// <param name="retailDiscount">Retail discount data from database.</param> /// <returns>Discount object.</returns> /// <remarks>This is private. Exposed as internal for test.</remarks> internal static DiscountBase ConvertRetailDiscountToDiscountBase(RetailDiscount retailDiscount) { DiscountBase discount = null; OfferDiscount offer = null; MixAndMatchDiscount mixAndMatch = null; MultipleBuyDiscount multipleBuy = null; ThresholdDiscount threshold = null; switch (retailDiscount.PeriodicDiscountType) { case PeriodicDiscountOfferType.Offer: offer = new OfferDiscount(retailDiscount.ValidationPeriod); discount = offer; break; case PeriodicDiscountOfferType.MixAndMatch: mixAndMatch = new MixAndMatchDiscount(retailDiscount.ValidationPeriod); mixAndMatch.DealPriceValue = retailDiscount.MixAndMatchDealPrice; mixAndMatch.DiscountAmountValue = retailDiscount.MixAndMatchDiscountAmount; mixAndMatch.DiscountPercentValue = retailDiscount.MixAndMatchDiscountPercent; mixAndMatch.NumberOfLeastExpensiveLines = retailDiscount.MixAndMatchNumberOfLeastExpensiveLines; mixAndMatch.LeastExpensiveMode = retailDiscount.LeastExpensiveMode; mixAndMatch.NumberOfTimesApplicable = retailDiscount.MixAndMatchNumberOfTimeApplicable; foreach (RetailDiscountLine mixMatchLine in retailDiscount.DiscountLines) { if (!mixAndMatch.LineGroupToNumberOfItemsMap.ContainsKey(mixMatchLine.MixAndMatchLineGroup)) { mixAndMatch.LineGroupToNumberOfItemsMap.Add(mixMatchLine.MixAndMatchLineGroup, mixMatchLine.MixAndMatchLineNumberOfItemsNeeded); } } discount = mixAndMatch; break; case PeriodicDiscountOfferType.MultipleBuy: multipleBuy = new MultipleBuyDiscount(retailDiscount.ValidationPeriod); multipleBuy.QuantityDiscountLevels.AddRange(retailDiscount.MultibuyQuantityTiers); discount = multipleBuy; break; case PeriodicDiscountOfferType.Threshold: threshold = new ThresholdDiscount(retailDiscount.ValidationPeriod); threshold.ShouldCountNonDiscountItems = retailDiscount.ShouldCountNonDiscountItems != 0; threshold.ThresholdDiscountTiers.AddRange(retailDiscount.ThresholdDiscountTiers); discount = threshold; break; } if (discount != null) { discount.IsCategoryToProductOrVariantIdsMapSet = false; discount.OfferId = retailDiscount.OfferId; discount.OfferName = retailDiscount.Name; discount.PeriodicDiscountType = retailDiscount.PeriodicDiscountType; discount.IsDiscountCodeRequired = retailDiscount.IsDiscountCodeRequired; discount.ConcurrencyMode = retailDiscount.ConcurrencyMode; discount.PricingPriorityNumber = retailDiscount.PricingPriorityNumber; discount.CurrencyCode = retailDiscount.CurrencyCode; discount.DateValidationPeriodId = retailDiscount.ValidationPeriodId; discount.DateValidationType = (DateValidationType)retailDiscount.DateValidationType; discount.DiscountType = GetDiscountMethodType(discount.PeriodicDiscountType, retailDiscount.DiscountType); discount.ValidFrom = retailDiscount.ValidFromDate; discount.ValidTo = retailDiscount.ValidToDate; foreach (RetailDiscountLine discountLine in retailDiscount.DiscountLines) { discountLine.DiscountMethod = (int)GetLineDiscountOfferMethod(discount.PeriodicDiscountType, discount.DiscountType, discountLine.DiscountMethod, discountLine.MixAndMatchLineSpecificDiscountType); discount.DiscountLines.Add(discountLine.DiscountLineNumber, discountLine); } foreach (RetailDiscountPriceGroup priceGroup in retailDiscount.PriceGroups) { discount.PriceDiscountGroupIds.Add(priceGroup.PriceGroupId); } foreach (DiscountCode discountCode in retailDiscount.DiscountCodes) { discount.DiscountCodes.Add(discountCode.Code); discount.DiscountCodes.Add(discountCode.Barcode); } } return(discount); }