Skip to content

Commit 6e6d98e

Browse files
authored
Merge pull request #161 from ApertureLabsInc/nopCommerce_4.10
ProductDto/CustomerDto Enhancements
2 parents 4f89eb7 + 182e99e commit 6e6d98e

File tree

9 files changed

+152
-4
lines changed

9 files changed

+152
-4
lines changed

Nop.Plugin.Api/ApiMapperConfiguration.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ private void CreateProductMap()
194194
{
195195
AutoMapperApiConfiguration.MapperConfigurationExpression.CreateMap<Product, ProductDto>()
196196
.IgnoreAllNonExisting()
197-
.ForMember(x => x.ProductAttributeMappings, y => y.Ignore())
198197
.ForMember(x => x.FullDescription, y => y.MapFrom(src => WebUtility.HtmlEncode(src.FullDescription)))
199198
.ForMember(x => x.Tags,
200199
y => y.MapFrom(src => src.ProductProductTagMappings.Select(x => x.ProductTag.Name)));

Nop.Plugin.Api/DTOs/Customers/BaseCustomerDto.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ public class BaseCustomerDto : BaseDto
99
{
1010
private List<int> _roleIds;
1111

12+
[JsonProperty("customer_guid")]
13+
public Guid CustomerGuid { get; set; }
14+
1215
[JsonProperty("username")]
1316
public string Username { get; set; }
1417
/// <summary>

Nop.Plugin.Api/DTOs/Images/ImageMappingDto.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ public class ImageMappingDto : ImageDto
99
[JsonProperty("id")]
1010
public int Id { get; set; }
1111

12+
[JsonProperty("picture_id")]
13+
public int PictureId { get; set; }
14+
1215
[JsonProperty("position")]
1316
public int Position { get; set; }
1417
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using FluentValidation.Attributes;
2+
using Newtonsoft.Json;
3+
using Nop.Plugin.Api.DTOs.Base;
4+
using Nop.Plugin.Api.Validators;
5+
6+
namespace Nop.Plugin.Api.DTOs.Products
7+
{
8+
[JsonObject(Title = "product_attribute_combination")]
9+
[Validator(typeof(ProductAttributeCombinationDtoValidator))]
10+
public class ProductAttributeCombinationDto : BaseDto
11+
{
12+
/// <summary>
13+
/// Gets or sets the product identifier
14+
/// </summary>
15+
[JsonProperty("product_id")]
16+
public int ProductId { get; set; }
17+
18+
/// <summary>
19+
/// Gets or sets the attributes
20+
/// </summary>
21+
[JsonProperty("attributes_xml")]
22+
public string AttributesXml { get; set; }
23+
24+
/// <summary>
25+
/// Gets or sets the stock quantity
26+
/// </summary>
27+
[JsonProperty("stock_quantity")]
28+
public int StockQuantity { get; set; }
29+
30+
/// <summary>
31+
/// Gets or sets the SKU
32+
/// </summary>
33+
[JsonProperty("sku")]
34+
public string Sku { get; set; }
35+
36+
/// <summary>
37+
/// Gets or sets the manufacturer part number
38+
/// </summary>
39+
[JsonProperty("manufacturer_part_number")]
40+
public string ManufacturerPartNumber { get; set; }
41+
42+
/// <summary>
43+
/// Gets or sets the Global Trade Item Number (GTIN). These identifiers include UPC (in North America), EAN (in Europe), JAN (in Japan), and ISBN (for books).
44+
/// </summary>
45+
[JsonProperty("gtin")]
46+
public string Gtin { get; set; }
47+
48+
/// <summary>
49+
/// Gets or sets the attribute combination price. This way a store owner can override the default product price when this attribute combination is added to the cart. For example, you can give a discount this way.
50+
/// </summary>
51+
[JsonProperty("overridden_price")]
52+
public decimal? OverriddenPrice { get; set; }
53+
54+
/// <summary>
55+
/// Gets or sets the identifier of picture associated with this combination
56+
/// </summary>
57+
[JsonProperty("picture_id")]
58+
public int PictureId { get; set; }
59+
}
60+
}

Nop.Plugin.Api/DTOs/Products/ProductDto.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class ProductDto : BaseDto
2424
private List<LocalizedNameDto> _localizedNames;
2525
private List<ImageMappingDto> _images;
2626
private List<ProductAttributeMappingDto> _productAttributeMappings;
27+
private List<ProductAttributeCombinationDto> _productAttributeCombinations;
2728
private List<ProductSpecificationAttributeDto> _productSpecificationAttributes;
2829
private List<int> _associatedProductIds;
2930
private List<string> _tags;
@@ -590,6 +591,20 @@ public List<ProductAttributeMappingDto> ProductAttributeMappings
590591
}
591592
}
592593

594+
[JsonProperty("product_attribute_combinations")]
595+
public List<ProductAttributeCombinationDto> ProductAttributeCombinations
596+
{
597+
get
598+
{
599+
return _productAttributeCombinations;
600+
}
601+
set
602+
{
603+
_productAttributeCombinations = value;
604+
}
605+
}
606+
607+
593608
[JsonProperty("product_specification_attributes")]
594609
public List<ProductSpecificationAttributeDto> ProductSpecificationAttributes
595610
{

Nop.Plugin.Api/Helpers/DTOHelper.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ public ProductDto PrepareProductDTO(Product product)
8585
var productDto = product.ToDto();
8686

8787
PrepareProductImages(product.ProductPictures, productDto);
88-
PrepareProductAttributes(product.ProductAttributeMappings, productDto);
89-
PrepareProductSpecificationAttributes(product.ProductSpecificationAttributes, productDto);
9088

9189
productDto.SeName = _urlRecordService.GetSeName(product);
9290
productDto.DiscountIds = product.AppliedDiscounts.Select(discount => discount.Id).ToList();
@@ -242,6 +240,7 @@ private void PrepareProductImages(IEnumerable<ProductPicture> productPictures, P
242240
var productImageDto = new ImageMappingDto
243241
{
244242
Id = productPicture.Id,
243+
PictureId = productPicture.PictureId,
245244
Position = productPicture.DisplayOrder,
246245
Src = imageDto.Src,
247246
Attachment = imageDto.Attachment
@@ -349,6 +348,26 @@ private ProductAttributeValueDto PrepareProductAttributeValueDto(ProductAttribut
349348
return productAttributeValueDto;
350349
}
351350

351+
private void PrepareProductAttributeCombinations(IEnumerable<ProductAttributeCombination> productAttributeCombinations,
352+
ProductDto productDto)
353+
{
354+
productDto.ProductAttributeCombinations = productDto.ProductAttributeCombinations ?? new List<ProductAttributeCombinationDto>();
355+
356+
foreach (var productAttributeCombination in productAttributeCombinations)
357+
{
358+
var productAttributeCombinationDto = PrepareProductAttributeCombinationDto(productAttributeCombination);
359+
if (productAttributeCombinationDto != null)
360+
{
361+
productDto.ProductAttributeCombinations.Add(productAttributeCombinationDto);
362+
}
363+
}
364+
}
365+
366+
private ProductAttributeCombinationDto PrepareProductAttributeCombinationDto(ProductAttributeCombination productAttributeCombination)
367+
{
368+
return productAttributeCombination.ToDto();
369+
}
370+
352371
public void PrepareProductSpecificationAttributes(IEnumerable<ProductSpecificationAttribute> productSpecificationAttributes, ProductDto productDto)
353372
{
354373
if (productDto.ProductSpecificationAttributes == null)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Nop.Core.Domain.Catalog;
2+
using Nop.Plugin.Api.AutoMapper;
3+
using Nop.Plugin.Api.DTOs.Products;
4+
5+
namespace Nop.Plugin.Api.MappingExtensions
6+
{
7+
public static class ProductAttributeCombinationDtoMappings
8+
{
9+
public static ProductAttributeCombinationDto ToDto(this ProductAttributeCombination productAttributeCombination)
10+
{
11+
return productAttributeCombination.MapTo<ProductAttributeCombination, ProductAttributeCombinationDto>();
12+
}
13+
}
14+
}

Nop.Plugin.Api/Validators/BaseDtoValidator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using FluentValidation.Results;
33
using FluentValidation.Validators;
44
using Microsoft.AspNetCore.Http;
5-
using Nop.Core.Infrastructure;
65
using Nop.Plugin.Api.DTOs.Base;
76
using Nop.Plugin.Api.Helpers;
87
using System;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using Microsoft.AspNetCore.Http;
2+
using Nop.Plugin.Api.DTOs.Products;
3+
using Nop.Plugin.Api.Helpers;
4+
using System.Collections.Generic;
5+
6+
namespace Nop.Plugin.Api.Validators
7+
{
8+
public class ProductAttributeCombinationDtoValidator : BaseDtoValidator<ProductAttributeCombinationDto>
9+
{
10+
11+
#region Constructors
12+
13+
public ProductAttributeCombinationDtoValidator(IHttpContextAccessor httpContextAccessor, IJsonHelper jsonHelper, Dictionary<string, object> requestJsonDictionary) : base(httpContextAccessor, jsonHelper, requestJsonDictionary)
14+
{
15+
SetAttributesXmlRule();
16+
SetProductIdRule();
17+
}
18+
19+
#endregion
20+
21+
#region Private Methods
22+
23+
private void SetAttributesXmlRule()
24+
{
25+
SetNotNullOrEmptyCreateOrUpdateRule(p => p.AttributesXml, "invalid attributes xml", "attributes_xml");
26+
}
27+
28+
private void SetProductIdRule()
29+
{
30+
SetGreaterThanZeroCreateOrUpdateRule(p => p.ProductId, "invalid product id", "product_id");
31+
}
32+
33+
#endregion
34+
35+
}
36+
}

0 commit comments

Comments
 (0)