@stamhoofd/backend 2.90.3 → 2.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -10
- package/src/audit-logs/ModelLogger.ts +0 -1
- package/src/crons/endFunctionsOfUsersWithoutRegistration.ts +14 -0
- package/src/endpoints/admin/organizations/GetOrganizationsEndpoint.ts +2 -0
- package/src/endpoints/global/email/CreateEmailEndpoint.ts +2 -3
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +6 -4
- package/src/endpoints/global/platform/PatchPlatformEnpoint.ts +9 -7
- package/src/endpoints/global/registration/RegisterMembersEndpoint.ts +112 -105
- package/src/endpoints/organization/dashboard/organization/PatchOrganizationEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/organization/SetUitpasClientCredentialsEndpoint.ts +5 -5
- package/src/endpoints/organization/dashboard/registration-periods/PatchOrganizationRegistrationPeriodsEndpoint.ts +1 -1
- package/src/endpoints/organization/dashboard/webshops/SearchUitpasEventsEndpoint.ts +1 -1
- package/src/endpoints/organization/webshops/PlaceOrderEndpoint.ts +2 -2
- package/src/helpers/AdminPermissionChecker.ts +0 -5
- package/src/helpers/FlagMomentCleanup.ts +13 -1
- package/src/helpers/GroupedThrottledQueue.ts +5 -3
- package/src/helpers/PeriodHelper.ts +10 -137
- package/src/helpers/SetupStepUpdater.ts +54 -7
- package/src/helpers/UitpasTokenRepository.ts +3 -3
- package/src/seeds/1750090030-records-configuration.ts +5 -1
- package/src/services/BalanceItemService.ts +12 -7
- package/src/services/DocumentService.ts +0 -1
- package/src/services/RegistrationService.ts +30 -1
- package/src/services/uitpas/UitpasService.ts +1 -1
- package/src/services/uitpas/cancelTicketSales.ts +1 -1
- package/src/services/uitpas/checkPermissionsFor.ts +9 -9
- package/src/services/uitpas/checkUitpasNumbers.ts +2 -2
- package/src/services/uitpas/getSocialTariffForEvent.ts +4 -4
- package/src/services/uitpas/getSocialTariffForUitpasNumbers.ts +5 -5
- package/src/services/uitpas/registerTicketSales.ts +4 -4
- package/src/services/uitpas/searchUitpasEvents.ts +3 -3
- package/src/services/uitpas/searchUitpasOrganizers.ts +3 -3
- package/src/sql-filters/members.ts +1 -1
- package/src/sql-filters/organizations.ts +52 -0
- package/tests/e2e/register.test.ts +1 -1
|
@@ -34,7 +34,7 @@ function assertsIsSocialTariffResponse(json: unknown): asserts json is SocialTar
|
|
|
34
34
|
throw new SimpleError({
|
|
35
35
|
code: 'invalid_response_getting_uitpas_social_tariff',
|
|
36
36
|
message: `Invalid response when getting UiTPAS social tariff`,
|
|
37
|
-
human: $t(`
|
|
37
|
+
human: $t(`466844b9-c042-4bc7-b77d-3f87376086b5`),
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -60,7 +60,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
|
|
|
60
60
|
throw new SimpleError({
|
|
61
61
|
code: 'invalid_uitpas_event_url',
|
|
62
62
|
message: `Invalid UiTPAS event URL: ${uitpasEventUrl}`,
|
|
63
|
-
human: $t(`
|
|
63
|
+
human: $t(`85fb6e02-9b69-43cc-acf7-96a576461560`),
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
params.append('eventId', eventId);
|
|
@@ -110,7 +110,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
|
|
|
110
110
|
throw new SimpleError({
|
|
111
111
|
code: 'unsuccessful_and_unexpected_response_retrieving_social_tariff_by_uitpas_number',
|
|
112
112
|
message: `Unsuccesful response without message when retrieving social tariff by UiTPAS number`,
|
|
113
|
-
human: $t(`
|
|
113
|
+
human: $t(`1572d069-abda-4b31-a373-f0c3760c79b1`),
|
|
114
114
|
});
|
|
115
115
|
}
|
|
116
116
|
const json = await response.json().catch(() => {
|
|
@@ -136,7 +136,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
|
|
|
136
136
|
throw new SimpleError({
|
|
137
137
|
code: 'no_social_tariff_available',
|
|
138
138
|
message: `No social tariff available for event ${uitpasEventUrl}`,
|
|
139
|
-
human: $t(`
|
|
139
|
+
human: $t(`ccd8e8b4-01a7-4e7c-8ae0-92d2a4c659eb`),
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
142
|
if (json.available.length > 1) {
|
|
@@ -150,7 +150,7 @@ async function getSocialTariffForUitpasNumber(access_token: string, uitpasNumber
|
|
|
150
150
|
throw new SimpleError({
|
|
151
151
|
code: 'no_remaining_social_tariff',
|
|
152
152
|
message: `No remaining social tariff for event ${uitpasEventUrl} and UiTPAS number ${uitpasNumber}`,
|
|
153
|
-
human: $t(`
|
|
153
|
+
human: $t(`f9d6bc51-e7c9-4d3f-a13f-27871a018d83`),
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
156
|
console.log('Social tariff for UiTPAS number', uitpasNumber, 'with event id', uitpasEventUrl, 'is', json.available[0].price, 'euros');
|
|
@@ -46,7 +46,7 @@ function assertisSuccessResponse(json: unknown): asserts json is SuccessResponse
|
|
|
46
46
|
throw new SimpleError({
|
|
47
47
|
code: 'invalid_register_ticket_sale_response',
|
|
48
48
|
message: `Invalid register ticket sale response`,
|
|
49
|
-
human: $t(`
|
|
49
|
+
human: $t(`f5cac12d-ced6-43e6-bbd9-81b381807154`),
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -69,7 +69,7 @@ export async function registerTicketSales(access_token: string, registerTicketSa
|
|
|
69
69
|
throw new SimpleError({
|
|
70
70
|
code: 'invalid_uitpas_event_url',
|
|
71
71
|
message: `Invalid UiTPAS event URL: ${ticketSale.uitpasEventUrl}`,
|
|
72
|
-
human: $t(`
|
|
72
|
+
human: $t(`85fb6e02-9b69-43cc-acf7-96a576461560`),
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -108,7 +108,7 @@ export async function registerTicketSales(access_token: string, registerTicketSa
|
|
|
108
108
|
throw new SimpleError({
|
|
109
109
|
code: 'unsuccessful_response_registering_ticket_sales',
|
|
110
110
|
message: `Unsuccessful response when registering UiTPAS ticket sales`,
|
|
111
|
-
human: $t(`
|
|
111
|
+
human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
114
|
const json = await response.json().catch(() => {});
|
|
@@ -117,7 +117,7 @@ export async function registerTicketSales(access_token: string, registerTicketSa
|
|
|
117
117
|
throw new SimpleError({
|
|
118
118
|
code: 'invalid_response_registering_ticket_sales',
|
|
119
119
|
message: `Invalid response when registering ticket sales`,
|
|
120
|
-
human: $t(`
|
|
120
|
+
human: $t(`f5cac12d-ced6-43e6-bbd9-81b381807154`),
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
const now = new Date();
|
|
@@ -49,7 +49,7 @@ function assertIsEventsResponse(json: unknown): asserts json is EventsResponse {
|
|
|
49
49
|
throw new SimpleError({
|
|
50
50
|
code: 'invalid_events_response',
|
|
51
51
|
message: `Invalid events response`,
|
|
52
|
-
human: $t(`
|
|
52
|
+
human: $t(`0b610eb8-551f-4ef6-acdc-fb3267dfc2a8`),
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -61,7 +61,7 @@ export async function searchUitpasEvents(clientId: string, uitpasOrganizerId: st
|
|
|
61
61
|
throw new SimpleError({
|
|
62
62
|
code: 'no_client_id_for_uitpas_events',
|
|
63
63
|
message: `No client ID configured for Uitpas events`,
|
|
64
|
-
human: $t(`
|
|
64
|
+
human: $t(`0009cce2-9d13-4f03-9258-345d8f8e396e`),
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
const baseUrl = 'https://search-test.uitdatabank.be/events';
|
|
@@ -97,7 +97,7 @@ export async function searchUitpasEvents(clientId: string, uitpasOrganizerId: st
|
|
|
97
97
|
throw new SimpleError({
|
|
98
98
|
code: 'unsuccessful_response_searching_uitpas_events',
|
|
99
99
|
message: `Unsuccessful response when searching for UiTPAS events`,
|
|
100
|
-
human: $t(`
|
|
100
|
+
human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
103
|
const json = await response.json().catch(() => {
|
|
@@ -25,7 +25,7 @@ function assertIsOrganizersResponse(json: unknown): asserts json is OrganizersRe
|
|
|
25
25
|
throw new SimpleError({
|
|
26
26
|
code: 'invalid_response_searching_uitpas_organizers',
|
|
27
27
|
message: `Invalid response when searching for UiTPAS organizers`,
|
|
28
|
-
human: $t(`
|
|
28
|
+
human: $t(`e1aab1a7-fded-4e5e-b994-6607684764ac`),
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -37,7 +37,7 @@ export async function searchUitpasOrganizers(access_token: string, name: string)
|
|
|
37
37
|
throw new SimpleError({
|
|
38
38
|
code: 'empty_uitpas_organizer_name',
|
|
39
39
|
message: `Empty name when searching for UiTPAS organizers`,
|
|
40
|
-
human: $t(`
|
|
40
|
+
human: $t(`963105d8-a70a-4ba4-9ddc-b7f908d44664`),
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
const baseUrl = 'https://api-test.uitpas.be/organizers';
|
|
@@ -66,7 +66,7 @@ export async function searchUitpasOrganizers(access_token: string, name: string)
|
|
|
66
66
|
throw new SimpleError({
|
|
67
67
|
code: 'unsuccessful_response_searching_uitpas_organizers',
|
|
68
68
|
message: `Unsuccessful response when searching for UiTPAS organizers`,
|
|
69
|
-
human: $t(`
|
|
69
|
+
human: $t(`ed4e876c-6a40-49a7-ab65-2a4d5f31c13f`),
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
const json = await response.json().catch(() => {
|
|
@@ -457,7 +457,7 @@ export const memberFilterCompilers: SQLFilterDefinitions = {
|
|
|
457
457
|
throw new SimpleError({
|
|
458
458
|
code: 'permission_denied',
|
|
459
459
|
message: 'No permissions for financial support filter (organization scope).',
|
|
460
|
-
human: result.record ? $t(`
|
|
460
|
+
human: result.record ? $t(`3560487e-3f2c-4cc9-ad7f-4e9a0fc1bbb8`, { recordName: result.record.name }) : $t(`Je hebt niet voldoende toegangsrechten om te filteren op dit gegevensveld`),
|
|
461
461
|
statusCode: 400,
|
|
462
462
|
});
|
|
463
463
|
}
|
|
@@ -187,4 +187,56 @@ export const organizationFilterCompilers: SQLFilterDefinitions = {
|
|
|
187
187
|
}),
|
|
188
188
|
},
|
|
189
189
|
),
|
|
190
|
+
companies: createExistsFilter(
|
|
191
|
+
/**
|
|
192
|
+
* There is a bug in MySQL 8 that is fixed in 9.3
|
|
193
|
+
* where EXISTS (select * from json_table(...)) does not work
|
|
194
|
+
* To fix this, we do a double select with join inside the select
|
|
195
|
+
* It is a bit slower, but it works for now.
|
|
196
|
+
*/
|
|
197
|
+
SQL.select()
|
|
198
|
+
.from('organizations', 'innerOrganizations')
|
|
199
|
+
.join(
|
|
200
|
+
SQL.join(
|
|
201
|
+
SQL.jsonTable(
|
|
202
|
+
SQL.jsonValue(SQL.column('innerOrganizations', 'meta'), '$.value.companies'),
|
|
203
|
+
'companies',
|
|
204
|
+
)
|
|
205
|
+
.addColumn(
|
|
206
|
+
'companyNumber',
|
|
207
|
+
'TEXT',
|
|
208
|
+
'$.companyNumber',
|
|
209
|
+
)
|
|
210
|
+
.addColumn(
|
|
211
|
+
'VATNumber',
|
|
212
|
+
'TEXT',
|
|
213
|
+
'$.VATNumber',
|
|
214
|
+
)
|
|
215
|
+
.addColumn(
|
|
216
|
+
'name',
|
|
217
|
+
'TEXT',
|
|
218
|
+
'$.name',
|
|
219
|
+
),
|
|
220
|
+
),
|
|
221
|
+
)
|
|
222
|
+
.where(SQL.column('innerOrganizations', 'id'), SQL.column('organizations', 'id')),
|
|
223
|
+
{
|
|
224
|
+
...baseSQLFilterCompilers,
|
|
225
|
+
name: createColumnFilter({
|
|
226
|
+
expression: SQL.column('companies', 'name'),
|
|
227
|
+
type: SQLValueType.String,
|
|
228
|
+
nullable: true,
|
|
229
|
+
}),
|
|
230
|
+
companyNumber: createColumnFilter({
|
|
231
|
+
expression: SQL.column('companies', 'companyNumber'),
|
|
232
|
+
type: SQLValueType.String,
|
|
233
|
+
nullable: true,
|
|
234
|
+
}),
|
|
235
|
+
VATNumber: createColumnFilter({
|
|
236
|
+
expression: SQL.column('companies', 'VATNumber'),
|
|
237
|
+
type: SQLValueType.String,
|
|
238
|
+
nullable: true,
|
|
239
|
+
}),
|
|
240
|
+
},
|
|
241
|
+
),
|
|
190
242
|
};
|
|
@@ -1195,7 +1195,7 @@ describe('E2E.Register', () => {
|
|
|
1195
1195
|
expect(trialUntil).not.toBeNull();
|
|
1196
1196
|
expect(trialUntil!.getFullYear()).toBe(2023);
|
|
1197
1197
|
expect(trialUntil!.getMonth()).toBe(4);
|
|
1198
|
-
expect(trialUntil!.getDate()).toBe(
|
|
1198
|
+
expect(trialUntil!.getDate()).toBe(19);
|
|
1199
1199
|
}
|
|
1200
1200
|
finally {
|
|
1201
1201
|
jest.useRealTimers().resetAllMocks();
|