@stamhoofd/models 2.81.0 → 2.83.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/EventNotificationTypeFactory.js +1 -1
- package/dist/src/factories/EventNotificationTypeFactory.js.map +1 -1
- package/dist/src/factories/GroupFactory.d.ts.map +1 -1
- package/dist/src/factories/GroupFactory.js +1 -1
- package/dist/src/factories/GroupFactory.js.map +1 -1
- package/dist/src/factories/RecordCategoryFactory.d.ts.map +1 -1
- package/dist/src/factories/RecordCategoryFactory.js +1 -1
- package/dist/src/factories/RecordCategoryFactory.js.map +1 -1
- 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/helpers/DNSValidator.js +8 -8
- package/dist/src/helpers/DNSValidator.js.map +1 -1
- package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
- package/dist/src/helpers/EmailBuilder.js +10 -7
- package/dist/src/helpers/EmailBuilder.js.map +1 -1
- package/dist/src/helpers/GroupBuilder.js +23 -23
- package/dist/src/helpers/GroupBuilder.js.map +1 -1
- package/dist/src/helpers/MemberMerger.test.js +4 -4
- package/dist/src/helpers/MemberMerger.test.js.map +1 -1
- package/dist/src/helpers/RateLimiter.d.ts +6 -5
- package/dist/src/helpers/RateLimiter.d.ts.map +1 -1
- package/dist/src/helpers/RateLimiter.js +13 -6
- package/dist/src/helpers/RateLimiter.js.map +1 -1
- package/dist/src/migrations/1743070458-default-email-template-orders.sql +2 -0
- package/dist/src/models/DocumentTemplate.js +3 -3
- package/dist/src/models/DocumentTemplate.js.map +1 -1
- package/dist/src/models/Email.js +10 -10
- package/dist/src/models/Email.js.map +1 -1
- package/dist/src/models/EmailVerificationCode.js +2 -2
- package/dist/src/models/EmailVerificationCode.js.map +1 -1
- package/dist/src/models/Event.d.ts.map +1 -1
- package/dist/src/models/Event.js +1 -1
- package/dist/src/models/Event.js.map +1 -1
- package/dist/src/models/Image.d.ts +3 -1
- package/dist/src/models/Image.d.ts.map +1 -1
- package/dist/src/models/Image.js +12 -2
- package/dist/src/models/Image.js.map +1 -1
- package/dist/src/models/MemberPlatformMembership.js +5 -5
- package/dist/src/models/MemberPlatformMembership.js.map +1 -1
- package/dist/src/models/MollieToken.js +1 -1
- package/dist/src/models/MollieToken.js.map +1 -1
- package/dist/src/models/Order.js +3 -3
- package/dist/src/models/Order.js.map +1 -1
- package/dist/src/models/Organization.d.ts.map +1 -1
- package/dist/src/models/Organization.js +4 -4
- package/dist/src/models/Organization.js.map +1 -1
- package/dist/src/models/PayconiqPayment.js +1 -1
- package/dist/src/models/PayconiqPayment.js.map +1 -1
- package/dist/src/models/Registration.js +2 -2
- package/dist/src/models/Registration.js.map +1 -1
- package/dist/src/models/STPackage.js +3 -3
- package/dist/src/models/STPackage.js.map +1 -1
- package/dist/src/models/Token.d.ts +0 -2
- package/dist/src/models/Token.d.ts.map +1 -1
- package/dist/src/models/Token.js +2 -26
- package/dist/src/models/Token.js.map +1 -1
- package/dist/src/models/User.js +2 -2
- package/dist/src/models/User.js.map +1 -1
- package/dist/src/models/Webshop.d.ts.map +1 -1
- package/dist/src/models/Webshop.js +3 -0
- package/dist/src/models/Webshop.js.map +1 -1
- package/dist/src/models/addresses/PostalCode.js +1 -1
- package/dist/src/models/addresses/PostalCode.js.map +1 -1
- package/package.json +2 -2
- package/src/factories/EventNotificationTypeFactory.ts +1 -1
- package/src/factories/GroupFactory.ts +2 -2
- package/src/factories/RecordCategoryFactory.ts +2 -2
- package/src/factories/RecordFactory.ts +2 -2
- package/src/helpers/DNSValidator.ts +8 -8
- package/src/helpers/EmailBuilder.ts +11 -7
- package/src/helpers/GroupBuilder.ts +24 -24
- package/src/helpers/MemberMerger.test.ts +5 -4
- package/src/helpers/RateLimiter.ts +18 -9
- package/src/migrations/1743070458-default-email-template-orders.sql +2 -0
- package/src/models/DocumentTemplate.ts +3 -3
- package/src/models/Email.ts +10 -10
- package/src/models/EmailVerificationCode.ts +2 -2
- package/src/models/Event.ts +2 -2
- package/src/models/Image.ts +14 -2
- package/src/models/MemberPlatformMembership.ts +5 -5
- package/src/models/MollieToken.ts +1 -1
- package/src/models/Order.ts +3 -3
- package/src/models/Organization.ts +5 -5
- package/src/models/PayconiqPayment.ts +1 -1
- package/src/models/Registration.ts +2 -2
- package/src/models/STPackage.ts +3 -3
- package/src/models/Token.ts +2 -26
- package/src/models/User.ts +2 -2
- package/src/models/Webshop.ts +4 -0
- package/src/models/addresses/PostalCode.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/models/addresses/PostalCode.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/models/addresses/PostalCode.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/models",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.83.0",
|
|
4
4
|
"main": "./dist/src/index.js",
|
|
5
5
|
"types": "./dist/src/index.d.ts",
|
|
6
6
|
"license": "UNLICENCED",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"publishConfig": {
|
|
31
31
|
"access": "public"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "5f116184aad8965d9deda1902e73af7feefa5721"
|
|
34
34
|
}
|
|
@@ -11,7 +11,7 @@ class Options {
|
|
|
11
11
|
export class EventNotificationTypeFactory extends Factory<Options, EventNotificationType> {
|
|
12
12
|
async create(): Promise<EventNotificationType> {
|
|
13
13
|
const eventType = EventNotificationType.create({
|
|
14
|
-
title: this.options.title ?? ('
|
|
14
|
+
title: this.options.title ?? ($t(`506e15b4-622c-4167-a98a-98fbc4404bfc`) + ' ' + (new Date().getTime() + Math.floor(Math.random() * 999999))),
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
eventType.recordCategories = this.options.recordCategories ?? [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Factory } from '@simonbackx/simple-database';
|
|
2
|
-
import { GroupPrice, GroupSettings, GroupType, ReduceablePrice } from '@stamhoofd/structures';
|
|
2
|
+
import { GroupPrice, GroupSettings, GroupType, ReduceablePrice, TranslatedString } from '@stamhoofd/structures';
|
|
3
3
|
|
|
4
4
|
import { RegistrationPeriod } from '../models';
|
|
5
5
|
import { Group } from '../models/Group';
|
|
@@ -32,7 +32,7 @@ export class GroupFactory extends Factory<Options, Group> {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
group.settings = GroupSettings.create({
|
|
35
|
-
name: 'Group name',
|
|
35
|
+
name: new TranslatedString('Group name'),
|
|
36
36
|
startDate: new Date(new Date().getTime() - 10 * 1000),
|
|
37
37
|
endDate: new Date(new Date().getTime() + 10 * 1000),
|
|
38
38
|
registrationStartDate: new Date(new Date().getTime() - 10 * 1000),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Factory } from '@simonbackx/simple-database';
|
|
2
|
-
import { RecordCategory, RecordSettings,
|
|
2
|
+
import { RecordCategory, RecordSettings, TranslatedString } from '@stamhoofd/structures';
|
|
3
3
|
import { RecordFactory, RecordOptions } from './RecordFactory';
|
|
4
4
|
|
|
5
5
|
class Options {
|
|
@@ -16,7 +16,7 @@ export class RecordCategoryFactory extends Factory<Options, RecordCategory> {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
return RecordCategory.create({
|
|
19
|
-
name: 'Record category ' + Math.floor(Math.random() * 10000),
|
|
19
|
+
name: TranslatedString.create('Record category ' + Math.floor(Math.random() * 10000)),
|
|
20
20
|
records,
|
|
21
21
|
});
|
|
22
22
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Factory } from '@simonbackx/simple-database';
|
|
2
|
-
import { RecordSettings, RecordType } from '@stamhoofd/structures';
|
|
2
|
+
import { RecordSettings, RecordType, TranslatedString } from '@stamhoofd/structures';
|
|
3
3
|
|
|
4
4
|
export class RecordOptions {
|
|
5
5
|
type: RecordType;
|
|
@@ -10,7 +10,7 @@ export class RecordFactory extends Factory<RecordOptions, RecordSettings> {
|
|
|
10
10
|
create(): Promise<RecordSettings> {
|
|
11
11
|
return Promise.resolve(
|
|
12
12
|
RecordSettings.create({
|
|
13
|
-
name: 'Record name ' + Math.floor(Math.random() * 10000),
|
|
13
|
+
name: TranslatedString.create('Record name ' + Math.floor(Math.random() * 10000)),
|
|
14
14
|
type: this.options.type,
|
|
15
15
|
required: this.options.required ?? (this.options.type !== RecordType.Checkbox),
|
|
16
16
|
}),
|
|
@@ -30,7 +30,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
30
30
|
record.errors = new SimpleErrors(new SimpleError({
|
|
31
31
|
code: 'not_found',
|
|
32
32
|
message: '',
|
|
33
|
-
human:
|
|
33
|
+
human: $t(`50c67afd-9f29-4634-bbb6-91a6083d7b4b`) + ' ' + record.name + ' ' + $t(`ac374e9b-f59d-4faa-8c12-f4984b798bdd`),
|
|
34
34
|
}));
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -42,7 +42,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
42
42
|
record.errors = new SimpleErrors(new SimpleError({
|
|
43
43
|
code: 'too_many_fields',
|
|
44
44
|
message: '',
|
|
45
|
-
human:
|
|
45
|
+
human: $t(`2cd9734f-c32b-4513-99b5-de749f12cb87`) + ' ' + record.name + $t(`4c66b760-cef1-47bc-899a-1ec5ec363560`),
|
|
46
46
|
}));
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
@@ -59,7 +59,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
59
59
|
record.errors = new SimpleErrors(new SimpleError({
|
|
60
60
|
code: 'wrong_value',
|
|
61
61
|
message: '',
|
|
62
|
-
human:
|
|
62
|
+
human: $t(`66fa2988-3bef-4e08-9ae8-da904007444e`) + ' ' + record.name + $t(`dbcdb363-81d4-4f74-a484-3f91b2a8bd3d`) + ' ' + addresses[0] + '.',
|
|
63
63
|
}));
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -82,7 +82,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
82
82
|
record.errors = new SimpleErrors(new SimpleError({
|
|
83
83
|
code: 'not_found',
|
|
84
84
|
message: '',
|
|
85
|
-
human:
|
|
85
|
+
human: $t(`55a44a06-c9da-4ba6-a142-9d223636f54b`) + ' ' + record.name + ' ' + $t(`ac374e9b-f59d-4faa-8c12-f4984b798bdd`),
|
|
86
86
|
}));
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -92,7 +92,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
92
92
|
record.errors = new SimpleErrors(new SimpleError({
|
|
93
93
|
code: 'too_many_fields',
|
|
94
94
|
message: '',
|
|
95
|
-
human:
|
|
95
|
+
human: $t(`f0a3b61f-a736-47f7-b893-1c8c61555b50`) + ' ' + record.name + $t(`4c66b760-cef1-47bc-899a-1ec5ec363560`),
|
|
96
96
|
}));
|
|
97
97
|
}
|
|
98
98
|
else {
|
|
@@ -109,7 +109,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
109
109
|
record.errors = new SimpleErrors(new SimpleError({
|
|
110
110
|
code: 'wrong_value',
|
|
111
111
|
message: '',
|
|
112
|
-
human:
|
|
112
|
+
human: $t(`3580661b-3a30-4f7f-bb7a-07dfe644957a`) + ' ' + record.name + $t(`dbcdb363-81d4-4f74-a484-3f91b2a8bd3d`) + ' ' + records[0].join(''),
|
|
113
113
|
}));
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -126,7 +126,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
126
126
|
record.errors = new SimpleErrors(new SimpleError({
|
|
127
127
|
code: 'not_found',
|
|
128
128
|
message: '',
|
|
129
|
-
human:
|
|
129
|
+
human: $t(`d6572dda-561a-4aeb-9d9b-1fc4f7a3e337`) + ' ' + record.name + ' ' + $t(`ac374e9b-f59d-4faa-8c12-f4984b798bdd`),
|
|
130
130
|
}));
|
|
131
131
|
}
|
|
132
132
|
}
|
|
@@ -136,7 +136,7 @@ export async function validateDNSRecords(dnsRecords: DNSRecord[], didRetry = fal
|
|
|
136
136
|
record.errors = new SimpleErrors(new SimpleError({
|
|
137
137
|
code: 'not_found',
|
|
138
138
|
message: '',
|
|
139
|
-
human:
|
|
139
|
+
human: $t(`8fdb686d-0a87-477c-a532-dac98afedf43`),
|
|
140
140
|
}));
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -276,7 +276,7 @@ export async function getEmailBuilder(organization: Organization | null, email:
|
|
|
276
276
|
new SimpleError({
|
|
277
277
|
code: 'email_hard_bounce',
|
|
278
278
|
message: 'Recipient has hard bounced',
|
|
279
|
-
human:
|
|
279
|
+
human: $t(`af49a569-ce88-48d9-ac37-81e594e16c03`),
|
|
280
280
|
}),
|
|
281
281
|
);
|
|
282
282
|
}
|
|
@@ -290,7 +290,7 @@ export async function getEmailBuilder(organization: Organization | null, email:
|
|
|
290
290
|
new SimpleError({
|
|
291
291
|
code: 'email_spam',
|
|
292
292
|
message: 'Recipient has marked as spam',
|
|
293
|
-
human:
|
|
293
|
+
human: $t(`e6523f56-397e-4127-8bf7-8396f6f25a62`),
|
|
294
294
|
}),
|
|
295
295
|
);
|
|
296
296
|
}
|
|
@@ -427,7 +427,7 @@ export async function fillRecipientReplacements(recipient: Recipient, options: {
|
|
|
427
427
|
Replacement.create({
|
|
428
428
|
token: 'loginDetails',
|
|
429
429
|
value: '',
|
|
430
|
-
html: recipientUser && recipientUser.hasAccount() ? `<p class="description"><em
|
|
430
|
+
html: recipientUser && recipientUser.hasAccount() ? `<p class="description"><em>${$t('2fa762f2-c061-4c40-83cb-6ddc3e5f0f7a')} <strong>${Formatter.escapeHtml(recipientUser.email)}</strong></em></p>` : `<p class="description"><em>${$t('c2af5148-15a7-44b1-aa3e-91cfc4c66013')} <strong>${Formatter.escapeHtml(recipient.email)}</strong>${$t('f3aa8253-d88e-41c7-8c98-ed477806c533')}</em></p>`,
|
|
431
431
|
}),
|
|
432
432
|
);
|
|
433
433
|
|
|
@@ -452,10 +452,14 @@ export async function fillRecipientReplacements(recipient: Recipient, options: {
|
|
|
452
452
|
}
|
|
453
453
|
|
|
454
454
|
if (from || replyTo) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
455
|
+
const fromAddress = replyTo?.email ?? from!.email;
|
|
456
|
+
|
|
457
|
+
if (fromAddress) {
|
|
458
|
+
recipient.replacements.push(Replacement.create({
|
|
459
|
+
token: 'fromAddress',
|
|
460
|
+
value: fromAddress,
|
|
461
|
+
}));
|
|
462
|
+
}
|
|
459
463
|
|
|
460
464
|
const name = replyTo?.name ?? from?.name;
|
|
461
465
|
if (name) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Group as GroupStruct, GroupCategory, GroupCategorySettings, GroupGenderType, GroupSettings, OrganizationGenderType, OrganizationType, OrganizationTypeHelper, UmbrellaOrganization } from '@stamhoofd/structures';
|
|
1
|
+
import { Group as GroupStruct, GroupCategory, GroupCategorySettings, GroupGenderType, GroupSettings, OrganizationGenderType, OrganizationType, OrganizationTypeHelper, UmbrellaOrganization, TranslatedString } from '@stamhoofd/structures';
|
|
2
2
|
import { Group, Organization } from '../models';
|
|
3
3
|
|
|
4
4
|
export class GroupBuilder {
|
|
@@ -84,7 +84,7 @@ export class GroupBuilder {
|
|
|
84
84
|
kapoenen.organizationId = this.organization.id;
|
|
85
85
|
kapoenen.periodId = this.organization.periodId;
|
|
86
86
|
kapoenen.settings = GroupSettings.create({
|
|
87
|
-
name: 'Kapoenen',
|
|
87
|
+
name: new TranslatedString('Kapoenen'),
|
|
88
88
|
genderType: mixedType,
|
|
89
89
|
startDate: this.organization.meta.defaultStartDate,
|
|
90
90
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -98,7 +98,7 @@ export class GroupBuilder {
|
|
|
98
98
|
jin.organizationId = this.organization.id;
|
|
99
99
|
jin.periodId = this.organization.periodId;
|
|
100
100
|
jin.settings = GroupSettings.create({
|
|
101
|
-
name: 'Jin',
|
|
101
|
+
name: new TranslatedString('Jin'),
|
|
102
102
|
genderType: mixedType,
|
|
103
103
|
startDate: this.organization.meta.defaultStartDate,
|
|
104
104
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -113,7 +113,7 @@ export class GroupBuilder {
|
|
|
113
113
|
wouters.organizationId = this.organization.id;
|
|
114
114
|
wouters.periodId = this.organization.periodId;
|
|
115
115
|
wouters.settings = GroupSettings.create({
|
|
116
|
-
name: 'Wouters',
|
|
116
|
+
name: new TranslatedString('Wouters'),
|
|
117
117
|
genderType: GroupGenderType.Mixed,
|
|
118
118
|
startDate: this.organization.meta.defaultStartDate,
|
|
119
119
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -127,7 +127,7 @@ export class GroupBuilder {
|
|
|
127
127
|
jonggivers.organizationId = this.organization.id;
|
|
128
128
|
jonggivers.periodId = this.organization.periodId;
|
|
129
129
|
jonggivers.settings = GroupSettings.create({
|
|
130
|
-
name: 'Jonggivers',
|
|
130
|
+
name: new TranslatedString('Jonggivers'),
|
|
131
131
|
genderType: GroupGenderType.Mixed,
|
|
132
132
|
startDate: this.organization.meta.defaultStartDate,
|
|
133
133
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -141,7 +141,7 @@ export class GroupBuilder {
|
|
|
141
141
|
givers.organizationId = this.organization.id;
|
|
142
142
|
givers.periodId = this.organization.periodId;
|
|
143
143
|
givers.settings = GroupSettings.create({
|
|
144
|
-
name: 'Givers',
|
|
144
|
+
name: new TranslatedString('Givers'),
|
|
145
145
|
genderType: GroupGenderType.Mixed,
|
|
146
146
|
startDate: this.organization.meta.defaultStartDate,
|
|
147
147
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -157,7 +157,7 @@ export class GroupBuilder {
|
|
|
157
157
|
wouters.organizationId = this.organization.id;
|
|
158
158
|
wouters.periodId = this.organization.periodId;
|
|
159
159
|
wouters.settings = GroupSettings.create({
|
|
160
|
-
name: 'Kabouters',
|
|
160
|
+
name: new TranslatedString('Kabouters'),
|
|
161
161
|
genderType: GroupGenderType.OnlyFemale,
|
|
162
162
|
startDate: this.organization.meta.defaultStartDate,
|
|
163
163
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -171,7 +171,7 @@ export class GroupBuilder {
|
|
|
171
171
|
jonggivers.organizationId = this.organization.id;
|
|
172
172
|
jonggivers.periodId = this.organization.periodId;
|
|
173
173
|
jonggivers.settings = GroupSettings.create({
|
|
174
|
-
name: 'Jonggidsen',
|
|
174
|
+
name: new TranslatedString('Jonggidsen'),
|
|
175
175
|
genderType: GroupGenderType.OnlyFemale,
|
|
176
176
|
startDate: this.organization.meta.defaultStartDate,
|
|
177
177
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -185,7 +185,7 @@ export class GroupBuilder {
|
|
|
185
185
|
givers.organizationId = this.organization.id;
|
|
186
186
|
givers.periodId = this.organization.periodId;
|
|
187
187
|
givers.settings = GroupSettings.create({
|
|
188
|
-
name: 'Gidsen',
|
|
188
|
+
name: new TranslatedString('Gidsen'),
|
|
189
189
|
genderType: GroupGenderType.OnlyFemale,
|
|
190
190
|
startDate: this.organization.meta.defaultStartDate,
|
|
191
191
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -201,7 +201,7 @@ export class GroupBuilder {
|
|
|
201
201
|
wouters.organizationId = this.organization.id;
|
|
202
202
|
wouters.periodId = this.organization.periodId;
|
|
203
203
|
wouters.settings = GroupSettings.create({
|
|
204
|
-
name: 'Welpen',
|
|
204
|
+
name: new TranslatedString('Welpen'),
|
|
205
205
|
genderType: GroupGenderType.OnlyMale,
|
|
206
206
|
startDate: this.organization.meta.defaultStartDate,
|
|
207
207
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -215,7 +215,7 @@ export class GroupBuilder {
|
|
|
215
215
|
jonggivers.organizationId = this.organization.id;
|
|
216
216
|
jonggivers.periodId = this.organization.periodId;
|
|
217
217
|
jonggivers.settings = GroupSettings.create({
|
|
218
|
-
name: 'Jongverkenners',
|
|
218
|
+
name: new TranslatedString('Jongverkenners'),
|
|
219
219
|
genderType: GroupGenderType.OnlyMale,
|
|
220
220
|
startDate: this.organization.meta.defaultStartDate,
|
|
221
221
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -229,7 +229,7 @@ export class GroupBuilder {
|
|
|
229
229
|
givers.organizationId = this.organization.id;
|
|
230
230
|
givers.periodId = this.organization.periodId;
|
|
231
231
|
givers.settings = GroupSettings.create({
|
|
232
|
-
name: 'Verkenners',
|
|
232
|
+
name: new TranslatedString('Verkenners'),
|
|
233
233
|
genderType: GroupGenderType.OnlyMale,
|
|
234
234
|
startDate: this.organization.meta.defaultStartDate,
|
|
235
235
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -254,7 +254,7 @@ export class GroupBuilder {
|
|
|
254
254
|
ribbels.organizationId = this.organization.id;
|
|
255
255
|
ribbels.periodId = this.organization.periodId;
|
|
256
256
|
ribbels.settings = GroupSettings.create({
|
|
257
|
-
name: 'Ribbels',
|
|
257
|
+
name: new TranslatedString('Ribbels'),
|
|
258
258
|
genderType: mixedType,
|
|
259
259
|
startDate: this.organization.meta.defaultStartDate,
|
|
260
260
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -267,7 +267,7 @@ export class GroupBuilder {
|
|
|
267
267
|
speelclub.organizationId = this.organization.id;
|
|
268
268
|
speelclub.periodId = this.organization.periodId;
|
|
269
269
|
speelclub.settings = GroupSettings.create({
|
|
270
|
-
name: 'Speelclub',
|
|
270
|
+
name: new TranslatedString('Speelclub'),
|
|
271
271
|
genderType: mixedType,
|
|
272
272
|
startDate: this.organization.meta.defaultStartDate,
|
|
273
273
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -280,7 +280,7 @@ export class GroupBuilder {
|
|
|
280
280
|
aspis.organizationId = this.organization.id;
|
|
281
281
|
aspis.periodId = this.organization.periodId;
|
|
282
282
|
aspis.settings = GroupSettings.create({
|
|
283
|
-
name: "Aspi's",
|
|
283
|
+
name: new TranslatedString("Aspi's"),
|
|
284
284
|
genderType: mixedType,
|
|
285
285
|
startDate: this.organization.meta.defaultStartDate,
|
|
286
286
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -294,7 +294,7 @@ export class GroupBuilder {
|
|
|
294
294
|
rakwis.organizationId = this.organization.id;
|
|
295
295
|
rakwis.periodId = this.organization.periodId;
|
|
296
296
|
rakwis.settings = GroupSettings.create({
|
|
297
|
-
name: "Rakwi's",
|
|
297
|
+
name: new TranslatedString("Rakwi's"),
|
|
298
298
|
genderType: GroupGenderType.Mixed,
|
|
299
299
|
startDate: this.organization.meta.defaultStartDate,
|
|
300
300
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -307,7 +307,7 @@ export class GroupBuilder {
|
|
|
307
307
|
titos.organizationId = this.organization.id;
|
|
308
308
|
titos.periodId = this.organization.periodId;
|
|
309
309
|
titos.settings = GroupSettings.create({
|
|
310
|
-
name: "Tito's",
|
|
310
|
+
name: new TranslatedString("Tito's"),
|
|
311
311
|
genderType: GroupGenderType.Mixed,
|
|
312
312
|
startDate: this.organization.meta.defaultStartDate,
|
|
313
313
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -320,7 +320,7 @@ export class GroupBuilder {
|
|
|
320
320
|
ketis.organizationId = this.organization.id;
|
|
321
321
|
ketis.periodId = this.organization.periodId;
|
|
322
322
|
ketis.settings = GroupSettings.create({
|
|
323
|
-
name: "Keti's",
|
|
323
|
+
name: new TranslatedString("Keti's"),
|
|
324
324
|
genderType: GroupGenderType.Mixed,
|
|
325
325
|
startDate: this.organization.meta.defaultStartDate,
|
|
326
326
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -335,7 +335,7 @@ export class GroupBuilder {
|
|
|
335
335
|
rakwis.organizationId = this.organization.id;
|
|
336
336
|
rakwis.periodId = this.organization.periodId;
|
|
337
337
|
rakwis.settings = GroupSettings.create({
|
|
338
|
-
name: 'Kwiks',
|
|
338
|
+
name: new TranslatedString('Kwiks'),
|
|
339
339
|
genderType: GroupGenderType.OnlyFemale,
|
|
340
340
|
startDate: this.organization.meta.defaultStartDate,
|
|
341
341
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -348,7 +348,7 @@ export class GroupBuilder {
|
|
|
348
348
|
titos.organizationId = this.organization.id;
|
|
349
349
|
titos.periodId = this.organization.periodId;
|
|
350
350
|
titos.settings = GroupSettings.create({
|
|
351
|
-
name: 'Toppers',
|
|
351
|
+
name: new TranslatedString('Toppers'),
|
|
352
352
|
genderType: GroupGenderType.OnlyFemale,
|
|
353
353
|
startDate: this.organization.meta.defaultStartDate,
|
|
354
354
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -361,7 +361,7 @@ export class GroupBuilder {
|
|
|
361
361
|
ketis.organizationId = this.organization.id;
|
|
362
362
|
ketis.periodId = this.organization.periodId;
|
|
363
363
|
ketis.settings = GroupSettings.create({
|
|
364
|
-
name: 'Tiptiens',
|
|
364
|
+
name: new TranslatedString('Tiptiens'),
|
|
365
365
|
genderType: GroupGenderType.OnlyFemale,
|
|
366
366
|
startDate: this.organization.meta.defaultStartDate,
|
|
367
367
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -376,7 +376,7 @@ export class GroupBuilder {
|
|
|
376
376
|
rakwis.organizationId = this.organization.id;
|
|
377
377
|
rakwis.periodId = this.organization.periodId;
|
|
378
378
|
rakwis.settings = GroupSettings.create({
|
|
379
|
-
name: 'Rakkers',
|
|
379
|
+
name: new TranslatedString('Rakkers'),
|
|
380
380
|
genderType: GroupGenderType.OnlyMale,
|
|
381
381
|
startDate: this.organization.meta.defaultStartDate,
|
|
382
382
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -389,7 +389,7 @@ export class GroupBuilder {
|
|
|
389
389
|
titos.organizationId = this.organization.id;
|
|
390
390
|
titos.periodId = this.organization.periodId;
|
|
391
391
|
titos.settings = GroupSettings.create({
|
|
392
|
-
name: 'Tippers',
|
|
392
|
+
name: new TranslatedString('Tippers'),
|
|
393
393
|
genderType: GroupGenderType.OnlyMale,
|
|
394
394
|
startDate: this.organization.meta.defaultStartDate,
|
|
395
395
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -402,7 +402,7 @@ export class GroupBuilder {
|
|
|
402
402
|
ketis.organizationId = this.organization.id;
|
|
403
403
|
ketis.periodId = this.organization.periodId;
|
|
404
404
|
ketis.settings = GroupSettings.create({
|
|
405
|
-
name: 'Kerels',
|
|
405
|
+
name: new TranslatedString('Kerels'),
|
|
406
406
|
genderType: GroupGenderType.OnlyMale,
|
|
407
407
|
startDate: this.organization.meta.defaultStartDate,
|
|
408
408
|
endDate: this.organization.meta.defaultEndDate,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
RecordSettings,
|
|
11
11
|
ReviewTime,
|
|
12
12
|
ReviewTimes,
|
|
13
|
+
TranslatedString,
|
|
13
14
|
} from '@stamhoofd/structures';
|
|
14
15
|
import { v4 as uuidv4 } from 'uuid';
|
|
15
16
|
import { Member } from '../models';
|
|
@@ -45,7 +46,7 @@ describe('member merge', () => {
|
|
|
45
46
|
|
|
46
47
|
const recordAnswer = RecordAnswer.create({
|
|
47
48
|
settings: RecordSettings.create({
|
|
48
|
-
name: 'answer1',
|
|
49
|
+
name: TranslatedString.create('answer1'),
|
|
49
50
|
required: true,
|
|
50
51
|
choices: [],
|
|
51
52
|
}),
|
|
@@ -215,7 +216,7 @@ describe('member merge', () => {
|
|
|
215
216
|
|
|
216
217
|
const recordAnswer = RecordAnswer.create({
|
|
217
218
|
settings: RecordSettings.create({
|
|
218
|
-
name: 'answer1',
|
|
219
|
+
name: TranslatedString.create('answer1'),
|
|
219
220
|
required: true,
|
|
220
221
|
choices: [],
|
|
221
222
|
}),
|
|
@@ -407,7 +408,7 @@ describe('member merge', () => {
|
|
|
407
408
|
|
|
408
409
|
const recordAnswer1 = RecordAnswer.create({
|
|
409
410
|
settings: RecordSettings.create({
|
|
410
|
-
name: 'answer1',
|
|
411
|
+
name: TranslatedString.create('answer1'),
|
|
411
412
|
required: true,
|
|
412
413
|
choices: [],
|
|
413
414
|
}),
|
|
@@ -418,7 +419,7 @@ describe('member merge', () => {
|
|
|
418
419
|
|
|
419
420
|
const recordAnswer2 = RecordAnswer.create({
|
|
420
421
|
settings: RecordSettings.create({
|
|
421
|
-
name: 'answer2',
|
|
422
|
+
name: TranslatedString.create('answer2'),
|
|
422
423
|
required: true,
|
|
423
424
|
choices: [],
|
|
424
425
|
}),
|
|
@@ -4,7 +4,7 @@ export class RateLimitWindow {
|
|
|
4
4
|
start: Date = new Date();
|
|
5
5
|
windows: Map<string, number> = new Map();
|
|
6
6
|
|
|
7
|
-
limit: number
|
|
7
|
+
limit: Record<string, number>;
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* in ms
|
|
@@ -12,10 +12,10 @@ export class RateLimitWindow {
|
|
|
12
12
|
duration: number;
|
|
13
13
|
|
|
14
14
|
constructor(options: {
|
|
15
|
-
limit: number;
|
|
15
|
+
limit: Record<string, number> | number;
|
|
16
16
|
duration: number;
|
|
17
17
|
}) {
|
|
18
|
-
this.limit = options.limit;
|
|
18
|
+
this.limit = typeof options.limit === 'number' ? { '': options.limit } : options.limit;
|
|
19
19
|
this.duration = options.duration;
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -27,7 +27,14 @@ export class RateLimitWindow {
|
|
|
27
27
|
return Date.now() - this.start.getTime();
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
getLimit(category?: string) {
|
|
31
|
+
if (category) {
|
|
32
|
+
return this.limit[category] ?? this.limit[''] ?? 0;
|
|
33
|
+
}
|
|
34
|
+
return this.limit[''] ?? 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
track(key: string, amount = 1, category?: string) {
|
|
31
38
|
if (this.isExpired()) {
|
|
32
39
|
// We have a shared window
|
|
33
40
|
this.start = new Date();
|
|
@@ -37,11 +44,13 @@ export class RateLimitWindow {
|
|
|
37
44
|
let w = this.windows.get(key) ?? 0;
|
|
38
45
|
w += amount;
|
|
39
46
|
|
|
40
|
-
|
|
47
|
+
const limit = this.getLimit(category);
|
|
48
|
+
|
|
49
|
+
if (w > limit) {
|
|
41
50
|
const retryAfter = Math.ceil((this.duration - this.age) / 1000);
|
|
42
51
|
throw new SimpleError({
|
|
43
52
|
code: 'rate_limit',
|
|
44
|
-
message: `Rate limit exceeded (${w} ${amount > 1 ? '(' + amount + ' added)' : ''} requests in ${Math.round(this.age / 1000)}s). Retry after ${retryAfter}s. Check your code and try to reduce the number of (parallel) requests you make. Add waiting periods if needed
|
|
53
|
+
message: `Rate limit exceeded (${w} ${amount > 1 ? '(' + amount + ' added)' : ''} requests in ${Math.round(this.age / 1000)}s). Retry after ${retryAfter}s. Check your code and try to reduce the number of (parallel) requests you make. Add waiting periods if needed. Limit ${limit} ${category ?? ''}`,
|
|
45
54
|
human: `Oeps! Te veel aanvragen. Om spam te vermijden is jouw aanvraag tijdelijk geblokkeerd. Probeer het over ${retryAfter} seconden opnieuw.`,
|
|
46
55
|
statusCode: 429,
|
|
47
56
|
});
|
|
@@ -56,7 +65,7 @@ export class RateLimiter {
|
|
|
56
65
|
windows: RateLimitWindow[] = [];
|
|
57
66
|
|
|
58
67
|
constructor(options: {
|
|
59
|
-
limits: { duration: number; limit: number }[];
|
|
68
|
+
limits: { duration: number; limit: Record<string, number> | number }[];
|
|
60
69
|
}) {
|
|
61
70
|
for (const limit of options.limits) {
|
|
62
71
|
this.windows.push(new RateLimitWindow({
|
|
@@ -66,9 +75,9 @@ export class RateLimiter {
|
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
track(key: string, amount = 1) {
|
|
78
|
+
track(key: string, amount = 1, category?: string) {
|
|
70
79
|
for (const window of this.windows) {
|
|
71
|
-
window.track(key, amount);
|
|
80
|
+
window.track(key, amount, category);
|
|
72
81
|
}
|
|
73
82
|
}
|
|
74
83
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
INSERT INTO `email_templates` (`id`, `subject`, `groupId`, `webshopId`, `organizationId`, `type`, `text`, `html`, `json`, `updatedAt`, `createdAt`) VALUES
|
|
2
|
+
('48d7fb00-4e68-468b-97ec-1ce7b5bc4436', '', NULL, NULL, NULL, 'DefaultOrdersEmail', '{{greeting}}Met vriendelijke groeten,{{organizationName}}Overzicht{{orderDetailsTable}}{{orderTable}}\n\n \n \n \n \n Bestelling bekijken\n \n \n \n \n\nGebruik de bovenstaande knop om de gegevens van jouw bestelling na te kijken.Wil je geen e-mails van {{organizationName}} meer ontvangen? Klik dan hier om uit te schrijven.', '<!DOCTYPE html>\n<html>\n\n<head>\n<meta charset=\"utf-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\" />\n<title></title>\n<style type=\"text/css\">body {\n color: #000716;\n color: var(--color-dark, #000716);\n font-family: -apple-system-body, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 12pt;\n line-height: 1.4;\n}\n\np {\n margin: 0;\n padding: 0;\n line-height: 1.4;\n}\n\np.description {\n color: var(--color-gray-4, #5e5e5e);\n}\np.description a, p.description a:link, p.description a:visited, p.description a:active, p.description a:hover {\n text-decoration: underline;\n color: var(--color-gray-4, #5e5e5e);\n}\n\nstrong {\n font-weight: bold;\n}\n\nem {\n font-style: italic;\n}\n\nh1 {\n font-size: 30px;\n font-weight: bold;\n line-height: 1.2;\n margin: 0;\n padding: 0;\n}\n@media (max-width: 350px) {\n h1 {\n font-size: 24px;\n }\n}\n\nh2 {\n font-size: 20px;\n line-height: 1.2;\n font-weight: bold;\n margin: 0;\n padding: 0;\n}\n\nh3 {\n font-size: 16px;\n line-height: 1.2;\n font-weight: bold;\n margin: 0;\n padding: 0;\n}\n\nh4 {\n line-height: 1.2;\n font-weight: 500;\n margin: 0;\n padding: 0;\n}\n\nol, ul {\n list-style-position: outside;\n padding-left: 30px;\n}\n\nhr {\n height: 1px;\n background: var(--color-border, var(--color-gray-2, #dcdcdc));\n border-radius: 1px;\n padding: 0;\n margin: 20px 0;\n outline: none;\n border: 0;\n}\n\n.button {\n touch-action: inherit;\n user-select: auto;\n cursor: pointer;\n display: inline-block !important;\n line-height: 42px;\n font-size: 16px;\n font-weight: bold;\n}\n.button:active {\n transform: none;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\na, a:link, a:visited, a:active, a:hover {\n text-decoration: underline;\n color: blue;\n}\n\n.email-data-table {\n width: 100%;\n border-collapse: collapse;\n}\n.email-data-table th, .email-data-table td {\n text-align: left;\n padding: 10px 10px 10px 0;\n border-bottom: 1px solid var(--color-border, var(--color-gray-2, #dcdcdc));\n vertical-align: middle;\n}\n.email-data-table th:last-child, .email-data-table td:last-child {\n text-align: right;\n padding-right: 0;\n}\n.email-data-table thead {\n font-weight: bold;\n}\n.email-data-table thead th {\n font-size: 10pt;\n}\n.email-data-table h4 ~ p {\n padding-top: 3px;\n opacity: 0.8;\n font-size: 11pt;\n}\n\n.email-style-inline-code {\n font-family: monospace;\n white-space: pre-wrap;\n display: inline-block;\n}\n\n.email-style-description-small {\n font-size: 14px;\n line-height: 1.5;\n font-weight: normal;\n color: var(--color-gray-4, #5e5e5e);\n font-variation-settings: \"opsz\" 19;\n}\n\n.email-style-title-list {\n font-size: 16px;\n line-height: 1.3;\n font-weight: 500;\n}\n.email-style-title-list + p {\n padding-top: 3px;\n}\n\n.email-style-title-prefix-list {\n font-size: 11px;\n line-height: 1.5;\n font-weight: bold;\n color: {{primaryColor}};\n text-transform: uppercase;\n margin-bottom: 3px;\n}\n.email-style-title-prefix-list.error {\n color: #f0153d;\n}\n\n.email-style-price-base, .email-style-discount-price, .email-style-discount-old-price, .email-style-price {\n font-size: 15px;\n line-height: 1.4;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n}\n.email-style-price-base.disabled, .disabled.email-style-discount-price, .disabled.email-style-discount-old-price, .disabled.email-style-price {\n opacity: 0.6;\n}\n.email-style-price-base.negative, .negative.email-style-discount-price, .negative.email-style-discount-old-price, .negative.email-style-price {\n color: #f0153d;\n}\n\n.email-style-price {\n font-weight: bold;\n color: {{primaryColor}};\n}\n\n.email-style-discount-old-price {\n text-decoration: line-through;\n color: var(--color-gray-4, #5e5e5e);\n}\n\n.email-style-discount-price {\n font-weight: bold;\n color: #ff4747;\n margin-left: 5px;\n}\n\n.pre-wrap {\n white-space: pre-wrap;\n} hr {height: 2px;background: #e7e7e7; border-radius: 1px; padding: 0; margin: 20px 0; outline: none; border: 0;} .button.primary { margin: 0; text-decoration: none; font-size: 16px; font-weight: bold; color: {{primaryColorContrast}}; padding: 0 27px; line-height: 42px; background: {{primaryColor}}; text-align: center; border-radius: 7px; touch-action: manipulation; display: inline-block; transition: 0.2s transform, 0.2s opacity; } .button.primary:active { transform: scale(0.95, 0.95); } .inline-link, .inline-link:link, .inline-link:visited, .inline-link:active, .inline-link:hover { margin: 0; text-decoration: underline; font-size: inherit; font-weight: inherit; color: inherit; touch-action: manipulation; } .inline-link:active { opacity: 0.5; } .description { color: #5e5e5e; } </style>\n</head>\n\n<body>\n<p style=\"margin: 0; padding: 0; line-height: 1.4;\">{{greeting}}</p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\">Met vriendelijke groeten,</p><p style=\"margin: 0; padding: 0; line-height: 1.4;\">{{organizationName}}</p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><hr style=\"height: 2px;background: #e7e7e7; border-radius: 1px; padding: 0; margin: 20px 0; outline: none; border: 0;\"><h2 style=\"margin: 0; padding: 0;\">Overzicht</h2><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><div data-type=\"smartVariableBlock\" data-id=\"orderDetailsTable\">{{orderDetailsTable}}</div><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><div data-type=\"smartVariableBlock\" data-id=\"orderTable\">{{orderTable}}</div><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><div data-type=\"smartButton\" data-id=\"orderUrl\"><table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" style=\"margin: 5px 0;\">\n<tbody><tr>\n <td>\n <table cellspacing=\"0\" cellpadding=\"0\">\n <tbody><tr>\n <td style=\"border-radius: 7px;\" bgcolor=\"{{primaryColor}}\">\n <a class=\"button primary\" href=\"{{orderUrl}}\" target=\"\" style=\"margin: 0; text-decoration: none; font-size: 16px; font-weight: bold; color: {{primaryColorContrast}}; padding: 0 27px; line-height: 42px; background: {{primaryColor}}; text-align: center; border-radius: 7px; touch-action: manipulation; display: inline-block; transition: 0.2s transform, 0.2s opacity;\">Bestelling bekijken</a>\n </td>\n </tr>\n </tbody></table>\n </td>\n</tr>\n</tbody></table></div><p class=\"description\" style=\"color: #5e5e5e;\"><em>Gebruik de bovenstaande knop om de gegevens van jouw bestelling na te kijken.</em></p><p style=\"margin: 0; padding: 0; line-height: 1.4;\"><br></p><hr style=\"height: 2px;background: #e7e7e7; border-radius: 1px; padding: 0; margin: 20px 0; outline: none; border: 0;\"><p class=\"description\" style=\"color: #5e5e5e;\">Wil je geen e-mails van {{organizationName}} meer ontvangen? <a class=\"inline-link\" href=\"{{unsubscribeUrl}}\" target=\"\" style=\"margin: 0; text-decoration: underline; font-size: inherit; font-weight: inherit; color: inherit; touch-action: manipulation;\">Klik dan hier om uit te schrijven</a>.</p>\n</body>\n\n</html>', '{\"value\": {\"type\": \"doc\", \"content\": [{\"type\": \"paragraph\", \"content\": [{\"type\": \"smartVariable\", \"attrs\": {\"id\": \"greeting\"}}]}, {\"type\": \"paragraph\"}, {\"type\": \"paragraph\"}, {\"type\": \"paragraph\", \"content\": [{\"text\": \"Met vriendelijke groeten,\", \"type\": \"text\"}]}, {\"type\": \"paragraph\", \"content\": [{\"type\": \"smartVariable\", \"attrs\": {\"id\": \"organizationName\"}}]}, {\"type\": \"paragraph\"}, {\"type\": \"horizontalRule\"}, {\"type\": \"heading\", \"attrs\": {\"level\": 2}, \"content\": [{\"text\": \"Overzicht\", \"type\": \"text\"}]}, {\"type\": \"paragraph\"}, {\"type\": \"smartVariableBlock\", \"attrs\": {\"id\": \"orderDetailsTable\"}}, {\"type\": \"paragraph\"}, {\"type\": \"paragraph\"}, {\"type\": \"smartVariableBlock\", \"attrs\": {\"id\": \"orderTable\"}}, {\"type\": \"paragraph\"}, {\"type\": \"smartButton\", \"attrs\": {\"id\": \"orderUrl\"}, \"content\": [{\"text\": \"Bestelling bekijken\", \"type\": \"text\"}]}, {\"type\": \"descriptiveText\", \"content\": [{\"text\": \"Gebruik de bovenstaande knop om de gegevens van jouw bestelling na te kijken.\", \"type\": \"text\", \"marks\": [{\"type\": \"italic\"}]}]}, {\"type\": \"paragraph\"}, {\"type\": \"horizontalRule\"}, {\"type\": \"descriptiveText\", \"content\": [{\"text\": \"Wil je geen e-mails van \", \"type\": \"text\"}, {\"type\": \"smartVariable\", \"attrs\": {\"id\": \"organizationName\"}}, {\"text\": \" meer ontvangen? \", \"type\": \"text\"}, {\"type\": \"smartButtonInline\", \"attrs\": {\"id\": \"unsubscribeUrl\"}, \"content\": [{\"text\": \"Klik dan hier om uit te schrijven\", \"type\": \"text\"}]}, {\"text\": \".\", \"type\": \"text\"}]}]}, \"version\": 368}', '2025-03-27 10:13:00', '2025-03-27 10:13:00');
|
|
@@ -91,7 +91,7 @@ export class DocumentTemplate extends QueryableModel {
|
|
|
91
91
|
id: 'group.name',
|
|
92
92
|
type: RecordType.Text,
|
|
93
93
|
}),
|
|
94
|
-
value: group?.settings?.name ?? '',
|
|
94
|
+
value: group?.settings?.name?.toString() ?? '',
|
|
95
95
|
}),
|
|
96
96
|
'group.type': RecordTextAnswer.create({
|
|
97
97
|
settings: RecordSettings.create({
|
|
@@ -426,7 +426,7 @@ export class DocumentTemplate extends QueryableModel {
|
|
|
426
426
|
}
|
|
427
427
|
|
|
428
428
|
const group = await Group.getByID(registration.groupId);
|
|
429
|
-
const description = `${registration.member.details.name}, ${group ? group.settings.name : ''}${group && group.settings.period && group.type === GroupType.Membership ? ' ' + group.settings.period?.nameShort : ''}`;
|
|
429
|
+
const description = `${registration.member.details.name}, ${group ? group.settings.name.toString() : ''}${group && group.settings.period && group.type === GroupType.Membership ? ' ' + group.settings.period?.nameShort : ''}`;
|
|
430
430
|
|
|
431
431
|
if (existingDocuments.length > 0) {
|
|
432
432
|
for (const document of existingDocuments) {
|
|
@@ -622,7 +622,7 @@ export class DocumentTemplate extends QueryableModel {
|
|
|
622
622
|
throw new SimpleError({
|
|
623
623
|
code: 'invalid_document_number',
|
|
624
624
|
message: 'Expected document number to be ' + (lastNumber + 1) + ' but got ' + document.number,
|
|
625
|
-
human:
|
|
625
|
+
human: $t(`7fd5e5f1-6ff5-48a5-beae-36776935ec90`),
|
|
626
626
|
});
|
|
627
627
|
}
|
|
628
628
|
lastNumber = document.number;
|