Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allowing search by 'Specification attribute name' in specification attributes page (Admin area) #7546

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ public partial interface ISpecificationAttributeService
/// </summary>
/// <param name="pageIndex">Page index</param>
/// <param name="pageSize">Page size</param>
/// <param name="specificationName">specification attribute name name</param>
/// <returns>
/// A task that represents the asynchronous operation
/// The task result contains the specification attribute groups
/// </returns>
Task<IPagedList<SpecificationAttributeGroup>> GetSpecificationAttributeGroupsAsync(int pageIndex = 0, int pageSize = int.MaxValue);
Task<IPagedList<SpecificationAttributeGroup>> GetSpecificationAttributeGroupsAsync(int pageIndex = 0, int pageSize = int.MaxValue, string specificationName = "");

/// <summary>
/// Gets product specification attribute groups
Expand Down Expand Up @@ -107,14 +108,15 @@ public partial interface ISpecificationAttributeService
Task<IList<SpecificationAttribute>> GetSpecificationAttributesWithOptionsAsync();

/// <summary>
/// Gets specification attributes by group identifier
/// Gets specification attributes by group identifier and also by name
/// </summary>
/// <param name="specificationAttributeGroupId">The specification attribute group identifier</param>
/// <param name="name">The specification attribute name and it's optional</param>
/// <returns>
/// A task that represents the asynchronous operation
/// The task result contains the specification attributes
/// </returns>
Task<IList<SpecificationAttribute>> GetSpecificationAttributesByGroupIdAsync(int? specificationAttributeGroupId = null);
Task<IList<SpecificationAttribute>> GetSpecificationAttributesByGroupIdAsync(int? specificationAttributeGroupId = null, string name = "");

/// <summary>
/// Deletes a specification attribute
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ from p in _productRepository.Table
#endregion

#region Methods

#region Specification attribute group

/// <summary>
Expand All @@ -122,17 +122,40 @@ public virtual async Task<SpecificationAttributeGroup> GetSpecificationAttribute
/// </summary>
/// <param name="pageIndex">Page index</param>
/// <param name="pageSize">Page size</param>
/// <param name="specificationName">specification attribute name name</param>
/// <returns>
/// A task that represents the asynchronous operation
/// The task result contains the specification attribute groups
/// </returns>
public virtual async Task<IPagedList<SpecificationAttributeGroup>> GetSpecificationAttributeGroupsAsync(int pageIndex = 0, int pageSize = int.MaxValue)
public virtual async Task<IPagedList<SpecificationAttributeGroup>> GetSpecificationAttributeGroupsAsync(int pageIndex = 0, int pageSize = int.MaxValue, string specificationName = "")
{
var query = from sag in _specificationAttributeGroupRepository.Table
orderby sag.DisplayOrder, sag.Id
select sag;
var query = _specificationAttributeGroupRepository.Table;

return await query.ToPagedListAsync(pageIndex, pageSize);
// Filter by specification attribute name
if (!string.IsNullOrEmpty(specificationName))
query = from sag in query
from sa in _specificationAttributeRepository.Table
where sa.Name.Contains(specificationName) && sa.SpecificationAttributeGroupId == sag.Id
select sag;

// Order the results
query = from sag in query
orderby sag.DisplayOrder, sag.Id
select sag;

// Get paged results
var result = await query.ToPagedListAsync(pageIndex, pageSize);

// Add default group if necessary
if (pageIndex == 0)
{
var hasNoGroup = _specificationAttributeRepository.Table
.Any(sa => sa.SpecificationAttributeGroupId == null && (string.IsNullOrEmpty(specificationName) || sa.Name.Contains(specificationName)));
if (hasNoGroup)
result.Insert(0, new SpecificationAttributeGroup());
}

return result;
}

/// <summary>
Expand Down Expand Up @@ -260,19 +283,21 @@ where _specificationAttributeOptionRepository.Table.Any(o => o.SpecificationAttr
}

/// <summary>
/// Gets specification attributes by group identifier
/// Gets specification attributes by group identifier and also by name
/// </summary>
/// <param name="specificationAttributeGroupId">The specification attribute group identifier</param>
/// <param name="name">The specification attribute name and it's optional</param>
/// <returns>
/// A task that represents the asynchronous operation
/// The task result contains the specification attributes
/// </returns>
public virtual async Task<IList<SpecificationAttribute>> GetSpecificationAttributesByGroupIdAsync(int? specificationAttributeGroupId = null)
public virtual async Task<IList<SpecificationAttribute>> GetSpecificationAttributesByGroupIdAsync(int? specificationAttributeGroupId = null, string name = "")
{
var query = _specificationAttributeRepository.Table;
if (!specificationAttributeGroupId.HasValue || specificationAttributeGroupId > 0)
query = query.Where(sa => sa.SpecificationAttributeGroupId == specificationAttributeGroupId);

if (!string.IsNullOrEmpty(name))
query = query.Where(sa => sa.Name.Contains(name));
query = query.OrderBy(sa => sa.DisplayOrder).ThenBy(sa => sa.Id);

return await query.ToListAsync();
Expand Down Expand Up @@ -648,6 +673,7 @@ orderby product.Name
return await query.ToPagedListAsync(pageIndex, pageSize);
}


#endregion

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ public override void Up()
//#6407
["ActivityLog.PublicStore.PasswordChanged"] = "Public store. Customer has changed the password",

//#7545
["Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttribute.Fields.SearchName"] = "Name",
["Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttribute.Fields.SearchName.Hint"] = "a specification name"


}, languageId);

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1959,6 +1959,18 @@
<LocaleResource Name="Admin.Catalog.Attributes.ProductAttributes.UsedByProducts.Published">
<Value>Published</Value>
</LocaleResource>
<LocaleResource Name="Admin.Catalog.Attributes.SpecificationAttribute.Fields.SearchGroupName">
<Value>Group Name</Value>
</LocaleResource>
<LocaleResource Name="Admin.Catalog.Attributes.SpecificationAttribute.Fields.SearchGroupName.Hint">
<Value>a group name</Value>
</LocaleResource>
<LocaleResource Name="Admin.Catalog.Attributes.SpecificationAttributes.Fields.SearchName">
<Value>Name</Value>
</LocaleResource>
<LocaleResource Name="Admin.Catalog.Attributes.SpecificationAttributes.Fields.SearchName.Hint">
<Value>a specification name</Value>
</LocaleResource>
<LocaleResource Name="Admin.Catalog.Attributes.SpecificationAttributes">
<Value>Specification attributes</Value>
</LocaleResource>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,19 +115,15 @@ public virtual async Task<SpecificationAttributeGroupListModel> PrepareSpecifica
{
ArgumentNullException.ThrowIfNull(searchModel);

var one = new List<SpecificationAttributeGroupModel>();
//get specification attribute groups
var specificationAttributeGroups = await _specificationAttributeService
.GetSpecificationAttributeGroupsAsync(searchModel.Page - 1, searchModel.PageSize);

if (searchModel.Page == 1)
.GetSpecificationAttributeGroupsAsync(searchModel.Page - 1, searchModel.PageSize, searchModel.SpecificationAttributeName);
// check wether to set the default group
if (specificationAttributeGroups.Any(s => s.Id == 0))
{
//dislpay default group with non-grouped specification attributes on first page
specificationAttributeGroups.Insert(0, new SpecificationAttributeGroup
{
Name = await _localizationService.GetResourceAsync("Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttributeGroup.DefaultGroupName")
});
specificationAttributeGroups.FirstOrDefault(sag => sag.Id == 0).Name = await _localizationService.GetResourceAsync("Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttributeGroup.DefaultGroupName");
}

//prepare list model
var model = new SpecificationAttributeGroupListModel().PrepareToGrid(searchModel, specificationAttributeGroups, () =>
{
Expand Down Expand Up @@ -186,7 +182,7 @@ public virtual async Task<SpecificationAttributeListModel> PrepareSpecificationA
ArgumentNullException.ThrowIfNull(searchModel);

//get specification attributes
var specificationAttributes = (await _specificationAttributeService.GetSpecificationAttributesByGroupIdAsync(group?.Id)).ToPagedList(searchModel);
var specificationAttributes = (await _specificationAttributeService.GetSpecificationAttributesByGroupIdAsync(group?.Id, searchModel.SpecificationAttributeSearchName)).ToPagedList(searchModel);

//prepare list model
var model = new SpecificationAttributeListModel().PrepareToGrid(searchModel, specificationAttributes, () =>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Nop.Web.Framework.Models;
using Nop.Web.Framework.Mvc.ModelBinding;

namespace Nop.Web.Areas.Admin.Models.Catalog;

Expand All @@ -7,4 +8,7 @@ namespace Nop.Web.Areas.Admin.Models.Catalog;
/// </summary>
public partial record SpecificationAttributeGroupSearchModel : BaseSearchModel
{
[NopResourceDisplayName("Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttribute.Fields.SearchName")]
public string SpecificationAttributeName { get; set; }

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Nop.Web.Framework.Models;
using Nop.Web.Framework.Mvc.ModelBinding;

namespace Nop.Web.Areas.Admin.Models.Catalog;

Expand All @@ -10,6 +11,7 @@ public partial record SpecificationAttributeSearchModel : BaseSearchModel
#region Properties

public int SpecificationAttributeGroupId { get; set; }

[NopResourceDisplayName("Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttribute.Fields.SearchName")]
public string SpecificationAttributeSearchName { get; set; }
#endregion
}
Loading