@sellout/models 0.0.352 → 0.0.353
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/interfaces/ITask.d.ts +1 -2
- package/.dist/interfaces/ITask.js +0 -1
- package/.dist/interfaces/ITask.js.map +1 -1
- package/.dist/sellout-proto.js +16 -1937
- package/.dist/utils/EventUtil.d.ts +4 -4
- package/.dist/utils/EventUtil.js +17 -64
- package/.dist/utils/EventUtil.js.map +1 -1
- package/.dist/utils/PaymentUtil.d.ts +0 -9
- package/.dist/utils/PaymentUtil.js +0 -70
- package/.dist/utils/PaymentUtil.js.map +1 -1
- package/package.json +3 -3
- package/src/interfaces/ITask.ts +1 -2
- package/src/proto/event.proto +2 -23
- package/src/proto/order.proto +1 -11
- package/src/proto/task.proto +0 -8
- package/src/utils/EventUtil.ts +57 -107
- package/src/utils/PaymentUtil.ts +0 -101
- package/src/graphql/queries/isDeletebleOrganization.ts +0 -9
package/src/utils/EventUtil.ts
CHANGED
|
@@ -142,7 +142,7 @@ export default {
|
|
|
142
142
|
|
|
143
143
|
// return doorsAt - 600;
|
|
144
144
|
|
|
145
|
-
return startsAt - 28800
|
|
145
|
+
return startsAt - 28800
|
|
146
146
|
},
|
|
147
147
|
shouldSendOrderReceipt(event): boolean {
|
|
148
148
|
const now = Time.now();
|
|
@@ -235,10 +235,12 @@ export default {
|
|
|
235
235
|
},
|
|
236
236
|
|
|
237
237
|
/****************************************************************************************
|
|
238
|
-
|
|
239
|
-
|
|
238
|
+
* Tickets Hold
|
|
239
|
+
****************************************************************************************/
|
|
240
240
|
ticketHold(event, ticketHoldId): any {
|
|
241
|
-
return event?.holds.find(
|
|
241
|
+
return event?.holds.find(
|
|
242
|
+
(ticketHold) => ticketHold._id === ticketHoldId
|
|
243
|
+
);
|
|
242
244
|
},
|
|
243
245
|
|
|
244
246
|
/****************************************************************************************
|
|
@@ -335,7 +337,7 @@ export default {
|
|
|
335
337
|
isUpgradeForSpecificTickets(event: IEvent, upgrade: IEventUpgrade): boolean {
|
|
336
338
|
return Boolean(
|
|
337
339
|
event?.ticketTypes?.map((t) => t._id).sort() ===
|
|
338
|
-
|
|
340
|
+
upgrade?.ticketTypeIds?.sort()
|
|
339
341
|
);
|
|
340
342
|
},
|
|
341
343
|
/****************************************************************************************
|
|
@@ -559,8 +561,8 @@ export default {
|
|
|
559
561
|
},
|
|
560
562
|
|
|
561
563
|
/****************************************************************************************
|
|
562
|
-
|
|
563
|
-
|
|
564
|
+
* Ticket Hold validate
|
|
565
|
+
****************************************************************************************/
|
|
564
566
|
validateTicketHold(ticketHold: ITicketHold): any {
|
|
565
567
|
let ticketHoldSchema: any;
|
|
566
568
|
let used = ticketHold?.ticketRemaining as number;
|
|
@@ -571,12 +573,9 @@ export default {
|
|
|
571
573
|
name: Joi.string()
|
|
572
574
|
.required()
|
|
573
575
|
.messages({ "string.empty": '"Block name" is a required field' }),
|
|
574
|
-
ticketType: Joi.string()
|
|
575
|
-
.required()
|
|
576
|
+
ticketType: Joi.string().required()
|
|
576
577
|
.messages({ "string.empty": '"Ticket Type" is a required field' }),
|
|
577
|
-
qty: Joi.number()
|
|
578
|
-
.required()
|
|
579
|
-
.min(1)
|
|
578
|
+
qty: Joi.number().required().min(1)
|
|
580
579
|
.custom((value, helpers) => {
|
|
581
580
|
if (value > 0 && value > used) {
|
|
582
581
|
return helpers.error("totalqty.invalid");
|
|
@@ -644,75 +643,27 @@ export default {
|
|
|
644
643
|
.messages({
|
|
645
644
|
"array.min": "Ticket must have selected atleast one day.",
|
|
646
645
|
}),
|
|
647
|
-
tiers: Joi.array()
|
|
648
|
-
.
|
|
649
|
-
|
|
650
|
-
.
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
.required(),
|
|
669
|
-
startsAt: Joi.date().allow(null),
|
|
670
|
-
endsAt: Joi.date().allow(null),
|
|
671
|
-
})
|
|
672
|
-
.unknown(true)
|
|
673
|
-
)
|
|
674
|
-
.custom((tiers, helpers) => {
|
|
675
|
-
for (let i = 0; i < tiers.length; i++) {
|
|
676
|
-
const tier = tiers[i];
|
|
677
|
-
if (tier.startsAt && tier.endsAt) {
|
|
678
|
-
const start = new Date(tier.startsAt);
|
|
679
|
-
const end = new Date(tier.endsAt);
|
|
680
|
-
if (isNaN(start.getTime()) || isNaN(end.getTime())) {
|
|
681
|
-
return helpers.error("tiers.invalidDate", { index: i + 1 });
|
|
682
|
-
}
|
|
683
|
-
if (end.getTime() <= start.getTime()) {
|
|
684
|
-
const tierLabel =
|
|
685
|
-
tier.name && tier.name.trim() !== ""
|
|
686
|
-
? ` "${tier.name}"`
|
|
687
|
-
: ` #${i + 1}`;
|
|
688
|
-
|
|
689
|
-
return helpers.error("tiers.endsAtBeforeStartsAt", {
|
|
690
|
-
tierLabel,
|
|
691
|
-
});
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
for (let i = 1; i < tiers.length; i++) {
|
|
696
|
-
const prevTier = tiers[i - 1];
|
|
697
|
-
const currentTier = tiers[i];
|
|
698
|
-
const prevEndsAt = new Date(prevTier.endsAt).getTime();
|
|
699
|
-
const currStartsAt = new Date(currentTier.startsAt).getTime();
|
|
700
|
-
if (currStartsAt !== prevEndsAt) {
|
|
701
|
-
// TODO Return custom error
|
|
702
|
-
return helpers.error("tiers.startsAtMismatch", {
|
|
703
|
-
index: i + 1,
|
|
704
|
-
});
|
|
705
|
-
}
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
return tiers;
|
|
709
|
-
})
|
|
710
|
-
.messages({
|
|
711
|
-
"tiers.startsAtMismatch":
|
|
712
|
-
"Start date/time of Tier {#index} must match end date/time of previous tier.",
|
|
713
|
-
"tiers.endsAtBeforeStartsAt":
|
|
714
|
-
"End date/time of Tier{#tierLabel} must be after start date/time.",
|
|
715
|
-
}),
|
|
646
|
+
tiers: Joi.array().items(
|
|
647
|
+
Joi.object()
|
|
648
|
+
.keys({
|
|
649
|
+
name: Joi.string().required(),
|
|
650
|
+
price: Joi.number().required(),
|
|
651
|
+
remainingQty: Joi.number().required(),
|
|
652
|
+
totalQty: Joi.number()
|
|
653
|
+
.custom((value, helpers) => {
|
|
654
|
+
if (value > 0 && value < used) {
|
|
655
|
+
return helpers.error("totalqty.invalid");
|
|
656
|
+
}
|
|
657
|
+
return value;
|
|
658
|
+
})
|
|
659
|
+
.messages({
|
|
660
|
+
"totalqty.invalid":
|
|
661
|
+
'"Total qty." must be greater than or equal to number of ticket sold',
|
|
662
|
+
})
|
|
663
|
+
.required(),
|
|
664
|
+
})
|
|
665
|
+
.unknown(true)
|
|
666
|
+
),
|
|
716
667
|
})
|
|
717
668
|
.unknown(true);
|
|
718
669
|
return ticketSchema.validate(ticket);
|
|
@@ -822,39 +773,38 @@ export default {
|
|
|
822
773
|
****************************************************************************************/
|
|
823
774
|
ValidateEventEmailSubjectFields(emailPreviewFields: IEmailHolders): any {
|
|
824
775
|
const isEmptyHTML = (value: string) => {
|
|
825
|
-
return (
|
|
826
|
-
!value ||
|
|
827
|
-
value.trim() === "" ||
|
|
828
|
-
value.trim() === "<p></p>" ||
|
|
829
|
-
value.trim() === "<p><br></p>"
|
|
830
|
-
);
|
|
776
|
+
return !value || value.trim() === "" || value.trim() === "<p></p>" || value.trim() === "<p><br></p>";
|
|
831
777
|
};
|
|
832
|
-
|
|
778
|
+
|
|
833
779
|
let validateEmailPreviewFields = Joi.object()
|
|
834
780
|
.options({ abortEarly: false })
|
|
835
781
|
.keys({
|
|
836
|
-
eventEmailSubject: Joi.string()
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
782
|
+
eventEmailSubject: Joi.string()
|
|
783
|
+
.required()
|
|
784
|
+
.messages({
|
|
785
|
+
"string.empty": 'Email Subject cannot be empty',
|
|
786
|
+
"any.required": 'Email Subject is required'
|
|
787
|
+
}),
|
|
788
|
+
|
|
841
789
|
eventEmailBody: Joi.string()
|
|
842
790
|
.custom((value, helpers) => {
|
|
843
791
|
if (isEmptyHTML(value)) {
|
|
844
|
-
return helpers.error("string.empty");
|
|
792
|
+
return helpers.error("string.empty");
|
|
845
793
|
}
|
|
846
794
|
return value;
|
|
847
795
|
})
|
|
848
796
|
.required()
|
|
849
797
|
.messages({
|
|
850
|
-
"string.empty":
|
|
851
|
-
"any.required":
|
|
798
|
+
"string.empty": 'Email Body cannot be empty',
|
|
799
|
+
"any.required": 'Email Body is required'
|
|
852
800
|
}),
|
|
853
801
|
})
|
|
854
802
|
.unknown(true);
|
|
855
|
-
|
|
803
|
+
|
|
856
804
|
return validateEmailPreviewFields.validate(emailPreviewFields);
|
|
857
805
|
},
|
|
806
|
+
|
|
807
|
+
|
|
858
808
|
|
|
859
809
|
/****************************************************************************************
|
|
860
810
|
* CustomField validate
|
|
@@ -909,9 +859,9 @@ export default {
|
|
|
909
859
|
event?.totalDays?.length === 0
|
|
910
860
|
? (event?.schedule?.endsAt as number)
|
|
911
861
|
: (performance?.schedule &&
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
862
|
+
(performance?.schedule[performance?.schedule?.length - 1]
|
|
863
|
+
?.endsAt as number)) ||
|
|
864
|
+
0;
|
|
915
865
|
/* Actions */
|
|
916
866
|
let message = "" as string;
|
|
917
867
|
|
|
@@ -920,8 +870,8 @@ export default {
|
|
|
920
870
|
message =
|
|
921
871
|
performance?.schedule && performance?.schedule?.length > 1
|
|
922
872
|
? "Doors Open should be less than or equal to Event Begins on day " +
|
|
923
|
-
|
|
924
|
-
|
|
873
|
+
(i + 1) +
|
|
874
|
+
"."
|
|
925
875
|
: "Doors Open should be less than or equal to Event Begins.";
|
|
926
876
|
return message;
|
|
927
877
|
} else if (
|
|
@@ -933,17 +883,17 @@ export default {
|
|
|
933
883
|
message =
|
|
934
884
|
performance?.schedule && performance?.schedule?.length > 1
|
|
935
885
|
? "Event Ends should be greater than Event Begins on day " +
|
|
936
|
-
|
|
937
|
-
|
|
886
|
+
(i + 1) +
|
|
887
|
+
"."
|
|
938
888
|
: "Event Ends should be greater than Event Begins.";
|
|
939
889
|
return message;
|
|
940
890
|
} else if (performance?.schedule && performance?.schedule?.length > 1) {
|
|
941
891
|
const aa =
|
|
942
892
|
performance?.schedule?.[i + 1]?.startsAt &&
|
|
943
893
|
performance?.schedule?.[i + 1]?.startsAt >
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
894
|
+
(event?.totalDays?.length === 0
|
|
895
|
+
? (event?.schedule?.endsAt as number)
|
|
896
|
+
: a.endsAt);
|
|
947
897
|
if (!aa && aa !== undefined) {
|
|
948
898
|
message =
|
|
949
899
|
"Day " +
|
package/src/utils/PaymentUtil.ts
CHANGED
|
@@ -735,107 +735,6 @@ class PaymentUtil {
|
|
|
735
735
|
? guestFees + (guestFees * stripeFeesValue) / 100
|
|
736
736
|
: 0;
|
|
737
737
|
}
|
|
738
|
-
getApplicableFees({
|
|
739
|
-
price,
|
|
740
|
-
fees,
|
|
741
|
-
isTicketType = false,
|
|
742
|
-
isUpgradeType = false,
|
|
743
|
-
}: {
|
|
744
|
-
price: number;
|
|
745
|
-
fees: any[];
|
|
746
|
-
isTicketType?: boolean;
|
|
747
|
-
isUpgradeType?: boolean;
|
|
748
|
-
}): { label: string; amount: number }[] {
|
|
749
|
-
if (!fees || fees.length === 0) return [];
|
|
750
|
-
|
|
751
|
-
const filteredFees = fees.filter((fee) => {
|
|
752
|
-
const min = fee.minAppliedToPrice;
|
|
753
|
-
const max = fee.maxAppliedToPrice;
|
|
754
|
-
const baseCondition =
|
|
755
|
-
!fee.disabled &&
|
|
756
|
-
((min === 0 && max === 0) || (price >= min && price <= max));
|
|
757
|
-
|
|
758
|
-
if (!baseCondition) return false;
|
|
759
|
-
|
|
760
|
-
const feeSeatedFilter = FeeFiltersEnum.Seated;
|
|
761
|
-
const guestFilter = FeeFiltersEnum.GuestTicket;
|
|
762
|
-
const feeCardEntryFilter = FeeFiltersEnum.CardEntry;
|
|
763
|
-
const feeCardReaderWifiFilter = FeeFiltersEnum.CardReader;
|
|
764
|
-
const feeCardReaderBluetoothFilter = FeeFiltersEnum.CardReaderBluetooth;
|
|
765
|
-
|
|
766
|
-
const excludedFilters = [
|
|
767
|
-
feeSeatedFilter,
|
|
768
|
-
guestFilter,
|
|
769
|
-
feeCardEntryFilter,
|
|
770
|
-
feeCardReaderWifiFilter,
|
|
771
|
-
feeCardReaderBluetoothFilter,
|
|
772
|
-
];
|
|
773
|
-
|
|
774
|
-
const hasExcludedFilter =
|
|
775
|
-
fee.filters &&
|
|
776
|
-
fee.filters.some((filter: string) =>
|
|
777
|
-
excludedFilters.includes(filter as FeeFiltersEnum)
|
|
778
|
-
);
|
|
779
|
-
if (hasExcludedFilter) return false;
|
|
780
|
-
|
|
781
|
-
if (isTicketType) {
|
|
782
|
-
return fee.appliedTo === FeeAppliedToEnum.Ticket &&
|
|
783
|
-
(fee.appliedBy === FeeAppliedByEnum.Sellout);
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
if (isUpgradeType) {
|
|
787
|
-
return fee.appliedTo === FeeAppliedToEnum.Upgrade &&
|
|
788
|
-
(fee.appliedBy === FeeAppliedByEnum.Sellout);
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
return false;
|
|
792
|
-
});
|
|
793
|
-
|
|
794
|
-
//TODO Group by label and sum the amount
|
|
795
|
-
const feeMap = new Map<string, number>();
|
|
796
|
-
|
|
797
|
-
// filteredFees?.forEach((fee) => {
|
|
798
|
-
// const amount =
|
|
799
|
-
// fee?.type === FeeTypeEnum.Flat
|
|
800
|
-
// ? fee.value
|
|
801
|
-
// : (fee.value / 100) * price;
|
|
802
|
-
|
|
803
|
-
// const label =
|
|
804
|
-
// fee?.appliedBy === FeeAppliedByEnum.Sellout
|
|
805
|
-
// ? "Sellout service fees"
|
|
806
|
-
// : fee.name;
|
|
807
|
-
|
|
808
|
-
// const current = feeMap.get(label) || 0;
|
|
809
|
-
// feeMap.set(label, current + amount);
|
|
810
|
-
// });
|
|
811
|
-
filteredFees.forEach((fee) => {
|
|
812
|
-
const amount =
|
|
813
|
-
fee.type === FeeTypeEnum.Flat
|
|
814
|
-
? fee.value
|
|
815
|
-
: (fee.value / 100) * price;
|
|
816
|
-
|
|
817
|
-
const label =
|
|
818
|
-
fee.appliedBy === FeeAppliedByEnum.Sellout ||
|
|
819
|
-
fee.appliedBy === FeeAppliedByEnum.Organization
|
|
820
|
-
? "Sellout service fees"
|
|
821
|
-
: fee.name;
|
|
822
|
-
|
|
823
|
-
const current = feeMap.get(label) || 0;
|
|
824
|
-
feeMap.set(label, current + amount);
|
|
825
|
-
});
|
|
826
|
-
const result: { label: string; amount: number }[] = [];
|
|
827
|
-
feeMap.forEach((amount, label) => {
|
|
828
|
-
result.push({
|
|
829
|
-
label,
|
|
830
|
-
amount: parseFloat((amount / 100).toFixed(2)),
|
|
831
|
-
});
|
|
832
|
-
});
|
|
833
|
-
|
|
834
|
-
return result;
|
|
835
|
-
}
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
738
|
}
|
|
840
739
|
|
|
841
740
|
export default new PaymentUtil();
|