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