@stamhoofd/models 2.39.0 → 2.40.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/src/factories/AddressFactory.d.ts +3 -4
- package/dist/src/factories/AddressFactory.d.ts.map +1 -1
- package/dist/src/factories/AddressFactory.js +13 -13
- package/dist/src/factories/EmergencyContactFactory.d.ts +3 -4
- package/dist/src/factories/EmergencyContactFactory.d.ts.map +1 -1
- package/dist/src/factories/EmergencyContactFactory.js +27 -27
- package/dist/src/factories/EmergencyContactFactory.js.map +1 -1
- package/dist/src/factories/GroupFactory.d.ts +4 -4
- package/dist/src/factories/GroupFactory.d.ts.map +1 -1
- package/dist/src/factories/GroupFactory.js +8 -8
- package/dist/src/factories/GroupFactory.js.map +1 -1
- package/dist/src/factories/MemberFactory.d.ts +4 -4
- package/dist/src/factories/MemberFactory.d.ts.map +1 -1
- package/dist/src/factories/MemberFactory.js +17 -17
- package/dist/src/factories/MemberFactory.js.map +1 -1
- package/dist/src/factories/OrganizationFactory.d.ts +4 -4
- package/dist/src/factories/OrganizationFactory.js +8 -8
- package/dist/src/factories/OrganizationFactory.js.map +1 -1
- package/dist/src/factories/ParentFactory.d.ts +1 -1
- package/dist/src/factories/ParentFactory.js +19 -19
- package/dist/src/factories/ParentFactory.js.map +1 -1
- package/dist/src/factories/RecordFactory.d.ts +2 -3
- package/dist/src/factories/RecordFactory.d.ts.map +1 -1
- package/dist/src/factories/RecordFactory.js +1 -1
- package/dist/src/factories/RecordFactory.js.map +1 -1
- package/dist/src/factories/RegisterCodeFactory.d.ts +2 -2
- package/dist/src/factories/RegisterCodeFactory.d.ts.map +1 -1
- package/dist/src/factories/RegisterCodeFactory.js +2 -2
- package/dist/src/factories/RegistrationFactory.d.ts +3 -3
- package/dist/src/factories/RegistrationFactory.d.ts.map +1 -1
- package/dist/src/factories/RegistrationFactory.js.map +1 -1
- package/dist/src/factories/RegistrationPeriodFactory.d.ts +2 -2
- package/dist/src/factories/RegistrationPeriodFactory.js.map +1 -1
- package/dist/src/factories/UserFactory.d.ts +3 -3
- package/dist/src/factories/UserFactory.d.ts.map +1 -1
- package/dist/src/factories/UserFactory.js +3 -3
- package/dist/src/factories/UserFactory.js.map +1 -1
- package/dist/src/factories/WebshopFactory.d.ts +4 -4
- package/dist/src/factories/WebshopFactory.d.ts.map +1 -1
- package/dist/src/factories/WebshopFactory.js +1 -1
- package/dist/src/factories/WebshopFactory.js.map +1 -1
- package/dist/src/helpers/DNSValidator.d.ts +1 -1
- package/dist/src/helpers/DNSValidator.d.ts.map +1 -1
- package/dist/src/helpers/DNSValidator.js +33 -33
- package/dist/src/helpers/DNSValidator.js.map +1 -1
- package/dist/src/helpers/EmailBuilder.d.ts +10 -10
- package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
- package/dist/src/helpers/EmailBuilder.js +34 -34
- package/dist/src/helpers/EmailBuilder.js.map +1 -1
- package/dist/src/helpers/GroupBuilder.d.ts.map +1 -1
- package/dist/src/helpers/GroupBuilder.js +57 -57
- package/dist/src/helpers/GroupBuilder.js.map +1 -1
- package/dist/src/helpers/Handlebars.d.ts.map +1 -1
- package/dist/src/helpers/Handlebars.js +29 -29
- package/dist/src/helpers/Handlebars.js.map +1 -1
- package/dist/src/helpers/MemberMerger.d.ts +1 -1
- package/dist/src/helpers/MemberMerger.d.ts.map +1 -1
- package/dist/src/helpers/MemberMerger.js +33 -33
- package/dist/src/helpers/MemberMerger.js.map +1 -1
- package/dist/src/helpers/MemberMerger.test.js +194 -194
- package/dist/src/helpers/MemberMerger.test.js.map +1 -1
- package/dist/src/helpers/RateLimiter.d.ts.map +1 -1
- package/dist/src/helpers/RateLimiter.js +2 -2
- package/dist/src/helpers/RateLimiter.js.map +1 -1
- package/dist/src/helpers/SetupStepsUpdater.d.ts +22 -0
- package/dist/src/helpers/SetupStepsUpdater.d.ts.map +1 -0
- package/dist/src/helpers/SetupStepsUpdater.js +255 -0
- package/dist/src/helpers/SetupStepsUpdater.js.map +1 -0
- package/dist/src/helpers/WebshopCounter.d.ts +1 -1
- package/dist/src/helpers/WebshopCounter.d.ts.map +1 -1
- package/dist/src/helpers/WebshopCounter.js +1 -1
- package/dist/src/helpers/WebshopCounter.js.map +1 -1
- package/dist/src/helpers/WebshopCounter.test.js +6 -6
- package/dist/src/helpers/WebshopCounter.test.js.map +1 -1
- package/dist/src/index.d.ts +20 -19
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrations/1605262045-import-postcodes.js +12 -12
- package/dist/src/migrations/1605262046-import-postcodes-nl.js +10 -10
- package/dist/src/models/BalanceItem.d.ts.map +1 -1
- package/dist/src/models/BalanceItem.js +37 -37
- package/dist/src/models/BalanceItem.js.map +1 -1
- package/dist/src/models/BalanceItemPayment.d.ts.map +1 -1
- package/dist/src/models/BalanceItemPayment.js +13 -13
- package/dist/src/models/BalanceItemPayment.js.map +1 -1
- package/dist/src/models/BuckarooPayment.d.ts +1 -1
- package/dist/src/models/BuckarooPayment.d.ts.map +1 -1
- package/dist/src/models/BuckarooPayment.js +5 -5
- package/dist/src/models/BuckarooPayment.js.map +1 -1
- package/dist/src/models/CachedOutstandingBalance.d.ts.map +1 -1
- package/dist/src/models/CachedOutstandingBalance.js +37 -37
- package/dist/src/models/CachedOutstandingBalance.js.map +1 -1
- package/dist/src/models/Document.d.ts +4 -4
- package/dist/src/models/Document.d.ts.map +1 -1
- package/dist/src/models/Document.js +27 -27
- package/dist/src/models/Document.js.map +1 -1
- package/dist/src/models/DocumentTemplate.d.ts +4 -4
- package/dist/src/models/DocumentTemplate.d.ts.map +1 -1
- package/dist/src/models/DocumentTemplate.js +72 -72
- package/dist/src/models/DocumentTemplate.js.map +1 -1
- package/dist/src/models/Email.d.ts.map +1 -1
- package/dist/src/models/Email.js +63 -64
- package/dist/src/models/Email.js.map +1 -1
- package/dist/src/models/EmailRecipient.d.ts.map +1 -1
- package/dist/src/models/EmailRecipient.js +20 -20
- package/dist/src/models/EmailRecipient.js.map +1 -1
- package/dist/src/models/EmailTemplate.d.ts +3 -3
- package/dist/src/models/EmailTemplate.d.ts.map +1 -1
- package/dist/src/models/EmailTemplate.js +16 -16
- package/dist/src/models/EmailTemplate.js.map +1 -1
- package/dist/src/models/EmailVerificationCode.d.ts +2 -2
- package/dist/src/models/EmailVerificationCode.d.ts.map +1 -1
- package/dist/src/models/EmailVerificationCode.js +57 -55
- package/dist/src/models/EmailVerificationCode.js.map +1 -1
- package/dist/src/models/Event.d.ts +2 -2
- package/dist/src/models/Event.d.ts.map +1 -1
- package/dist/src/models/Event.js +15 -15
- package/dist/src/models/Event.js.map +1 -1
- package/dist/src/models/Group.d.ts +3 -1
- package/dist/src/models/Group.d.ts.map +1 -1
- package/dist/src/models/Group.js +46 -35
- package/dist/src/models/Group.js.map +1 -1
- package/dist/src/models/Image.d.ts +1 -1
- package/dist/src/models/Image.d.ts.map +1 -1
- package/dist/src/models/Image.js +26 -26
- package/dist/src/models/Image.js.map +1 -1
- package/dist/src/models/Member.d.ts +8 -8
- package/dist/src/models/Member.d.ts.map +1 -1
- package/dist/src/models/Member.js +60 -60
- package/dist/src/models/Member.js.map +1 -1
- package/dist/src/models/MemberPlatformMembership.d.ts +3 -3
- package/dist/src/models/MemberPlatformMembership.d.ts.map +1 -1
- package/dist/src/models/MemberPlatformMembership.js +26 -26
- package/dist/src/models/MemberPlatformMembership.js.map +1 -1
- package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -1
- package/dist/src/models/MemberResponsibilityRecord.js +13 -13
- package/dist/src/models/MemberResponsibilityRecord.js.map +1 -1
- package/dist/src/models/MergedMember.d.ts +3 -3
- package/dist/src/models/MergedMember.d.ts.map +1 -1
- package/dist/src/models/MergedMember.js +19 -19
- package/dist/src/models/MergedMember.js.map +1 -1
- package/dist/src/models/MolliePayment.d.ts +1 -1
- package/dist/src/models/MolliePayment.d.ts.map +1 -1
- package/dist/src/models/MolliePayment.js +5 -5
- package/dist/src/models/MolliePayment.js.map +1 -1
- package/dist/src/models/MollieToken.d.ts.map +1 -1
- package/dist/src/models/MollieToken.js +60 -60
- package/dist/src/models/MollieToken.js.map +1 -1
- package/dist/src/models/OneTimeToken.d.ts +2 -2
- package/dist/src/models/OneTimeToken.d.ts.map +1 -1
- package/dist/src/models/OneTimeToken.js +13 -13
- package/dist/src/models/OneTimeToken.js.map +1 -1
- package/dist/src/models/Order.d.ts +1 -1
- package/dist/src/models/Order.d.ts.map +1 -1
- package/dist/src/models/Order.js +70 -70
- package/dist/src/models/Order.js.map +1 -1
- package/dist/src/models/Organization.d.ts +5 -5
- package/dist/src/models/Organization.d.ts.map +1 -1
- package/dist/src/models/Organization.js +127 -127
- package/dist/src/models/Organization.js.map +1 -1
- package/dist/src/models/OrganizationRegistrationPeriod.d.ts.map +1 -1
- package/dist/src/models/OrganizationRegistrationPeriod.js +15 -15
- package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -1
- package/dist/src/models/PasswordToken.d.ts +3 -3
- package/dist/src/models/PasswordToken.d.ts.map +1 -1
- package/dist/src/models/PasswordToken.js +17 -17
- package/dist/src/models/PasswordToken.js.map +1 -1
- package/dist/src/models/PayconiqPayment.d.ts +1 -1
- package/dist/src/models/PayconiqPayment.d.ts.map +1 -1
- package/dist/src/models/PayconiqPayment.js +49 -49
- package/dist/src/models/PayconiqPayment.js.map +1 -1
- package/dist/src/models/Payment.d.ts +3 -3
- package/dist/src/models/Payment.d.ts.map +1 -1
- package/dist/src/models/Payment.js +36 -36
- package/dist/src/models/Payment.js.map +1 -1
- package/dist/src/models/Platform.d.ts +2 -2
- package/dist/src/models/Platform.d.ts.map +1 -1
- package/dist/src/models/Platform.js +8 -8
- package/dist/src/models/Platform.js.map +1 -1
- package/dist/src/models/RegisterCode.d.ts +1 -1
- package/dist/src/models/RegisterCode.d.ts.map +1 -1
- package/dist/src/models/RegisterCode.js +11 -11
- package/dist/src/models/RegisterCode.js.map +1 -1
- package/dist/src/models/Registration.d.ts +1 -1
- package/dist/src/models/Registration.d.ts.map +1 -1
- package/dist/src/models/Registration.js +88 -88
- package/dist/src/models/Registration.js.map +1 -1
- package/dist/src/models/RegistrationPeriod.d.ts.map +1 -1
- package/dist/src/models/RegistrationPeriod.js +12 -12
- package/dist/src/models/RegistrationPeriod.js.map +1 -1
- package/dist/src/models/STCredit.d.ts +1 -1
- package/dist/src/models/STCredit.d.ts.map +1 -1
- package/dist/src/models/STCredit.js +12 -12
- package/dist/src/models/STCredit.js.map +1 -1
- package/dist/src/models/STInvoice.d.ts +1 -1
- package/dist/src/models/STInvoice.d.ts.map +1 -1
- package/dist/src/models/STInvoice.js +16 -16
- package/dist/src/models/STInvoice.js.map +1 -1
- package/dist/src/models/STPackage.d.ts +1 -1
- package/dist/src/models/STPackage.d.ts.map +1 -1
- package/dist/src/models/STPackage.js +39 -39
- package/dist/src/models/STPackage.js.map +1 -1
- package/dist/src/models/STPendingInvoice.d.ts +1 -1
- package/dist/src/models/STPendingInvoice.d.ts.map +1 -1
- package/dist/src/models/STPendingInvoice.js +11 -11
- package/dist/src/models/STPendingInvoice.js.map +1 -1
- package/dist/src/models/StripeAccount.d.ts.map +1 -1
- package/dist/src/models/StripeAccount.js +13 -13
- package/dist/src/models/StripeAccount.js.map +1 -1
- package/dist/src/models/StripeCheckoutSession.d.ts +1 -1
- package/dist/src/models/StripeCheckoutSession.d.ts.map +1 -1
- package/dist/src/models/StripeCheckoutSession.js +7 -7
- package/dist/src/models/StripeCheckoutSession.js.map +1 -1
- package/dist/src/models/StripePaymentIntent.d.ts +1 -1
- package/dist/src/models/StripePaymentIntent.d.ts.map +1 -1
- package/dist/src/models/StripePaymentIntent.js +7 -7
- package/dist/src/models/StripePaymentIntent.js.map +1 -1
- package/dist/src/models/Ticket.d.ts +2 -2
- package/dist/src/models/Ticket.d.ts.map +1 -1
- package/dist/src/models/Ticket.js +23 -23
- package/dist/src/models/Ticket.js.map +1 -1
- package/dist/src/models/Token.d.ts +3 -3
- package/dist/src/models/Token.d.ts.map +1 -1
- package/dist/src/models/Token.js +27 -27
- package/dist/src/models/Token.js.map +1 -1
- package/dist/src/models/Token.test.js +11 -11
- package/dist/src/models/UsedRegisterCode.d.ts +1 -1
- package/dist/src/models/UsedRegisterCode.d.ts.map +1 -1
- package/dist/src/models/UsedRegisterCode.js +10 -10
- package/dist/src/models/UsedRegisterCode.js.map +1 -1
- package/dist/src/models/User.d.ts +4 -4
- package/dist/src/models/User.d.ts.map +1 -1
- package/dist/src/models/User.js +53 -51
- package/dist/src/models/User.js.map +1 -1
- package/dist/src/models/UserPermissions.d.ts +3 -3
- package/dist/src/models/UserPermissions.d.ts.map +1 -1
- package/dist/src/models/UserPermissions.js +12 -12
- package/dist/src/models/UserPermissions.js.map +1 -1
- package/dist/src/models/Webshop.d.ts +1 -1
- package/dist/src/models/Webshop.d.ts.map +1 -1
- package/dist/src/models/Webshop.js +23 -23
- package/dist/src/models/Webshop.js.map +1 -1
- package/dist/src/models/WebshopDiscountCode.d.ts +1 -1
- package/dist/src/models/WebshopDiscountCode.d.ts.map +1 -1
- package/dist/src/models/WebshopDiscountCode.js +16 -16
- package/dist/src/models/WebshopDiscountCode.js.map +1 -1
- package/dist/src/models/addresses/City.d.ts.map +1 -1
- package/dist/src/models/addresses/City.js +9 -9
- package/dist/src/models/addresses/City.js.map +1 -1
- package/dist/src/models/addresses/PostalCode.d.ts.map +1 -1
- package/dist/src/models/addresses/PostalCode.js +11 -11
- package/dist/src/models/addresses/PostalCode.js.map +1 -1
- package/dist/src/models/addresses/PostalCode.test.js +22 -22
- package/dist/src/models/addresses/PostalCode.test.js.map +1 -1
- package/dist/src/models/addresses/Province.d.ts.map +1 -1
- package/dist/src/models/addresses/Province.js +5 -5
- package/dist/src/models/addresses/Province.js.map +1 -1
- package/dist/src/models/addresses/Street.d.ts.map +1 -1
- package/dist/src/models/addresses/Street.js +6 -6
- package/dist/src/models/addresses/Street.js.map +1 -1
- package/dist/src/models/index.d.ts +46 -46
- package/dist/src/models/index.d.ts.map +1 -1
- package/dist/src/models/index.js +0 -1
- package/dist/src/models/index.js.map +1 -1
- package/dist/src/structures/OrganizationServerMetaData.d.ts.map +1 -1
- package/dist/src/structures/OrganizationServerMetaData.js +4 -4
- package/dist/src/structures/OrganizationServerMetaData.js.map +1 -1
- package/dist/tests/jest.global.setup.d.ts.map +1 -1
- package/dist/tests/jest.global.setup.js +15 -13
- package/dist/tests/jest.global.setup.js.map +1 -1
- package/dist/tests/jest.setup.js +3 -1
- package/dist/tests/jest.setup.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +3 -3
- package/src/factories/AddressFactory.ts +17 -17
- package/src/factories/EmergencyContactFactory.ts +30 -31
- package/src/factories/GroupFactory.ts +30 -30
- package/src/factories/MemberFactory.ts +41 -38
- package/src/factories/OrganizationFactory.ts +15 -15
- package/src/factories/ParentFactory.ts +24 -24
- package/src/factories/RecordFactory.ts +5 -4
- package/src/factories/RegisterCodeFactory.ts +7 -7
- package/src/factories/RegistrationFactory.ts +16 -16
- package/src/factories/RegistrationPeriodFactory.ts +5 -5
- package/src/factories/UserFactory.ts +20 -19
- package/src/factories/WebshopFactory.ts +14 -14
- package/src/helpers/DNSValidator.ts +89 -84
- package/src/helpers/EmailBuilder.ts +141 -135
- package/src/helpers/GroupBuilder.ts +181 -181
- package/src/helpers/Handlebars.ts +57 -54
- package/src/helpers/MemberMerger.test.ts +702 -702
- package/src/helpers/MemberMerger.ts +83 -77
- package/src/helpers/RateLimiter.ts +25 -27
- package/src/helpers/SetupStepsUpdater.ts +402 -0
- package/src/helpers/WebshopCounter.test.ts +12 -12
- package/src/helpers/WebshopCounter.ts +20 -19
- package/src/index.ts +20 -19
- package/src/migrations/1605262045-import-postcodes.ts +59 -63
- package/src/migrations/1605262046-import-postcodes-nl.ts +41 -43
- package/src/models/BalanceItem.ts +173 -172
- package/src/models/BalanceItemPayment.ts +32 -33
- package/src/models/BuckarooPayment.ts +7 -7
- package/src/models/CachedOutstandingBalance.ts +98 -99
- package/src/models/Document.ts +90 -87
- package/src/models/DocumentTemplate.ts +207 -198
- package/src/models/Email.ts +198 -200
- package/src/models/EmailRecipient.ts +38 -39
- package/src/models/EmailTemplate.ts +36 -37
- package/src/models/EmailVerificationCode.ts +146 -142
- package/src/models/Event.ts +53 -53
- package/src/models/Group.ts +136 -123
- package/src/models/Image.ts +48 -48
- package/src/models/Member.ts +277 -275
- package/src/models/MemberPlatformMembership.ts +71 -71
- package/src/models/MemberResponsibilityRecord.ts +32 -32
- package/src/models/MergedMember.ts +77 -77
- package/src/models/MolliePayment.ts +7 -7
- package/src/models/MollieToken.ts +131 -126
- package/src/models/OneTimeToken.ts +40 -39
- package/src/models/Order.ts +379 -372
- package/src/models/Organization.ts +332 -325
- package/src/models/OrganizationRegistrationPeriod.ts +50 -50
- package/src/models/PasswordToken.ts +42 -42
- package/src/models/PayconiqPayment.ts +80 -76
- package/src/models/Payment.ts +86 -86
- package/src/models/Platform.ts +21 -22
- package/src/models/RegisterCode.ts +26 -26
- package/src/models/Registration.ts +167 -168
- package/src/models/RegistrationPeriod.ts +29 -29
- package/src/models/STCredit.ts +24 -25
- package/src/models/STInvoice.ts +34 -34
- package/src/models/STPackage.ts +143 -136
- package/src/models/STPendingInvoice.ts +26 -26
- package/src/models/StripeAccount.ts +27 -27
- package/src/models/StripeCheckoutSession.ts +10 -10
- package/src/models/StripePaymentIntent.ts +10 -10
- package/src/models/Ticket.ts +51 -52
- package/src/models/Token.test.ts +13 -13
- package/src/models/Token.ts +64 -63
- package/src/models/UsedRegisterCode.ts +20 -21
- package/src/models/User.ts +148 -144
- package/src/models/UserPermissions.ts +25 -28
- package/src/models/Webshop.ts +53 -53
- package/src/models/WebshopDiscountCode.ts +33 -33
- package/src/models/addresses/City.ts +12 -12
- package/src/models/addresses/PostalCode.test.ts +68 -69
- package/src/models/addresses/PostalCode.ts +57 -57
- package/src/models/addresses/Province.ts +8 -8
- package/src/models/addresses/Street.ts +10 -12
- package/src/models/index.ts +54 -55
- package/src/structures/OrganizationServerMetaData.ts +36 -36
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { column, Database, ManyToOneRelation, Model } from '@simonbackx/simple-database';
|
|
2
2
|
import { EmailTemplateType, GroupPrice, PaymentMethod, PaymentMethodHelper, Recipient, RegisterItemOption, Registration as RegistrationStructure, Replacement, StockReservation } from '@stamhoofd/structures';
|
|
3
3
|
import { Formatter } from '@stamhoofd/utility';
|
|
4
|
-
import { v4 as uuidv4 } from
|
|
4
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
5
5
|
|
|
6
6
|
import { ArrayDecoder } from '@simonbackx/simple-encoding';
|
|
7
7
|
import { QueueHandler } from '@stamhoofd/queues';
|
|
@@ -9,112 +9,112 @@ import { sendEmailTemplate } from '../helpers/EmailBuilder';
|
|
|
9
9
|
import { Document, Group, Organization, User } from './';
|
|
10
10
|
|
|
11
11
|
export class Registration extends Model {
|
|
12
|
-
static table =
|
|
12
|
+
static table = 'registrations';
|
|
13
13
|
|
|
14
14
|
@column({
|
|
15
|
-
primary: true, type:
|
|
15
|
+
primary: true, type: 'string', beforeSave(value) {
|
|
16
16
|
return value ?? uuidv4();
|
|
17
|
-
}
|
|
17
|
+
},
|
|
18
18
|
})
|
|
19
19
|
id!: string;
|
|
20
20
|
|
|
21
|
-
@column({ type:
|
|
21
|
+
@column({ type: 'string' })
|
|
22
22
|
memberId: string;
|
|
23
23
|
|
|
24
|
-
@column({ type:
|
|
25
|
-
organizationId: string
|
|
24
|
+
@column({ type: 'string' })
|
|
25
|
+
organizationId: string;
|
|
26
26
|
|
|
27
|
-
@column({ type:
|
|
27
|
+
@column({ type: 'string' })
|
|
28
28
|
periodId: string;
|
|
29
29
|
|
|
30
|
-
@column({ type:
|
|
30
|
+
@column({ type: 'string', foreignKey: Registration.group })
|
|
31
31
|
groupId: string;
|
|
32
|
-
|
|
33
|
-
@column({ type:
|
|
32
|
+
|
|
33
|
+
@column({ type: 'json', decoder: GroupPrice })
|
|
34
34
|
groupPrice: GroupPrice;
|
|
35
35
|
|
|
36
|
-
@column({ type:
|
|
36
|
+
@column({ type: 'json', decoder: new ArrayDecoder(RegisterItemOption) })
|
|
37
37
|
options: RegisterItemOption[] = [];
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* @deprecated
|
|
41
41
|
*/
|
|
42
|
-
@column({ type:
|
|
43
|
-
paymentId: string | null = null
|
|
42
|
+
@column({ type: 'string', nullable: true })
|
|
43
|
+
paymentId: string | null = null;
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
46
|
* @deprecated
|
|
47
47
|
*/
|
|
48
|
-
@column({ type:
|
|
48
|
+
@column({ type: 'integer' })
|
|
49
49
|
cycle: number = 0;
|
|
50
50
|
|
|
51
|
-
@column({ type:
|
|
51
|
+
@column({ type: 'integer', nullable: true })
|
|
52
52
|
price: number | null = null;
|
|
53
53
|
|
|
54
54
|
@column({
|
|
55
|
-
type:
|
|
55
|
+
type: 'datetime', beforeSave(old?: any) {
|
|
56
56
|
if (old !== undefined) {
|
|
57
57
|
return old;
|
|
58
58
|
}
|
|
59
|
-
const date = new Date()
|
|
60
|
-
date.setMilliseconds(0)
|
|
61
|
-
return date
|
|
62
|
-
}
|
|
59
|
+
const date = new Date();
|
|
60
|
+
date.setMilliseconds(0);
|
|
61
|
+
return date;
|
|
62
|
+
},
|
|
63
63
|
})
|
|
64
|
-
createdAt: Date
|
|
64
|
+
createdAt: Date;
|
|
65
65
|
|
|
66
66
|
@column({
|
|
67
|
-
type:
|
|
68
|
-
const date = new Date()
|
|
69
|
-
date.setMilliseconds(0)
|
|
70
|
-
return date
|
|
67
|
+
type: 'datetime', beforeSave() {
|
|
68
|
+
const date = new Date();
|
|
69
|
+
date.setMilliseconds(0);
|
|
70
|
+
return date;
|
|
71
71
|
},
|
|
72
|
-
skipUpdate: true
|
|
72
|
+
skipUpdate: true,
|
|
73
73
|
})
|
|
74
|
-
updatedAt: Date
|
|
74
|
+
updatedAt: Date;
|
|
75
75
|
|
|
76
|
-
@column({ type:
|
|
77
|
-
registeredAt: Date | null = null
|
|
76
|
+
@column({ type: 'datetime', nullable: true })
|
|
77
|
+
registeredAt: Date | null = null;
|
|
78
78
|
|
|
79
|
-
@column({ type:
|
|
80
|
-
reservedUntil: Date | null = null
|
|
79
|
+
@column({ type: 'datetime', nullable: true })
|
|
80
|
+
reservedUntil: Date | null = null;
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
83
|
* @deprecated - replaced by group type
|
|
84
84
|
*/
|
|
85
|
-
@column({ type:
|
|
86
|
-
waitingList = false
|
|
85
|
+
@column({ type: 'boolean' })
|
|
86
|
+
waitingList = false;
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* When a registration is on the waiting list or is invite only, set this to true to allow the user to
|
|
90
90
|
* register normally.
|
|
91
91
|
*/
|
|
92
|
-
@column({ type:
|
|
93
|
-
canRegister = false
|
|
92
|
+
@column({ type: 'boolean' })
|
|
93
|
+
canRegister = false;
|
|
94
94
|
|
|
95
|
-
@column({ type:
|
|
96
|
-
deactivatedAt: Date | null = null
|
|
95
|
+
@column({ type: 'datetime', nullable: true })
|
|
96
|
+
deactivatedAt: Date | null = null;
|
|
97
97
|
|
|
98
98
|
/**
|
|
99
99
|
* Part of price that is paid
|
|
100
100
|
*/
|
|
101
|
-
@column({ type:
|
|
102
|
-
pricePaid = 0
|
|
101
|
+
@column({ type: 'integer' })
|
|
102
|
+
pricePaid = 0;
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
105
|
* Set to null if no reservations are made, to help faster querying
|
|
106
106
|
*/
|
|
107
|
-
@column({ type:
|
|
108
|
-
stockReservations: StockReservation[] = []
|
|
107
|
+
@column({ type: 'json', decoder: new ArrayDecoder(StockReservation), nullable: true })
|
|
108
|
+
stockReservations: StockReservation[] = [];
|
|
109
109
|
|
|
110
|
-
static group: ManyToOneRelation<
|
|
110
|
+
static group: ManyToOneRelation<'group', import('./Group').Group>;
|
|
111
111
|
|
|
112
|
-
getStructure(this: Registration & {group: import('./Group').Group}) {
|
|
112
|
+
getStructure(this: Registration & { group: import('./Group').Group }) {
|
|
113
113
|
return RegistrationStructure.create({
|
|
114
114
|
...this,
|
|
115
115
|
group: this.group.getStructure(),
|
|
116
|
-
price: this.price ?? 0
|
|
117
|
-
})
|
|
116
|
+
price: this.price ?? 0,
|
|
117
|
+
});
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
/**
|
|
@@ -122,21 +122,21 @@ export class Registration extends Model {
|
|
|
122
122
|
*/
|
|
123
123
|
static async updateOutstandingBalance(registrationIds: string[] | 'all', organizationId?: string) {
|
|
124
124
|
if (registrationIds !== 'all' && registrationIds.length == 0) {
|
|
125
|
-
return
|
|
125
|
+
return;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
const params: any[] = []
|
|
129
|
-
let firstWhere = ''
|
|
130
|
-
let secondWhere = ''
|
|
128
|
+
const params: any[] = [];
|
|
129
|
+
let firstWhere = '';
|
|
130
|
+
let secondWhere = '';
|
|
131
131
|
|
|
132
132
|
if (registrationIds !== 'all') {
|
|
133
|
-
firstWhere = ` AND registrationId IN (?)
|
|
134
|
-
params.push(registrationIds)
|
|
133
|
+
firstWhere = ` AND registrationId IN (?)`;
|
|
134
|
+
params.push(registrationIds);
|
|
135
135
|
|
|
136
|
-
secondWhere = `WHERE registrations.id IN (?)
|
|
137
|
-
params.push(registrationIds)
|
|
136
|
+
secondWhere = `WHERE registrations.id IN (?)`;
|
|
137
|
+
params.push(registrationIds);
|
|
138
138
|
}
|
|
139
|
-
|
|
139
|
+
|
|
140
140
|
const query = `UPDATE
|
|
141
141
|
registrations
|
|
142
142
|
LEFT JOIN (
|
|
@@ -151,12 +151,12 @@ export class Registration extends Model {
|
|
|
151
151
|
registrationId
|
|
152
152
|
) i ON i.registrationId = registrations.id
|
|
153
153
|
SET registrations.price = coalesce(i.price, 0), registrations.pricePaid = coalesce(i.pricePaid, 0)
|
|
154
|
-
${secondWhere}
|
|
155
|
-
|
|
156
|
-
await Database.update(query, params)
|
|
154
|
+
${secondWhere}`;
|
|
155
|
+
|
|
156
|
+
await Database.update(query, params);
|
|
157
157
|
|
|
158
158
|
if (registrationIds !== 'all' && organizationId) {
|
|
159
|
-
await Document.updateForRegistrations(registrationIds, organizationId)
|
|
159
|
+
await Document.updateForRegistrations(registrationIds, organizationId);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -168,67 +168,68 @@ export class Registration extends Model {
|
|
|
168
168
|
const query = `
|
|
169
169
|
SELECT COUNT(DISTINCT \`${Registration.table}\`.memberId) as c FROM \`${Registration.table}\`
|
|
170
170
|
JOIN \`groups\` ON \`groups\`.id = \`${Registration.table}\`.groupId
|
|
171
|
-
WHERE \`groups\`.organizationId = ? AND \`${Registration.table}\`.cycle = \`groups\`.cycle AND \`groups\`.deletedAt is null AND \`${Registration.table}\`.registeredAt is not null AND \`${Registration.table}\`.deactivatedAt is null
|
|
172
|
-
|
|
173
|
-
const [results] = await Database.select(query, [organizationId])
|
|
171
|
+
WHERE \`groups\`.organizationId = ? AND \`${Registration.table}\`.cycle = \`groups\`.cycle AND \`groups\`.deletedAt is null AND \`${Registration.table}\`.registeredAt is not null AND \`${Registration.table}\`.deactivatedAt is null`;
|
|
172
|
+
|
|
173
|
+
const [results] = await Database.select(query, [organizationId]);
|
|
174
174
|
const count = results[0]['']['c'];
|
|
175
175
|
|
|
176
176
|
if (Number.isInteger(count)) {
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
|
|
177
|
+
return count as number;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.error('Unexpected result for occupancy', results);
|
|
181
|
+
throw new Error('Query failed');
|
|
181
182
|
}
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
async deactivate() {
|
|
185
186
|
if (this.deactivatedAt !== null) {
|
|
186
|
-
return
|
|
187
|
+
return;
|
|
187
188
|
}
|
|
188
189
|
|
|
189
190
|
// Clear the registration
|
|
190
|
-
this.deactivatedAt = new Date()
|
|
191
|
-
await this.save()
|
|
192
|
-
this.scheduleStockUpdate()
|
|
193
|
-
|
|
194
|
-
const {Member} = await import('./Member');
|
|
195
|
-
await Member.updateMembershipsForId(this.memberId)
|
|
191
|
+
this.deactivatedAt = new Date();
|
|
192
|
+
await this.save();
|
|
193
|
+
this.scheduleStockUpdate();
|
|
194
|
+
|
|
195
|
+
const { Member } = await import('./Member');
|
|
196
|
+
await Member.updateMembershipsForId(this.memberId);
|
|
196
197
|
}
|
|
197
198
|
|
|
198
|
-
async markValid(this: Registration, options?: {skipEmail?: boolean}) {
|
|
199
|
+
async markValid(this: Registration, options?: { skipEmail?: boolean }) {
|
|
199
200
|
if (this.registeredAt !== null && this.deactivatedAt === null) {
|
|
200
201
|
await this.save();
|
|
201
202
|
return false;
|
|
202
203
|
}
|
|
203
204
|
|
|
204
|
-
this.reservedUntil = null
|
|
205
|
-
this.registeredAt =
|
|
206
|
-
this.deactivatedAt = null
|
|
207
|
-
this.canRegister = false
|
|
205
|
+
this.reservedUntil = null;
|
|
206
|
+
this.registeredAt = this.registeredAt ?? new Date();
|
|
207
|
+
this.deactivatedAt = null;
|
|
208
|
+
this.canRegister = false;
|
|
208
209
|
await this.save();
|
|
209
|
-
this.scheduleStockUpdate()
|
|
210
|
+
this.scheduleStockUpdate();
|
|
210
211
|
|
|
211
|
-
const {Member} = await import('./Member');
|
|
212
|
-
await Member.updateMembershipsForId(this.memberId)
|
|
212
|
+
const { Member } = await import('./Member');
|
|
213
|
+
await Member.updateMembershipsForId(this.memberId);
|
|
213
214
|
|
|
214
215
|
if (options?.skipEmail !== true) {
|
|
215
216
|
await this.sendEmailTemplate({
|
|
216
|
-
type: EmailTemplateType.RegistrationConfirmation
|
|
217
|
+
type: EmailTemplateType.RegistrationConfirmation,
|
|
217
218
|
});
|
|
218
219
|
}
|
|
219
220
|
|
|
220
221
|
const member = await Member.getByID(this.memberId);
|
|
221
222
|
if (member) {
|
|
222
|
-
const registrationMemberRelation = new ManyToOneRelation(Member,
|
|
223
|
-
registrationMemberRelation.foreignKey = Member.registrations.foreignKey
|
|
224
|
-
await Document.updateForRegistration(this.setRelation(registrationMemberRelation, member))
|
|
223
|
+
const registrationMemberRelation = new ManyToOneRelation(Member, 'member');
|
|
224
|
+
registrationMemberRelation.foreignKey = Member.registrations.foreignKey;
|
|
225
|
+
await Document.updateForRegistration(this.setRelation(registrationMemberRelation, member));
|
|
225
226
|
}
|
|
226
227
|
|
|
227
228
|
return true;
|
|
228
229
|
}
|
|
229
230
|
|
|
230
231
|
async getRecipients(organization: Organization, group: import('./').Group) {
|
|
231
|
-
const {Member} = await import('./Member');
|
|
232
|
+
const { Member } = await import('./Member');
|
|
232
233
|
|
|
233
234
|
const member = await Member.getWithRegistrations(this.memberId);
|
|
234
235
|
|
|
@@ -243,72 +244,72 @@ export class Registration extends Model {
|
|
|
243
244
|
userId: user.id,
|
|
244
245
|
replacements: [
|
|
245
246
|
Replacement.create({
|
|
246
|
-
token:
|
|
247
|
+
token: 'firstName',
|
|
247
248
|
value: member.details.firstName,
|
|
248
249
|
}),
|
|
249
250
|
Replacement.create({
|
|
250
|
-
token:
|
|
251
|
+
token: 'lastName',
|
|
251
252
|
value: member.details.lastName,
|
|
252
253
|
}),
|
|
253
254
|
Replacement.create({
|
|
254
|
-
token:
|
|
255
|
+
token: 'firstNameMember',
|
|
255
256
|
value: member.details.firstName,
|
|
256
257
|
}),
|
|
257
258
|
Replacement.create({
|
|
258
|
-
token:
|
|
259
|
+
token: 'lastNameMember',
|
|
259
260
|
value: member.details.lastName,
|
|
260
261
|
}),
|
|
261
262
|
Replacement.create({
|
|
262
|
-
token:
|
|
263
|
-
value: user.email
|
|
263
|
+
token: 'email',
|
|
264
|
+
value: user.email,
|
|
264
265
|
}),
|
|
265
266
|
Replacement.create({
|
|
266
|
-
token:
|
|
267
|
-
value:
|
|
267
|
+
token: 'registerUrl',
|
|
268
|
+
value: 'https://' + organization.getHost(),
|
|
268
269
|
}),
|
|
269
270
|
Replacement.create({
|
|
270
|
-
token:
|
|
271
|
-
value: organization.name
|
|
271
|
+
token: 'organizationName',
|
|
272
|
+
value: organization.name,
|
|
272
273
|
}),
|
|
273
274
|
Replacement.create({
|
|
274
|
-
token:
|
|
275
|
-
value: group.settings.name
|
|
275
|
+
token: 'groupName',
|
|
276
|
+
value: group.settings.name,
|
|
276
277
|
}),
|
|
277
278
|
Replacement.create({
|
|
278
|
-
token:
|
|
279
|
-
value:
|
|
280
|
-
html: user.hasAccount() ? `<p class="description"><em>Je kan op het ledenportaal inloggen met <strong>${Formatter.escapeHtml(user.email)}</strong></em></p>` : `<p class="description"><em>Je kan op het ledenportaal een nieuw account aanmaken met het e-mailadres <strong>${Formatter.escapeHtml(user.email)}</strong>, dan krijg je automatisch toegang tot alle bestaande gegevens.</em></p
|
|
279
|
+
token: 'loginDetails',
|
|
280
|
+
value: '',
|
|
281
|
+
html: user.hasAccount() ? `<p class="description"><em>Je kan op het ledenportaal inloggen met <strong>${Formatter.escapeHtml(user.email)}</strong></em></p>` : `<p class="description"><em>Je kan op het ledenportaal een nieuw account aanmaken met het e-mailadres <strong>${Formatter.escapeHtml(user.email)}</strong>, dan krijg je automatisch toegang tot alle bestaande gegevens.</em></p>`,
|
|
281
282
|
}),
|
|
282
|
-
]
|
|
283
|
+
],
|
|
283
284
|
}));
|
|
284
285
|
}
|
|
285
286
|
|
|
286
287
|
async sendEmailTemplate(data: {
|
|
287
|
-
type: EmailTemplateType
|
|
288
|
+
type: EmailTemplateType;
|
|
288
289
|
}) {
|
|
289
|
-
const Group = (await import('./')).Group
|
|
290
|
+
const Group = (await import('./')).Group;
|
|
290
291
|
const group = await Group.getByID(this.groupId);
|
|
291
292
|
|
|
292
293
|
if (!group) {
|
|
293
|
-
return
|
|
294
|
+
return;
|
|
294
295
|
}
|
|
295
296
|
|
|
296
297
|
const organization = await Organization.getByID(group.organizationId);
|
|
297
298
|
if (!organization) {
|
|
298
|
-
return
|
|
299
|
+
return;
|
|
299
300
|
}
|
|
300
301
|
|
|
301
|
-
const recipients = await this.getRecipients(organization, group)
|
|
302
|
+
const recipients = await this.getRecipients(organization, group);
|
|
302
303
|
|
|
303
304
|
// Create e-mail builder
|
|
304
305
|
await sendEmailTemplate(organization, {
|
|
305
306
|
template: {
|
|
306
|
-
type: data.type,
|
|
307
|
-
group
|
|
307
|
+
type: data.type,
|
|
308
|
+
group,
|
|
308
309
|
},
|
|
309
310
|
recipients,
|
|
310
|
-
type:
|
|
311
|
-
})
|
|
311
|
+
type: 'transactional',
|
|
312
|
+
});
|
|
312
313
|
}
|
|
313
314
|
|
|
314
315
|
static async sendTransferEmail(user: User, organization: Organization, payment: import('./').Payment) {
|
|
@@ -323,69 +324,69 @@ export class Registration extends Model {
|
|
|
323
324
|
userId: user.id,
|
|
324
325
|
replacements: [
|
|
325
326
|
Replacement.create({
|
|
326
|
-
token:
|
|
327
|
-
value: Formatter.price(payment.price)
|
|
327
|
+
token: 'priceToPay',
|
|
328
|
+
value: Formatter.price(payment.price),
|
|
328
329
|
}),
|
|
329
330
|
Replacement.create({
|
|
330
|
-
token:
|
|
331
|
-
value: PaymentMethodHelper.getName(payment.method ?? PaymentMethod.Unknown)
|
|
331
|
+
token: 'paymentMethod',
|
|
332
|
+
value: PaymentMethodHelper.getName(payment.method ?? PaymentMethod.Unknown),
|
|
332
333
|
}),
|
|
333
334
|
Replacement.create({
|
|
334
|
-
token:
|
|
335
|
-
value: (payment.transferDescription ??
|
|
335
|
+
token: 'transferDescription',
|
|
336
|
+
value: (payment.transferDescription ?? ''),
|
|
336
337
|
}),
|
|
337
338
|
Replacement.create({
|
|
338
|
-
token:
|
|
339
|
-
value: payment.transferSettings?.iban ??
|
|
339
|
+
token: 'transferBankAccount',
|
|
340
|
+
value: payment.transferSettings?.iban ?? '',
|
|
340
341
|
}),
|
|
341
342
|
Replacement.create({
|
|
342
|
-
token:
|
|
343
|
-
value: payment.transferSettings?.creditor ?? organization.name
|
|
343
|
+
token: 'transferBankCreditor',
|
|
344
|
+
value: payment.transferSettings?.creditor ?? organization.name,
|
|
344
345
|
}),
|
|
345
346
|
Replacement.create({
|
|
346
|
-
token:
|
|
347
|
-
value:
|
|
348
|
-
html: paymentGeneral.getDetailsHTMLTable()
|
|
347
|
+
token: 'overviewTable',
|
|
348
|
+
value: '',
|
|
349
|
+
html: paymentGeneral.getDetailsHTMLTable(),
|
|
349
350
|
}),
|
|
350
351
|
Replacement.create({
|
|
351
|
-
token:
|
|
352
|
-
value:
|
|
352
|
+
token: 'overviewContext',
|
|
353
|
+
value: 'Inschrijving van ' + paymentGeneral.memberNames,
|
|
353
354
|
}),
|
|
354
355
|
Replacement.create({
|
|
355
|
-
token:
|
|
356
|
-
value: paymentGeneral.memberNames
|
|
356
|
+
token: 'memberNames',
|
|
357
|
+
value: paymentGeneral.memberNames,
|
|
357
358
|
}),
|
|
358
359
|
Replacement.create({
|
|
359
|
-
token:
|
|
360
|
-
value:
|
|
361
|
-
html: paymentGeneral.getDetailsHTMLTable()
|
|
360
|
+
token: 'overviewTable',
|
|
361
|
+
value: '',
|
|
362
|
+
html: paymentGeneral.getDetailsHTMLTable(),
|
|
362
363
|
}),
|
|
363
364
|
Replacement.create({
|
|
364
|
-
token:
|
|
365
|
-
value:
|
|
366
|
-
html: paymentGeneral.getHTMLTable()
|
|
365
|
+
token: 'paymentTable',
|
|
366
|
+
value: '',
|
|
367
|
+
html: paymentGeneral.getHTMLTable(),
|
|
367
368
|
}),
|
|
368
369
|
Replacement.create({
|
|
369
|
-
token:
|
|
370
|
-
value:
|
|
370
|
+
token: 'registerUrl',
|
|
371
|
+
value: 'https://' + organization.getHost(),
|
|
371
372
|
}),
|
|
372
373
|
Replacement.create({
|
|
373
|
-
token:
|
|
374
|
-
value: organization.name
|
|
374
|
+
token: 'organizationName',
|
|
375
|
+
value: organization.name,
|
|
375
376
|
}),
|
|
376
377
|
Replacement.create({
|
|
377
|
-
token:
|
|
378
|
-
value:
|
|
379
|
-
html: user.hasAccount() ? `<p class="description"><em>Je kan op het ledenportaal inloggen met <strong>${Formatter.escapeHtml(user.email)}</strong></em></p>` : `<p class="description"><em>Je kan op het ledenportaal een nieuw account aanmaken met het e-mailadres <strong>${Formatter.escapeHtml(user.email)}</strong>, dan krijg je automatisch toegang tot alle bestaande gegevens.</em></p
|
|
380
|
-
})
|
|
381
|
-
]
|
|
382
|
-
})
|
|
378
|
+
token: 'loginDetails',
|
|
379
|
+
value: '',
|
|
380
|
+
html: user.hasAccount() ? `<p class="description"><em>Je kan op het ledenportaal inloggen met <strong>${Formatter.escapeHtml(user.email)}</strong></em></p>` : `<p class="description"><em>Je kan op het ledenportaal een nieuw account aanmaken met het e-mailadres <strong>${Formatter.escapeHtml(user.email)}</strong>, dan krijg je automatisch toegang tot alle bestaande gegevens.</em></p>`,
|
|
381
|
+
}),
|
|
382
|
+
],
|
|
383
|
+
}),
|
|
383
384
|
];
|
|
384
385
|
|
|
385
|
-
let group: Group|undefined|null = null;
|
|
386
|
+
let group: Group | undefined | null = null;
|
|
386
387
|
|
|
387
388
|
if (groupIds.length == 1) {
|
|
388
|
-
const Group = (await import('./')).Group
|
|
389
|
+
const Group = (await import('./')).Group;
|
|
389
390
|
group = await Group.getByID(groupIds[0]);
|
|
390
391
|
}
|
|
391
392
|
|
|
@@ -393,19 +394,17 @@ export class Registration extends Model {
|
|
|
393
394
|
await sendEmailTemplate(organization, {
|
|
394
395
|
template: {
|
|
395
396
|
type: EmailTemplateType.RegistrationTransferDetails,
|
|
396
|
-
group
|
|
397
|
+
group,
|
|
397
398
|
},
|
|
398
|
-
type:
|
|
399
|
-
recipients
|
|
400
|
-
})
|
|
399
|
+
type: 'transactional',
|
|
400
|
+
recipients,
|
|
401
|
+
});
|
|
401
402
|
}
|
|
402
403
|
|
|
403
404
|
shouldIncludeStock() {
|
|
404
|
-
return (this.registeredAt !== null && this.deactivatedAt === null) || this.canRegister || (this.reservedUntil && this.reservedUntil > new Date())
|
|
405
|
+
return (this.registeredAt !== null && this.deactivatedAt === null) || this.canRegister || (this.reservedUntil && this.reservedUntil > new Date());
|
|
405
406
|
}
|
|
406
407
|
|
|
407
|
-
|
|
408
|
-
|
|
409
408
|
/**
|
|
410
409
|
* Adds or removes the order to the stock of the webshop (if it wasn't already included). If amounts were changed, only those
|
|
411
410
|
* changes will get added
|
|
@@ -415,20 +414,20 @@ export class Registration extends Model {
|
|
|
415
414
|
scheduleStockUpdate() {
|
|
416
415
|
const id = this.id;
|
|
417
416
|
|
|
418
|
-
QueueHandler.cancel('registration-stock-update-'+id);
|
|
419
|
-
QueueHandler.schedule('registration-stock-update-'+id, async function(this: undefined) {
|
|
417
|
+
QueueHandler.cancel('registration-stock-update-' + id);
|
|
418
|
+
QueueHandler.schedule('registration-stock-update-' + id, async function (this: undefined) {
|
|
420
419
|
const updated = await Registration.getByID(id);
|
|
421
420
|
|
|
422
421
|
if (!updated) {
|
|
423
422
|
return;
|
|
424
423
|
}
|
|
425
|
-
|
|
424
|
+
|
|
426
425
|
// Start with clearing all the stock reservations we've already made
|
|
427
426
|
if (updated.stockReservations) {
|
|
428
427
|
const groupIds = Formatter.uniqueArray(updated.stockReservations.flatMap(r => r.objectType === 'Group' ? [r.objectId] : []));
|
|
429
428
|
for (const groupId of groupIds) {
|
|
430
429
|
const stocks = StockReservation.filter('Group', groupId, updated.stockReservations);
|
|
431
|
-
|
|
430
|
+
|
|
432
431
|
// Technically we don't need to await this, but okay...
|
|
433
432
|
await Group.freeStockReservations(groupId, stocks);
|
|
434
433
|
}
|
|
@@ -440,16 +439,16 @@ export class Registration extends Model {
|
|
|
440
439
|
StockReservation.create({
|
|
441
440
|
objectId: updated.groupPrice.id,
|
|
442
441
|
objectType: 'GroupPrice',
|
|
443
|
-
amount: 1
|
|
442
|
+
amount: 1,
|
|
444
443
|
}),
|
|
445
|
-
...updated.options.map(o => {
|
|
444
|
+
...updated.options.map((o) => {
|
|
446
445
|
return StockReservation.create({
|
|
447
446
|
objectId: o.option.id,
|
|
448
447
|
objectType: 'GroupOption',
|
|
449
|
-
amount: o.amount
|
|
450
|
-
})
|
|
451
|
-
})
|
|
452
|
-
]
|
|
448
|
+
amount: o.amount,
|
|
449
|
+
});
|
|
450
|
+
}),
|
|
451
|
+
];
|
|
453
452
|
|
|
454
453
|
await Group.applyStockReservations(updated.groupId, groupStockReservations);
|
|
455
454
|
|
|
@@ -459,17 +458,17 @@ export class Registration extends Model {
|
|
|
459
458
|
objectId: updated.groupId,
|
|
460
459
|
objectType: 'Group',
|
|
461
460
|
amount: 1,
|
|
462
|
-
children: groupStockReservations
|
|
463
|
-
})
|
|
461
|
+
children: groupStockReservations,
|
|
462
|
+
}),
|
|
464
463
|
];
|
|
465
464
|
await updated.save();
|
|
466
|
-
}
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
467
|
if (updated.stockReservations.length) {
|
|
468
468
|
updated.stockReservations = [];
|
|
469
469
|
await updated.save();
|
|
470
470
|
}
|
|
471
471
|
}
|
|
472
|
-
|
|
473
|
-
}).catch(console.error)
|
|
472
|
+
}).catch(console.error);
|
|
474
473
|
}
|
|
475
474
|
}
|