public static marketingDto.PromotionEvaluationContext ToPromotionEvaluationContextDto(this PromotionEvaluationContext promoEvalContext)
        {
            var result = new marketingDto.PromotionEvaluationContext();

            if (promoEvalContext.Cart != null)
            {
                result.CartPromoEntries = promoEvalContext.Cart.Items.Select(x => x.ToProductPromoEntryDto()).ToList();

                result.CartTotal        = (double)promoEvalContext.Cart.SubTotal.Amount;
                result.Coupons          = promoEvalContext.Cart.Coupons?.Select(c => c.Code).ToList();
                result.Currency         = promoEvalContext.Cart.Currency.Code;
                result.CustomerId       = promoEvalContext.Cart.CustomerId;
                result.UserGroups       = promoEvalContext.Cart.Customer?.Contact?.UserGroups;
                result.IsRegisteredUser = promoEvalContext.Cart.Customer?.IsRegisteredUser;
                result.Language         = promoEvalContext.Cart.Language.CultureName;
                //Set cart line items as default promo items
                result.PromoEntries = result.CartPromoEntries;

                if (!promoEvalContext.Cart.Shipments.IsNullOrEmpty())
                {
                    var shipment = promoEvalContext.Cart.Shipments.First();
                    result.ShipmentMethodCode   = shipment.ShipmentMethodCode;
                    result.ShipmentMethodOption = shipment.ShipmentMethodOption;
                    result.ShipmentMethodPrice  = (double)shipment.Price.Amount;
                }
                if (!promoEvalContext.Cart.Payments.IsNullOrEmpty())
                {
                    var payment = promoEvalContext.Cart.Payments.First();
                    result.PaymentMethodCode  = payment.PaymentGatewayCode;
                    result.PaymentMethodPrice = (double)payment.Price.Amount;
                }
            }

            if (!promoEvalContext.Products.IsNullOrEmpty())
            {
                result.PromoEntries = promoEvalContext.Products.Select(x => x.ToProductPromoEntryDto()).ToList();
            }

            if (promoEvalContext.Product != null)
            {
                result.PromoEntry = promoEvalContext.Product.ToProductPromoEntryDto();
            }

            result.UserGroups = promoEvalContext?.User?.Contact?.UserGroups;

            result.CustomerId       = promoEvalContext.User.Id;
            result.IsEveryone       = true;
            result.IsRegisteredUser = promoEvalContext.User.IsRegisteredUser;
            result.IsFirstTimeBuyer = promoEvalContext.User.IsFirstTimeBuyer;

            result.Currency = promoEvalContext.Currency != null ? promoEvalContext.Currency.Code : null;
            result.Language = promoEvalContext.Language != null ? promoEvalContext.Language.CultureName : null;
            result.StoreId  = promoEvalContext.StoreId;

            return(result);
        }
        public virtual marketingDto.PromotionEvaluationContext ToPromotionEvaluationContextDto(PromotionEvaluationContext promoEvalContext)
        {
            var result = new marketingDto.PromotionEvaluationContext();

            result.InjectFrom <NullableAndEnumValueInjecter>(promoEvalContext);

            result.CartPromoEntries = promoEvalContext.CartPromoEntries.Select(ToProductPromoEntryDto).ToList();
            result.CartTotal        = promoEvalContext.CartTotal != null ? (double?)promoEvalContext.CartTotal.Amount : null;
            result.Currency         = promoEvalContext.Currency != null ? promoEvalContext.Currency.Code : null;
            result.Language         = promoEvalContext.Language != null ? promoEvalContext.Language.CultureName : null;
            result.PromoEntries     = promoEvalContext.PromoEntries.Select(ToProductPromoEntryDto).ToList();
            result.PromoEntry       = promoEvalContext.PromoEntry != null?ToProductPromoEntryDto(promoEvalContext.PromoEntry) : null;

            result.ShipmentMethodPrice = promoEvalContext.ShipmentMethodPrice != null ? (double?)promoEvalContext.ShipmentMethodPrice.Amount : null;

            return(result);
        }