public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.Product)
            {
                if (context.Reason == RuleOptionsRequestReason.SelectedDisplayNames)
                {
                    var products = await _db.Products.GetManyAsync(context.Value.ToIntArray());

                    result.AddOptions(context, products.Select(x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = x.GetLocalized(y => y.Name, context.Language, true, false),
                        Hint  = x.Sku
                    }));
                }
                else
                {
                    var options = await SearchProducts(result, context.SearchTerm, context.PageIndex *context.PageSize, context.PageSize);

                    result.AddOptions(context, options);
                    result.IsPaged = true;
                }
            }
            else
            {
                return(null);
            }

            return(result);
        }
Esempio n. 2
0
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.VariantValue)
            {
                if (context.Reason == RuleOptionsRequestReason.SelectedDisplayNames)
                {
                    var variants = await _db.ProductVariantAttributeValues.GetManyAsync(context.Value.ToIntArray());

                    result.AddOptions(context, variants.Select(x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                    }));
                }
                else if (context.Descriptor.Metadata.TryGetValue("ParentId", out var objParentId))
                {
                    var pIndex         = -1;
                    var existingValues = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);
                    var options        = new List <RuleValueSelectListOption>();

                    var query = _db.ProductVariantAttributeValues
                                .AsNoTracking()
                                .Where(x => x.ProductVariantAttribute.ProductAttributeId == (int)objParentId &&
                                       x.ProductVariantAttribute.ProductAttribute.AllowFiltering &&
                                       x.ValueTypeId == (int)ProductVariantAttributeValueType.Simple)
                                .ApplyValueFilter(null, true);

                    while (true)
                    {
                        var variants = await PagedList.Create(query, ++pIndex, 1000).LoadAsync();

                        foreach (var variant in variants)
                        {
                            var name = variant.GetLocalized(x => x.Name, context.Language, true, false);
                            if (!existingValues.Contains(name))
                            {
                                existingValues.Add(name);
                                options.Add(new RuleValueSelectListOption {
                                    Value = variant.Id.ToString(), Text = name
                                });
                            }
                        }
                        if (!variants.HasNextPage)
                        {
                            break;
                        }
                    }

                    result.AddOptions(context, options);
                }
            }
            else
            {
                return(null);
            }

            return(result);
        }
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            switch (context.DataSource)
            {
            case KnownRuleOptionDataSourceNames.Country:
                var countries = await _db.Countries
                                .AsNoTracking()
                                .ApplyStandardFilter(true)
                                .ToListAsync();

                result.AddOptions(context, countries.Select(x => new RuleValueSelectListOption
                {
                    Value = context.OptionById ? x.Id.ToString() : x.TwoLetterIsoCode,
                    Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                }));
                break;

            case KnownRuleOptionDataSourceNames.Currency:
                var currencies = await _db.Currencies
                                 .AsNoTracking()
                                 .ApplyStandardFilter(true)
                                 .ToListAsync();

                result.AddOptions(context, currencies.Select(x => new RuleValueSelectListOption
                {
                    Value = context.OptionById ? x.Id.ToString() : x.CurrencyCode,
                    Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                }));
                break;

            case KnownRuleOptionDataSourceNames.DeliveryTime:
                var deliveryTimes = await _db.DeliveryTimes
                                    .AsNoTracking()
                                    .OrderBy(x => x.DisplayOrder)
                                    .ToListAsync();

                result.AddOptions(context, deliveryTimes.Select(x => new RuleValueSelectListOption
                {
                    Value = x.Id.ToString(),
                    Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                }));
                break;

            default:
                return(null);
            }

            return(result);
        }
Esempio n. 4
0
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.ShippingRateComputationMethod)
            {
                var options = await _providerManager.GetAllProviders <IShippingRateComputationMethod>()
                              .Select(x => x.Metadata)
                              .SelectAsync(async x => new RuleValueSelectListOption
                {
                    Value = x.SystemName,
                    Text  = await GetLocalized(context, x, "FriendlyName") ?? x.FriendlyName.NullEmpty() ?? x.SystemName,
                    Hint  = x.SystemName
                })
                              .ToListAsync();

                result.AddOptions(context, options.OrderBy(x => x.Text));
            }
            else
            {
                return(null);
            }

            return(result);
        }
Esempio n. 5
0
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.Category)
            {
                if (context.Reason == RuleOptionsRequestReason.SelectedDisplayNames)
                {
                    var categories = await _db.Categories.GetManyAsync(context.Value.ToIntArray());

                    var options = await categories
                                  .SelectAsync(async x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = (await _categoryService.GetCategoryPathAsync(x, context.Language.Id)).NullEmpty() ?? x.Name
                    })
                                  .ToListAsync();

                    result.AddOptions(context, options);
                }
                else
                {
                    var categories = await _categoryService.GetCategoryTreeAsync(0, true);

                    var options = await categories
                                  .Flatten(false)
                                  .SelectAsync(async x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = (await _categoryService.GetCategoryPathAsync(x, context.Language.Id)).NullEmpty() ?? x.Name
                    })
                                  .ToListAsync();

                    result.AddOptions(context, options);
                }
            }
            else
            {
                return(null);
            }

            return(result);
        }
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.AttributeOption)
            {
                if (context.Reason == RuleOptionsRequestReason.SelectedDisplayNames)
                {
                    var attributes = await _db.SpecificationAttributeOptions.GetManyAsync(context.Value.ToIntArray());

                    result.AddOptions(context, attributes.Select(x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                    }));
                }
                else if (context.Descriptor.Metadata.TryGetValue("ParentId", out var objParentId))
                {
                    var attributes = await _db.SpecificationAttributeOptions
                                     .AsNoTracking()
                                     .Where(x => x.SpecificationAttributeId == (int)objParentId)
                                     .OrderBy(x => x.DisplayOrder)
                                     .ToPagedList(context.PageIndex, context.PageSize)
                                     .LoadAsync();

                    result.IsPaged     = true;
                    result.HasMoreData = attributes.HasNextPage;

                    result.AddOptions(context, attributes.AsQueryable().Select(x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = x.GetLocalized(y => y.Name, context.Language, true, false, false)
                    }));
                }
            }
            else
            {
                return(null);
            }

            return(result);
        }
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.CartRule || context.DataSource == KnownRuleOptionDataSourceNames.TargetGroup)
            {
                if (context.Reason == RuleOptionsRequestReason.SelectedDisplayNames)
                {
                    var ruleSets = await _db.RuleSets.GetManyAsync(context.Value.ToIntArray());

                    result.AddOptions(context, ruleSets.Select(x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = x.Name
                    }));
                }
                else
                {
                    var ruleSets = await _db.RuleSets
                                   .AsNoTracking()
                                   .ApplyStandardFilter(context.Descriptor.Scope, false, true)
                                   .ToPagedList(context.PageIndex, context.PageSize)
                                   .LoadAsync();

                    result.IsPaged     = true;
                    result.HasMoreData = ruleSets.HasNextPage;

                    result.AddOptions(context, ruleSets.Select(x => new RuleValueSelectListOption
                    {
                        Value = x.Id.ToString(),
                        Text  = x.Name
                    }));
                }
            }
            else
            {
                return(null);
            }

            return(result);
        }
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.ProductTag)
            {
                var productTags = await _db.ProductTags.AsNoTracking().ToListAsync();

                result.AddOptions(context, productTags
                                  .Select(x => new RuleValueSelectListOption
                {
                    Value = x.Id.ToString(),
                    Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                })
                                  .OrderBy(x => x.Text));
            }
            else
            {
                return(null);
            }

            return(result);
        }
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.Language)
            {
                var languages = await _db.Languages
                                .AsNoTracking()
                                .ApplyStandardFilter(true)
                                .ToListAsync();

                result.AddOptions(context, languages.Select(x => new RuleValueSelectListOption
                {
                    Value = x.Id.ToString(),
                    Text  = GetCultureDisplayName(x) ?? x.Name
                }));
            }
            else
            {
                return(null);
            }

            return(result);
        }
Esempio n. 10
0
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.ShippingMethod)
            {
                var shippingMethods = await _db.ShippingMethods
                                      .AsNoTracking()
                                      .OrderBy(x => x.DisplayOrder)
                                      .ToListAsync();

                result.AddOptions(context, shippingMethods.Select(x => new RuleValueSelectListOption
                {
                    Value = context.OptionById ? x.Id.ToString() : x.Name,
                    Text  = context.OptionById ? x.GetLocalized(y => y.Name, context.Language, true, false) : x.Name
                }));
            }
            else
            {
                return(null);
            }

            return(result);
        }
Esempio n. 11
0
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.CustomerRole)
            {
                var customerRoles = await _db.CustomerRoles
                                    .AsNoTracking()
                                    .OrderBy(x => x.Name)
                                    .ToListAsync();

                result.AddOptions(context, customerRoles.Select(x => new RuleValueSelectListOption
                {
                    Value = x.Id.ToString(),
                    Text  = x.Name
                }));
            }
            else
            {
                return(null);
            }

            return(result);
        }
Esempio n. 12
0
        public async Task <RuleOptionsResult> GetOptionsAsync(RuleOptionsContext context)
        {
            var result = new RuleOptionsResult();

            if (context.DataSource == KnownRuleOptionDataSourceNames.Manufacturer)
            {
                var manufacturers = await _db.Manufacturers
                                    .AsNoTracking()
                                    .ApplyStandardFilter(true)
                                    .ToListAsync();

                result.AddOptions(context, manufacturers.Select(x => new RuleValueSelectListOption
                {
                    Value = x.Id.ToString(),
                    Text  = x.GetLocalized(y => y.Name, context.Language, true, false)
                }));
            }
            else
            {
                return(null);
            }

            return(result);
        }