@wtree/payload-ecommerce-coupon 3.78.2 → 3.78.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +33 -6
  2. package/dist/client/hooks.d.ts +1 -1
  3. package/dist/client/hooks.d.ts.map +1 -1
  4. package/dist/client/index.d.ts +8 -8
  5. package/dist/client/index.d.ts.map +1 -1
  6. package/dist/collections/createCouponsCollection.d.ts +2 -2
  7. package/dist/collections/createCouponsCollection.d.ts.map +1 -1
  8. package/dist/collections/createReferralCodesCollection.d.ts +2 -2
  9. package/dist/collections/createReferralCodesCollection.d.ts.map +1 -1
  10. package/dist/collections/createReferralProgramsCollection.d.ts +2 -2
  11. package/dist/collections/createReferralProgramsCollection.d.ts.map +1 -1
  12. package/dist/components/PartnerDashboard/CommissionBreakdown.d.ts +2 -2
  13. package/dist/components/PartnerDashboard/CommissionBreakdown.d.ts.map +1 -1
  14. package/dist/components/PartnerDashboard/EarningsSummary.d.ts +2 -2
  15. package/dist/components/PartnerDashboard/EarningsSummary.d.ts.map +1 -1
  16. package/dist/components/PartnerDashboard/ProgramOverview.d.ts +3 -3
  17. package/dist/components/PartnerDashboard/ProgramOverview.d.ts.map +1 -1
  18. package/dist/components/PartnerDashboard/RecentReferrals.d.ts +3 -3
  19. package/dist/components/PartnerDashboard/RecentReferrals.d.ts.map +1 -1
  20. package/dist/components/PartnerDashboard/ReferralCodes.d.ts +3 -3
  21. package/dist/components/PartnerDashboard/ReferralCodes.d.ts.map +1 -1
  22. package/dist/components/PartnerDashboard/ReferralPerformance.d.ts +2 -2
  23. package/dist/components/PartnerDashboard/ReferralPerformance.d.ts.map +1 -1
  24. package/dist/components/PartnerDashboard/index.d.ts +1 -1
  25. package/dist/components/PartnerDashboard/index.d.ts.map +1 -1
  26. package/dist/endpoints/applyCoupon.d.ts +2 -2
  27. package/dist/endpoints/applyCoupon.d.ts.map +1 -1
  28. package/dist/endpoints/partnerStats.d.ts +2 -2
  29. package/dist/endpoints/partnerStats.d.ts.map +1 -1
  30. package/dist/endpoints/validateCoupon.d.ts +2 -2
  31. package/dist/endpoints/validateCoupon.d.ts.map +1 -1
  32. package/dist/hooks/recalculateCart.d.ts +2 -2
  33. package/dist/hooks/recalculateCart.d.ts.map +1 -1
  34. package/dist/index.d.ts +17 -17
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +21 -10
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.mjs +21 -10
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/plugin.d.ts +2 -2
  41. package/dist/plugin.d.ts.map +1 -1
  42. package/dist/types.d.ts +4 -4
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/utilities/calculateValues.d.ts +2 -2
  45. package/dist/utilities/calculateValues.d.ts.map +1 -1
  46. package/dist/utilities/getCartTotalWithDiscounts.d.ts.map +1 -1
  47. package/dist/utilities/migrateReferralRulesV2.d.ts.map +1 -1
  48. package/dist/utilities/pricing.d.ts.map +1 -1
  49. package/dist/utilities/pushTypeScriptProperties.d.ts +1 -1
  50. package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -1
  51. package/dist/utilities/recordCouponUsageForOrder.d.ts +2 -2
  52. package/dist/utilities/recordCouponUsageForOrder.d.ts.map +1 -1
  53. package/dist/utilities/sanitizePluginConfig.d.ts +1 -1
  54. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
  55. package/dist/utilities/userRoles.d.ts +3 -3
  56. package/dist/utilities/userRoles.d.ts.map +1 -1
  57. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -453,11 +453,14 @@ const createReferralProgramsCollection = (pluginConfig) => {
453
453
  },
454
454
  hooks: { beforeChange: [({ data }) => {
455
455
  if (!data.commissionRules || !Array.isArray(data.commissionRules) || data.commissionRules.length === 0) throw new APIError("At least one commission rule is required", 400);
456
- const maxAmount = toNumber(data.maxAmount);
457
- if (maxAmount != null && maxAmount < 0) throw new APIError("Max Amount must be a non-negative number", 400);
456
+ const maxPartnerCommissionPerOrder = toNumber(data.maxPartnerCommissionPerOrder);
457
+ if (maxPartnerCommissionPerOrder != null && maxPartnerCommissionPerOrder < 0) throw new APIError("Maximum commission per order for partner must be a non-negative number", 400);
458
+ const maxCustomerDiscountPerOrder = toNumber(data.maxCustomerDiscountPerOrder);
459
+ if (maxCustomerDiscountPerOrder != null && maxCustomerDiscountPerOrder < 0) throw new APIError("Maximum discount for customer per order must be a non-negative number", 400);
458
460
  const minOrderAmount = toNumber(data.minOrderAmount);
459
461
  if (minOrderAmount != null && minOrderAmount < 0) throw new APIError("Minimum Order Amount must be a non-negative number", 400);
460
- data.maxAmount = maxAmount ?? null;
462
+ data.maxPartnerCommissionPerOrder = maxPartnerCommissionPerOrder != null ? toCents(maxPartnerCommissionPerOrder) : null;
463
+ data.maxCustomerDiscountPerOrder = maxCustomerDiscountPerOrder != null ? toCents(maxCustomerDiscountPerOrder) : null;
461
464
  data.minOrderAmount = minOrderAmount ?? null;
462
465
  data.commissionRules = data.commissionRules.map((rule, index) => {
463
466
  const r = rule;
@@ -540,10 +543,16 @@ const createReferralProgramsCollection = (pluginConfig) => {
540
543
  admin: { description: "Whether this referral program is currently active" }
541
544
  },
542
545
  {
543
- name: "maxAmount",
546
+ name: "maxPartnerCommissionPerOrder",
544
547
  type: "number",
545
548
  min: 0,
546
- admin: { description: "Maximum commission cap per item. Leave empty for no cap." }
549
+ admin: { description: "Maximum commission per order for partner. Leave empty for no cap. Enter value in currency units (will be converted to cents)." }
550
+ },
551
+ {
552
+ name: "maxCustomerDiscountPerOrder",
553
+ type: "number",
554
+ min: 0,
555
+ admin: { description: "Maximum customer discount per order. Leave empty for no cap. Enter value in currency units (will be converted to cents)." }
547
556
  },
548
557
  {
549
558
  name: "minOrderAmount",
@@ -758,11 +767,11 @@ function getRuleSplits(rule) {
758
767
  customerSplit: typeof rule.customerSplit === "number" ? rule.customerSplit : typeof rule.refereeSplit === "number" ? rule.refereeSplit : 100 - partnerRaw
759
768
  };
760
769
  }
761
- function calculateItemRewardByRule({ rule, itemTotal, quantity, maxAmount, allowedTotalCommissionTypes }) {
770
+ function calculateItemRewardByRule({ rule, itemTotal, quantity, allowedTotalCommissionTypes }) {
762
771
  const allowedTypes = allowedCommissionTypesSet(allowedTotalCommissionTypes);
763
772
  if (rule.totalCommission) {
764
773
  if (!allowedTypes.has(rule.totalCommission.type)) return null;
765
- const resolvedMaxAmount = typeof maxAmount === "number" && Number.isFinite(maxAmount) ? maxAmount : typeof rule.totalCommission.maxAmount === "number" && Number.isFinite(rule.totalCommission.maxAmount) ? rule.totalCommission.maxAmount : null;
774
+ const resolvedMaxAmount = typeof rule.totalCommission.maxAmount === "number" && Number.isFinite(rule.totalCommission.maxAmount) ? rule.totalCommission.maxAmount : null;
766
775
  if (rule.totalCommission.type === "fixed" && rule.totalCommission.value == null) {
767
776
  const partnerAmtPerUnit = typeof rule.partnerSplit === "number" ? rule.partnerSplit : null;
768
777
  const customerAmtPerUnit = typeof rule.customerSplit === "number" ? rule.customerSplit : null;
@@ -821,7 +830,7 @@ function getItemCategoryIds(item) {
821
830
  function getItemTagIds(item) {
822
831
  return Array.isArray(item?.product?.tags) ? normalizeIds(item.product.tags) : [];
823
832
  }
824
- function selectBestRuleForItem({ rules, item, itemTotal, quantity, cartTotal, minOrderAmount, maxAmount, allowedTotalCommissionTypes }) {
833
+ function selectBestRuleForItem({ rules, item, itemTotal, quantity, cartTotal, minOrderAmount, allowedTotalCommissionTypes }) {
825
834
  const allowedTypes = allowedCommissionTypesSet(allowedTotalCommissionTypes);
826
835
  const eligibleRules = rules.filter((rule) => {
827
836
  if (!(rule?.totalCommission?.type ? allowedTypes.has(rule.totalCommission.type) : true)) return false;
@@ -851,7 +860,6 @@ function selectBestRuleForItem({ rules, item, itemTotal, quantity, cartTotal, mi
851
860
  rule,
852
861
  itemTotal,
853
862
  quantity,
854
- maxAmount,
855
863
  allowedTotalCommissionTypes
856
864
  });
857
865
  if (!reward) continue;
@@ -916,13 +924,16 @@ function calculateCommissionAndDiscount({ cartItems, program, currencyCode = "AE
916
924
  quantity,
917
925
  cartTotal,
918
926
  minOrderAmount: typeof program?.minOrderAmount === "number" && Number.isFinite(program.minOrderAmount) ? program.minOrderAmount : null,
919
- maxAmount: typeof program?.maxAmount === "number" && Number.isFinite(program.maxAmount) ? program.maxAmount : null,
920
927
  allowedTotalCommissionTypes
921
928
  });
922
929
  if (!bestMatch) continue;
923
930
  totalPartnerCommission += bestMatch.reward.partner;
924
931
  totalCustomerDiscount += bestMatch.reward.customer;
925
932
  }
933
+ const maxPartnerCommissionPerOrder = typeof program?.maxPartnerCommissionPerOrder === "number" && Number.isFinite(program.maxPartnerCommissionPerOrder) ? program.maxPartnerCommissionPerOrder : null;
934
+ const maxCustomerDiscountPerOrder = typeof program?.maxCustomerDiscountPerOrder === "number" && Number.isFinite(program.maxCustomerDiscountPerOrder) ? program.maxCustomerDiscountPerOrder : null;
935
+ if (maxPartnerCommissionPerOrder != null) totalPartnerCommission = Math.min(totalPartnerCommission, maxPartnerCommissionPerOrder);
936
+ if (maxCustomerDiscountPerOrder != null) totalCustomerDiscount = Math.min(totalCustomerDiscount, maxCustomerDiscountPerOrder);
926
937
  return {
927
938
  partnerCommission: totalPartnerCommission,
928
939
  customerDiscount: totalCustomerDiscount