Browse Source

Add IsHidden property to Product and Category, close #8

Static products, close #6
Fix sku updating feature
pull/49/head
gdlcf88 6 years ago
parent
commit
e266cf935b
  1. 9
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs
  2. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/ICategoryAppService.cs
  3. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/GetProductListDto.cs
  4. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
  5. 10
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs
  6. 28
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
  7. 13
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/StaticProductCannotBeModifiedException.cs
  8. 6
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Categories/Category.cs
  9. 8
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
  10. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/index.js
  11. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs
  12. 3
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs
  13. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js
  14. 6
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml
  15. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/EditModal.cshtml
  16. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/EditModal.cshtml.cs
  17. 2407
      samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200429100034_AddedIsHiddenAndIsStatic.Designer.cs
  18. 43
      samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200429100034_AddedIsHiddenAndIsStatic.cs
  19. 9
      samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/EasyMallMigrationsDbContextModelSnapshot.cs

9
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/Dtos/GetCategoryListDto.cs

@ -0,0 +1,9 @@
using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.Categories.Dtos
{
public class GetCategoryListDto : PagedAndSortedResultRequestDto
{
public bool ShowHidden { get; set; }
}
}

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Categories/ICategoryAppService.cs

@ -9,7 +9,7 @@ namespace EasyAbp.EShop.Products.Categories
ICrudAppService<
CategoryDto,
Guid,
PagedAndSortedResultRequestDto,
GetCategoryListDto,
CreateUpdateCategoryDto,
CreateUpdateCategoryDto>
{

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/GetProductListDto.cs

@ -8,5 +8,7 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public Guid StoreId { get; set; }
public Guid? CategoryId { get; set; }
public bool ShowHidden { get; set; }
}
}

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

@ -22,6 +22,10 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public bool IsPublished { get; set; }
public bool IsStatic { get; set; }
public bool IsHidden { get; set; }
public ICollection<ProductAttributeDto> ProductAttributes { get; set; }
public ICollection<ProductSkuDto> ProductSkus { get; set; }

10
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Categories/CategoryAppService.cs

@ -1,4 +1,5 @@
using System;
using System.Linq;
using EasyAbp.EShop.Products.Authorization;
using EasyAbp.EShop.Products.Categories.Dtos;
using Volo.Abp.Application.Dtos;
@ -6,7 +7,7 @@ using Volo.Abp.Application.Services;
namespace EasyAbp.EShop.Products.Categories
{
public class CategoryAppService : CrudAppService<Category, CategoryDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateCategoryDto, CreateUpdateCategoryDto>,
public class CategoryAppService : CrudAppService<Category, CategoryDto, Guid, GetCategoryListDto, CreateUpdateCategoryDto, CreateUpdateCategoryDto>,
ICategoryAppService
{
protected override string CreatePolicyName { get; set; } = ProductsPermissions.Categories.Create;
@ -21,5 +22,12 @@ namespace EasyAbp.EShop.Products.Categories
{
_repository = repository;
}
protected override IQueryable<Category> CreateFilteredQuery(GetCategoryListDto input)
{
var query = base.CreateFilteredQuery(input);
return input.ShowHidden ? query : query.Where(x => !x.IsHidden);
}
}
}

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

@ -41,9 +41,11 @@ namespace EasyAbp.EShop.Products.Products
protected override IQueryable<Product> CreateFilteredQuery(GetProductListDto input)
{
return input.CategoryId.HasValue
var query = input.CategoryId.HasValue
? _repository.GetQueryable(input.StoreId, input.CategoryId.Value)
: _repository.GetQueryable(input.StoreId);
return input.ShowHidden ? query : query.Where(x => !x.IsHidden);
}
public override async Task<ProductDto> CreateAsync(CreateUpdateProductDto input)
@ -94,6 +96,8 @@ namespace EasyAbp.EShop.Products.Products
var product = await GetEntityByIdAsync(id);
CheckProductIsNotStatic(product);
MapToEntity(input, product);
await UpdateProductAttributesAsync(product, input);
@ -174,11 +178,25 @@ namespace EasyAbp.EShop.Products.Products
public async Task DeleteAsync(Guid id, Guid storeId)
{
await CheckDeletePolicyAsync();
var product = await GetEntityByIdAsync(id);
CheckProductIsNotStatic(product);
await _productCategoryRepository.DeleteAsync(x => x.ProductId.Equals(id));
await CheckStoreIsProductOwnerAsync(id, storeId);
await base.DeleteAsync(id);
await _repository.DeleteAsync(product);
}
private static void CheckProductIsNotStatic(Product product)
{
if (product.IsStatic)
{
throw new StaticProductCannotBeModifiedException(product.Id);
}
}
public async Task<ProductDto> CreateSkuAsync(Guid productId, Guid storeId, CreateProductSkuDto input)
@ -189,6 +207,8 @@ namespace EasyAbp.EShop.Products.Products
var product = await GetEntityByIdAsync(productId);
CheckProductIsNotStatic(product);
input.SerializedAttributeOptionIds =
await _serializedAttributeOptionIdsFormatter.ParseAsync(input.SerializedAttributeOptionIds);
@ -224,6 +244,8 @@ namespace EasyAbp.EShop.Products.Products
var product = await GetEntityByIdAsync(productId);
CheckProductIsNotStatic(product);
var sku = product.ProductSkus.Single(x => x.Id == productSkuId);
ObjectMapper.Map(input, sku);
@ -241,6 +263,8 @@ namespace EasyAbp.EShop.Products.Products
var product = await GetEntityByIdAsync(productId);
CheckProductIsNotStatic(product);
var sku = product.ProductSkus.Single(x => x.Id == productSkuId);
product.ProductSkus.Remove(sku);

13
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/StaticProductCannotBeModifiedException.cs

@ -0,0 +1,13 @@
using System;
using Volo.Abp;
namespace EasyAbp.EShop.Products.Products
{
public class StaticProductCannotBeModifiedException : BusinessException
{
public StaticProductCannotBeModifiedException(Guid productId) : base(
message: $"Cannot modify the static product: {productId}")
{
}
}
}

6
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Categories/Category.cs

@ -19,6 +19,8 @@ namespace EasyAbp.EShop.Products.Categories
[CanBeNull]
public virtual string MediaResources { get; protected set; }
public virtual bool IsHidden { get; protected set; }
protected Category()
{
@ -30,7 +32,8 @@ namespace EasyAbp.EShop.Products.Categories
Guid? parentCategoryId,
string displayName,
string description,
string mediaResources
string mediaResources,
bool isHidden
) :base(id)
{
TenantId = tenantId;
@ -38,6 +41,7 @@ namespace EasyAbp.EShop.Products.Categories
DisplayName = displayName;
Description = description;
MediaResources = mediaResources;
IsHidden = isHidden;
}
}
}

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

@ -24,6 +24,10 @@ namespace EasyAbp.EShop.Products.Products
public virtual bool IsPublished { get; protected set; }
public virtual bool IsStatic { get; protected set; }
public virtual bool IsHidden { get; protected set; }
public virtual ICollection<ProductAttribute> ProductAttributes { get; protected set; }
public virtual ICollection<ProductSku> ProductSkus { get; protected set; }
@ -41,6 +45,8 @@ namespace EasyAbp.EShop.Products.Products
string displayName,
InventoryStrategy inventoryStrategy,
bool isPublished,
bool isStatic,
bool isHidden,
string mediaResources,
int displayOrder
) :base(id)
@ -50,6 +56,8 @@ namespace EasyAbp.EShop.Products.Products
DisplayName = displayName;
InventoryStrategy = inventoryStrategy;
IsPublished = isPublished;
IsStatic = isStatic;
IsHidden = isHidden;
MediaResources = mediaResources;
DisplayOrder = displayOrder;
ProductAttributes = new List<ProductAttribute>();

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Categories/Category/index.js

@ -14,7 +14,9 @@ $(function () {
autoWidth: false,
scrollCollapse: true,
order: [[1, "asc"]],
ajax: abp.libs.datatables.createAjax(service.getList),
ajax: abp.libs.datatables.createAjax(service.getList, function () {
return { showHidden: true }
}),
columnDefs: [
{
rowAction: {

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

@ -53,7 +53,7 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();
Categories =
(await _categoryAppService.GetListAsync(new PagedAndSortedResultRequestDto
(await _categoryAppService.GetListAsync(new GetCategoryListDto
{MaxResultCount = LimitedResultRequestDto.MaxMaxResultCount}))?.Items
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();

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

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.Categories.Dtos;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductDetails.Dtos;
using Microsoft.AspNetCore.Mvc;
@ -53,7 +54,7 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();
Categories =
(await _categoryAppService.GetListAsync(new PagedAndSortedResultRequestDto
(await _categoryAppService.GetListAsync(new GetCategoryListDto
{MaxResultCount = LimitedResultRequestDto.MaxMaxResultCount}))?.Items
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();

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

@ -15,7 +15,7 @@ $(function () {
scrollCollapse: true,
order: [[1, "asc"]],
ajax: abp.libs.datatables.createAjax(service.getList, function () {
return { storeId: storeId, categoryId: categoryId }
return { storeId: storeId, categoryId: categoryId, showHidden: true }
}),
columnDefs: [
{

6
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml

@ -9,13 +9,13 @@
<abp-modal>
<abp-modal-header title="@L["CreateProductSku"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="StoreId" />
<abp-input asp-for="ProductId" />
<abp-form-content/>
@foreach (var attr in Model.Attributes)
{
<abp-select asp-for="@Model.SelectedAttributeOptionIdDict[attr.Key]" asp-items="@attr.Value" label="@L["ProductAttribute"].Value - @attr.Key" />
<abp-select asp-for="@Model.SelectedAttributeOptionIdDict[attr.Key]" asp-items="@attr.Value" label="@L["ProductAttribute"].Value - @attr.Key"/>
}
<abp-input asp-for="StoreId" />
<abp-input asp-for="ProductId" />
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/EditModal.cshtml

@ -10,6 +10,8 @@
<abp-modal-header title="@L["EditProductSku"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="Id" />
<abp-input asp-for="StoreId" />
<abp-input asp-for="ProductId" />
<abp-form-content />
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>

2
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/EditModal.cshtml.cs

@ -16,9 +16,11 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku
[BindProperty(SupportsGet = true)]
public Guid Id { get; set; }
[HiddenInput]
[BindProperty(SupportsGet = true)]
public Guid StoreId { get; set; }
[HiddenInput]
[BindProperty(SupportsGet = true)]
public Guid ProductId { get; set; }

2407
samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200429100034_AddedIsHiddenAndIsStatic.Designer.cs

File diff suppressed because it is too large

43
samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200429100034_AddedIsHiddenAndIsStatic.cs

@ -0,0 +1,43 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace EasyMall.Migrations
{
public partial class AddedIsHiddenAndIsStatic : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsHidden",
table: "ProductsProducts",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "IsStatic",
table: "ProductsProducts",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "IsHidden",
table: "ProductsCategories",
nullable: false,
defaultValue: false);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsHidden",
table: "ProductsProducts");
migrationBuilder.DropColumn(
name: "IsStatic",
table: "ProductsProducts");
migrationBuilder.DropColumn(
name: "IsHidden",
table: "ProductsCategories");
}
}
}

9
samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/EasyMallMigrationsDbContextModelSnapshot.cs

@ -62,6 +62,9 @@ namespace EasyMall.Migrations
.HasColumnType("bit")
.HasDefaultValue(false);
b.Property<bool>("IsHidden")
.HasColumnType("bit");
b.Property<DateTime?>("LastModificationTime")
.HasColumnName("LastModificationTime")
.HasColumnType("datetime2");
@ -358,9 +361,15 @@ namespace EasyMall.Migrations
.HasColumnType("bit")
.HasDefaultValue(false);
b.Property<bool>("IsHidden")
.HasColumnType("bit");
b.Property<bool>("IsPublished")
.HasColumnType("bit");
b.Property<bool>("IsStatic")
.HasColumnType("bit");
b.Property<DateTime?>("LastModificationTime")
.HasColumnName("LastModificationTime")
.HasColumnType("datetime2");

Loading…
Cancel
Save