public override async Task <EntityView> Run(EntityView arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{Name}: argument can not be null.");
            CommercePipelineExecutionContext executionContext;

            if (!arg.HasPolicy <SearchScopePolicy>())
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            SearchScopePolicy scopePolicy = arg.GetPolicy <SearchScopePolicy>();

            if (string.IsNullOrEmpty(scopePolicy.Name))
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            ViewProperty viewProperty = arg.Properties.FirstOrDefault(p => p.Name.Equals("Term", StringComparison.OrdinalIgnoreCase));

            if (viewProperty == null)
            {
                return(arg);
            }

            IndexablePolicy policyByScope = IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, scopePolicy.Name);

            viewProperty.Value = GetParsedTerm(viewProperty.Value, policyByScope, context.GetPolicy <AlgoliaSearchPolicy>().DefaultSearchOnlyStringFields);
            return(arg);
        }
Ejemplo n.º 2
0
        public override async Task <EntityView> Run(EntityView arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires <EntityView>(arg).IsNotNull($"{Name}: argument can not be null.");
            CommercePipelineExecutionContext executionContext;

            if (!arg.HasPolicy <SearchScopePolicy>())
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            SearchScopePolicy scopePolicy = arg.GetPolicy <SearchScopePolicy>();

            if (string.IsNullOrEmpty(scopePolicy.Name))
            {
                executionContext = context;
                executionContext.Abort(await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error, "DocumentsViewError", (object[])null, "Can not perform the query. Documents view is missing information."), (object)context);
                return(null);
            }

            ICollection <string> retreivableFields = GetRetreivableFields(
                IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, scopePolicy.Name));

            if (retreivableFields != null && retreivableFields.Any <string>())
            {
                context.CommerceContext.AddObject((object)retreivableFields);
            }
            return(arg);
        }
Ejemplo n.º 3
0
        public override async Task <bool> Run(bool arg, CommercePipelineExecutionContext context)
        {
            if (!arg)
            {
                return(false);
            }

            SearchIndexArgument argument = context.CommerceContext.GetObjects <SearchIndexArgument>().FirstOrDefault();

            if (argument == null)
            {
                context.Abort($"{nameof(Name)}: SearchIndexArgument was not found in the context objects collection.", context);
                return(false);
            }

            SearchScopePolicy policyByName = SearchScopePolicy.GetPolicyByName(context.CommerceContext, context.CommerceContext.Environment, argument.IndexName);

            if (policyByName == null)
            {
                context.Abort($"{nameof(Name)}: SearchScopePolicy was not found for index {argument.IndexName}.", context);
                return(false);
            }

            IndexablePolicy policyByScope = IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, policyByName.Name);

            if (policyByScope?.Properties == null)
            {
                // ISSUE: explicit non-virtual call
                context.Abort($"{nameof(Name)}: IndexablePolicy was not found for index {argument.IndexName}.", context);
                return(false);
            }

            return(await _command.DeleteAllDocumentsInIndex(context.CommerceContext, argument.IndexName));
        }
        public override async Task <EntityView> Run(EntityView arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull(arg.Name + ": The argument cannot be null");

            ViewProperty entity = arg.Properties.FirstOrDefault(p =>
                                                                p.Name.EqualsOrdinalIgnoreCase("Condition") || p.Name.EqualsOrdinalIgnoreCase("Action"));

            if (entity == null || !entity.RawValue.ToString().StartsWith("Hc_") ||
                !entity.RawValue.ToString().Contains("InCategory"))
            {
                return(arg);
            }

            ViewProperty categorySelection =
                arg.Properties.FirstOrDefault(x => x.Name.EqualsOrdinalIgnoreCase("Hc_SpecificCategory"));

            if (categorySelection == null)
            {
                return(arg);
            }

            SearchScopePolicy policyByType = SearchScopePolicy.GetPolicyByType(context.CommerceContext,
                                                                               context.CommerceContext.Environment, typeof(Category));

            if (policyByType == null)
            {
                return(arg);
            }

            var policy = new Policy
            {
                PolicyId = "EntityType",
                Models   = new List <Model> {
                    new Model {
                        Name = nameof(Category)
                    }
                }
            };

            categorySelection.UiType = "Autocomplete";
            categorySelection.Policies.Add(policy);
            categorySelection.Policies.Add(policyByType);

            await AddReadOnlyFullPath(arg, context, categorySelection);

            return(arg);
        }
Ejemplo n.º 5
0
        public virtual async Task <IEnumerable <GiftCard> > Process(CommerceContext commerceContext,
                                                                    DateTimeOffset startDate, DateTimeOffset endDate)
        {
            // Filter order on activation date
            var filterQuery = new FilterQuery(new AndFilterNode(new LessThanFilterNode(
                                                                    new FieldNameFilterNode("activationdate"),
                                                                    new FieldValueFilterNode(endDate
                                                                                             .ToString(SearchConstants.DateTimeSearchFormat, CultureInfo.InvariantCulture),
                                                                                             FilterNodeValueType.Date)),
                                                                new GreaterThanFilterNode(new FieldNameFilterNode("activationdate"),
                                                                                          new FieldValueFilterNode(
                                                                                              startDate
                                                                                              .ToString(SearchConstants.DateTimeSearchFormat, CultureInfo.InvariantCulture),
                                                                                              FilterNodeValueType.Date))));

            var scope = SearchScopePolicy.GetPolicyByType(commerceContext, commerceContext.Environment,
                                                          typeof(GiftCard));

            var searchResults = await _commander.Command <SearchEntitiesCommand>()
                                .Process <GiftCard>(commerceContext, scope.Name, new SearchQuery(), filterQuery).ConfigureAwait(false);

            return(searchResults.OrderByDescending(g => g.ActivationDate));
        }
        /// <summary>Sets the CategoryId view property to autocomplete.</summary>
        /// <param name="view">The <see cref="EntityView"/>.</param>
        /// <param name="context">The context.</param>
        protected virtual void PopulateItemDetails(EntityView view, CommercePipelineExecutionContext context)
        {
            if (view == null)
            {
                return;
            }

            var categoryId = view.GetProperty("CategoryId");

            if (categoryId == null)
            {
                return;
            }

            var policyByType = SearchScopePolicy.GetPolicyByType(
                context.CommerceContext,
                context.CommerceContext.Environment,
                typeof(Category));

            if (policyByType != null)
            {
                var policy = new Policy()
                {
                    PolicyId = "EntityType",
                    Models   = new List <Model>()
                    {
                        new Model()
                        {
                            Name = "Category"
                        }
                    }
                };
                categoryId.UiType = "Autocomplete";
                categoryId.Policies.Add(policy);
                categoryId.Policies.Add(policyByType);
            }
        }
        /// <summary>Runs the specified argument.</summary>
        /// <param name="arg">The argument.</param>
        /// <param name="context">The context.</param>
        /// <returns>
        /// an <see cref="T:Sitecore.Commerce.EntityViews.EntityView" /></returns>
        public override async Task <Sitecore.Commerce.EntityViews.EntityView> Run(
            Sitecore.Commerce.EntityViews.EntityView arg,
            CommercePipelineExecutionContext context)
        {
            ProcessDocumentSearchResultBlock searchResultBlock = this;

            // ISSUE: explicit non-virtual call
            Condition.Requires <Sitecore.Commerce.EntityViews.EntityView>(arg).IsNotNull <Sitecore.Commerce.EntityViews.EntityView>(string.Format("{0}: argument can not be null.", (object)searchResultBlock.Name));
            List <Document> source = context.CommerceContext.GetObjects <List <Document> >().FirstOrDefault <List <Document> >();

            if (source == null || !source.Any <Document>() || !arg.HasPolicy <SearchScopePolicy>())
            {
                return(arg);
            }
            SearchScopePolicy policy = arg.GetPolicy <SearchScopePolicy>();
            List <string>     retrievableProperties = IndexablePolicy.GetPolicyByScope(context.CommerceContext, context.CommerceContext.Environment, policy.Name).Properties.Select(p => new
            {
                p     = p,
                pName = p.Key.ToLower()
            }).Where(_param1 => _param1.p.Value.IsRetrievable).Select(_param1 => _param1.pName).ToList <string>();

            if (!policy.ResultDetailsTags.Any <Tag>((Func <Tag, bool>)(t => t.Name.Equals("CatalogTable", StringComparison.OrdinalIgnoreCase))))
            {
                return(arg);
            }
            foreach (Document document in source)
            {
                string docId = document["EntityId".ToLowerInvariant()].ToString();
                Sitecore.Commerce.EntityViews.EntityView child = arg.ChildViews.OfType <Sitecore.Commerce.EntityViews.EntityView>().FirstOrDefault <Sitecore.Commerce.EntityViews.EntityView>((Func <Sitecore.Commerce.EntityViews.EntityView, bool>)(c => c.EntityId.Equals(docId, StringComparison.OrdinalIgnoreCase)));
                if (child != null)
                {
                    int?entityVersion = new int?();
                    int result;
                    if (int.TryParse(document["EntityVersion".ToLowerInvariant()].ToString(), out result))
                    {
                        entityVersion = new int?(result);
                    }
                    CommerceEntity entity = await searchResultBlock._findPipeline.Run(new FindEntityArgument(typeof(CommerceEntity), docId, entityVersion, false), context);

                    if (entity == null)
                    {
                        arg.ChildViews.Remove((Model)child);
                    }
                    else
                    {
                        ViewProperty viewProperty1 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("EntityId", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty1 != null)
                        {
                            viewProperty1.IsHidden = true;
                            viewProperty1.UiType   = string.Empty;
                        }
                        ViewProperty viewProperty2 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("SitecoreId", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty2 != null)
                        {
                            viewProperty2.IsHidden = true;
                        }
                        ViewProperty viewProperty3 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("VariantId", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty3 == null && retrievableProperties.Contains <string>("VariantId", (IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase))
                        {
                            ViewProperty viewProperty4 = new ViewProperty();
                            viewProperty4.Name         = "variantid";
                            viewProperty4.Value        = string.Empty;
                            viewProperty4.RawValue     = (object)string.Empty;
                            viewProperty4.OriginalType = typeof(string).FullName;
                            viewProperty4.IsReadOnly   = true;
                            viewProperty3 = viewProperty4;
                        }
                        ViewProperty viewProperty5 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("VariantDisplayName", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty5 == null && retrievableProperties.Contains <string>("VariantDisplayName", (IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase))
                        {
                            ViewProperty viewProperty4 = new ViewProperty();
                            viewProperty4.Name         = "variantdisplayname";
                            viewProperty4.Value        = string.Empty;
                            viewProperty4.RawValue     = (object)string.Empty;
                            viewProperty4.OriginalType = typeof(string).FullName;
                            viewProperty4.IsReadOnly   = true;
                            viewProperty5 = viewProperty4;
                        }
                        ViewProperty viewProperty6 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("Name", StringComparison.OrdinalIgnoreCase)));
                        if (viewProperty6 != null)
                        {
                            viewProperty6.UiType = "EntityLink";
                        }
                        ViewProperty viewProperty7 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("DisplayName", StringComparison.OrdinalIgnoreCase)));
                        ViewProperty viewProperty8 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("DateUpdated", StringComparison.OrdinalIgnoreCase)));
                        ViewProperty viewProperty9 = child.Properties.FirstOrDefault <ViewProperty>((Func <ViewProperty, bool>)(p => p.Name.Equals("DateCreated", StringComparison.OrdinalIgnoreCase)));
                        child.Properties.Clear();

                        if (viewProperty7 != null)
                        {
                            StringBuilder catalogNames = new StringBuilder(string.Empty);
                            var           sellableItem = entity as SellableItem;
                            if (sellableItem != null &&
                                sellableItem.HasComponent <CatalogsComponent>())
                            {
                                var catalogsComponent = sellableItem.GetComponent <CatalogsComponent>();
                                foreach (var catalogComponent in catalogsComponent.ChildComponents.OfType <CatalogComponent>())
                                {
                                    catalogNames.Append(catalogComponent.Name);
                                    catalogNames.Append(",");
                                }

                                if (catalogNames.Length > 0 &&
                                    viewProperty7.RawValue != null &&
                                    !string.IsNullOrEmpty(viewProperty7.RawValue.ToString()))
                                {
                                    viewProperty7.RawValue = string.Format("{0}-{1}", catalogNames.ToString().Trim(','), viewProperty7.RawValue);
                                }
                            }
                        }

                        if (viewProperty6 != null)
                        {
                            child.Properties.Add(viewProperty6);
                        }
                        if (viewProperty7 != null)
                        {
                            child.Properties.Add(viewProperty7);
                        }
                        if (viewProperty3 != null)
                        {
                            child.Properties.Add(viewProperty3);
                        }
                        if (viewProperty5 != null)
                        {
                            child.Properties.Add(viewProperty5);
                        }
                        if (viewProperty9 != null)
                        {
                            child.Properties.Add(viewProperty9);
                        }
                        if (viewProperty8 != null)
                        {
                            child.Properties.Add(viewProperty8);
                        }
                        child = (Sitecore.Commerce.EntityViews.EntityView)null;
                    }
                }
            }
            return(arg);
        }
        public override async Task <EntityView> Run(EntityView arg, CommercePipelineExecutionContext context)
        {
            Condition.Requires(arg).IsNotNull($"{Name}: argument can not be null.");

            CommercePipelineExecutionContext executionContext;

            if (!arg.HasPolicy <SearchScopePolicy>())
            {
                executionContext = context;
                executionContext.Abort(
                    await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error,
                                                             "DocumentsViewError", null,
                                                             "Can not perform the query. Documents view is missing information."), context);
                return(null);
            }

            SearchScopePolicy scopePolicy = arg.GetPolicy <SearchScopePolicy>();

            if (string.IsNullOrEmpty(scopePolicy.Name))
            {
                executionContext = context;
                executionContext.Abort(
                    await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Error,
                                                             "DocumentsViewError", null,
                                                             "Can not perform the query. Documents view is missing information."), context);
                return(null);
            }

            context.CommerceContext.AddObject(arg);

            string search = arg.Properties
                            .FirstOrDefault(p => p.Name.Equals("Term", StringComparison.OrdinalIgnoreCase))?.Value;

            if (string.IsNullOrEmpty(search))
            {
                search = "*";
            }

            var parameters = new SearchParameters {
                Select = new[] { "*" }
            };

            string filterParameter = arg.Properties
                                     .FirstOrDefault(p => p.Name.Equals("Filter", StringComparison.OrdinalIgnoreCase))?.Value;

            if (!string.IsNullOrEmpty(filterParameter))
            {
                parameters.Filter = filterParameter;
            }

            string orderParameter = arg.Properties.FirstOrDefault(
                p => p.Name.Equals("OrderBy", StringComparison.OrdinalIgnoreCase))?.Value;

            if (!string.IsNullOrEmpty(orderParameter))
            {
                parameters.OrderBy = new[] { orderParameter };
            }

            string skipParameter = arg.Properties
                                   .FirstOrDefault(p => p.Name.Equals("Skip", StringComparison.OrdinalIgnoreCase))?.Value;

            if (!string.IsNullOrEmpty(skipParameter) && int.TryParse(skipParameter, out var skip))
            {
                parameters.Skip = skip;
            }


            string topParameter = arg.Properties
                                  .FirstOrDefault(p => p.Name.Equals("Top", StringComparison.OrdinalIgnoreCase))?.Value;

            if (!string.IsNullOrEmpty(topParameter) && int.TryParse(topParameter, out var top))
            {
                parameters.Top = top;
            }

            AlgoliaSearchResultsResponse documentSearchResult = await _searchCommand.QueryDocuments(scopePolicy.Name, search, parameters, context.CommerceContext);

            if (documentSearchResult != null)
            {
                context.CommerceContext.AddObject(documentSearchResult);
            }

            return(arg);
        }