@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
|
-
|
|
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;
|