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