@stamhoofd/structures 2.4.0 → 2.6.0
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.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -7
- package/dist/index.js.map +1 -1
- package/dist/src/BalanceItemDetailed.d.ts +11 -3
- package/dist/src/BalanceItemDetailed.d.ts.map +1 -1
- package/dist/src/BalanceItemDetailed.js +15 -7
- package/dist/src/BalanceItemDetailed.js.map +1 -1
- package/dist/src/DefaultAgeGroup.d.ts +2 -0
- package/dist/src/DefaultAgeGroup.d.ts.map +1 -1
- package/dist/src/DefaultAgeGroup.js +8 -0
- package/dist/src/DefaultAgeGroup.js.map +1 -1
- package/dist/src/Event.d.ts +13 -2
- package/dist/src/Event.d.ts.map +1 -1
- package/dist/src/Event.js +36 -3
- package/dist/src/Event.js.map +1 -1
- package/dist/src/Group.d.ts +10 -0
- package/dist/src/Group.d.ts.map +1 -1
- package/dist/src/Group.js +17 -2
- package/dist/src/Group.js.map +1 -1
- package/dist/src/GroupSettings.d.ts +59 -6
- package/dist/src/GroupSettings.d.ts.map +1 -1
- package/dist/src/GroupSettings.js +201 -16
- package/dist/src/GroupSettings.js.map +1 -1
- package/dist/src/Organization.js +2 -2
- package/dist/src/Organization.js.map +1 -1
- package/dist/src/RegistrationPeriod.d.ts +1 -0
- package/dist/src/RegistrationPeriod.d.ts.map +1 -1
- package/dist/src/RegistrationPeriod.js +3 -0
- package/dist/src/RegistrationPeriod.js.map +1 -1
- package/dist/src/StockReservation.d.ts +20 -0
- package/dist/src/StockReservation.d.ts.map +1 -0
- package/dist/src/StockReservation.js +91 -0
- package/dist/src/StockReservation.js.map +1 -0
- package/dist/src/Version.d.ts +1 -1
- package/dist/src/Version.js +1 -1
- package/dist/src/addresses/Address.d.ts +4 -0
- package/dist/src/addresses/Address.d.ts.map +1 -1
- package/dist/src/addresses/Address.js +6 -0
- package/dist/src/addresses/Address.js.map +1 -1
- package/dist/src/billing/STPackageBundle.js +6 -6
- package/dist/src/billing/STPackageBundle.js.map +1 -1
- package/dist/src/email/EditorSmartVariable.d.ts.map +1 -1
- package/dist/src/email/EditorSmartVariable.js +6 -11
- package/dist/src/email/EditorSmartVariable.js.map +1 -1
- package/dist/src/members/Member.d.ts +7 -0
- package/dist/src/members/Member.d.ts.map +1 -1
- package/dist/src/members/Member.js +34 -1
- package/dist/src/members/Member.js.map +1 -1
- package/dist/src/members/MemberDetails.d.ts +8 -8
- package/dist/src/members/MemberDetails.d.ts.map +1 -1
- package/dist/src/members/MemberDetails.js +85 -42
- package/dist/src/members/MemberDetails.js.map +1 -1
- package/dist/src/members/MemberPlatformMembership.d.ts +1 -0
- package/dist/src/members/MemberPlatformMembership.d.ts.map +1 -1
- package/dist/src/members/MemberPlatformMembership.js +3 -0
- package/dist/src/members/MemberPlatformMembership.js.map +1 -1
- package/dist/src/members/OrganizationRecordsConfiguration.d.ts +13 -0
- package/dist/src/members/OrganizationRecordsConfiguration.d.ts.map +1 -1
- package/dist/src/members/OrganizationRecordsConfiguration.js +49 -0
- package/dist/src/members/OrganizationRecordsConfiguration.js.map +1 -1
- package/dist/src/members/PaymentDetailed.d.ts +3 -0
- package/dist/src/members/PaymentDetailed.d.ts.map +1 -1
- package/dist/src/members/PaymentDetailed.js +7 -8
- package/dist/src/members/PaymentDetailed.js.map +1 -1
- package/dist/src/members/PaymentGeneral.d.ts +5 -2
- package/dist/src/members/PaymentGeneral.d.ts.map +1 -1
- package/dist/src/members/PaymentGeneral.js +3 -5
- package/dist/src/members/PaymentGeneral.js.map +1 -1
- package/dist/src/members/PlatformMember.d.ts +9 -6
- package/dist/src/members/PlatformMember.d.ts.map +1 -1
- package/dist/src/members/PlatformMember.js +50 -35
- package/dist/src/members/PlatformMember.js.map +1 -1
- package/dist/src/members/Registration.d.ts +12 -0
- package/dist/src/members/Registration.d.ts.map +1 -1
- package/dist/src/members/Registration.js +17 -3
- package/dist/src/members/Registration.js.map +1 -1
- package/dist/src/members/RegistrationWithMember.d.ts +3 -2
- package/dist/src/members/RegistrationWithMember.d.ts.map +1 -1
- package/dist/src/members/RegistrationWithMember.js +7 -1
- package/dist/src/members/RegistrationWithMember.js.map +1 -1
- package/dist/src/members/checkout/BalanceItemCartItem.d.ts +3 -1
- package/dist/src/members/checkout/BalanceItemCartItem.d.ts.map +1 -1
- package/dist/src/members/checkout/BalanceItemCartItem.js +11 -9
- package/dist/src/members/checkout/BalanceItemCartItem.js.map +1 -1
- package/dist/src/members/checkout/RegisterCart.d.ts +17 -1
- package/dist/src/members/checkout/RegisterCart.d.ts.map +1 -1
- package/dist/src/members/checkout/RegisterCart.js +121 -12
- package/dist/src/members/checkout/RegisterCart.js.map +1 -1
- package/dist/src/members/checkout/RegisterCheckout.d.ts +46 -3
- package/dist/src/members/checkout/RegisterCheckout.d.ts.map +1 -1
- package/dist/src/members/checkout/RegisterCheckout.js +85 -4
- package/dist/src/members/checkout/RegisterCheckout.js.map +1 -1
- package/dist/src/members/checkout/RegisterItem.d.ts +57 -16
- package/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
- package/dist/src/members/checkout/RegisterItem.js +394 -126
- package/dist/src/members/checkout/RegisterItem.js.map +1 -1
- package/dist/src/members/records/RecordCategory.d.ts +1 -0
- package/dist/src/members/records/RecordCategory.d.ts.map +1 -1
- package/dist/src/members/records/RecordCategory.js +3 -0
- package/dist/src/members/records/RecordCategory.js.map +1 -1
- package/esm/dist/index.d.ts +1 -7
- package/esm/dist/index.d.ts.map +1 -1
- package/esm/dist/index.js +1 -7
- package/esm/dist/index.js.map +1 -1
- package/esm/dist/src/BalanceItemDetailed.d.ts +11 -3
- package/esm/dist/src/BalanceItemDetailed.d.ts.map +1 -1
- package/esm/dist/src/BalanceItemDetailed.js +15 -7
- package/esm/dist/src/BalanceItemDetailed.js.map +1 -1
- package/esm/dist/src/DefaultAgeGroup.d.ts +2 -0
- package/esm/dist/src/DefaultAgeGroup.d.ts.map +1 -1
- package/esm/dist/src/DefaultAgeGroup.js +8 -0
- package/esm/dist/src/DefaultAgeGroup.js.map +1 -1
- package/esm/dist/src/Event.d.ts +13 -2
- package/esm/dist/src/Event.d.ts.map +1 -1
- package/esm/dist/src/Event.js +34 -2
- package/esm/dist/src/Event.js.map +1 -1
- package/esm/dist/src/Group.d.ts +10 -0
- package/esm/dist/src/Group.d.ts.map +1 -1
- package/esm/dist/src/Group.js +18 -3
- package/esm/dist/src/Group.js.map +1 -1
- package/esm/dist/src/GroupSettings.d.ts +59 -6
- package/esm/dist/src/GroupSettings.d.ts.map +1 -1
- package/esm/dist/src/GroupSettings.js +201 -16
- package/esm/dist/src/GroupSettings.js.map +1 -1
- package/esm/dist/src/Organization.js +2 -2
- package/esm/dist/src/Organization.js.map +1 -1
- package/esm/dist/src/RegistrationPeriod.d.ts +1 -0
- package/esm/dist/src/RegistrationPeriod.d.ts.map +1 -1
- package/esm/dist/src/RegistrationPeriod.js +3 -0
- package/esm/dist/src/RegistrationPeriod.js.map +1 -1
- package/esm/dist/src/StockReservation.d.ts +20 -0
- package/esm/dist/src/StockReservation.d.ts.map +1 -0
- package/esm/dist/src/StockReservation.js +87 -0
- package/esm/dist/src/StockReservation.js.map +1 -0
- package/esm/dist/src/Version.d.ts +1 -1
- package/esm/dist/src/Version.js +1 -1
- package/esm/dist/src/addresses/Address.d.ts +4 -0
- package/esm/dist/src/addresses/Address.d.ts.map +1 -1
- package/esm/dist/src/addresses/Address.js +6 -0
- package/esm/dist/src/addresses/Address.js.map +1 -1
- package/esm/dist/src/billing/STPackageBundle.js +6 -6
- package/esm/dist/src/billing/STPackageBundle.js.map +1 -1
- package/esm/dist/src/email/EditorSmartVariable.d.ts.map +1 -1
- package/esm/dist/src/email/EditorSmartVariable.js +7 -12
- package/esm/dist/src/email/EditorSmartVariable.js.map +1 -1
- package/esm/dist/src/members/Member.d.ts +7 -0
- package/esm/dist/src/members/Member.d.ts.map +1 -1
- package/esm/dist/src/members/Member.js +32 -0
- package/esm/dist/src/members/Member.js.map +1 -1
- package/esm/dist/src/members/MemberDetails.d.ts +8 -8
- package/esm/dist/src/members/MemberDetails.d.ts.map +1 -1
- package/esm/dist/src/members/MemberDetails.js +85 -42
- package/esm/dist/src/members/MemberDetails.js.map +1 -1
- package/esm/dist/src/members/MemberPlatformMembership.d.ts +1 -0
- package/esm/dist/src/members/MemberPlatformMembership.d.ts.map +1 -1
- package/esm/dist/src/members/MemberPlatformMembership.js +3 -0
- package/esm/dist/src/members/MemberPlatformMembership.js.map +1 -1
- package/esm/dist/src/members/OrganizationRecordsConfiguration.d.ts +13 -0
- package/esm/dist/src/members/OrganizationRecordsConfiguration.d.ts.map +1 -1
- package/esm/dist/src/members/OrganizationRecordsConfiguration.js +49 -0
- package/esm/dist/src/members/OrganizationRecordsConfiguration.js.map +1 -1
- package/esm/dist/src/members/PaymentDetailed.d.ts +3 -0
- package/esm/dist/src/members/PaymentDetailed.d.ts.map +1 -1
- package/esm/dist/src/members/PaymentDetailed.js +7 -8
- package/esm/dist/src/members/PaymentDetailed.js.map +1 -1
- package/esm/dist/src/members/PaymentGeneral.d.ts +5 -2
- package/esm/dist/src/members/PaymentGeneral.d.ts.map +1 -1
- package/esm/dist/src/members/PaymentGeneral.js +3 -5
- package/esm/dist/src/members/PaymentGeneral.js.map +1 -1
- package/esm/dist/src/members/PlatformMember.d.ts +9 -6
- package/esm/dist/src/members/PlatformMember.d.ts.map +1 -1
- package/esm/dist/src/members/PlatformMember.js +50 -35
- package/esm/dist/src/members/PlatformMember.js.map +1 -1
- package/esm/dist/src/members/Registration.d.ts +12 -0
- package/esm/dist/src/members/Registration.d.ts.map +1 -1
- package/esm/dist/src/members/Registration.js +18 -4
- package/esm/dist/src/members/Registration.js.map +1 -1
- package/esm/dist/src/members/RegistrationWithMember.d.ts +3 -2
- package/esm/dist/src/members/RegistrationWithMember.d.ts.map +1 -1
- package/esm/dist/src/members/RegistrationWithMember.js +8 -2
- package/esm/dist/src/members/RegistrationWithMember.js.map +1 -1
- package/esm/dist/src/members/checkout/BalanceItemCartItem.d.ts +3 -1
- package/esm/dist/src/members/checkout/BalanceItemCartItem.d.ts.map +1 -1
- package/esm/dist/src/members/checkout/BalanceItemCartItem.js +11 -9
- package/esm/dist/src/members/checkout/BalanceItemCartItem.js.map +1 -1
- package/esm/dist/src/members/checkout/RegisterCart.d.ts +17 -1
- package/esm/dist/src/members/checkout/RegisterCart.d.ts.map +1 -1
- package/esm/dist/src/members/checkout/RegisterCart.js +122 -13
- package/esm/dist/src/members/checkout/RegisterCart.js.map +1 -1
- package/esm/dist/src/members/checkout/RegisterCheckout.d.ts +46 -3
- package/esm/dist/src/members/checkout/RegisterCheckout.d.ts.map +1 -1
- package/esm/dist/src/members/checkout/RegisterCheckout.js +86 -5
- package/esm/dist/src/members/checkout/RegisterCheckout.js.map +1 -1
- package/esm/dist/src/members/checkout/RegisterItem.d.ts +57 -16
- package/esm/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
- package/esm/dist/src/members/checkout/RegisterItem.js +396 -128
- package/esm/dist/src/members/checkout/RegisterItem.js.map +1 -1
- package/esm/dist/src/members/records/RecordCategory.d.ts +1 -0
- package/esm/dist/src/members/records/RecordCategory.d.ts.map +1 -1
- package/esm/dist/src/members/records/RecordCategory.js +3 -0
- package/esm/dist/src/members/records/RecordCategory.js.map +1 -1
- package/package.json +2 -2
- package/dist/src/GroupPrices.d.ts +0 -44
- package/dist/src/GroupPrices.d.ts.map +0 -1
- package/dist/src/GroupPrices.js +0 -119
- package/dist/src/GroupPrices.js.map +0 -1
- package/dist/src/members/MemberWithRegistrations.d.ts +0 -52
- package/dist/src/members/MemberWithRegistrations.d.ts.map +0 -1
- package/dist/src/members/MemberWithRegistrations.js +0 -156
- package/dist/src/members/MemberWithRegistrations.js.map +0 -1
- package/dist/src/members/checkout/OldRegisterCart.d.ts +0 -50
- package/dist/src/members/checkout/OldRegisterCart.d.ts.map +0 -1
- package/dist/src/members/checkout/OldRegisterCart.js +0 -207
- package/dist/src/members/checkout/OldRegisterCart.js.map +0 -1
- package/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts +0 -36
- package/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts.map +0 -1
- package/dist/src/members/checkout/OldRegisterCartPriceCalculator.js +0 -339
- package/dist/src/members/checkout/OldRegisterCartPriceCalculator.js.map +0 -1
- package/dist/src/members/checkout/OldRegisterCartValidator.d.ts +0 -35
- package/dist/src/members/checkout/OldRegisterCartValidator.d.ts.map +0 -1
- package/dist/src/members/checkout/OldRegisterCartValidator.js +0 -309
- package/dist/src/members/checkout/OldRegisterCartValidator.js.map +0 -1
- package/dist/src/members/checkout/OldRegisterCheckout.d.ts +0 -22
- package/dist/src/members/checkout/OldRegisterCheckout.d.ts.map +0 -1
- package/dist/src/members/checkout/OldRegisterCheckout.js +0 -46
- package/dist/src/members/checkout/OldRegisterCheckout.js.map +0 -1
- package/dist/src/members/checkout/OldRegisterItem.d.ts +0 -46
- package/dist/src/members/checkout/OldRegisterItem.d.ts.map +0 -1
- package/dist/src/members/checkout/OldRegisterItem.js +0 -89
- package/dist/src/members/checkout/OldRegisterItem.js.map +0 -1
- package/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts +0 -2
- package/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts.map +0 -1
- package/dist/src/members/checkout/RegisterCartPriceCalculator.test.js +0 -1076
- package/dist/src/members/checkout/RegisterCartPriceCalculator.test.js.map +0 -1
- package/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts +0 -23
- package/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts.map +0 -1
- package/dist/src/members/checkout/UnknownMemberWithRegistrations.js +0 -3
- package/dist/src/members/checkout/UnknownMemberWithRegistrations.js.map +0 -1
- package/esm/dist/src/GroupPrices.d.ts +0 -44
- package/esm/dist/src/GroupPrices.d.ts.map +0 -1
- package/esm/dist/src/GroupPrices.js +0 -114
- package/esm/dist/src/GroupPrices.js.map +0 -1
- package/esm/dist/src/members/MemberWithRegistrations.d.ts +0 -52
- package/esm/dist/src/members/MemberWithRegistrations.d.ts.map +0 -1
- package/esm/dist/src/members/MemberWithRegistrations.js +0 -152
- package/esm/dist/src/members/MemberWithRegistrations.js.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCart.d.ts +0 -50
- package/esm/dist/src/members/checkout/OldRegisterCart.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCart.js +0 -202
- package/esm/dist/src/members/checkout/OldRegisterCart.js.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts +0 -36
- package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.js +0 -334
- package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.js.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCartValidator.d.ts +0 -35
- package/esm/dist/src/members/checkout/OldRegisterCartValidator.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCartValidator.js +0 -305
- package/esm/dist/src/members/checkout/OldRegisterCartValidator.js.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCheckout.d.ts +0 -22
- package/esm/dist/src/members/checkout/OldRegisterCheckout.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterCheckout.js +0 -41
- package/esm/dist/src/members/checkout/OldRegisterCheckout.js.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterItem.d.ts +0 -46
- package/esm/dist/src/members/checkout/OldRegisterItem.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/OldRegisterItem.js +0 -84
- package/esm/dist/src/members/checkout/OldRegisterItem.js.map +0 -1
- package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts +0 -2
- package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.js +0 -1074
- package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.js.map +0 -1
- package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts +0 -23
- package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts.map +0 -1
- package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.js +0 -2
- package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.js.map +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import {
|
|
3
|
-
import { isSimpleError, isSimpleErrors, SimpleError } from "@simonbackx/simple-errors";
|
|
4
|
-
import { Formatter } from "@stamhoofd/utility";
|
|
5
|
-
import { GroupOption, GroupOptionMenu, GroupPrice, WaitingListType } from "../../GroupSettings";
|
|
2
|
+
import { ArrayDecoder, AutoEncoder, field, IntegerDecoder, StringDecoder } from "@simonbackx/simple-encoding";
|
|
3
|
+
import { isSimpleError, isSimpleErrors, SimpleError, SimpleErrors } from "@simonbackx/simple-errors";
|
|
6
4
|
import { v4 as uuidv4 } from "uuid";
|
|
5
|
+
import { GroupType } from "../../Group";
|
|
6
|
+
import { GroupOption, GroupOptionMenu, GroupPrice, WaitingListType } from "../../GroupSettings";
|
|
7
|
+
import { StockReservation } from "../../StockReservation";
|
|
7
8
|
export class RegisterItemOption extends AutoEncoder {
|
|
8
9
|
constructor() {
|
|
9
10
|
super(...arguments);
|
|
@@ -20,8 +21,12 @@ __decorate([
|
|
|
20
21
|
field({ decoder: IntegerDecoder })
|
|
21
22
|
], RegisterItemOption.prototype, "amount", void 0);
|
|
22
23
|
export class IDRegisterItem extends AutoEncoder {
|
|
24
|
+
constructor() {
|
|
25
|
+
super(...arguments);
|
|
26
|
+
this.options = [];
|
|
27
|
+
}
|
|
23
28
|
hydrate(context) {
|
|
24
|
-
return RegisterItem.fromId(this, context
|
|
29
|
+
return RegisterItem.fromId(this, context);
|
|
25
30
|
}
|
|
26
31
|
}
|
|
27
32
|
__decorate([
|
|
@@ -37,35 +42,118 @@ __decorate([
|
|
|
37
42
|
field({ decoder: StringDecoder })
|
|
38
43
|
], IDRegisterItem.prototype, "organizationId", void 0);
|
|
39
44
|
__decorate([
|
|
40
|
-
field({ decoder:
|
|
41
|
-
], IDRegisterItem.prototype, "
|
|
45
|
+
field({ decoder: GroupPrice })
|
|
46
|
+
], IDRegisterItem.prototype, "groupPrice", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
field({ decoder: new ArrayDecoder(RegisterItemOption) })
|
|
49
|
+
], IDRegisterItem.prototype, "options", void 0);
|
|
42
50
|
export class RegisterItem {
|
|
43
|
-
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated
|
|
53
|
+
*/
|
|
54
|
+
get waitingList() {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
static fromRegistration(registration, member, organization) {
|
|
44
58
|
return new RegisterItem({
|
|
45
59
|
id: registration.id,
|
|
46
60
|
member,
|
|
47
61
|
group: registration.group,
|
|
48
|
-
|
|
62
|
+
organization
|
|
49
63
|
});
|
|
50
64
|
}
|
|
51
65
|
constructor(data) {
|
|
52
|
-
var _a, _b;
|
|
66
|
+
var _a, _b, _c, _d, _e;
|
|
53
67
|
this.options = [];
|
|
54
|
-
this.waitingList = false;
|
|
55
68
|
this.calculatedPrice = 0;
|
|
69
|
+
/**
|
|
70
|
+
* These registrations will be replaced as part of this new registration (moving or updating a registration is possible this way)
|
|
71
|
+
*/
|
|
72
|
+
this.replaceRegistrations = [];
|
|
73
|
+
/**
|
|
74
|
+
* Show an error in the cart for recovery
|
|
75
|
+
*/
|
|
76
|
+
this.cartError = null;
|
|
56
77
|
this.id = (_a = data.id) !== null && _a !== void 0 ? _a : uuidv4();
|
|
57
78
|
this.member = data.member;
|
|
58
79
|
this.group = data.group;
|
|
59
|
-
this.groupPrice = (_b = this.group.settings.prices[0]) !== null &&
|
|
60
|
-
this.
|
|
80
|
+
this.groupPrice = (_c = (_b = data.groupPrice) !== null && _b !== void 0 ? _b : this.group.settings.prices[0]) !== null && _c !== void 0 ? _c : GroupPrice.create({ name: 'Ongeldig tarief', id: '' });
|
|
81
|
+
this.organization = data.organization;
|
|
82
|
+
this.options = (_d = data.options) !== null && _d !== void 0 ? _d : [];
|
|
83
|
+
this.replaceRegistrations = (_e = data.replaceRegistrations) !== null && _e !== void 0 ? _e : [];
|
|
84
|
+
// Select all defaults
|
|
85
|
+
for (const optionMenu of this.group.settings.optionMenus) {
|
|
86
|
+
if (!optionMenu.multipleChoice) {
|
|
87
|
+
if (this.options.find(o => o.optionMenu.id === optionMenu.id)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
this.options.push(RegisterItemOption.create({
|
|
91
|
+
option: optionMenu.options[0],
|
|
92
|
+
optionMenu: optionMenu,
|
|
93
|
+
amount: 1
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
get isInCart() {
|
|
99
|
+
return this.member.family.checkout.cart.contains(this);
|
|
100
|
+
}
|
|
101
|
+
get showItemView() {
|
|
102
|
+
return this.shouldUseWaitingList() || this.group.settings.prices.length > 1 || this.group.settings.optionMenus.length > 0 || (!this.isInCart && !this.isValid);
|
|
103
|
+
}
|
|
104
|
+
calculatePrice() {
|
|
105
|
+
this.calculatedPrice = this.groupPrice.price.forMember(this.member);
|
|
106
|
+
for (const option of this.options) {
|
|
107
|
+
this.calculatedPrice += option.option.price.forMember(this.member) * option.amount;
|
|
108
|
+
}
|
|
109
|
+
for (const registration of this.replaceRegistrations) {
|
|
110
|
+
this.calculatedPrice -= registration.price;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
clone() {
|
|
114
|
+
return new RegisterItem({
|
|
115
|
+
id: this.id,
|
|
116
|
+
member: this.member,
|
|
117
|
+
group: this.group,
|
|
118
|
+
organization: this.organization,
|
|
119
|
+
groupPrice: this.groupPrice.clone(),
|
|
120
|
+
options: this.options.map(o => o.clone())
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
copyFrom(item) {
|
|
124
|
+
this.groupPrice = item.groupPrice.clone();
|
|
125
|
+
this.options = item.options.map(o => o.clone());
|
|
126
|
+
this.calculatedPrice = item.calculatedPrice;
|
|
127
|
+
}
|
|
128
|
+
getFilteredPrices() {
|
|
129
|
+
return this.group.settings.prices.filter(p => {
|
|
130
|
+
if (p.hidden && !this.checkout.isAdminFromSameOrganization) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
getFilteredOptionMenus() {
|
|
137
|
+
return this.group.settings.optionMenus.filter(p => {
|
|
138
|
+
return this.getFilteredOptions(p).length > 0;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
getFilteredOptions(menu) {
|
|
142
|
+
return menu.options.filter(p => {
|
|
143
|
+
if (p.hidden && !this.checkout.isAdminFromSameOrganization) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
});
|
|
61
148
|
}
|
|
62
149
|
convert() {
|
|
63
150
|
return IDRegisterItem.create({
|
|
64
151
|
id: this.id,
|
|
65
152
|
memberId: this.member.member.id,
|
|
66
153
|
groupId: this.group.id,
|
|
67
|
-
organizationId: this.
|
|
68
|
-
|
|
154
|
+
organizationId: this.organization.id,
|
|
155
|
+
groupPrice: this.groupPrice,
|
|
156
|
+
options: this.options
|
|
69
157
|
});
|
|
70
158
|
}
|
|
71
159
|
get memberId() {
|
|
@@ -84,36 +172,101 @@ export class RegisterItem {
|
|
|
84
172
|
get checkout() {
|
|
85
173
|
return this.family.checkout;
|
|
86
174
|
}
|
|
87
|
-
static defaultFor(member, group) {
|
|
88
|
-
|
|
175
|
+
static defaultFor(member, group, organization) {
|
|
176
|
+
if (group.organizationId !== organization.id) {
|
|
177
|
+
throw new Error("Group and organization do not match in RegisterItem.defaultFor");
|
|
178
|
+
}
|
|
179
|
+
let item = new RegisterItem({
|
|
89
180
|
member,
|
|
90
181
|
group,
|
|
91
|
-
|
|
182
|
+
organization
|
|
92
183
|
});
|
|
93
|
-
|
|
184
|
+
if (item.shouldUseWaitingList() && group.waitingList) {
|
|
185
|
+
group = group.waitingList;
|
|
186
|
+
item = RegisterItem.defaultFor(member, group, organization);
|
|
187
|
+
}
|
|
94
188
|
return item;
|
|
95
189
|
}
|
|
96
|
-
get organization() {
|
|
97
|
-
return this.member.organizations.find(o => o.id === this.group.organizationId);
|
|
98
|
-
}
|
|
99
190
|
/**
|
|
100
191
|
* Update self to the newest available data, and throw error if something failed (only after refreshing other ones)
|
|
101
192
|
*/
|
|
102
|
-
refresh() {
|
|
103
|
-
|
|
193
|
+
refresh(group) {
|
|
194
|
+
this.group = group;
|
|
195
|
+
const errors = new SimpleErrors();
|
|
196
|
+
if (this.group.settings.prices.length === 0) {
|
|
197
|
+
errors.addError(new SimpleError({
|
|
198
|
+
code: "product_unavailable",
|
|
199
|
+
message: "Product unavailable",
|
|
200
|
+
human: "Er is iets fout met de tariefinstellingen van " + this.group.settings.name + ", waardoor je nu niet kan inschrijven. Neem contact op met een beheerder en vraag de tariefinstellingen na te kijken."
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const groupPrice = this.group.settings.prices.find(p => p.id === this.groupPrice.id);
|
|
205
|
+
if (!groupPrice) {
|
|
206
|
+
errors.addError(new SimpleError({
|
|
207
|
+
code: "product_unavailable",
|
|
208
|
+
message: "Product unavailable",
|
|
209
|
+
human: "Eén of meerdere tarieven van " + this.group.settings.name + " zijn niet meer beschikbaar"
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
this.groupPrice = groupPrice;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Check all options
|
|
217
|
+
const remainingMenus = this.group.settings.optionMenus.slice();
|
|
218
|
+
for (const o of this.options) {
|
|
219
|
+
let index = remainingMenus.findIndex(m => m.id === o.optionMenu.id);
|
|
220
|
+
if (index == -1) {
|
|
221
|
+
// Check if it has a multiple choice one
|
|
222
|
+
index = this.group.settings.optionMenus.findIndex(m => m.id === o.optionMenu.id);
|
|
223
|
+
errors.addError(new SimpleError({
|
|
224
|
+
code: "option_menu_unavailable",
|
|
225
|
+
message: "Option menu unavailable",
|
|
226
|
+
human: "Eén of meerdere keuzemogelijkheden van " + this.group.settings.name + " zijn niet meer beschikbaar"
|
|
227
|
+
}));
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const menu = remainingMenus[index];
|
|
231
|
+
if (!menu.multipleChoice) {
|
|
232
|
+
// Already used: not possible to add another
|
|
233
|
+
remainingMenus.splice(index, 1)[0];
|
|
234
|
+
}
|
|
235
|
+
const option = menu.options.find(m => m.id === o.option.id);
|
|
236
|
+
if (!option) {
|
|
237
|
+
errors.addError(new SimpleError({
|
|
238
|
+
code: "option_unavailable",
|
|
239
|
+
message: "Option unavailable",
|
|
240
|
+
human: "Eén of meerdere keuzemogelijkheden van " + this.group.settings.name + " zijn niet meer beschikbaar"
|
|
241
|
+
}));
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
// Update to latest data
|
|
245
|
+
o.optionMenu = menu;
|
|
246
|
+
o.option = option;
|
|
247
|
+
}
|
|
248
|
+
if (remainingMenus.filter(m => !m.multipleChoice).length > 0) {
|
|
249
|
+
errors.addError(new SimpleError({
|
|
250
|
+
code: "missing_menu",
|
|
251
|
+
message: "Missing menu's " + remainingMenus.filter(m => !m.multipleChoice).map(m => m.name).join(", "),
|
|
252
|
+
human: "Er zijn nieuwe keuzemogelijkheden voor " + this.group.settings.name + " waaruit je moet kiezen"
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
errors.throwIfNotEmpty();
|
|
104
256
|
}
|
|
105
257
|
isAlreadyRegistered() {
|
|
106
|
-
return !!this.member.member.registrations.find(r => r.groupId === this.group.id &&
|
|
258
|
+
return !!this.member.member.registrations.find(r => r.groupId === this.group.id && r.registeredAt !== null && r.deactivatedAt === null);
|
|
107
259
|
}
|
|
108
260
|
hasReachedCategoryMaximum() {
|
|
261
|
+
if (this.group.type !== GroupType.Membership) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
109
264
|
const parents = this.group.getParentCategories(this.organization.period.settings.categories, false);
|
|
110
265
|
for (const parent of parents) {
|
|
111
266
|
if (parent.settings.maximumRegistrations !== null) {
|
|
112
|
-
const count = this.member.
|
|
113
|
-
if (r.registeredAt !== null &&
|
|
114
|
-
|
|
115
|
-
const g = this.organization.groups.find(gg => gg.id === r.groupId);
|
|
116
|
-
return g && g.cycle === r.cycle;
|
|
267
|
+
const count = this.member.patchedMember.registrations.filter(r => {
|
|
268
|
+
if (r.registeredAt !== null && r.deactivatedAt === null && parent.groupIds.includes(r.groupId)) {
|
|
269
|
+
return true;
|
|
117
270
|
}
|
|
118
271
|
return false;
|
|
119
272
|
}).length;
|
|
@@ -128,51 +281,73 @@ export class RegisterItem {
|
|
|
128
281
|
return false;
|
|
129
282
|
}
|
|
130
283
|
isInvited() {
|
|
131
|
-
return !!this.member.member.registrations.find(r => r.groupId === this.group.id && r.
|
|
284
|
+
return !!this.member.member.registrations.find(r => r.groupId === this.group.id && r.registeredAt === null && r.canRegister);
|
|
132
285
|
}
|
|
133
286
|
doesMeetRequireGroupIds() {
|
|
134
287
|
if (this.group.settings.requireGroupIds.length > 0) {
|
|
135
288
|
const hasGroup = this.member.member.registrations.find(r => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
289
|
+
return r.registeredAt !== null && r.deactivatedAt === null && this.group.settings.requireGroupIds.includes(r.groupId);
|
|
290
|
+
});
|
|
291
|
+
if (!hasGroup && !this.checkout.cart.items.find(item => item.member.id === this.member.id && this.group.settings.requireGroupIds.includes(item.group.id))) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (this.group.settings.requireDefaultAgeGroupIds.length > 0) {
|
|
296
|
+
const hasGroup = this.member.member.registrations.find(r => {
|
|
297
|
+
return r.registeredAt !== null && r.deactivatedAt === null && r.group.defaultAgeGroupId && this.group.settings.requireDefaultAgeGroupIds.includes(r.group.defaultAgeGroupId);
|
|
141
298
|
});
|
|
142
|
-
if (!hasGroup && !this.checkout.cart.items.find(item =>
|
|
299
|
+
if (!hasGroup && !this.checkout.cart.items.find(item => item.member.id === this.member.id && item.group.defaultAgeGroupId && this.group.settings.requireDefaultAgeGroupIds.includes(item.group.defaultAgeGroupId))) {
|
|
143
300
|
return false;
|
|
144
301
|
}
|
|
145
302
|
}
|
|
146
303
|
return true;
|
|
147
304
|
}
|
|
148
|
-
|
|
149
|
-
|
|
305
|
+
doesMeetRequireOrganizationIds() {
|
|
306
|
+
if (this.group.settings.requireOrganizationIds.length > 0) {
|
|
307
|
+
const hasGroup = this.member.member.registrations.find(r => {
|
|
308
|
+
return r.group.type === GroupType.Membership && this.group.settings.requireOrganizationIds.includes(r.organizationId) && r.registeredAt !== null && r.deactivatedAt === null;
|
|
309
|
+
});
|
|
310
|
+
if (!hasGroup && !this.checkout.cart.items.find(item => item.member.id === this.member.id && this.group.settings.requireOrganizationIds.includes(item.organization.id))) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return true;
|
|
150
315
|
}
|
|
151
|
-
|
|
152
|
-
if (this.
|
|
153
|
-
|
|
316
|
+
doesMeetRequireOrganizationTags() {
|
|
317
|
+
if (this.group.settings.requireOrganizationTags.length > 0) {
|
|
318
|
+
const hasOrganization = this.member.filterOrganizations({ currentPeriod: true, types: [GroupType.Membership] }).find(organization => {
|
|
319
|
+
return organization.meta.matchTags(this.group.settings.requireOrganizationTags);
|
|
320
|
+
});
|
|
321
|
+
if (!hasOrganization && !this.checkout.cart.items.find(item => item.member.id === this.member.id && item.organization.meta.matchTags(this.group.settings.requireOrganizationTags))) {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
154
324
|
}
|
|
155
|
-
return
|
|
325
|
+
return true;
|
|
156
326
|
}
|
|
157
|
-
|
|
158
|
-
if (this.
|
|
159
|
-
|
|
327
|
+
doesMeetRequirePlatformMembershipOn() {
|
|
328
|
+
if (this.group.settings.requirePlatformMembershipOn !== null) {
|
|
329
|
+
const requirePlatformMembershipOn = this.group.settings.requirePlatformMembershipOn;
|
|
330
|
+
return !!this.member.patchedMember.platformMemberships.find(m => m.isActive(requirePlatformMembershipOn));
|
|
160
331
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return 'De inschrijvingen zijn volzet, je kan enkel inschrijven voor de wachtlijst';
|
|
172
|
-
}
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
isExistingMemberOrFamily() {
|
|
335
|
+
return this.member.isExistingMember(this.group.organizationId) || (this.group.settings.priorityForFamily && !!this.family.members.find(f => f.isExistingMember(this.group.organizationId)));
|
|
336
|
+
}
|
|
337
|
+
get description() {
|
|
338
|
+
const descriptions = [];
|
|
339
|
+
if (this.replaceRegistrations.length > 0) {
|
|
340
|
+
for (const registration of this.replaceRegistrations) {
|
|
341
|
+
descriptions.push("Verplaatsen vanaf " + registration.group.settings.name);
|
|
173
342
|
}
|
|
174
343
|
}
|
|
175
|
-
|
|
344
|
+
if (this.getFilteredPrices().length > 1) {
|
|
345
|
+
descriptions.push(this.groupPrice.name);
|
|
346
|
+
}
|
|
347
|
+
for (const option of this.options) {
|
|
348
|
+
descriptions.push(option.optionMenu.name + ': ' + option.option.name + (option.option.allowAmount ? ` x ${option.amount}` : ""));
|
|
349
|
+
}
|
|
350
|
+
return descriptions.filter(d => !!d).join("\n");
|
|
176
351
|
}
|
|
177
352
|
shouldUseWaitingList() {
|
|
178
353
|
if (this.group.settings.waitingListType === WaitingListType.All) {
|
|
@@ -182,7 +357,7 @@ export class RegisterItem {
|
|
|
182
357
|
if (this.group.settings.waitingListType === WaitingListType.ExistingMembersFirst && !existingMember) {
|
|
183
358
|
return true;
|
|
184
359
|
}
|
|
185
|
-
if (this.group.
|
|
360
|
+
if (this.group.waitingList) {
|
|
186
361
|
if (this.hasReachedGroupMaximum()) {
|
|
187
362
|
return true;
|
|
188
363
|
}
|
|
@@ -216,14 +391,53 @@ export class RegisterItem {
|
|
|
216
391
|
}
|
|
217
392
|
return null;
|
|
218
393
|
}
|
|
219
|
-
|
|
394
|
+
get validationWarning() {
|
|
395
|
+
if (this.validationError) {
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
if (!this.member.family.checkout.isAdminFromSameOrganization) {
|
|
399
|
+
// Warnings are only for admins
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
try {
|
|
403
|
+
this.validate({ warnings: true });
|
|
404
|
+
}
|
|
405
|
+
catch (e) {
|
|
406
|
+
if (isSimpleError(e) || isSimpleErrors(e)) {
|
|
407
|
+
return e.getHuman();
|
|
408
|
+
}
|
|
409
|
+
throw e;
|
|
410
|
+
}
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
get isValid() {
|
|
414
|
+
return this.validationError === null;
|
|
415
|
+
}
|
|
416
|
+
validate(options) {
|
|
220
417
|
var _a;
|
|
221
|
-
|
|
222
|
-
|
|
418
|
+
this.cartError = null;
|
|
419
|
+
this.refresh(this.group);
|
|
420
|
+
const checkout = this.member.family.checkout;
|
|
421
|
+
const admin = checkout.isAdminFromSameOrganization && !(options === null || options === void 0 ? void 0 : options.warnings);
|
|
422
|
+
if (this.group.organizationId !== this.organization.id) {
|
|
423
|
+
throw new Error("Group and organization do not match in RegisterItem.validate");
|
|
424
|
+
}
|
|
425
|
+
for (const registration of this.replaceRegistrations) {
|
|
426
|
+
// todo: check if you are allowed to move
|
|
427
|
+
if (registration.member.id !== this.member.id) {
|
|
223
428
|
throw new SimpleError({
|
|
224
|
-
code: "
|
|
225
|
-
message: "
|
|
226
|
-
human:
|
|
429
|
+
code: "invalid_move",
|
|
430
|
+
message: "Invalid member in replaceRegistration",
|
|
431
|
+
human: "Je wilt een inschrijving verplaatsen van een ander lid in ruil voor een ander lid. Dit is niet toegestaan.",
|
|
432
|
+
field: "replaceRegistrations"
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
if (registration.group.organizationId !== this.organization.id) {
|
|
436
|
+
throw new SimpleError({
|
|
437
|
+
code: "invalid_move",
|
|
438
|
+
message: "Invalid organization in replaceRegistration",
|
|
439
|
+
human: "Je wilt een inschrijving verplaatsen van een andere organisatie. Dit is niet toegestaan.",
|
|
440
|
+
field: "replaceRegistrations"
|
|
227
441
|
});
|
|
228
442
|
}
|
|
229
443
|
}
|
|
@@ -240,95 +454,107 @@ export class RegisterItem {
|
|
|
240
454
|
throw new SimpleError({
|
|
241
455
|
code: "maximum_reached",
|
|
242
456
|
message: "Maximum reached",
|
|
243
|
-
human: `Je kan niet meer inschrijven voor ${this.group.settings.name} omdat
|
|
457
|
+
human: `Je kan niet meer inschrijven voor ${this.group.settings.name} omdat ${this.member.patchedMember.name} al ingeschreven is voor een groep die je niet kan combineren.`
|
|
244
458
|
});
|
|
245
459
|
}
|
|
246
460
|
// Check if we have an invite (doesn't matter if registrations are closed)
|
|
247
461
|
if (this.isInvited()) {
|
|
248
462
|
return;
|
|
249
463
|
}
|
|
250
|
-
if (
|
|
251
|
-
|
|
252
|
-
code: "not_yet_open",
|
|
253
|
-
message: "Not yet open",
|
|
254
|
-
human: `De inschrijvingen voor ${this.group.settings.name} zijn nog niet geopend.`
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
if (this.group.closed) {
|
|
258
|
-
throw new SimpleError({
|
|
259
|
-
code: "closed",
|
|
260
|
-
message: "Closed",
|
|
261
|
-
human: `De inschrijvingen voor ${this.group.settings.name} zijn gesloten.`
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
// Check if it fits
|
|
265
|
-
if (this.member.member.details) {
|
|
266
|
-
if (!this.member.member.details.doesMatchGroup(this.group)) {
|
|
267
|
-
const error = this.member.member.details.getMatchingError(this.group);
|
|
464
|
+
if (!admin) {
|
|
465
|
+
if (this.group.notYetOpen) {
|
|
268
466
|
throw new SimpleError({
|
|
269
|
-
code: "
|
|
270
|
-
message: "Not
|
|
271
|
-
human:
|
|
467
|
+
code: "not_yet_open",
|
|
468
|
+
message: "Not yet open",
|
|
469
|
+
human: `De inschrijvingen voor ${this.group.settings.name} zijn nog niet geopend.`
|
|
272
470
|
});
|
|
273
471
|
}
|
|
274
|
-
|
|
275
|
-
// Check if registrations are limited
|
|
276
|
-
if (!this.doesMeetRequireGroupIds()) {
|
|
277
|
-
throw new SimpleError({
|
|
278
|
-
code: "not_matching",
|
|
279
|
-
message: "Not matching",
|
|
280
|
-
human: "Inschrijving bij " + Formatter.joinLast(this.group.settings.requireGroupIds.map(id => { var _a, _b; return (_b = (_a = this.organization.groups.find(g => g.id === id)) === null || _a === void 0 ? void 0 : _a.settings.name) !== null && _b !== void 0 ? _b : "Onbekend"; }), ", ", " of ") + " is verplicht voor je kan inschrijven voor " + this.group.settings.name,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
const existingMember = this.isExistingMemberOrFamily();
|
|
284
|
-
// Pre registrations?
|
|
285
|
-
if (this.group.activePreRegistrationDate) {
|
|
286
|
-
if (!existingMember) {
|
|
472
|
+
if (this.group.closed) {
|
|
287
473
|
throw new SimpleError({
|
|
288
|
-
code: "
|
|
289
|
-
message: "
|
|
290
|
-
human:
|
|
474
|
+
code: "closed",
|
|
475
|
+
message: "Closed",
|
|
476
|
+
human: `De inschrijvingen voor ${this.group.settings.name} zijn gesloten.`
|
|
291
477
|
});
|
|
292
478
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
message: "Waiting list required",
|
|
298
|
-
human: `${this.member.member.firstName} kan momenteel enkel voor de wachtlijst van ${this.group.settings.name} inschrijven.`
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
if (!this.waitingList) {
|
|
302
|
-
if (!this.group.settings.waitingListIfFull) {
|
|
303
|
-
if (this.hasReachedGroupMaximum()) {
|
|
479
|
+
// Check if it fits
|
|
480
|
+
if (this.member.member.details) {
|
|
481
|
+
if (!this.member.member.details.doesMatchGroup(this.group)) {
|
|
482
|
+
const error = this.member.member.details.getMatchingError(this.group);
|
|
304
483
|
throw new SimpleError({
|
|
305
|
-
code: "
|
|
306
|
-
message: "
|
|
307
|
-
human:
|
|
484
|
+
code: "not_matching",
|
|
485
|
+
message: "Not matching: memberDetails",
|
|
486
|
+
human: (_a = error === null || error === void 0 ? void 0 : error.description) !== null && _a !== void 0 ? _a : `${this.member.patchedMember.name} voldoet niet aan de voorwaarden om in te schrijven voor deze groep.`
|
|
308
487
|
});
|
|
309
488
|
}
|
|
310
489
|
}
|
|
311
|
-
|
|
312
|
-
|
|
490
|
+
// Check if registrations are limited
|
|
491
|
+
if (!this.doesMeetRequireGroupIds()) {
|
|
492
|
+
throw new SimpleError({
|
|
493
|
+
code: "not_matching",
|
|
494
|
+
message: "Not matching: requireGroupIds",
|
|
495
|
+
human: `${this.member.patchedMember.name} voldoet niet aan de voorwaarden om in te schrijven voor deze groep.`
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
if (!this.doesMeetRequireOrganizationIds()) {
|
|
499
|
+
throw new SimpleError({
|
|
500
|
+
code: "not_matching",
|
|
501
|
+
message: "Not matching: requireOrganizationIds",
|
|
502
|
+
human: `${this.member.patchedMember.name} kan pas inschrijven met een geldige actieve inschrijving.`
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
if (!this.doesMeetRequireOrganizationTags()) {
|
|
506
|
+
throw new SimpleError({
|
|
507
|
+
code: "not_matching",
|
|
508
|
+
message: "Not matching: requireOrganizationIds",
|
|
509
|
+
human: `${this.member.patchedMember.name} kan pas inschrijven met een geldige actieve inschrijving.`
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
if (!this.doesMeetRequirePlatformMembershipOn()) {
|
|
513
|
+
throw new SimpleError({
|
|
514
|
+
code: "not_matching",
|
|
515
|
+
message: "Not matching: requirePlatformMembershipOn",
|
|
516
|
+
human: `${this.member.patchedMember.name} kan pas inschrijven met een geldige aansluiting (en dus verzekering) bij de koepel`
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
const existingMember = this.isExistingMemberOrFamily();
|
|
520
|
+
// Pre registrations?
|
|
521
|
+
if (this.group.activePreRegistrationDate) {
|
|
522
|
+
if (!existingMember) {
|
|
313
523
|
throw new SimpleError({
|
|
314
|
-
code: "
|
|
315
|
-
message: "
|
|
316
|
-
human:
|
|
524
|
+
code: "pre_registrations",
|
|
525
|
+
message: "Pre registrations",
|
|
526
|
+
human: "Momenteel zijn de voorinschrijvingen nog bezig voor " + this.group.settings.name + ". Dit is enkel voor bestaande leden" + (this.group.settings.priorityForFamily ? " en hun broers/zussen" : "") + "."
|
|
317
527
|
});
|
|
318
528
|
}
|
|
319
529
|
}
|
|
530
|
+
if (this.shouldUseWaitingList()) {
|
|
531
|
+
throw new SimpleError({
|
|
532
|
+
code: "waiting_list_required",
|
|
533
|
+
message: "Waiting list required",
|
|
534
|
+
human: `${this.member.member.firstName} kan momenteel enkel voor de wachtlijst van ${this.group.settings.name} inschrijven.`,
|
|
535
|
+
meta: { recoverable: true }
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
if (this.hasReachedGroupMaximum()) {
|
|
539
|
+
throw new SimpleError({
|
|
540
|
+
code: "maximum_reached",
|
|
541
|
+
message: "Maximum reached",
|
|
542
|
+
human: this.group.waitingList ? `De inschrijvingen voor ${this.group.settings.name} zijn volzet. Je kan wel nog inschrijven voor de wachtlijst.` : `De inschrijvingen voor ${this.group.settings.name} zijn volzet. `,
|
|
543
|
+
meta: { recoverable: true }
|
|
544
|
+
});
|
|
545
|
+
}
|
|
320
546
|
}
|
|
321
547
|
}
|
|
322
|
-
static fromId(idRegisterItem,
|
|
323
|
-
const member =
|
|
548
|
+
static fromId(idRegisterItem, context) {
|
|
549
|
+
const member = context.members.find(m => m.member.id === idRegisterItem.memberId);
|
|
324
550
|
if (!member) {
|
|
325
551
|
throw new Error("Member not found: " + idRegisterItem.memberId);
|
|
326
552
|
}
|
|
327
|
-
const organization =
|
|
553
|
+
const organization = context.organizations.find(o => o.id === idRegisterItem.organizationId);
|
|
328
554
|
if (!organization) {
|
|
329
555
|
throw new Error("Organization not found: " + idRegisterItem.organizationId);
|
|
330
556
|
}
|
|
331
|
-
const group =
|
|
557
|
+
const group = context.groups.find(g => g.id === idRegisterItem.groupId);
|
|
332
558
|
if (!group) {
|
|
333
559
|
throw new Error("Group not found: " + idRegisterItem.groupId);
|
|
334
560
|
}
|
|
@@ -336,7 +562,9 @@ export class RegisterItem {
|
|
|
336
562
|
id: idRegisterItem.id,
|
|
337
563
|
member,
|
|
338
564
|
group,
|
|
339
|
-
|
|
565
|
+
organization,
|
|
566
|
+
groupPrice: idRegisterItem.groupPrice,
|
|
567
|
+
options: idRegisterItem.options
|
|
340
568
|
});
|
|
341
569
|
}
|
|
342
570
|
get paymentConfiguration() {
|
|
@@ -345,5 +573,45 @@ export class RegisterItem {
|
|
|
345
573
|
}
|
|
346
574
|
return this.organization.meta.registrationPaymentConfiguration;
|
|
347
575
|
}
|
|
576
|
+
/**
|
|
577
|
+
* Returns the stock that will be taken (or freed if negative) by all the register items before this item
|
|
578
|
+
* and with the removed registrations freed up, so this can be negative
|
|
579
|
+
*/
|
|
580
|
+
getCartPendingStockReservations() {
|
|
581
|
+
const deleteRegistrations = this.checkout.cart.deleteRegistrations.filter(r => r.groupId === this.group.id);
|
|
582
|
+
const cartIndex = this.checkout.cart.items.findIndex(i => i.id === this.id);
|
|
583
|
+
const itemsBefore = this.checkout.cart.items.slice(0, cartIndex === -1 ? undefined : cartIndex);
|
|
584
|
+
return StockReservation.removed(itemsBefore.flatMap(i => i.getPendingStockReservations()), // these will be removed
|
|
585
|
+
deleteRegistrations.flatMap(r => r.stockReservations) // these will be freed up
|
|
586
|
+
);
|
|
587
|
+
}
|
|
588
|
+
/**
|
|
589
|
+
* Stock that will be taken by this item
|
|
590
|
+
*/
|
|
591
|
+
getPendingStockReservations() {
|
|
592
|
+
return [
|
|
593
|
+
// Global level stock reservations (stored in each group)
|
|
594
|
+
StockReservation.create({
|
|
595
|
+
objectId: this.group.id,
|
|
596
|
+
objectType: 'Group',
|
|
597
|
+
amount: 1,
|
|
598
|
+
children: [
|
|
599
|
+
// Group level stock reservatiosn (stored in the group)
|
|
600
|
+
StockReservation.create({
|
|
601
|
+
objectId: this.groupPrice.id,
|
|
602
|
+
objectType: 'GroupPrice',
|
|
603
|
+
amount: 1
|
|
604
|
+
}),
|
|
605
|
+
...this.options.map(o => {
|
|
606
|
+
return StockReservation.create({
|
|
607
|
+
objectId: o.option.id,
|
|
608
|
+
objectType: 'GroupOption',
|
|
609
|
+
amount: o.amount
|
|
610
|
+
});
|
|
611
|
+
})
|
|
612
|
+
]
|
|
613
|
+
})
|
|
614
|
+
];
|
|
615
|
+
}
|
|
348
616
|
}
|
|
349
617
|
//# sourceMappingURL=RegisterItem.js.map
|