protected virtual void ConvertVariant(ProductVariantQuery query, string key, string value) { if (key.EndsWith("-day") || key.EndsWith("-month")) { return; } var ids = key.Replace("pvari", "").SplitSafe("-"); if (ids.Length > 3) { var variant = new ProductVariantQueryItem(value); variant.ProductId = ids[0].ToInt(); variant.BundleItemId = ids[1].ToInt(); variant.AttributeId = ids[2].ToInt(); variant.VariantAttributeId = ids[3].ToInt(); if (key.EndsWith("-date") || key.EndsWith("-year")) { variant.Date = ConvertToDate(key, value); } query.AddVariant(variant); } }
protected virtual void ConvertGiftCard(ProductVariantQuery query, string key, string value) { var elements = key.Replace("giftcard", "").SplitSafe("-"); if (elements.Length > 2) { var giftCard = new GiftCardQueryItem(elements[2], value); giftCard.ProductId = elements[0].ToInt(); giftCard.BundleItemId = elements[1].ToInt(); query.AddGiftCard(giftCard); } }
public ProductVariantQuery CreateFromQuery() { var query = new ProductVariantQuery(); Current = query; if (_httpContext.Request == null) { return(query); } var languageId = _services.WorkContext.WorkingLanguage.Id; foreach (var item in QueryItems) { if (!item.Value.Any() || item.Key.EndsWith("-day") || item.Key.EndsWith("-month")) { continue; } if (IsVariantKey.IsMatch(item.Key)) { ConvertVariant(query, item.Key, item.Value); } else if (IsGiftCardKey.IsMatch(item.Key)) { item.Value.Each(value => ConvertGiftCard(query, item.Key, value)); } else if (IsCheckoutAttributeKey.IsMatch(item.Key)) { ConvertCheckoutAttribute(query, item.Key, item.Value); } else if (IsVariantAliasKey.IsMatch(item.Key)) { ConvertVariantAlias(query, item.Key, item.Value, languageId); } else if (item.Key.IsCaseInsensitiveEqual("pvari") && int.TryParse(item.Value.FirstOrDefault()?.NullEmpty() ?? "0", out var variantCombinationId) && variantCombinationId != 0) { query.VariantCombinationId = variantCombinationId; } else { ConvertItems(_httpContext.Request, query, item.Key, item.Value); } } return(query); }
protected virtual void ConvertVariant(ProductVariantQuery query, string key, ICollection <string> values) { var ids = key.Replace("pvari", "").SplitSafe("-"); if (ids.Length < 4) { return; } var isDate = key.EndsWith("-date") || key.EndsWith("-year"); var isFile = key.EndsWith("-file"); var isText = key.EndsWith("-text"); if (isDate || isFile || isText) { var value = isText ? string.Join(",", values) : values.First(); var variant = new ProductVariantQueryItem(value) { ProductId = ids[0].ToInt(), BundleItemId = ids[1].ToInt(), AttributeId = ids[2].ToInt(), VariantAttributeId = ids[3].ToInt(), IsFile = isFile, IsText = isText }; if (isDate) { variant.Date = ConvertToDate(key, value); } query.AddVariant(variant); } else { foreach (var value in values) { var variant = new ProductVariantQueryItem(value) { ProductId = ids[0].ToInt(), BundleItemId = ids[1].ToInt(), AttributeId = ids[2].ToInt(), VariantAttributeId = ids[3].ToInt() }; query.AddVariant(variant); } } }
public ProductVariantQuery CreateFromQuery() { var query = new ProductVariantQuery(); Current = query; if (_httpContext.Request == null) { return(query); } var languageId = _services.WorkContext.WorkingLanguage.Id; foreach (var item in QueryItems) { if (!item.Value.Any() || item.Key.EndsWith("-day") || item.Key.EndsWith("-month")) { continue; } if (IsVariantKey.IsMatch(item.Key)) { ConvertVariant(query, item.Key, item.Value); } else if (IsGiftCardKey.IsMatch(item.Key)) { item.Value.Each(value => ConvertGiftCard(query, item.Key, value)); } else if (IsCheckoutAttributeKey.IsMatch(item.Key)) { ConvertCheckoutAttribute(query, item.Key, item.Value); } else if (IsVariantAliasKey.IsMatch(item.Key)) { ConvertVariantAlias(query, item.Key, item.Value, languageId); } else { ConvertItems(_httpContext.Request, query, item.Key, item.Value); } } return(query); }
protected virtual void ConvertCheckoutAttribute(ProductVariantQuery query, string key, string value) { if (key.EndsWith("-day") || key.EndsWith("-month")) { return; } var ids = key.Replace("cattr", "").SplitSafe("-"); if (ids.Length > 0) { var attribute = new CheckoutAttributeQueryItem(ids[0].ToInt(), value); if (key.EndsWith("-date") || key.EndsWith("-year")) { attribute.Date = ConvertToDate(key, value); } query.AddCheckoutAttribute(attribute); } }
protected virtual void ConvertCheckoutAttribute(ProductVariantQuery query, string key, ICollection <string> values) { var ids = key.Replace("cattr", "").SplitSafe("-"); if (ids.Length <= 0) { return; } var attributeId = ids[0].ToInt(); var isDate = key.EndsWith("-date") || key.EndsWith("-year"); var isFile = key.EndsWith("-file"); var isText = key.EndsWith("-text"); if (isDate || isFile || isText) { var value = isText ? string.Join(",", values) : values.First(); var attribute = new CheckoutAttributeQueryItem(attributeId, value) { IsFile = isFile, IsText = isText }; if (isDate) { attribute.Date = ConvertToDate(key, value); } query.AddCheckoutAttribute(attribute); } else { foreach (var value in values) { query.AddCheckoutAttribute(new CheckoutAttributeQueryItem(attributeId, value)); } } }
protected virtual void ConvertItems(HttpRequestBase request, ProductVariantQuery query, string key, ICollection <string> values) { }
protected virtual bool ConvertVariantAlias(ProductVariantQuery query, string key, ICollection <string> values, int languageId) { if (values.Count == 0) { return(false); } var ids = key.SplitSafe("-"); var len = ids.Length; if (len < 4) { return(false); } var alias = string.Join("-", ids.Take(len - 3)); var attributeId = _catalogSearchQueryAliasMapper.GetVariantIdByAlias(alias, languageId); if (attributeId == 0) { return(false); } var productId = ids.SafeGet(len - 3).ToInt(); var bundleItemId = ids.SafeGet(len - 2).ToInt(); var variantAttributeId = ids.SafeGet(len - 1).ToInt(); if (productId == 0 || variantAttributeId == 0) { return(false); } foreach (var value in values) { // We cannot use GetVariantOptionIdByAlias. It doesn't necessarily provide a ProductVariantAttributeValue.Id associated with this product. //var optionId = _catalogSearchQueryAliasMapper.GetVariantOptionIdByAlias(value, attributeId, languageId); var optionId = 0; string valueAlias = null; var valueIds = value.SplitSafe("-"); if (valueIds.Length >= 2) { optionId = valueIds.SafeGet(valueIds.Length - 1).ToInt(); valueAlias = string.Join("-", valueIds.Take(valueIds.Length - 1)); } var variant = new ProductVariantQueryItem(optionId == 0 ? value : optionId.ToString()); variant.ProductId = productId; variant.BundleItemId = bundleItemId; variant.AttributeId = attributeId; variant.VariantAttributeId = variantAttributeId; variant.Alias = alias; if (optionId != 0) { variant.ValueAlias = valueAlias; } query.AddVariant(variant); } return(true); }
protected virtual void ConvertVariantAlias(ProductVariantQuery query, string key, ICollection <string> values, int languageId) { var ids = key.SplitSafe("-"); var len = ids.Length; if (len < 4) { return; } var isDate = key.EndsWith("-date") || key.EndsWith("-year"); var isFile = key.EndsWith("-file"); var isText = key.EndsWith("-text"); if (isDate || isFile || isText) { ids = ids.Take(len - 1).ToArray(); len = ids.Length; } var alias = string.Join("-", ids.Take(len - 3)); var attributeId = _catalogSearchQueryAliasMapper.GetVariantIdByAlias(alias, languageId); if (attributeId == 0) { return; } var productId = ids.SafeGet(len - 3).ToInt(); var bundleItemId = ids.SafeGet(len - 2).ToInt(); var variantAttributeId = ids.SafeGet(len - 1).ToInt(); if (productId == 0 || variantAttributeId == 0) { return; } if (isDate || isFile || isText) { var value = isText ? string.Join(",", values) : values.First(); var variant = new ProductVariantQueryItem(value) { ProductId = productId, BundleItemId = bundleItemId, AttributeId = attributeId, VariantAttributeId = variantAttributeId, Alias = alias, IsFile = isFile, IsText = isText }; if (isDate) { variant.Date = ConvertToDate(key, value); } query.AddVariant(variant); } else { foreach (var value in values) { // We cannot use GetVariantOptionIdByAlias. It doesn't necessarily provide a ProductVariantAttributeValue.Id associated with this product. //var optionId = _catalogSearchQueryAliasMapper.GetVariantOptionIdByAlias(value, attributeId, languageId); var optionId = 0; string valueAlias = null; var valueIds = value.SplitSafe("-"); if (valueIds.Length >= 2) { optionId = valueIds.SafeGet(valueIds.Length - 1).ToInt(); valueAlias = string.Join("-", valueIds.Take(valueIds.Length - 1)); } var variant = new ProductVariantQueryItem(optionId == 0 ? value : optionId.ToString()) { ProductId = productId, BundleItemId = bundleItemId, AttributeId = attributeId, VariantAttributeId = variantAttributeId, Alias = alias }; if (optionId != 0) { variant.ValueAlias = valueAlias; } query.AddVariant(variant); } } }