@stamhoofd/models 2.12.0 → 2.13.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.
@@ -0,0 +1,13 @@
1
+ import { Member } from "../models";
2
+ export declare function mergeMultipleMembers(members: Member[]): Promise<void>;
3
+ export declare function findEqualMembers({ firstName, lastName, birthDay, }: {
4
+ firstName: string;
5
+ lastName: string;
6
+ birthDay: string;
7
+ }): Promise<Member[]>;
8
+ export declare function mergeMemberDetails(base: Member, other: Member): void;
9
+ export declare function selectBaseMember(members: Member[]): {
10
+ base: Member;
11
+ others: Member[];
12
+ };
13
+ //# sourceMappingURL=MemberMerger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberMerger.d.ts","sourceRoot":"","sources":["../../../src/helpers/MemberMerger.ts"],"names":[],"mappings":"AAYA,OAAO,EAGH,MAAM,EAMT,MAAM,WAAW,CAAC;AAEnB,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAM3D;AAED,wBAAsB,gBAAgB,CAAC,EACnC,SAAS,EACT,QAAQ,EACR,QAAQ,GACX,EAAE;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMpB;AA8ID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAuFpE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB,CASA"}
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.selectBaseMember = exports.mergeMemberDetails = exports.findEqualMembers = exports.mergeMultipleMembers = void 0;
4
+ const simple_database_1 = require("@simonbackx/simple-database");
5
+ const sql_1 = require("@stamhoofd/sql");
6
+ const structures_1 = require("@stamhoofd/structures");
7
+ const utility_1 = require("@stamhoofd/utility");
8
+ const models_1 = require("../models");
9
+ async function mergeMultipleMembers(members) {
10
+ const { base, others } = selectBaseMember(members);
11
+ for (const other of others) {
12
+ await mergeTwoMembers(base, other);
13
+ }
14
+ }
15
+ exports.mergeMultipleMembers = mergeMultipleMembers;
16
+ async function findEqualMembers({ firstName, lastName, birthDay, }) {
17
+ return await models_1.Member.where({
18
+ firstName,
19
+ lastName,
20
+ birthDay,
21
+ });
22
+ }
23
+ exports.findEqualMembers = findEqualMembers;
24
+ async function mergeTwoMembers(base, other) {
25
+ mergeMemberDetails(base, other);
26
+ await mergeRegistrations(base, other);
27
+ await mergeUsers(base, other);
28
+ await mergeResponsibilities(base, other);
29
+ await mergeBalanceItems(base, other);
30
+ await mergeDocuments(base, other);
31
+ await mergeMemberPlatformMemberships(base, other);
32
+ await base.save();
33
+ // store other member in merged_member table
34
+ const mergedMember = models_1.MergedMember.fromMember(other, base.id);
35
+ await mergedMember.save();
36
+ await other.delete();
37
+ }
38
+ async function mergeRegistrations(base, other) {
39
+ await mergeModels(base, other, models_1.Registration);
40
+ }
41
+ async function mergeUsers(base, other) {
42
+ await mergeModels(base, other, models_1.User);
43
+ }
44
+ async function mergeResponsibilities(base, other) {
45
+ async function getResponsibilities(memberId) {
46
+ const rows = await sql_1.SQL.select()
47
+ .from(sql_1.SQL.table(models_1.MemberResponsibilityRecord.table))
48
+ .where(sql_1.SQL.column("memberId"), memberId)
49
+ .fetch();
50
+ return models_1.MemberResponsibilityRecord.fromRows(rows, models_1.MemberResponsibilityRecord.table);
51
+ }
52
+ const otherResponsibilities = await getResponsibilities(other.id);
53
+ const baseResponsibilities = await getResponsibilities(base.id);
54
+ // Delete duplicate responsibilities where endDate is null -> keep responsibility with oldest start date
55
+ for (const otherResponsibility of otherResponsibilities) {
56
+ // check if equal responsibilities exist
57
+ const otherResponsibilitiesWithoutCurrent = otherResponsibilities.filter((o) => o.id !== otherResponsibility.id);
58
+ const equalResponsibilities = baseResponsibilities
59
+ .concat(otherResponsibilitiesWithoutCurrent)
60
+ .filter((baseResponsibility) => {
61
+ return (baseResponsibility.responsibilityId ===
62
+ otherResponsibility.responsibilityId &&
63
+ baseResponsibility.organizationId ===
64
+ otherResponsibility.organizationId &&
65
+ baseResponsibility.groupId ===
66
+ otherResponsibility.groupId &&
67
+ baseResponsibility.endDate === null &&
68
+ otherResponsibility.endDate === null);
69
+ });
70
+ if (equalResponsibilities.length > 0) {
71
+ const allEqualResponsibilities = [
72
+ ...equalResponsibilities,
73
+ otherResponsibility,
74
+ ]
75
+ // sort on startDate
76
+ .sort((a, b) => a.startDate.getTime() - b.startDate.getTime());
77
+ const responsibilityWithOldestStartDate = allEqualResponsibilities[0];
78
+ const responsibilitiesToDelete = allEqualResponsibilities.slice(1, undefined);
79
+ for (const responsibilityToDelete of responsibilitiesToDelete) {
80
+ const baseIndex = baseResponsibilities.indexOf(responsibilityToDelete);
81
+ if (baseIndex !== -1)
82
+ baseResponsibilities.splice(baseIndex, 1);
83
+ else {
84
+ const otherIndex = otherResponsibilities.indexOf(responsibilityToDelete);
85
+ if (otherIndex !== -1)
86
+ otherResponsibilities.splice(otherIndex, 1);
87
+ }
88
+ if (responsibilityToDelete.existsInDatabase) {
89
+ await responsibilityToDelete.delete();
90
+ }
91
+ }
92
+ if (responsibilityWithOldestStartDate.memberId !== base.id) {
93
+ responsibilityWithOldestStartDate.memberId = base.id;
94
+ await responsibilityWithOldestStartDate.save();
95
+ }
96
+ }
97
+ else {
98
+ otherResponsibility.memberId = base.id;
99
+ await otherResponsibility.save();
100
+ }
101
+ }
102
+ }
103
+ async function mergeBalanceItems(base, other) {
104
+ await mergeModels(base, other, models_1.BalanceItem);
105
+ }
106
+ async function mergeDocuments(base, other) {
107
+ await mergeModels(base, other, models_1.Document);
108
+ }
109
+ async function mergeMemberPlatformMemberships(base, other) {
110
+ await mergeModels(base, other, models_1.MemberPlatformMembership);
111
+ }
112
+ class ModelWithMemberId extends simple_database_1.Model {
113
+ }
114
+ async function mergeModels(base, other, model) {
115
+ const baseId = base.id;
116
+ const otherModels = await model.where({
117
+ memberId: other.id,
118
+ });
119
+ for (const otherModel of otherModels) {
120
+ otherModel.memberId = baseId;
121
+ await otherModel.save();
122
+ }
123
+ }
124
+ function mergeMemberDetails(base, other) {
125
+ const baseDetails = base.details;
126
+ const otherDetails = other.details;
127
+ // string details
128
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, "firstName");
129
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, "lastName");
130
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, "memberNumber");
131
+ mergeStringIfBaseNotSet(baseDetails, otherDetails, "uitpasNumber");
132
+ // email
133
+ mergeEmail(baseDetails, otherDetails, baseDetails.unverifiedEmails);
134
+ // phone
135
+ mergePhone(baseDetails, otherDetails, baseDetails);
136
+ // gender
137
+ if (baseDetails.gender === structures_1.Gender.Other) {
138
+ baseDetails.gender = otherDetails.gender;
139
+ }
140
+ // notes
141
+ mergeNotes(baseDetails, otherDetails);
142
+ // date
143
+ mergeIfBaseNotSet(baseDetails, otherDetails, "birthDay");
144
+ // boolean status
145
+ mergeBooleanStatusIfBaseNotSet(baseDetails, otherDetails, "requiresFinancialSupport");
146
+ mergeBooleanStatusIfBaseNotSet(baseDetails, otherDetails, "dataPermissions");
147
+ // address
148
+ mergeAddress(baseDetails, otherDetails, baseDetails);
149
+ // parents
150
+ mergeParents(baseDetails, otherDetails);
151
+ // emergency contacts
152
+ baseDetails.emergencyContacts = baseDetails.emergencyContacts.concat(
153
+ // add contacts that are not yet in the list
154
+ otherDetails.emergencyContacts.filter((otherContact) => !baseDetails.emergencyContacts.some((baseContact) => baseContact.isEqual(otherContact))));
155
+ // review times
156
+ // todo: is this correct?
157
+ baseDetails.reviewTimes.merge(otherDetails.reviewTimes);
158
+ // answers
159
+ mergeAnswers(baseDetails, otherDetails);
160
+ // unverified data
161
+ baseDetails.unverifiedEmails = utility_1.Formatter.uniqueArray(baseDetails.unverifiedEmails.concat(otherDetails.unverifiedEmails.filter((email) => !isNullOrEmpty(email))));
162
+ baseDetails.unverifiedPhones = utility_1.Formatter.uniqueArray(baseDetails.unverifiedPhones.concat(otherDetails.unverifiedPhones.filter((phone) => !isNullOrEmpty(phone))));
163
+ // unverified addresses
164
+ for (const address of otherDetails.unverifiedAddresses) {
165
+ if (!baseDetails.unverifiedAddresses.some((a) => a.id === address.id)) {
166
+ baseDetails.unverifiedAddresses.push(address);
167
+ }
168
+ }
169
+ }
170
+ exports.mergeMemberDetails = mergeMemberDetails;
171
+ function selectBaseMember(members) {
172
+ if (members.length < 2) {
173
+ throw Error("Members array length is less than 2.");
174
+ }
175
+ const sorted = members.sort((m1, m2) => m2.createdAt.getTime() - m1.createdAt.getTime());
176
+ return { base: sorted[0], others: sorted.slice(1, undefined) };
177
+ }
178
+ exports.selectBaseMember = selectBaseMember;
179
+ function mergeAnswers(base, other) {
180
+ const newAnswers = new Map(base.recordAnswers);
181
+ for (const otherAnswer of other.recordAnswers.values()) {
182
+ const otherId = otherAnswer.settings.id;
183
+ const baseAnswer = newAnswers.get(otherId);
184
+ if (!baseAnswer) {
185
+ newAnswers.set(otherId, otherAnswer);
186
+ }
187
+ else if (otherAnswer.date >= baseAnswer.date) {
188
+ newAnswers.set(otherId, otherAnswer);
189
+ }
190
+ else {
191
+ // keep existing, this one is more up-to-date, don't add the other answer
192
+ }
193
+ }
194
+ base.recordAnswers = newAnswers;
195
+ }
196
+ function mergeNotes(base, other) {
197
+ if (base.notes && other.notes) {
198
+ base.notes = `${base.notes}\n${other.notes}`;
199
+ }
200
+ else if (base.notes) {
201
+ return;
202
+ }
203
+ else {
204
+ base.notes = other.notes;
205
+ }
206
+ }
207
+ function mergeParents(base, other) {
208
+ const baseParents = base.parents;
209
+ const otherParents = other.parents;
210
+ const parentsToAdd = [];
211
+ for (const otherParent of otherParents) {
212
+ // equal if same first and last name
213
+ const equalBaseParent = baseParents.find((baseParent) => hasEqualStringValue(baseParent, otherParent, "firstName") &&
214
+ hasEqualStringValue(baseParent, otherParent, "lastName"));
215
+ if (!equalBaseParent) {
216
+ parentsToAdd.push(otherParent);
217
+ continue;
218
+ }
219
+ mergeParent(equalBaseParent, otherParent, base);
220
+ }
221
+ base.parents = baseParents.concat(parentsToAdd);
222
+ }
223
+ function mergeParent(base, other, baseDetails) {
224
+ if (base.type === structures_1.ParentType.Other) {
225
+ base.type = other.type;
226
+ }
227
+ mergeStringIfBaseNotSet(base, other, "firstName");
228
+ mergeStringIfBaseNotSet(base, other, "lastName");
229
+ // add other emails to alternative emails
230
+ mergeEmail(base, other, base.alternativeEmails);
231
+ mergePhone(base, other, baseDetails);
232
+ mergeAddress(base, other, baseDetails);
233
+ }
234
+ function mergeEmail(base, other, alternativeEmails) {
235
+ const isEmailMerged = mergeStringIfBaseNotSet(base, other, "email");
236
+ const otherEmail = other.email;
237
+ if (!isEmailMerged && !isNullOrEmpty(otherEmail)) {
238
+ if (!alternativeEmails.some((email) => email === otherEmail)) {
239
+ alternativeEmails.push(otherEmail);
240
+ }
241
+ }
242
+ }
243
+ function mergePhone(base, other, baseDetails) {
244
+ const isPhoneMerged = mergeStringIfBaseNotSet(base, other, "phone");
245
+ const otherPhone = other.phone;
246
+ if (!isPhoneMerged && !isNullOrEmpty(otherPhone)) {
247
+ if (!baseDetails.unverifiedPhones.some((phone) => phone === otherPhone)) {
248
+ baseDetails.unverifiedPhones.push(otherPhone);
249
+ }
250
+ }
251
+ }
252
+ function mergeAddress(base, other, baseDetails) {
253
+ const baseAddress = base.address;
254
+ const otherAddress = other.address;
255
+ if (!baseAddress) {
256
+ base.address = otherAddress;
257
+ }
258
+ else if (otherAddress && baseAddress.id !== otherAddress.id) {
259
+ // add other address to unverified addresses
260
+ if (!baseDetails.unverifiedAddresses.some((address) => address.id === otherAddress.id)) {
261
+ baseDetails.unverifiedAddresses.push(otherAddress);
262
+ }
263
+ }
264
+ }
265
+ function mergeStringIfBaseNotSet(base, other, key) {
266
+ const baseValue = base[key];
267
+ if (!isNullOrEmpty(baseValue)) {
268
+ return false;
269
+ }
270
+ const otherValue = other[key];
271
+ if (isNullOrEmpty(otherValue)) {
272
+ return false;
273
+ }
274
+ base[key] = otherValue;
275
+ return true;
276
+ }
277
+ function mergeIfBaseNotSet(base, other, key) {
278
+ const baseValue = base[key];
279
+ if (!(baseValue === null || baseValue === undefined))
280
+ return false;
281
+ const otherValue = other[key];
282
+ if (otherValue === null || otherValue === undefined)
283
+ return false;
284
+ base[key] = otherValue;
285
+ return true;
286
+ }
287
+ function mergeBooleanStatusIfBaseNotSet(base, other, key) {
288
+ const otherValue = other[key];
289
+ if (otherValue === null || otherValue === undefined)
290
+ return false;
291
+ const baseValue = base[key];
292
+ if (!(baseValue === null || baseValue === undefined)) {
293
+ if (baseValue.date < otherValue.date) {
294
+ base[key] = otherValue;
295
+ return true;
296
+ }
297
+ return false;
298
+ }
299
+ base[key] = otherValue;
300
+ return true;
301
+ }
302
+ /**
303
+ * Returns true if the values of the key for a and b
304
+ * are not null or undefined
305
+ * and both are equal.
306
+ * @param a
307
+ * @param b
308
+ * @param key
309
+ * @returns
310
+ */
311
+ function hasEqualStringValue(a, b, key) {
312
+ return hasValueAndIsEqual(a[key], b[key]);
313
+ }
314
+ function hasValueAndIsEqual(a, b) {
315
+ if (isNullOrEmpty(a) || isNullOrEmpty(b))
316
+ return false;
317
+ return isStringEqual(a, b);
318
+ }
319
+ function isStringEqual(a, b) {
320
+ return toLowerTrim(a) === toLowerTrim(b);
321
+ }
322
+ function toLowerTrim(name) {
323
+ return name.toLowerCase().trim();
324
+ }
325
+ function isNullOrEmpty(value) {
326
+ return value === null || value === undefined || value.trim() === "";
327
+ }
328
+ //# sourceMappingURL=MemberMerger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberMerger.js","sourceRoot":"","sources":["../../../src/helpers/MemberMerger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MemberMerger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberMerger.test.d.ts","sourceRoot":"","sources":["../../../src/helpers/MemberMerger.test.ts"],"names":[],"mappings":""}