Browse Source

Remove ProductType entity and introduce a hard-coded ProductGroup design.

Resolve #82
pull/96/head
gdlcf88 6 years ago
parent
commit
40cdc2fd7b
  1. 4
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderLineDto.cs
  2. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application/EasyAbp/EShop/Orders/Orders/NewOrderGenerator.cs
  3. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/cs.json
  4. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/en.json
  5. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/pl.json
  6. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/pt-BR.json
  7. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/sl.json
  8. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/tr.json
  9. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/vi.json
  10. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/zh-Hans.json
  11. 3
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/zh-Hant.json
  12. 2
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderLine.cs
  13. 2
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderLineEto.cs
  14. 11
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderLine.cs
  15. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Permissions/ProductsPermissionDefinitionProvider.cs
  16. 5
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Permissions/ProductsPermissions.cs
  17. 17
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductTypes/Dtos/ProductTypeDto.cs
  18. 16
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductTypes/IProductTypeAppService.cs
  19. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDto.cs
  20. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
  21. 14
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductGroupDto.cs
  22. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/IProductAppService.cs
  23. 22
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductTypes/ProductTypeAppService.cs
  24. 47
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
  25. 5
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
  26. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
  27. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
  28. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
  29. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
  30. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
  31. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
  32. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
  33. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
  34. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
  35. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProduct.cs
  36. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductEto.cs
  37. 6
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/ProductsConsts.cs
  38. 11
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/EShopProductsDomainModule.cs
  39. 17
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/EShopProductsOptions.cs
  40. 8
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/DefaultProductGroup.cs
  41. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/IProductGroup.cs
  42. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/IProductGroupConfigurationProvider.cs
  43. 9
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupConfiguration.cs
  44. 20
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupConfigurationProvider.cs
  45. 73
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupConfigurations.cs
  46. 42
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupNameAttribute.cs
  47. 10
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/IProductTypeDataSeeder.cs
  48. 9
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/IProductTypeRepository.cs
  49. 38
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/ProductType.cs
  50. 31
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/ProductTypeDataSeeder.cs
  51. 14
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/NonexistentProductGroupException.cs
  52. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
  53. 28
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs
  54. 24
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductsDataSeedContributor.cs
  55. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityFrameworkCoreModule.cs
  56. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/IProductsDbContext.cs
  57. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContext.cs
  58. 8
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
  59. 14
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/ProductTypes/ProductTypeRepository.cs
  60. 34
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.HttpApi/EasyAbp/EShop/Products/ProductTypes/ProductTypeController.cs
  61. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.HttpApi/EasyAbp/EShop/Products/Products/ProductController.cs
  62. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Menus/ProductsMenuContributor.cs
  63. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Menus/ProductsMenus.cs
  64. 45
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/Index.cshtml
  65. 12
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/Index.cshtml.cs
  66. 0
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/index.css
  67. 23
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/index.js
  68. 13
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs
  69. 13
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs
  70. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/Index.cshtml
  71. 6
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs
  72. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js
  73. 26
      modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/ProductTypes/ProductTypeAppServiceTests.cs
  74. 23
      modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Domain.Tests/ProductTypes/ProductTypeDomainTests.cs
  75. 31
      modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.EntityFrameworkCore.Tests/EntityFrameworkCore/ProductTypes/ProductTypeRepositoryTests.cs
  76. 4235
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200901104922_RemovedProductTypeEntity.Designer.cs
  77. 89
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200901104922_RemovedProductTypeEntity.cs
  78. 76
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/EShopSampleMigrationsDbContextModelSnapshot.cs

4
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderLineDto.cs

@ -13,7 +13,9 @@ namespace EasyAbp.EShop.Orders.Orders.Dtos
public DateTime ProductDetailModificationTime { get; set; }
public string ProductTypeUniqueName { get; set; }
public string ProductGroupName { get; set; }
public string ProductGroupDisplayName { get; set; }
public string ProductUniqueName { get; set; }

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application/EasyAbp/EShop/Orders/Orders/NewOrderGenerator.cs

@ -95,7 +95,8 @@ namespace EasyAbp.EShop.Orders.Orders
productSkuId: productSku.Id,
productModificationTime: product.LastModificationTime ?? product.CreationTime,
productDetailModificationTime: productSku.LastModificationTime ?? productSku.CreationTime,
productTypeUniqueName: product.ProductTypeUniqueName,
productGroupName: product.ProductGroupName,
productGroupDisplayName: product.ProductGroupDisplayName,
productUniqueName: product.UniqueName,
productDisplayName: product.DisplayName,
skuName: productSku.Name,

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/cs.json

@ -25,7 +25,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/en.json

@ -26,7 +26,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/pl.json

@ -25,7 +25,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/pt-BR.json

@ -25,7 +25,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/sl.json

@ -26,7 +26,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/tr.json

@ -26,7 +26,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/vi.json

@ -25,7 +25,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/zh-Hans.json

@ -26,7 +26,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

3
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Localization/Orders/zh-Hant.json

@ -26,7 +26,8 @@
"OrderLineProductSkuId": "OrderLineProductSkuId",
"OrderLineProductModificationTime": "OrderLineProductModificationTime",
"OrderLineProductDetailModificationTime": "OrderLineProductDetailModificationTime",
"OrderLineProductTypeUniqueName": "OrderLineProductTypeUniqueName",
"OrderLineProductGroupName": "OrderLineProductGroupName",
"OrderLineProductGroupDisplayName": "OrderLineProductGroupDisplayName",
"OrderLineProductUniqueName": "OrderLineProductUniqueName",
"OrderLineProductDisplayName": "OrderLineProductDisplayName",
"OrderLineSkuName": "OrderLineSkuName",

2
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderLine.cs

@ -12,7 +12,7 @@ namespace EasyAbp.EShop.Orders.Orders
DateTime ProductDetailModificationTime { get; }
string ProductTypeUniqueName { get; }
string ProductGroupName { get; }
string ProductUniqueName { get; }

2
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderLineEto.cs

@ -15,7 +15,7 @@ namespace EasyAbp.EShop.Orders.Orders
public DateTime ProductDetailModificationTime { get; set; }
public string ProductTypeUniqueName { get; set; }
public string ProductGroupName { get; set; }
public string ProductUniqueName { get; set; }

11
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderLine.cs

@ -15,7 +15,10 @@ namespace EasyAbp.EShop.Orders.Orders
public virtual DateTime ProductDetailModificationTime { get; protected set; }
[NotNull]
public virtual string ProductTypeUniqueName { get; protected set; }
public virtual string ProductGroupName { get; protected set; }
[NotNull]
public virtual string ProductGroupDisplayName { get; protected set; }
[CanBeNull]
public virtual string ProductUniqueName { get; protected set; }
@ -57,7 +60,8 @@ namespace EasyAbp.EShop.Orders.Orders
Guid productSkuId,
DateTime productModificationTime,
DateTime productDetailModificationTime,
[NotNull] string productTypeUniqueName,
[NotNull] string productGroupName,
[NotNull] string productGroupDisplayName,
[CanBeNull] string productUniqueName,
[NotNull] string productDisplayName,
[CanBeNull] string skuName,
@ -74,7 +78,8 @@ namespace EasyAbp.EShop.Orders.Orders
ProductSkuId = productSkuId;
ProductModificationTime = productModificationTime;
ProductDetailModificationTime = productDetailModificationTime;
ProductTypeUniqueName = productTypeUniqueName;
ProductGroupName = productGroupName;
ProductGroupDisplayName = productGroupDisplayName;
ProductUniqueName = productUniqueName;
ProductDisplayName = productDisplayName;
SkuName = skuName;

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Permissions/ProductsPermissionDefinitionProvider.cs

@ -11,8 +11,6 @@ namespace EasyAbp.EShop.Products.Permissions
{
var moduleGroup = context.AddGroup(ProductsPermissions.GroupName, L("Permission:Products"));
var productTypes = moduleGroup.AddPermission(ProductsPermissions.ProductTypes.Default, L("Permission:ProductType"));
var categories = moduleGroup.AddPermission(ProductsPermissions.Categories.Default, L("Permission:Category"));
categories.AddChild(ProductsPermissions.Categories.CrossStore, L("Permission:CrossStore"));
categories.AddChild(ProductsPermissions.Categories.Create, L("Permission:Create"));

5
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Permissions/ProductsPermissions.cs

@ -6,11 +6,6 @@ namespace EasyAbp.EShop.Products.Permissions
{
public const string GroupName = "EasyAbp.EShop.Products";
public class ProductTypes
{
public const string Default = GroupName + ".ProductType";
}
public class Categories
{
public const string Default = GroupName + ".Category";

17
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductTypes/Dtos/ProductTypeDto.cs

@ -1,17 +0,0 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.MultiTenancy;
namespace EasyAbp.EShop.Products.ProductTypes.Dtos
{
public class ProductTypeDto : FullAuditedEntityDto<Guid>
{
public string UniqueName { get; set; }
public string DisplayName { get; set; }
public string Description { get; set; }
public MultiTenancySides MultiTenancySide { get; set; }
}
}

16
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductTypes/IProductTypeAppService.cs

@ -1,16 +0,0 @@
using System;
using EasyAbp.EShop.Products.ProductTypes.Dtos;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace EasyAbp.EShop.Products.ProductTypes
{
public interface IProductTypeAppService :
IReadOnlyAppService<
ProductTypeDto,
Guid,
PagedAndSortedResultRequestDto>
{
}
}

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDto.cs

@ -8,8 +8,8 @@ namespace EasyAbp.EShop.Products.Products.Dtos
{
public class CreateUpdateProductDto : IValidatableObject
{
[DisplayName("ProductProductTypeId")]
public Guid ProductTypeId { get; set; }
[DisplayName("ProductProductGroupName")]
public string ProductGroupName { get; set; }
[DisplayName("ProductDetailId")]
public Guid ProductDetailId { get; set; }

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs

@ -8,9 +8,9 @@ namespace EasyAbp.EShop.Products.Products.Dtos
[Serializable]
public class ProductDto : FullAuditedEntityDto<Guid>
{
public Guid ProductTypeId { get; set; }
public string ProductGroupName { get; set; }
public string ProductTypeUniqueName { get; set; }
public string ProductGroupDisplayName { get; set; }
public Guid ProductDetailId { get; set; }

14
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductGroupDto.cs

@ -0,0 +1,14 @@
using System;
namespace EasyAbp.EShop.Products.Products.Dtos
{
[Serializable]
public class ProductGroupDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
public string Description { get; set; }
}
}

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/IProductAppService.cs

@ -1,6 +1,7 @@
using EasyAbp.EShop.Products.Products.Dtos;
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace EasyAbp.EShop.Products.Products
@ -24,5 +25,7 @@ namespace EasyAbp.EShop.Products.Products
Task<ProductDto> GetByCodeAsync(string code, Guid storeId);
Task<ProductDto> DeleteSkuAsync(Guid productId, Guid productSkuId, Guid storeId);
Task<ListResultDto<ProductGroupDto>> GetProductGroupListAsync();
}
}

22
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductTypes/ProductTypeAppService.cs

@ -1,22 +0,0 @@
using System;
using EasyAbp.EShop.Products.Permissions;
using EasyAbp.EShop.Products.ProductTypes.Dtos;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace EasyAbp.EShop.Products.ProductTypes
{
public class ProductTypeAppService : ReadOnlyAppService<ProductType, ProductTypeDto, Guid, PagedAndSortedResultRequestDto>,
IProductTypeAppService
{
protected override string GetPolicyName { get; set; } = ProductsPermissions.ProductTypes.Default;
protected override string GetListPolicyName { get; set; } = ProductsPermissions.ProductTypes.Default;
private readonly IProductTypeRepository _repository;
public ProductTypeAppService(IProductTypeRepository repository) : base(repository)
{
_repository = repository;
}
}
}

47
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs

@ -1,12 +1,13 @@
using EasyAbp.EShop.Products.Permissions;
using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.ProductStores;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Stores.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Options;
using Microsoft.Extensions.Options;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
@ -25,25 +26,25 @@ namespace EasyAbp.EShop.Products.Products
protected override string GetListPolicyName { get; set; } = null;
private readonly IProductManager _productManager;
private readonly EShopProductsOptions _options;
private readonly IProductInventoryProvider _productInventoryProvider;
private readonly IAttributeOptionIdsSerializer _attributeOptionIdsSerializer;
private readonly IProductStoreRepository _productStoreRepository;
private readonly IProductTypeRepository _productTypeRepository;
private readonly IProductRepository _repository;
public ProductAppService(
IProductManager productManager,
IOptions<EShopProductsOptions> options,
IProductInventoryProvider productInventoryProvider,
IAttributeOptionIdsSerializer attributeOptionIdsSerializer,
IProductStoreRepository productStoreRepository,
IProductTypeRepository productTypeRepository,
IProductRepository repository) : base(repository)
{
_productManager = productManager;
_options = options.Value;
_productInventoryProvider = productInventoryProvider;
_attributeOptionIdsSerializer = attributeOptionIdsSerializer;
_productStoreRepository = productStoreRepository;
_productTypeRepository = productTypeRepository;
_repository = repository;
}
@ -77,7 +78,7 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, input.StoreId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
@ -102,7 +103,7 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, input.StoreId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
@ -218,19 +219,21 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, storeId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
protected virtual async Task LoadDtosProductTypeUniqueNameAsync(IEnumerable<ProductDto> dtos)
protected virtual Task LoadDtosProductGroupDisplayNameAsync(IEnumerable<ProductDto> dtos)
{
var dict = (await _productTypeRepository.GetListAsync()).ToDictionary(x => x.Id, x => x.UniqueName);
var dict = _options.Groups.GetConfigurationsDictionary();
foreach (var dto in dtos)
{
dto.ProductTypeUniqueName = dict[dto.ProductTypeId];
dto.ProductGroupDisplayName = dict[dto.ProductGroupName].DisplayName;
}
return Task.CompletedTask;
}
public virtual async Task<ProductDto> GetByCodeAsync(string code, Guid storeId)
@ -247,7 +250,7 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, storeId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
@ -291,7 +294,7 @@ namespace EasyAbp.EShop.Products.Products
items.Add(productDto);
}
await LoadDtosProductTypeUniqueNameAsync(items);
await LoadDtosProductGroupDisplayNameAsync(items);
return new PagedResultDto<ProductDto>(totalCount, items);
}
@ -386,7 +389,7 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, storeId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
@ -412,7 +415,7 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, storeId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
@ -435,9 +438,23 @@ namespace EasyAbp.EShop.Products.Products
var dto = MapToGetOutputDto(product);
await LoadDtoExtraDataAsync(product, dto, storeId);
await LoadDtosProductTypeUniqueNameAsync(new[] {dto});
await LoadDtosProductGroupDisplayNameAsync(new[] {dto});
return dto;
}
public virtual Task<ListResultDto<ProductGroupDto>> GetProductGroupListAsync()
{
var dict = _options.Groups.GetConfigurationsDictionary();
return Task.FromResult(new ListResultDto<ProductGroupDto>(dict.Select(x =>
new ProductGroupDto
{
Name = x.Key,
DisplayName = x.Value.DisplayName,
Description = x.Value.Description
}
).ToList()));
}
}
}

5
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs

@ -13,8 +13,6 @@ using EasyAbp.EShop.Products.ProductInventories;
using EasyAbp.EShop.Products.ProductInventories.Dtos;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.ProductTypes.Dtos;
using System.Linq;
using Volo.Abp.AutoMapper;
using Volo.Abp.DependencyInjection;
@ -29,7 +27,7 @@ namespace EasyAbp.EShop.Products
* Alternatively, you can split your mapping configurations
* into multiple profile classes for a better organization. */
CreateMap<Product, ProductDto>()
.Ignore(dto => dto.ProductTypeUniqueName)
.Ignore(dto => dto.ProductGroupDisplayName)
.Ignore(dto => dto.Sold)
.Ignore(dto => dto.MinimumPrice)
.Ignore(dto => dto.MaximumPrice);
@ -64,7 +62,6 @@ namespace EasyAbp.EShop.Products
CreateMap<UpdateProductSkuDto, ProductSku>(MemberList.Source);
CreateMap<Category, CategoryDto>();
CreateMap<CreateUpdateCategoryDto, Category>(MemberList.Source);
CreateMap<ProductType, ProductTypeDto>();
CreateMap<ProductCategory, ProductCategoryDto>();
CreateMap<ProductHistory, ProductHistoryDto>();
CreateMap<ProductDetailHistory, ProductDetailHistoryDto>();

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json

@ -4,7 +4,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -58,15 +59,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json

@ -5,7 +5,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -59,15 +60,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the product type {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json

@ -4,7 +4,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -58,15 +59,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json

@ -4,7 +4,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -58,15 +59,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json

@ -5,7 +5,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -59,15 +60,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json

@ -5,7 +5,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -59,15 +60,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json

@ -4,7 +4,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -58,15 +59,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json

@ -5,7 +5,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -59,15 +60,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json

@ -5,7 +5,8 @@
"Menu:Product": "MenuProduct",
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
"ProductProductGroupName": "ProductProductGroupName",
"ProductProductGroupDisplayName": "ProductProductGroupDisplayName",
"ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductUniqueName": "ProductUniqueName",
@ -59,15 +60,6 @@
"CreateCategory": "CreateCategory",
"EditCategory": "EditCategory",
"CategoryDeletionConfirmationMessage": "Are you sure to delete the category {0}?",
"Menu:ProductType": "MenuProductType",
"ProductType": "ProductType",
"ProductTypeUniqueName": "ProductTypeUniqueName",
"ProductTypeDisplayName": "ProductTypeDisplayName",
"ProductTypeDescription": "ProductTypeDescription",
"ProductTypeMultiTenancySide": "ProductTypeMultiTenancySide",
"CreateProductType": "CreateProductType",
"EditProductType": "EditProductType",
"ProductTypeDeletionConfirmationMessage": "Are you sure to delete the producttype {0}?",
"Menu:ProductCategory": "MenuProductCategory",
"ProductCategory": "ProductCategory",
"ProductCategoryTenantId": "ProductCategoryTenantId",

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProduct.cs

@ -6,7 +6,7 @@ namespace EasyAbp.EShop.Products.Products
{
public interface IProduct : IHasExtraProperties
{
Guid ProductTypeId { get; }
string ProductGroupName { get; }
Guid ProductDetailId { get; }

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductEto.cs

@ -7,8 +7,8 @@ namespace EasyAbp.EShop.Products.Products
{
public Guid Id { get; set; }
public Guid ProductTypeId { get; set; }
public string ProductGroupName { get; set; }
public Guid ProductDetailId { get; set; }
public string UniqueName { get; set; }

6
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/ProductsConsts.cs

@ -2,6 +2,10 @@
{
public static class ProductsConsts
{
public const string DefaultProductType = "Default";
public const string DefaultProductGroupName = "Default";
public const string DefaultProductGroupDisplayName = "Default";
public const string DefaultProductGroupDescription = "";
}
}

11
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/EShopProductsDomainModule.cs

@ -1,4 +1,6 @@
using EasyAbp.Abp.Trees;
using EasyAbp.EShop.Products.Options;
using EasyAbp.EShop.Products.Options.ProductGroups;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Stores;
using Microsoft.Extensions.DependencyInjection;
@ -23,6 +25,15 @@ namespace EasyAbp.EShop.Products
options.AutoEventSelectors.Add<Product>();
});
Configure<EShopProductsOptions>(options =>
{
options.Groups.Configure<DefaultProductGroup>(group =>
{
group.DisplayName = ProductsConsts.DefaultProductGroupDisplayName;
group.Description = ProductsConsts.DefaultProductGroupDescription;
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)

17
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/EShopProductsOptions.cs

@ -0,0 +1,17 @@
using System;
using EasyAbp.EShop.Products.Options.ProductGroups;
namespace EasyAbp.EShop.Products.Options
{
public class EShopProductsOptions
{
public ProductGroupConfigurations Groups { get; }
public Type DefaultFileDownloadProviderType { get; set; }
public EShopProductsOptions()
{
Groups = new ProductGroupConfigurations();
}
}
}

8
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/DefaultProductGroup.cs

@ -0,0 +1,8 @@
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
[ProductGroupName(ProductsConsts.DefaultProductGroupName)]
public class DefaultProductGroup
{
}
}

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/IProductGroup.cs

@ -0,0 +1,7 @@
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
public interface IProductGroup
{
}
}

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/IProductGroupConfigurationProvider.cs

@ -0,0 +1,7 @@
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
public interface IProductGroupConfigurationProvider
{
ProductGroupConfiguration Get(string productGroupName);
}
}

9
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupConfiguration.cs

@ -0,0 +1,9 @@
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
public class ProductGroupConfiguration
{
public string DisplayName { get; set; }
public string Description { get; set; }
}
}

20
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupConfigurationProvider.cs

@ -0,0 +1,20 @@
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
public class ProductGroupConfigurationProvider : IProductGroupConfigurationProvider, ITransientDependency
{
private readonly EShopProductsOptions _options;
public ProductGroupConfigurationProvider(IOptions<EShopProductsOptions> options)
{
_options = options.Value;
}
public ProductGroupConfiguration Get(string productGroupName)
{
return _options.Groups.GetConfiguration(productGroupName);
}
}
}

73
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupConfigurations.cs

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp;
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
public class ProductGroupConfigurations
{
private readonly Dictionary<string, ProductGroupConfiguration> _groups;
public ProductGroupConfigurations()
{
_groups = new Dictionary<string, ProductGroupConfiguration>();
}
public ProductGroupConfigurations Configure<TGroup>(
Action<ProductGroupConfiguration> configureAction)
{
return Configure(
ProductGroupNameAttribute.GetGroupName<TGroup>(),
configureAction
);
}
public ProductGroupConfigurations Configure(
[NotNull] string name,
[NotNull] Action<ProductGroupConfiguration> configureAction)
{
Check.NotNullOrWhiteSpace(name, nameof(name));
Check.NotNull(configureAction, nameof(configureAction));
configureAction(
_groups.GetOrAdd(
name,
() => new ProductGroupConfiguration()
)
);
return this;
}
public ProductGroupConfigurations ConfigureAll(Action<string, ProductGroupConfiguration> configureAction)
{
foreach (var group in _groups)
{
configureAction(group.Key, group.Value);
}
return this;
}
[NotNull]
public ProductGroupConfiguration GetConfiguration<TGroup>()
{
return GetConfiguration(ProductGroupNameAttribute.GetGroupName<TGroup>());
}
[NotNull]
public ProductGroupConfiguration GetConfiguration([NotNull] string name)
{
Check.NotNullOrWhiteSpace(name, nameof(name));
return _groups.GetOrDefault(name);
}
[NotNull]
public Dictionary<string, ProductGroupConfiguration> GetConfigurationsDictionary()
{
return _groups;
}
}
}

42
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Options/ProductGroups/ProductGroupNameAttribute.cs

@ -0,0 +1,42 @@
using System;
using System.Reflection;
using JetBrains.Annotations;
using Volo.Abp;
namespace EasyAbp.EShop.Products.Options.ProductGroups
{
public class ProductGroupNameAttribute : Attribute
{
[NotNull]
public string Name { get; }
public ProductGroupNameAttribute([NotNull] string name)
{
Check.NotNullOrWhiteSpace(name, nameof(name));
Name = name;
}
public virtual string GetName(Type type)
{
return Name;
}
public static string GetGroupName<T>()
{
return GetGroupName(typeof(T));
}
public static string GetGroupName(Type type)
{
var nameAttribute = type.GetCustomAttribute<ProductGroupNameAttribute>();
if (nameAttribute == null)
{
return type.FullName;
}
return nameAttribute.GetName(type);
}
}
}

10
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/IProductTypeDataSeeder.cs

@ -1,10 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
namespace EasyAbp.EShop.Products.ProductTypes
{
public interface IProductTypeDataSeeder
{
Task SeedAsync(DataSeedContext context);
}
}

9
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/IProductTypeRepository.cs

@ -1,9 +0,0 @@
using System;
using Volo.Abp.Domain.Repositories;
namespace EasyAbp.EShop.Products.ProductTypes
{
public interface IProductTypeRepository : IRepository<ProductType, Guid>
{
}
}

38
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/ProductType.cs

@ -1,38 +0,0 @@
using System;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace EasyAbp.EShop.Products.ProductTypes
{
public class ProductType : FullAuditedAggregateRoot<Guid>
{
public virtual string UniqueName { get; protected set; }
[NotNull]
public virtual string DisplayName { get; protected set; }
[CanBeNull]
public virtual string Description { get; protected set; }
public virtual MultiTenancySides MultiTenancySide { get; protected set; }
protected ProductType()
{
}
public ProductType(
Guid id,
string uniqueName,
string displayName,
string description,
MultiTenancySides multiTenancySide
) :base(id)
{
UniqueName = uniqueName;
DisplayName = displayName;
Description = description;
MultiTenancySide = multiTenancySide;
}
}
}

31
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductTypes/ProductTypeDataSeeder.cs

@ -1,31 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace EasyAbp.EShop.Products.ProductTypes
{
public class ProductTypeDataSeeder : IProductTypeDataSeeder, ITransientDependency
{
private readonly IGuidGenerator _guidGenerator;
private readonly IProductTypeRepository _productTypeRepository;
public ProductTypeDataSeeder(
IGuidGenerator guidGenerator,
IProductTypeRepository productTypeRepository)
{
_guidGenerator = guidGenerator;
_productTypeRepository = productTypeRepository;
}
public async Task SeedAsync(DataSeedContext context)
{
if (await _productTypeRepository.GetCountAsync() == 0)
{
await _productTypeRepository.InsertAsync(new ProductType(_guidGenerator.Create(), ProductsConsts.DefaultProductType, "Default",
null, MultiTenancySides.Both), true);
}
}
}
}

14
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/NonexistentProductGroupException.cs

@ -0,0 +1,14 @@
using System;
using Volo.Abp;
namespace EasyAbp.EShop.Products.Products
{
public class NonexistentProductGroupException : BusinessException
{
public NonexistentProductGroupException(string productGroupName) : base(
"NonexistentProductGroup",
$"The specified product group ({productGroupName}) is nonexistent.")
{
}
}
}

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs

@ -7,7 +7,8 @@ namespace EasyAbp.EShop.Products.Products
{
public class Product : FullAuditedAggregateRoot<Guid>, IProduct
{
public virtual Guid ProductTypeId { get; protected set; }
[NotNull]
public virtual string ProductGroupName { get; protected set; }
public virtual Guid ProductDetailId { get; protected set; }
@ -40,7 +41,7 @@ namespace EasyAbp.EShop.Products.Products
public Product(
Guid id,
Guid productTypeId,
[NotNull] string productGroupName,
Guid productDetailId,
[CanBeNull] string code,
[NotNull] string displayName,
@ -52,7 +53,7 @@ namespace EasyAbp.EShop.Products.Products
int displayOrder
) : base(id)
{
ProductTypeId = productTypeId;
ProductGroupName = productGroupName;
ProductDetailId = productDetailId;
UniqueName = code?.Trim();
DisplayName = displayName;

28
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Options.ProductGroups;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductStores;
using Microsoft.Extensions.DependencyInjection;
@ -16,19 +17,22 @@ namespace EasyAbp.EShop.Products.Products
private readonly IProductPriceProvider _productPriceProvider;
private readonly IProductCategoryRepository _productCategoryRepository;
private readonly IProductInventoryProvider _productInventoryProvider;
private readonly IProductGroupConfigurationProvider _productGroupConfigurationProvider;
public ProductManager(
IProductRepository productRepository,
IProductStoreRepository productStoreRepository,
IProductPriceProvider productPriceProvider,
IProductCategoryRepository productCategoryRepository,
IProductInventoryProvider productInventoryProvider)
IProductInventoryProvider productInventoryProvider,
IProductGroupConfigurationProvider productGroupConfigurationProvider)
{
_productRepository = productRepository;
_productStoreRepository = productStoreRepository;
_productPriceProvider = productPriceProvider;
_productCategoryRepository = productCategoryRepository;
_productInventoryProvider = productInventoryProvider;
_productGroupConfigurationProvider = productGroupConfigurationProvider;
}
public virtual async Task<Product> CreateAsync(Product product, Guid? storeId = null,
@ -36,7 +40,9 @@ namespace EasyAbp.EShop.Products.Products
{
product.TrimCode();
await CheckProductCodeUniqueAsync(product);
await CheckProductGroupNameAsync(product);
await CheckProductUniqueNameAsync(product);
await _productRepository.InsertAsync(product, autoSave: true);
@ -51,10 +57,22 @@ namespace EasyAbp.EShop.Products.Products
return product;
}
protected virtual Task CheckProductGroupNameAsync(Product product)
{
if (_productGroupConfigurationProvider.Get(product.ProductGroupName) == null)
{
throw new NonexistentProductGroupException(product.DisplayName);
}
return Task.CompletedTask;
}
public virtual async Task<Product> UpdateAsync(Product product, IEnumerable<Guid> categoryIds = null)
{
await CheckProductCodeUniqueAsync(product);
await CheckProductGroupNameAsync(product);
await CheckProductUniqueNameAsync(product);
await _productRepository.UpdateAsync(product, autoSave: true);
@ -141,7 +159,7 @@ namespace EasyAbp.EShop.Products.Products
storeId, productId, true), true);
}
protected virtual async Task CheckProductCodeUniqueAsync(Product product)
protected virtual async Task CheckProductUniqueNameAsync(Product product)
{
if (product.UniqueName.IsNullOrEmpty())
{

24
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductsDataSeedContributor.cs

@ -1,24 +0,0 @@
using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductTypes;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Uow;
namespace EasyAbp.EShop.Products
{
public class ProductsDataSeedContributor : IDataSeedContributor, ITransientDependency
{
private readonly IProductTypeDataSeeder _productTypeDataSeeder;
public ProductsDataSeedContributor(IProductTypeDataSeeder productTypeDataSeeder)
{
_productTypeDataSeeder = productTypeDataSeeder;
}
[UnitOfWork(true)]
public async Task SeedAsync(DataSeedContext context)
{
await _productTypeDataSeeder.SeedAsync(context);
}
}
}

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityFrameworkCoreModule.cs

@ -4,7 +4,6 @@ using EasyAbp.EShop.Products.ProductDetailHistories;
using EasyAbp.EShop.Products.ProductHistories;
using EasyAbp.EShop.Products.ProductStores;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.Products;
@ -31,7 +30,6 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
options.AddRepository<Category, CategoryRepository>();
options.AddRepository<Product, ProductRepository>();
options.AddRepository<ProductDetail, ProductDetailRepository>();
options.AddRepository<ProductType, ProductTypeRepository>();
options.AddRepository<ProductCategory, ProductCategoryRepository>();
options.AddRepository<ProductStore, ProductStoreRepository>();
options.AddRepository<ProductHistory, ProductHistoryRepository>();

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/IProductsDbContext.cs

@ -3,7 +3,6 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductStores;
@ -25,7 +24,6 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
DbSet<ProductAttributeOption> ProductAttributeOptions { get; set; }
DbSet<ProductSku> ProductSkus { get; set; }
DbSet<Category> Categories { get; set; }
DbSet<ProductType> ProductTypes { get; set; }
DbSet<ProductCategory> ProductCategories { get; set; }
DbSet<ProductStore> ProductStores { get; set; }
DbSet<ProductHistory> ProductHistories { get; set; }

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContext.cs

@ -3,7 +3,6 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductStores;
@ -25,7 +24,6 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
public DbSet<ProductAttributeOption> ProductAttributeOptions { get; set; }
public DbSet<ProductSku> ProductSkus { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<ProductType> ProductTypes { get; set; }
public DbSet<ProductCategory> ProductCategories { get; set; }
public DbSet<ProductStore> ProductStores { get; set; }
public DbSet<ProductHistory> ProductHistories { get; set; }

8
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs

@ -3,7 +3,6 @@ using EasyAbp.EShop.Products.ProductDetailHistories;
using EasyAbp.EShop.Products.ProductHistories;
using EasyAbp.EShop.Products.ProductStores;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.Products;
using System;
@ -97,13 +96,6 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
b.HasIndex(x => x.UniqueName).IsUnique();
});
builder.Entity<ProductType>(b =>
{
b.ToTable(options.TablePrefix + "ProductTypes", options.Schema);
b.ConfigureByConvention();
/* Configure more properties here */
});
builder.Entity<ProductCategory>(b =>
{
b.ToTable(options.TablePrefix + "ProductCategories", options.Schema);

14
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/ProductTypes/ProductTypeRepository.cs

@ -1,14 +0,0 @@
using System;
using EasyAbp.EShop.Products.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace EasyAbp.EShop.Products.ProductTypes
{
public class ProductTypeRepository : EfCoreRepository<IProductsDbContext, ProductType, Guid>, IProductTypeRepository
{
public ProductTypeRepository(IDbContextProvider<IProductsDbContext> dbContextProvider) : base(dbContextProvider)
{
}
}
}

34
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.HttpApi/EasyAbp/EShop/Products/ProductTypes/ProductTypeController.cs

@ -1,34 +0,0 @@
using System;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductTypes.Dtos;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.ProductTypes
{
[RemoteService(Name = "EShopProducts")]
[Route("/api/eShop/products/productType")]
public class ProductTypeController : ProductsController, IProductTypeAppService
{
private readonly IProductTypeAppService _service;
public ProductTypeController(IProductTypeAppService service)
{
_service = service;
}
[HttpGet]
[Route("{id}")]
public Task<ProductTypeDto> GetAsync(Guid id)
{
return _service.GetAsync(id);
}
[HttpGet]
public Task<PagedResultDto<ProductTypeDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
return _service.GetListAsync(input);
}
}
}

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.HttpApi/EasyAbp/EShop/Products/Products/ProductController.cs

@ -94,5 +94,12 @@ namespace EasyAbp.EShop.Products.Products
{
return _service.DeleteSkuAsync(id, productSkuId, storeId);
}
[HttpGet]
[Route("productGroup")]
public Task<ListResultDto<ProductGroupDto>> GetProductGroupListAsync()
{
return _service.GetProductGroupListAsync();
}
}
}

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Menus/ProductsMenuContributor.cs

@ -24,13 +24,6 @@ namespace EasyAbp.EShop.Products.Web.Menus
var productManagementMenuItem = new ApplicationMenuItem(ProductsMenus.Prefix, l["Menu:ProductManagement"]);
if (await context.IsGrantedAsync(ProductsPermissions.ProductTypes.Default))
{
productManagementMenuItem.AddItem(
new ApplicationMenuItem(ProductsMenus.ProductType, l["Menu:ProductType"], "/EShop/Products/ProductTypes/ProductType")
);
}
if (await context.IsGrantedAsync(ProductsPermissions.Categories.Default))
{
productManagementMenuItem.AddItem(

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Menus/ProductsMenus.cs

@ -6,8 +6,6 @@
public const string Prefix = ModuleGroupPrefix + ".Products";
public const string ProductType = Prefix + ".ProductType";
public const string Category = Prefix + ".Category";
public const string Product = Prefix + ".Product";

45
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/Index.cshtml

@ -1,45 +0,0 @@
@page
@using EasyAbp.EShop.Products.Localization
@using EasyAbp.EShop.Products.Web.Menus
@using EasyAbp.EShop.Products.Web.Pages.EShop.Products.ProductTypes.ProductType
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@model IndexModel
@inject IPageLayout PageLayout
@inject IHtmlLocalizer<ProductsResource> L
@{
PageLayout.Content.Title = L["ProductType"].Value;
PageLayout.Content.BreadCrumb.Add(L["Menu:ProductType"].Value);
PageLayout.Content.MenuItemName = ProductsMenus.ProductType;
}
@section scripts
{
<abp-script src="/Pages/EShop/Products/ProductTypes/ProductType/index.js" />
}
@section styles
{
<abp-style src="/Pages/EShop/Products/ProductTypes/ProductType/index.css"/>
}
<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_6">
<abp-card-title>@L["ProductType"]</abp-card-title>
</abp-column>
</abp-row>
</abp-card-header>
<abp-card-body>
<abp-table striped-rows="true" id="ProductTypeTable" class="nowrap">
<thead>
<tr>
<th>@L["ProductTypeUniqueName"]</th>
<th>@L["ProductTypeDisplayName"]</th>
<th>@L["ProductTypeDescription"]</th>
<th>@L["ProductTypeMultiTenancySide"]</th>
</tr>
</thead>
</abp-table>
</abp-card-body>
</abp-card>

12
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/Index.cshtml.cs

@ -1,12 +0,0 @@
using System.Threading.Tasks;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.ProductTypes.ProductType
{
public class IndexModel : ProductsPageModel
{
public async Task OnGetAsync()
{
await Task.CompletedTask;
}
}
}

0
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/index.css

23
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/ProductTypes/ProductType/index.js

@ -1,23 +0,0 @@
$(function () {
var l = abp.localization.getResource('EasyAbpEShopProducts');
var service = easyAbp.eShop.products.productTypes.productType;
var dataTable = $('#ProductTypeTable').DataTable(abp.libs.datatables.normalizeConfiguration({
processing: true,
serverSide: true,
paging: true,
searching: false,
autoWidth: false,
scrollCollapse: true,
order: [[1, "asc"]],
ajax: abp.libs.datatables.createAjax(service.getList),
columnDefs: [
{ data: "uniqueName" },
{ data: "displayName" },
{ data: "description" },
{ data: "multiTenancySide" },
]
}));
});

13
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs

@ -4,7 +4,6 @@ using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductDetails.Dtos;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
@ -24,22 +23,19 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
[BindProperty]
public CreateEditProductViewModel Product { get; set; }
public ICollection<SelectListItem> ProductTypes { get; set; }
public ICollection<SelectListItem> ProductGroups { get; set; }
public ICollection<SelectListItem> Categories { get; set; }
private readonly IProductTypeAppService _productTypeAppService;
private readonly ICategoryAppService _categoryAppService;
private readonly IProductDetailAppService _productDetailAppService;
private readonly IProductAppService _service;
public CreateModalModel(
IProductTypeAppService productTypeAppService,
ICategoryAppService categoryAppService,
IProductDetailAppService productDetailAppService,
IProductAppService service)
{
_productTypeAppService = productTypeAppService;
_categoryAppService = categoryAppService;
_productDetailAppService = productDetailAppService;
_service = service;
@ -47,10 +43,9 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
public virtual async Task OnGetAsync(Guid? categoryId)
{
ProductTypes =
(await _productTypeAppService.GetListAsync(new PagedAndSortedResultRequestDto
{ MaxResultCount = LimitedResultRequestDto.MaxMaxResultCount })).Items
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();
ProductGroups =
(await _service.GetProductGroupListAsync()).Items
.Select(dto => new SelectListItem(dto.DisplayName, dto.Name)).ToList();
Categories =
(await _categoryAppService.GetListAsync(new GetCategoryListDto

13
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs

@ -6,7 +6,6 @@ using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductDetails.Dtos;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
@ -27,24 +26,21 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
[BindProperty]
public CreateEditProductViewModel Product { get; set; }
public ICollection<SelectListItem> ProductTypes { get; set; }
public ICollection<SelectListItem> ProductGroups { get; set; }
public ICollection<SelectListItem> Categories { get; set; }
private readonly IProductTypeAppService _productTypeAppService;
private readonly ICategoryAppService _categoryAppService;
private readonly IProductDetailAppService _productDetailAppService;
private readonly IProductCategoryAppService _productCategoryAppService;
private readonly IProductAppService _service;
public EditModalModel(
IProductTypeAppService productTypeAppService,
ICategoryAppService categoryAppService,
IProductDetailAppService productDetailAppService,
IProductCategoryAppService productCategoryAppService,
IProductAppService service)
{
_productTypeAppService = productTypeAppService;
_categoryAppService = categoryAppService;
_productDetailAppService = productDetailAppService;
_productCategoryAppService = productCategoryAppService;
@ -53,10 +49,9 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
public virtual async Task OnGetAsync(Guid storeId)
{
ProductTypes =
(await _productTypeAppService.GetListAsync(new PagedAndSortedResultRequestDto
{MaxResultCount = LimitedResultRequestDto.MaxMaxResultCount})).Items
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();
ProductGroups =
(await _service.GetProductGroupListAsync()).Items
.Select(dto => new SelectListItem(dto.DisplayName, dto.Name)).ToList();
Categories =
(await _categoryAppService.GetListAsync(new GetCategoryListDto

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/Index.cshtml

@ -45,7 +45,7 @@
<thead>
<tr>
<th>@L["Actions"]</th>
<th>@L["ProductProductTypeId"]</th>
<th>@L["ProductProductGroupDisplayName"]</th>
<th>@L["ProductUniqueName"]</th>
<th>@L["ProductDisplayName"]</th>
<th>@L["ProductInventoryStrategy"]</th>

6
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs

@ -16,9 +16,9 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewM
public Guid StoreId { get; set; }
[Required]
[SelectItems("ProductTypes")]
[Display(Name = "ProductType")]
public Guid ProductTypeId { get; set; }
[SelectItems("ProductGroups")]
[Display(Name = "ProductGroupName")]
public string ProductGroupName { get; set; }
[SelectItems("Categories")]
[Display(Name = "ProductCategory")]

3
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js

@ -13,7 +13,6 @@ $(function () {
searching: false,
autoWidth: false,
scrollCollapse: true,
order: [[1, "asc"]],
ajax: abp.libs.datatables.createAjax(service.getList, function () {
return { storeId: storeId, categoryId: categoryId, showHidden: true }
}),
@ -50,7 +49,7 @@ $(function () {
]
}
},
{ data: "productTypeId" },
{ data: "productGroupDisplayName" },
{ data: "uniqueName" },
{ data: "displayName" },
{ data: "inventoryStrategy" },

26
modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/ProductTypes/ProductTypeAppServiceTests.cs

@ -1,26 +0,0 @@
using Shouldly;
using System.Threading.Tasks;
using Xunit;
namespace EasyAbp.EShop.Products.ProductTypes
{
public class ProductTypeAppServiceTests : ProductsApplicationTestBase
{
private readonly IProductTypeAppService _productTypeAppService;
public ProductTypeAppServiceTests()
{
_productTypeAppService = GetRequiredService<IProductTypeAppService>();
}
[Fact]
public async Task Test1()
{
// Arrange
// Act
// Assert
}
}
}

23
modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Domain.Tests/ProductTypes/ProductTypeDomainTests.cs

@ -1,23 +0,0 @@
using System.Threading.Tasks;
using Shouldly;
using Xunit;
namespace EasyAbp.EShop.Products.ProductTypes
{
public class ProductTypeDomainTests : ProductsDomainTestBase
{
public ProductTypeDomainTests()
{
}
[Fact]
public async Task Test1()
{
// Arrange
// Assert
// Assert
}
}
}

31
modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.EntityFrameworkCore.Tests/EntityFrameworkCore/ProductTypes/ProductTypeRepositoryTests.cs

@ -1,31 +0,0 @@
using System;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductTypes;
using Volo.Abp.Domain.Repositories;
using Xunit;
namespace EasyAbp.EShop.Products.EntityFrameworkCore.ProductTypes
{
public class ProductTypeRepositoryTests : ProductsEntityFrameworkCoreTestBase
{
private readonly IRepository<ProductType, Guid> _productTypeRepository;
public ProductTypeRepositoryTests()
{
_productTypeRepository = GetRequiredService<IRepository<ProductType, Guid>>();
}
[Fact]
public async Task Test1()
{
await WithUnitOfWorkAsync(async () =>
{
// Arrange
// Act
//Assert
});
}
}
}

4235
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200901104922_RemovedProductTypeEntity.Designer.cs

File diff suppressed because it is too large

89
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200901104922_RemovedProductTypeEntity.cs

@ -0,0 +1,89 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace EShopSample.Migrations
{
public partial class RemovedProductTypeEntity : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "EasyAbpEShopProductsProductTypes");
migrationBuilder.DropColumn(
name: "ProductTypeId",
table: "EasyAbpEShopProductsProducts");
migrationBuilder.DropColumn(
name: "ProductTypeUniqueName",
table: "EasyAbpEShopOrdersOrderLines");
migrationBuilder.AddColumn<string>(
name: "ProductGroupName",
table: "EasyAbpEShopProductsProducts",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ProductGroupDisplayName",
table: "EasyAbpEShopOrdersOrderLines",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ProductGroupName",
table: "EasyAbpEShopOrdersOrderLines",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ProductGroupName",
table: "EasyAbpEShopProductsProducts");
migrationBuilder.DropColumn(
name: "ProductGroupDisplayName",
table: "EasyAbpEShopOrdersOrderLines");
migrationBuilder.DropColumn(
name: "ProductGroupName",
table: "EasyAbpEShopOrdersOrderLines");
migrationBuilder.AddColumn<Guid>(
name: "ProductTypeId",
table: "EasyAbpEShopProductsProducts",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
migrationBuilder.AddColumn<string>(
name: "ProductTypeUniqueName",
table: "EasyAbpEShopOrdersOrderLines",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.CreateTable(
name: "EasyAbpEShopProductsProductTypes",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true),
Description = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
MultiTenancySide = table.Column<int>(type: "int", nullable: false),
UniqueName = table.Column<string>(type: "nvarchar(max)", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_EasyAbpEShopProductsProductTypes", x => x.Id);
});
}
}
}

76
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/EShopSampleMigrationsDbContextModelSnapshot.cs

@ -191,6 +191,12 @@ namespace EShopSample.Migrations
b.Property<string>("ProductDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("ProductGroupDisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("ProductGroupName")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("ProductId")
.HasColumnType("uniqueidentifier");
@ -200,9 +206,6 @@ namespace EShopSample.Migrations
b.Property<Guid>("ProductSkuId")
.HasColumnType("uniqueidentifier");
b.Property<string>("ProductTypeUniqueName")
.HasColumnType("nvarchar(max)");
b.Property<string>("ProductUniqueName")
.HasColumnType("nvarchar(max)");
@ -1115,69 +1118,6 @@ namespace EShopSample.Migrations
b.ToTable("EasyAbpEShopProductsProductStores");
});
modelBuilder.Entity("EasyAbp.EShop.Products.ProductTypes.ProductType", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnName("ConcurrencyStamp")
.HasColumnType("nvarchar(40)")
.HasMaxLength(40);
b.Property<DateTime>("CreationTime")
.HasColumnName("CreationTime")
.HasColumnType("datetime2");
b.Property<Guid?>("CreatorId")
.HasColumnName("CreatorId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("DeleterId")
.HasColumnName("DeleterId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime?>("DeletionTime")
.HasColumnName("DeletionTime")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasColumnType("nvarchar(max)");
b.Property<string>("DisplayName")
.HasColumnType("nvarchar(max)");
b.Property<string>("ExtraProperties")
.HasColumnName("ExtraProperties")
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnName("IsDeleted")
.HasColumnType("bit")
.HasDefaultValue(false);
b.Property<DateTime?>("LastModificationTime")
.HasColumnName("LastModificationTime")
.HasColumnType("datetime2");
b.Property<Guid?>("LastModifierId")
.HasColumnName("LastModifierId")
.HasColumnType("uniqueidentifier");
b.Property<int>("MultiTenancySide")
.HasColumnType("int");
b.Property<string>("UniqueName")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("EasyAbpEShopProductsProductTypes");
});
modelBuilder.Entity("EasyAbp.EShop.Products.Products.Product", b =>
{
b.Property<Guid>("Id")
@ -1248,8 +1188,8 @@ namespace EShopSample.Migrations
b.Property<Guid>("ProductDetailId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("ProductTypeId")
.HasColumnType("uniqueidentifier");
b.Property<string>("ProductGroupName")
.HasColumnType("nvarchar(max)");
b.Property<string>("UniqueName")
.HasColumnType("nvarchar(450)");

Loading…
Cancel
Save