Browse Source

Complete Coupon template scope management pages

Multi-store authorization check for Coupons module
pull/103/head
gdlcf88 5 years ago
parent
commit
fe7b8a080b
  1. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
  2. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
  3. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
  4. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
  5. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
  6. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
  7. 4
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
  8. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/cs.json
  9. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/en.json
  10. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pl.json
  11. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pt-BR.json
  12. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/sl.json
  13. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/tr.json
  14. 4
      modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/vi.json
  15. 2
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Coupons/Dtos/GetCouponListInput.cs
  16. 2
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissionDefinitionProvider.cs
  17. 2
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissions.cs
  18. 1
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp.EShop.Plugins.Coupons.Application.csproj
  19. 34
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateAppService.cs
  20. 67
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/Coupons/CouponAppService.cs
  21. 4
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsApplicationModule.cs
  22. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/cs.json
  23. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/en.json
  24. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pl-PL.json
  25. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pt-BR.json
  26. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/sl.json
  27. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/tr.json
  28. 12
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/vi.json
  29. 8
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hans.json
  30. 8
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hant.json
  31. 5
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/CouponsWebAutoMapperProfile.cs
  32. 13
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/EditModal.cshtml.cs
  33. 7
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/index.js
  34. 19
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml
  35. 44
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml.cs
  36. 20
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml
  37. 59
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml.cs
  38. 62
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml
  39. 17
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml.cs
  40. 21
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/ViewModels/CreateEditCouponTemplateScopeViewModel.cs
  41. 0
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.css
  42. 85
      plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.js

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

@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

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

@ -57,8 +57,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

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

@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

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

@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

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

@ -57,8 +57,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

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

@ -57,8 +57,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

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

@ -56,8 +56,8 @@
"EditProduct": "Edit",
"ProductDeletionConfirmationMessage": "Are you sure to delete the product {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Menu:Category": "Category",
"Category": "Category",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/cs.json

@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/en.json

@ -11,8 +11,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pl.json

@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/pt-BR.json

@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/sl.json

@ -11,8 +11,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/tr.json

@ -11,8 +11,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

4
modules/EasyAbp.EShop.Stores/src/EasyAbp.EShop.Stores.Domain.Shared/EasyAbp/EShop/Stores/Localization/Stores/vi.json

@ -10,8 +10,8 @@
"EditStore": "Edit",
"StoreDeletionConfirmationMessage": "Are you sure to delete the store {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"StoreOwner": "Store owner",
"Menu:StoreOwner": "Store owner",

2
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Coupons/Dtos/GetCouponListInput.cs

@ -8,6 +8,8 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons.Dtos
{
public bool AvailableOnly { get; set; }
public Guid? StoreId { get; set; }
public Guid? UserId { get; set; }
}
}

2
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissionDefinitionProvider.cs

@ -11,6 +11,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
var myGroup = context.AddGroup(CouponsPermissions.GroupName, L("Permission:Coupons"));
var couponTemplatePermission = myGroup.AddPermission(CouponsPermissions.CouponTemplate.Default, L("Permission:CouponTemplate"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.CrossStore, L("Permission:CrossStore"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.Create, L("Permission:Create"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.Update, L("Permission:Update"));
couponTemplatePermission.AddChild(CouponsPermissions.CouponTemplate.Delete, L("Permission:Delete"));
@ -18,6 +19,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
var couponPermission = myGroup.AddPermission(CouponsPermissions.Coupon.Default, L("Permission:Coupon"));
couponPermission.AddChild(CouponsPermissions.Coupon.Use, L("Permission:Use"));
couponPermission.AddChild(CouponsPermissions.Coupon.Manage, L("Permission:Manage"));
couponPermission.AddChild(CouponsPermissions.Coupon.CrossStore, L("Permission:CrossStore"));
couponPermission.AddChild(CouponsPermissions.Coupon.Create, L("Permission:Create"));
couponPermission.AddChild(CouponsPermissions.Coupon.Update, L("Permission:Update"));
couponPermission.AddChild(CouponsPermissions.Coupon.Delete, L("Permission:Delete"));

2
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/Permissions/CouponsPermissions.cs

@ -14,6 +14,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
public class CouponTemplate
{
public const string Default = GroupName + ".CouponTemplate";
public const string CrossStore = Default + ".CrossStore";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";
@ -24,6 +25,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.Permissions
public const string Default = GroupName + ".Coupon";
public const string Use = Default + ".Use";
public const string Manage = Default + ".Manage";
public const string CrossStore = Default + ".CrossStore";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string Delete = Default + ".Delete";

1
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp.EShop.Plugins.Coupons.Application.csproj

@ -10,6 +10,7 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.AutoMapper" Version="3.1.2" />
<PackageReference Include="Volo.Abp.Ddd.Application" Version="3.1.2" />
<ProjectReference Include="..\..\..\..\modules\EasyAbp.EShop.Stores\src\EasyAbp.EShop.Stores.Application.Shared\EasyAbp.EShop.Stores.Application.Shared.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Plugins.Coupons.Application.Contracts\EasyAbp.EShop.Plugins.Coupons.Application.Contracts.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Plugins.Coupons.Domain\EasyAbp.EShop.Plugins.Coupons.Domain.csproj" />
</ItemGroup>

34
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateAppService.cs

@ -5,6 +5,8 @@ using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Coupons.Permissions;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos;
using EasyAbp.EShop.Stores.Authorization;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
@ -33,8 +35,14 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public override async Task<CouponTemplateDto> CreateAsync(CreateUpdateCouponTemplateDto input)
{
await CheckCreatePolicyAsync();
await AuthorizationService.CheckMultiStorePolicyAsync(input.StoreId, CreatePolicyName,
CouponsPermissions.CouponTemplate.CrossStore);
if (input.Scopes.Any(x => x.StoreId != input.StoreId))
{
await AuthorizationService.CheckAsync(CouponsPermissions.CouponTemplate.CrossStore);
}
var entity = await MapToEntityAsync(input);
TryToSetTenantId(entity);
@ -52,10 +60,16 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public override async Task<CouponTemplateDto> UpdateAsync(Guid id, CreateUpdateCouponTemplateDto input)
{
await CheckUpdatePolicyAsync();
var entity = await GetEntityByIdAsync(id);
await AuthorizationService.CheckMultiStorePolicyAsync(entity.StoreId, UpdatePolicyName,
CouponsPermissions.CouponTemplate.CrossStore);
if (input.StoreId != entity.StoreId || input.Scopes.Any(x => x.StoreId != input.StoreId))
{
await AuthorizationService.CheckAsync(CouponsPermissions.CouponTemplate.CrossStore);
}
await MapToEntityAsync(input, entity);
foreach (var inputScoreDto in input.Scopes.Where(dto => !ExistScope(entity.Scopes, dto)))
@ -70,7 +84,17 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
return await MapToGetOutputDtoAsync(entity);
}
public override async Task DeleteAsync(Guid id)
{
var couponTemplate = await GetEntityByIdAsync(id);
await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId, DeletePolicyName,
CouponsPermissions.CouponTemplate.CrossStore);
await _repository.DeleteAsync(couponTemplate);
}
protected virtual bool ExistScope(IEnumerable<CreateUpdateCouponTemplateScopeDto> scopes, ICouponTemplateScope need)
{
return scopes.Any(x => x.StoreId == need.StoreId &&

67
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/Coupons/CouponAppService.cs

@ -4,9 +4,11 @@ using System.Threading.Tasks;
using EasyAbp.EShop.Plugins.Coupons.Permissions;
using EasyAbp.EShop.Plugins.Coupons.Coupons.Dtos;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
using EasyAbp.EShop.Stores.Authorization;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization;
using Volo.Abp.Users;
namespace EasyAbp.EShop.Plugins.Coupons.Coupons
@ -41,21 +43,25 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
{
await CheckGetPolicyAsync();
var entity = await GetEntityByIdAsync(id);
var coupon = await GetEntityByIdAsync(id);
if (entity.UserId != CurrentUser.GetId())
if (coupon.UserId != CurrentUser.GetId())
{
await AuthorizationService.CheckAsync(CouponsPermissions.Coupon.Manage);
var couponTemplate = await _couponTemplateRepository.GetAsync(coupon.CouponTemplateId);
await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
}
return await MapToGetOutputDtoAsync(entity);
return await MapToGetOutputDtoAsync(coupon);
}
public override async Task<PagedResultDto<CouponDto>> GetListAsync(GetCouponListInput input)
{
if (input.UserId != CurrentUser.GetId())
{
await AuthorizationService.CheckAsync(CouponsPermissions.Coupon.Manage);
await AuthorizationService.CheckMultiStorePolicyAsync(input.StoreId,
CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
}
return await base.GetListAsync(input);
@ -67,15 +73,51 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
var couponTemplate = await _couponTemplateRepository.GetAsync(input.CouponTemplateId);
var entity = await MapToEntityAsync(input);
await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
var coupon = await MapToEntityAsync(input);
TryToSetTenantId(entity);
TryToSetTenantId(coupon);
entity.SetExpirationTime(couponTemplate.GetCalculatedExpirationTime(Clock));
coupon.SetExpirationTime(couponTemplate.GetCalculatedExpirationTime(Clock));
await Repository.InsertAsync(entity, autoSave: true);
await Repository.InsertAsync(coupon, autoSave: true);
return await MapToGetOutputDtoAsync(entity);
return await MapToGetOutputDtoAsync(coupon);
}
public override async Task<CouponDto> UpdateAsync(Guid id, UpdateCouponDto input)
{
await CheckUpdatePolicyAsync();
var coupon = await GetEntityByIdAsync(id);
var couponTemplate = await _couponTemplateRepository.GetAsync(coupon.CouponTemplateId);
await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
await MapToEntityAsync(input, coupon);
await Repository.UpdateAsync(coupon, autoSave: true);
return await MapToGetOutputDtoAsync(coupon);
}
public override async Task DeleteAsync(Guid id)
{
await CheckDeletePolicyAsync();
var coupon = await GetEntityByIdAsync(id);
var couponTemplate = await _couponTemplateRepository.GetAsync(coupon.CouponTemplateId);
await AuthorizationService.CheckMultiStorePolicyAsync(couponTemplate.StoreId,
CouponsPermissions.Coupon.Manage, CouponsPermissions.Coupon.CrossStore);
await _repository.DeleteAsync(coupon, true);
}
[Authorize(CouponsPermissions.Coupon.Use)]
@ -83,6 +125,11 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons
{
var coupon = await GetEntityByIdAsync(id);
if (coupon.UserId != CurrentUser.GetId())
{
throw new AbpAuthorizationException();
}
if (coupon.OrderId.HasValue)
{
throw new CouponHasBeenOccupiedException();

4
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsApplicationModule.cs

@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using EasyAbp.EShop.Stores;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.Application;
@ -8,6 +9,7 @@ namespace EasyAbp.EShop.Plugins.Coupons
[DependsOn(
typeof(EShopPluginsCouponsDomainModule),
typeof(EShopPluginsCouponsApplicationContractsModule),
typeof(EShopStoresApplicationSharedModule),
typeof(AbpDddApplicationModule),
typeof(AbpAutoMapperModule)
)]

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/cs.json

@ -24,9 +24,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/en.json

@ -24,9 +24,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pl-PL.json

@ -21,9 +21,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/pt-BR.json

@ -21,9 +21,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/sl.json

@ -23,9 +23,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/tr.json

@ -24,9 +24,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

12
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/vi.json

@ -21,9 +21,17 @@
"CreateCouponTemplate": "New",
"EditCouponTemplate": "Edit",
"CouponTemplateDeletionConfirmationMessage": "Are you sure to delete the coupon template {0}?",
"CouponTemplateScope": "Coupon template scope",
"CouponTemplateScopeStoreId": "Store ID",
"CouponTemplateScopeProductGroupName": "Product group name",
"CouponTemplateScopeProductId": "Product ID",
"CouponTemplateScopeProductSkuId": "Product SKU ID",
"CreateCouponTemplateScope": "New",
"EditCouponTemplateScope": "Edit",
"CouponTemplateScopeDeletionConfirmationMessage": "Are you sure to delete the coupon template scope {0}?",
"SuccessfullyDeleted": "Successfully deleted",
"CouponType.Normal": "X discount",
"CouponType.PerMeet": "X discount for every Y",
"CouponType.Normal": "Normal (X discount)",
"CouponType.PerMeet": "PerMeet (X discount for every Y)",
"CouponType.Custom": "Custom",
"Permission:Coupon": "Coupon",
"Menu:Coupon": "Coupon",

8
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hans.json

@ -23,6 +23,14 @@
"CreateCouponTemplate": "新建",
"EditCouponTemplate": "编辑",
"CouponTemplateDeletionConfirmationMessage": "确认删除优惠券模板 {0}?",
"CouponTemplateScope": "优惠券使用范围",
"CouponTemplateScopeStoreId": "店铺 ID",
"CouponTemplateScopeProductGroupName": "商品组",
"CouponTemplateScopeProductId": "商品 ID",
"CouponTemplateScopeProductSkuId": "商品 SKU ID",
"CreateCouponTemplateScope": "新建",
"EditCouponTemplateScope": "编辑",
"CouponTemplateScopeDeletionConfirmationMessage": "确认删除优惠券模板使用范围 {0}?",
"SuccessfullyDeleted": "删除成功",
"CouponType.Normal": "代金券(满 X 减 Y)",
"CouponType.PerMeet": "满减券(每满 X 减 Y)",

8
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/Localization/zh-Hant.json

@ -23,6 +23,14 @@
"CreateCouponTemplate": "新建",
"EditCouponTemplate": "編輯",
"CouponTemplateDeletionConfirmationMessage": "確認刪除優惠券模板 {0}?",
"CouponTemplateScope": "優惠券使用範圍",
"CouponTemplateScopeStoreId": "店鋪 ID",
"CouponTemplateScopeProductGroupName": "商品組",
"CouponTemplateScopeProductId": "商品 ID",
"CouponTemplateScopeProductSkuId": "商品 SKU ID",
"CreateCouponTemplateScope": "新建",
"EditCouponTemplateScope": "編輯",
"CouponTemplateScopeDeletionConfirmationMessage": "確認刪除優惠券模板使用範圍 {0}?",
"SuccessfullyDeleted": "刪除成功",
"CouponType.Normal": "代金券(滿 X 減 Y)",
"CouponType.PerMeet": "滿減券(每滿 X 減 Y)",

5
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/CouponsWebAutoMapperProfile.cs

@ -3,6 +3,7 @@ using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTempla
using EasyAbp.EShop.Plugins.Coupons.Coupons.Dtos;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.Coupons.Coupon.ViewModels;
using AutoMapper;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels;
using Volo.Abp.AutoMapper;
namespace EasyAbp.EShop.Plugins.Coupons.Web
@ -14,9 +15,13 @@ namespace EasyAbp.EShop.Plugins.Coupons.Web
/* You can configure your AutoMapper mapping configuration here.
* Alternatively, you can split your mapping configurations
* into multiple profile classes for a better organization. */
CreateMap<CouponTemplateDto, CreateUpdateCouponTemplateDto>(MemberList.Destination);
CreateMap<CouponTemplateDto, CreateEditCouponTemplateViewModel>();
CreateMap<CouponTemplateScopeDto, CreateEditCouponTemplateScopeViewModel>();
CreateMap<CreateEditCouponTemplateViewModel, CreateUpdateCouponTemplateDto>()
.Ignore(x => x.Scopes);
CreateMap<CreateEditCouponTemplateScopeViewModel, CreateUpdateCouponTemplateScopeDto>();
CreateMap<CouponTemplateScopeDto, CreateUpdateCouponTemplateScopeDto>();
CreateMap<CouponDto, EditCouponViewModel>();
CreateMap<CreateCouponViewModel, CreateCouponDto>();
CreateMap<EditCouponViewModel, UpdateCouponDto>();

13
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/EditModal.cshtml.cs

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
@ -31,8 +32,16 @@ namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTe
public virtual async Task<IActionResult> OnPostAsync()
{
var dto = ObjectMapper.Map<CreateEditCouponTemplateViewModel, CreateUpdateCouponTemplateDto>(ViewModel);
await _service.UpdateAsync(Id, dto);
var dto = await _service.GetAsync(Id);
var updateDto =
ObjectMapper.Map<CreateEditCouponTemplateViewModel, CreateUpdateCouponTemplateDto>(ViewModel);
updateDto.Scopes =
ObjectMapper.Map<List<CouponTemplateScopeDto>, List<CreateUpdateCouponTemplateScopeDto>>(dto.Scopes);
await _service.UpdateAsync(Id, updateDto);
return NoContent();
}
}

7
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate/index.js

@ -20,6 +20,13 @@ $(function () {
rowAction: {
items:
[
{
text: l('CouponTemplateScope'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
action: function (data) {
document.location.href = document.location.origin + '/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/?CouponTemplateId=' + data.record.id;
}
},
{
text: l('Edit'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),

19
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml

@ -0,0 +1,19 @@
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal;
@using EasyAbp.EShop.Plugins.Coupons.Localization
@inject IHtmlLocalizer<CouponsResource> L
@model EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.CreateModalModel
@{
Layout = null;
}
<abp-dynamic-form abp-model="ViewModel" data-ajaxForm="true" asp-page="CreateModal">
<abp-modal>
<abp-modal-header title="@L["CreateCouponTemplate"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="CouponTemplateId" />
<abp-form-content/>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>

44
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal.cshtml.cs

@ -0,0 +1,44 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplate.ViewModels;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels;
namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
{
public class CreateModalModel : CouponsPageModel
{
[HiddenInput]
[BindProperty(SupportsGet = true)]
public Guid CouponTemplateId { get; set; }
[BindProperty]
public CreateEditCouponTemplateScopeViewModel ViewModel { get; set; }
private readonly ICouponTemplateAppService _service;
public CreateModalModel(ICouponTemplateAppService service)
{
_service = service;
}
public virtual async Task<IActionResult> OnPostAsync()
{
var dto = await _service.GetAsync(CouponTemplateId);
var updateDto =
ObjectMapper.Map<CouponTemplateDto, CreateUpdateCouponTemplateDto>(dto);
var createScopeDto =
ObjectMapper.Map<CreateEditCouponTemplateScopeViewModel, CreateUpdateCouponTemplateScopeDto>(ViewModel);
updateDto.Scopes.Add(createScopeDto);
await _service.UpdateAsync(CouponTemplateId, updateDto);
return NoContent();
}
}
}

20
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml

@ -0,0 +1,20 @@
@page
@using EasyAbp.EShop.Plugins.Coupons.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal;
@inject IHtmlLocalizer<CouponsResource> L
@model EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.EditModalModel
@{
Layout = null;
}
<abp-dynamic-form abp-model="ViewModel" data-ajaxForm="true" asp-page="EditModal">
<abp-modal>
<abp-modal-header title="@L["EditCouponTemplateScope"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="CouponTemplateId" />
<abp-input asp-for="CouponTemplateScopeId" />
<abp-form-content />
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>

59
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal.cshtml.cs

@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplate.ViewModels;
using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels;
namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
{
public class EditModalModel : CouponsPageModel
{
[HiddenInput]
[BindProperty(SupportsGet = true)]
public Guid CouponTemplateId { get; set; }
[HiddenInput]
[BindProperty(SupportsGet = true)]
public Guid CouponTemplateScopeId { get; set; }
[BindProperty]
public CreateEditCouponTemplateScopeViewModel ViewModel { get; set; }
private readonly ICouponTemplateAppService _service;
public EditModalModel(ICouponTemplateAppService service)
{
_service = service;
}
public virtual async Task OnGetAsync()
{
var dto = await _service.GetAsync(CouponTemplateId);
ViewModel =
ObjectMapper.Map<CouponTemplateScopeDto, CreateEditCouponTemplateScopeViewModel>(
dto.Scopes.First(x => x.Id == CouponTemplateScopeId));
}
public virtual async Task<IActionResult> OnPostAsync()
{
var dto = await _service.GetAsync(CouponTemplateId);
dto.Scopes.RemoveAll(x => x.Id == CouponTemplateScopeId);
var updateDto =
ObjectMapper.Map<CouponTemplateDto, CreateUpdateCouponTemplateDto>(dto);
updateDto.Scopes.Add(ObjectMapper
.Map<CreateEditCouponTemplateScopeViewModel, CreateUpdateCouponTemplateScopeDto>(ViewModel));
await _service.UpdateAsync(CouponTemplateId, updateDto);
return NoContent();
}
}
}

62
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml

@ -0,0 +1,62 @@
@page
@using EasyAbp.EShop.Plugins.Coupons.Permissions
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@using EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
@using EasyAbp.EShop.Plugins.Coupons.Localization
@using EasyAbp.EShop.Plugins.Coupons.Web.Menus
@model IndexModel
@inject IPageLayout PageLayout
@inject IHtmlLocalizer<CouponsResource> L
@inject IAuthorizationService Authorization
@{
PageLayout.Content.Title = L["CouponTemplateScope"].Value;
PageLayout.Content.BreadCrumb.Add(L["Menu:CouponTemplate"].Value);
PageLayout.Content.MenuItemName = CouponsMenus.CouponTemplate;
}
@section scripts
{
<abp-script src="/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.js" />
}
@section styles
{
<abp-style src="/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.css"/>
}
<script>
let couponTemplateId = '@Model.CouponTemplateId';
</script>
<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_6">
<abp-card-title>@L["CouponTemplateScope"]</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-right">
@if (await Authorization.IsGrantedAsync(CouponsPermissions.CouponTemplate.Update))
{
<abp-button id="NewCouponTemplateScopeButton"
text="@L["CreateCouponTemplateScope"].Value"
icon="plus"
button-type="Primary" />
}
</abp-column>
</abp-row>
</abp-card-header>
<abp-card-body>
<abp-table striped-rows="true" id="CouponTemplateScopeTable" class="nowrap">
<thead>
<tr>
<th>@L["Actions"]</th>
<th>@L["CouponTemplateScopeStoreId"]</th>
<th>@L["CouponTemplateScopeProductGroupName"]</th>
<th>@L["CouponTemplateScopeProductId"]</th>
<th>@L["CouponTemplateScopeProductSkuId"]</th>
</tr>
</thead>
</abp-table>
</abp-card-body>
</abp-card>

17
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/Index.cshtml.cs

@ -0,0 +1,17 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope
{
public class IndexModel : CouponsPageModel
{
[BindProperty(SupportsGet = true)]
public Guid CouponTemplateId { get; set; }
public virtual async Task OnGetAsync()
{
await Task.CompletedTask;
}
}
}

21
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/ViewModels/CreateEditCouponTemplateScopeViewModel.cs

@ -0,0 +1,21 @@
using System;
using System.ComponentModel.DataAnnotations;
using EasyAbp.EShop.Plugins.Coupons.CouponTemplates;
namespace EasyAbp.EShop.Plugins.Coupons.Web.Pages.EShop.Plugins.Coupons.CouponTemplates.CouponTemplateScope.ViewModels
{
public class CreateEditCouponTemplateScopeViewModel
{
[Display(Name = "CouponTemplateScopeStoreId")]
public Guid StoreId { get; set; }
[Display(Name = "CouponTemplateScopeProductGroupName")]
public string ProductGroupName { get; set; }
[Display(Name = "CouponTemplateScopeProductId")]
public Guid? ProductId { get; set; }
[Display(Name = "CouponTemplateScopeProductSkuId")]
public Guid? ProductSkuId { get; set; }
}
}

0
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.css

85
plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Web/Pages/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/index.js

@ -0,0 +1,85 @@
$(function () {
var l = abp.localization.getResource('EasyAbpEShopPluginsCoupons');
var service = easyAbp.eShop.plugins.coupons.couponTemplates.couponTemplate;
var createModal = new abp.ModalManager(abp.appPath + 'EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/CreateModal');
var editModal = new abp.ModalManager(abp.appPath + 'EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope/EditModal');
var dataTable = $('#CouponTemplateScopeTable').DataTable(abp.libs.datatables.normalizeConfiguration({
processing: true,
serverSide: true,
paging: true,
searching: false,
autoWidth: false,
scrollCollapse: true,
order: [[0, "asc"]],
ajax: function (requestData, callback, settings) {
if (callback) {
service.get(couponTemplateId).then(function (result) {
callback({
recordsTotal: result.scopes.length,
recordsFiltered: result.scopes.length,
data: result.scopes
});
});
}
},
columnDefs: [
{
rowAction: {
items:
[
{
text: l('Edit'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
action: function (data) {
editModal.open({ couponTemplateId: couponTemplateId, couponTemplateScopeId: data.record.id });
}
},
{
text: l('Delete'),
visible: abp.auth.isGranted('EasyAbp.EShop.Plugins.Coupons.CouponTemplate.Update'),
confirmMessage: function (data) {
return l('CouponTemplateScopeDeletionConfirmationMessage', data.record.id);
},
action: function (data) {
service.get(couponTemplateId).then(function (result) {
var updateDto = result;
for (var i in updateDto.scopes) {
if (updateDto.scopes[i].id === data.record.id) {
updateDto.scopes.splice(i, 1);
service.update(couponTemplateId, updateDto)
.then(function () {
abp.notify.info(l('SuccessfullyDeleted'));
dataTable.ajax.reload();
});
break;
}
}
});
}
}
]
}
},
{ data: "storeId" },
{ data: "productGroupName" },
{ data: "productId" },
{ data: "productSkuId" },
]
}));
createModal.onResult(function () {
dataTable.ajax.reload();
});
editModal.onResult(function () {
dataTable.ajax.reload();
});
$('#NewCouponTemplateScopeButton').click(function (e) {
e.preventDefault();
createModal.open({ couponTemplateId: couponTemplateId });
});
});
Loading…
Cancel
Save