@wtree/payload-ecommerce-coupon 3.78.6 → 3.78.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"createReferralProgramsCollection.d.ts","sourceRoot":"","sources":["../../src/collections/createReferralProgramsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAA;AAsB5D,eAAO,MAAM,gCAAgC,GAC3C,cAAc,4BAA4B,KACzC,gBA0ZF,CAAA"}
1
+ {"version":3,"file":"createReferralProgramsCollection.d.ts","sourceRoot":"","sources":["../../src/collections/createReferralProgramsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAA;AA+B5D,eAAO,MAAM,gCAAgC,GAC3C,cAAc,4BAA4B,KACzC,gBAgaF,CAAA"}
package/dist/index.js CHANGED
@@ -423,10 +423,23 @@ const createReferralCodesCollection = (pluginConfig) => {
423
423
  };
424
424
  };
425
425
  //#endregion
426
+ //#region src/utilities/roundTo2.ts
427
+ /**
428
+ * Rounds a number to 2 decimal places (standard for monetary values).
429
+ */
430
+ function roundTo2(value) {
431
+ return Math.round(value * 100) / 100;
432
+ }
433
+ //#endregion
426
434
  //#region src/collections/createReferralProgramsCollection.ts
427
435
  function toNumber(value) {
428
436
  return typeof value === "number" && Number.isFinite(value) ? value : null;
429
437
  }
438
+ function normalizeLegacyX100Money(value) {
439
+ if (value == null) return null;
440
+ if (Number.isInteger(value) && Math.abs(value) >= 1e3) return roundTo2(value / 100);
441
+ return value;
442
+ }
430
443
  const createReferralProgramsCollection = (pluginConfig) => {
431
444
  const { collections, access, adminGroups, referralConfig, integration } = pluginConfig;
432
445
  const allowedTotalCommissionTypes = referralConfig.allowedTotalCommissionTypes;
@@ -451,11 +464,11 @@ const createReferralProgramsCollection = (pluginConfig) => {
451
464
  },
452
465
  hooks: { beforeChange: [({ data }) => {
453
466
  if (!data.commissionRules || !Array.isArray(data.commissionRules) || data.commissionRules.length === 0) throw new payload.APIError("At least one commission rule is required", 400);
454
- const maxPartnerCommissionPerOrder = toNumber(data.maxPartnerCommissionPerOrder);
467
+ const maxPartnerCommissionPerOrder = normalizeLegacyX100Money(toNumber(data.maxPartnerCommissionPerOrder));
455
468
  if (maxPartnerCommissionPerOrder != null && maxPartnerCommissionPerOrder < 0) throw new payload.APIError("Maximum commission per order for partner must be a non-negative number", 400);
456
- const maxCustomerDiscountPerOrder = toNumber(data.maxCustomerDiscountPerOrder);
469
+ const maxCustomerDiscountPerOrder = normalizeLegacyX100Money(toNumber(data.maxCustomerDiscountPerOrder));
457
470
  if (maxCustomerDiscountPerOrder != null && maxCustomerDiscountPerOrder < 0) throw new payload.APIError("Maximum discount for customer per order must be a non-negative number", 400);
458
- const minOrderAmount = toNumber(data.minOrderAmount);
471
+ const minOrderAmount = normalizeLegacyX100Money(toNumber(data.minOrderAmount));
459
472
  if (minOrderAmount != null && minOrderAmount < 0) throw new payload.APIError("Minimum Order Amount must be a non-negative number", 400);
460
473
  data.maxPartnerCommissionPerOrder = maxPartnerCommissionPerOrder != null ? maxPartnerCommissionPerOrder : null;
461
474
  data.maxCustomerDiscountPerOrder = maxCustomerDiscountPerOrder != null ? maxCustomerDiscountPerOrder : null;
@@ -489,8 +502,8 @@ const createReferralProgramsCollection = (pluginConfig) => {
489
502
  partnerSplit = partnerPctInput;
490
503
  customerSplit = customerPctComputed;
491
504
  } else {
492
- const partnerAmountInput = toNumber(r.partnerAmount);
493
- const customerAmountInput = toNumber(r.customerAmount);
505
+ const partnerAmountInput = normalizeLegacyX100Money(toNumber(r.partnerAmount));
506
+ const customerAmountInput = normalizeLegacyX100Money(toNumber(r.customerAmount));
494
507
  const legacyPartnerSplitInput = toNumber(r.partnerSplit);
495
508
  const legacyCustomerSplitInput = toNumber(r.customerSplit);
496
509
  const hasNewFixedInputs = partnerAmountInput != null || customerAmountInput != null;
@@ -548,19 +561,19 @@ const createReferralProgramsCollection = (pluginConfig) => {
548
561
  name: "maxPartnerCommissionPerOrder",
549
562
  type: "number",
550
563
  min: 0,
551
- admin: { description: "Maximum commission per order for partner. Leave empty for no cap." }
564
+ admin: { description: "Maximum commission per order for partner (normal currency value, ). Leave empty for no cap." }
552
565
  },
553
566
  {
554
567
  name: "maxCustomerDiscountPerOrder",
555
568
  type: "number",
556
569
  min: 0,
557
- admin: { description: "Maximum customer discount per order. Leave empty for no cap." }
570
+ admin: { description: "Maximum customer discount per order (normal currency value, ). Leave empty for no cap." }
558
571
  },
559
572
  {
560
573
  name: "minOrderAmount",
561
574
  type: "number",
562
575
  min: 0,
563
- admin: { description: "Minimum cart subtotal required for this program. Leave empty for no minimum." }
576
+ admin: { description: "Minimum cart subtotal required for this program (normal currency value, ). Leave empty for no minimum." }
564
577
  },
565
578
  {
566
579
  name: "commissionRules",
@@ -660,7 +673,7 @@ const createReferralProgramsCollection = (pluginConfig) => {
660
673
  min: 0,
661
674
  admin: {
662
675
  condition: (_, siblingData) => siblingData?.totalCommission?.type === "fixed",
663
- description: "Fixed partner commission amount per item."
676
+ description: "Fixed partner commission amount per item (normal currency value)."
664
677
  }
665
678
  },
666
679
  {
@@ -669,7 +682,7 @@ const createReferralProgramsCollection = (pluginConfig) => {
669
682
  min: 0,
670
683
  admin: {
671
684
  condition: (_, siblingData) => siblingData?.totalCommission?.type === "fixed",
672
- description: "Fixed customer discount amount per item."
685
+ description: "Fixed customer discount amount per item (normal currency value)."
673
686
  }
674
687
  },
675
688
  {
@@ -696,14 +709,6 @@ const createReferralProgramsCollection = (pluginConfig) => {
696
709
  timestamps: true
697
710
  };
698
711
  };
699
- //#endregion
700
- //#region src/utilities/roundTo2.ts
701
- /**
702
- * Rounds a number to 2 decimal places (standard for monetary values).
703
- */
704
- function roundTo2(value) {
705
- return Math.round(value * 100) / 100;
706
- }
707
712
  function normalizeCurrencyCode(currencyCode) {
708
713
  if (!currencyCode) return "AED";
709
714
  return currencyCode.toUpperCase();
@@ -874,8 +879,7 @@ function selectBestRuleForItem({ rules, item, itemTotal, quantity, cartTotal, mi
874
879
  const eligibleRules = rules.filter((rule) => {
875
880
  if (!(rule?.totalCommission?.type ? allowedTypes.has(rule.totalCommission.type) : true)) return false;
876
881
  const resolvedMinOrderAmount = typeof minOrderAmount === "number" && Number.isFinite(minOrderAmount) ? minOrderAmount : typeof rule?.minOrderAmount === "number" && Number.isFinite(rule.minOrderAmount) ? rule.minOrderAmount : null;
877
- const shouldApplyMinOrder = rule?.totalCommission?.type !== "fixed";
878
- if (resolvedMinOrderAmount != null && shouldApplyMinOrder) return cartTotal >= resolvedMinOrderAmount;
882
+ if (resolvedMinOrderAmount != null) return cartTotal >= resolvedMinOrderAmount;
879
883
  return true;
880
884
  });
881
885
  const productId = relationId$5(item.product);
@@ -925,13 +929,10 @@ function selectBestRuleForItem({ rules, item, itemTotal, quantity, cartTotal, mi
925
929
  return best;
926
930
  }
927
931
  function getProgramMinimumOrderAmount({ program, allowedTotalCommissionTypes }) {
932
+ if (typeof program?.minOrderAmount === "number" && Number.isFinite(program.minOrderAmount)) return program.minOrderAmount;
928
933
  const rules = Array.isArray(program?.commissionRules) ? program.commissionRules : [];
929
934
  if (!rules.length) return null;
930
935
  const allowedTypes = allowedCommissionTypesSet(allowedTotalCommissionTypes);
931
- if (rules.some((rule) => {
932
- if (rule?.totalCommission?.type) return rule.totalCommission.type === "percentage" && allowedTypes.has(rule.totalCommission.type);
933
- return true;
934
- }) && typeof program?.minOrderAmount === "number" && Number.isFinite(program.minOrderAmount)) return program.minOrderAmount;
935
936
  const minValues = rules.filter((rule) => {
936
937
  if (rule?.totalCommission?.type) return allowedTypes.has(rule.totalCommission.type);
937
938
  return true;