Hi
I have created custom module to extend the line item in order line item and created 2nd custom module to extend the line Item in cart now i am able to save that field value of cart line item in database but when i am placing order createOrderFromCart api gets called its not converting my new field of cart lineitem to order lineItem i have override toOrderModel also and with container i have register in module.cs
This is the code which i am using to override ToOrderModel
public class NBCustomerOrderBuilder : CustomerOrderBuilder
{
private readonly ICustomerOrderService _customerOrderService;
public NBCustomerOrderBuilder(ICustomerOrderService customerOrderService) : base(customerOrderService)
{
_customerOrderService = customerOrderService;
}
protected override LineItem ToOrderModel(VirtoCommerce.CartModule.Core.Model.LineItem lineItem)
{
var result = base.ToOrderModel(lineItem) as NBCustomerOrderLineItem;
var cartLineItem2 = lineItem as NB.CartModule.Core.Models.NBCartLineItem;
if (cartLineItem2 != null)
{
result.PrescriptionId = cartLineItem2.PrescriptionId;
}
return result;
}
}
This is my module.cs where i have registered
public class Module : IModule
{
public ManifestModuleInfo ModuleInfo { get; set; }
private readonly IUnityContainer _container;
public Module()
{
_container = new UnityContainer();
}
public void Initialize(IServiceCollection serviceCollection)
{
// database initialization
AbstractTypeFactory<OrderLineItem>.OverrideType<OrderLineItem, NBCustomerOrderLineItem>();
AbstractTypeFactory<OrderLineItemEntity>.OverrideType<OrderLineItemEntity, NBCustomerOrderLineItemEntity>();
var configuration = serviceCollection.BuildServiceProvider().GetRequiredService<IConfiguration>();
var connectionString = configuration.GetConnectionString("VirtoCommerce.OrderModuleModule") ?? configuration.GetConnectionString("VirtoCommerce");
serviceCollection.AddDbContext<NBOrderDbContext>(options => options.UseSqlServer(connectionString));
serviceCollection.AddDbContext<NotesDbContext>(options => options.UseSqlServer(connectionString));
serviceCollection.AddTransient<INotesService, NotesService>();
_container.RegisterType<CustomerOrderBuilder, NBCustomerOrderBuilder>();
serviceCollection.AddTransient<IOrderRepository, NBOrderRepository>();
serviceCollection.AddTransient<INotesRepository, NotesRepository>();
serviceCollection.AddTransient<Func<INotesRepository>>(provider =>
() => provider.CreateScope().ServiceProvider.GetRequiredService<INotesRepository>());
}
public void PostInitialize(IApplicationBuilder appBuilder)
{
// register settings
var settingsRegistrar = appBuilder.ApplicationServices.GetRequiredService();
settingsRegistrar.RegisterSettings(ModuleConstants.Settings.AllSettings, ModuleInfo.Id);
// register permissions
var permissionsProvider = appBuilder.ApplicationServices.GetRequiredService<IPermissionsRegistrar>();
permissionsProvider.RegisterPermissions(ModuleConstants.Security.Permissions.AllPermissions.Select(x =>
new Permission()
{
GroupName = "OrderModuleModule",
ModuleId = ModuleInfo.Id,
Name = x
}).ToArray());
// Ensure that any pending migrations are applied
using var serviceScope = appBuilder.ApplicationServices.CreateScope();
using (var dbContext = serviceScope.ServiceProvider.GetRequiredService<NBOrderDbContext>())
{
dbContext.Database.EnsureCreated();
dbContext.Database.Migrate();
}
using (var dbContext = serviceScope.ServiceProvider.GetRequiredService<NotesDbContext>())
{
dbContext.Database.EnsureCreated();
dbContext.Database.Migrate();
}
}
Do we need to override initialize method i have register in existing initialize in module.cs ?