Ejemplo n.º 1
0
        public override void PostInitialize()
        {
            base.PostInitialize();

            //Register product availability indexation
            #region Search

            var productIndexingConfigurations = _container.Resolve <IndexDocumentConfiguration[]>();
            if (productIndexingConfigurations != null)
            {
                var productAvaibilitySource = new IndexDocumentSource
                {
                    ChangesProvider = _container.Resolve <ProductAvailabilityChangesProvider>(),
                    DocumentBuilder = _container.Resolve <ProductAvailabilityDocumentBuilder>(),
                };

                foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }
                    configuration.RelatedSources.Add(productAvaibilitySource);
                }
            }

            #endregion

            // enable polymorphic types in API controller methods
            var httpConfiguration = _container.Resolve <HttpConfiguration>();
            httpConfiguration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new PolymorphicInventoryJsonConverter());
        }
Ejemplo n.º 2
0
        public async Task ConfigureSearchAsync()
        {
            if (_documentIndexingConfigurations != null)
            {
                // Add or remove price document source to catalog product indexing configuration
                foreach (var configuration in _documentIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }

                    var oldSource = configuration.RelatedSources.FirstOrDefault(x => x.ChangesProvider.GetType() == _changesProvider.GetType() && x.DocumentBuilder.GetType() == _priceDocumentBuilder.GetType());
                    if (oldSource != null)
                    {
                        configuration.RelatedSources.Remove(oldSource);
                    }

                    var priceIndexingEnabled = await _settingsManager.GetValueAsync(Core.ModuleConstants.Settings.General.PricingIndexing.Name, true);

                    if (priceIndexingEnabled)
                    {
                        var productPriceDocumentSource = new IndexDocumentSource
                        {
                            ChangesProvider = _changesProvider,
                            DocumentBuilder = _priceDocumentBuilder
                        };

                        configuration.RelatedSources.Add(productPriceDocumentSource);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public override void PostInitialize()
        {
            base.PostInitialize();

            //Register product availability indexation
            #region Search

            var productIndexingConfigurations = _container.Resolve <IndexDocumentConfiguration[]>();
            if (productIndexingConfigurations != null)
            {
                var productAvaibilitySource = new IndexDocumentSource
                {
                    ChangesProvider = _container.Resolve <ProductAvailabilityChangesProvider>(),
                    DocumentBuilder = _container.Resolve <ProductAvailabilityDocumentBuilder>(),
                };

                foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }
                    configuration.RelatedSources.Add(productAvaibilitySource);
                }
            }

            #endregion
        }
Ejemplo n.º 4
0
        public override void PostInitialize()
        {
            base.PostInitialize();

            // extent indexing by adding new DocumentBuilder (ProductDemoDocumentBuilder)
            var productIndexingConfigurations = _container.Resolve <IndexDocumentConfiguration[]>();

            if (productIndexingConfigurations != null)
            {
                var productCompletenessDocumentSource = new IndexDocumentSource
                {
                    ChangesProvider = _container.Resolve <ProductDocumentChangesProvider>(),
                    DocumentBuilder = _container.Resolve <ProductDemoDocumentBuilder>(),
                };

                foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }

                    configuration.RelatedSources.Add(productCompletenessDocumentSource);
                }
            }
        }
Ejemplo n.º 5
0
        public override void PostInitialize()
        {
            base.PostInitialize();

            // Next lines allow to use polymorph types in API controller methods
            var httpConfiguration  = _container.Resolve <HttpConfiguration>();
            var storeJsonConverter = _container.Resolve <PolymorphicPricingJsonConverter>();

            httpConfiguration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(storeJsonConverter);

            #region Search

            // Add price document source to the product indexing configuration
            var productIndexingConfigurations = _container.Resolve <IndexDocumentConfiguration[]>();
            if (productIndexingConfigurations != null)
            {
                var productPriceDocumentSource = new IndexDocumentSource
                {
                    ChangesProvider = _container.Resolve <ProductPriceDocumentChangesProvider>(),
                    DocumentBuilder = _container.Resolve <ProductPriceDocumentBuilder>(),
                };

                foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }

                    configuration.RelatedSources.Add(productPriceDocumentSource);
                }
            }

            #endregion
        }
Ejemplo n.º 6
0
        public void PostInitialize(IApplicationBuilder appBuilder)
        {
            _appBuilder = appBuilder;

            var settingsRegistrar = appBuilder.ApplicationServices.GetRequiredService <ISettingsRegistrar>();

            settingsRegistrar.RegisterSettings(ModuleConstants.Settings.AllSettings, ModuleInfo.Id);

            var permissionsProvider = appBuilder.ApplicationServices.GetRequiredService <IPermissionsRegistrar>();

            permissionsProvider.RegisterPermissions(ModuleConstants.Security.Permissions.AllPermissions.Select(x => new Permission()
            {
                GroupName = "Inventory", Name = x
            }).ToArray());

            //Force migrations
            using (var serviceScope = appBuilder.ApplicationServices.CreateScope())
            {
                var inventoryDbContext = serviceScope.ServiceProvider.GetRequiredService <InventoryDbContext>();
                inventoryDbContext.Database.MigrateIfNotApplied(MigrationName.GetUpdateV2MigrationName(ModuleInfo.Id));
                inventoryDbContext.Database.EnsureCreated();
                inventoryDbContext.Database.Migrate();
            }

            //Register product availability indexation
            #region Search

            var productIndexingConfigurations = appBuilder.ApplicationServices.GetServices <IndexDocumentConfiguration>();
            if (productIndexingConfigurations != null)
            {
                var productAvaibilitySource = new IndexDocumentSource
                {
                    ChangesProvider = appBuilder.ApplicationServices.GetService <ProductAvailabilityChangesProvider>(),
                    DocumentBuilder = appBuilder.ApplicationServices.GetService <ProductAvailabilityDocumentBuilder>(),
                };

                foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }
                    configuration.RelatedSources.Add(productAvaibilitySource);
                }
            }

            #endregion

            // enable polymorphic types in API controller methods
            var mvcJsonOptions = appBuilder.ApplicationServices.GetService <IOptions <MvcJsonOptions> >();
            mvcJsonOptions.Value.SerializerSettings.Converters.Add(new PolymorphicInventoryJsonConverter());

            var inProcessBus = appBuilder.ApplicationServices.GetService <IHandlerRegistrar>();
            inProcessBus.RegisterHandler <InventoryChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <LogChangesChangedEventHandler>().Handle(message));
        }
Ejemplo n.º 7
0
        public void PostInitialize(IApplicationBuilder appBuilder)
        {
            ModuleInfo.Settings.Add(new ModuleSettingsGroup
            {
                Name     = "Inventory|General",
                Settings = ModuleConstants.Settings.General.AllSettings.ToArray()
            });

            var permissionsProvider = appBuilder.ApplicationServices.GetRequiredService <IKnownPermissionsProvider>();

            permissionsProvider.RegisterPermissions(ModuleConstants.Security.Permissions.AllPermissions.Select(x => new Permission()
            {
                GroupName = "Inventory", Name = x
            }).ToArray());

            //Force migrations
            using (var serviceScope = appBuilder.ApplicationServices.CreateScope())
            {
                var inventoryDbContext = serviceScope.ServiceProvider.GetRequiredService <InventoryDbContext>();
                inventoryDbContext.Database.EnsureCreated();
                inventoryDbContext.Database.Migrate();
            }

            //Register product availability indexation
            #region Search

            var productIndexingConfigurations = appBuilder.ApplicationServices.GetService <IndexDocumentConfiguration[]>();
            if (productIndexingConfigurations != null)
            {
                var productAvaibilitySource = new IndexDocumentSource
                {
                    ChangesProvider = appBuilder.ApplicationServices.GetService <ProductAvailabilityChangesProvider>(),
                    DocumentBuilder = appBuilder.ApplicationServices.GetService <ProductAvailabilityDocumentBuilder>(),
                };

                foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }
                    configuration.RelatedSources.Add(productAvaibilitySource);
                }
            }

            #endregion

            // enable polymorphic types in API controller methods
            var mvcJsonOptions = appBuilder.ApplicationServices.GetService <IOptions <MvcJsonOptions> >();
            mvcJsonOptions.Value.SerializerSettings.Converters.Add(new PolymorphicInventoryJsonConverter());
        }
Ejemplo n.º 8
0
        public override void PostInitialize()
        {
            base.PostInitialize();

            #region Search

            // Add tagged items document source to the category or product indexing configuration
            var documentIndexingConfigurations = _container.Resolve <IndexDocumentConfiguration[]>();
            if (documentIndexingConfigurations != null)
            {
                //Category indexing
                var taggedItemCategoryDocumentSource = new IndexDocumentSource
                {
                    ChangesProvider = _container.Resolve <TaggedItemIndexChangesProvider>(),
                    DocumentBuilder = _container.Resolve <TaggedItemCategoryDocumentBuilder>(),
                };
                foreach (var configuration in documentIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Category))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }

                    configuration.RelatedSources.Add(taggedItemCategoryDocumentSource);
                }

                //Product indexing
                var taggedItemProductDocumentSource = new IndexDocumentSource
                {
                    ChangesProvider = _container.Resolve <TaggedItemIndexChangesProvider>(),
                    DocumentBuilder = _container.Resolve <TaggedItemProductDocumentBuilder>(),
                };
                foreach (var configuration in documentIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                {
                    if (configuration.RelatedSources == null)
                    {
                        configuration.RelatedSources = new List <IndexDocumentSource>();
                    }

                    configuration.RelatedSources.Add(taggedItemProductDocumentSource);
                }
            }

            #endregion
        }
Ejemplo n.º 9
0
        public void PostInitialize(IApplicationBuilder appBuilder)
        {
            _applicationBuilder = appBuilder;
            var settingsManager = _serviceProvider.GetService <ISettingsManager>();

            var settingsRegistrar = appBuilder.ApplicationServices.GetRequiredService <ISettingsRegistrar>();

            settingsRegistrar.RegisterSettings(ModuleConstants.Settings.AllSettings, ModuleInfo.Id);

            var modulePermissions = ModuleConstants.Security.Permissions.AllPermissions.Select(p => new Permission
            {
                Name      = p,
                GroupName = "Pricing",
                ModuleId  = ModuleInfo.Id
            }).ToArray();
            var permissionsRegistrar = appBuilder.ApplicationServices.GetRequiredService <IPermissionsRegistrar>();

            permissionsRegistrar.RegisterPermissions(modulePermissions);

            using (var serviceScope = appBuilder.ApplicationServices.CreateScope())
            {
                var dbContext = serviceScope.ServiceProvider.GetRequiredService <PricingDbContext>();
                dbContext.Database.MigrateIfNotApplied(MigrationName.GetUpdateV2MigrationName(ModuleInfo.Id));
                dbContext.Database.EnsureCreated();
                dbContext.Database.Migrate();
            }

            // Next lines allow to use polymorph types in API controller methods
            var mvcJsonOptions = appBuilder.ApplicationServices.GetService <IOptions <MvcJsonOptions> >();

            mvcJsonOptions.Value.SerializerSettings.Converters.Add(appBuilder.ApplicationServices.GetService <PolymorphicPricingJsonConverter>());

            var priceIndexingEnabled = settingsManager.GetValue(ModuleConstants.Settings.General.PricingIndexing.Name, true);

            if (priceIndexingEnabled)
            {
                // Add price document source to the product indexing configuration
                var productIndexingConfigurations = _serviceProvider.GetService <IndexDocumentConfiguration[]>();

                if (productIndexingConfigurations != null)
                {
                    var productPriceDocumentSource = new IndexDocumentSource
                    {
                        ChangesProvider = _serviceProvider.GetService <IIndexDocumentChangesProvider>(),
                        DocumentBuilder = _serviceProvider.GetService <ProductPriceDocumentBuilder>(),
                    };

                    foreach (var configuration in productIndexingConfigurations.Where(c =>
                                                                                      c.DocumentType == KnownDocumentTypes.Product))
                    {
                        if (configuration.RelatedSources == null)
                        {
                            configuration.RelatedSources = new List <IndexDocumentSource>();
                        }

                        configuration.RelatedSources.Add(productPriceDocumentSource);
                    }
                }
            }

            var inProcessBus = appBuilder.ApplicationServices.GetService <IHandlerRegistrar>();

            inProcessBus.RegisterHandler <PriceChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <LogChangesChangedEventHandler>().Handle(message));

            //Pricing expression
            AbstractTypeFactory <IConditionTree> .RegisterType <PriceConditionTree>();

            AbstractTypeFactory <IConditionTree> .RegisterType <BlockPricingCondition>();

            var pricingExtensionManager = appBuilder.ApplicationServices.GetRequiredService <IPricingExtensionManager>();

            pricingExtensionManager.PriceConditionTree = new PriceConditionTree
            {
                Children = new List <IConditionTree>()
                {
                    GetPricingDynamicExpression()
                }
            };
        }
Ejemplo n.º 10
0
        public void PostInitialize(IApplicationBuilder appBuilder)
        {
            _applicationBuilder = appBuilder;
            var settingsManager = _applicationBuilder.ApplicationServices.GetService <ISettingsManager>();

            var settingsRegistrar = appBuilder.ApplicationServices.GetRequiredService <ISettingsRegistrar>();

            settingsRegistrar.RegisterSettings(ModuleConstants.Settings.AllSettings, ModuleInfo.Id);

            var modulePermissions = ModuleConstants.Security.Permissions.AllPermissions.Select(p => new Permission
            {
                Name      = p,
                GroupName = "Pricing",
                ModuleId  = ModuleInfo.Id
            }).ToArray();
            var permissionsRegistrar = appBuilder.ApplicationServices.GetRequiredService <IPermissionsRegistrar>();

            permissionsRegistrar.RegisterPermissions(modulePermissions);

            using (var serviceScope = appBuilder.ApplicationServices.CreateScope())
            {
                var dbContext = serviceScope.ServiceProvider.GetRequiredService <PricingDbContext>();
                dbContext.Database.MigrateIfNotApplied(MigrationName.GetUpdateV2MigrationName(ModuleInfo.Id));
                dbContext.Database.EnsureCreated();
                dbContext.Database.Migrate();
            }

            // Next lines allow to use polymorph types in API controller methods
            var mvcJsonOptions = appBuilder.ApplicationServices.GetService <IOptions <MvcNewtonsoftJsonOptions> >();

            mvcJsonOptions.Value.SerializerSettings.Converters.Add(appBuilder.ApplicationServices.GetService <PolymorphicPricingJsonConverter>());

            var priceIndexingEnabled = settingsManager.GetValue(ModuleConstants.Settings.General.PricingIndexing.Name, true);

            if (priceIndexingEnabled)
            {
                // Add price document source to the product indexing configuration
                var productIndexingConfigurations = _applicationBuilder.ApplicationServices.GetServices <IndexDocumentConfiguration>();

                if (productIndexingConfigurations != null)
                {
                    var productPriceDocumentSource = new IndexDocumentSource
                    {
                        ChangesProvider = _applicationBuilder.ApplicationServices.GetService <IPricingDocumentChangesProvider>(),
                        DocumentBuilder = _applicationBuilder.ApplicationServices.GetService <ProductPriceDocumentBuilder>(),
                    };

                    foreach (var configuration in productIndexingConfigurations.Where(c => c.DocumentType == KnownDocumentTypes.Product))
                    {
                        if (configuration.RelatedSources == null)
                        {
                            configuration.RelatedSources = new List <IndexDocumentSource>();
                        }

                        configuration.RelatedSources.Add(productPriceDocumentSource);
                    }
                }
            }

            var inProcessBus = appBuilder.ApplicationServices.GetService <IHandlerRegistrar>();

            inProcessBus.RegisterHandler <PriceChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <LogChangesChangedEventHandler>().Handle(message));
            inProcessBus.RegisterHandler <ProductChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <DeletePricesProductChangedEventHandler>().Handle(message));

            if (settingsManager.GetValue(ModuleConstants.Settings.General.EventBasedIndexation.Name, false))
            {
                inProcessBus.RegisterHandler <PriceChangedEvent>(async(message, token) => await appBuilder.ApplicationServices.GetService <IndexPricesProductChangedEventHandler>().Handle(message));
            }

            foreach (var conditionTree in AbstractTypeFactory <PriceConditionTreePrototype> .TryCreateInstance().Traverse <IConditionTree>(x => x.AvailableChildren))
            {
                AbstractTypeFactory <IConditionTree> .RegisterType(conditionTree.GetType());
            }

            var registrar = appBuilder.ApplicationServices.GetService <IKnownExportTypesRegistrar>();

            registrar.RegisterType(
                ExportedTypeDefinitionBuilder.Build <ExportablePrice, PriceExportDataQuery>()
                .WithDataSourceFactory(appBuilder.ApplicationServices.GetService <IPricingExportPagedDataSourceFactory>())
                .WithMetadata(typeof(ExportablePrice).GetPropertyNames())
                .WithTabularMetadata(typeof(TabularPrice).GetPropertyNames()));

            registrar.RegisterType(
                ExportedTypeDefinitionBuilder.Build <ExportablePricelist, PricelistExportDataQuery>()
                .WithDataSourceFactory(appBuilder.ApplicationServices.GetService <IPricingExportPagedDataSourceFactory>())
                .WithMetadata(typeof(ExportablePricelist).GetPropertyNames())
                .WithTabularMetadata(typeof(TabularPricelist).GetPropertyNames()));

            registrar.RegisterType(
                ExportedTypeDefinitionBuilder.Build <ExportablePricelistAssignment, PricelistAssignmentExportDataQuery>()
                .WithDataSourceFactory(appBuilder.ApplicationServices.GetService <IPricingExportPagedDataSourceFactory>())
                .WithMetadata(typeof(ExportablePricelistAssignment).GetPropertyNames())
                .WithTabularMetadata(typeof(TabularPricelistAssignment).GetPropertyNames()));
        }
Ejemplo n.º 11
0
        public override void PostInitialize()
        {
            base.PostInitialize();

            // Next lines allow to use polymorph types in API controller methods
            var httpConfiguration  = _container.Resolve <HttpConfiguration>();
            var storeJsonConverter = _container.Resolve <PolymorphicPricingJsonConverter>();

            httpConfiguration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(storeJsonConverter);

            #region Search

            var settingsManager      = _container.Resolve <ISettingsManager>();
            var priceIndexingEnabled = settingsManager.GetValue("Pricing.Indexing.Enable", true);
            if (priceIndexingEnabled)
            {
                // Add price document source to the product indexing configuration
                var productIndexingConfigurations = _container.Resolve <IndexDocumentConfiguration[]>();
                if (productIndexingConfigurations != null)
                {
                    var productPriceDocumentSource = new IndexDocumentSource
                    {
                        ChangesProvider = _container.Resolve <IPricingDocumentChangesProvider>(),
                        DocumentBuilder = _container.Resolve <ProductPriceDocumentBuilder>(),
                    };

                    foreach (var configuration in productIndexingConfigurations.Where(c =>
                                                                                      c.DocumentType == KnownDocumentTypes.Product))
                    {
                        if (configuration.RelatedSources == null)
                        {
                            configuration.RelatedSources = new List <IndexDocumentSource>();
                        }

                        configuration.RelatedSources.Add(productPriceDocumentSource);
                    }
                }
            }

            #endregion

            var eventHandlerRegistrar = _container.Resolve <IHandlerRegistrar>();

            var settingManager = _container.Resolve <ISettingsManager>();
            if (settingManager.GetValue("Pricing.Search.EventBasedIndexation.Enable", false))
            {
                eventHandlerRegistrar.RegisterHandler <PriceChangedEvent>(async(message, token) => await _container.Resolve <IndexPricesProductChangedEventHandler>().Handle(message));
            }
            eventHandlerRegistrar.RegisterHandler <ProductChangedEvent>(async(message, token) => await _container.Resolve <DeletePricesProductChangedEvent>().Handle(message));

            #region GenericExport
            var registrar = _container.Resolve <IKnownExportTypesRegistrar>();

            registrar.RegisterType(
                ExportedTypeDefinitionBuilder.Build <ExportablePrice, PriceExportDataQuery>()
                .WithDataSourceFactory(_container.Resolve <IPricingExportPagedDataSourceFactory>())
                .WithPermissionAuthorization(PricingPredefinedPermissions.Export, PricingPredefinedPermissions.Read)
                .WithMetadata(typeof(ExportablePrice).GetPropertyNames())
                .WithTabularMetadata(typeof(TabularPrice).GetPropertyNames()));

            registrar.RegisterType(
                ExportedTypeDefinitionBuilder.Build <ExportablePricelist, PricelistExportDataQuery>()
                .WithDataSourceFactory(_container.Resolve <IPricingExportPagedDataSourceFactory>())
                .WithPermissionAuthorization(PricingPredefinedPermissions.Export, PricingPredefinedPermissions.Read)
                .WithMetadata(typeof(ExportablePricelist).GetPropertyNames())
                .WithTabularMetadata(typeof(TabularPricelist).GetPropertyNames()));

            registrar.RegisterType(
                ExportedTypeDefinitionBuilder.Build <ExportablePricelistAssignment, PricelistAssignmentExportDataQuery>()
                .WithDataSourceFactory(_container.Resolve <IPricingExportPagedDataSourceFactory>())
                .WithPermissionAuthorization(PricingPredefinedPermissions.Export, PricingPredefinedPermissions.Read)
                .WithMetadata(typeof(ExportablePricelistAssignment).GetPropertyNames())
                .WithTabularMetadata(typeof(TabularPricelistAssignment).GetPropertyNames()));
            #endregion
        }