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()); }
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); } } } }
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 }
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); } } }
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 }
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)); }
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()); }
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 }
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() } }; }
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())); }
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 }