Skip to content

Commit b695315

Browse files
Add new field to the product specification (product collection) - Custom Name
1 parent 3a3d77a commit b695315

File tree

10 files changed

+39
-16
lines changed

10 files changed

+39
-16
lines changed

src/API/Grand.Api/Commands/Handlers/Catalog/AddProductSpecificationCommandHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public async Task<bool> Handle(AddProductSpecificationCommand request, Cancellat
2929
AttributeTypeId = request.Model.AttributeTypeId,
3030
SpecificationAttributeOptionId = request.Model.SpecificationAttributeOptionId,
3131
SpecificationAttributeId = request.Model.SpecificationAttributeId,
32+
CustomName = request.Model.CustomName,
3233
CustomValue = request.Model.CustomValue,
3334
AllowFiltering = request.Model.AllowFiltering,
3435
ShowOnProductPage = request.Model.ShowOnProductPage,

src/API/Grand.Api/Commands/Handlers/Catalog/UpdateProductSpecificationCommandHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public async Task<bool> Handle(UpdateProductSpecificationCommand request, Cancel
3333
}
3434
else
3535
{
36+
psa.CustomName = request.Model.CustomName;
3637
psa.CustomValue = request.Model.CustomValue;
3738
}
3839
psa.SpecificationAttributeId = request.Model.SpecificationAttributeId;

src/API/Grand.Api/DTOs/Catalog/ProductSpecificationAttributeDto.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public partial class ProductSpecificationAttributeDto : BaseApiEntityModel
77
{
88
public string SpecificationAttributeId { get; set; }
99
public string SpecificationAttributeOptionId { get; set; }
10+
public string CustomName { get; set; }
1011
public string CustomValue { get; set; }
1112
public bool AllowFiltering { get; set; }
1213
public bool ShowOnProductPage { get; set; }

src/Core/Grand.Domain/Catalog/ProductSpecificationAttribute.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public partial class ProductSpecificationAttribute : SubBaseEntity
2121
/// </summary>
2222
public string SpecificationAttributeOptionId { get; set; }
2323

24+
/// <summary>
25+
/// Gets or sets the custom name
26+
/// </summary>
27+
public string CustomName { get; set; }
28+
2429
/// <summary>
2530
/// Gets or sets the custom value
2631
/// </summary>

src/Web/Grand.Web.Admin/Areas/Admin/Views/Product/ProductSpecAttrPopup.cshtml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
asp-route-ProductId="@Context.Request.Query["ProductId"]"
99
asp-route-Id="@Context.Request.Query["Id"]">
1010

11-
1211
<div asp-validation-summary="All"></div>
1312
<input asp-for="ProductId" type="hidden" />
1413
<input asp-for="Id" type="hidden" />
@@ -53,6 +52,13 @@
5352
<span asp-validation-for="SpecificationAttributeOptionId"></span>
5453
</div>
5554
</div>
55+
<div class="form-group" id="pnlCustomName">
56+
<admin-label asp-for="CustomName" />
57+
<div class="col-md-9 col-sm-9">
58+
<admin-input asp-for="CustomName" />
59+
<span asp-validation-for="CustomName"></span>
60+
</div>
61+
</div>
5662
<div class="form-group" id="pnlCustomValue">
5763
<admin-label asp-for="CustomValue" />
5864
<div class="col-md-9 col-sm-9">
@@ -140,8 +146,12 @@
140146
success: function (data) {
141147
var ddlSpecOptions = $("#@Html.IdFor(model => model.SpecificationAttributeOptionId)");
142148
ddlSpecOptions.html('');
143-
$.each(data, function(id, option) {
144-
ddlSpecOptions.append($('<option></option>').val(option.id).html(kendo.htmlEncode(option.name)));
149+
$.each(data, function (id, option) {
150+
var selected = '';
151+
if ('@Model.SpecificationAttributeOptionId' == option.id) {
152+
selected = ' selected '
153+
}
154+
ddlSpecOptions.append($('<option ' + selected+'></option>').val(option.id).html(kendo.htmlEncode(option.name)));
145155
});
146156
},
147157
error: function(xhr, ajaxOptions, thrownError) {
@@ -162,20 +172,24 @@
162172
if (selectedTypeId == @(((int)SpecificationAttributeType.Option).ToString())) {
163173
$('#pnlSpecificationAttributeOptionId').show();
164174
$('#pnlCustomValue').hide();
175+
$('#pnlCustomName').hide();
165176
$('#disableOnCustom').show();
166177
$('#pnlAllowFiltering').show();
167178
} else if (selectedTypeId == @(((int)SpecificationAttributeType.CustomText).ToString())) {
168179
$('#pnlSpecificationAttributeOptionId').hide();
180+
$('#pnlCustomName').show();
169181
$('#pnlCustomValue').show();
170182
$('#disableOnCustom').hide();
171183
$('#pnlAllowFiltering').hide();
172184
} else if (selectedTypeId == @(((int)SpecificationAttributeType.CustomHtmlText).ToString())) {
173185
$('#pnlSpecificationAttributeOptionId').hide();
186+
$('#pnlCustomName').show();
174187
$('#pnlCustomValue').show();
175188
$('#disableOnCustom').hide();
176189
$('#pnlAllowFiltering').hide();
177190
} else if (selectedTypeId == @(((int)SpecificationAttributeType.Hyperlink).ToString())) {
178191
$('#pnlSpecificationAttributeOptionId').hide();
192+
$('#pnlCustomName').show();
179193
$('#pnlCustomValue').show();
180194
$('#disableOnCustom').hide();
181195
$('#pnlAllowFiltering').hide();

src/Web/Grand.Web.Admin/Areas/Admin/Views/Product/_CreateOrUpdate.SpecificationAttributes.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
field: "ValueRaw",
113113
encoded: false,
114114
title: "@Loc["Admin.Catalog.Products.SpecificationAttributes.Fields.Value"]",
115-
template: "# if(AttributeTypeId != 0) {# <a class='k-link btnMagnificPopup' href='@Url.Action("ProductSpecAttrPopup", "Product", new { area = Constants.AreaAdmin })/?productId=@(Model.Id)&id=#=Id#'>#=ValueRaw#</a> #} else {# <a class='k-link btnMagnificPopup' href='@Url.Action("ProductSpecAttrPopup", "Product", new { area = Constants.AreaAdmin })/?productId=@(Model.Id)&id=#=Id#'>#=AttributeName# : #=ValueRaw#</a> #} #"
115+
template: "<a class='k-link btnMagnificPopup' href='@Url.Action("ProductSpecAttrPopup", "Product", new { area = Constants.AreaAdmin })/?productId=@(Model.Id)&id=#=Id#'>#=kendo.htmlEncode(AttributeName)# : #=ValueRaw# </a>"
116116
}, {
117117
field: "AllowFiltering",
118118
title: "@Loc["Admin.Catalog.Products.SpecificationAttributes.Fields.AllowFiltering"]",

src/Web/Grand.Web.Admin/Models/Catalog/ProductModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,9 @@ public AddProductSpecificationAttributeModel()
474474
[GrandResourceDisplayName("Admin.Catalog.Products.SpecificationAttributes.Fields.SpecificationAttributeOption")]
475475
public string SpecificationAttributeOptionId { get; set; }
476476

477+
[GrandResourceDisplayName("Admin.Catalog.Products.SpecificationAttributes.Fields.CustomName")]
478+
public string CustomName { get; set; }
479+
477480
[GrandResourceDisplayName("Admin.Catalog.Products.SpecificationAttributes.Fields.CustomValue")]
478481
public string CustomValue { get; set; }
479482

src/Web/Grand.Web.Admin/Services/ProductViewModelService.cs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2797,8 +2797,10 @@ public virtual async Task<IList<ProductSpecificationAttributeModel>> PrepareProd
27972797
AttributeTypeName = x.AttributeTypeId.GetTranslationEnum(_translationService, _workContext),
27982798
AllowFiltering = x.AllowFiltering,
27992799
ShowOnProductPage = x.ShowOnProductPage,
2800-
DisplayOrder = x.DisplayOrder
2800+
DisplayOrder = x.DisplayOrder,
2801+
AttributeName = x.CustomName
28012802
};
2803+
28022804
switch (x.AttributeTypeId)
28032805
{
28042806
case SpecificationAttributeType.Option:
@@ -2835,16 +2837,7 @@ public virtual async Task InsertProductSpecificationAttributeModel(ProductModel.
28352837
model.AllowFiltering = false;
28362838
model.SpecificationAttributeOptionId = null;
28372839
}
2838-
2839-
var psa = new ProductSpecificationAttribute {
2840-
AttributeTypeId = model.AttributeTypeId,
2841-
SpecificationAttributeOptionId = model.SpecificationAttributeOptionId,
2842-
SpecificationAttributeId = model.SpecificationAttributeId,
2843-
CustomValue = model.CustomValue,
2844-
AllowFiltering = model.AllowFiltering,
2845-
ShowOnProductPage = model.ShowOnProductPage,
2846-
DisplayOrder = model.DisplayOrder,
2847-
};
2840+
var psa = model.ToEntity();
28482841

28492842
await _specificationAttributeService.InsertProductSpecificationAttribute(psa, product.Id);
28502843
product.ProductSpecificationAttributes.Add(psa);

src/Web/Grand.Web/App_Data/Resources/DefaultLanguage.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3699,6 +3699,9 @@
36993699
<Resource Name="Admin.Catalog.Products.SpecificationAttributes.Fields.AttributeType">
37003700
<Value>Attribute type</Value>
37013701
</Resource>
3702+
<Resource Name="Admin.Catalog.Products.SpecificationAttributes.Fields.CustomName">
3703+
<Value>Name</Value>
3704+
</Resource>
37023705
<Resource Name="Admin.Catalog.Products.SpecificationAttributes.Fields.CustomValue">
37033706
<Value>Value</Value>
37043707
</Resource>

src/Web/Grand.Web/Features/Handlers/Products/GetProductSpecificationHandler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public async Task<IList<ProductSpecificationModel>> Handle(GetProductSpecificati
3232
var spa = new List<ProductSpecificationModel>();
3333
foreach (var item in request.Product.ProductSpecificationAttributes.Where(x => x.ShowOnProductPage).OrderBy(x => x.DisplayOrder))
3434
{
35-
var m = new ProductSpecificationModel();
35+
var m = new ProductSpecificationModel {
36+
SpecificationAttributeName = item.CustomName
37+
};
3638

3739
switch (item.AttributeTypeId)
3840
{

0 commit comments

Comments
 (0)