diff --git a/Mango.Nop.Core/Entities/MgEntityBase.cs b/Mango.Nop.Core/Entities/MgEntityBase.cs index 2cd06c1..edac1b6 100644 --- a/Mango.Nop.Core/Entities/MgEntityBase.cs +++ b/Mango.Nop.Core/Entities/MgEntityBase.cs @@ -3,7 +3,7 @@ using Nop.Core; namespace Mango.Nop.Core.Entities; -public class MgEntityBase : BaseEntity, IEntityInt +public abstract class MgEntityBase : BaseEntity, IEntityInt { public override string ToString() { diff --git a/Mango.Nop.Core/Interfaces/IMgDbContextBase.cs b/Mango.Nop.Core/Interfaces/IMgDbContextBase.cs index 6e3ac79..3deec67 100644 --- a/Mango.Nop.Core/Interfaces/IMgDbContextBase.cs +++ b/Mango.Nop.Core/Interfaces/IMgDbContextBase.cs @@ -1,4 +1,5 @@ using Mango.Nop.Core.Loggers; +using Nop.Core.Domain.Catalog; using Nop.Data; using System.Transactions; @@ -9,6 +10,8 @@ public interface IMgDbContextBase //: IAcDbContextBase ILogger Logger { get; init; } INopDataProvider DataProvider { get; init; } + IRepository Products { get; set; } + bool Transaction(Func callbackTransactionBody, bool throwException = false); bool TransactionSafe(Func callbackTransactionBody, bool throwException = false); diff --git a/Mango.Nop.Core/Repositories/MgDalBase.cs b/Mango.Nop.Core/Repositories/MgDalBase.cs index 7b95a65..14700c3 100644 --- a/Mango.Nop.Core/Repositories/MgDalBase.cs +++ b/Mango.Nop.Core/Repositories/MgDalBase.cs @@ -10,7 +10,7 @@ using Nop.Data.DataProviders; namespace Mango.Nop.Core.Repositories; -public class MgDalBase : IMgDalBase where TDbContext : IMgDbContextBase +public abstract class MgDalBase : IMgDalBase where TDbContext : IMgDbContextBase { public string Name { get; } public TDbContext Context { get; } diff --git a/Mango.Nop.Core/Repositories/MgDbContextBase.cs b/Mango.Nop.Core/Repositories/MgDbContextBase.cs index f5f7952..b34b799 100644 --- a/Mango.Nop.Core/Repositories/MgDbContextBase.cs +++ b/Mango.Nop.Core/Repositories/MgDbContextBase.cs @@ -7,6 +7,7 @@ using Mango.Nop.Core.Interfaces; using Mango.Nop.Core.Loggers; using Mango.Nop.Services; using Nop.Core.Caching; +using Nop.Core.Domain.Catalog; using Nop.Data; namespace Mango.Nop.Core.Repositories; @@ -23,14 +24,17 @@ public abstract class MgDbContextBase : IMgDbContextBase public ILogger Logger { get; init; } public INopDataProvider DataProvider { get; init; } + public IRepository Products { get; set; } //public IHttpContextAccessor HttpContextAccessor { get; init; } - public MgDbContextBase(INopDataProvider dataProvider, IMgLockService lockService, ILogger logger) + public MgDbContextBase(IRepository productRepository, INopDataProvider dataProvider, IMgLockService lockService, ILogger logger) { LockService = lockService; Logger = logger;// new Logger(logWriters.ToArray()); DataProvider = dataProvider; + + Products = productRepository; } private static TransactionScope CreateTransactionScope(TransactionScopeOption transactionScopeOption = TransactionScopeOption.Required) diff --git a/Mango.Nop.Services/MgEventConsumer.cs b/Mango.Nop.Services/MgEventConsumer.cs index 0c2c4d2..47b1869 100644 --- a/Mango.Nop.Services/MgEventConsumer.cs +++ b/Mango.Nop.Services/MgEventConsumer.cs @@ -1,5 +1,7 @@ using AyCode.Core.Loggers; +using Mango.Nop.Core.Interfaces; using Mango.Nop.Core.Loggers; +using Mango.Nop.Core.Repositories; using Microsoft.AspNetCore.Http; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Customers; @@ -13,7 +15,7 @@ namespace Mango.Nop.Services; /// /// Represents plugin event consumer /// -public class MgEventConsumer(IHttpContextAccessor httpContextAccessor, IEnumerable logWriters) : +public abstract class MgEventConsumer(IMgDbContextBase ctx, IHttpContextAccessor httpContextAccessor, IEnumerable logWriters) : IConsumer>, IConsumer>, IConsumer, @@ -30,6 +32,16 @@ public class MgEventConsumer(IHttpContextAccessor httpContextAccessor, IEnumerab protected readonly IHttpContextAccessor HttpContextAccessor = httpContextAccessor; #endregion + protected virtual async Task CheckAndUpdateProductManageInventoryMethodToManageStock(Product product) + { + if (product.ManageInventoryMethod == ManageInventoryMethod.ManageStock) return product; + + product.ManageInventoryMethod = ManageInventoryMethod.ManageStock; + await ctx.Products.UpdateAsync(product, false); + + return product; + } + public virtual async Task HandleEventAsync(EntityUpdatedEvent eventMessage) { }