@stamhoofd/models 2.116.0 → 2.117.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.
Files changed (59) hide show
  1. package/dist/src/helpers/Handlebars.d.ts.map +1 -1
  2. package/dist/src/helpers/Handlebars.js +4 -0
  3. package/dist/src/helpers/Handlebars.js.map +1 -1
  4. package/dist/src/index.d.ts +0 -1
  5. package/dist/src/index.d.ts.map +1 -1
  6. package/dist/src/index.js +0 -1
  7. package/dist/src/index.js.map +1 -1
  8. package/dist/src/migrations/1771510518-events-index-organization-id-start-date.sql +2 -0
  9. package/dist/src/migrations/1771918307-membership-active-filter-index.sql +2 -0
  10. package/dist/src/migrations/1772033555-balance-item-package-id.sql +3 -0
  11. package/dist/src/migrations/1772033715-balance-item-start-end-date.sql +3 -0
  12. package/dist/src/models/AuditLog.d.ts +1 -0
  13. package/dist/src/models/AuditLog.d.ts.map +1 -1
  14. package/dist/src/models/AuditLog.js +8 -0
  15. package/dist/src/models/AuditLog.js.map +1 -1
  16. package/dist/src/models/BalanceItem.d.ts +22 -2
  17. package/dist/src/models/BalanceItem.d.ts.map +1 -1
  18. package/dist/src/models/BalanceItem.js +32 -0
  19. package/dist/src/models/BalanceItem.js.map +1 -1
  20. package/dist/src/models/Invoice.d.ts +1 -4
  21. package/dist/src/models/Invoice.d.ts.map +1 -1
  22. package/dist/src/models/Invoice.js +0 -45
  23. package/dist/src/models/Invoice.js.map +1 -1
  24. package/dist/src/models/Organization.d.ts +19 -1
  25. package/dist/src/models/Organization.d.ts.map +1 -1
  26. package/dist/src/models/Organization.js +27 -3
  27. package/dist/src/models/Organization.js.map +1 -1
  28. package/dist/src/models/Registration.d.ts +1 -2
  29. package/dist/src/models/Registration.d.ts.map +1 -1
  30. package/dist/src/models/Registration.js +11 -87
  31. package/dist/src/models/Registration.js.map +1 -1
  32. package/dist/src/models/RegistrationPeriod.d.ts +1 -0
  33. package/dist/src/models/RegistrationPeriod.d.ts.map +1 -1
  34. package/dist/src/models/RegistrationPeriod.js +5 -0
  35. package/dist/src/models/RegistrationPeriod.js.map +1 -1
  36. package/dist/src/models/STPackage.d.ts +1 -5
  37. package/dist/src/models/STPackage.d.ts.map +1 -1
  38. package/dist/src/models/STPackage.js +0 -41
  39. package/dist/src/models/STPackage.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +2 -2
  42. package/src/helpers/Handlebars.ts +4 -0
  43. package/src/index.ts +0 -1
  44. package/src/migrations/1771510518-events-index-organization-id-start-date.sql +2 -0
  45. package/src/migrations/1771918307-membership-active-filter-index.sql +2 -0
  46. package/src/migrations/1772033555-balance-item-package-id.sql +3 -0
  47. package/src/migrations/1772033715-balance-item-start-end-date.sql +3 -0
  48. package/src/models/AuditLog.ts +10 -1
  49. package/src/models/BalanceItem.ts +32 -2
  50. package/src/models/Invoice.ts +0 -57
  51. package/src/models/Organization.ts +32 -3
  52. package/src/models/Registration.ts +20 -98
  53. package/src/models/RegistrationPeriod.ts +6 -0
  54. package/src/models/STPackage.ts +0 -50
  55. package/dist/src/helpers/GroupBuilder.d.ts +0 -9
  56. package/dist/src/helpers/GroupBuilder.d.ts.map +0 -1
  57. package/dist/src/helpers/GroupBuilder.js +0 -382
  58. package/dist/src/helpers/GroupBuilder.js.map +0 -1
  59. package/src/helpers/GroupBuilder.ts +0 -415
@@ -1,415 +0,0 @@
1
- import { Group as GroupStruct, GroupCategory, GroupCategorySettings, GroupGenderType, GroupSettings, OrganizationGenderType, OrganizationType, OrganizationTypeHelper, UmbrellaOrganization, TranslatedString } from '@stamhoofd/structures';
2
- import { Group, Organization } from '../models/index.js';
3
-
4
- export class GroupBuilder {
5
- organization: Organization;
6
-
7
- constructor(organization: Organization) {
8
- this.organization = organization;
9
- }
10
-
11
- async build() {
12
- const oldGroups = await Group.getAll(this.organization.id, this.organization.periodId);
13
-
14
- if (oldGroups.length === 0) {
15
- // Setup default groups if possible
16
- if (this.organization.meta.type == OrganizationType.Youth && this.organization.meta.umbrellaOrganization == UmbrellaOrganization.ScoutsEnGidsenVlaanderen) {
17
- await this.createSGVGroups();
18
- }
19
- else if (this.organization.meta.type == OrganizationType.Youth && this.organization.meta.umbrellaOrganization == UmbrellaOrganization.ChiroNationaal) {
20
- await this.createChiroGroups();
21
- }
22
- }
23
-
24
- // Reload
25
- const groups = await Group.getAll(this.organization.id, this.organization.periodId);
26
-
27
- // Setup default root groups
28
- if (this.organization.meta.categories.length <= 2) {
29
- const sortedGroupIds = groups.map(g => GroupStruct.create(Object.assign({}, g, { privateSettings: null }))).sort(GroupStruct.defaultSort).map(g => g.id);
30
-
31
- const defaults = this.organization.meta.packages.useActivities ? OrganizationTypeHelper.getDefaultGroupCategories(this.organization.meta.type, this.organization.meta.umbrellaOrganization ?? undefined) : OrganizationTypeHelper.getDefaultGroupCategoriesWithoutActivities(this.organization.meta.type, this.organization.meta.umbrellaOrganization ?? undefined);
32
-
33
- if (sortedGroupIds.length > 0 && defaults.length == 0) {
34
- defaults.push(GroupCategory.create({
35
- settings: GroupCategorySettings.create({
36
- name: 'Leeftijdsgroepen',
37
- maximumRegistrations: 1,
38
- }),
39
- }));
40
- }
41
- this.organization.meta.categories = [GroupCategory.create({ id: 'root' }), ...defaults];
42
- this.organization.meta.rootCategoryId = 'root';
43
-
44
- // Set category ID of the root category
45
- const filter = defaults.flatMap(d => d.categoryIds);
46
- this.organization.meta.rootCategory!.categoryIds = defaults.map(d => d.id).filter(id => !filter.includes(id));
47
-
48
- if (defaults.length > 0) {
49
- defaults[0].groupIds.push(...sortedGroupIds);
50
- }
51
-
52
- await this.organization.save();
53
- }
54
- else {
55
- const newGroups = groups.filter(g => !oldGroups.find(gg => gg.id === g.id));
56
- const sortedGroupIds = newGroups.map(g => GroupStruct.create(Object.assign({}, g, { privateSettings: null }))).sort(GroupStruct.defaultSort).map(g => g.id);
57
- let root = this.organization.meta.rootCategory!;
58
- if (root.categoryIds.length > 0) {
59
- for (const id of root.categoryIds) {
60
- const f = this.organization.meta.categories.find(c => c.id === id);
61
- if (f) {
62
- root = f;
63
- break;
64
- }
65
- }
66
- }
67
-
68
- if (newGroups.length > 0) {
69
- root.groupIds.push(...sortedGroupIds);
70
- await this.organization.save();
71
- }
72
- }
73
- }
74
-
75
- async createSGVGroups() {
76
- const createdGroups: Group[] = [];
77
- const mixedType = this.organization.meta.genderType == OrganizationGenderType.OnlyMale
78
- ? GroupGenderType.OnlyMale
79
- : (this.organization.meta.genderType == OrganizationGenderType.OnlyFemale
80
- ? GroupGenderType.OnlyFemale
81
- : GroupGenderType.Mixed);
82
-
83
- const kapoenen = new Group();
84
- kapoenen.organizationId = this.organization.id;
85
- kapoenen.periodId = this.organization.periodId;
86
- kapoenen.settings = GroupSettings.create({
87
- name: new TranslatedString('Kapoenen'),
88
- genderType: mixedType,
89
- startDate: this.organization.meta.defaultStartDate,
90
- endDate: this.organization.meta.defaultEndDate,
91
- minAge: 6,
92
- maxAge: 7,
93
- });
94
- await kapoenen.save();
95
- createdGroups.push(kapoenen);
96
-
97
- const jin = new Group();
98
- jin.organizationId = this.organization.id;
99
- jin.periodId = this.organization.periodId;
100
- jin.settings = GroupSettings.create({
101
- name: new TranslatedString('Jin'),
102
- genderType: mixedType,
103
- startDate: this.organization.meta.defaultStartDate,
104
- endDate: this.organization.meta.defaultEndDate,
105
- minAge: 17,
106
- maxAge: 17,
107
- });
108
- await jin.save();
109
- createdGroups.push(jin);
110
-
111
- if (this.organization.meta.genderType == OrganizationGenderType.Mixed) {
112
- const wouters = new Group();
113
- wouters.organizationId = this.organization.id;
114
- wouters.periodId = this.organization.periodId;
115
- wouters.settings = GroupSettings.create({
116
- name: new TranslatedString('Wouters'),
117
- genderType: GroupGenderType.Mixed,
118
- startDate: this.organization.meta.defaultStartDate,
119
- endDate: this.organization.meta.defaultEndDate,
120
- minAge: 8,
121
- maxAge: 10,
122
- });
123
- await wouters.save();
124
- createdGroups.push(wouters);
125
-
126
- const jonggivers = new Group();
127
- jonggivers.organizationId = this.organization.id;
128
- jonggivers.periodId = this.organization.periodId;
129
- jonggivers.settings = GroupSettings.create({
130
- name: new TranslatedString('Jonggivers'),
131
- genderType: GroupGenderType.Mixed,
132
- startDate: this.organization.meta.defaultStartDate,
133
- endDate: this.organization.meta.defaultEndDate,
134
- minAge: 11,
135
- maxAge: 13,
136
- });
137
- await jonggivers.save();
138
- createdGroups.push(jonggivers);
139
-
140
- const givers = new Group();
141
- givers.organizationId = this.organization.id;
142
- givers.periodId = this.organization.periodId;
143
- givers.settings = GroupSettings.create({
144
- name: new TranslatedString('Givers'),
145
- genderType: GroupGenderType.Mixed,
146
- startDate: this.organization.meta.defaultStartDate,
147
- endDate: this.organization.meta.defaultEndDate,
148
- minAge: 14,
149
- maxAge: 16,
150
- });
151
- await givers.save();
152
- createdGroups.push(givers);
153
- }
154
-
155
- if (this.organization.meta.genderType == OrganizationGenderType.OnlyFemale || this.organization.meta.genderType == OrganizationGenderType.Separated) {
156
- const wouters = new Group();
157
- wouters.organizationId = this.organization.id;
158
- wouters.periodId = this.organization.periodId;
159
- wouters.settings = GroupSettings.create({
160
- name: new TranslatedString('Kabouters'),
161
- genderType: GroupGenderType.OnlyFemale,
162
- startDate: this.organization.meta.defaultStartDate,
163
- endDate: this.organization.meta.defaultEndDate,
164
- minAge: 8,
165
- maxAge: 10,
166
- });
167
- await wouters.save();
168
- createdGroups.push(wouters);
169
-
170
- const jonggivers = new Group();
171
- jonggivers.organizationId = this.organization.id;
172
- jonggivers.periodId = this.organization.periodId;
173
- jonggivers.settings = GroupSettings.create({
174
- name: new TranslatedString('Jonggidsen'),
175
- genderType: GroupGenderType.OnlyFemale,
176
- startDate: this.organization.meta.defaultStartDate,
177
- endDate: this.organization.meta.defaultEndDate,
178
- minAge: 11,
179
- maxAge: 13,
180
- });
181
- await jonggivers.save();
182
- createdGroups.push(jonggivers);
183
-
184
- const givers = new Group();
185
- givers.organizationId = this.organization.id;
186
- givers.periodId = this.organization.periodId;
187
- givers.settings = GroupSettings.create({
188
- name: new TranslatedString('Gidsen'),
189
- genderType: GroupGenderType.OnlyFemale,
190
- startDate: this.organization.meta.defaultStartDate,
191
- endDate: this.organization.meta.defaultEndDate,
192
- minAge: 14,
193
- maxAge: 16,
194
- });
195
- await givers.save();
196
- createdGroups.push(givers);
197
- }
198
-
199
- if (this.organization.meta.genderType == OrganizationGenderType.OnlyMale || this.organization.meta.genderType == OrganizationGenderType.Separated) {
200
- const wouters = new Group();
201
- wouters.organizationId = this.organization.id;
202
- wouters.periodId = this.organization.periodId;
203
- wouters.settings = GroupSettings.create({
204
- name: new TranslatedString('Welpen'),
205
- genderType: GroupGenderType.OnlyMale,
206
- startDate: this.organization.meta.defaultStartDate,
207
- endDate: this.organization.meta.defaultEndDate,
208
- minAge: 8,
209
- maxAge: 10,
210
- });
211
- await wouters.save();
212
- createdGroups.push(wouters);
213
-
214
- const jonggivers = new Group();
215
- jonggivers.organizationId = this.organization.id;
216
- jonggivers.periodId = this.organization.periodId;
217
- jonggivers.settings = GroupSettings.create({
218
- name: new TranslatedString('Jongverkenners'),
219
- genderType: GroupGenderType.OnlyMale,
220
- startDate: this.organization.meta.defaultStartDate,
221
- endDate: this.organization.meta.defaultEndDate,
222
- minAge: 11,
223
- maxAge: 13,
224
- });
225
- await jonggivers.save();
226
- createdGroups.push(jonggivers);
227
-
228
- const givers = new Group();
229
- givers.organizationId = this.organization.id;
230
- givers.periodId = this.organization.periodId;
231
- givers.settings = GroupSettings.create({
232
- name: new TranslatedString('Verkenners'),
233
- genderType: GroupGenderType.OnlyMale,
234
- startDate: this.organization.meta.defaultStartDate,
235
- endDate: this.organization.meta.defaultEndDate,
236
- minAge: 14,
237
- maxAge: 16,
238
- });
239
- await givers.save();
240
- createdGroups.push(givers);
241
- }
242
-
243
- return createdGroups;
244
- }
245
-
246
- async createChiroGroups() {
247
- const mixedType = this.organization.meta.genderType == OrganizationGenderType.OnlyMale
248
- ? GroupGenderType.OnlyMale
249
- : (this.organization.meta.genderType == OrganizationGenderType.OnlyFemale
250
- ? GroupGenderType.OnlyFemale
251
- : GroupGenderType.Mixed);
252
-
253
- const ribbels = new Group();
254
- ribbels.organizationId = this.organization.id;
255
- ribbels.periodId = this.organization.periodId;
256
- ribbels.settings = GroupSettings.create({
257
- name: new TranslatedString('Ribbels'),
258
- genderType: mixedType,
259
- startDate: this.organization.meta.defaultStartDate,
260
- endDate: this.organization.meta.defaultEndDate,
261
- minAge: 6,
262
- maxAge: 7,
263
- });
264
- await ribbels.save();
265
-
266
- const speelclub = new Group();
267
- speelclub.organizationId = this.organization.id;
268
- speelclub.periodId = this.organization.periodId;
269
- speelclub.settings = GroupSettings.create({
270
- name: new TranslatedString('Speelclub'),
271
- genderType: mixedType,
272
- startDate: this.organization.meta.defaultStartDate,
273
- endDate: this.organization.meta.defaultEndDate,
274
- minAge: 8,
275
- maxAge: 9,
276
- });
277
- await speelclub.save();
278
-
279
- const aspis = new Group();
280
- aspis.organizationId = this.organization.id;
281
- aspis.periodId = this.organization.periodId;
282
- aspis.settings = GroupSettings.create({
283
- name: new TranslatedString("Aspi's"),
284
- genderType: mixedType,
285
- startDate: this.organization.meta.defaultStartDate,
286
- endDate: this.organization.meta.defaultEndDate,
287
- minAge: 16,
288
- maxAge: 17,
289
- });
290
- await aspis.save();
291
-
292
- if (this.organization.meta.genderType == OrganizationGenderType.Mixed) {
293
- const rakwis = new Group();
294
- rakwis.organizationId = this.organization.id;
295
- rakwis.periodId = this.organization.periodId;
296
- rakwis.settings = GroupSettings.create({
297
- name: new TranslatedString("Rakwi's"),
298
- genderType: GroupGenderType.Mixed,
299
- startDate: this.organization.meta.defaultStartDate,
300
- endDate: this.organization.meta.defaultEndDate,
301
- minAge: 10,
302
- maxAge: 11,
303
- });
304
- await rakwis.save();
305
-
306
- const titos = new Group();
307
- titos.organizationId = this.organization.id;
308
- titos.periodId = this.organization.periodId;
309
- titos.settings = GroupSettings.create({
310
- name: new TranslatedString("Tito's"),
311
- genderType: GroupGenderType.Mixed,
312
- startDate: this.organization.meta.defaultStartDate,
313
- endDate: this.organization.meta.defaultEndDate,
314
- minAge: 12,
315
- maxAge: 13,
316
- });
317
- await titos.save();
318
-
319
- const ketis = new Group();
320
- ketis.organizationId = this.organization.id;
321
- ketis.periodId = this.organization.periodId;
322
- ketis.settings = GroupSettings.create({
323
- name: new TranslatedString("Keti's"),
324
- genderType: GroupGenderType.Mixed,
325
- startDate: this.organization.meta.defaultStartDate,
326
- endDate: this.organization.meta.defaultEndDate,
327
- minAge: 14,
328
- maxAge: 15,
329
- });
330
- await ketis.save();
331
- }
332
-
333
- if (this.organization.meta.genderType == OrganizationGenderType.OnlyFemale || this.organization.meta.genderType == OrganizationGenderType.Separated) {
334
- const rakwis = new Group();
335
- rakwis.organizationId = this.organization.id;
336
- rakwis.periodId = this.organization.periodId;
337
- rakwis.settings = GroupSettings.create({
338
- name: new TranslatedString('Kwiks'),
339
- genderType: GroupGenderType.OnlyFemale,
340
- startDate: this.organization.meta.defaultStartDate,
341
- endDate: this.organization.meta.defaultEndDate,
342
- minAge: 10,
343
- maxAge: 11,
344
- });
345
- await rakwis.save();
346
-
347
- const titos = new Group();
348
- titos.organizationId = this.organization.id;
349
- titos.periodId = this.organization.periodId;
350
- titos.settings = GroupSettings.create({
351
- name: new TranslatedString('Toppers'),
352
- genderType: GroupGenderType.OnlyFemale,
353
- startDate: this.organization.meta.defaultStartDate,
354
- endDate: this.organization.meta.defaultEndDate,
355
- minAge: 12,
356
- maxAge: 13,
357
- });
358
- await titos.save();
359
-
360
- const ketis = new Group();
361
- ketis.organizationId = this.organization.id;
362
- ketis.periodId = this.organization.periodId;
363
- ketis.settings = GroupSettings.create({
364
- name: new TranslatedString('Tiptiens'),
365
- genderType: GroupGenderType.OnlyFemale,
366
- startDate: this.organization.meta.defaultStartDate,
367
- endDate: this.organization.meta.defaultEndDate,
368
- minAge: 14,
369
- maxAge: 15,
370
- });
371
- await ketis.save();
372
- }
373
-
374
- if (this.organization.meta.genderType == OrganizationGenderType.OnlyMale || this.organization.meta.genderType == OrganizationGenderType.Separated) {
375
- const rakwis = new Group();
376
- rakwis.organizationId = this.organization.id;
377
- rakwis.periodId = this.organization.periodId;
378
- rakwis.settings = GroupSettings.create({
379
- name: new TranslatedString('Rakkers'),
380
- genderType: GroupGenderType.OnlyMale,
381
- startDate: this.organization.meta.defaultStartDate,
382
- endDate: this.organization.meta.defaultEndDate,
383
- minAge: 10,
384
- maxAge: 11,
385
- });
386
- await rakwis.save();
387
-
388
- const titos = new Group();
389
- titos.organizationId = this.organization.id;
390
- titos.periodId = this.organization.periodId;
391
- titos.settings = GroupSettings.create({
392
- name: new TranslatedString('Tippers'),
393
- genderType: GroupGenderType.OnlyMale,
394
- startDate: this.organization.meta.defaultStartDate,
395
- endDate: this.organization.meta.defaultEndDate,
396
- minAge: 12,
397
- maxAge: 13,
398
- });
399
- await titos.save();
400
-
401
- const ketis = new Group();
402
- ketis.organizationId = this.organization.id;
403
- ketis.periodId = this.organization.periodId;
404
- ketis.settings = GroupSettings.create({
405
- name: new TranslatedString('Kerels'),
406
- genderType: GroupGenderType.OnlyMale,
407
- startDate: this.organization.meta.defaultStartDate,
408
- endDate: this.organization.meta.defaultEndDate,
409
- minAge: 14,
410
- maxAge: 15,
411
- });
412
- await ketis.save();
413
- }
414
- }
415
- }