Try your search with a different keyword or use * as a wildcard.
using Nop.Core;
using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.FilterLevels;
using Nop.Core.Domain.Localization;
using Nop.Data;
using Nop.Services.Catalog;
using Nop.Services.Security;
using Nop.Services.Stores;
namespace Nop.Services.FilterLevels;
///
/// Filter level value service
///
public partial class FilterLevelValueService : IFilterLevelValueService
{
#region Fields
protected readonly FilterLevelSettings _filterLevelSettings;
protected readonly IAclService _aclService;
protected readonly IRepository _filterLevelValueRepository;
protected readonly IRepository _filterLevelValueProductMappingRepository;
protected readonly IRepository _localizedPropertyRepository;
protected readonly IRepository _productRepository;
protected readonly IStoreMappingService _storeMappingService;
protected readonly IWorkContext _workContext;
#endregion
#region Ctor
public FilterLevelValueService(FilterLevelSettings filterLevelSettings,
IAclService aclService,
IRepository filterLevelValueRepository,
IRepository filterLevelValueProductMappingRepository,
IRepository localizedPropertyRepository,
IRepository productRepository,
IStoreMappingService storeMappingService,
IWorkContext workContext)
{
_filterLevelSettings = filterLevelSettings;
_aclService = aclService;
_filterLevelValueRepository = filterLevelValueRepository;
_filterLevelValueProductMappingRepository = filterLevelValueProductMappingRepository;
_localizedPropertyRepository = localizedPropertyRepository;
_productRepository = productRepository;
_storeMappingService = storeMappingService;
_workContext = workContext;
}
#endregion
#region Methods
///
/// Check if filter levels are disabled
///
///
/// Tuple of booleans indicating if filter levels 1, 2, and 3 are disabled
///
public virtual (bool filterLevel1, bool filterLevel2, bool filterLevel3) IsFilterLevelDisabled()
{
var filterLevelEnumDisabled = _filterLevelSettings.FilterLevelEnumDisabled;
return (filterLevelEnumDisabled.Contains((int)FilterLevelEnum.FilterLevel1),
filterLevelEnumDisabled.Contains((int)FilterLevelEnum.FilterLevel2),
filterLevelEnumDisabled.Contains((int)FilterLevelEnum.FilterLevel3));
}
///
/// Gets filter level values
///
/// Filter level 1 value
/// Filter level 2 value
/// Filter level 3 value
/// Page index
/// Page size
///
/// A task that represents the asynchronous operation
/// The task result contains the filter level value list model
///
public virtual async Task> GetAllFilterLevelValuesAsync(string filterLevel1Value = null, string filterLevel2Value = null, string filterLevel3Value = null, int pageIndex = 0, int pageSize = int.MaxValue)
{
var (filterLevel1Disabled, filterLevel2Disabled, filterLevel3Disabled) = IsFilterLevelDisabled();
return await _filterLevelValueRepository.GetAllPagedAsync(query =>
{
//filter by filter level 1 value
if (!string.IsNullOrEmpty(filterLevel1Value) && filterLevel1Value != "0" && !filterLevel1Disabled)
query = query.Where(pc => pc.FilterLevel1Value == filterLevel1Value);
//filter by filter level 2 value
if (!string.IsNullOrEmpty(filterLevel2Value) && filterLevel2Value != "0" && !filterLevel2Disabled)
query = query.Where(pc => pc.FilterLevel2Value == filterLevel2Value);
//filter by filter level 3 value
if (!string.IsNullOrEmpty(filterLevel3Value) && filterLevel3Value != "0" && !filterLevel3Disabled)
query = query.Where(pc => pc.FilterLevel3Value == filterLevel3Value);
query = query
.OrderBy(flv => flv.FilterLevel1Value)
.ThenBy(flv => flv.FilterLevel2Value)
.ThenBy(flv => flv.FilterLevel3Value);
return query;
}, pageIndex, pageSize);
}
///
/// Inserts Filter level value
///
/// Filter level value
/// A task that represents the asynchronous operation
public virtual async Task InsertFilterLevelValueAsync(FilterLevelValue filterLevelValue)
{
await _filterLevelValueRepository.InsertAsync(filterLevelValue);
}
///
/// Gets a filter level value
///
/// Filter level value identifier
///
/// A task that represents the asynchronous operation
/// The task result contains the filter level value
///
public virtual async Task GetFilterLevelValueByIdAsync(int filterLevelValueId)
{
return await _filterLevelValueRepository.GetByIdAsync(filterLevelValueId);
}
///
/// Gets filter level values by product identifier
///
/// Product identifier
///
/// A task that represents the asynchronous operation
/// The task result contains the filter level values
///
public virtual async Task> GetFilterLevelValuesByProductIdAsync(int productId)
{
var query = from flv_map in _filterLevelValueProductMappingRepository.Table
join flv in _filterLevelValueRepository.Table on flv_map.FilterLevelValueId equals flv.Id
where flv_map.ProductId == productId
orderby flv.Id
select flv;
return await query.ToListAsync();
}
///
/// Gets filter level values by identifier
///
/// Filter level value identifiers
///
/// A task that represents the asynchronous operation
/// The task result contains the filter level values
///
public virtual async Task> GetFilterLevelValuesByIdsAsync(int[] filterLevelValueIds)
{
return await _filterLevelValueRepository.GetByIdsAsync(filterLevelValueIds, includeDeleted: false);
}
///
/// Updates the filter level value
///
/// Filter level value
/// A task that represents the asynchronous operation
public virtual async Task UpdateFilterLevelValueAsync(FilterLevelValue filterLevelValue)
{
ArgumentNullException.ThrowIfNull(filterLevelValue);
await _filterLevelValueRepository.UpdateAsync(filterLevelValue);
}
///
/// Delete filter level value
///
/// Filter level value
/// A task that represents the asynchronous operation
public virtual async Task DeleteFilterLevelValueAsync(FilterLevelValue filterLevelValue)
{
await _filterLevelValueRepository.DeleteAsync(filterLevelValue);
}
///
/// Delete filter level values
///
/// Filter level values
/// A task that represents the asynchronous operation
public virtual async Task DeleteFilterLevelValuesAsync(IList filterLevelValues)
{
ArgumentNullException.ThrowIfNull(filterLevelValues);
await _filterLevelValueRepository.DeleteAsync(filterLevelValues);
}
#region Mapping
///
/// Gets products collection by filter level value identifier
///
/// Filter level value identifier
/// Page index
/// Page size
/// Store identifier; 0 to load all records
/// Order by
///
/// A task that represents the asynchronous operation
/// The task result contains the products collection
///
public virtual async Task> GetProductsByFilterLevelValueIdAsync(int filterLevelValueId,
int pageIndex = 0,
int pageSize = int.MaxValue,
int storeId = 0,
ProductSortingEnum orderBy = ProductSortingEnum.Position)
{
if (filterLevelValueId == 0)
return new PagedList(new List(), pageIndex, pageSize);
var customer = await _workContext.GetCurrentCustomerAsync();
var query = from pc in _filterLevelValueProductMappingRepository.Table
join p in _productRepository.Table on pc.ProductId equals p.Id
where pc.FilterLevelValueId == filterLevelValueId && !p.Deleted && p.Published && p.VisibleIndividually
orderby pc.Id
select p;
//apply store mapping constraints
query = await _storeMappingService.ApplyStoreMapping(query, storeId);
//apply ACL constraints
query = await _aclService.ApplyAcl(query, customer);
return await query.OrderBy(_localizedPropertyRepository, await _workContext.GetWorkingLanguageAsync(), orderBy).ToPagedListAsync(pageIndex, pageSize);
}
///
/// Gets filter level value product mapping collection
///
/// Filter level value identifier
/// Page index
/// Page size
///
/// A task that represents the asynchronous operation
/// The task result contains the filter level value product mapping collection
///
public virtual async Task> GetFilterLevelValueProductsByFilterLevelValueIdAsync(int filterLevelValueId,
int pageIndex = 0, int pageSize = int.MaxValue)
{
if (filterLevelValueId == 0)
return new PagedList(new List(), pageIndex, pageSize);
var query = from pc in _filterLevelValueProductMappingRepository.Table
join p in _productRepository.Table on pc.ProductId equals p.Id
where pc.FilterLevelValueId == filterLevelValueId && !p.Deleted
orderby pc.Id
select pc;
return await query.ToPagedListAsync(pageIndex, pageSize);
}
///
/// Gets a filter level value product mapping
///
/// Filter level value product mapping identifier
/// Page index
/// Page size
///
/// A task that represents the asynchronous operation
/// The task result contains the filter level value product mapping
///
public virtual async Task GetFilterLevelValueProductByIdAsync(int filterLevelValueProductId)
{
return await _filterLevelValueProductMappingRepository.GetByIdAsync(filterLevelValueProductId);
}
///
/// Deletes a filter level value product mapping
///
/// Filter level value product mapping
/// A task that represents the asynchronous operation
public virtual async Task DeleteFilterLevelValueProductAsync(FilterLevelValueProductMapping filterLevelValueProduct)
{
await _filterLevelValueProductMappingRepository.DeleteAsync(filterLevelValueProduct);
}
///
/// Inserts a filter level value product mapping
///
/// Filter level value product mapping
/// A task that represents the asynchronous operation
public virtual async Task InsertProductFilterLevelValueAsync(FilterLevelValueProductMapping filterLevelValueProduct)
{
await _filterLevelValueProductMappingRepository.InsertAsync(filterLevelValueProduct);
}
#endregion
#endregion
}