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