using Nop.Core.Domain.Customers; using Nop.Core.Domain.Shipping; using Nop.Services.Customers; using Nop.Services.Plugins; namespace Nop.Services.Shipping; /// /// Represents a shipping plugin manager implementation /// public partial class ShippingPluginManager : PluginManager, IShippingPluginManager { #region Fields protected readonly ShippingSettings _shippingSettings; #endregion #region Ctor public ShippingPluginManager(ICustomerService customerService, IPluginService pluginService, ShippingSettings shippingSettings) : base(customerService, pluginService) { _shippingSettings = shippingSettings; } #endregion #region Methods /// /// Load active shipping providers /// /// Filter by customer; pass null to load all plugins /// Filter by store; pass 0 to load all plugins /// Filter by shipping provider system name; pass null to load all plugins /// /// A task that represents the asynchronous operation /// The task result contains the list of active shipping providers /// public virtual async Task> LoadActivePluginsAsync(Customer customer = null, int storeId = 0, string systemName = null) { var shippingProviders = await LoadActivePluginsAsync(_shippingSettings.ActiveShippingRateComputationMethodSystemNames, customer, storeId); //filter by passed system name if (!string.IsNullOrEmpty(systemName)) { shippingProviders = shippingProviders .Where(provider => provider.PluginDescriptor.SystemName.Equals(systemName, StringComparison.InvariantCultureIgnoreCase)) .ToList(); } return shippingProviders; } /// /// Check whether the passed shipping provider is active /// /// Shipping provider to check /// Result public virtual bool IsPluginActive(IShippingRateComputationMethod shippingProvider) { return IsPluginActive(shippingProvider, _shippingSettings.ActiveShippingRateComputationMethodSystemNames); } /// /// Check whether the shipping provider with the passed system name is active /// /// System name of shipping provider to check /// Filter by customer; pass null to load all plugins /// Filter by store; pass 0 to load all plugins /// /// A task that represents the asynchronous operation /// The task result contains the result /// public virtual async Task IsPluginActiveAsync(string systemName, Customer customer = null, int storeId = 0) { var shippingProvider = await LoadPluginBySystemNameAsync(systemName, customer, storeId); return IsPluginActive(shippingProvider); } #endregion }