-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprovider.js
More file actions
176 lines (143 loc) · 7.22 KB
/
provider.js
File metadata and controls
176 lines (143 loc) · 7.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
let utils = require('./utils');
let strValue = utils.stringValue;
let moveAllTableRecords = utils.moveAllTableRecords;
let beehive = global.beehive;
function prepareProviderInsert(rows, nextId) {
let insert = 'INSERT INTO provider(provider_id, person_id, name, identifier, ' +
'creator, date_created, changed_by, date_changed, retired, retired_by, ' +
'date_retired, retire_reason, uuid) VALUES ';
let toBeinserted = '';
rows.forEach(row => {
let currentPersonId = beehive.personMap.get(row['person_id']);
if(currentPersonId) {
if (toBeinserted.length > 1) {
toBeinserted += ',';
}
let retiredBy = row['retired_by'] === null ? null : beehive.userMap.get(row['retired_by']);
let changedBy = row['changed_by'] === null ? null : beehive.userMap.get(row['changed_by']);
beehive.providerMap.set(row['provider_id'], nextId);
toBeinserted += `(${nextId}, ${currentPersonId}, ` +
`${strValue(row['name'])}, ${strValue(row['identifier'])}, ` +
`${beehive.userMap.get(row['creator'])}, ` +
`${strValue(utils.formatDate(row['date_created']))}, ${changedBy}, ` +
`${strValue(utils.formatDate(row['date_changed']))}, ` +
`${row['retired']}, ${retiredBy}, ` +
`${strValue(utils.formatDate(row['date_retired']))}, ` +
`${strValue(row['retire_reason'])}, ${utils.uuid(row['uuid'])})`;
nextId++;
}
});
let query = null;
if(toBeinserted != '') query = insert + toBeinserted;
return [query, nextId];
}
function prepareProviderAttributeTypeInsert(rows, nextId) {
let insert = 'INSERT INTO provider_attribute_type(provider_attribute_type_id, ' +
'name, description, datatype, datatype_config, preferred_handler, ' +
'handler_config, min_occurs, max_occurs, creator, date_created, ' +
'changed_by, date_changed, retired, retired_by, date_retired, ' +
'retire_reason, uuid) VALUES ';
let toBeinserted = '';
rows.forEach(row => {
if (toBeinserted.length > 1) {
toBeinserted += ',';
}
let retiredBy = row['retired_by'] === null ? null : beehive.userMap.get(row['retired_by']);
let changedBy = row['changed_by'] === null ? null : beehive.userMap.get(row['changed_by']);
beehive.providerAttributeTypeMap.set(row['provider_attribute_type_id'], nextId);
toBeinserted += `(${nextId}, ${strValue(row['name'])}, ` +
`${strValue(row['description'])}, ${strValue(row['datatype'])}, ` +
`${strValue(row['datatype_config'])}, ${strValue(row['preferred_handler'])}, ` +
`${strValue(row['handler_config'])}, ${row['min_occurs']}, ${row['max_occurs']}` +
`${beehive.userMap.get(row['creator'])}, ` +
`${strValue(utils.formatDate(row['date_created']))}, ${changedBy}, ` +
`${strValue(utils.formatDate(row['date_changed']))}, ` +
`${row['retired']}, ${retiredBy}, ` +
`${strValue(utils.formatDate(row['date_retired']))}, ` +
`${strValue(row['retire_reason'])}, ${utils.uuid(row['uuid'])})`;
nextId++;
});
let query = insert + toBeinserted;
return [query, nextId];
}
function prepareProviderAttributeInsert(rows, nextId) {
let insert = 'INSERT INTO provider_attribute(provider_attribute_id, ' +
'provider_id, attribute_type_id, value_reference, creator, ' +
'date_created, changed_by, date_changed, voided, voided_by, ' +
'date_voided, void_reason, uuid) VALUES ';
let toBeinserted = '';
rows.forEach(row => {
if (toBeinserted.length > 1) {
toBeinserted += ',';
}
let voidedBy = row['voided_by'] === null ? null : beehive.userMap.get(row['voided_by']);
let changedBy = row['changed_by'] === null ? null : beehive.userMap.get(row['changed_by']);
toBeinserted += `(${nextId}, ${beehive.providerMap.get(row['provider_id'])}, ` +
`${beehive.providerAttributeTypeMap.get(row['attribute_type_id'])}, ` +
`${strValue(row['value_reference'])}, ` +
`${beehive.userMap.get(row['creator'])}, ` +
`${strValue(utils.formatDate(row['date_created']))}, ` +
`${changedBy}, ${strValue(utils.formatDate(row['date_changed']))}, ` +
`${row['voided']}, ${voidedBy}, ${strValue(utils.formatDate(row['date_voided']))}, ` +
`${strValue(row['void_reason'])}, ${utils.uuid(row['uuid'])})`
nextId++;
});
let insertStatement = insert + toBeinserted;
return [insertStatement, nextId];
}
async function consolidateProviderAttributeTypes(srcConn, destConn) {
let query = 'SELECT * FROM person_attribute_type';
let [srcProvAttTypes] = await srcConn.query(query);
let [destProvAttTypes] = await destConn.query(query);
let missingInDest = [];
srcProvAttTypes.forEach(srcProvAttType => {
let match = destProvAttTypes.find(destProvAttType => {
return srcProvAttType['name'] === destProvAttType['name'];
});
if (match !== undefined && match !== null) {
beehive.providerAttributeTypeMap.set(srcProvAttType['provider_attribute_type_id'],
match['provider_attribute_type_id']);
} else {
missingInDest.push(srcProvAttType);
}
});
if (missingInDest.length > 0) {
let nextProvAttTypeId =
await utils.getNextAutoIncrementId(destConn, 'provider_attribute_type');
let [sql] = prepareProviderAttributeTypeInsert(missingInDest, nextProvAttTypeId);
utils.logDebug('provider_attribute_type insert statement:\n', sql);
let [result] = await destConn.query(sql);
}
}
async function moveProviders(srcConn, destConn) {
return await moveAllTableRecords(srcConn, destConn, 'provider', 'provider_id',
prepareProviderInsert);
}
async function moveProviderAttributes(srcConn, destConn) {
return await moveAllTableRecords(srcConn, destConn, 'provider_attribute',
'provider_attribute_id', prepareProviderAttributeInsert);
}
async function main(srcConn, destConn) {
let srcProvCount = await utils.getCount(srcConn, 'provider');
let initialDestCount = await utils.getCount(destConn, 'provider');
utils.logInfo('Moving providers...');
let moved = await moveProviders(srcConn, destConn);
let finalDestCount = await utils.getCount(destConn, 'provider');
let expectedFinalCount = initialDestCount + moved;
if(expectedFinalCount === finalDestCount) {
utils.logOk(`Ok... ${moved} providers moved.`);
utils.logInfo('Consolidating provider attribute types...');
await consolidateProviderAttributeTypes(srcConn, destConn);
utils.logOk('Ok...');
utils.logInfo('Moving provider attributes...');
let movedAttributes = await moveProviderAttributes(srcConn, destConn);
utils.logOk(`Ok... ${movedAttributes} provider attributes moved.`);
}
else {
let error = `Problem moving providers: the actual final count ` +
`of ${finalDestCount} is not equal to the expected value ` +
`of ${expectedFinalCount}`;
throw new Error(error);
}
}
module.exports = main;