public RuleOptionsContext(RuleOptionsRequestReason reason, IRuleExpression expression) : this(reason, expression?.Descriptor) { Guard.NotNull(expression, nameof(expression)); Value = expression.RawValue; }
public virtual RuleOptionsResult GetOptions( RuleOptionsRequestReason reason, IRuleExpression expression, int pageIndex, int pageSize, string searchTerm) { Guard.NotNull(expression, nameof(expression)); return(GetOptions(reason, expression.Descriptor, expression.RawValue, pageIndex, pageSize, searchTerm)); }
private ICollection <IRuleExpression> GetRuleExpressions(IRuleset ruleset) { IRuleExpression expr1_1 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr1_2 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr2_1 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr2_2 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr3_1 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr3_2 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr4_1 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); IRuleExpression expr4_2 = ModelResolvers.RuleExprResolver(TestExprFactory.GetExpression("comp", ExpressionFactoryNameTarget.OperatorSymbol), ruleset); expr1_1.Structure = ModelResolvers.DsResolver("x", ComponentType.Measure, BasicDataType.Integer); expr1_2.Structure = ModelResolvers.DsResolver("x", ComponentType.Measure, BasicDataType.Integer); expr2_1.Structure = ModelResolvers.DsResolver("y", ComponentType.Measure, BasicDataType.Integer); expr2_2.Structure = ModelResolvers.DsResolver("y", ComponentType.Measure, BasicDataType.Number); expr3_1.Structure = ModelResolvers.DsResolver("z", ComponentType.Measure, BasicDataType.String); expr3_2.Structure = ModelResolvers.DsResolver("z", ComponentType.Measure, BasicDataType.None); expr4_2.Structure = ModelResolvers.DsResolver("var4", ComponentType.Measure, BasicDataType.None); expr4_1.Structure = ModelResolvers.DsResolver("var4", ComponentType.Measure, BasicDataType.None); expr1_1.ExpressionText = "x"; expr1_2.ExpressionText = "x"; expr2_1.ExpressionText = "y"; expr2_2.ExpressionText = "y"; expr3_1.ExpressionText = "z"; expr3_2.ExpressionText = "z"; expr4_2.ExpressionText = "var4"; expr4_1.ExpressionText = "var4"; expr1_1.ResultName += "1_1"; expr1_2.ResultName += "1_2"; expr2_1.ResultName += "2_1"; expr2_2.ResultName += "2_2"; expr3_1.ResultName += "3_1"; expr3_2.ResultName += "3_2"; expr4_2.ResultName += "4_1"; expr4_1.ResultName += "4_2"; List <IRuleExpression> ruleExprs = new List <IRuleExpression>(); ruleExprs.Add(expr1_1); ruleExprs.Add(expr1_2); ruleExprs.Add(expr2_1); ruleExprs.Add(expr2_2); ruleExprs.Add(expr3_1); ruleExprs.Add(expr3_2); ruleExprs.Add(expr4_1); ruleExprs.Add(expr4_2); return(ruleExprs); }
public ChannelConstantComparerRule(IChannel ch, IChannel rch, object cons, IRuleExpression expression, IEventDefinition def) : base(def) { if (ch == null) { throw new ArgumentNullException(); } if (rch == null) { throw new ArgumentNullException(); } _channel = ch; _channelForRegister = rch; _constant = cons; _expression = expression; _channel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_channel_PropertyChanged); }
private static RuleExpressionInternal GetExpression(CodeExpression expression) { Type type = expression.GetType(); int length = typeWrappers.Length; for (int i = 0; i < length; i++) { TypeWrapperTuple tuple = typeWrappers[i]; if (type == tuple.codeDomType) { return(tuple.internalExpression); } } IRuleExpression ruleExpr = expression as IRuleExpression; if (ruleExpr != null) { return(new CustomExpressionWrapper(ruleExpr)); } return(null); }
private void EvaluateRule(Rule rule, ref MSRuleSetEvaluationResult ruleSetEvaluationResult, ref RuleValidation rv) { rv.Errors.Clear(); IRuleExpression ruleExpression = (IRuleExpression)((RuleExpressionCondition)rule.Condition).Expression; RuleExecution re = new RuleExecution(rv, _instanceOfObject); RuleExpressionInfo info = RuleExpressionWalker.Validate(rv, (CodeExpression)ruleExpression, true); if (rv.Errors.Count > 0) { //string validationErrorMessages = Helper.GetErrorMessageFromValidationErrorsCollection(errors); ruleSetEvaluationResult.AddValidationError(rule.Name, rule.Description, rv.Errors); } else { RuleExpressionResult result = RuleExpressionWalker.Evaluate(re, (CodeExpression)ruleExpression); ruleSetEvaluationResult.AddEvaluationResult(rule.Name, rule.Description, result); } }
private static RuleExpressionInternal GetExpression(CodeExpression expression) { Type exprType = expression.GetType(); int numTypeWrappers = typeWrappers.Length; for (int i = 0; i < numTypeWrappers; ++i) { TypeWrapperTuple tuple = typeWrappers[i]; if (exprType == tuple.codeDomType) { return(tuple.internalExpression); } } // It's not a builtin one... try a user extension expression. IRuleExpression ruleExpr = expression as IRuleExpression; if (ruleExpr != null) { return(new CustomExpressionWrapper(ruleExpr)); } return(null); }
internal CustomExpressionWrapper(IRuleExpression ruleExpr) { this.ruleExpr = ruleExpr; }
internal CustomExpressionWrapper(IRuleExpression ruleExpr) { this.ruleExpr = ruleExpr; }
/// <summary> /// Infers a basic data type of a component by a ruleset. /// </summary> /// <param name="expr">The component expression.</param> /// <param name="componentType">The type of a component.</param> /// <returns>The basic data type type of a component.</returns> private BasicDataType?InferByRuleset(IExpression expr, ComponentType?componentType) { BasicDataType? dataType = null; IRuleExpression ruleExpr = expr.GetFirstAncestorExpr() as IRuleExpression; if (ruleExpr != null && componentType.In(ComponentType.Measure, null)) { componentType = ComponentType.Measure; IRuleset ruleset = ruleExpr.ContainingRuleset; if (ruleset.Variables.ContainsKey(expr.ExpressionText)) { string parentOpSymbol = expr.ParentExpression.OperatorSymbol; if (parentOpSymbol.In("match_characters", "trim", "rtrim", "ltrim", "upper", "lower", "replace", "length")) { dataType = BasicDataType.String; } else if (parentOpSymbol == "period_indicator") { dataType = BasicDataType.TimePeriod; } else if (parentOpSymbol == "substr") { if (expr.ParentExpression.Operands["ds_1"].ExpressionText == expr.ExpressionText) { dataType = BasicDataType.String; } else { dataType = BasicDataType.Integer; } } else if (parentOpSymbol == "instr") { if (expr.ParentExpression.OperandsCollection.FirstOrDefault(op => op.ParamSignature.In("ds_1", "ds_2") && op.ExpressionText == expr.ExpressionText) != null) { dataType = BasicDataType.String; } else { dataType = BasicDataType.Integer; } } else if (parentOpSymbol.In("mod", "round", "trunc", "log")) { if (expr.ParentExpression.Operands["ds_1"].ExpressionText == expr.ExpressionText) { dataType = BasicDataType.Number; } else { dataType = BasicDataType.Integer; } } else if (parentOpSymbol == "time_agg") { if (expr.ParentExpression.Operands["ds_1"].ExpressionText == expr.ExpressionText) { dataType = BasicDataType.Time; } else { dataType = BasicDataType.Duration; } } else if (parentOpSymbol.In("between", "in", "not_in")) { IEnumerable <IExpression> operands = expr.ParentExpression.OperandsCollection.Where(op => op.ExpressionText != expr.ExpressionText); if (parentOpSymbol != "between") { operands = expr.ParentExpression.Operands["ds_2"].OperandsCollection; } foreach (IExpression operand in operands) { if (dataType != BasicDataType.Number) { operand.Structure = operand.OperatorDefinition.GetOutputStructure(operand); dataType = operand.Structure.Components[0].ValueDomain.DataType; } } } else if (parentOpSymbol == "if") { if (expr.ParentExpression.Operands["if"].ExpressionText == expr.ExpressionText) { dataType = BasicDataType.Boolean; } else { if (expr.ParentExpression.Operands["then"].ExpressionText == expr.ExpressionText && expr.ParentExpression.Operands["else"].ExpressionText != expr.ExpressionText) { IExpression operand = expr.ParentExpression.Operands["else"]; operand.Structure = operand.OperatorDefinition.GetOutputStructure(operand); dataType = operand.Structure.Components[0].ValueDomain.DataType; } else if (expr.ParentExpression.Operands["else"].ExpressionText == expr.ExpressionText && expr.ParentExpression.Operands["then"].ExpressionText != expr.ExpressionText) { IExpression operand = expr.ParentExpression.Operands["else"]; operand.Structure = operand.OperatorDefinition.GetOutputStructure(operand); dataType = operand.Structure.Components[0].ValueDomain.DataType; } } } else { IExpression operand = expr.ParentExpression.OperandsCollection.FirstOrDefault(op => op.ExpressionText != expr.ExpressionText); if (operand != null && operand.OperatorSymbol != null) { operand.Structure = operand.OperatorDefinition.GetOutputStructure(operand); dataType = operand.Structure.Components[0].ValueDomain.DataType; } } if (dataType == null) { dataType = BasicDataType.None; } expr.Structure = this.dsResolver(expr.ExpressionText, (ComponentType)componentType, (BasicDataType)dataType); return(dataType); } if (ruleset.ValueDomains.ContainsKey(expr.ExpressionText)) { expr.Structure = this.dsResolver(); expr.Structure.Measures.Add(new StructureComponent(ruleset.ValueDomains[expr.ExpressionText], expr.ExpressionText, (ComponentType)componentType)); return(ruleset.ValueDomains[expr.ExpressionText].DataType); } } return(dataType); }
public virtual RuleOptionsResult GetOptions( RuleOptionsRequestReason reason, IRuleExpression expression, int pageIndex, int pageSize, string searchTerm) { Guard.NotNull(expression, nameof(expression)); Guard.NotNull(expression.Descriptor, nameof(expression.Descriptor)); var result = new RuleOptionsResult(); if (!(expression.Descriptor.SelectList is RemoteRuleValueSelectList list)) { return(result); } var language = _services.WorkContext.WorkingLanguage; var byId = expression.Descriptor.RuleType == RuleType.Int || expression.Descriptor.RuleType == RuleType.IntArray; List <RuleValueSelectListOption> options = null; switch (list.DataSource) { case "Product": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { options = _productService.Value.GetProductsByIds(expression.RawValue.ToIntArray()) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false), Hint = x.Sku }) .ToList(); } else { result.IsPaged = true; options = SearchProducts(result, searchTerm, pageIndex * pageSize, pageSize); } break; case "Country": options = _countryService.Value.GetAllCountries(true) .Select(x => new RuleValueSelectListOption { Value = byId ? x.Id.ToString() : x.TwoLetterIsoCode, Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "Currency": options = _currencyService.Value.GetAllCurrencies(true) .Select(x => new RuleValueSelectListOption { Value = byId ? x.Id.ToString() : x.CurrencyCode, Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "DeliveryTime": options = _deliveryTimeService.Value.GetAllDeliveryTimes() .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "CustomerRole": options = _customerService.Value.GetAllCustomerRoles(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); break; case "Language": options = _languageService.Value.GetAllLanguages(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = GetCultureDisplayName(x) ?? x.Name }) .ToList(); break; case "Store": options = _services.StoreService.GetAllStores() .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); break; case "CartRule": case "TargetGroup": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { options = _ruleStorage.Value.GetRuleSetsByIds(expression.RawValue.ToIntArray(), false) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); } else { var ruleSets = _ruleStorage.Value.GetAllRuleSets(false, false, expression.Descriptor.Scope, pageIndex, pageSize, false, true); result.IsPaged = true; result.HasMoreData = ruleSets.HasNextPage; options = ruleSets .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); } break; case "Category": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { options = _categoryService.Value.GetCategoriesByIds(expression.RawValue.ToIntArray()) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetCategoryPath(_categoryService.Value).NullEmpty() ?? x.Name }) .ToList(); } else { var categories = _categoryService.Value.GetCategoryTree(0, true).Flatten(false); options = categories .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetCategoryPath(_categoryService.Value).NullEmpty() ?? x.Name }) .ToList(); } break; case "Manufacturer": options = _manufacturerService.Value.GetAllManufacturers(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "PaymentMethod": options = _providerManager.Value.GetAllProviders <IPaymentMethod>() .Select(x => x.Metadata) .Select(x => new RuleValueSelectListOption { Value = x.SystemName, Text = GetLocalized(x, "FriendlyName") ?? x.FriendlyName.NullEmpty() ?? x.SystemName, Hint = x.SystemName }) .OrderBy(x => x.Text) .ToList(); break; case "ShippingRateComputationMethod": options = _providerManager.Value.GetAllProviders <IShippingRateComputationMethod>() .Select(x => x.Metadata) .Select(x => new RuleValueSelectListOption { Value = x.SystemName, Text = GetLocalized(x, "FriendlyName") ?? x.FriendlyName.NullEmpty() ?? x.SystemName, Hint = x.SystemName }) .OrderBy(x => x.Text) .ToList(); break; case "ShippingMethod": options = _shippingService.Value.GetAllShippingMethods() .Select(x => new RuleValueSelectListOption { Value = byId ? x.Id.ToString() : x.Name, Text = byId ? x.GetLocalized(y => y.Name, language, true, false) : x.Name }) .ToList(); break; case "ProductTag": options = _productTagService.Value.GetAllProductTags(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .OrderBy(x => x.Text) .ToList(); break; case "VariantValue": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { var ids = expression.RawValue.ToIntArray(); var variantValues = _variantValueRepository.Value.TableUntracked .Where(x => ids.Contains(x.Id)) .ToList(); options = variantValues .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); } else if (expression.Descriptor.Metadata.TryGetValue("ParentId", out var objParentId)) { options = new List <RuleValueSelectListOption>(); var pIndex = -1; var existingValues = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase); var multiValueTypeIds = new int[] { (int)AttributeControlType.Checkboxes, (int)AttributeControlType.RadioList, (int)AttributeControlType.DropdownList, (int)AttributeControlType.Boxes }; var query = _variantValueRepository.Value.TableUntracked .Where(x => x.ProductVariantAttribute.ProductAttributeId == (int)objParentId && x.ProductVariantAttribute.ProductAttribute.AllowFiltering && multiValueTypeIds.Contains(x.ProductVariantAttribute.AttributeControlTypeId) && x.ValueTypeId == (int)ProductVariantAttributeValueType.Simple ) .OrderBy(x => x.DisplayOrder); while (true) { var variantValues = PagedList.Create(query, ++pIndex, 500); foreach (var value in variantValues) { var name = value.GetLocalized(x => x.Name, language, true, false); if (!existingValues.Contains(name)) { existingValues.Add(name); options.Add(new RuleValueSelectListOption { Value = value.Id.ToString(), Text = name }); } } if (!variantValues.HasNextPage) { break; } } } break; case "AttributeOption": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { var ids = expression.RawValue.ToIntArray(); var attributeOptions = _attrOptionRepository.Value.TableUntracked .Where(x => ids.Contains(x.Id)) .ToList(); options = attributeOptions .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); } else if (expression.Descriptor.Metadata.TryGetValue("ParentId", out var objParentId)) { var query = _attrOptionRepository.Value.TableUntracked .Where(x => x.SpecificationAttributeId == (int)objParentId) .OrderBy(x => x.DisplayOrder); var attributeOptions = PagedList.Create(query, pageIndex, pageSize); result.IsPaged = true; result.HasMoreData = attributeOptions.HasNextPage; options = attributeOptions .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); } break; default: throw new SmartException($"Unknown data source \"{list.DataSource.NaIfEmpty()}\"."); } if (options != null) { if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { // Get display names of selected options. if (expression.RawValue.HasValue()) { var selectedValues = expression.RawValue.SplitSafe(","); result.Options.AddRange(options.Where(x => selectedValues.Contains(x.Value))); } } else { // Get select list options. if (!result.IsPaged && searchTerm.HasValue() && options.Any()) { // Apply the search term if the options are not paged. result.Options.AddRange(options.Where(x => (x.Text?.IndexOf(searchTerm, 0, StringComparison.CurrentCultureIgnoreCase) ?? -1) != -1)); } else { result.Options.AddRange(options); } } } return(result); }
/// <summary> /// Renders PlantUML code object based on a given VTL 2.0 expression. /// </summary> /// <param name="expr">The VTL 2.0 expression.</param> /// <param name="name">The name of PlantUML object to render.</param> /// <param name="space">The left margin of PlantUML object in the rendered code.</param> /// <returns>The PlantUML code.</returns> private string RenderObject(IExpression expr, string name, string space) { StringBuilder sb = new StringBuilder(); IRuleExpression ruleExpr = (this._conf.ExprType == ExpressionsType.Rulesets && expr.ParentExpression == null) ? (IRuleExpression)expr : null; string size = $"<size:{(int)(this._fontSize * 0.9)}>"; string objectName = expr.ExpressionText; if (objectName == null || objectName == string.Empty) { objectName = " "; } string color = null; if (expr.OperatorSymbol == "join") { color = "#Moccasin"; } else if (expr.ParentExpression?.OperatorSymbol == "join") { color = "#PapayaWhip"; } else if (expr.ResultName == null || objectName != " ") { color = "#PHYSICAL"; } if (ruleExpr != null) { color = "#BlanchedAlmond"; } if (objectName == " ") { color = "#LightPink"; } sb.AppendLine(); sb.AppendLine($"{space}object \"{this.ReplaceQuotationMarks(objectName)}\" as {name} {color}{"{"}"); sb.AppendLine($"{space} {size}ResultName = '{expr.ResultName}'"); sb.AppendLine($"{space} {size}OperatorSymbol = '{expr.OperatorSymbol}'"); if (expr.OperatorDefinition?.Keyword != null) { sb.AppendLine($"{space} {size}OperatorKeyword = '{expr.OperatorDefinition.Keyword}'"); } sb.AppendLine($"{space} {size}IsScalar = {expr.IsScalar}"); if (this._conf.ShowNumberLine) { sb.AppendLine($"{space} {size}LineNumber = {expr.LineNumber}"); } sb.AppendLine($"{space} {size}ParamSignature = '{expr.ParamSignature}'"); if (ruleExpr != null) { if (ruleExpr.ErrorCode != null) { sb.AppendLine($"{space} {size}errorCode = '{ruleExpr.ErrorCode}'"); } if (ruleExpr.ErrorLevel != null) { sb.AppendLine($"{space} {size}errorLevel = {ruleExpr.ErrorLevel}"); } } sb.AppendLine($"{space}{"}"}"); if (expr.Structure != null && this._conf.ShowDataStructure) { sb.AppendLine(); sb.Append(RenderDataStructureObject(expr.Structure, $"{name}_ds", name, space)); } return(sb.ToString()); }
public virtual RuleOptionsResult GetOptions( RuleOptionsRequestReason reason, IRuleExpression expression, int pageIndex, int pageSize, string searchTerm) { Guard.NotNull(expression, nameof(expression)); Guard.NotNull(expression.Descriptor, nameof(expression.Descriptor)); var result = new RuleOptionsResult(); var list = expression.Descriptor.SelectList as RemoteRuleValueSelectList; if (list == null) { return(result); } var language = _services.WorkContext.WorkingLanguage; var byId = expression.Descriptor.RuleType == RuleType.Int || expression.Descriptor.RuleType == RuleType.IntArray; List <RuleValueSelectListOption> options = null; switch (list.DataSource) { case "Product": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { options = _productService.Value.GetProductsByIds(expression.RawValue.ToIntArray()) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false), Hint = x.Sku }) .ToList(); } else { result.IsPaged = true; options = SearchProducts(result, searchTerm, pageIndex * pageSize, pageSize); } break; case "Country": options = _countryService.Value.GetAllCountries(true) .Select(x => new RuleValueSelectListOption { Value = byId ? x.Id.ToString() : x.TwoLetterIsoCode, Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "Currency": options = _currencyService.Value.GetAllCurrencies(true) .Select(x => new RuleValueSelectListOption { Value = byId ? x.Id.ToString() : x.CurrencyCode, Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "CustomerRole": options = _customerService.Value.GetAllCustomerRoles(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); break; case "Language": options = _languageService.Value.GetAllLanguages(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = GetCultureDisplayName(x) ?? x.Name }) .ToList(); break; case "Store": options = _services.StoreService.GetAllStores() .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); break; case "CartRule": case "TargetGroup": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { options = _ruleStorage.Value.GetRuleSetsByIds(expression.RawValue.ToIntArray(), false) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); } else { var ruleSets = _ruleStorage.Value.GetAllRuleSets(false, false, expression.Descriptor.Scope, pageIndex, pageSize, false, true); result.IsPaged = true; result.HasMoreData = ruleSets.HasNextPage; options = ruleSets .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.Name }) .ToList(); } break; case "Category": if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { options = _categoryService.Value.GetCategoriesByIds(expression.RawValue.ToIntArray()) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetCategoryPath(_categoryService.Value).NullEmpty() ?? x.Name }) .ToList(); } else { var categories = _categoryService.Value.GetCategoryTree(0, true).Flatten(false); options = categories .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetCategoryPath(_categoryService.Value).NullEmpty() ?? x.Name }) .ToList(); } break; case "Manufacturer": options = _manufacturerService.Value.GetAllManufacturers(true) .Select(x => new RuleValueSelectListOption { Value = x.Id.ToString(), Text = x.GetLocalized(y => y.Name, language, true, false) }) .ToList(); break; case "PaymentMethod": options = _providerManager.Value.GetAllProviders <IPaymentMethod>() .Select(x => x.Metadata) .Select(x => new RuleValueSelectListOption { Value = x.SystemName, Text = GetLocalized(x, "FriendlyName") ?? x.FriendlyName.NullEmpty() ?? x.SystemName, Hint = x.SystemName }) .OrderBy(x => x.Text) .ToList(); break; case "ShippingRateComputationMethod": options = _providerManager.Value.GetAllProviders <IShippingRateComputationMethod>() .Select(x => x.Metadata) .Select(x => new RuleValueSelectListOption { Value = x.SystemName, Text = GetLocalized(x, "FriendlyName") ?? x.FriendlyName.NullEmpty() ?? x.SystemName, Hint = x.SystemName }) .OrderBy(x => x.Text) .ToList(); break; case "ShippingMethod": options = _shippingService.GetAllShippingMethods() .Select(x => new RuleValueSelectListOption { Value = byId ? x.Id.ToString() : x.Name, Text = byId ? x.GetLocalized(y => y.Name, language, true, false) : x.Name }) .ToList(); break; default: throw new SmartException($"Unknown data source \"{list.DataSource.NaIfEmpty()}\"."); } if (reason == RuleOptionsRequestReason.SelectedDisplayNames) { // Get display names of selected options. if (expression.RawValue.HasValue()) { var selectedValues = expression.RawValue.SplitSafe(","); result.Options.AddRange(options.Where(x => selectedValues.Contains(x.Value))); } } else { // Get select list options. if (!result.IsPaged && searchTerm.HasValue() && options.Any()) { // Apply the search term if the options are not paged. result.Options.AddRange(options.Where(x => (x.Text?.IndexOf(searchTerm, 0, StringComparison.CurrentCultureIgnoreCase) ?? -1) != -1)); } else { result.Options.AddRange(options); } } return(result); }
public TariffProfile(IRuleExpression <Tariff, AuthContext> rule) { _rule = rule; }