@stamhoofd/backend 2.121.0 → 2.122.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 (429) hide show
  1. package/output-2.txt +1 -0
  2. package/output.txt +1 -0
  3. package/package.json +69 -52
  4. package/src/audit-logs/EventNotificationLogger.ts +40 -0
  5. package/src/audit-logs/ModelLogger.ts +19 -15
  6. package/src/audit-logs/OrganizationLogger.ts +1 -1
  7. package/src/audit-logs/RegistrationInvitationLogger.ts +24 -24
  8. package/src/audit-logs/init.ts +8 -2
  9. package/src/boot.ts +19 -18
  10. package/src/crons/amazon-ses.ts +13 -26
  11. package/src/crons/balance-emails.ts +3 -5
  12. package/src/crons/clearExcelCache.test.ts +1 -1
  13. package/src/crons/clearExcelCache.ts +1 -2
  14. package/src/crons/drip-emails.ts +42 -0
  15. package/src/crons/endFunctionsOfUsersWithoutRegistration.ts +4 -0
  16. package/src/crons/helpers/isOutside.ts +11 -0
  17. package/src/crons/helpers/useSavedIterator.ts +32 -0
  18. package/src/crons/index.ts +5 -0
  19. package/src/crons/invoices.ts +32 -38
  20. package/src/crons/members-fees.ts +50 -0
  21. package/src/crons/mollie-chargebacks.ts +14 -15
  22. package/src/crons/service-fees.ts +152 -0
  23. package/src/crons/stripe-invoices.ts +48 -0
  24. package/src/crons/transfer-fees.ts +176 -0
  25. package/src/crons/update-cached-balances.ts +4 -4
  26. package/src/crons.ts +7 -64
  27. package/src/debug.ts +4 -2
  28. package/src/email-recipient-loaders/documents.ts +1 -1
  29. package/src/email-recipient-loaders/members.ts +1 -1
  30. package/src/email-recipient-loaders/payments.ts +4 -6
  31. package/src/email-recipient-loaders/registrations.ts +1 -1
  32. package/src/email-replacements/getEmailReplacementsForPayment.ts +5 -9
  33. package/src/endpoints/admin/members/ChargeMembersEndpoint.ts +1 -1
  34. package/src/endpoints/admin/memberships/ChargeMembershipsEndpoint.ts +1 -1
  35. package/src/endpoints/admin/memberships/GetChargeMembershipsSummaryEndpoint.ts +3 -5
  36. package/src/endpoints/admin/organizations/ChargeOrganizationsEndpoint.ts +1 -1
  37. package/src/endpoints/admin/organizations/GetOrganizationsCountEndpoint.ts +1 -1
  38. package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +13 -7
  39. package/src/endpoints/admin/organizations/PatchOrganizationsEndpoint.ts +4 -6
  40. package/src/endpoints/admin/organizations/PatchPackagesEndpoint.test.ts +10 -6
  41. package/src/endpoints/admin/organizations/PatchPackagesEndpoint.ts +39 -21
  42. package/src/endpoints/admin/registrations/ChargeRegistrationsEndpoint.ts +1 -1
  43. package/src/endpoints/auth/CreateAdminEndpoint.ts +23 -5
  44. package/src/endpoints/auth/CreateTokenEndpoint.ts +2 -2
  45. package/src/endpoints/auth/DeleteTokenEndpoint.ts +1 -1
  46. package/src/endpoints/auth/DeleteUserEndpoint.ts +3 -3
  47. package/src/endpoints/auth/ForgotPasswordEndpoint.ts +1 -1
  48. package/src/endpoints/auth/GetOtherUserEndpoint.ts +1 -1
  49. package/src/endpoints/auth/GetUserEndpoint.ts +1 -1
  50. package/src/endpoints/auth/OpenIDConnectAuthTokenEndpoint.ts +1 -1
  51. package/src/endpoints/auth/OpenIDConnectStartEndpoint.ts +1 -1
  52. package/src/endpoints/auth/PatchUserEndpoint.ts +5 -8
  53. package/src/endpoints/auth/PollEmailVerificationEndpoint.ts +1 -1
  54. package/src/endpoints/auth/RetryEmailVerificationEndpoint.ts +1 -1
  55. package/src/endpoints/auth/SignupEndpoint.ts +2 -3
  56. package/src/endpoints/auth/VerifyEmailEndpoint.ts +20 -3
  57. package/src/endpoints/frontend/FrontendEnvironmentEndpoint.ts +2 -1
  58. package/src/endpoints/global/addresses/SearchRegionsEndpoint.ts +2 -4
  59. package/src/endpoints/global/addresses/ValidateAddressEndpoint.ts +1 -1
  60. package/src/endpoints/global/audit-logs/GetAuditLogsEndpoint.ts +5 -7
  61. package/src/endpoints/global/caddy/CheckDomainCertEndpoint.ts +2 -2
  62. package/src/endpoints/global/email/CreateEmailEndpoint.ts +3 -4
  63. package/src/endpoints/global/email/GetAdminEmailsEndpoint.test.ts +1 -1
  64. package/src/endpoints/global/email/GetAdminEmailsEndpoint.ts +1 -2
  65. package/src/endpoints/global/email/GetEmailAddressEndpoint.ts +4 -6
  66. package/src/endpoints/global/email/GetEmailEndpoint.ts +1 -1
  67. package/src/endpoints/global/email/GetUserEmailsEndpoint.test.ts +1 -1
  68. package/src/endpoints/global/email/GetUserEmailsEndpoint.ts +1 -1
  69. package/src/endpoints/global/email/ManageEmailAddressEndpoint.ts +6 -10
  70. package/src/endpoints/global/email/PatchEmailEndpoint.test.ts +4 -7
  71. package/src/endpoints/global/email/PatchEmailEndpoint.ts +6 -9
  72. package/src/endpoints/global/email-recipients/GetEmailRecipientsCountEndpoint.ts +1 -1
  73. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.test.ts +1 -1
  74. package/src/endpoints/global/email-recipients/GetEmailRecipientsEndpoint.ts +1 -1
  75. package/src/endpoints/global/email-recipients/RetryEmailRecipientEndpoint.ts +2 -2
  76. package/src/endpoints/global/events/GetEventNotificationsCountEndpoint.ts +1 -1
  77. package/src/endpoints/global/events/GetEventNotificationsEndpoint.ts +3 -3
  78. package/src/endpoints/global/events/GetEventsEndpoint.ts +3 -3
  79. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.test.ts +49 -4
  80. package/src/endpoints/global/events/PatchEventNotificationsEndpoint.ts +5 -8
  81. package/src/endpoints/global/events/PatchEventsEndpoint.test.ts +12 -44
  82. package/src/endpoints/global/events/PatchEventsEndpoint.ts +128 -127
  83. package/src/endpoints/global/files/ExportToExcelEndpoint.ts +9 -9
  84. package/src/endpoints/global/files/GetFileCache.ts +3 -4
  85. package/src/endpoints/global/files/UploadFile.ts +3 -4
  86. package/src/endpoints/global/files/UploadImage.ts +3 -4
  87. package/src/endpoints/global/groups/GetGroupsCountEndpoint.ts +1 -1
  88. package/src/endpoints/global/groups/GetGroupsEndpoint.test.ts +1 -1
  89. package/src/endpoints/global/groups/GetGroupsEndpoint.ts +4 -2
  90. package/src/endpoints/global/members/GetMemberFamilyEndpoint.ts +2 -3
  91. package/src/endpoints/global/members/GetMembersCountEndpoint.ts +1 -1
  92. package/src/endpoints/global/members/GetMembersEndpoint.test.ts +2 -2
  93. package/src/endpoints/global/members/GetMembersEndpoint.ts +10 -12
  94. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.test.ts +195 -12
  95. package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +16 -22
  96. package/src/endpoints/global/members/helpers/validateGroupFilter.ts +6 -30
  97. package/src/endpoints/global/members/shouldCheckIfMemberIsDuplicate.ts +1 -1
  98. package/src/endpoints/global/organizations/CheckRegisterCodeEndpoint.ts +1 -1
  99. package/src/endpoints/global/organizations/CreateOrganizationEndpoint.ts +40 -8
  100. package/src/endpoints/global/organizations/GetOrganizationFromDomainEndpoint.ts +2 -2
  101. package/src/endpoints/global/organizations/GetOrganizationFromUriEndpoint.ts +2 -2
  102. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.test.ts +4 -1
  103. package/src/endpoints/global/organizations/SearchOrganizationEndpoint.ts +4 -5
  104. package/src/endpoints/global/payments/StripeWebhookEndpoint.ts +9 -16
  105. package/src/endpoints/global/platform/GetPlatformAdminsEndpoint.ts +1 -1
  106. package/src/endpoints/global/platform/GetPlatformEndpoint.ts +1 -1
  107. package/src/endpoints/global/platform/PatchPlatformEnpoint.test.ts +1 -1
  108. package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +11 -11
  109. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsCountEndpoint.ts +31 -31
  110. package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +18 -20
  111. package/src/endpoints/global/registration/GetRegistrationsCountEndpoint.ts +1 -1
  112. package/src/endpoints/global/registration/GetRegistrationsEndpoint.test.ts +1 -1
  113. package/src/endpoints/global/registration/GetRegistrationsEndpoint.ts +6 -10
  114. package/src/endpoints/global/registration/GetUserDetailedPayableBalanceEndpoint.ts +35 -6
  115. package/src/endpoints/global/registration/GetUserDocumentsEndpoint.ts +2 -2
  116. package/src/endpoints/global/registration/GetUserMembersEndpoint.ts +1 -1
  117. package/src/endpoints/global/registration/GetUserPayableBalanceEndpoint.ts +1 -1
  118. package/src/endpoints/global/registration/PatchUserMembersEndpoint.test.ts +2 -2
  119. package/src/endpoints/global/registration/PatchUserMembersEndpoint.ts +3 -3
  120. package/src/endpoints/global/registration/RegisterMembersEndpoint.test.ts +90 -6
  121. package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +35 -34
  122. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsCountEndpoint.ts +1 -1
  123. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.test.ts +62 -63
  124. package/src/endpoints/global/registration-invitations/GetRegistrationInvitationsEndpoint.ts +6 -9
  125. package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.test.ts +51 -52
  126. package/src/endpoints/global/registration-invitations/PatchRegistrationInvitationsEndpoint.ts +6 -7
  127. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsCountEndpoint.ts +43 -0
  128. package/src/endpoints/global/registration-periods/GetRegistrationPeriodsEndpoint.ts +1 -1
  129. package/src/endpoints/global/registration-periods/PatchRegistrationPeriodsEndpoint.ts +13 -5
  130. package/src/endpoints/global/sso/GetSSOEndpoint.ts +2 -3
  131. package/src/endpoints/global/sso/SetSSOEndpoint.ts +1 -1
  132. package/src/endpoints/global/webshops/GetWebshopFromDomainEndpoint.ts +2 -2
  133. package/src/endpoints/global/webshops/GetWebshopsEndpoint.test.ts +1 -2
  134. package/src/endpoints/global/webshops/GetWebshopsEndpoint.ts +2 -4
  135. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemEndpoint.ts +2 -2
  136. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsCountEndpoint.ts +1 -1
  137. package/src/endpoints/organization/dashboard/balance-items/GetBalanceItemsEndpoint.ts +3 -4
  138. package/src/endpoints/organization/dashboard/balance-items/PatchBalanceItemsEndpoint.ts +7 -9
  139. package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.test.ts +73 -0
  140. package/src/endpoints/organization/dashboard/billing/ApplyRegisterCodeEndpoint.ts +89 -0
  141. package/src/endpoints/organization/dashboard/billing/DeactivatePackageEndpoint.ts +1 -5
  142. package/src/endpoints/organization/dashboard/billing/DeleteOrganizationMandateEndpoint.ts +11 -11
  143. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceCollectionEndpoint.ts +2 -2
  144. package/src/endpoints/organization/dashboard/billing/GetOrganizationDetailedPayableBalanceEndpoint.ts +8 -8
  145. package/src/endpoints/organization/dashboard/billing/GetOrganizationMandatesEndpoint.ts +9 -9
  146. package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableBalanceEndpoint.ts +2 -2
  147. package/src/endpoints/organization/dashboard/billing/GetOrganizationPayableInvoicesEndpoint.ts +68 -0
  148. package/src/endpoints/organization/dashboard/billing/GetPackagesEndpoint.ts +4 -4
  149. package/src/endpoints/organization/dashboard/billing/GetRegisterCodeEndpoint.ts +66 -0
  150. package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.test.ts +949 -0
  151. package/src/endpoints/organization/dashboard/billing/OrganizationCheckoutEndpoint.ts +60 -57
  152. package/src/endpoints/organization/dashboard/billing/PatchOrganizationMandatesEndpoint.ts +20 -20
  153. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplateXML.ts +1 -1
  154. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesCountEndpoint.ts +1 -1
  155. package/src/endpoints/organization/dashboard/documents/GetDocumentTemplatesEndpoint.ts +1 -1
  156. package/src/endpoints/organization/dashboard/documents/GetDocumentsCountEndpoint.ts +1 -1
  157. package/src/endpoints/organization/dashboard/documents/GetDocumentsEndpoint.ts +1 -1
  158. package/src/endpoints/organization/dashboard/documents/PatchDocumentEndpoint.ts +10 -2
  159. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.test.ts +2 -2
  160. package/src/endpoints/organization/dashboard/documents/PatchDocumentTemplatesEndpoint.ts +2 -2
  161. package/src/endpoints/organization/dashboard/email/CheckEmailBouncesEndpoint.ts +1 -1
  162. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.test.ts +1 -1
  163. package/src/endpoints/organization/dashboard/email-templates/GetEmailTemplatesEndpoint.ts +10 -8
  164. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.test.ts +1 -1
  165. package/src/endpoints/organization/dashboard/email-templates/PatchEmailTemplatesEndpoint.ts +5 -6
  166. package/src/endpoints/organization/dashboard/invoices/GetInvoicesCountEndpoint.ts +1 -1
  167. package/src/endpoints/organization/dashboard/invoices/GetInvoicesEndpoint.ts +10 -6
  168. package/src/endpoints/organization/dashboard/invoices/PatchInvoicesEndpoint.ts +11 -2
  169. package/src/endpoints/organization/dashboard/mollie/CheckMollieEndpoint.ts +4 -5
  170. package/src/endpoints/organization/dashboard/mollie/ConnectMollieEndpoint.ts +5 -5
  171. package/src/endpoints/organization/dashboard/mollie/DisconnectMollieEndpoint.ts +2 -2
  172. package/src/endpoints/organization/dashboard/mollie/GetMollieDashboardEndpoint.ts +7 -7
  173. package/src/endpoints/organization/dashboard/nolt/CreateNoltTokenEndpoint.ts +1 -1
  174. package/src/endpoints/organization/dashboard/organization/GetOrganizationArchivedGroups.ts +2 -2
  175. package/src/endpoints/organization/dashboard/organization/GetOrganizationDeletedGroups.ts +1 -1
  176. package/src/endpoints/organization/dashboard/organization/GetUitpasClientIdEndpoint.ts +1 -1
  177. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.test.ts +2 -2
  178. package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +50 -12
  179. package/src/endpoints/organization/dashboard/organization/SearchUitpasOrganizersEndpoint.ts +2 -2
  180. package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +5 -10
  181. package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +1 -1
  182. package/src/endpoints/organization/dashboard/payments/GetPaymentsCountEndpoint.ts +1 -1
  183. package/src/endpoints/organization/dashboard/payments/GetPaymentsEndpoint.ts +3 -4
  184. package/src/endpoints/organization/dashboard/payments/PatchPaymentsEndpoint.ts +21 -14
  185. package/src/endpoints/organization/dashboard/receivable-balances/ChargeReceivableBalancesEndpoint.ts +35 -28
  186. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalanceEndpoint.ts +2 -3
  187. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesCountEndpoint.ts +1 -1
  188. package/src/endpoints/organization/dashboard/receivable-balances/GetReceivableBalancesEndpoint.ts +1 -1
  189. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
  190. package/src/endpoints/organization/dashboard/registration-periods/GetOrganizationRegistrationPeriodsEndpoint.ts +2 -3
  191. package/src/endpoints/organization/dashboard/registration-periods/MoveRegistrationPeriods.test.ts +1 -1
  192. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.test.ts +1 -1
  193. package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +19 -18
  194. package/src/endpoints/organization/dashboard/registration-periods/SetupStepReviewEndpoint.ts +4 -5
  195. package/src/endpoints/organization/dashboard/stripe/ConnectStripeEndpoint.ts +1 -1
  196. package/src/endpoints/organization/dashboard/stripe/DeleteStripeAccountEndpoint.ts +2 -3
  197. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountLinkEndpoint.ts +2 -2
  198. package/src/endpoints/organization/dashboard/stripe/GetStripeAccountsEndpoint.ts +1 -1
  199. package/src/endpoints/organization/dashboard/stripe/GetStripeLoginLinkEndpoint.ts +2 -2
  200. package/src/endpoints/organization/dashboard/stripe/UpdateStripeAccountEndpoint.ts +1 -1
  201. package/src/endpoints/organization/dashboard/users/CreateApiUserEndpoint.ts +1 -1
  202. package/src/endpoints/organization/dashboard/users/DeleteUserEndpoint.ts +1 -1
  203. package/src/endpoints/organization/dashboard/users/GetApiUsersEndpoint.ts +1 -1
  204. package/src/endpoints/organization/dashboard/users/GetOrganizationAdminsEndpoint.ts +1 -1
  205. package/src/endpoints/organization/dashboard/users/PatchApiUserEndpoint.ts +4 -6
  206. package/src/endpoints/organization/dashboard/webshops/CreateWebshopEndpoint.ts +10 -15
  207. package/src/endpoints/organization/dashboard/webshops/DeleteWebshopEndpoint.ts +1 -1
  208. package/src/endpoints/organization/dashboard/webshops/GetDiscountCodesEndpoint.ts +2 -2
  209. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersCountEndpoint.ts +1 -1
  210. package/src/endpoints/organization/dashboard/webshops/GetWebshopOrdersEndpoint.ts +1 -1
  211. package/src/endpoints/organization/dashboard/webshops/GetWebshopTicketsEndpoint.ts +1 -1
  212. package/src/endpoints/organization/dashboard/webshops/GetWebshopUriAvailabilityEndpoint.ts +11 -2
  213. package/src/endpoints/organization/dashboard/webshops/PatchDiscountCodesEndpoint.ts +4 -6
  214. package/src/endpoints/organization/dashboard/webshops/PatchWebshopEndpoint.ts +22 -7
  215. package/src/endpoints/organization/dashboard/webshops/PatchWebshopOrdersEndpoint.ts +20 -27
  216. package/src/endpoints/organization/dashboard/webshops/PatchWebshopTicketsEndpoint.ts +1 -1
  217. package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +2 -2
  218. package/src/endpoints/organization/dashboard/webshops/VerifyWebshopDomainEndpoint.ts +2 -3
  219. package/src/endpoints/organization/dashboard/webshops/WebshopReservedPathSegments.test.ts +95 -0
  220. package/src/endpoints/organization/shared/ExchangePaymentEndpoint.ts +2 -2
  221. package/src/endpoints/organization/shared/GetDocumentHtml.ts +1 -1
  222. package/src/endpoints/organization/shared/GetPaymentEndpoint.ts +1 -1
  223. package/src/endpoints/organization/shared/GetUitpasNumberDetailsEndpoint.ts +3 -5
  224. package/src/endpoints/organization/shared/auth/GetOrganizationEndpoint.ts +1 -1
  225. package/src/endpoints/organization/webshops/CheckWebshopDiscountCodesEndpoint.ts +4 -1
  226. package/src/endpoints/organization/webshops/GetOrderByPaymentEndpoint.ts +14 -3
  227. package/src/endpoints/organization/webshops/GetOrderEndpoint.ts +14 -2
  228. package/src/endpoints/organization/webshops/GetTicketsEndpoint.ts +37 -16
  229. package/src/endpoints/organization/webshops/GetWebshopEndpoint.test.ts +34 -2
  230. package/src/endpoints/organization/webshops/GetWebshopEndpoint.ts +4 -2
  231. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.test.ts +74 -3
  232. package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +16 -33
  233. package/src/endpoints/organization/webshops/RetrieveUitpasSocialTariffPriceEndpoint.ts +3 -5
  234. package/src/endpoints/organization/webshops/WebshopAuthHelper.ts +36 -0
  235. package/src/endpoints/system/HealthEndpoint.ts +1 -1
  236. package/src/excel-loaders/balance-items.ts +1 -1
  237. package/src/excel-loaders/event-notifications.ts +1 -1
  238. package/src/excel-loaders/members.ts +1 -1
  239. package/src/excel-loaders/organizations.ts +3 -3
  240. package/src/excel-loaders/payments.ts +31 -1
  241. package/src/excel-loaders/platform-memberships.ts +13 -14
  242. package/src/excel-loaders/receivable-balances.ts +2 -2
  243. package/src/excel-loaders/registrations.ts +2 -3
  244. package/src/helpers/AddressValidator.ts +7 -14
  245. package/src/helpers/AdminPermissionChecker.ts +50 -63
  246. package/src/helpers/AuthenticatedStructures.ts +69 -55
  247. package/src/helpers/BalanceItemRelationsBackfiller.test.ts +174 -0
  248. package/src/helpers/BalanceItemRelationsBackfiller.ts +163 -0
  249. package/src/helpers/BuckarooHelper.ts +2 -4
  250. package/src/helpers/CheckSettlements.ts +12 -24
  251. package/src/helpers/Context.ts +15 -10
  252. package/src/helpers/CookieHelper.ts +1 -2
  253. package/src/helpers/EmailResumer.ts +1 -2
  254. package/src/helpers/FileCache.ts +2 -3
  255. package/src/helpers/FinancialSupportHelper.ts +2 -2
  256. package/src/helpers/FlagMomentCleanup.ts +1 -2
  257. package/src/helpers/ForwardHandler.ts +5 -10
  258. package/src/helpers/GlobalHelper.ts +3 -3
  259. package/src/helpers/LegacyBillingConverter.ts +787 -0
  260. package/src/helpers/MemberMerger.test.ts +782 -0
  261. package/src/helpers/MemberMerger.ts +600 -0
  262. package/src/helpers/MemberUserSyncer.ts +6 -12
  263. package/src/helpers/MembershipCharger.ts +2 -4
  264. package/src/helpers/PaymentCustomerResolver.test.ts +203 -0
  265. package/src/helpers/PaymentCustomerResolver.ts +144 -0
  266. package/src/helpers/PeriodHelper.ts +2 -3
  267. package/src/helpers/RecordAnswerHelper.test.ts +105 -110
  268. package/src/helpers/RecordAnswerHelper.ts +7 -7
  269. package/src/helpers/SeedTools.ts +106 -0
  270. package/src/helpers/ServiceFeeHelper.ts +125 -15
  271. package/src/helpers/SetupStepUpdater.ts +38 -32
  272. package/src/helpers/StamhoofdFilterAccessHelper.ts +52 -0
  273. package/src/helpers/StripeHelper.ts +14 -36
  274. package/src/helpers/StripeInvoicer.ts +419 -0
  275. package/src/helpers/StripePayoutChecker.ts +5 -10
  276. package/src/helpers/TagHelper.ts +7 -8
  277. package/src/helpers/TemporaryMemberAccess.ts +1 -2
  278. package/src/helpers/ThrottledQueue.ts +1 -2
  279. package/src/helpers/UitpasTokenRepository.ts +1 -2
  280. package/src/helpers/ViesHelper.ts +7 -11
  281. package/src/helpers/XlsxTransformerColumnHelper.ts +1 -1
  282. package/src/helpers/outstandingBalanceJoin.ts +2 -2
  283. package/src/helpers/updateMemberDetailsUitpasNumber.ts +3 -5
  284. package/src/migrate.ts +12 -5
  285. package/src/{seeds → migrations}/0000000004-single-organization.ts +10 -1
  286. package/src/migrations/0000000006-default-organization.ts +139 -0
  287. package/src/{seeds → migrations}/1715028563-user-permissions.ts +17 -27
  288. package/src/{seeds/1765896674-document-update-year.test.ts → migrations/1750090029-document-update-year.test.ts} +27 -26
  289. package/src/migrations/1750090029-document-update-year.ts +103 -0
  290. package/src/{seeds → migrations}/1750090030-records-configuration.ts +33 -32
  291. package/src/migrations/1750090031-records-configuration-webshops.ts +36 -0
  292. package/src/migrations/1752848540-national-numbers.ts +585 -0
  293. package/src/migrations/1752848550-records-configuration-group-filter.ts +1064 -0
  294. package/src/{seeds → migrations}/1752848561-groups-registration-periods.ts +70 -26
  295. package/src/{seeds → migrations}/1754560914-groups-prices.test.ts +1 -1
  296. package/src/{seeds → migrations}/1754560914-groups-prices.ts +9 -15
  297. package/src/{seeds → migrations}/1756293699-fill-previous-next-period-id.ts +1 -2
  298. package/src/migrations/1761665607-sync-member-users.ts +40 -0
  299. package/src/migrations/1779121240-invoice-email-template.sql +6 -0
  300. package/src/migrations/1779986893-default-payment-failed-email-templates.sql +4 -0
  301. package/src/migrations/1780578166-convert-legacy-billing.ts +13 -0
  302. package/src/{seeds/1755876819-remove-duplicate-members.ts → migrations/1780665426-remove-duplicate-members.ts} +23 -4
  303. package/src/migrations/1780933598-document-groups.ts +88 -0
  304. package/src/migrations/1781692342-balance-item-relations.ts +13 -0
  305. package/src/migrations/1781857866-platform-admins.ts +103 -0
  306. package/src/migrations/1781857867-rm-old-platform-admins.ts +25 -0
  307. package/src/seeds/0000000001-throw.ts +5 -0
  308. package/src/seeds/1760702452-update-balance-price-paid.ts +19 -0
  309. package/src/seeds/1760702453-update-balance-invoiced.ts +19 -0
  310. package/src/seeds/1760702454-update-cached-outstanding-balance-from-items.ts +51 -14
  311. package/src/seeds/1773754928-force-save-members.ts +41 -8
  312. package/src/seeds/1780665427-schedule-stock-updates.ts +45 -0
  313. package/src/seeds/1780665428-group-update-occupancy.ts +31 -0
  314. package/src/seeds/1780915001-fill-payment-customer.ts +70 -0
  315. package/src/seeds/1780915002-update-orders.ts +39 -0
  316. package/src/seeds/1782047708-organization-company-address.ts +44 -0
  317. package/src/seeds-temporary/1769088653-uitpas-status.ts +1 -2
  318. package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.test.ts +69 -0
  319. package/src/seeds-temporary/1780416000-migrate-audit-log-legacy-enums.ts +85 -0
  320. package/src/services/AuditLogService.test.ts +51 -0
  321. package/src/services/AuditLogService.ts +45 -0
  322. package/src/services/BalanceItemService.ts +141 -44
  323. package/src/services/CpuService.ts +3 -6
  324. package/src/services/DatabaseCollationService.test.ts +1 -2
  325. package/src/services/DocumentService.ts +1 -2
  326. package/src/services/EventNotificationService.ts +1 -1
  327. package/src/services/FileSignService.ts +2 -4
  328. package/src/services/InvoicePdfService.ts +286 -0
  329. package/src/services/InvoiceService.ts +204 -251
  330. package/src/services/InvoiceXMLService.ts +424 -0
  331. package/src/services/MemberNumberService.ts +6 -11
  332. package/src/services/MemberRecordStore.ts +8 -10
  333. package/src/services/MollieService.ts +114 -121
  334. package/src/services/PaymentMandateService.ts +45 -45
  335. package/src/services/PaymentReallocationService.test.ts +1 -1
  336. package/src/services/PaymentReallocationService.ts +7 -9
  337. package/src/services/PaymentService.ts +444 -308
  338. package/src/services/PlatformMembershipService.ts +4 -8
  339. package/src/services/ReferralService.ts +223 -0
  340. package/src/services/RegistrationService.ts +63 -53
  341. package/src/services/SSOService.test.ts +119 -0
  342. package/src/services/SSOService.ts +56 -49
  343. package/src/services/STPackageService.ts +97 -61
  344. package/src/services/UniqueMemberNumberService.ts +69 -0
  345. package/src/services/UniqueUserService.ts +3 -6
  346. package/src/services/VATService.ts +85 -0
  347. package/src/services/uitpas/PassholderEndpoints.ts +3 -6
  348. package/src/services/uitpas/UitpasService.ts +6 -10
  349. package/src/services/uitpas/checkUitpasNumbers.ts +2 -4
  350. package/src/services/uitpas/getSocialTariffForUitpasNumbers.ts +3 -6
  351. package/src/services/uitpas/searchUitpasEvents.ts +1 -2
  352. package/src/sql-filters/audit-logs.ts +1 -1
  353. package/src/sql-filters/balance-item-payments.ts +1 -1
  354. package/src/sql-filters/balance-items.ts +1 -1
  355. package/src/sql-filters/base-registration-filter-compilers.ts +5 -33
  356. package/src/sql-filters/document-templates.ts +1 -1
  357. package/src/sql-filters/documents.ts +1 -1
  358. package/src/sql-filters/email-recipients.ts +1 -1
  359. package/src/sql-filters/emails.ts +1 -1
  360. package/src/sql-filters/event-notifications.ts +1 -1
  361. package/src/sql-filters/events.ts +6 -1
  362. package/src/sql-filters/groups.ts +5 -0
  363. package/src/sql-filters/invoiced-balance-items.ts +1 -1
  364. package/src/sql-filters/invoices.ts +1 -1
  365. package/src/sql-filters/member-responsibility-records.ts +1 -1
  366. package/src/sql-filters/members.ts +1 -1
  367. package/src/sql-filters/orders.ts +4 -4
  368. package/src/sql-filters/organization-registration-periods.ts +1 -1
  369. package/src/sql-filters/organizations.ts +1 -1
  370. package/src/sql-filters/platform-memberships.ts +3 -3
  371. package/src/sql-filters/receivable-balances.ts +1 -1
  372. package/src/sql-filters/registration-periods.ts +1 -1
  373. package/src/sql-filters/registrations.ts +1 -1
  374. package/src/sql-filters/tickets.ts +1 -1
  375. package/src/sql-filters/users.ts +1 -1
  376. package/src/sql-sorters/groups.ts +23 -0
  377. package/src/sql-sorters/platform-memberships.ts +16 -16
  378. package/src/sql-sorters/registration-invitations.ts +2 -2
  379. package/tests/actions/patchOrganizationMember.ts +1 -1
  380. package/tests/actions/patchUserMember.ts +1 -1
  381. package/tests/assertions/assertBalances.ts +6 -12
  382. package/tests/e2e/api-rate-limits.test.ts +12 -24
  383. package/tests/e2e/bundle-discounts.test.ts +4 -1
  384. package/tests/e2e/charge-members.test.ts +13 -11
  385. package/tests/e2e/documents.test.ts +4 -1
  386. package/tests/e2e/register.test.ts +7 -9
  387. package/tests/e2e/stock.test.ts +4 -3
  388. package/tests/e2e/tickets.test.ts +1 -1
  389. package/tests/helpers/MollieMocker.ts +462 -0
  390. package/tests/helpers/PayconiqMocker.ts +138 -45
  391. package/tests/helpers/StripeMocker.ts +9 -6
  392. package/tests/helpers/index.ts +4 -0
  393. package/tests/init/initAdmin.ts +2 -2
  394. package/tests/init/initBundleDiscount.ts +1 -1
  395. package/tests/init/initMembershipOrganization.ts +13 -0
  396. package/tests/init/initPermissionRole.ts +3 -4
  397. package/tests/vitest.global.setup.ts +1 -1
  398. package/vitest.config.js +6 -0
  399. package/.nvmrc +0 -1
  400. package/src/helpers/GroupBuilder.ts +0 -418
  401. package/src/seeds/0000000000-example.ts +0 -11
  402. package/src/seeds/1722256498-group-update-occupancy.ts +0 -52
  403. package/src/seeds/1726572303-schedule-stock-updates.ts +0 -52
  404. package/src/seeds/1726847064-setup-steps.ts +0 -16
  405. package/src/seeds/1728928974-update-cached-outstanding-balance-from-items.ts +0 -31
  406. package/src/seeds/1729253172-update-orders.ts +0 -21
  407. package/src/seeds/1733319079-fill-paying-organization-ids.ts +0 -68
  408. package/src/seeds/1733748412-update-deleted-order-numbers.ts +0 -109
  409. package/src/seeds/1733994455-balance-item-status-open.ts +0 -30
  410. package/src/seeds/1740046783-update-membership.ts +0 -17
  411. package/src/seeds/1741008870-fix-auditlog-description.ts +0 -50
  412. package/src/seeds/1741011468-fix-auditlog-description-uft16.ts +0 -88
  413. package/src/seeds/1741268179-fix-group-dates-of-events.ts +0 -32
  414. package/src/seeds/1751445358-upload-email-attachments.ts +0 -106
  415. package/src/seeds/1755532883-update-email-sender-ids.ts +0 -47
  416. package/src/seeds/1755790070-fill-email-recipient-errors.ts +0 -96
  417. package/src/seeds/1756115432-remove-old-drafts.ts +0 -16
  418. package/src/seeds/1756115433-fill-email-recipient-organization-id.ts +0 -30
  419. package/src/seeds/1756303697-update-email-counts.ts +0 -76
  420. package/src/seeds/1761665607-sync-member-users.ts +0 -59
  421. package/src/seeds/1765896674-document-update-year.ts +0 -66
  422. /package/src/{seeds → migrations}/0000000001-development-user.ts +0 -0
  423. /package/src/{seeds → migrations}/0000000002-clear-stamhoofd-email-templates.ts +0 -0
  424. /package/src/{seeds → migrations}/0000000003-default-email-templates.ts +0 -0
  425. /package/src/{seeds → migrations}/1752848561-groups-registration-periods.test.ts +0 -0
  426. /package/src/{seeds → migrations}/1766150402-document-published-at.test.ts +0 -0
  427. /package/src/{seeds → migrations}/1766150402-document-published-at.ts +0 -0
  428. /package/src/{seeds → migrations}/1779121239-default-invoice-email-template.sql +0 -0
  429. /package/src/{seeds → migrations}/data/default-email-templates.sql +0 -0
@@ -6,22 +6,22 @@ import { RecordAnswerHelper } from './RecordAnswerHelper.js';
6
6
  describe('RecordAnswerHelper', () => {
7
7
  const record1 = RecordSettings.create({
8
8
  name: TranslatedString.create('vraag 1'),
9
- type: RecordType.Text
9
+ type: RecordType.Text,
10
10
  });
11
11
 
12
12
  const record2 = RecordSettings.create({
13
13
  name: TranslatedString.create('vraag 2'),
14
- type: RecordType.Integer
14
+ type: RecordType.Integer,
15
15
  });
16
16
 
17
17
  const record3 = RecordSettings.create({
18
18
  name: TranslatedString.create('vraag 3'),
19
- type: RecordType.Text
19
+ type: RecordType.Text,
20
20
  });
21
21
 
22
22
  const record4 = RecordSettings.create({
23
23
  name: TranslatedString.create('vraag 4'),
24
- type: RecordType.Date
24
+ type: RecordType.Date,
25
25
  });
26
26
 
27
27
  const record5 = RecordSettings.create({
@@ -30,50 +30,49 @@ describe('RecordAnswerHelper', () => {
30
30
  choices: [
31
31
  RecordChoice.create({ name: TranslatedString.create('keuze 1') }),
32
32
  RecordChoice.create({ name: TranslatedString.create('keuze 2') }),
33
- ]
33
+ ],
34
34
  });
35
35
 
36
36
  const record6 = RecordSettings.create({
37
37
  name: TranslatedString.create('vraag 6'),
38
- type: RecordType.Email
38
+ type: RecordType.Email,
39
39
  });
40
40
 
41
41
  const record7 = RecordSettings.create({
42
42
  name: TranslatedString.create('vraag 7'),
43
- type: RecordType.Price
43
+ type: RecordType.Price,
44
44
  });
45
45
 
46
46
  const record8 = RecordSettings.create({
47
47
  name: TranslatedString.create('vraag 8'),
48
48
  type: RecordType.File,
49
- fileType: FileType.PDF
49
+ fileType: FileType.PDF,
50
50
  });
51
51
 
52
52
  const childCategory1 = RecordCategory.create({
53
53
  name: TranslatedString.create('subcategorie 1'),
54
- records: [record3,record4]
54
+ records: [record3, record4],
55
55
  });
56
56
 
57
57
  const childCategory2 = RecordCategory.create({
58
58
  name: TranslatedString.create('subcategorie 2'),
59
- records: [record5]
60
- })
59
+ records: [record5],
60
+ });
61
61
 
62
62
  const recordCategory1 = RecordCategory.create({
63
63
  name: TranslatedString.create('categorie 1'),
64
- records: [ record1, record2 ],
65
- childCategories: [childCategory1, childCategory2]
64
+ records: [record1, record2],
65
+ childCategories: [childCategory1, childCategory2],
66
66
  });
67
67
 
68
68
  const recordCategory2 = RecordCategory.create({
69
69
  name: TranslatedString.create('categorie 2'),
70
- records: [record6, record7, record8]
70
+ records: [record6, record7, record8],
71
71
  });
72
72
 
73
73
  const originalRecordCategories = [recordCategory1, recordCategory2];
74
74
 
75
75
  describe('throwIfPatchOrPutIsInvalid', () => {
76
-
77
76
  test('patch - happy path should not throw', () => {
78
77
  const patches = new PatchableArray<string, RecordCategory, AutoEncoderPatchType<RecordCategory>>();
79
78
  const recordPatches1 = new PatchableArray<string, RecordSettings, AutoEncoderPatchType<RecordSettings>>();
@@ -81,13 +80,13 @@ describe('RecordAnswerHelper', () => {
81
80
  const recordPatch1 = RecordSettings.patch({
82
81
  id: record1.id,
83
82
  name: TranslatedString.create('vraag 1 - updated'),
84
- type: RecordType.Textarea
83
+ type: RecordType.Textarea,
85
84
  });
86
85
 
87
86
  const recordPatch2 = RecordSettings.patch({
88
87
  id: record2.id,
89
88
  name: TranslatedString.create('vraag 2 - updated'),
90
- type: RecordType.Integer
89
+ type: RecordType.Integer,
91
90
  });
92
91
 
93
92
  recordPatches1.addPatch(recordPatch1);
@@ -98,7 +97,7 @@ describe('RecordAnswerHelper', () => {
98
97
  const recordPatch3 = RecordSettings.patch({
99
98
  id: record3.id,
100
99
  name: TranslatedString.create('vraag 3 - updated'),
101
- type: RecordType.Email
100
+ type: RecordType.Email,
102
101
  });
103
102
 
104
103
  const recordPatch4 = RecordSettings.patch({
@@ -115,7 +114,7 @@ describe('RecordAnswerHelper', () => {
115
114
  id: record5.id,
116
115
  name: TranslatedString.create('vraag 5 - updated'),
117
116
  });
118
-
117
+
119
118
  recordPatches3.addPatch(recordPatch5);
120
119
 
121
120
  const recordPatches4 = new PatchableArray<string, RecordSettings, AutoEncoderPatchType<RecordSettings>>();
@@ -131,24 +130,23 @@ describe('RecordAnswerHelper', () => {
131
130
 
132
131
  childCategoriesPatch1.addPatch(RecordCategory.patch({
133
132
  id: childCategory1.id,
134
- records: recordPatches2
133
+ records: recordPatches2,
135
134
  }));
136
135
 
137
136
  childCategoriesPatch1.addPatch(RecordCategory.patch({
138
137
  id: childCategory2.id,
139
- records: recordPatches3
138
+ records: recordPatches3,
140
139
  }));
141
140
 
142
-
143
141
  const patch1 = RecordCategory.patch({
144
142
  id: recordCategory1.id,
145
143
  records: recordPatches1,
146
- childCategories: childCategoriesPatch1
144
+ childCategories: childCategoriesPatch1,
147
145
  });
148
146
 
149
147
  const patch2 = RecordCategory.patch({
150
148
  id: recordCategory2.id,
151
- records: recordPatches4
149
+ records: recordPatches4,
152
150
  });
153
151
 
154
152
  patches.addPatch(patch1);
@@ -156,7 +154,7 @@ describe('RecordAnswerHelper', () => {
156
154
 
157
155
  // should not throw
158
156
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, patches)).not.toThrow();
159
- })
157
+ });
160
158
 
161
159
  describe('patch - should throw if type changes', () => {
162
160
  test('case 1 - error in root category', () => {
@@ -166,14 +164,14 @@ describe('RecordAnswerHelper', () => {
166
164
  const recordPatch1 = RecordSettings.patch({
167
165
  id: record1.id,
168
166
  name: TranslatedString.create('vraag 1 - updated'),
169
- type: RecordType.Textarea
167
+ type: RecordType.Textarea,
170
168
  });
171
169
 
172
170
  const recordPatch2 = RecordSettings.patch({
173
171
  id: record2.id,
174
172
  name: TranslatedString.create('vraag 2 - updated'),
175
173
  // type changed -> should throw
176
- type: RecordType.Email
174
+ type: RecordType.Email,
177
175
  });
178
176
 
179
177
  recordPatches1.addPatch(recordPatch1);
@@ -188,7 +186,7 @@ describe('RecordAnswerHelper', () => {
188
186
 
189
187
  // should throw
190
188
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, patches)).toThrow('Cannot change record type from Integer to Email');
191
- })
189
+ });
192
190
 
193
191
  test('case 2 - error in child category', () => {
194
192
  const patches = new PatchableArray<string, RecordCategory, AutoEncoderPatchType<RecordCategory>>();
@@ -197,13 +195,13 @@ describe('RecordAnswerHelper', () => {
197
195
  const recordPatch1 = RecordSettings.patch({
198
196
  id: record1.id,
199
197
  name: TranslatedString.create('vraag 1 - updated'),
200
- type: RecordType.Textarea
198
+ type: RecordType.Textarea,
201
199
  });
202
200
 
203
201
  const recordPatch2 = RecordSettings.patch({
204
202
  id: record2.id,
205
203
  name: TranslatedString.create('vraag 2 - updated'),
206
- type: RecordType.Integer
204
+ type: RecordType.Integer,
207
205
  });
208
206
 
209
207
  recordPatches1.addPatch(recordPatch1);
@@ -214,14 +212,14 @@ describe('RecordAnswerHelper', () => {
214
212
  const recordPatch3 = RecordSettings.patch({
215
213
  id: record3.id,
216
214
  name: TranslatedString.create('vraag 3 - updated'),
217
- type: RecordType.Email
215
+ type: RecordType.Email,
218
216
  });
219
217
 
220
218
  const recordPatch4 = RecordSettings.patch({
221
219
  id: record4.id,
222
220
  name: TranslatedString.create('vraag 4 - updated'),
223
221
  // changes from date to text -> should throw
224
- type: RecordType.Text
222
+ type: RecordType.Text,
225
223
  });
226
224
 
227
225
  recordPatches2.addPatch(recordPatch3);
@@ -233,33 +231,32 @@ describe('RecordAnswerHelper', () => {
233
231
  id: record5.id,
234
232
  name: TranslatedString.create('vraag 5 - updated'),
235
233
  });
236
-
234
+
237
235
  recordPatches3.addPatch(recordPatch5);
238
236
 
239
237
  const childCategoriesPatch1 = new PatchableArray<string, RecordCategory, AutoEncoderPatchType<RecordCategory>>();
240
238
 
241
239
  childCategoriesPatch1.addPatch(RecordCategory.patch({
242
240
  id: childCategory1.id,
243
- records: recordPatches2
241
+ records: recordPatches2,
244
242
  }));
245
243
 
246
244
  childCategoriesPatch1.addPatch(RecordCategory.patch({
247
245
  id: childCategory2.id,
248
- records: recordPatches3
246
+ records: recordPatches3,
249
247
  }));
250
248
 
251
-
252
249
  const patch1 = RecordCategory.patch({
253
250
  id: recordCategory1.id,
254
251
  records: recordPatches1,
255
- childCategories: childCategoriesPatch1
252
+ childCategories: childCategoriesPatch1,
256
253
  });
257
254
 
258
255
  patches.addPatch(patch1);
259
256
 
260
257
  // should throw
261
258
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, patches)).toThrow('Cannot change record type from Date to Text');
262
- })
259
+ });
263
260
  });
264
261
 
265
262
  test('patch - should throw if file type changes', () => {
@@ -270,7 +267,7 @@ describe('RecordAnswerHelper', () => {
270
267
  id: record8.id,
271
268
  name: TranslatedString.create('vraag 8 - updated'),
272
269
  type: RecordType.File,
273
- fileType: FileType.Word
270
+ fileType: FileType.Word,
274
271
  }));
275
272
 
276
273
  patches.addPatch(RecordCategory.patch({
@@ -280,32 +277,32 @@ describe('RecordAnswerHelper', () => {
280
277
 
281
278
  // should throw
282
279
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, patches)).toThrow('Cannot change record file type from PDF to Word');
283
- })
280
+ });
284
281
 
285
282
  test('put - happy path should not throw', () => {
286
283
  const newRecord1 = RecordSettings.create({
287
284
  id: record1.id,
288
285
  name: TranslatedString.create('vraag 1'),
289
286
  // type changed but same class -> should not throw
290
- type: RecordType.Text
287
+ type: RecordType.Text,
291
288
  });
292
289
 
293
290
  const newRecord2 = RecordSettings.create({
294
291
  id: record2.id,
295
292
  name: TranslatedString.create('vraag 2'),
296
- type: RecordType.Integer
293
+ type: RecordType.Integer,
297
294
  });
298
295
 
299
296
  const newRecord3 = RecordSettings.create({
300
297
  id: record3.id,
301
298
  name: TranslatedString.create('vraag 3'),
302
- type: RecordType.Text
299
+ type: RecordType.Text,
303
300
  });
304
301
 
305
302
  const newRecord4 = RecordSettings.create({
306
303
  id: record4.id,
307
304
  name: TranslatedString.create('vraag 4'),
308
- type: RecordType.Date
305
+ type: RecordType.Date,
309
306
  });
310
307
 
311
308
  const newRecord5 = RecordSettings.create({
@@ -315,51 +312,51 @@ describe('RecordAnswerHelper', () => {
315
312
  choices: [
316
313
  RecordChoice.create({ name: TranslatedString.create('keuze 1') }),
317
314
  RecordChoice.create({ name: TranslatedString.create('keuze 2') }),
318
- ]
315
+ ],
319
316
  });
320
317
 
321
318
  const newRecord6 = RecordSettings.create({
322
319
  id: record6.id,
323
320
  name: TranslatedString.create('vraag 6'),
324
- type: RecordType.Email
321
+ type: RecordType.Email,
325
322
  });
326
323
 
327
324
  const newRecord7 = RecordSettings.create({
328
325
  id: record7.id,
329
326
  name: TranslatedString.create('vraag 7'),
330
- type: RecordType.Price
327
+ type: RecordType.Price,
331
328
  });
332
329
 
333
330
  const newRecord8 = RecordSettings.create({
334
331
  id: record8.id,
335
332
  name: TranslatedString.create('vraag 8'),
336
333
  type: RecordType.File,
337
- fileType: FileType.PDF
334
+ fileType: FileType.PDF,
338
335
  });
339
336
 
340
337
  const newChildCategory1 = RecordCategory.create({
341
338
  id: childCategory1.id,
342
339
  name: TranslatedString.create('subcategorie 1'),
343
- records: [newRecord3,newRecord4]
340
+ records: [newRecord3, newRecord4],
344
341
  });
345
342
 
346
343
  const newChildCategory2 = RecordCategory.create({
347
344
  id: childCategory2.id,
348
345
  name: TranslatedString.create('subcategorie 2'),
349
- records: [newRecord5]
350
- })
346
+ records: [newRecord5],
347
+ });
351
348
 
352
349
  const newRecordCategory1 = RecordCategory.create({
353
350
  id: recordCategory1.id,
354
351
  name: TranslatedString.create('categorie 1'),
355
- records: [ newRecord1, newRecord2 ],
356
- childCategories: [newChildCategory1, newChildCategory2]
352
+ records: [newRecord1, newRecord2],
353
+ childCategories: [newChildCategory1, newChildCategory2],
357
354
  });
358
355
 
359
356
  const newRecordCategory2 = RecordCategory.create({
360
357
  id: recordCategory2.id,
361
358
  name: TranslatedString.create('categorie 2'),
362
- records: [newRecord6, newRecord7, newRecord8]
359
+ records: [newRecord6, newRecord7, newRecord8],
363
360
  });
364
361
 
365
362
  const newRecordCategories = [newRecordCategory1, newRecordCategory2];
@@ -374,26 +371,26 @@ describe('RecordAnswerHelper', () => {
374
371
  id: record1.id,
375
372
  name: TranslatedString.create('vraag 1'),
376
373
  // type changed but same class -> should not throw
377
- type: RecordType.Text
374
+ type: RecordType.Text,
378
375
  });
379
376
 
380
377
  const newRecord2 = RecordSettings.create({
381
378
  id: record2.id,
382
379
  name: TranslatedString.create('vraag 2'),
383
380
  // type changed from Integer to Email -> should throw
384
- type: RecordType.Email
381
+ type: RecordType.Email,
385
382
  });
386
383
 
387
384
  const newRecord3 = RecordSettings.create({
388
385
  id: record3.id,
389
386
  name: TranslatedString.create('vraag 3'),
390
- type: RecordType.Text
387
+ type: RecordType.Text,
391
388
  });
392
389
 
393
390
  const newRecord4 = RecordSettings.create({
394
391
  id: record4.id,
395
392
  name: TranslatedString.create('vraag 4'),
396
- type: RecordType.Date
393
+ type: RecordType.Date,
397
394
  });
398
395
 
399
396
  const newRecord5 = RecordSettings.create({
@@ -403,84 +400,84 @@ describe('RecordAnswerHelper', () => {
403
400
  choices: [
404
401
  RecordChoice.create({ name: TranslatedString.create('keuze 1') }),
405
402
  RecordChoice.create({ name: TranslatedString.create('keuze 2') }),
406
- ]
403
+ ],
407
404
  });
408
405
 
409
406
  const newRecord6 = RecordSettings.create({
410
407
  id: record6.id,
411
408
  name: TranslatedString.create('vraag 6'),
412
- type: RecordType.Email
409
+ type: RecordType.Email,
413
410
  });
414
411
 
415
412
  const newRecord7 = RecordSettings.create({
416
413
  id: record7.id,
417
414
  name: TranslatedString.create('vraag 7'),
418
- type: RecordType.Price
415
+ type: RecordType.Price,
419
416
  });
420
417
 
421
418
  const newRecord8 = RecordSettings.create({
422
419
  id: record8.id,
423
420
  name: TranslatedString.create('vraag 8'),
424
421
  type: RecordType.File,
425
- fileType: FileType.PDF
422
+ fileType: FileType.PDF,
426
423
  });
427
424
 
428
425
  const newChildCategory1 = RecordCategory.create({
429
426
  id: childCategory1.id,
430
427
  name: TranslatedString.create('subcategorie 1'),
431
- records: [newRecord3,newRecord4]
428
+ records: [newRecord3, newRecord4],
432
429
  });
433
430
 
434
431
  const newChildCategory2 = RecordCategory.create({
435
432
  id: childCategory2.id,
436
433
  name: TranslatedString.create('subcategorie 2'),
437
- records: [newRecord5]
438
- })
434
+ records: [newRecord5],
435
+ });
439
436
 
440
437
  const newRecordCategory1 = RecordCategory.create({
441
438
  id: recordCategory1.id,
442
439
  name: TranslatedString.create('categorie 1'),
443
- records: [ newRecord1, newRecord2 ],
444
- childCategories: [newChildCategory1, newChildCategory2]
440
+ records: [newRecord1, newRecord2],
441
+ childCategories: [newChildCategory1, newChildCategory2],
445
442
  });
446
443
 
447
444
  const newRecordCategory2 = RecordCategory.create({
448
445
  id: recordCategory2.id,
449
446
  name: TranslatedString.create('categorie 2'),
450
- records: [newRecord6, newRecord7, newRecord8]
447
+ records: [newRecord6, newRecord7, newRecord8],
451
448
  });
452
449
 
453
450
  const newRecordCategories = [newRecordCategory1, newRecordCategory2];
454
451
 
455
452
  // should throw
456
453
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, newRecordCategories)).toThrow('Cannot change record type from Integer to Email');
457
- })
454
+ });
458
455
 
459
456
  test('case 2 - error in child category', () => {
460
457
  const newRecord1 = RecordSettings.create({
461
458
  id: record1.id,
462
459
  name: TranslatedString.create('vraag 1'),
463
460
  // type changed but same class -> should not throw
464
- type: RecordType.Text
461
+ type: RecordType.Text,
465
462
  });
466
463
 
467
464
  const newRecord2 = RecordSettings.create({
468
465
  id: record2.id,
469
466
  name: TranslatedString.create('vraag 2'),
470
- type: RecordType.Integer
467
+ type: RecordType.Integer,
471
468
  });
472
469
 
473
470
  const newRecord3 = RecordSettings.create({
474
471
  id: record3.id,
475
472
  name: TranslatedString.create('vraag 3'),
476
- type: RecordType.Text
473
+ type: RecordType.Text,
477
474
  });
478
475
 
479
476
  const newRecord4 = RecordSettings.create({
480
477
  id: record4.id,
481
478
  name: TranslatedString.create('vraag 4'),
482
479
  // type changed from date to text -> should throw
483
- type: RecordType.Text
480
+ type: RecordType.Text,
484
481
  });
485
482
 
486
483
  const newRecord5 = RecordSettings.create({
@@ -490,58 +487,58 @@ describe('RecordAnswerHelper', () => {
490
487
  choices: [
491
488
  RecordChoice.create({ name: TranslatedString.create('keuze 1') }),
492
489
  RecordChoice.create({ name: TranslatedString.create('keuze 2') }),
493
- ]
490
+ ],
494
491
  });
495
492
 
496
493
  const newRecord6 = RecordSettings.create({
497
494
  id: record6.id,
498
495
  name: TranslatedString.create('vraag 6'),
499
- type: RecordType.Email
496
+ type: RecordType.Email,
500
497
  });
501
498
 
502
499
  const newRecord7 = RecordSettings.create({
503
500
  id: record7.id,
504
501
  name: TranslatedString.create('vraag 7'),
505
- type: RecordType.Price
502
+ type: RecordType.Price,
506
503
  });
507
504
 
508
505
  const newRecord8 = RecordSettings.create({
509
506
  id: record8.id,
510
507
  name: TranslatedString.create('vraag 8'),
511
508
  type: RecordType.File,
512
- fileType: FileType.PDF
509
+ fileType: FileType.PDF,
513
510
  });
514
511
 
515
512
  const newChildCategory1 = RecordCategory.create({
516
513
  id: childCategory1.id,
517
514
  name: TranslatedString.create('subcategorie 1'),
518
- records: [newRecord3,newRecord4]
515
+ records: [newRecord3, newRecord4],
519
516
  });
520
517
 
521
518
  const newChildCategory2 = RecordCategory.create({
522
519
  id: childCategory2.id,
523
520
  name: TranslatedString.create('subcategorie 2'),
524
- records: [newRecord5]
525
- })
521
+ records: [newRecord5],
522
+ });
526
523
 
527
524
  const newRecordCategory1 = RecordCategory.create({
528
525
  id: recordCategory1.id,
529
526
  name: TranslatedString.create('categorie 1'),
530
- records: [ newRecord1, newRecord2 ],
531
- childCategories: [newChildCategory1, newChildCategory2]
527
+ records: [newRecord1, newRecord2],
528
+ childCategories: [newChildCategory1, newChildCategory2],
532
529
  });
533
530
 
534
531
  const newRecordCategory2 = RecordCategory.create({
535
532
  id: recordCategory2.id,
536
533
  name: TranslatedString.create('categorie 2'),
537
- records: [newRecord6, newRecord7, newRecord8]
534
+ records: [newRecord6, newRecord7, newRecord8],
538
535
  });
539
536
 
540
537
  const newRecordCategories = [newRecordCategory1, newRecordCategory2];
541
538
 
542
539
  // should throw
543
540
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, newRecordCategories)).toThrow('Cannot change record type from Date to Text');
544
- })
541
+ });
545
542
  });
546
543
 
547
544
  test('combination of patch and put - happy path should not throw', () => {
@@ -551,13 +548,13 @@ describe('RecordAnswerHelper', () => {
551
548
  const recordPatch1 = RecordSettings.patch({
552
549
  id: record1.id,
553
550
  name: TranslatedString.create('vraag 1 - updated'),
554
- type: RecordType.Textarea
551
+ type: RecordType.Textarea,
555
552
  });
556
553
 
557
554
  const recordPatch2 = RecordSettings.patch({
558
555
  id: record2.id,
559
556
  name: TranslatedString.create('vraag 2 - updated'),
560
- type: RecordType.Integer
557
+ type: RecordType.Integer,
561
558
  });
562
559
 
563
560
  recordPatches1.addPatch(recordPatch1);
@@ -568,7 +565,7 @@ describe('RecordAnswerHelper', () => {
568
565
  const recordPatch3 = RecordSettings.patch({
569
566
  id: record3.id,
570
567
  name: TranslatedString.create('vraag 3 - updated'),
571
- type: RecordType.Email
568
+ type: RecordType.Email,
572
569
  });
573
570
 
574
571
  const recordPatch4 = RecordSettings.patch({
@@ -585,7 +582,7 @@ describe('RecordAnswerHelper', () => {
585
582
  id: record5.id,
586
583
  name: TranslatedString.create('vraag 5 - updated'),
587
584
  });
588
-
585
+
589
586
  recordPatches3.addPatch(recordPatch5);
590
587
 
591
588
  const recordPatches4 = new PatchableArray<string, RecordSettings, AutoEncoderPatchType<RecordSettings>>();
@@ -602,38 +599,37 @@ describe('RecordAnswerHelper', () => {
602
599
  const newRecord3 = RecordSettings.create({
603
600
  id: record3.id,
604
601
  name: TranslatedString.create('vraag 3'),
605
- type: RecordType.Text
602
+ type: RecordType.Text,
606
603
  });
607
604
 
608
605
  const newRecord4 = RecordSettings.create({
609
606
  id: record4.id,
610
607
  name: TranslatedString.create('vraag 4'),
611
- type: RecordType.Date
608
+ type: RecordType.Date,
612
609
  });
613
610
 
614
611
  const newChildCategory1 = RecordCategory.create({
615
612
  id: childCategory1.id,
616
613
  name: TranslatedString.create('subcategorie 1'),
617
- records: [newRecord3,newRecord4]
614
+ records: [newRecord3, newRecord4],
618
615
  });
619
616
 
620
617
  childCategoriesPatch1.addPut(newChildCategory1);
621
618
 
622
619
  childCategoriesPatch1.addPatch(RecordCategory.patch({
623
620
  id: childCategory2.id,
624
- records: recordPatches3
621
+ records: recordPatches3,
625
622
  }));
626
623
 
627
-
628
624
  const patch1 = RecordCategory.patch({
629
625
  id: recordCategory1.id,
630
626
  records: recordPatches1,
631
- childCategories: childCategoriesPatch1
627
+ childCategories: childCategoriesPatch1,
632
628
  });
633
629
 
634
630
  const patch2 = RecordCategory.patch({
635
631
  id: recordCategory2.id,
636
- records: recordPatches4
632
+ records: recordPatches4,
637
633
  });
638
634
 
639
635
  patches.addPatch(patch1);
@@ -641,7 +637,7 @@ describe('RecordAnswerHelper', () => {
641
637
 
642
638
  // should not throw
643
639
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, patches)).not.toThrow();
644
- })
640
+ });
645
641
 
646
642
  test('combination of patch and put - should throw if type changes', () => {
647
643
  const patches = new PatchableArray<string, RecordCategory, AutoEncoderPatchType<RecordCategory>>();
@@ -650,13 +646,13 @@ describe('RecordAnswerHelper', () => {
650
646
  const recordPatch1 = RecordSettings.patch({
651
647
  id: record1.id,
652
648
  name: TranslatedString.create('vraag 1 - updated'),
653
- type: RecordType.Textarea
649
+ type: RecordType.Textarea,
654
650
  });
655
651
 
656
652
  const recordPatch2 = RecordSettings.patch({
657
653
  id: record2.id,
658
654
  name: TranslatedString.create('vraag 2 - updated'),
659
- type: RecordType.Integer
655
+ type: RecordType.Integer,
660
656
  });
661
657
 
662
658
  recordPatches1.addPatch(recordPatch1);
@@ -667,7 +663,7 @@ describe('RecordAnswerHelper', () => {
667
663
  const recordPatch3 = RecordSettings.patch({
668
664
  id: record3.id,
669
665
  name: TranslatedString.create('vraag 3 - updated'),
670
- type: RecordType.Email
666
+ type: RecordType.Email,
671
667
  });
672
668
 
673
669
  const recordPatch4 = RecordSettings.patch({
@@ -684,7 +680,7 @@ describe('RecordAnswerHelper', () => {
684
680
  id: record5.id,
685
681
  name: TranslatedString.create('vraag 5 - updated'),
686
682
  });
687
-
683
+
688
684
  recordPatches3.addPatch(recordPatch5);
689
685
 
690
686
  const recordPatches4 = new PatchableArray<string, RecordSettings, AutoEncoderPatchType<RecordSettings>>();
@@ -701,39 +697,38 @@ describe('RecordAnswerHelper', () => {
701
697
  const newRecord3 = RecordSettings.create({
702
698
  id: record3.id,
703
699
  name: TranslatedString.create('vraag 3'),
704
- type: RecordType.Text
700
+ type: RecordType.Text,
705
701
  });
706
702
 
707
703
  const newRecord4 = RecordSettings.create({
708
704
  id: record4.id,
709
705
  name: TranslatedString.create('vraag 4'),
710
706
  // type changes from date to text -> should throw
711
- type: RecordType.Text
707
+ type: RecordType.Text,
712
708
  });
713
709
 
714
710
  const newChildCategory1 = RecordCategory.create({
715
711
  id: childCategory1.id,
716
712
  name: TranslatedString.create('subcategorie 1'),
717
- records: [newRecord3,newRecord4]
713
+ records: [newRecord3, newRecord4],
718
714
  });
719
715
 
720
716
  childCategoriesPatch1.addPut(newChildCategory1);
721
717
 
722
718
  childCategoriesPatch1.addPatch(RecordCategory.patch({
723
719
  id: childCategory2.id,
724
- records: recordPatches3
720
+ records: recordPatches3,
725
721
  }));
726
722
 
727
-
728
723
  const patch1 = RecordCategory.patch({
729
724
  id: recordCategory1.id,
730
725
  records: recordPatches1,
731
- childCategories: childCategoriesPatch1
726
+ childCategories: childCategoriesPatch1,
732
727
  });
733
728
 
734
729
  const patch2 = RecordCategory.patch({
735
730
  id: recordCategory2.id,
736
- records: recordPatches4
731
+ records: recordPatches4,
737
732
  });
738
733
 
739
734
  patches.addPatch(patch1);
@@ -741,6 +736,6 @@ describe('RecordAnswerHelper', () => {
741
736
 
742
737
  // should not throw
743
738
  expect(() => RecordAnswerHelper.throwIfPatchOrPutIsInvalid(originalRecordCategories, patches)).toThrow('Cannot change record type from Date to Text');
744
- })
745
- })
746
- })
739
+ });
740
+ });
741
+ });