@stamhoofd/models 2.1.1 → 2.1.3

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 (105) hide show
  1. package/LICENSE +661 -0
  2. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  3. package/dist/src/factories/GroupFactory.js +1 -0
  4. package/dist/src/factories/GroupFactory.js.map +1 -1
  5. package/dist/src/factories/MemberFactory.d.ts.map +1 -1
  6. package/dist/src/factories/MemberFactory.js +0 -2
  7. package/dist/src/factories/MemberFactory.js.map +1 -1
  8. package/dist/src/factories/RegistrationFactory.d.ts.map +1 -1
  9. package/dist/src/factories/RegistrationFactory.js +2 -0
  10. package/dist/src/factories/RegistrationFactory.js.map +1 -1
  11. package/dist/src/factories/UserFactory.d.ts +1 -0
  12. package/dist/src/factories/UserFactory.d.ts.map +1 -1
  13. package/dist/src/factories/UserFactory.js +14 -4
  14. package/dist/src/factories/UserFactory.js.map +1 -1
  15. package/dist/src/helpers/GroupBuilder.d.ts.map +1 -1
  16. package/dist/src/helpers/GroupBuilder.js +25 -2
  17. package/dist/src/helpers/GroupBuilder.js.map +1 -1
  18. package/dist/src/migrations/1605262046-import-postcodes-nl.js +1 -1
  19. package/dist/src/migrations/1605262046-import-postcodes-nl.js.map +1 -1
  20. package/dist/src/migrations/1714985451-user-nullable-organization-id.sql +2 -0
  21. package/dist/src/migrations/1714985452-email-verification-code-nullable-organization-id.sql +2 -0
  22. package/dist/src/migrations/1714985453-user-organization-permissions.sql +2 -0
  23. package/dist/src/migrations/1714985454-user-organization-permissions.sql +2 -0
  24. package/dist/src/migrations/1715079362-platform.sql +6 -0
  25. package/dist/src/migrations/1715181649-registrations-organization-id.sql +2 -0
  26. package/dist/src/migrations/1715181650-registrations-organization-id-fill.sql +1 -0
  27. package/dist/src/migrations/1715181651-registrations-organization-id-drop-null.sql +2 -0
  28. package/dist/src/migrations/1716117067-members-nullable-organization-id.sql +2 -0
  29. package/dist/src/migrations/1719567581-registration-periods.sql +13 -0
  30. package/dist/src/migrations/1719567582-organization-registration-periods.sql +13 -0
  31. package/dist/src/migrations/1719567881-organization-periodId.sql +2 -0
  32. package/dist/src/migrations/1719567882-groups-periodId.sql +2 -0
  33. package/dist/src/migrations/1719567883-platform-periodId.sql +2 -0
  34. package/dist/src/migrations/1719568079-default-period.sql +2 -0
  35. package/dist/src/migrations/1719568080-set-default-period-platform.sql +1 -0
  36. package/dist/src/migrations/1719568081-set-default-period-organizations.sql +1 -0
  37. package/dist/src/migrations/1719568082-set-default-period-groups.sql +1 -0
  38. package/dist/src/migrations/1719580828-registrations-periodId.sql +2 -0
  39. package/dist/src/migrations/1719580829-set-default-period-registrations.sql +1 -0
  40. package/dist/src/migrations/1719931362-groups-default-age-group-id.sql +2 -0
  41. package/dist/src/models/BalanceItem.d.ts +1 -1
  42. package/dist/src/models/BalanceItem.d.ts.map +1 -1
  43. package/dist/src/models/BalanceItem.js +15 -5
  44. package/dist/src/models/BalanceItem.js.map +1 -1
  45. package/dist/src/models/Document.d.ts.map +1 -1
  46. package/dist/src/models/Document.js +6 -2
  47. package/dist/src/models/Document.js.map +1 -1
  48. package/dist/src/models/DocumentTemplate.d.ts +3 -3
  49. package/dist/src/models/DocumentTemplate.d.ts.map +1 -1
  50. package/dist/src/models/DocumentTemplate.js +23 -24
  51. package/dist/src/models/DocumentTemplate.js.map +1 -1
  52. package/dist/src/models/EmailVerificationCode.d.ts +6 -7
  53. package/dist/src/models/EmailVerificationCode.d.ts.map +1 -1
  54. package/dist/src/models/EmailVerificationCode.js +37 -30
  55. package/dist/src/models/EmailVerificationCode.js.map +1 -1
  56. package/dist/src/models/Group.d.ts +6 -4
  57. package/dist/src/models/Group.d.ts.map +1 -1
  58. package/dist/src/models/Group.js +28 -9
  59. package/dist/src/models/Group.js.map +1 -1
  60. package/dist/src/models/Member.d.ts +9 -9
  61. package/dist/src/models/Member.d.ts.map +1 -1
  62. package/dist/src/models/Member.js +28 -15
  63. package/dist/src/models/Member.js.map +1 -1
  64. package/dist/src/models/Organization.d.ts +6 -5
  65. package/dist/src/models/Organization.d.ts.map +1 -1
  66. package/dist/src/models/Organization.js +34 -59
  67. package/dist/src/models/Organization.js.map +1 -1
  68. package/dist/src/models/OrganizationRegistrationPeriod.d.ts +3 -0
  69. package/dist/src/models/OrganizationRegistrationPeriod.d.ts.map +1 -1
  70. package/dist/src/models/OrganizationRegistrationPeriod.js +49 -0
  71. package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -1
  72. package/dist/src/models/PasswordToken.d.ts +1 -1
  73. package/dist/src/models/PasswordToken.d.ts.map +1 -1
  74. package/dist/src/models/PasswordToken.js +9 -10
  75. package/dist/src/models/PasswordToken.js.map +1 -1
  76. package/dist/src/models/Payment.d.ts +5 -3
  77. package/dist/src/models/Payment.d.ts.map +1 -1
  78. package/dist/src/models/Payment.js +13 -5
  79. package/dist/src/models/Payment.js.map +1 -1
  80. package/dist/src/models/Platform.d.ts +1 -0
  81. package/dist/src/models/Platform.d.ts.map +1 -1
  82. package/dist/src/models/Platform.js +3 -0
  83. package/dist/src/models/Platform.js.map +1 -1
  84. package/dist/src/models/Registration.d.ts +7 -2
  85. package/dist/src/models/Registration.d.ts.map +1 -1
  86. package/dist/src/models/Registration.js +7 -0
  87. package/dist/src/models/Registration.js.map +1 -1
  88. package/dist/src/models/Token.d.ts.map +1 -1
  89. package/dist/src/models/Token.js +1 -0
  90. package/dist/src/models/Token.js.map +1 -1
  91. package/dist/src/models/User.d.ts +20 -11
  92. package/dist/src/models/User.d.ts.map +1 -1
  93. package/dist/src/models/User.js +84 -26
  94. package/dist/src/models/User.js.map +1 -1
  95. package/dist/src/models/index.d.ts +4 -0
  96. package/dist/src/models/index.d.ts.map +1 -1
  97. package/dist/src/models/index.js +4 -0
  98. package/dist/src/models/index.js.map +1 -1
  99. package/package.json +3 -2
  100. package/src/migrations/1719931362-groups-default-age-group-id.sql +2 -0
  101. package/src/models/Group.ts +3 -0
  102. package/src/models/Organization.ts +0 -59
  103. package/src/models/OrganizationRegistrationPeriod.ts +60 -0
  104. package/src/models/Payment.ts +4 -4
  105. package/src/models/Platform.ts +4 -0
@@ -34,4 +34,8 @@ export * from "./StripeCheckoutSession";
34
34
  export * from "./Document";
35
35
  export * from "./DocumentTemplate";
36
36
  export * from "./WebshopDiscountCode";
37
+ export * from "./Platform";
38
+ export * from "./MemberResponsibilityRecord";
39
+ export * from "./OrganizationRegistrationPeriod";
40
+ export * from "./RegistrationPeriod";
37
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,EAAC,MAAM,UAAU,CAAA;AAEhF,cAAc,yBAAyB,CAAA;AAEvC,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAC,KAAK,EAAE,aAAa,EAAC,MAAM,SAAS,CAAA;AAC5C,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAE7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AAEpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AAEvC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAElC,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,EAAC,MAAM,UAAU,CAAA;AAEhF,cAAc,yBAAyB,CAAA;AAEvC,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAC,KAAK,EAAE,aAAa,EAAC,MAAM,SAAS,CAAA;AAC5C,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAE7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AAEpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AAEvC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAElC,cAAc,uBAAuB,CAAA;AAErC,cAAc,YAAY,CAAA;AAC1B,cAAc,8BAA8B,CAAA;AAE5C,cAAc,kCAAkC,CAAA;AAChD,cAAc,sBAAsB,CAAA"}
@@ -50,4 +50,8 @@ tslib_1.__exportStar(require("./StripeCheckoutSession"), exports);
50
50
  tslib_1.__exportStar(require("./Document"), exports);
51
51
  tslib_1.__exportStar(require("./DocumentTemplate"), exports);
52
52
  tslib_1.__exportStar(require("./WebshopDiscountCode"), exports);
53
+ tslib_1.__exportStar(require("./Platform"), exports);
54
+ tslib_1.__exportStar(require("./MemberResponsibilityRecord"), exports);
55
+ tslib_1.__exportStar(require("./OrganizationRegistrationPeriod"), exports);
56
+ tslib_1.__exportStar(require("./RegistrationPeriod"), exports);
53
57
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;AAAA,+CAA+C;AAC/C,+CAA2C;AAAnC,4GAAA,YAAY,OAAA;AACpB,+BAA2B;AAAnB,4FAAA,IAAI,OAAA;AACZ,qCAAiC;AAAzB,kGAAA,OAAO,OAAA;AACf,+CAA2C;AAAnC,4GAAA,YAAY,OAAA;AACpB,mCAAgF;AAAxE,gGAAA,MAAM,OAAA;AAEd,kEAAuC;AAEvC,kDAAuB;AACvB,0DAA+B;AAC/B,wDAA6B;AAC7B,iCAA6B;AAArB,8FAAA,KAAK,OAAA;AACb,0DAA+B;AAC/B,4DAAiC;AACjC,yDAA8B;AAC9B,sDAA2B;AAC3B,sDAA2B;AAC3B,uDAAmD;AAA3C,oHAAA,gBAAgB,OAAA;AACxB,iCAA4C;AAApC,8FAAA,KAAK,OAAA;AACb,oDAAyB;AACzB,qDAA0B;AAC1B,6DAAkC;AAClC,mDAAwB;AACxB,0DAA+B;AAC/B,4DAAiC;AACjC,6CAAyC;AAAjC,0GAAA,WAAW,OAAA;AACnB,2DAAuD;AAA/C,wHAAA,kBAAkB,OAAA;AAC1B,iCAA6B;AAArB,8FAAA,KAAK,OAAA;AAEb,6DAAkC;AAClC,2DAAgC;AAChC,iEAAsC;AACtC,+DAAoC;AAEpC,0DAA+B;AAC/B,gEAAqC;AACrC,kEAAuC;AAEvC,qDAA0B;AAC1B,6DAAkC;AAElC,gEAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;AAAA,+CAA+C;AAC/C,+CAA2C;AAAnC,4GAAA,YAAY,OAAA;AACpB,+BAA2B;AAAnB,4FAAA,IAAI,OAAA;AACZ,qCAAiC;AAAzB,kGAAA,OAAO,OAAA;AACf,+CAA2C;AAAnC,4GAAA,YAAY,OAAA;AACpB,mCAAgF;AAAxE,gGAAA,MAAM,OAAA;AAEd,kEAAuC;AAEvC,kDAAuB;AACvB,0DAA+B;AAC/B,wDAA6B;AAC7B,iCAA6B;AAArB,8FAAA,KAAK,OAAA;AACb,0DAA+B;AAC/B,4DAAiC;AACjC,yDAA8B;AAC9B,sDAA2B;AAC3B,sDAA2B;AAC3B,uDAAmD;AAA3C,oHAAA,gBAAgB,OAAA;AACxB,iCAA4C;AAApC,8FAAA,KAAK,OAAA;AACb,oDAAyB;AACzB,qDAA0B;AAC1B,6DAAkC;AAClC,mDAAwB;AACxB,0DAA+B;AAC/B,4DAAiC;AACjC,6CAAyC;AAAjC,0GAAA,WAAW,OAAA;AACnB,2DAAuD;AAA/C,wHAAA,kBAAkB,OAAA;AAC1B,iCAA6B;AAArB,8FAAA,KAAK,OAAA;AAEb,6DAAkC;AAClC,2DAAgC;AAChC,iEAAsC;AACtC,+DAAoC;AAEpC,0DAA+B;AAC/B,gEAAqC;AACrC,kEAAuC;AAEvC,qDAA0B;AAC1B,6DAAkC;AAElC,gEAAqC;AAErC,qDAA0B;AAC1B,uEAA4C;AAE5C,2EAAgD;AAChD,+DAAoC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamhoofd/models",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "main": "./dist/src/index.js",
5
5
  "types": "./dist/src/index.d.ts",
6
6
  "license": "UNLICENCED",
@@ -26,5 +26,6 @@
26
26
  },
27
27
  "devDependencies": {
28
28
  "@simonbackx/simple-database": "1.24.0"
29
- }
29
+ },
30
+ "gitHead": "b5773c547dceaae52b9c2a098b222417fcd42e4f"
30
31
  }
@@ -0,0 +1,2 @@
1
+ ALTER TABLE `groups`
2
+ ADD COLUMN `defaultAgeGroupId` varchar(36) NULL AFTER `status`;
@@ -42,6 +42,9 @@ export class Group extends Model {
42
42
  @column({ type: "string" })
43
43
  periodId: string;
44
44
 
45
+ @column({ type: "string", nullable: true })
46
+ defaultAgeGroupId: string | null = null
47
+
45
48
  /**
46
49
  * Every time a new registration period starts, this number increases. This is used to mark all older registrations as 'out of date' automatically
47
50
  */
@@ -299,65 +299,6 @@ export class Organization extends Model {
299
299
  return struct
300
300
  }
301
301
 
302
- async cleanCategories(groups: {id: string}[]) {
303
- const reachable = new Map<string, boolean>()
304
- const queue = [this.meta.rootCategoryId]
305
- reachable.set(this.meta.rootCategoryId, true)
306
- let shouldSave = false;
307
-
308
- const usedGroupIds = new Set<string>()
309
-
310
- while (queue.length > 0) {
311
- const id = queue.shift()
312
- if (!id) {
313
- break
314
- }
315
-
316
- const category = this.meta.categories.find(c => c.id === id)
317
- if (!category) {
318
- continue
319
- }
320
-
321
- for (const i of category.categoryIds) {
322
- if (!reachable.get(i)) {
323
- reachable.set(i, true)
324
- queue.push(i)
325
- }
326
- }
327
-
328
- // Remove groupIds that no longer exist or are in a different category already
329
- let filtered = category.groupIds.filter(id => !!groups.find(g => g.id === id) && !usedGroupIds.has(id))
330
-
331
- // Remove duplicate groups
332
- filtered = Formatter.uniqueArray(filtered)
333
-
334
- if (filtered.length !== category.groupIds.length) {
335
- shouldSave = true;
336
- console.log("Deleted "+ (category.groupIds.length - filtered.length) +" group ids from category " + category.id + ", in organization "+this.id)
337
- category.groupIds = filtered
338
- }
339
-
340
- for (const groupId of category.groupIds) {
341
- usedGroupIds.add(groupId)
342
- }
343
- }
344
-
345
- const reachableCategoryIds = [...reachable.keys()]
346
-
347
- // Delete all categories that are not reachable anymore
348
- const beforeCount = this.meta.categories.length;
349
- this.meta.categories = this.meta.categories.filter(c => reachableCategoryIds.includes(c.id))
350
-
351
- if (this.meta.categories.length !== beforeCount) {
352
- console.log("Deleted "+ (beforeCount - this.meta.categories.length) +" categories from organization "+this.id)
353
- await this.save()
354
- } else {
355
- if (shouldSave) {
356
- await this.save()
357
- }
358
- }
359
- }
360
-
361
302
  async updateDNSRecords() {
362
303
  const organization = this;
363
304
 
@@ -2,6 +2,7 @@ import { column, Model } from '@simonbackx/simple-database';
2
2
  import { Group as GroupStruct, OrganizationRegistrationPeriodSettings, OrganizationRegistrationPeriod as OrganizationRegistrationPeriodStruct } from '@stamhoofd/structures';
3
3
  import { v4 as uuidv4 } from "uuid";
4
4
  import { Group, RegistrationPeriod } from '.';
5
+ import { Formatter } from '@stamhoofd/utility';
5
6
 
6
7
  export class OrganizationRegistrationPeriod extends Model {
7
8
  static table = "organization_registration_periods";
@@ -51,4 +52,63 @@ export class OrganizationRegistrationPeriod extends Model {
51
52
  groups: groups.map(g => g.getStructure()).sort(GroupStruct.defaultSort)
52
53
  })
53
54
  }
55
+
56
+ async cleanCategories(groups: {id: string}[]) {
57
+ const reachable = new Map<string, boolean>()
58
+ const queue = [this.settings.rootCategoryId]
59
+ reachable.set(this.settings.rootCategoryId, true)
60
+ let shouldSave = false;
61
+
62
+ const usedGroupIds = new Set<string>()
63
+
64
+ while (queue.length > 0) {
65
+ const id = queue.shift()
66
+ if (!id) {
67
+ break
68
+ }
69
+
70
+ const category = this.settings.categories.find(c => c.id === id)
71
+ if (!category) {
72
+ continue
73
+ }
74
+
75
+ for (const i of category.categoryIds) {
76
+ if (!reachable.get(i)) {
77
+ reachable.set(i, true)
78
+ queue.push(i)
79
+ }
80
+ }
81
+
82
+ // Remove groupIds that no longer exist or are in a different category already
83
+ let filtered = category.groupIds.filter(id => !!groups.find(g => g.id === id) && !usedGroupIds.has(id))
84
+
85
+ // Remove duplicate groups
86
+ filtered = Formatter.uniqueArray(filtered)
87
+
88
+ if (filtered.length !== category.groupIds.length) {
89
+ shouldSave = true;
90
+ console.log("Deleted "+ (category.groupIds.length - filtered.length) +" group ids from category " + category.id + ", in organization period "+this.id)
91
+ category.groupIds = filtered
92
+ }
93
+
94
+ for (const groupId of category.groupIds) {
95
+ usedGroupIds.add(groupId)
96
+ }
97
+ }
98
+
99
+ const reachableCategoryIds = [...reachable.keys()]
100
+
101
+ // Delete all categories that are not reachable anymore
102
+ const beforeCount = this.settings.categories.length;
103
+ this.settings.categories = this.settings.categories.filter(c => reachableCategoryIds.includes(c.id))
104
+
105
+ if (this.settings.categories.length !== beforeCount) {
106
+ console.log("Deleted "+ (beforeCount - this.settings.categories.length) +" categories from organizaton period "+this.id)
107
+ await this.save()
108
+ } else {
109
+ if (shouldSave) {
110
+ await this.save()
111
+ }
112
+ }
113
+ }
54
114
  }
@@ -144,17 +144,17 @@ export class Payment extends Model {
144
144
  const registration = balanceItem?.registrationId && registrations.find(r => r.id === balanceItem.registrationId)
145
145
  const member = balanceItem?.memberId ? members.find(r => r.id === balanceItem.memberId) : undefined
146
146
  const order = balanceItem?.orderId && orders.find(r => r.id === balanceItem.orderId)
147
- const group = registration && groups.find(g => g.id === registration.groupId)
147
+ const group = registration ? groups.find(g => g.id === registration.groupId) : null
148
148
 
149
- if (!group) {
150
- throw new Error("Group not found")
149
+ if (registration && !group) {
150
+ throw new Error("Group "+registration.groupId+" not found")
151
151
  }
152
152
 
153
153
  return BalanceItemPaymentDetailed.create({
154
154
  ...item,
155
155
  balanceItem: BalanceItemDetailed.create({
156
156
  ...balanceItem,
157
- registration: registration ? registration.setRelation(Registration.group, group).getStructure() : null,
157
+ registration: registration ? registration.setRelation(Registration.group, group!).getStructure() : null,
158
158
  member: member ? MemberStruct.create(member) : null,
159
159
  order: order ? OrderStruct.create({...order, payment: null}) : null
160
160
  })
@@ -69,6 +69,10 @@ export class Platform extends Model {
69
69
  });
70
70
  }
71
71
 
72
+ static clearCache() {
73
+ this.sharedStruct = null;
74
+ }
75
+
72
76
  async save() {
73
77
  Platform.sharedStruct = null
74
78
  return await super.save()