Browse Source

Close #47: Add OrderMaxQuantity property to ProductSku entity

pull/49/head
gdlcf88 6 years ago
parent
commit
37ca85b16e
  1. 7
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application/EasyAbp/EShop/Orders/Orders/NewOrderGenerator.cs
  2. 13
      modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application/EasyAbp/EShop/Orders/Orders/OrderLineInvalidQuantityException.cs
  3. 5
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductSkuDto.cs
  4. 2
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
  5. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
  6. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
  7. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
  8. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
  9. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
  10. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
  11. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
  12. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
  13. 1
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
  14. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
  15. 7
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/ViewModels/CreateEditProductSkuViewModel.cs
  16. 3543
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200612105914_AddedOrderMaxQuantityProperty.Designer.cs
  17. 23
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200612105914_AddedOrderMaxQuantityProperty.cs
  18. 3
      samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/EShopSampleMigrationsDbContextModelSnapshot.cs

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

@ -69,6 +69,11 @@ namespace EasyAbp.EShop.Orders.Orders
{
var product = productDict[input.ProductId];
var productSku = product.ProductSkus.Single(x => x.Id == input.ProductSkuId);
if (!input.Quantity.IsBetween(productSku.OrderMinQuantity, productSku.OrderMaxQuantity))
{
throw new OrderLineInvalidQuantityException(product.Id, productSku.Id, input.Quantity);
}
return new OrderLine(
id: _guidGenerator.Create(),
@ -84,7 +89,7 @@ namespace EasyAbp.EShop.Orders.Orders
totalPrice: productSku.Price * input.Quantity,
totalDiscount: 0,
quantity: input.Quantity
);
);
}
protected virtual Task<string> GenerateSkuDescriptionAsync(ProductDto product, ProductSkuDto productSku)

13
modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application/EasyAbp/EShop/Orders/Orders/OrderLineInvalidQuantityException.cs

@ -0,0 +1,13 @@
using System;
using Volo.Abp;
namespace EasyAbp.EShop.Orders.Orders
{
public class OrderLineInvalidQuantityException : BusinessException
{
public OrderLineInvalidQuantityException(Guid productId, Guid? productSkuId, int quantity) : base(
message: $"Invalid quantity {quantity} for product {productId} (SKU: {productSkuId}).")
{
}
}
}

5
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductSkuDto.cs

@ -22,9 +22,14 @@ namespace EasyAbp.EShop.Products.Products.Dtos
[DisplayName("ProductSkuInventory")]
public int Inventory { get; set; }
[DefaultValue(1)]
[DisplayName("ProductSkuOrderMinQuantity")]
public int OrderMinQuantity { get; set; }
[DefaultValue(99)]
[DisplayName("ProductSkuOrderMaxQuantity")]
public int OrderMaxQuantity { get; set; }
[DisplayName("ProductSkuProductDetailId")]
public Guid? ProductDetailId { get; set; }
}

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

@ -21,6 +21,8 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public int OrderMinQuantity { get; set; }
public int OrderMaxQuantity { get; set; }
public Guid? ProductDetailId { get; set; }
}
}

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

@ -27,6 +27,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -28,6 +28,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -27,6 +27,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -27,6 +27,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -28,6 +28,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -28,6 +28,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -27,6 +27,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -28,6 +28,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

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

@ -28,6 +28,7 @@
"ProductSkuPrice": "ProductSkuPrice",
"ProductSkuInventory": "ProductSkuInventory",
"ProductSkuOrderMinQuantity": "ProductSkuOrderMinQuantity",
"ProductSkuOrderMaxQuantity": "ProductSkuOrderMaxQuantity",
"ProductSkuProductDetailId": "ProductSkuProductDetailId",
"ProductSkuContentDescription": "ProductSkuContentDescription",
"CreateProductSku": "CreateProductSku",

4
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs

@ -26,6 +26,8 @@ namespace EasyAbp.EShop.Products.Products
public virtual int OrderMinQuantity { get; protected set; }
public virtual int OrderMaxQuantity { get; protected set; }
public Guid? ProductDetailId { get; set; }
protected ProductSku() {}
@ -40,6 +42,7 @@ namespace EasyAbp.EShop.Products.Products
int inventory,
int sold,
int orderMinQuantity,
int orderMaxQuantity,
Guid? productDetailId) : base(id)
{
SerializedAttributeOptionIds = serializedAttributeOptionIds;
@ -50,6 +53,7 @@ namespace EasyAbp.EShop.Products.Products
Inventory = inventory;
Sold = sold;
OrderMinQuantity = orderMinQuantity;
OrderMaxQuantity = orderMaxQuantity;
ProductDetailId = productDetailId;
}

7
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/ViewModels/CreateEditProductSkuViewModel.cs

@ -1,4 +1,5 @@
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
@ -25,8 +26,14 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku.Vi
public int Inventory { get; set; }
[Required]
[DefaultValue(1)]
[Display(Name = "ProductSkuOrderMinQuantity")]
public int OrderMinQuantity { get; set; }
[Required]
[DefaultValue(99)]
[Display(Name = "ProductSkuOrderMaxQuantity")]
public int OrderMaxQuantity { get; set; }
[HiddenInput]
[Display(Name = "ProductSkuProductDetailId")]

3543
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200612105914_AddedOrderMaxQuantityProperty.Designer.cs

File diff suppressed because it is too large

23
samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore.DbMigrations/Migrations/20200612105914_AddedOrderMaxQuantityProperty.cs

@ -0,0 +1,23 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace EShopSample.Migrations
{
public partial class AddedOrderMaxQuantityProperty : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "OrderMaxQuantity",
table: "EShopProductsProductSkus",
nullable: false,
defaultValue: 0);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "OrderMaxQuantity",
table: "EShopProductsProductSkus");
}
}
}

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

@ -1046,6 +1046,9 @@ namespace EShopSample.Migrations
.HasColumnName("LastModifierId")
.HasColumnType("uniqueidentifier");
b.Property<int>("OrderMaxQuantity")
.HasColumnType("int");
b.Property<int>("OrderMinQuantity")
.HasColumnType("int");

Loading…
Cancel
Save