@stamhoofd/backend 2.120.0 → 2.120.1
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/boot.ts +9 -1
- package/src/endpoints/global/members/PatchOrganizationMembersEndpoint.ts +2 -2
- package/src/endpoints/global/platform-memberships/GetPlatformMembershipsEndpoint.ts +10 -5
- package/src/endpoints/organization/dashboard/organization/SetOrganizationDomainEndpoint.ts +3 -3
- package/src/excel-loaders/event-notifications.ts +3 -3
- package/src/excel-loaders/members.ts +2 -2
- package/src/excel-loaders/organizations.ts +5 -5
- package/src/excel-loaders/payments.ts +1 -1
- package/src/excel-loaders/platform-memberships.ts +74 -14
- package/src/excel-loaders/receivable-balances.ts +3 -3
- package/src/excel-loaders/registrations.ts +5 -5
- package/src/helpers/email-html-helpers.ts +2 -2
- package/src/sql-filters/platform-memberships.ts +5 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/backend",
|
|
3
|
-
"version": "2.120.
|
|
3
|
+
"version": "2.120.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -65,14 +65,14 @@
|
|
|
65
65
|
"@simonbackx/simple-encoding": "2.26.5",
|
|
66
66
|
"@simonbackx/simple-endpoints": "1.21.0",
|
|
67
67
|
"@simonbackx/simple-logging": "^1.0.1",
|
|
68
|
-
"@stamhoofd/backend-i18n": "2.120.
|
|
69
|
-
"@stamhoofd/backend-middleware": "2.120.
|
|
70
|
-
"@stamhoofd/email": "2.120.
|
|
71
|
-
"@stamhoofd/models": "2.120.
|
|
72
|
-
"@stamhoofd/queues": "2.120.
|
|
73
|
-
"@stamhoofd/sql": "2.120.
|
|
74
|
-
"@stamhoofd/structures": "2.120.
|
|
75
|
-
"@stamhoofd/utility": "2.120.
|
|
68
|
+
"@stamhoofd/backend-i18n": "2.120.1",
|
|
69
|
+
"@stamhoofd/backend-middleware": "2.120.1",
|
|
70
|
+
"@stamhoofd/email": "2.120.1",
|
|
71
|
+
"@stamhoofd/models": "2.120.1",
|
|
72
|
+
"@stamhoofd/queues": "2.120.1",
|
|
73
|
+
"@stamhoofd/sql": "2.120.1",
|
|
74
|
+
"@stamhoofd/structures": "2.120.1",
|
|
75
|
+
"@stamhoofd/utility": "2.120.1",
|
|
76
76
|
"archiver": "^7.0.1",
|
|
77
77
|
"axios": "^1.13.2",
|
|
78
78
|
"cookie": "^0.7.0",
|
|
@@ -90,5 +90,5 @@
|
|
|
90
90
|
"publishConfig": {
|
|
91
91
|
"access": "public"
|
|
92
92
|
},
|
|
93
|
-
"gitHead": "
|
|
93
|
+
"gitHead": "00f65fc28d68feb86c30789784181a8954d638d7"
|
|
94
94
|
}
|
package/src/boot.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { Email } from '@stamhoofd/email';
|
|
|
5
5
|
import { loadLogger } from '@stamhoofd/logging';
|
|
6
6
|
import { Version } from '@stamhoofd/structures';
|
|
7
7
|
import { sleep } from '@stamhoofd/utility';
|
|
8
|
+
import { checkReadOnly } from '@stamhoofd/crons';
|
|
8
9
|
|
|
9
10
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
10
11
|
import { startCrons, stopCrons, waitForCrons } from '@stamhoofd/crons';
|
|
@@ -24,6 +25,7 @@ import { PlatformMembershipService } from './services/PlatformMembershipService.
|
|
|
24
25
|
import { UitpasService } from './services/uitpas/UitpasService.js';
|
|
25
26
|
import { UniqueUserService } from './services/UniqueUserService.js';
|
|
26
27
|
import { AutoEncoder } from '@simonbackx/simple-encoding';
|
|
28
|
+
import { StyledText } from '@simonbackx/simple-logging';
|
|
27
29
|
|
|
28
30
|
process.on('unhandledRejection', (error: Error) => {
|
|
29
31
|
console.error('unhandledRejection');
|
|
@@ -47,11 +49,17 @@ if (new Date().getTimezoneOffset() !== 0) {
|
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
const seeds = async (options: {shutdown: () => Promise<void>}) => {
|
|
52
|
+
if (await checkReadOnly()) {
|
|
53
|
+
console.error(new StyledText(`[SEEDS] `).addClass('migration', 'tag'), new StyledText('MySQL is in read-only mode: Seeds are disabled.').addClass('error'));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
50
57
|
try {
|
|
51
58
|
// Internal
|
|
52
59
|
await AuditLogService.disable(async () => {
|
|
53
60
|
if (!await Migration.runAll(import.meta.dirname + '/seeds')) {
|
|
54
|
-
console.error('Seeds failed!')
|
|
61
|
+
console.error(new StyledText(`[SEEDS] `).addClass('migration', 'tag'), new StyledText('Seeds failed!').addClass('error'));
|
|
62
|
+
|
|
55
63
|
if (STAMHOOFD.environment === 'test' || STAMHOOFD.environment === 'development') {
|
|
56
64
|
await options.shutdown();
|
|
57
65
|
}
|
|
@@ -65,7 +65,7 @@ export class PatchOrganizationMembersEndpoint extends Endpoint<Params, Query, Bo
|
|
|
65
65
|
throw new SimpleError({
|
|
66
66
|
code: 'invalid_field',
|
|
67
67
|
message: 'Member number already in use',
|
|
68
|
-
human: $t('
|
|
68
|
+
human: $t('%1Oe'),
|
|
69
69
|
field: 'details.memberNumber',
|
|
70
70
|
});
|
|
71
71
|
}
|
|
@@ -1031,7 +1031,7 @@ export class PatchOrganizationMembersEndpoint extends Endpoint<Params, Query, Bo
|
|
|
1031
1031
|
code: 'known_member_missing_rights',
|
|
1032
1032
|
message: 'Creating known member without sufficient access rights',
|
|
1033
1033
|
// different message for userMode organization because security codes are not available in that mode
|
|
1034
|
-
human: $t(
|
|
1034
|
+
human: $t(`%1Oz`, { member: member.details.firstName }),
|
|
1035
1035
|
statusCode: 400,
|
|
1036
1036
|
});
|
|
1037
1037
|
}
|
|
@@ -2,10 +2,10 @@ import type { Decoder } from '@simonbackx/simple-encoding';
|
|
|
2
2
|
import type { DecodedRequest, Request } from '@simonbackx/simple-endpoints';
|
|
3
3
|
import { Endpoint, Response } from '@simonbackx/simple-endpoints';
|
|
4
4
|
import { SimpleError } from '@simonbackx/simple-errors';
|
|
5
|
-
import { Member, MemberPlatformMembership, Organization } from '@stamhoofd/models';
|
|
5
|
+
import { BalanceItem, Member, MemberPlatformMembership, Organization } from '@stamhoofd/models';
|
|
6
6
|
import { applySQLSorter, compileToSQLFilter } from '@stamhoofd/sql';
|
|
7
7
|
import type { CountFilteredRequest, StamhoofdFilter } from '@stamhoofd/structures';
|
|
8
|
-
import { assertSort, getSortFilter, LimitedFilteredRequest, PaginatedResponse,
|
|
8
|
+
import { assertSort, getSortFilter, LimitedFilteredRequest, PaginatedResponse, PlatformMembershipMemberDetails, PlatformMembership, PlatformMembershipOrganizationDetails } from '@stamhoofd/structures';
|
|
9
9
|
import { Formatter } from '@stamhoofd/utility';
|
|
10
10
|
import { Context } from '../../../helpers/Context.js';
|
|
11
11
|
import { platformMembershipFilterCompilers } from '../../../sql-filters/platform-memberships.js';
|
|
@@ -115,8 +115,11 @@ export class GetPlatformMembershipsEndpoint extends Endpoint<Params, Query, Body
|
|
|
115
115
|
|
|
116
116
|
const memberIds = Formatter.uniqueArray(data.map(d => d.memberId));
|
|
117
117
|
const organizationIds = Formatter.uniqueArray(data.map(d => d.organizationId));
|
|
118
|
+
const balanceItemIds = Formatter.uniqueArray(data.map(d => d.balanceItemId));
|
|
118
119
|
const members = await Member.getByIDs(...memberIds);
|
|
119
120
|
const organizations = await Organization.getByIDs(...organizationIds);
|
|
121
|
+
const balanceItems = await BalanceItem.getByIDs(...balanceItemIds)
|
|
122
|
+
const balanceItemStructures = await BalanceItem.getStructureWithPayments(balanceItems);
|
|
120
123
|
|
|
121
124
|
const results: PlatformMembership[] = [];
|
|
122
125
|
|
|
@@ -126,7 +129,7 @@ export class GetPlatformMembershipsEndpoint extends Endpoint<Params, Query, Body
|
|
|
126
129
|
throw new SimpleError({
|
|
127
130
|
code: 'not_found',
|
|
128
131
|
message: 'Member not found',
|
|
129
|
-
human: $t(`
|
|
132
|
+
human: $t(`%1Nz`),
|
|
130
133
|
statusCode: 404,
|
|
131
134
|
});
|
|
132
135
|
}
|
|
@@ -136,14 +139,16 @@ export class GetPlatformMembershipsEndpoint extends Endpoint<Params, Query, Body
|
|
|
136
139
|
throw new SimpleError({
|
|
137
140
|
code: 'not_found',
|
|
138
141
|
message: 'Organization not found',
|
|
139
|
-
human: $t(`
|
|
142
|
+
human: $t(`%1OX`),
|
|
140
143
|
statusCode: 404,
|
|
141
144
|
});
|
|
142
145
|
}
|
|
143
146
|
|
|
147
|
+
const balanceItem = model.balanceItemId ? balanceItemStructures.find(o => o.id === model.balanceItemId) : null;
|
|
144
148
|
results.push(PlatformMembership.create({
|
|
145
149
|
...model,
|
|
146
|
-
|
|
150
|
+
balanceItem: balanceItem,
|
|
151
|
+
member: PlatformMembershipMemberDetails.create(member),
|
|
147
152
|
organization: PlatformMembershipOrganizationDetails.create(organization)
|
|
148
153
|
}));
|
|
149
154
|
}
|
|
@@ -115,7 +115,7 @@ export class SetOrganizationDomainEndpoint extends Endpoint<Params, Query, Body,
|
|
|
115
115
|
type: DNSRecordType.CNAME,
|
|
116
116
|
name: organization.privateMeta.mailFromDomain + '.',
|
|
117
117
|
// Use shops for mail domain, to allow reuse
|
|
118
|
-
value: (STAMHOOFD.domains.webshopCname ?? STAMHOOFD.domains.registrationCname) + '.',
|
|
118
|
+
value: (STAMHOOFD.domains.webshopCname ?? STAMHOOFD.domains.registrationCname[organization.address.country] ?? STAMHOOFD.domains.registrationCname['']) + '.',
|
|
119
119
|
}));
|
|
120
120
|
|
|
121
121
|
if (STAMHOOFD.domains.registration && organization.privateMeta.pendingRegisterDomain) {
|
|
@@ -123,7 +123,7 @@ export class SetOrganizationDomainEndpoint extends Endpoint<Params, Query, Body,
|
|
|
123
123
|
type: DNSRecordType.CNAME,
|
|
124
124
|
name: organization.privateMeta.pendingRegisterDomain + '.',
|
|
125
125
|
// Use registration domain
|
|
126
|
-
value: STAMHOOFD.domains.registrationCname + '.',
|
|
126
|
+
value: (STAMHOOFD.domains.registrationCname[organization.address.country] ?? STAMHOOFD.domains.registrationCname['']) + '.',
|
|
127
127
|
}));
|
|
128
128
|
}
|
|
129
129
|
}
|
|
@@ -132,7 +132,7 @@ export class SetOrganizationDomainEndpoint extends Endpoint<Params, Query, Body,
|
|
|
132
132
|
type: DNSRecordType.CNAME,
|
|
133
133
|
name: organization.privateMeta.mailFromDomain + '.',
|
|
134
134
|
// Use registration domain
|
|
135
|
-
value: STAMHOOFD.domains.registrationCname + '.',
|
|
135
|
+
value: (STAMHOOFD.domains.registrationCname[organization.address.country] ?? STAMHOOFD.domains.registrationCname['']) + '.',
|
|
136
136
|
}));
|
|
137
137
|
}
|
|
138
138
|
|
|
@@ -38,7 +38,7 @@ const sheet: XlsxTransformerSheet<EventNotification, EventNotification> = {
|
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
id: 'organization.uri',
|
|
41
|
-
name: $t(`%
|
|
41
|
+
name: $t(`%1O1`),
|
|
42
42
|
width: 30,
|
|
43
43
|
getValue: (notification: EventNotification) => ({
|
|
44
44
|
value: notification.organization.uri,
|
|
@@ -67,7 +67,7 @@ const sheet: XlsxTransformerSheet<EventNotification, EventNotification> = {
|
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
id: 'startDate',
|
|
70
|
-
name: $t(`%
|
|
70
|
+
name: $t(`%1Of`),
|
|
71
71
|
width: 20,
|
|
72
72
|
getValue: (notification: EventNotification) => ({
|
|
73
73
|
value: notification.startDate,
|
|
@@ -80,7 +80,7 @@ const sheet: XlsxTransformerSheet<EventNotification, EventNotification> = {
|
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
82
|
id: 'endDate',
|
|
83
|
-
name: $t(`%
|
|
83
|
+
name: $t(`%1P8`),
|
|
84
84
|
width: 20,
|
|
85
85
|
getValue: (notification: EventNotification) => ({
|
|
86
86
|
value: notification.endDate,
|
|
@@ -154,7 +154,7 @@ export const baseMemberColumns: XlsxTransformerColumn<PlatformMember>[] = [
|
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
id: 'membership',
|
|
157
|
-
name: $t(`%
|
|
157
|
+
name: $t(`%1Ny`),
|
|
158
158
|
width: 20,
|
|
159
159
|
getValue: (member: PlatformMember) => {
|
|
160
160
|
return {
|
|
@@ -177,7 +177,7 @@ export const baseMemberColumns: XlsxTransformerColumn<PlatformMember>[] = [
|
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
id: 'uri',
|
|
180
|
-
name: $t(`%
|
|
180
|
+
name: $t(`%1O1`),
|
|
181
181
|
width: 30,
|
|
182
182
|
getValue: (member: PlatformMember) => {
|
|
183
183
|
const organizations = member.filterOrganizations({ currentPeriod: true, types: [GroupType.Membership] });
|
|
@@ -41,7 +41,7 @@ const sheet: XlsxTransformerSheet<Object, Object> = {
|
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
id: 'uri',
|
|
44
|
-
name: $t(`%
|
|
44
|
+
name: $t(`%1O1`),
|
|
45
45
|
width: 20,
|
|
46
46
|
getValue: (object: Object) => ({
|
|
47
47
|
value: object.uri,
|
|
@@ -49,7 +49,7 @@ const sheet: XlsxTransformerSheet<Object, Object> = {
|
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
id: 'name',
|
|
52
|
-
name: $t(`%
|
|
52
|
+
name: $t(`%1Os`),
|
|
53
53
|
width: 50,
|
|
54
54
|
getValue: (object: Object) => ({
|
|
55
55
|
value: object.name,
|
|
@@ -106,7 +106,7 @@ const responsibilities: XlsxTransformerSheet<Object, MemberResponsibilityRecordW
|
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
id: 'organization.uri',
|
|
109
|
-
name: $t(`%
|
|
109
|
+
name: $t(`%1O1`),
|
|
110
110
|
width: 20,
|
|
111
111
|
getValue: (object: MemberResponsibilityRecordWithMemberAndOrganization) => ({
|
|
112
112
|
value: object.organization.uri,
|
|
@@ -191,7 +191,7 @@ const premises: XlsxTransformerSheet<Object, PremiseWithOrganization> = {
|
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
id: 'organization.uri',
|
|
194
|
-
name: $t(`%
|
|
194
|
+
name: $t(`%1O1`),
|
|
195
195
|
width: 20,
|
|
196
196
|
getValue: (object: PremiseWithOrganization) => ({
|
|
197
197
|
value: object.organization.uri,
|
|
@@ -207,7 +207,7 @@ const premises: XlsxTransformerSheet<Object, PremiseWithOrganization> = {
|
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
id: 'premise.name',
|
|
210
|
-
name: $t(`%
|
|
210
|
+
name: $t(`%1Os`),
|
|
211
211
|
width: 20,
|
|
212
212
|
getValue: (object: PremiseWithOrganization) => ({
|
|
213
213
|
value: object.premise.name,
|
|
@@ -20,7 +20,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
id: 'type',
|
|
23
|
-
name: $t('
|
|
23
|
+
name: $t('%1LP'),
|
|
24
24
|
width: 40,
|
|
25
25
|
getValue: (membership: PlatformMembership) => {
|
|
26
26
|
const membershipType = Platform.shared.config.membershipTypes.find(m => m.id === membership.membershipTypeId);
|
|
@@ -30,7 +30,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
id: 'startDate',
|
|
33
|
-
name: $t('
|
|
33
|
+
name: $t('%1Of'),
|
|
34
34
|
width: 20,
|
|
35
35
|
getValue: (membership: PlatformMembership) => {
|
|
36
36
|
return {
|
|
@@ -45,7 +45,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
id: 'endDate',
|
|
48
|
-
name: $t('
|
|
48
|
+
name: $t('%1P8'),
|
|
49
49
|
width: 20,
|
|
50
50
|
getValue: (membership: PlatformMembership) => {
|
|
51
51
|
return {
|
|
@@ -60,7 +60,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
id: 'price',
|
|
63
|
-
name: $t('
|
|
63
|
+
name: $t('%1IP'),
|
|
64
64
|
width: 10,
|
|
65
65
|
getValue: (membership: PlatformMembership) => {
|
|
66
66
|
return {
|
|
@@ -75,7 +75,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
id: 'priceWithoutDiscount',
|
|
78
|
-
name: $t(`
|
|
78
|
+
name: $t(`%1Nm`),
|
|
79
79
|
width: 10,
|
|
80
80
|
getValue: (membership: PlatformMembership) => {
|
|
81
81
|
return {
|
|
@@ -90,7 +90,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
id: 'trialUntil',
|
|
93
|
-
name: $t(`
|
|
93
|
+
name: $t(`%1PU`),
|
|
94
94
|
width: 20,
|
|
95
95
|
getValue: (membership: PlatformMembership) => {
|
|
96
96
|
return {
|
|
@@ -105,7 +105,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
id: 'freeAmount',
|
|
108
|
-
name: $t(`
|
|
108
|
+
name: $t(`%1Oo`),
|
|
109
109
|
width: 40,
|
|
110
110
|
getValue: (membership: PlatformMembership) => ({
|
|
111
111
|
value: membership.freeAmount,
|
|
@@ -113,7 +113,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
id: 'createdAt',
|
|
116
|
-
name: $t(`
|
|
116
|
+
name: $t(`%1Jc`),
|
|
117
117
|
width: 20,
|
|
118
118
|
getValue: (membership: PlatformMembership) => {
|
|
119
119
|
return {
|
|
@@ -128,7 +128,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
id: 'expireDate',
|
|
131
|
-
name: $t(`
|
|
131
|
+
name: $t(`%1J7`),
|
|
132
132
|
width: 20,
|
|
133
133
|
getValue: (membership: PlatformMembership) => {
|
|
134
134
|
return {
|
|
@@ -141,10 +141,70 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
141
141
|
};
|
|
142
142
|
},
|
|
143
143
|
},
|
|
144
|
+
// balance item
|
|
145
|
+
{
|
|
146
|
+
id: 'balanceItem.createdAt',
|
|
147
|
+
name: $t(`%1OM`),
|
|
148
|
+
width: 20,
|
|
149
|
+
getValue: (membership: PlatformMembership) => ({
|
|
150
|
+
value: membership.balanceItem?.createdAt ?? null,
|
|
151
|
+
style: {
|
|
152
|
+
numberFormat: {
|
|
153
|
+
id: XlsxBuiltInNumberFormat.DateSlash,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
}),
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
id: 'balanceItem.priceOpen',
|
|
160
|
+
name: $t('%1Ni'),
|
|
161
|
+
width: 10,
|
|
162
|
+
getValue: (membership: PlatformMembership) => {
|
|
163
|
+
return {
|
|
164
|
+
value: membership.balanceItem?.priceOpen ? ((membership.balanceItem?.priceOpen ?? 0) / 1_0000) : null,
|
|
165
|
+
style: {
|
|
166
|
+
numberFormat: {
|
|
167
|
+
id: XlsxBuiltInNumberFormat.Currency2DecimalWithRed,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: 'balanceItem.pricePaid',
|
|
175
|
+
name: $t('%1OD'),
|
|
176
|
+
width: 10,
|
|
177
|
+
getValue: (membership: PlatformMembership) => {
|
|
178
|
+
return {
|
|
179
|
+
value: membership.balanceItem?.pricePaid ? ((membership.balanceItem?.pricePaid ?? 0) / 1_0000) : null,
|
|
180
|
+
style: {
|
|
181
|
+
numberFormat: {
|
|
182
|
+
id: XlsxBuiltInNumberFormat.Currency2DecimalWithRed,
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'balanceItem.pricePending',
|
|
190
|
+
name: $t('%1OL'),
|
|
191
|
+
width: 10,
|
|
192
|
+
getValue: (membership: PlatformMembership) => {
|
|
193
|
+
return {
|
|
194
|
+
value: membership.balanceItem?.pricePending ? ((membership.balanceItem?.pricePending ?? 0) / 1_0000) : null,
|
|
195
|
+
style: {
|
|
196
|
+
numberFormat: {
|
|
197
|
+
id: XlsxBuiltInNumberFormat.Currency2DecimalWithRed,
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
|
|
144
204
|
// member
|
|
145
205
|
{
|
|
146
206
|
id: 'member.memberNumber',
|
|
147
|
-
name: $t(`
|
|
207
|
+
name: $t(`%19j`),
|
|
148
208
|
width: 20,
|
|
149
209
|
getValue: (membership: PlatformMembership) => ({
|
|
150
210
|
value: membership.member.memberNumber,
|
|
@@ -152,7 +212,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
152
212
|
},
|
|
153
213
|
{
|
|
154
214
|
id: 'member.firstName',
|
|
155
|
-
name: $t(`
|
|
215
|
+
name: $t(`%1O8`),
|
|
156
216
|
width: 20,
|
|
157
217
|
getValue:(membership: PlatformMembership) => ({
|
|
158
218
|
value: membership.member.firstName,
|
|
@@ -160,7 +220,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
160
220
|
},
|
|
161
221
|
{
|
|
162
222
|
id: 'member.lastName',
|
|
163
|
-
name: $t(`
|
|
223
|
+
name: $t(`%1Or`),
|
|
164
224
|
width: 20,
|
|
165
225
|
getValue:(membership: PlatformMembership) => ({
|
|
166
226
|
value: membership.member.lastName,
|
|
@@ -169,7 +229,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
169
229
|
// organization
|
|
170
230
|
{
|
|
171
231
|
id: 'organization.name',
|
|
172
|
-
name: $t(`
|
|
232
|
+
name: $t(`%1PW`),
|
|
173
233
|
width: 20,
|
|
174
234
|
getValue:(membership: PlatformMembership) => ({
|
|
175
235
|
value: membership.organization.name,
|
|
@@ -177,7 +237,7 @@ const sheet: XlsxTransformerSheet<PlatformMembership> = {
|
|
|
177
237
|
},
|
|
178
238
|
{
|
|
179
239
|
id: 'organization.uri',
|
|
180
|
-
name: $t(`
|
|
240
|
+
name: $t(`%1PZ`),
|
|
181
241
|
width: 20,
|
|
182
242
|
getValue:(membership: PlatformMembership) => ({
|
|
183
243
|
value: membership.organization.uri,
|
|
@@ -146,7 +146,7 @@ function getBalanceItemColumns(): XlsxTransformerColumn<ReceivableBalanceWithIte
|
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
148
|
id: 'pricePending',
|
|
149
|
-
name: $t(`%
|
|
149
|
+
name: $t(`%1PL`),
|
|
150
150
|
width: 20,
|
|
151
151
|
getValue: (object: ReceivableBalanceWithItem) => ({
|
|
152
152
|
value: object.balanceItem.pricePending / 1_0000,
|
|
@@ -252,7 +252,7 @@ function getGeneralColumns(): XlsxTransformerConcreteColumn<ReceivableBalance>[]
|
|
|
252
252
|
},
|
|
253
253
|
{
|
|
254
254
|
id: 'uri',
|
|
255
|
-
name: $t(`%
|
|
255
|
+
name: $t(`%1O1`),
|
|
256
256
|
width: 16,
|
|
257
257
|
getValue: (object: ReceivableBalance) => ({
|
|
258
258
|
value: object.object.uri,
|
|
@@ -273,7 +273,7 @@ function getGeneralColumns(): XlsxTransformerConcreteColumn<ReceivableBalance>[]
|
|
|
273
273
|
},
|
|
274
274
|
{
|
|
275
275
|
id: 'amountPending',
|
|
276
|
-
name: $t(`%
|
|
276
|
+
name: $t(`%1PL`),
|
|
277
277
|
width: 18,
|
|
278
278
|
getValue: (object: ReceivableBalance) => ({
|
|
279
279
|
value: object.amountPending / 1_0000,
|
|
@@ -95,7 +95,7 @@ const sheet: XlsxTransformerSheet<PlatformMember, PlatformRegistration> = {
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
id: 'startDate',
|
|
98
|
-
name: $t(`%
|
|
98
|
+
name: $t(`%1Of`),
|
|
99
99
|
width: 20,
|
|
100
100
|
getValue: (registration: PlatformRegistration) => ({
|
|
101
101
|
value: registration.startDate,
|
|
@@ -108,7 +108,7 @@ const sheet: XlsxTransformerSheet<PlatformMember, PlatformRegistration> = {
|
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
110
|
id: 'endDate',
|
|
111
|
-
name: $t(`%
|
|
111
|
+
name: $t(`%1P8`),
|
|
112
112
|
width: 20,
|
|
113
113
|
getValue: (registration: PlatformRegistration) => ({
|
|
114
114
|
value: registration.endDate,
|
|
@@ -134,7 +134,7 @@ const sheet: XlsxTransformerSheet<PlatformMember, PlatformRegistration> = {
|
|
|
134
134
|
},
|
|
135
135
|
{
|
|
136
136
|
id: 'organization',
|
|
137
|
-
name: $t('%
|
|
137
|
+
name: $t('%1PI'),
|
|
138
138
|
width: 40,
|
|
139
139
|
getValue: (registration: PlatformRegistration) => {
|
|
140
140
|
const organization = registration.member.family.getOrganization(registration.group.organizationId);
|
|
@@ -145,7 +145,7 @@ const sheet: XlsxTransformerSheet<PlatformMember, PlatformRegistration> = {
|
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
id: 'uri',
|
|
148
|
-
name: $t('%
|
|
148
|
+
name: $t('%1O1'),
|
|
149
149
|
width: 40,
|
|
150
150
|
getValue: (registration: PlatformRegistration) => {
|
|
151
151
|
const organization = registration.member.family.getOrganization(registration.group.organizationId);
|
|
@@ -307,7 +307,7 @@ const sheet: XlsxTransformerSheet<PlatformMember, PlatformRegistration> = {
|
|
|
307
307
|
},
|
|
308
308
|
{
|
|
309
309
|
id: 'uri',
|
|
310
|
-
name: $t(`%
|
|
310
|
+
name: $t(`%1O1`),
|
|
311
311
|
width: 30,
|
|
312
312
|
getValue: (registration: PlatformRegistration) => {
|
|
313
313
|
return {
|
|
@@ -18,7 +18,7 @@ export function createOrderDataHTMLTable(order: Order, webshop: Webshop): string
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
if (order.data.checkoutMethod?.type === CheckoutMethodType.OnSite) {
|
|
21
|
-
return $t(`%
|
|
21
|
+
return $t(`%8a`);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
return $t(`%Us`);
|
|
@@ -56,7 +56,7 @@ export function createOrderDataHTMLTable(order: Order, webshop: Webshop): string
|
|
|
56
56
|
value: order.data.timeSlot?.timeRangeString() ?? '',
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
title: $t(`%
|
|
59
|
+
title: $t(`%1Os`),
|
|
60
60
|
value: order.data.customer.name,
|
|
61
61
|
},
|
|
62
62
|
...(order.data.customer.phone
|
|
@@ -46,6 +46,11 @@ export const platformMembershipFilterCompilers: SQLFilterDefinitions = {
|
|
|
46
46
|
type: SQLValueType.Number,
|
|
47
47
|
nullable: false,
|
|
48
48
|
}),
|
|
49
|
+
price: createColumnFilter({
|
|
50
|
+
expression: SQL.column(MemberPlatformMembership.table, 'price'),
|
|
51
|
+
type: SQLValueType.Number,
|
|
52
|
+
nullable: false,
|
|
53
|
+
}),
|
|
49
54
|
organization: createExistsFilter(
|
|
50
55
|
SQL.select()
|
|
51
56
|
.from(SQL.table('organizations'))
|