@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.
Files changed (352) hide show
  1. package/dist/src/factories/AddressFactory.d.ts +3 -4
  2. package/dist/src/factories/AddressFactory.d.ts.map +1 -1
  3. package/dist/src/factories/AddressFactory.js +13 -13
  4. package/dist/src/factories/EmergencyContactFactory.d.ts +3 -4
  5. package/dist/src/factories/EmergencyContactFactory.d.ts.map +1 -1
  6. package/dist/src/factories/EmergencyContactFactory.js +27 -27
  7. package/dist/src/factories/EmergencyContactFactory.js.map +1 -1
  8. package/dist/src/factories/GroupFactory.d.ts +4 -4
  9. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  10. package/dist/src/factories/GroupFactory.js +8 -8
  11. package/dist/src/factories/GroupFactory.js.map +1 -1
  12. package/dist/src/factories/MemberFactory.d.ts +4 -4
  13. package/dist/src/factories/MemberFactory.d.ts.map +1 -1
  14. package/dist/src/factories/MemberFactory.js +17 -17
  15. package/dist/src/factories/MemberFactory.js.map +1 -1
  16. package/dist/src/factories/OrganizationFactory.d.ts +4 -4
  17. package/dist/src/factories/OrganizationFactory.js +8 -8
  18. package/dist/src/factories/OrganizationFactory.js.map +1 -1
  19. package/dist/src/factories/ParentFactory.d.ts +1 -1
  20. package/dist/src/factories/ParentFactory.js +19 -19
  21. package/dist/src/factories/ParentFactory.js.map +1 -1
  22. package/dist/src/factories/RecordFactory.d.ts +2 -3
  23. package/dist/src/factories/RecordFactory.d.ts.map +1 -1
  24. package/dist/src/factories/RecordFactory.js +1 -1
  25. package/dist/src/factories/RecordFactory.js.map +1 -1
  26. package/dist/src/factories/RegisterCodeFactory.d.ts +2 -2
  27. package/dist/src/factories/RegisterCodeFactory.d.ts.map +1 -1
  28. package/dist/src/factories/RegisterCodeFactory.js +2 -2
  29. package/dist/src/factories/RegistrationFactory.d.ts +3 -3
  30. package/dist/src/factories/RegistrationFactory.d.ts.map +1 -1
  31. package/dist/src/factories/RegistrationFactory.js.map +1 -1
  32. package/dist/src/factories/RegistrationPeriodFactory.d.ts +2 -2
  33. package/dist/src/factories/RegistrationPeriodFactory.js.map +1 -1
  34. package/dist/src/factories/UserFactory.d.ts +3 -3
  35. package/dist/src/factories/UserFactory.d.ts.map +1 -1
  36. package/dist/src/factories/UserFactory.js +3 -3
  37. package/dist/src/factories/UserFactory.js.map +1 -1
  38. package/dist/src/factories/WebshopFactory.d.ts +4 -4
  39. package/dist/src/factories/WebshopFactory.d.ts.map +1 -1
  40. package/dist/src/factories/WebshopFactory.js +1 -1
  41. package/dist/src/factories/WebshopFactory.js.map +1 -1
  42. package/dist/src/helpers/DNSValidator.d.ts +1 -1
  43. package/dist/src/helpers/DNSValidator.d.ts.map +1 -1
  44. package/dist/src/helpers/DNSValidator.js +33 -33
  45. package/dist/src/helpers/DNSValidator.js.map +1 -1
  46. package/dist/src/helpers/EmailBuilder.d.ts +10 -10
  47. package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
  48. package/dist/src/helpers/EmailBuilder.js +34 -34
  49. package/dist/src/helpers/EmailBuilder.js.map +1 -1
  50. package/dist/src/helpers/GroupBuilder.d.ts.map +1 -1
  51. package/dist/src/helpers/GroupBuilder.js +57 -57
  52. package/dist/src/helpers/GroupBuilder.js.map +1 -1
  53. package/dist/src/helpers/Handlebars.d.ts.map +1 -1
  54. package/dist/src/helpers/Handlebars.js +29 -29
  55. package/dist/src/helpers/Handlebars.js.map +1 -1
  56. package/dist/src/helpers/MemberMerger.d.ts +1 -1
  57. package/dist/src/helpers/MemberMerger.d.ts.map +1 -1
  58. package/dist/src/helpers/MemberMerger.js +33 -33
  59. package/dist/src/helpers/MemberMerger.js.map +1 -1
  60. package/dist/src/helpers/MemberMerger.test.js +194 -194
  61. package/dist/src/helpers/MemberMerger.test.js.map +1 -1
  62. package/dist/src/helpers/RateLimiter.d.ts.map +1 -1
  63. package/dist/src/helpers/RateLimiter.js +2 -2
  64. package/dist/src/helpers/RateLimiter.js.map +1 -1
  65. package/dist/src/helpers/SetupStepsUpdater.d.ts +22 -0
  66. package/dist/src/helpers/SetupStepsUpdater.d.ts.map +1 -0
  67. package/dist/src/helpers/SetupStepsUpdater.js +255 -0
  68. package/dist/src/helpers/SetupStepsUpdater.js.map +1 -0
  69. package/dist/src/helpers/WebshopCounter.d.ts +1 -1
  70. package/dist/src/helpers/WebshopCounter.d.ts.map +1 -1
  71. package/dist/src/helpers/WebshopCounter.js +1 -1
  72. package/dist/src/helpers/WebshopCounter.js.map +1 -1
  73. package/dist/src/helpers/WebshopCounter.test.js +6 -6
  74. package/dist/src/helpers/WebshopCounter.test.js.map +1 -1
  75. package/dist/src/index.d.ts +20 -19
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +1 -0
  78. package/dist/src/index.js.map +1 -1
  79. package/dist/src/migrations/1605262045-import-postcodes.js +12 -12
  80. package/dist/src/migrations/1605262046-import-postcodes-nl.js +10 -10
  81. package/dist/src/models/BalanceItem.d.ts.map +1 -1
  82. package/dist/src/models/BalanceItem.js +37 -37
  83. package/dist/src/models/BalanceItem.js.map +1 -1
  84. package/dist/src/models/BalanceItemPayment.d.ts.map +1 -1
  85. package/dist/src/models/BalanceItemPayment.js +13 -13
  86. package/dist/src/models/BalanceItemPayment.js.map +1 -1
  87. package/dist/src/models/BuckarooPayment.d.ts +1 -1
  88. package/dist/src/models/BuckarooPayment.d.ts.map +1 -1
  89. package/dist/src/models/BuckarooPayment.js +5 -5
  90. package/dist/src/models/BuckarooPayment.js.map +1 -1
  91. package/dist/src/models/CachedOutstandingBalance.d.ts.map +1 -1
  92. package/dist/src/models/CachedOutstandingBalance.js +37 -37
  93. package/dist/src/models/CachedOutstandingBalance.js.map +1 -1
  94. package/dist/src/models/Document.d.ts +4 -4
  95. package/dist/src/models/Document.d.ts.map +1 -1
  96. package/dist/src/models/Document.js +27 -27
  97. package/dist/src/models/Document.js.map +1 -1
  98. package/dist/src/models/DocumentTemplate.d.ts +4 -4
  99. package/dist/src/models/DocumentTemplate.d.ts.map +1 -1
  100. package/dist/src/models/DocumentTemplate.js +72 -72
  101. package/dist/src/models/DocumentTemplate.js.map +1 -1
  102. package/dist/src/models/Email.d.ts.map +1 -1
  103. package/dist/src/models/Email.js +63 -64
  104. package/dist/src/models/Email.js.map +1 -1
  105. package/dist/src/models/EmailRecipient.d.ts.map +1 -1
  106. package/dist/src/models/EmailRecipient.js +20 -20
  107. package/dist/src/models/EmailRecipient.js.map +1 -1
  108. package/dist/src/models/EmailTemplate.d.ts +3 -3
  109. package/dist/src/models/EmailTemplate.d.ts.map +1 -1
  110. package/dist/src/models/EmailTemplate.js +16 -16
  111. package/dist/src/models/EmailTemplate.js.map +1 -1
  112. package/dist/src/models/EmailVerificationCode.d.ts +2 -2
  113. package/dist/src/models/EmailVerificationCode.d.ts.map +1 -1
  114. package/dist/src/models/EmailVerificationCode.js +57 -55
  115. package/dist/src/models/EmailVerificationCode.js.map +1 -1
  116. package/dist/src/models/Event.d.ts +2 -2
  117. package/dist/src/models/Event.d.ts.map +1 -1
  118. package/dist/src/models/Event.js +15 -15
  119. package/dist/src/models/Event.js.map +1 -1
  120. package/dist/src/models/Group.d.ts +3 -1
  121. package/dist/src/models/Group.d.ts.map +1 -1
  122. package/dist/src/models/Group.js +46 -35
  123. package/dist/src/models/Group.js.map +1 -1
  124. package/dist/src/models/Image.d.ts +1 -1
  125. package/dist/src/models/Image.d.ts.map +1 -1
  126. package/dist/src/models/Image.js +26 -26
  127. package/dist/src/models/Image.js.map +1 -1
  128. package/dist/src/models/Member.d.ts +8 -8
  129. package/dist/src/models/Member.d.ts.map +1 -1
  130. package/dist/src/models/Member.js +60 -60
  131. package/dist/src/models/Member.js.map +1 -1
  132. package/dist/src/models/MemberPlatformMembership.d.ts +3 -3
  133. package/dist/src/models/MemberPlatformMembership.d.ts.map +1 -1
  134. package/dist/src/models/MemberPlatformMembership.js +26 -26
  135. package/dist/src/models/MemberPlatformMembership.js.map +1 -1
  136. package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -1
  137. package/dist/src/models/MemberResponsibilityRecord.js +13 -13
  138. package/dist/src/models/MemberResponsibilityRecord.js.map +1 -1
  139. package/dist/src/models/MergedMember.d.ts +3 -3
  140. package/dist/src/models/MergedMember.d.ts.map +1 -1
  141. package/dist/src/models/MergedMember.js +19 -19
  142. package/dist/src/models/MergedMember.js.map +1 -1
  143. package/dist/src/models/MolliePayment.d.ts +1 -1
  144. package/dist/src/models/MolliePayment.d.ts.map +1 -1
  145. package/dist/src/models/MolliePayment.js +5 -5
  146. package/dist/src/models/MolliePayment.js.map +1 -1
  147. package/dist/src/models/MollieToken.d.ts.map +1 -1
  148. package/dist/src/models/MollieToken.js +60 -60
  149. package/dist/src/models/MollieToken.js.map +1 -1
  150. package/dist/src/models/OneTimeToken.d.ts +2 -2
  151. package/dist/src/models/OneTimeToken.d.ts.map +1 -1
  152. package/dist/src/models/OneTimeToken.js +13 -13
  153. package/dist/src/models/OneTimeToken.js.map +1 -1
  154. package/dist/src/models/Order.d.ts +1 -1
  155. package/dist/src/models/Order.d.ts.map +1 -1
  156. package/dist/src/models/Order.js +70 -70
  157. package/dist/src/models/Order.js.map +1 -1
  158. package/dist/src/models/Organization.d.ts +5 -5
  159. package/dist/src/models/Organization.d.ts.map +1 -1
  160. package/dist/src/models/Organization.js +127 -127
  161. package/dist/src/models/Organization.js.map +1 -1
  162. package/dist/src/models/OrganizationRegistrationPeriod.d.ts.map +1 -1
  163. package/dist/src/models/OrganizationRegistrationPeriod.js +15 -15
  164. package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -1
  165. package/dist/src/models/PasswordToken.d.ts +3 -3
  166. package/dist/src/models/PasswordToken.d.ts.map +1 -1
  167. package/dist/src/models/PasswordToken.js +17 -17
  168. package/dist/src/models/PasswordToken.js.map +1 -1
  169. package/dist/src/models/PayconiqPayment.d.ts +1 -1
  170. package/dist/src/models/PayconiqPayment.d.ts.map +1 -1
  171. package/dist/src/models/PayconiqPayment.js +49 -49
  172. package/dist/src/models/PayconiqPayment.js.map +1 -1
  173. package/dist/src/models/Payment.d.ts +3 -3
  174. package/dist/src/models/Payment.d.ts.map +1 -1
  175. package/dist/src/models/Payment.js +36 -36
  176. package/dist/src/models/Payment.js.map +1 -1
  177. package/dist/src/models/Platform.d.ts +2 -2
  178. package/dist/src/models/Platform.d.ts.map +1 -1
  179. package/dist/src/models/Platform.js +8 -8
  180. package/dist/src/models/Platform.js.map +1 -1
  181. package/dist/src/models/RegisterCode.d.ts +1 -1
  182. package/dist/src/models/RegisterCode.d.ts.map +1 -1
  183. package/dist/src/models/RegisterCode.js +11 -11
  184. package/dist/src/models/RegisterCode.js.map +1 -1
  185. package/dist/src/models/Registration.d.ts +1 -1
  186. package/dist/src/models/Registration.d.ts.map +1 -1
  187. package/dist/src/models/Registration.js +88 -88
  188. package/dist/src/models/Registration.js.map +1 -1
  189. package/dist/src/models/RegistrationPeriod.d.ts.map +1 -1
  190. package/dist/src/models/RegistrationPeriod.js +12 -12
  191. package/dist/src/models/RegistrationPeriod.js.map +1 -1
  192. package/dist/src/models/STCredit.d.ts +1 -1
  193. package/dist/src/models/STCredit.d.ts.map +1 -1
  194. package/dist/src/models/STCredit.js +12 -12
  195. package/dist/src/models/STCredit.js.map +1 -1
  196. package/dist/src/models/STInvoice.d.ts +1 -1
  197. package/dist/src/models/STInvoice.d.ts.map +1 -1
  198. package/dist/src/models/STInvoice.js +16 -16
  199. package/dist/src/models/STInvoice.js.map +1 -1
  200. package/dist/src/models/STPackage.d.ts +1 -1
  201. package/dist/src/models/STPackage.d.ts.map +1 -1
  202. package/dist/src/models/STPackage.js +39 -39
  203. package/dist/src/models/STPackage.js.map +1 -1
  204. package/dist/src/models/STPendingInvoice.d.ts +1 -1
  205. package/dist/src/models/STPendingInvoice.d.ts.map +1 -1
  206. package/dist/src/models/STPendingInvoice.js +11 -11
  207. package/dist/src/models/STPendingInvoice.js.map +1 -1
  208. package/dist/src/models/StripeAccount.d.ts.map +1 -1
  209. package/dist/src/models/StripeAccount.js +13 -13
  210. package/dist/src/models/StripeAccount.js.map +1 -1
  211. package/dist/src/models/StripeCheckoutSession.d.ts +1 -1
  212. package/dist/src/models/StripeCheckoutSession.d.ts.map +1 -1
  213. package/dist/src/models/StripeCheckoutSession.js +7 -7
  214. package/dist/src/models/StripeCheckoutSession.js.map +1 -1
  215. package/dist/src/models/StripePaymentIntent.d.ts +1 -1
  216. package/dist/src/models/StripePaymentIntent.d.ts.map +1 -1
  217. package/dist/src/models/StripePaymentIntent.js +7 -7
  218. package/dist/src/models/StripePaymentIntent.js.map +1 -1
  219. package/dist/src/models/Ticket.d.ts +2 -2
  220. package/dist/src/models/Ticket.d.ts.map +1 -1
  221. package/dist/src/models/Ticket.js +23 -23
  222. package/dist/src/models/Ticket.js.map +1 -1
  223. package/dist/src/models/Token.d.ts +3 -3
  224. package/dist/src/models/Token.d.ts.map +1 -1
  225. package/dist/src/models/Token.js +27 -27
  226. package/dist/src/models/Token.js.map +1 -1
  227. package/dist/src/models/Token.test.js +11 -11
  228. package/dist/src/models/UsedRegisterCode.d.ts +1 -1
  229. package/dist/src/models/UsedRegisterCode.d.ts.map +1 -1
  230. package/dist/src/models/UsedRegisterCode.js +10 -10
  231. package/dist/src/models/UsedRegisterCode.js.map +1 -1
  232. package/dist/src/models/User.d.ts +4 -4
  233. package/dist/src/models/User.d.ts.map +1 -1
  234. package/dist/src/models/User.js +53 -51
  235. package/dist/src/models/User.js.map +1 -1
  236. package/dist/src/models/UserPermissions.d.ts +3 -3
  237. package/dist/src/models/UserPermissions.d.ts.map +1 -1
  238. package/dist/src/models/UserPermissions.js +12 -12
  239. package/dist/src/models/UserPermissions.js.map +1 -1
  240. package/dist/src/models/Webshop.d.ts +1 -1
  241. package/dist/src/models/Webshop.d.ts.map +1 -1
  242. package/dist/src/models/Webshop.js +23 -23
  243. package/dist/src/models/Webshop.js.map +1 -1
  244. package/dist/src/models/WebshopDiscountCode.d.ts +1 -1
  245. package/dist/src/models/WebshopDiscountCode.d.ts.map +1 -1
  246. package/dist/src/models/WebshopDiscountCode.js +16 -16
  247. package/dist/src/models/WebshopDiscountCode.js.map +1 -1
  248. package/dist/src/models/addresses/City.d.ts.map +1 -1
  249. package/dist/src/models/addresses/City.js +9 -9
  250. package/dist/src/models/addresses/City.js.map +1 -1
  251. package/dist/src/models/addresses/PostalCode.d.ts.map +1 -1
  252. package/dist/src/models/addresses/PostalCode.js +11 -11
  253. package/dist/src/models/addresses/PostalCode.js.map +1 -1
  254. package/dist/src/models/addresses/PostalCode.test.js +22 -22
  255. package/dist/src/models/addresses/PostalCode.test.js.map +1 -1
  256. package/dist/src/models/addresses/Province.d.ts.map +1 -1
  257. package/dist/src/models/addresses/Province.js +5 -5
  258. package/dist/src/models/addresses/Province.js.map +1 -1
  259. package/dist/src/models/addresses/Street.d.ts.map +1 -1
  260. package/dist/src/models/addresses/Street.js +6 -6
  261. package/dist/src/models/addresses/Street.js.map +1 -1
  262. package/dist/src/models/index.d.ts +46 -46
  263. package/dist/src/models/index.d.ts.map +1 -1
  264. package/dist/src/models/index.js +0 -1
  265. package/dist/src/models/index.js.map +1 -1
  266. package/dist/src/structures/OrganizationServerMetaData.d.ts.map +1 -1
  267. package/dist/src/structures/OrganizationServerMetaData.js +4 -4
  268. package/dist/src/structures/OrganizationServerMetaData.js.map +1 -1
  269. package/dist/tests/jest.global.setup.d.ts.map +1 -1
  270. package/dist/tests/jest.global.setup.js +15 -13
  271. package/dist/tests/jest.global.setup.js.map +1 -1
  272. package/dist/tests/jest.setup.js +3 -1
  273. package/dist/tests/jest.setup.js.map +1 -1
  274. package/dist/tsconfig.tsbuildinfo +1 -0
  275. package/package.json +3 -3
  276. package/src/factories/AddressFactory.ts +17 -17
  277. package/src/factories/EmergencyContactFactory.ts +30 -31
  278. package/src/factories/GroupFactory.ts +30 -30
  279. package/src/factories/MemberFactory.ts +41 -38
  280. package/src/factories/OrganizationFactory.ts +15 -15
  281. package/src/factories/ParentFactory.ts +24 -24
  282. package/src/factories/RecordFactory.ts +5 -4
  283. package/src/factories/RegisterCodeFactory.ts +7 -7
  284. package/src/factories/RegistrationFactory.ts +16 -16
  285. package/src/factories/RegistrationPeriodFactory.ts +5 -5
  286. package/src/factories/UserFactory.ts +20 -19
  287. package/src/factories/WebshopFactory.ts +14 -14
  288. package/src/helpers/DNSValidator.ts +89 -84
  289. package/src/helpers/EmailBuilder.ts +141 -135
  290. package/src/helpers/GroupBuilder.ts +181 -181
  291. package/src/helpers/Handlebars.ts +57 -54
  292. package/src/helpers/MemberMerger.test.ts +702 -702
  293. package/src/helpers/MemberMerger.ts +83 -77
  294. package/src/helpers/RateLimiter.ts +25 -27
  295. package/src/helpers/SetupStepsUpdater.ts +402 -0
  296. package/src/helpers/WebshopCounter.test.ts +12 -12
  297. package/src/helpers/WebshopCounter.ts +20 -19
  298. package/src/index.ts +20 -19
  299. package/src/migrations/1605262045-import-postcodes.ts +59 -63
  300. package/src/migrations/1605262046-import-postcodes-nl.ts +41 -43
  301. package/src/models/BalanceItem.ts +173 -172
  302. package/src/models/BalanceItemPayment.ts +32 -33
  303. package/src/models/BuckarooPayment.ts +7 -7
  304. package/src/models/CachedOutstandingBalance.ts +98 -99
  305. package/src/models/Document.ts +90 -87
  306. package/src/models/DocumentTemplate.ts +207 -198
  307. package/src/models/Email.ts +198 -200
  308. package/src/models/EmailRecipient.ts +38 -39
  309. package/src/models/EmailTemplate.ts +36 -37
  310. package/src/models/EmailVerificationCode.ts +146 -142
  311. package/src/models/Event.ts +53 -53
  312. package/src/models/Group.ts +136 -123
  313. package/src/models/Image.ts +48 -48
  314. package/src/models/Member.ts +277 -275
  315. package/src/models/MemberPlatformMembership.ts +71 -71
  316. package/src/models/MemberResponsibilityRecord.ts +32 -32
  317. package/src/models/MergedMember.ts +77 -77
  318. package/src/models/MolliePayment.ts +7 -7
  319. package/src/models/MollieToken.ts +131 -126
  320. package/src/models/OneTimeToken.ts +40 -39
  321. package/src/models/Order.ts +379 -372
  322. package/src/models/Organization.ts +332 -325
  323. package/src/models/OrganizationRegistrationPeriod.ts +50 -50
  324. package/src/models/PasswordToken.ts +42 -42
  325. package/src/models/PayconiqPayment.ts +80 -76
  326. package/src/models/Payment.ts +86 -86
  327. package/src/models/Platform.ts +21 -22
  328. package/src/models/RegisterCode.ts +26 -26
  329. package/src/models/Registration.ts +167 -168
  330. package/src/models/RegistrationPeriod.ts +29 -29
  331. package/src/models/STCredit.ts +24 -25
  332. package/src/models/STInvoice.ts +34 -34
  333. package/src/models/STPackage.ts +143 -136
  334. package/src/models/STPendingInvoice.ts +26 -26
  335. package/src/models/StripeAccount.ts +27 -27
  336. package/src/models/StripeCheckoutSession.ts +10 -10
  337. package/src/models/StripePaymentIntent.ts +10 -10
  338. package/src/models/Ticket.ts +51 -52
  339. package/src/models/Token.test.ts +13 -13
  340. package/src/models/Token.ts +64 -63
  341. package/src/models/UsedRegisterCode.ts +20 -21
  342. package/src/models/User.ts +148 -144
  343. package/src/models/UserPermissions.ts +25 -28
  344. package/src/models/Webshop.ts +53 -53
  345. package/src/models/WebshopDiscountCode.ts +33 -33
  346. package/src/models/addresses/City.ts +12 -12
  347. package/src/models/addresses/PostalCode.test.ts +68 -69
  348. package/src/models/addresses/PostalCode.ts +57 -57
  349. package/src/models/addresses/Province.ts +8 -8
  350. package/src/models/addresses/Street.ts +10 -12
  351. package/src/models/index.ts +54 -55
  352. 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 "uuid";
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 = "registrations"
12
+ static table = 'registrations';
13
13
 
14
14
  @column({
15
- primary: true, type: "string", beforeSave(value) {
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: "string" })
21
+ @column({ type: 'string' })
22
22
  memberId: string;
23
23
 
24
- @column({ type: "string" })
25
- organizationId: string
24
+ @column({ type: 'string' })
25
+ organizationId: string;
26
26
 
27
- @column({ type: "string" })
27
+ @column({ type: 'string' })
28
28
  periodId: string;
29
29
 
30
- @column({ type: "string", foreignKey: Registration.group})
30
+ @column({ type: 'string', foreignKey: Registration.group })
31
31
  groupId: string;
32
-
33
- @column({ type: "json", decoder: GroupPrice})
32
+
33
+ @column({ type: 'json', decoder: GroupPrice })
34
34
  groupPrice: GroupPrice;
35
35
 
36
- @column({ type: "json", decoder: new ArrayDecoder(RegisterItemOption) })
36
+ @column({ type: 'json', decoder: new ArrayDecoder(RegisterItemOption) })
37
37
  options: RegisterItemOption[] = [];
38
38
 
39
39
  /**
40
40
  * @deprecated
41
41
  */
42
- @column({ type: "string", nullable: true })
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: "integer" })
48
+ @column({ type: 'integer' })
49
49
  cycle: number = 0;
50
50
 
51
- @column({ type: "integer", nullable: true })
51
+ @column({ type: 'integer', nullable: true })
52
52
  price: number | null = null;
53
53
 
54
54
  @column({
55
- type: "datetime", beforeSave(old?: any) {
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: "datetime", beforeSave() {
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: "datetime", nullable: true })
77
- registeredAt: Date | null = null
76
+ @column({ type: 'datetime', nullable: true })
77
+ registeredAt: Date | null = null;
78
78
 
79
- @column({ type: "datetime", nullable: true })
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: "boolean" })
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: "boolean" })
93
- canRegister = false
92
+ @column({ type: 'boolean' })
93
+ canRegister = false;
94
94
 
95
- @column({ type: "datetime", nullable: true})
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: "integer" })
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: "json", decoder: new ArrayDecoder(StockReservation), nullable: true })
108
- stockReservations: StockReservation[] = []
107
+ @column({ type: 'json', decoder: new ArrayDecoder(StockReservation), nullable: true })
108
+ stockReservations: StockReservation[] = [];
109
109
 
110
- static group: ManyToOneRelation<"group", import('./Group').Group>
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
- return count as number
178
- } else {
179
- console.error("Unexpected result for occupancy", results)
180
- throw new Error("Query failed")
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 = this.registeredAt ?? new Date()
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, "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: "firstName",
247
+ token: 'firstName',
247
248
  value: member.details.firstName,
248
249
  }),
249
250
  Replacement.create({
250
- token: "lastName",
251
+ token: 'lastName',
251
252
  value: member.details.lastName,
252
253
  }),
253
254
  Replacement.create({
254
- token: "firstNameMember",
255
+ token: 'firstNameMember',
255
256
  value: member.details.firstName,
256
257
  }),
257
258
  Replacement.create({
258
- token: "lastNameMember",
259
+ token: 'lastNameMember',
259
260
  value: member.details.lastName,
260
261
  }),
261
262
  Replacement.create({
262
- token: "email",
263
- value: user.email
263
+ token: 'email',
264
+ value: user.email,
264
265
  }),
265
266
  Replacement.create({
266
- token: "registerUrl",
267
- value: "https://" + organization.getHost()
267
+ token: 'registerUrl',
268
+ value: 'https://' + organization.getHost(),
268
269
  }),
269
270
  Replacement.create({
270
- token: "organizationName",
271
- value: organization.name
271
+ token: 'organizationName',
272
+ value: organization.name,
272
273
  }),
273
274
  Replacement.create({
274
- token: "groupName",
275
- value: group.settings.name
275
+ token: 'groupName',
276
+ value: group.settings.name,
276
277
  }),
277
278
  Replacement.create({
278
- token: "loginDetails",
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: "transactional",
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: "priceToPay",
327
- value: Formatter.price(payment.price)
327
+ token: 'priceToPay',
328
+ value: Formatter.price(payment.price),
328
329
  }),
329
330
  Replacement.create({
330
- token: "paymentMethod",
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: "transferDescription",
335
- value: (payment.transferDescription ?? "")
335
+ token: 'transferDescription',
336
+ value: (payment.transferDescription ?? ''),
336
337
  }),
337
338
  Replacement.create({
338
- token: "transferBankAccount",
339
- value: payment.transferSettings?.iban ?? ""
339
+ token: 'transferBankAccount',
340
+ value: payment.transferSettings?.iban ?? '',
340
341
  }),
341
342
  Replacement.create({
342
- token: "transferBankCreditor",
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: "overviewTable",
347
- value: "",
348
- html: paymentGeneral.getDetailsHTMLTable()
347
+ token: 'overviewTable',
348
+ value: '',
349
+ html: paymentGeneral.getDetailsHTMLTable(),
349
350
  }),
350
351
  Replacement.create({
351
- token: "overviewContext",
352
- value: "Inschrijving van " + paymentGeneral.memberNames
352
+ token: 'overviewContext',
353
+ value: 'Inschrijving van ' + paymentGeneral.memberNames,
353
354
  }),
354
355
  Replacement.create({
355
- token: "memberNames",
356
- value: paymentGeneral.memberNames
356
+ token: 'memberNames',
357
+ value: paymentGeneral.memberNames,
357
358
  }),
358
359
  Replacement.create({
359
- token: "overviewTable",
360
- value: "",
361
- html: paymentGeneral.getDetailsHTMLTable()
360
+ token: 'overviewTable',
361
+ value: '',
362
+ html: paymentGeneral.getDetailsHTMLTable(),
362
363
  }),
363
364
  Replacement.create({
364
- token: "paymentTable",
365
- value: "",
366
- html: paymentGeneral.getHTMLTable()
365
+ token: 'paymentTable',
366
+ value: '',
367
+ html: paymentGeneral.getHTMLTable(),
367
368
  }),
368
369
  Replacement.create({
369
- token: "registerUrl",
370
- value: "https://" + organization.getHost()
370
+ token: 'registerUrl',
371
+ value: 'https://' + organization.getHost(),
371
372
  }),
372
373
  Replacement.create({
373
- token: "organizationName",
374
- value: organization.name
374
+ token: 'organizationName',
375
+ value: organization.name,
375
376
  }),
376
377
  Replacement.create({
377
- token: "loginDetails",
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: "transactional",
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
- } else {
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
  }