diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs
new file mode 100644
index 00000000..f40574d2
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs
@@ -0,0 +1,24 @@
+namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
+{
+ public enum CouponType
+ {
+ ///
+ /// Discount once if the condition is met.
+ /// e.g. arrange ConditionAmount = 300 and DiscountAmount = 20.
+ /// If the price of a product is 300, the actual order price will be discounted by 20.
+ ///
+ Normal = 1,
+
+ ///
+ /// Discount every time the condition is met.
+ /// e.g. arrange ConditionAmount = 300 and DiscountAmount = 20.
+ /// If the price of a product is 300, the actual order price will be discounted by 60.
+ ///
+ PerMeet = 2,
+
+ ///
+ /// A type of coupon with custom usage rules.
+ ///
+ Custom = 4
+ }
+}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj
index 66970ceb..c0a4f854 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj
@@ -9,6 +9,7 @@
+
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs
index ace46a19..3a891443 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using JetBrains.Annotations;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
@@ -7,5 +9,51 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public class CouponTemplate : FullAuditedAggregateRoot, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
+
+ ///
+ /// If it is set to null, only cross-store admin users can manage this template.
+ /// It is not about the coupon usage scope, but the StoreId property of Scopes should be same as it if it not null.
+ ///
+ public virtual Guid? StoreId { get; protected set; }
+
+ public virtual CouponType CouponType { get; protected set; }
+
+ [CanBeNull]
+ public virtual string UniqueName { get; protected set; }
+
+ [NotNull]
+ public virtual string DisplayName { get; protected set; }
+
+ [CanBeNull]
+ public virtual string Description { get; protected set; }
+
+ ///
+ /// If both the UsableDuration and the UsableEndTime have values, the earlier time is preferred.
+ ///
+ public virtual TimeSpan? UsableDuration { get; protected set; }
+
+ public virtual DateTime? UsableBeginTime { get; protected set; }
+
+ ///
+ /// If both the UsableDuration and the UsableEndTime have values, the earlier time is preferred.
+ ///
+ public virtual DateTime? UsableEndTime { get; protected set; }
+
+ public virtual decimal ConditionAmount { get; protected set; }
+
+ public virtual decimal DiscountAmount { get; protected set; }
+
+ ///
+ /// If it is set to true, the coupon can be used when the total price of all the order lines in the order
+ /// with products in scope is greater than or equal to ConditionAmount.
+ ///
+ public virtual bool IsCrossProductAllowed { get; protected set; }
+
+ ///
+ /// The coupon can be used for any product of any store if this property is set to true.
+ ///
+ public virtual bool IsUnscoped { get; protected set; }
+
+ public virtual List Scopes { get; protected set; }
}
}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs
deleted file mode 100644
index 7e9270a6..00000000
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-using Volo.Abp.Domain.Entities.Auditing;
-
-namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
-{
- public class CouponTemplateProduct : FullAuditedEntity
- {
- }
-}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs
new file mode 100644
index 00000000..43762e39
--- /dev/null
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs
@@ -0,0 +1,21 @@
+using System;
+using EasyAbp.EShop.Stores.Stores;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
+{
+ public class CouponTemplateScope : FullAuditedEntity, IMultiStore
+ {
+ public virtual Guid StoreId { get; protected set; }
+
+ ///
+ /// If this property is set to null, the coupon can be used for all products in the store.
+ ///
+ public virtual Guid? ProductId { get; protected set; }
+
+ ///
+ /// If this property is set to null, the coupon can be used for all SKUs in the product.
+ ///
+ public virtual Guid? ProductSkuId { get; protected set; }
+ }
+}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs
index f3135161..8d89a085 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs
@@ -7,5 +7,19 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
public class Coupon : FullAuditedAggregateRoot, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
+
+ public virtual Guid CouponTemplateId { get; protected set; }
+
+ public virtual Guid UserId { get; protected set; }
+
+ public virtual Guid? OrderId { get; protected set; }
+
+ public virtual DateTime? UsableBeginTime { get; protected set; }
+
+ public virtual DateTime? UsableEndTime { get; protected set; }
+
+ public virtual DateTime? UsedTime { get; protected set; }
+
+ public virtual decimal? DiscountedAmount { get; protected set; }
}
}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs
index cfae6728..c0532d91 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs
@@ -1,11 +1,13 @@
-using Volo.Abp.Domain;
+using EasyAbp.EShop.Stores;
+using Volo.Abp.Domain;
using Volo.Abp.Modularity;
namespace EasyAbp.EShop.Plugins.Coupons
{
[DependsOn(
typeof(AbpDddDomainModule),
- typeof(EShopPluginsCouponsDomainSharedModule)
+ typeof(EShopPluginsCouponsDomainSharedModule),
+ typeof(EShopStoresDomainSharedModule)
)]
public class EShopPluginsCouponsDomainModule : AbpModule
{