lms-sync 1.0.14 → 1.0.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,17 +32,96 @@ const server = {
32
32
  console.log("########################################################")
33
33
  console.log("");
34
34
 
35
+ let userDefPayload = {
36
+ email: 'ccci_integrator@gmail.com',
37
+ password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
38
+ temporaryPassword: 'P@ssw0rd123',
39
+ firstName: 'Androi',
40
+ lastName: 'Pamisaran',
41
+ };
42
+
43
+ let [userDefault, createdUser] = await Users.findOrCreate({
44
+ where: { email: userDefPayload.email },
45
+ defaults: userDefPayload
46
+ });
47
+
48
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
49
+
50
+ let semesterData = [
51
+ {
52
+ code: '1st Semester',
53
+ description: '1st Semester',
54
+ modifiedById: userMail._id,
55
+ createdById: userMail._id
56
+ },
57
+ {
58
+ code: '2nd Semester',
59
+ description: '2nd Semester',
60
+ modifiedById: userMail._id,
61
+ createdById: userMail._id
62
+ },
63
+ {
64
+ code: 'Summer',
65
+ description: 'Summer',
66
+ modifiedById: userMail._id,
67
+ createdById: userMail._id
68
+ },
69
+ {
70
+ code: 'School Year',
71
+ description: 'School Year',
72
+ modifiedById: userMail._id,
73
+ createdById: userMail._id
74
+ }
75
+ ]
76
+
77
+ for (let sem = 0; sem < semesterData.length; sem++) {
78
+ const semesters = semesterData[sem];
79
+
80
+ let semestersPayload = {
81
+ code: semesters.code,
82
+ description: semesters.description,
83
+ modifiedById: userMail._id,
84
+ createdById: userMail._id
85
+ }
86
+
87
+ let [semdefaults, semcreateddef] = await Semesters.findOrCreate({
88
+ where: { code: semestersPayload.code},
89
+ defaults: semestersPayload
90
+ });
91
+ }
92
+
35
93
  const campusApi = await api.Campus()
36
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
94
+
95
+ let campusDefPayload = {
96
+ name: 'Campus Default',
97
+ code: 'DEF',
98
+ email: 'campus_default@gmail.com',
99
+ address: 'MSC',
100
+ modifiedById: userMail._id,
101
+ createdById: userMail._id
102
+ };
103
+
104
+ let [defaults, createddef] = await Campuses.findOrCreate({
105
+ where: { name: campusDefPayload.name, code: campusDefPayload.code},
106
+ defaults: campusDefPayload
107
+ });
37
108
 
38
109
  let createdCounter = 0
39
110
  let errorCounter = 0
40
111
  let uniqueErrors = new Set()
41
112
 
42
113
  const db_schema = schema
43
- // let maxIds = await Campuses.max('_id'); = await Campuses.max('_id'); // Fetch maximum _id directly from the campuses model
44
- // let maxId = maxIds|| 0;
45
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Campuses__id_seq" RESTART WITH ${maxId + 1}`);
114
+ let maxIds = await Campuses.max('_id'); //Fetch maximum _id directly from the campuses model
115
+ let maxId = maxIds|| 0;
116
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Campuses__id_seq" RESTART WITH ${maxId + 1}`);
117
+
118
+ let uCode = new Set()
119
+ let uName = new Set()
120
+
121
+ let newCampus = []
122
+
123
+ const existingCampus = await Campuses.findAll()
124
+ const existingCampusMap = new Map(existingCampus.map(campus => [`[${campus.code}] - ${campus.name}`, campus]))
46
125
 
47
126
  for (let i = 0; i < campusApi.length; i++){
48
127
  try {
@@ -52,58 +131,80 @@ const server = {
52
131
  let modifiedById = userMail._id
53
132
  let createdById = userMail._id
54
133
 
55
- let [record, created] = await Campuses.findOrCreate({
56
- where:{
134
+ let name = _campus?.name
135
+ let code = _campus?.code
136
+
137
+ if(uCode.has(code) && uName.has(name)){
138
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
139
+ if(!uniqueErrors.has(errorMsg)){
140
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
141
+ uniqueErrors.add(errorMsg)
142
+ errorCounter++
143
+ }
144
+ }
145
+ else if ( existingCampusMap.has(`[${code}] - ${name}`)){
146
+ const existingCampus = existingCampusMap.get(`[${code}] - ${name}`)
147
+ const errorMsg = `Existing Data Found:[${existingCampus.code}] - ${existingCampus.name}`
148
+ if(!uniqueErrors.has(errorMsg)){
149
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
150
+ uniqueErrors.add(errorMsg)
151
+ errorCounter++
152
+ }
153
+ }
154
+ else{
155
+ uCode.add(code)
156
+ uName.add(name)
157
+ newCampus.push({
57
158
  name: _campus?.name,
58
- code: _campus?.code
59
- },
60
- defaults:{
159
+ code: _campus?.code,
61
160
  email: _campus?.email,
62
161
  address: _campus?.address,
63
162
  modifiedById,
64
- createdById
65
- }
66
- })
67
- if (created){
68
- logger.info(`New campus record created ${createdCounter + 1}/${createdCounter}: [${record.code}] - ${record.name} `)
69
- createdCounter++;
70
- }
71
- else {
72
- const errorMsg = `Record campus already exists: [${record.code}] - ${record.name} `;
73
- if (!uniqueErrors.has(errorMsg)) {
74
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
75
- uniqueErrors.add(errorMsg);
76
- errorCounter++;
77
- }
78
-
163
+ createdById,
164
+ // migratedAt,
165
+ // migratedTable,
166
+ // referenceId,
167
+ // isMigrated
168
+ })
79
169
  }
80
170
 
81
171
  } catch (error) {
82
- logger.error(`Error occurred: ${error}`);
83
- logger.error(`Error occurred: ${error.stack || error}`);
172
+ ;
173
+ logger.error(`Error occurred: ${error.stack} ${error}`);
84
174
  }
85
175
  }
86
176
 
177
+ // bulk create new campus records
178
+ if (newCampus.length > 0) {
179
+ await Campuses.bulkCreate(newCampus)
180
+ createdCounter += newCampus.length
181
+
182
+ newCampus.forEach((campus, index) => {
183
+ logger.info(`${index + 1}/${index + 1}: New Campus Record Created: [${campus.code}], ${campus.name}`)
184
+ });
185
+ }
186
+
87
187
  console.log("");
88
188
  console.log("########################################################")
89
189
  console.log("")
90
- logger.info(' Campus Data Migration Completed');
190
+ logger.info('Campus Data Migration Completed');
91
191
  logger.info(`Total successful Campus records created: ${createdCounter}/${createdCounter}`);
92
192
  logger.info(`Total Campus Error Records: ${errorCounter}/${errorCounter}`);
193
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
93
194
  console.log("")
94
195
  console.log("########################################################")
95
196
  console.log("")
96
197
 
97
198
  let totalSummary = {
98
- itemLength: campusApi.length,
199
+ itemLength: createdCounter + errorCounter,
99
200
  error: errorCounter,
100
201
  success: createdCounter
101
202
  }
102
203
  return totalSummary
103
204
 
104
205
  } catch (error) {
105
- logger.error(`Error occurred: ${error}`);
106
- logger.error(`Error occurred: ${error.stack || error}`);
206
+ ;
207
+ logger.error(`Error occurred: ${error.stack} ${error}`);
107
208
 
108
209
  }
109
210
  },
@@ -120,16 +221,43 @@ const server = {
120
221
  const campusApi = await api.Campus()
121
222
 
122
223
  const campusSeq = await Campuses.findAll()
123
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
224
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
225
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
226
+
227
+ let defaultPayload = {
228
+ name: 'Colleges Default',
229
+ code: 'DefCol',
230
+ campusId: campusDefault._id,
231
+ modifiedById: userMail._id,
232
+ createdById: userMail._id
233
+ };
234
+
235
+ let [defaults, createddef] = await Colleges.findOrCreate({
236
+ where: { name: defaultPayload.name, code: defaultPayload.code},
237
+ defaults: defaultPayload
238
+ });
124
239
 
125
240
  let createdCounter = 0
126
241
  let errorCounter = 0
127
242
  let uniqueErrors = new Set()
128
243
 
129
244
  const db_schema = schema
130
- // let maxIds = await Campuses.max('_id'); = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
131
- // let maxId = maxIds|| 0;
132
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Colleges__id_seq" RESTART WITH ${maxId + 1}`);
245
+ let maxIds = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
246
+ let maxId = maxIds|| 0;
247
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Colleges__id_seq" RESTART WITH ${maxId + 1}`);
248
+
249
+ // let migratedAt = new Date() //present date of the migration
250
+ // let migratedTable = 'colleges' // sql counterpart main table
251
+ // let referenceId = collegeApi.id // id of the data
252
+ // let isMigrated = true
253
+
254
+ let uCode = new Set()
255
+ let uName = new Set()
256
+
257
+ let newColleges = []
258
+
259
+ const existingCollege = await Colleges.findAll()
260
+ const existingCollegeMap = new Map(existingCollege.map(college => [`[${college.code}] - ${college.name}`, college]))
133
261
 
134
262
  for (let i = 0; i < collegeApi.length; i++){
135
263
  try {
@@ -138,64 +266,81 @@ const server = {
138
266
  let campusMap = campusApi.find(a => a.id === _college?.campus_id)
139
267
 
140
268
  let _campus = campusSeq.find(b => b.name === campusMap?.name)
141
-
142
- let campusDefault = 999999
143
269
 
144
270
  let modifiedById = userMail._id
145
271
  let createdById = userMail._id
146
272
 
147
- let [record, created] = await Colleges.findOrCreate({
148
-
149
- where:{
273
+ let name = _college?.name
274
+ let code = _college?.code
275
+
276
+ if(uCode.has(code) && uName.has(name)){
277
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
278
+ if(!uniqueErrors.has(errorMsg)){
279
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
280
+ uniqueErrors.add(errorMsg)
281
+ errorCounter++
282
+ }
283
+ }
284
+ else if ( existingCollegeMap.has(`[${code}] - ${name}`)){
285
+ const existingCollege = existingCollegeMap.get(`[${code}] - ${name}`)
286
+ const errorMsg = `Existing Data Found:[${existingCollege.code}] - ${existingCollege.name}`
287
+ if(!uniqueErrors.has(errorMsg)){
288
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
289
+ uniqueErrors.add(errorMsg)
290
+ errorCounter++
291
+ }
292
+ }
293
+ else{
294
+ uCode.add(code)
295
+ uName.add(name)
296
+ newColleges.push({
150
297
  name: _college?.name,
151
- code: _college?.code
152
- },
153
- defaults:{
154
- campusId: _campus?._id??campusDefault,
298
+ code: _college?.code,
299
+ campusId: _campus?._id??campusDefault?._id,
155
300
  modifiedById,
156
301
  createdById
157
- }
158
- })
159
- if (created){
160
- logger.info(`New college record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}] - ${record.name} `)
161
- createdCounter++;
162
- }
163
- else {
164
- const errorMsg = `Record college already exists: [${record.code}] - ${record.name} `
165
-
166
- if (!uniqueErrors.has(errorMsg)) {
167
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
168
- uniqueErrors.add(errorMsg);
169
- errorCounter++;
170
- }
302
+ })
171
303
  }
172
304
 
173
305
  } catch (error) {
174
- logger.error(`Error occurred: ${error}`);
175
- logger.error(`Error occurred: ${error.stack || error}`);
306
+ ;
307
+ logger.error(`Error occurred: ${error.stack} ${error}`);
176
308
  }
177
309
  }
178
310
 
311
+ // bulk create new campus records
312
+ if (newColleges.length > 0) {
313
+ await Colleges.bulkCreate(newColleges)
314
+ createdCounter += newColleges.length
315
+
316
+ newColleges.forEach((colleges, index) => {
317
+ logger.info(`${index + 1}/${index + 1}: New Colleges Record Created: [${colleges.code}], ${colleges.name}`)
318
+ });
319
+ }
320
+
321
+ let itemLength = createdCounter + errorCounter;
322
+
179
323
  console.log("");
180
324
  console.log("########################################################")
181
325
  console.log("")
182
- logger.info(' College Data Migration Completed');
326
+ logger.info('College Data Migration Completed');
183
327
  logger.info(`Total successful College records created: ${createdCounter}/${createdCounter}`);
184
328
  logger.info(`Total College Error Records: ${errorCounter}/${errorCounter}`);
329
+ logger.info(`Total records: ${itemLength}`)
185
330
  console.log("")
186
331
  console.log("########################################################")
187
332
  console.log("")
188
333
 
189
334
  let totalSummary = {
190
- itemLength: collegeApi.length,
335
+ itemLength: itemLength,
191
336
  error: errorCounter,
192
337
  success: createdCounter
193
338
  }
194
339
  return totalSummary
195
340
 
196
341
  } catch (error) {
197
- logger.error(`Error occurred: ${error}`);
198
- logger.error(`Error occurred: ${error.stack || error}`);
342
+ ;
343
+ logger.error(`Error occurred: ${error.stack} ${error}`);
199
344
 
200
345
  }
201
346
  },
@@ -211,340 +356,557 @@ const server = {
211
356
  const departmentApi = await api.Department()
212
357
  const campusApi = await api.Campus()
213
358
  const collegeApi = await api.College()
214
-
359
+ const instructorApi = await api.Instructor()
215
360
 
216
361
  const campusSeq = await Campuses.findAll()
217
362
  const collegeSeq = await Colleges.findAll()
218
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
363
+ const departmentSeq = await AcademicDepartments.findAll()
364
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
365
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
366
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
367
+
368
+ let defaultPayload = {
369
+ name: 'AcademicDepartments Default',
370
+ code: 'AcadDeptDef',
371
+ campusId: campusDefault._id,
372
+ collegeId: collegeDefault._id,
373
+ chairPersonId: 99999,
374
+ modifiedById: userMail._id,
375
+ createdById: userMail._id
376
+ };
377
+
378
+ let [defaults, createddef] = await AcademicDepartments.findOrCreate({
379
+ where: { name: defaultPayload.name, code: defaultPayload.code},
380
+ defaults: defaultPayload
381
+ });
219
382
 
220
383
  let createdCounter = 0
221
384
  let errorCounter = 0
222
385
  let uniqueErrors = new Set()
223
386
 
224
387
  const db_schema = schema
225
- // let maxIds = await Campuses.max('_id'); = await AcademicDepartments.max('_id'); // Fetch maximum _id directly from the AcademicDepartments model
226
- // let maxId = maxIds|| 0;
227
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartments__id_seq" RESTART WITH ${maxId + 1}`);
388
+ let maxIds = await AcademicDepartments.max('_id'); // Fetch maximum _id directly from the AcademicDepartments model
389
+ let maxId = maxIds|| 0;
390
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartments__id_seq" RESTART WITH ${maxId + 1}`);
391
+
392
+ let uCode = new Set()
393
+ let uName = new Set()
394
+ let newAcadDept = []
395
+ const exAcadDept = await AcademicDepartments.findAll()
396
+ const exAcadDeptMap = new Map(exAcadDept.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
397
+
398
+ let uCodeTwo = new Set()
399
+ let uNameTwo = new Set()
400
+ let newAcadDeptTwo = []
401
+ const exAcadDeptTwo = await AcademicDepartments.findAll()
402
+ const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
403
+
228
404
  for (let i = 0; i < departmentApi.length; i++){
229
405
  try {
230
406
  let _acadDept = departmentApi[i]
231
-
232
-
233
407
  let _college = collegeSeq.find( col => col.code === _acadDept?.code)
234
-
235
408
  let college = collegeApi.find( cols => cols.code === _acadDept?.code)
236
-
237
409
  let _campus = campusApi.find(cam => cam.id === college?.campus_id)
238
-
239
410
  let campus = campusSeq.find(camp => camp.code === _campus?.code)
240
-
241
- let campusDefault = 999999
242
- let collegeDefault = 999999
243
- let chairPersonDefault = 999999
411
+ let chairPersonDefault = 0
412
+ let modifiedById = userMail._id
413
+ let createdById = userMail._id
414
+ let name = _acadDept?.name
415
+ let code = _acadDept?.code
416
+
417
+ if(uCode.has(code) && uName.has(name)){
418
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
419
+ if(!uniqueErrors.has(errorMsg)){
420
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
421
+ uniqueErrors.add(errorMsg)
422
+ errorCounter++
423
+ }
424
+ }
425
+ else if ( exAcadDeptMap.has(`[${code}] - ${name}`)){
426
+ const exAcadDept = exAcadDeptMap.get(`[${code}] - ${name}`)
427
+ const errorMsg = `Existing Data Found:[${exAcadDept.code}] - ${exAcadDept.name}`
428
+ if(!uniqueErrors.has(errorMsg)){
429
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
430
+ uniqueErrors.add(errorMsg)
431
+ errorCounter++
432
+ }
433
+ }
434
+ else{
435
+ uCode.add(code)
436
+ uName.add(name)
437
+ newAcadDept.push({
438
+ name: _acadDept?.name,
439
+ code: _acadDept?.code,
440
+ collegeId: _college?._id??collegeDefault?._id,
441
+ campusId: campus?._id??campusDefault?._id,
442
+ modifiedById,
443
+ createdById
444
+ })
445
+ }
446
+ } catch (error) {
447
+ logger.error(`Error occurred: ${error.stack} ${error}`);
448
+ }
449
+ }
450
+ if (newAcadDept.length > 0) {
451
+ await AcademicDepartments.bulkCreate(newAcadDept)
452
+ createdCounter += newAcadDept.length
453
+
454
+ newAcadDept.forEach((dept, index) => {
455
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${dept.code}], ${dept.name}`)
456
+ });
457
+ }
244
458
 
459
+
460
+ //additional departments from instructors api
461
+ for (let j = 0; j < instructorApi.length; j++) {
462
+ try {
463
+ let instructor = instructorApi[j];
245
464
  let modifiedById = userMail._id
246
465
  let createdById = userMail._id
247
466
 
467
+ let acadDepartmentMap = departmentApi.find(a => a.name === instructor?.department_name)
248
468
 
249
- let [record, created] = await AcademicDepartments.findOrCreate({
469
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
250
470
 
251
- where:{
252
- name: _acadDept?.name,
253
- code: _acadDept?.code
254
- },
255
- defaults:{
256
- collegeId: _college?._id??collegeDefault,
257
- campusId: campus?._id??campusDefault,
258
- chairPersonId: chairPersonDefault,
259
- modifiedById,
260
- createdById
471
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
472
+
473
+ let campusDefault = "MSC - Boac Campus"
474
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
475
+
476
+ let code = instructor?.department_name ?? 'CODE'
477
+ code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
478
+
479
+ let name = instructor?.department_name
480
+
481
+ if(uCodeTwo.has(code) && uNameTwo.has(name)){
482
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
483
+ if(!uniqueErrors.has(errorMsg)){
484
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
485
+ uniqueErrors.add(errorMsg)
486
+ errorCounter++
487
+ }
488
+ }
489
+ else if ( exAcadDeptMapTwo.has(`[${code}] - ${name}`)){
490
+ const exAcadDeptTwo = exAcadDeptMapTwo.get(`[${code}] - ${name}`)
491
+ const errorMsg = `Existing Data Found:[${exAcadDeptTwo.code}] - ${exAcadDeptTwo.name}`
492
+ if(!uniqueErrors.has(errorMsg)){
493
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
494
+ uniqueErrors.add(errorMsg)
495
+ errorCounter++
261
496
  }
262
- })
263
- if (created){
264
- logger.info(`New academic department record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}] - ${record.name} `)
265
- createdCounter++;
266
497
  }
267
- else {
268
- const errorMsg = `Record academic department already exists: [${record.code}] - ${record.name} `
498
+ else{
499
+ uCodeTwo.add(code)
500
+ uNameTwo.add(name)
501
+ newAcadDeptTwo.push({
502
+ name: instructor?.department_name,
503
+ code: code,
504
+ modifiedById,
505
+ createdById,
506
+ campusId: campusMap?._id??_campusDefault?._id,
507
+ collegeId: collegeDefault?._id,
508
+
509
+ })
510
+ }
269
511
 
270
- if (!uniqueErrors.has(errorMsg)) {
271
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
272
- uniqueErrors.add(errorMsg);
273
- errorCounter++;
274
- }
275
512
 
276
- }
277
-
278
513
  } catch (error) {
279
- logger.error(`Error occurred: ${error}`);
280
- logger.error(`Error occurred: ${error.stack || error}`);
514
+ logger.error(`Error occurred: ${error} ${error.stack}`);
281
515
  }
282
516
  }
517
+ if (newAcadDeptTwo.length > 0) {
518
+ await AcademicDepartments.bulkCreate(newAcadDeptTwo)
519
+ createdCounter += newAcadDeptTwo.length
520
+
521
+ newAcadDeptTwo.forEach((deptTwo, index) => {
522
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${deptTwo.code}], ${deptTwo.name}`)
523
+ });
524
+ }
283
525
 
284
526
  console.log("");
285
527
  console.log("########################################################")
286
528
  console.log("")
287
- logger.info(' Academic Department Data Migration Completed');
529
+ logger.info('Academic Department Data Migration Completed');
288
530
  logger.info(`Total successful Academic Department records created: ${createdCounter}/${createdCounter}`);
289
531
  logger.info(`Total Academic Department Error Records: ${errorCounter}/${errorCounter}`);
532
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
290
533
  console.log("")
291
534
  console.log("########################################################")
292
535
  console.log("")
293
536
 
294
537
  let totalSummary = {
295
- itemLength: departmentApi.length,
538
+ itemLength: createdCounter + errorCounter,
296
539
  error: errorCounter,
297
540
  success: createdCounter
298
541
  }
299
542
  return totalSummary
300
543
 
301
544
  } catch (error) {
302
- logger.error(`Error occurred: ${error}`);
303
- logger.error(`Error occurred: ${error.stack || error}`);
304
-
545
+ logger.error(`Error occurred: ${error} ${error.stack}`);
546
+ logger.error(`Error occurredsss: ${error.stack}`);
305
547
  }
306
548
  },
307
549
 
308
- async Course(){
550
+ async Instructor(){
309
551
  try {
310
552
  console.log("");
311
553
  console.log("########################################################")
312
- console.log(" Courses Migration ")
554
+ console.log(" Instructors Migration ")
313
555
  console.log("########################################################")
314
556
  console.log("");
315
557
 
316
- const studentApi = (await api.Student()).data
317
-
318
- const courseApi = await api.Course()
319
- const collegeApi = await api.College()
558
+ const instructorApi = await api.Instructor()
320
559
  const departmentApi = await api.Department()
321
-
322
- const acadDeptSeq = await AcademicDepartments.findAll()
323
560
 
561
+ const departmentSeq = await AcademicDepartments.findAll()
324
562
  const campusSeq = await Campuses.findAll()
325
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
563
+ const instructorSeq = await Instructors.findAll()
564
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
565
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
566
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
567
+
568
+ let defaultPayload = {
569
+ firstName: 'Instructor',
570
+ lastName: 'Default',
571
+ middleName: 'Migration',
572
+ employeeNumber: '_Instructor',
573
+ departmentId: departmentDefault?._id,
574
+ campusId: campusDefault?._id,
575
+ modifiedById: userMail._id,
576
+ createdById: userMail._id
577
+ };
578
+
579
+ let [defaults, createddef] = await Instructors.findOrCreate({
580
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
581
+ defaults: defaultPayload
582
+ });
326
583
 
327
584
  let createdCounter = 0
328
585
  let errorCounter = 0
329
586
  let uniqueErrors = new Set()
330
587
 
588
+
331
589
  const db_schema = schema
332
- // let maxIds = await Campuses.max('_id'); = await Courses.max('_id'); // Fetch maximum _id directly from the Courses model
333
- // let maxId = maxIds|| 0;
334
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
590
+ let maxIds = await Instructors.max('_id'); //Fetch maximum _id directly from the Instructors model
591
+ let maxId = maxIds|| 0;
592
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxId + 1}`);
335
593
 
336
- for (let i = 0; i < studentApi.length; i++){
337
- try {
594
+ let uDept = new Set()
595
+ let uCamp = new Set()
596
+ let uLname = new Set()
597
+ let uMname = new Set()
598
+ let uFname = new Set()
599
+ let uNum = new Set()
338
600
 
339
- let course = studentApi[i]
340
- let courseCode = courseApi.find(crs => crs.name === course?.course)
341
- let campus = campusSeq.find(camp => camp.name === course?.campus)
601
+ let newInstructor = []
342
602
 
343
- let college = collegeApi.find(col => col.name === course?.college)
344
- let department = departmentApi.find(dep => dep.name === college?.name)
345
- let _department = acadDeptSeq.find(ad => ad.name === department?.name)
603
+ const exInst = await Instructors.findAll()
604
+ const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
346
605
 
606
+ for (let i = 0; i < instructorApi.length; i++){
607
+ try {
608
+ let _instructor = instructorApi[i]
347
609
 
610
+ let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
348
611
 
349
-
612
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
613
+
614
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
350
615
 
351
616
  let modifiedById = userMail._id
352
617
  let createdById = userMail._id
353
618
 
354
-
355
- let [record, created] = await Courses.findOrCreate({
356
- where:{
357
- name: course?.course,
358
- code: courseCode?.code,
359
- major: course?.major,
360
- campusId: campus?._id??null,
361
- departmentId: _department?._id??null,
362
- modifiedById,
363
- createdById
364
- },
365
- defaults:{
366
-
367
-
368
- }
369
- })
370
-
371
- if (created) {
372
- logger.info(`New course record created ${createdCounter +1}/${createdCounter +1}: [${record.code}] - ${record.name}, Major in ${record.major}`)
373
- createdCounter++
374
- } else {
619
+ let campusDefault = "MSC - Boac Campus"
620
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
375
621
 
376
- const errorMsg = `Record course already exists: [${record.code}] - ${record.name}, Major in ${record.major}`;
622
+ let role = _instructor?.role
377
623
 
378
- if (!uniqueErrors.has(errorMsg)) {
379
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
380
- uniqueErrors.add(errorMsg);
381
- errorCounter++;
624
+ let isChairPerson = false
625
+ let isDean = false
626
+
627
+ if(role === "Program Chair"){
628
+ isChairPerson = true
629
+ }
630
+ if(role === "Dean"){
631
+ isDean = true
632
+ }
633
+
634
+ let firstName = _instructor?.first_name
635
+ let lastName = _instructor?.last_name
636
+ let middleName = _instructor?.middle_name
637
+ let employeeNumber = _instructor?.faculty_id
638
+ let departmentId = _acadDepartment?._id??departmentDefault?._id
639
+ let campusId = campusMap?._id??_campusDefault?._id
640
+
641
+ if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
642
+ const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
643
+ if(!uniqueErrors.has(errorMsg)){
644
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
645
+ uniqueErrors.add(errorMsg)
646
+ errorCounter++
647
+ }
648
+ }
649
+ else if ( exInstMap.has(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)){
650
+ const exInst = exInstMap.get(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)
651
+ const errorMsg = `Existing Data Found:[${exInst.employeeNumber}] - ${exInst.lastName}, ${exInst.firstName} ${exInst.middleName} [departmentId: ${exInst.departmentId}, campusId: ${exInst.campusId}]`
652
+ if(!uniqueErrors.has(errorMsg)){
653
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
654
+ uniqueErrors.add(errorMsg)
655
+ errorCounter++
382
656
  }
383
-
657
+ }
658
+ else{
659
+ uNum.add(employeeNumber)
660
+ uLname.add(lastName)
661
+ uFname.add(firstName)
662
+ uMname.add(middleName)
663
+ uDept.add(departmentId)
664
+ uCamp.add(campusId)
665
+ newInstructor.push({
666
+ firstName: _instructor?.first_name,
667
+ lastName: _instructor?.last_name,
668
+ middleName: _instructor?.middle_name,
669
+ employeeNumber: _instructor?.faculty_id,
670
+ departmentId: _acadDepartment?._id??departmentDefault?._id,
671
+ academicDepartmentId: _acadDepartment?._id??departmentDefault?._id,
672
+ campusId: campusMap?._id??_campusDefault?._id??campusDefault?._id,
673
+ isDean,
674
+ isChairPerson,
675
+ modifiedById,
676
+ createdById,
677
+ })
384
678
  }
385
679
 
386
680
  } catch (error) {
387
- logger.error(`Error occurred: ${error}`);
388
- logger.error(`Error occurred: ${error.stack || error}`);
389
- }
681
+ logger.error(`Error occurred: ${error} ${error.stack}`);
682
+ }
683
+ }
684
+
685
+ if (newInstructor.length > 0) {
686
+
687
+ await Instructors.bulkCreate(newInstructor)
688
+ createdCounter += newInstructor.length
689
+
690
+ newInstructor.forEach((inst, index) => {
691
+ logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`)
692
+ });
693
+
390
694
  }
391
695
 
392
696
 
393
697
  console.log("");
394
698
  console.log("########################################################")
395
699
  console.log("")
396
- logger.info(' Course Data Migration Completed');
397
- logger.info(`Total successful Course records created: ${createdCounter}/${createdCounter}`);
398
- logger.info(`Total Course Error Records: ${errorCounter}/${errorCounter}`);
700
+ logger.info('Instructors Data Migration Completed');
701
+ logger.info(`Total successful Instructors records created: ${createdCounter}/${createdCounter}`);
702
+ logger.info(`Total Instructors Error Records: ${errorCounter}/${errorCounter}`);
703
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
704
+
399
705
  console.log("")
400
706
  console.log("########################################################")
401
707
  console.log("")
402
708
 
403
709
  let totalSummary = {
404
- itemLength: courseApi.length,
710
+ itemLength: createdCounter + errorCounter,
405
711
  error: errorCounter,
406
712
  success: createdCounter
407
713
  }
408
-
409
- uniqueErrors.clear();
410
-
411
714
  return totalSummary
412
-
715
+
413
716
  } catch (error) {
414
- logger.error(`Error occurred: ${error}`);
415
- logger.error(`Error occurred: ${error.stack || error}`);
717
+ ;
718
+ logger.error(`Error occurred: ${error} ${error.stack} `);
719
+
416
720
  }
417
721
  },
418
722
 
419
- async Room(){
723
+ async Course(){
420
724
  try {
421
725
  console.log("");
422
726
  console.log("########################################################")
423
- console.log(" Rooms Migration ")
727
+ console.log(" Courses Migration ")
424
728
  console.log("########################################################")
425
729
  console.log("");
426
730
 
427
- const subjectRoom = await api.Subject()
428
- const roomApi = await api.Room()
731
+ const studentApi = (await api.Student()).data
732
+
733
+ const courseApi = await api.Course()
734
+ const collegeApi = await api.College()
735
+ const departmentApi = await api.Department()
736
+
737
+ const acadDeptSeq = await AcademicDepartments.findAll()
429
738
 
430
- const subjectSeq = await Subjects.findAll()
431
739
  const campusSeq = await Campuses.findAll()
432
- const departmentSeq = await AcademicDepartments.findAll()
740
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
741
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
742
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
743
+
744
+ let defaultPayload = {
745
+ name: 'Course Default',
746
+ code: 'CORDEF',
747
+ major: 'Major Course',
748
+ campusId: campusDefault._id,
749
+ departmentId: departmentDefault._id,
750
+ modifiedById: userMail._id,
751
+ createdById: userMail._id
752
+ };
753
+
754
+ let [defaults, createddef] = await Courses.findOrCreate({
755
+ where: { name: defaultPayload.name, code: defaultPayload.code},
756
+ defaults: defaultPayload
757
+ });
433
758
 
434
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
435
759
 
436
760
  let createdCounter = 0
437
761
  let errorCounter = 0
438
762
  let uniqueErrors = new Set()
439
763
 
440
-
441
764
  const db_schema = schema
442
- // let maxIds = await Campuses.max('_id'); = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
443
- // let maxId = maxIds|| 0;
444
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
765
+ let maxIds = await Courses.max('_id'); //Fetch maximum _id directly from the Courses model
766
+ let maxId = maxIds|| 0;
767
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
445
768
 
446
769
 
447
- for (let i = 0; i < roomApi.length; i++){
448
- try {
449
- let _room = roomApi[i]
450
-
451
- let _subject = subjectRoom.find(r => r.room_id === _room?.id)
452
- // console.log('_subject :>> ', _subject);
453
-
454
- let _subjects = subjectSeq.find(s => s.name === _subject?.name)
455
- // console.log('_subjects :>> ', _subjects);
770
+ let uCode = new Set()
771
+ let uName = new Set()
772
+ let uMajor = new Set()
773
+ let uCampus = new Set()
774
+ let uDept = new Set()
456
775
 
776
+ let newCourse = []
457
777
 
458
- let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
459
- // console.log('_department :>> ', _department);
460
-
461
-
462
- let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
463
- // console.log('_campus :>> ', _campus);
464
-
465
-
466
- let capacity = 50
778
+ const exCourse = await Courses.findAll()
779
+ const exCourseMap = new Map(exCourse.map(course => [`[${course.code}] - ${course.name}, ${course.major} [${course.campusId}, ${course.departmentId}]`, course]))
780
+
467
781
 
468
- let campusDefault = "MSC - Boac Campus"
782
+ for (let i = 0; i < studentApi.length; i++){
783
+ try {
469
784
 
470
- let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
785
+ let course = studentApi[i]
786
+ let courseCode = courseApi.find(crs => crs.name === course?.course)
787
+ let campus = campusSeq.find(camp => camp.name === course?.campus)
471
788
 
472
- // return console.log('campusDefault :>> ', campusDefault);
789
+ let college = collegeApi.find(col => col.name === course?.college)
790
+ let department = departmentApi.find(dep => dep.name === college?.name)
791
+ let _department = acadDeptSeq.find(ad => ad.name === department?.name)
473
792
 
474
793
  let modifiedById = userMail._id
475
794
  let createdById = userMail._id
476
795
 
477
- let [record, created] = await Rooms.findOrCreate({
478
- where:{
479
- name: _room?.name,
480
- campusId: _campus?._id??_campusDefault?._id??null,
481
- },
482
- defaults:{
483
- capacity,
484
- modifiedById,
485
- createdById
796
+ let name = course?.course
797
+ let code = courseCode?.code
798
+ let major = course?.major
799
+ let campusId = campus?._id??null
800
+ let departmentId = _department?._id??null
486
801
 
487
- }
488
- })
489
- if (created){
490
- logger.info(`New room record created ${createdCounter + 1}/${createdCounter + 1}: ${record.name} `)
491
- createdCounter++;
492
- }
493
- else {
494
- const errorMsg = `Record room already exists: ${record.name}`;
495
802
 
496
- if (!uniqueErrors.has(errorMsg)) {
497
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
498
- uniqueErrors.add(errorMsg);
499
- errorCounter++;
500
- }
501
803
 
502
- }
804
+ if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
805
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}, ${major} [campusId: ${campusId}, academicDepartmentId: ${departmentId}]`
806
+ if(!uniqueErrors.has(errorMsg)){
807
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
808
+ uniqueErrors.add(errorMsg)
809
+ errorCounter++
810
+ }
811
+ }
812
+ else if ( exCourseMap.has(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)){
813
+ const exCourse = exCourseMap.get(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)
814
+ const errorMsg = `Existing Data Found: [${exCourse.code}] - ${exCourse.name}, ${exCourse.major} [campusId: ${exCourse.campusId}, academicDepartmentId: ${exCourse.departmentId}]`
815
+ if(!uniqueErrors.has(errorMsg)){
816
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
817
+ uniqueErrors.add(errorMsg)
818
+ errorCounter++
819
+ }
820
+ }
821
+ else{
822
+ uCode.add(code)
823
+ uName.add(name)
824
+ uMajor.add(major)
825
+ uCampus.add(campusId)
826
+ uDept.add(departmentId)
827
+ newCourse.push({
828
+ name: course?.course,
829
+ code: courseCode?.code,
830
+ major: course?.major,
831
+ campusId: campus?._id??campusDefault?._id,
832
+ departmentId: _department?._id??departmentDefault?._id,
833
+ modifiedById,
834
+ createdById
835
+ })
836
+ }
503
837
 
504
838
  } catch (error) {
505
- logger.error(`Error occurred: ${error}`);
506
- logger.error(`Error occurred: ${error.stack || error}`);
839
+ ;
840
+ logger.error(`Error occurred: ${error.stack} ${error}`);
507
841
  }
508
842
  }
509
843
 
844
+ if (newCourse.length > 0) {
845
+ await Courses.bulkCreate(newCourse)
846
+ createdCounter += newCourse.length
847
+
848
+ newCourse.forEach((course, index) => {
849
+ logger.info(`${index + 1}/${index + 1}: New Courses Record Created: [${course.code}] - ${course.name}, ${course.major} [courseId: ${course.campusId}, academicDepartmentId: ${course.departmentId}]`)
850
+ });
851
+ }
852
+
853
+
510
854
  console.log("");
511
855
  console.log("########################################################")
512
856
  console.log("")
513
- logger.info(' Room Data Migration Completed');
514
- logger.info(`Total successful Room records created: ${createdCounter}/${createdCounter}`);
515
- logger.info(`Total Room Error Records: ${errorCounter}/${errorCounter}`);
857
+ logger.info('Course Data Migration Completed');
858
+ logger.info(`Total successful Course records created: ${createdCounter}/${createdCounter}`);
859
+ logger.info(`Total Course Error Records: ${errorCounter}/${errorCounter}`);
516
860
  console.log("")
517
861
  console.log("########################################################")
518
862
  console.log("")
519
863
 
520
864
  let totalSummary = {
521
- itemLength: roomApi.length,
865
+ itemLength: courseApi.length,
522
866
  error: errorCounter,
523
867
  success: createdCounter
524
868
  }
525
- return totalSummary
526
869
 
527
- } catch (error) {
528
- logger.error(`Error occurred: ${error}`);
529
- logger.error(`Error occurred: ${error.stack || error}`);
870
+ uniqueErrors.clear();
871
+
872
+ return totalSummary
530
873
 
874
+ } catch (error) {
875
+ ;
876
+ logger.error(`Error occurred: ${error.stack} ${error}`);
531
877
  }
532
878
  },
533
879
 
534
- async Instructor(){
880
+ async Room(){
535
881
  try {
536
882
  console.log("");
537
883
  console.log("########################################################")
538
- console.log(" Instructors Migration ")
884
+ console.log(" Rooms Migration ")
539
885
  console.log("########################################################")
540
886
  console.log("");
541
887
 
542
- const instructorApi = await api.Instructor()
543
- const departmentApi = await api.Department()
888
+ const subjectRoom = await api.Subject()
889
+ const roomApi = await api.Room()
544
890
 
545
- const departmentSeq = await AcademicDepartments.findAll()
891
+ const subjectSeq = await Subjects.findAll()
546
892
  const campusSeq = await Campuses.findAll()
547
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
893
+ const departmentSeq = await AcademicDepartments.findAll()
894
+
895
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
896
+ const campusesDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
897
+
898
+ let defaultPayload = {
899
+ name: 'Rooms Default',
900
+ campusId: campusesDefault._id,
901
+ capacity: 40,
902
+ modifiedById: userMail._id,
903
+ createdById: userMail._id
904
+ };
905
+
906
+ let [defaults, createddef] = await Rooms.findOrCreate({
907
+ where: { name: defaultPayload.name},
908
+ defaults: defaultPayload
909
+ });
548
910
 
549
911
  let createdCounter = 0
550
912
  let errorCounter = 0
@@ -552,89 +914,104 @@ const server = {
552
914
 
553
915
 
554
916
  const db_schema = schema
555
- // let maxIds = await Campuses.max('_id'); = await Instructors.max('_id'); // Fetch maximum _id directly from the Instructors model
556
- // let maxId = maxIds|| 0;
557
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxId + 1}`);
558
-
559
-
560
- for (let i = 0; i < instructorApi.length; i++){
561
- try {
562
- let _instructor = instructorApi[i]
563
-
564
- let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
917
+ let maxIds = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
918
+ let maxId = maxIds|| 0;
919
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
565
920
 
566
- let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
921
+ let uName = new Set()
922
+ let uCampus = new Set()
567
923
 
568
- let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
924
+ let newRoom = []
569
925
 
570
- let academicDepartmentDefault = 999999
926
+ const exRoom = await Rooms.findAll()
927
+ const exRoomMap = new Map(exRoom.map(room => [`[${room.name}] - ${room.campusId}`, room]))
928
+
571
929
 
572
- let modifiedById = userMail._id
573
- let createdById = userMail._id
574
-
930
+ for (let i = 0; i < roomApi.length; i++){
931
+ try {
932
+ let _room = roomApi[i]
933
+
934
+ let _subject = subjectRoom.find(r => r.room_id === _room?.id)
935
+ let _subjects = subjectSeq.find(s => s.name === _subject?.name)
936
+ let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
937
+ let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
575
938
 
939
+ let capacity = 50
576
940
  let campusDefault = "MSC - Boac Campus"
577
941
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
578
942
 
579
- let [record, created] = await Instructors.findOrCreate({
580
- where:{
581
- firstName: _instructor?.first_name,
582
- lastName: _instructor?.last_name,
583
- middleName: _instructor?.middle_name,
584
- employeeNumber: _instructor?.faculty_id,
585
- departmentId: _acadDepartment?._id??academicDepartmentDefault,
586
- campusId: campusMap?._id??_campusDefault?._id,
587
- modifiedById,
588
- createdById,
589
- // employeeId: record?._id??null,
943
+ // return console.log('campusDefault :>> ', campusDefault);
590
944
 
945
+ let modifiedById = userMail._id
946
+ let createdById = userMail._id
591
947
 
592
- },
593
- defaults:{
948
+ let name = _room?.name
949
+ let campusId = _campus?._id??_campusDefault?._id??null
594
950
 
595
- }
596
- })
597
- if (created){
598
- logger.info(`New instructor record created ${createdCounter + 1}/${createdCounter + 1}: [${record.employeeNumber}] - ${record.lastName}, ${record.firstName} `)
599
- createdCounter++;
951
+ if(uName.has(name) && uCampus.has(campusId)){
952
+ const errorMsg = `Duplicate Payload Found: [${name}] - campusId: ${campusId}`
953
+ if(!uniqueErrors.has(errorMsg)){
954
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
955
+ uniqueErrors.add(errorMsg)
956
+ errorCounter++
957
+ }
600
958
  }
601
- else {
602
- const errorMsg = `Record instructor already exists: [${record.employeeNumber}] - ${record.lastName}, ${record.firstName}`;
603
-
604
- if (!uniqueErrors.has(errorMsg)) {
605
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
606
- uniqueErrors.add(errorMsg);
607
- errorCounter++;
959
+ else if ( exRoomMap.has(`[${name}] - ${campusId}`)){
960
+ const exRoom = exRoomMap.get(`[${name}] - ${campusId}`)
961
+ const errorMsg = `Existing Data Found:[${exRoom.name}] - campusId: ${exRoom.campusId}`
962
+ if(!uniqueErrors.has(errorMsg)){
963
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
964
+ uniqueErrors.add(errorMsg)
965
+ errorCounter++
608
966
  }
609
-
967
+ }
968
+ else{
969
+ uName.add(name)
970
+ uCampus.add(campusId)
971
+ newRoom.push({
972
+ name: _room?.name,
973
+ campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
974
+ capacity,
975
+ modifiedById,
976
+ createdById
977
+ })
610
978
  }
611
979
 
612
980
  } catch (error) {
613
- logger.error(`Error occurred: ${error}`);
614
- logger.error(`Error occurred: ${error.stack || error}`);
981
+ ;
982
+ logger.error(`Error occurred: ${error.stack} ${error}`);
615
983
  }
616
984
  }
617
985
 
986
+ if (newRoom.length > 0) {
987
+ await Rooms.bulkCreate(newRoom)
988
+ createdCounter += newRoom.length
989
+
990
+ newRoom.forEach((room, index) => {
991
+ logger.info(`${index + 1}/${index + 1}: New Rooms Record Created: [${room.name}], campusId: ${room.campusId}`)
992
+ });
993
+ }
994
+
618
995
  console.log("");
619
996
  console.log("########################################################")
620
997
  console.log("")
621
- logger.info(' Instructors Data Migration Completed');
622
- logger.info(`Total successful Instructors records created: ${createdCounter}/${createdCounter}`);
623
- logger.info(`Total Instructors Error Records: ${errorCounter}/${errorCounter}`);
998
+ logger.info('Room Data Migration Completed');
999
+ logger.info(`Total successful Room records created: ${createdCounter}/${createdCounter}`);
1000
+ logger.info(`Total Room Error Records: ${errorCounter}/${errorCounter}`);
1001
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
624
1002
  console.log("")
625
1003
  console.log("########################################################")
626
1004
  console.log("")
627
1005
 
628
1006
  let totalSummary = {
629
- itemLength: instructorApi.length,
1007
+ itemLength: createdCounter + errorCounter,
630
1008
  error: errorCounter,
631
1009
  success: createdCounter
632
1010
  }
633
1011
  return totalSummary
634
1012
 
635
1013
  } catch (error) {
636
- logger.error(`Error occurred: ${error}`);
637
- logger.error(`Error occurred: ${error.stack || error}`);
1014
+ logger.error(`Error occurred: ${error.stack} ${error}`);
638
1015
 
639
1016
  }
640
1017
  },
@@ -656,12 +1033,19 @@ const server = {
656
1033
 
657
1034
  const { acadYearResult, currentSchoolYear } = acadYearApi;
658
1035
 
659
-
660
1036
  const db_schema = schema
661
- // let maxIds = await Campuses.max('_id'); = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
662
- // let maxId = maxIds|| 0;
663
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicYears__id_seq" RESTART WITH ${maxId + 1}`);
1037
+ let maxIds = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
1038
+ let maxId = maxIds|| 0;
1039
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicYears__id_seq" RESTART WITH ${maxId + 1}`);
1040
+
1041
+ let uFrom = new Set()
1042
+ let uTo = new Set()
664
1043
 
1044
+ let newYears = []
1045
+
1046
+ const exYear = await AcademicYears.findAll()
1047
+ const exYearMap = new Map(exYear.map(year => [`[${year.from} - ${year.to}]`, year]))
1048
+
665
1049
 
666
1050
  for (let i = 0; i < acadYearResult.length; i++){
667
1051
  try {
@@ -683,56 +1067,72 @@ const server = {
683
1067
  let modifiedById = userMail._id
684
1068
  let createdById = userMail._id
685
1069
 
686
- let [record, created] = await AcademicYears.findOrCreate({
687
- where:{
1070
+
1071
+ if(uFrom.has(from) && uTo.has(to)){
1072
+ const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
1073
+ if(!uniqueErrors.has(errorMsg)){
1074
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1075
+ uniqueErrors.add(errorMsg)
1076
+ errorCounter++
1077
+ }
1078
+ }
1079
+ else if ( exYearMap.has(`[${from} - ${to}]`)){
1080
+ const exYear = exYearMap.get(`[${from} - ${to}]`)
1081
+ const errorMsg = `Existing Data Found:[${exYear.from} - ${exYear.to}]`
1082
+ if(!uniqueErrors.has(errorMsg)){
1083
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1084
+ uniqueErrors.add(errorMsg)
1085
+ errorCounter++
1086
+ }
1087
+ }
1088
+ else{
1089
+ uFrom.add(from)
1090
+ uTo.add(to)
1091
+ newYears.push({
688
1092
  from,
689
- to
690
- },
691
- defaults:{
1093
+ to,
692
1094
  modifiedById,
693
1095
  createdById,
694
1096
  default: isDefault
695
- }
696
- })
697
- if (created){
698
- logger.info(`New academic year record created ${createdCounter + 1}/${createdCounter + 1}: ${record.from} - ${record.to} `)
699
- createdCounter++;
700
- }
701
- else {
702
- const errorMsg = `Record academic year already exists: ${record.from} - ${record.to}`;
703
- if (!uniqueErrors.has(errorMsg)) {
704
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
705
- uniqueErrors.add(errorMsg);
706
- errorCounter++;
707
- }
1097
+ })
708
1098
  }
709
1099
 
710
1100
  } catch (error) {
711
- logger.error(`Error occurred: ${error}`);
712
- logger.error(`Error occurred: ${error.stack || error}`);
1101
+ ;
1102
+ logger.error(`Error occurred: ${error.stack} ${error}`);
713
1103
  }
714
1104
  }
715
1105
 
1106
+ if (newYears.length > 0) {
1107
+ await AcademicYears.bulkCreate(newYears)
1108
+ createdCounter += newYears.length
1109
+
1110
+ newYears.forEach((year, index) => {
1111
+ logger.info(`${index + 1}/${index + 1}: New Academic Years Record Created: [${year.from} - ${year.to}]`)
1112
+ });
1113
+ }
1114
+
716
1115
  console.log("");
717
1116
  console.log("########################################################")
718
1117
  console.log("")
719
- logger.info(' Academic Years Data Migration Completed');
1118
+ logger.info('Academic Years Data Migration Completed');
720
1119
  logger.info(`Total successful Academic Years records created: ${createdCounter}/${createdCounter}`);
721
1120
  logger.info(`Total Academic Years Error Records: ${errorCounter}/${errorCounter}`);
1121
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
722
1122
  console.log("")
723
1123
  console.log("########################################################")
724
1124
  console.log("")
725
1125
 
726
1126
  let totalSummary = {
727
- itemLength: acadYearResult.length,
1127
+ itemLength: createdCounter + errorCounter,
728
1128
  error: errorCounter,
729
1129
  success: createdCounter
730
1130
  }
731
1131
  return totalSummary
732
1132
 
733
1133
  } catch (error) {
734
- logger.error(`Error occurred: ${error}`);
735
- logger.error(`Error occurred: ${error.stack || error}`);
1134
+ ;
1135
+ logger.error(`Error occurred: ${error.stack} ${error}`);
736
1136
 
737
1137
  }
738
1138
  },
@@ -750,19 +1150,45 @@ const server = {
750
1150
  const subjectApi = await api.Subject()
751
1151
 
752
1152
  const departmentSeq = await AcademicDepartments.findAll()
753
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
754
-
1153
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1154
+
1155
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
1156
+
1157
+ let defaultPayload = {
1158
+ code:'Sub Def',
1159
+ name:'Subject Default',
1160
+ units:3,
1161
+ departmentId: departmentDefault?._id??null,
1162
+ subjectType: "LECTURE",
1163
+ modifiedById: userMail._id,
1164
+ createdById: userMail._id
1165
+ };
1166
+
1167
+ let [defaults, createddef] = await Subjects.findOrCreate({
1168
+ where: { name: defaultPayload.name, code: defaultPayload.code},
1169
+ defaults: defaultPayload
1170
+ });
1171
+
755
1172
  let createdCounter = 0
756
1173
  let errorCounter = 0
757
1174
  let uniqueErrors = new Set()
758
1175
 
759
-
760
1176
  const db_schema = schema
761
- // let maxIds = await Campuses.max('_id'); = await Subjects.max('_id'); // Fetch maximum _id directly from the Subjects model
762
- // let maxId = maxIds|| 0;
763
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Subjects__id_seq" RESTART WITH ${maxId + 1}`);
1177
+ let maxIds = await Subjects.max('_id'); // Fetch maximum _id directly from the Subjects model
1178
+ let maxId = maxIds|| 0;
1179
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Subjects__id_seq" RESTART WITH ${maxId + 1}`);
764
1180
 
1181
+ let uCode = new Set()
1182
+ let uName = new Set()
1183
+ let uUnits = new Set()
1184
+ let uDept = new Set()
1185
+ let uDescription = new Set()
765
1186
 
1187
+ let newSubject = []
1188
+
1189
+ const exSubj = await Subjects.findAll()
1190
+ const exSubjMap = new Map(exSubj.map(subj => [`[${subj.code}] - ${subj.name} ${subj.description} [${subj.units}, ${subj.departmentId}]`, subj]))
1191
+
766
1192
  for (let i = 0; i < studentSubject.length; i++){
767
1193
  try {
768
1194
  let _subject = studentSubject[i]
@@ -771,71 +1197,90 @@ const server = {
771
1197
 
772
1198
  let _subs = studentSubject[i].subjects_enrolled;
773
1199
 
774
-
775
1200
  for (let j = 0; j < _subs.length; j++){
776
1201
 
777
1202
  let subject = _subs[j].subject_code
1203
+ let _description = _subs[j]. subject_description
778
1204
 
779
1205
  let _subjects = subjectApi.find(sub => sub.code === subject)
780
1206
 
781
- // return console.log('_subjects :>> ', _subjects);
782
-
783
-
784
1207
  if (!subject) {
785
- // console.error(`Subject with code ${subjects} not found.`);
786
1208
  continue;
787
1209
  }
788
1210
  if (!_subjects) {
789
- // console.error(`Subject with code ${subjects} not found.`);
790
1211
  continue;
791
1212
  }
792
1213
  let subjectType = "LECTURE"
793
1214
  let modifiedById = userMail._id
794
1215
  let createdById = userMail._id
795
1216
 
796
-
797
-
798
- let [record, created] = await Subjects.findOrCreate({
799
- where:{
1217
+ let code =_subjects?.code
1218
+ let name =_subjects?.name
1219
+ let units =_subjects?.units
1220
+ let departmentId = _department?._id??departmentDefault?._id
1221
+ let description = _description
1222
+
1223
+ if(uCode.has(code) && uName.has(name) && uDescription.has(description) && uUnits.has(units) && uDept.has(departmentId)){
1224
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [units: ${units}, departmentId: ${departmentId}]`
1225
+ if(!uniqueErrors.has(errorMsg)){
1226
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1227
+ uniqueErrors.add(errorMsg)
1228
+ errorCounter++
1229
+ }
1230
+ }
1231
+ else if ( exSubjMap.has(`[${code}] - ${name} ${description} [${units}, ${departmentId}]`)){
1232
+ const exSubj = exSubjMap.get(`[${code}] - ${name} ${description} [${units}, ${departmentId}]`)
1233
+ const errorMsg = `Existing Data Found: [${exSubj.code}] - ${exSubj.name} [units: ${exSubj.units}, departmentId: ${exSubj.departmentId}]`
1234
+ if(!uniqueErrors.has(errorMsg)){
1235
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1236
+ uniqueErrors.add(errorMsg)
1237
+ errorCounter++
1238
+ }
1239
+ }
1240
+ else{
1241
+ uCode.add(code)
1242
+ uName.add(name)
1243
+ uUnits.add(units)
1244
+ uDept.add(departmentId)
1245
+ uDescription.add(description)
1246
+ newSubject.push({
800
1247
  code:_subjects?.code,
801
- name:_subjects?.name,
802
- units:_subjects?.units,
803
- //add null here
804
- departmentId: _department?._id??null,
805
- subjectType,
1248
+ name:_subjects?.name,
1249
+ units:_subjects?.units,
1250
+ departmentId: _department?._id??departmentDefault?._id,
1251
+ subjectType,
1252
+ description,
806
1253
  modifiedById,
807
- createdById
808
- },
809
- defaults:{
810
-
811
- }
812
- })
813
- if (created){
814
- logger.info(`New subject record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}], ${record.name} `)
815
- createdCounter++;
1254
+ createdById,
1255
+ // migratedAt,
1256
+ // migratedTable,
1257
+ // referenceId,
1258
+ // isMigrated
1259
+ })
816
1260
  }
817
- else {
818
- const errorMsg = `Record subject already exists: [${record.code}], ${record.name}`;
819
1261
 
820
- if (!uniqueErrors.has(errorMsg)) {
821
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
822
- uniqueErrors.add(errorMsg);
823
- errorCounter++;
824
- }
825
- }
826
1262
  }
827
1263
 
828
1264
 
829
1265
  } catch (error) {
830
- logger.error(`Error occurred: ${error}`);
831
- logger.error(`Error occurred: ${error.stack || error}`);
1266
+ ;
1267
+ logger.error(`Error occurred: ${error.stack} ${error}`);
832
1268
  }
833
1269
  }
834
1270
 
1271
+ if (newSubject.length > 0) {
1272
+ await Subjects.bulkCreate(newSubject)
1273
+ createdCounter += newSubject.length
1274
+
1275
+ newSubject.forEach((subj, index) => {
1276
+ logger.info(`${index + 1}/${index + 1}: New Subject Record Created: [${subj.code}] - ${subj.name} [units: ${subj.units}, departmentId: ${subj.departmentId}]`)
1277
+ });
1278
+ }
1279
+
835
1280
  console.log("");
836
1281
  console.log("########################################################")
837
1282
  console.log("")
838
- logger.info(' Subjects Data Migration Completed');
1283
+ logger.info('Subjects Data Migration Completed');
839
1284
  logger.info(`Total successful Subjects records created: ${createdCounter}/${createdCounter}`);
840
1285
  logger.info(`Total Subjects Error Records: ${errorCounter}/${errorCounter}`);
841
1286
  console.log("")
@@ -850,8 +1295,8 @@ const server = {
850
1295
  return totalSummary
851
1296
 
852
1297
  } catch (error) {
853
- logger.error(`Error occurred: ${error}`);
854
- logger.error(`Error occurred: ${error.stack || error}`);
1298
+ ;
1299
+ logger.error(`Error occurred: ${error.stack} ${error}`);
855
1300
 
856
1301
  }
857
1302
  },
@@ -873,9 +1318,21 @@ const server = {
873
1318
 
874
1319
 
875
1320
  const db_schema = schema
876
- // let maxIds = await Campuses.max('_id'); = await Schedules.max('_id'); // Fetch maximum _id directly from the Schedules model
877
- // let maxId = maxIds|| 0;
878
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Schedules__id_seq" RESTART WITH ${maxId + 1}`);
1321
+ let maxIds = await Schedules.max('_id'); // Fetch maximum _id directly from the Schedules model
1322
+ let maxId = maxIds|| 0;
1323
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Schedules__id_seq" RESTART WITH ${maxId + 1}`);
1324
+
1325
+
1326
+ let uName = new Set()
1327
+ let uFrom = new Set()
1328
+ let uTo = new Set()
1329
+ let uDays = new Set()
1330
+
1331
+ let newSchedule = []
1332
+
1333
+ const exSched = await Schedules.findAll()
1334
+ const exSchedMap = new Map(exSched.map(sched => [`${sched.name} - [${sched.from} - ${sched.to}, ${sched.days}]`, sched]))
1335
+
879
1336
 
880
1337
  for (let i = 0; i < scheduleApi.length; i++){
881
1338
  try {
@@ -910,8 +1367,6 @@ const server = {
910
1367
  let createdById = userMail._id
911
1368
 
912
1369
 
913
- let from = null
914
- let to = null
915
1370
  let days = null
916
1371
 
917
1372
  if (dayHandler.length > 1) {
@@ -920,59 +1375,82 @@ const server = {
920
1375
  days = dayMappings[dayHandler[0]];
921
1376
  }
922
1377
 
923
-
924
- let [record, created] = await Schedules.findOrCreate({
925
- where:{
1378
+ let name = _schedule?.schedule
1379
+ let from = stFormat??from??null
1380
+ let to = etFormat??to??null
1381
+
1382
+ if(uName.has(name) && uFrom.has(from) && uTo.has(to) && uDays.has(days)){
1383
+ const errorMsg = `Duplicate Payload Found: ${name} - [${from} - ${to}, ${days}]`
1384
+ if(!uniqueErrors.has(errorMsg)){
1385
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1386
+ uniqueErrors.add(errorMsg)
1387
+ errorCounter++
1388
+ }
1389
+ }
1390
+ else if ( exSchedMap.has(`${name} - [${from} - ${to}, ${days}]`)){
1391
+ const exSched = exSchedMap.get(`${name} - [${from} - ${to}, ${days}]`)
1392
+ const errorMsg = `Existing Data Found: ${exSched.name} - [${exSched.from} - ${exSched.to}, ${exSched.days}]`
1393
+ if(!uniqueErrors.has(errorMsg)){
1394
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1395
+ uniqueErrors.add(errorMsg)
1396
+ errorCounter++
1397
+ }
1398
+ }
1399
+ else{
1400
+ uName.add(name)
1401
+ uFrom.add(from)
1402
+ uTo.add(to)
1403
+ uDays.add(days)
1404
+ newSchedule.push({
926
1405
  name: _schedule?.schedule,
927
1406
  from : stFormat??from,
928
1407
  to : etFormat??to,
929
- days
930
- },
931
- defaults:{
1408
+ days,
932
1409
  modifiedById,
933
1410
  createdById
934
- }
935
- })
936
- if (created){
937
- logger.info(`New schedule record created ${createdCounter + 1}/${createdCounter + 1}: [${record.from} - ${record.to}] ${record.name} `)
938
- createdCounter++;
939
- }
940
- else {
941
- const errorMsg = `Record schedule already exists: [${record.from} - ${record.to}] ${record.name}`;
942
1411
 
943
- if (!uniqueErrors.has(errorMsg)) {
944
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
945
- uniqueErrors.add(errorMsg);
946
- errorCounter++;
947
- }
1412
+ // migratedAt,
1413
+ // migratedTable,
1414
+ // referenceId,
1415
+ // isMigrated
1416
+ })
948
1417
  }
949
-
950
1418
  } catch (error) {
951
- logger.error(`Error occurred: ${error}`);
952
- logger.error(`Error occurred: ${error.stack || error}`);
1419
+ ;
1420
+ logger.error(`Error occurred: ${error.stack} ${error}`);
953
1421
  }
954
1422
  }
1423
+
1424
+ if (newSchedule.length > 0) {
1425
+ await Schedules.bulkCreate(newSchedule)
1426
+ createdCounter += newSchedule.length
1427
+
1428
+ newSchedule.forEach((exSched, index) => {
1429
+ logger.info(`${index + 1}/${index + 1}: New Schedule Record Created: ${exSched.name} - [${exSched.from} - ${exSched.to}, ${exSched.days}]`)
1430
+ });
1431
+ }
955
1432
 
956
1433
  console.log("");
957
1434
  console.log("########################################################")
958
1435
  console.log("")
959
- logger.info(' Schedule Data Migration Completed');
1436
+ logger.info('Schedule Data Migration Completed');
960
1437
  logger.info(`Total successful Schedule records created: ${createdCounter}/${createdCounter}`);
961
1438
  logger.info(`Total Schedule Error Records: ${errorCounter}/${errorCounter}`);
1439
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
962
1440
  console.log("")
963
1441
  console.log("########################################################")
964
1442
  console.log("")
965
1443
 
966
1444
  let totalSummary = {
967
- itemLength: scheduleApi.length,
1445
+ itemLength: createdCounter + errorCounter,
968
1446
  error: errorCounter,
969
1447
  success: createdCounter
970
1448
  }
971
1449
  return totalSummary
972
1450
 
973
1451
  } catch (error) {
974
- logger.error(`Error occurred: ${error}`);
975
- logger.error(`Error occurred: ${error.stack || error}`);
1452
+ ;
1453
+ logger.error(`Error occurred: ${error.stack} ${error}`);
976
1454
  }
977
1455
  },
978
1456
 
@@ -992,7 +1470,10 @@ const server = {
992
1470
  const semesterSeq = await Semesters.findAll()
993
1471
  const acadYearSeq = await AcademicYears.findAll()
994
1472
 
995
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1473
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1474
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
1475
+ const courseDefault = await Courses.findOne({ where: { name: 'Course Default' } });
1476
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
996
1477
 
997
1478
  let createdCounter = 0
998
1479
  let errorCounter = 0
@@ -1000,19 +1481,30 @@ const server = {
1000
1481
 
1001
1482
  const emailDomain = 'default.msc.edu.ph';
1002
1483
 
1003
-
1004
1484
  const db_schema = schema
1005
- // let maxIds = await Campuses.max('_id'); = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1006
- // let maxId = maxIds|| 0;
1007
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
1485
+ let maxIds = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1486
+ let maxId = maxIds|| 0;
1487
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
1488
+
1008
1489
 
1490
+ let uNum = new Set()
1491
+ let uLname = new Set()
1492
+ let uMname = new Set()
1493
+ let uFname = new Set()
1494
+ let uCourse = new Set()
1495
+ let uCampus = new Set()
1496
+
1497
+ let newStudent = []
1498
+
1499
+ const exStudent = await Students.findAll()
1500
+ const exStudentMap = new Map(exStudent.map(student => [`[${student.studentNumber}] - ${student.lastName}, ${student.firstName} ${student.middleName} [${student.courseId}, ${student.campusId}]`, student]))
1501
+
1009
1502
  const {data} = studentApi
1503
+
1010
1504
  for (let i = 0; i < data.length; i++){
1011
1505
  try {
1012
-
1013
1506
  let _student = data[i]
1014
1507
 
1015
-
1016
1508
  let _campus = campusSeq.find(a => a.name === _student?.campus)
1017
1509
  let _course = courseSeq.find(b => b.name === _student?.course)
1018
1510
  let _college = collegeSeq.find(c => c.name === _student?.college)
@@ -1024,14 +1516,8 @@ const server = {
1024
1516
  let modifiedById = userMail._id
1025
1517
  let createdById = userMail._id
1026
1518
 
1027
- let campusDefault = 999999
1028
- let courseDefault = 999999
1029
- let collegeDefault = 999999
1030
-
1031
-
1032
1519
  let fromPrompts = await Picked()
1033
-
1034
-
1520
+
1035
1521
  // let semester = "2nd Semester"
1036
1522
  let semester = fromPrompts.semester
1037
1523
  let yearsFrom = fromPrompts.yearFrom
@@ -1040,67 +1526,87 @@ const server = {
1040
1526
  let _semester = semesterSeq.find(sem => sem.code === semester)
1041
1527
  let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1042
1528
 
1043
- // return
1044
- let [record, created] = await Students.findOrCreate({
1045
- where:{
1529
+ let studentNumber = _student?.student_number
1530
+ let firstName = _student?.first_name
1531
+ let lastName = _student?.last_name
1532
+ let middleName = _student?.middle_name
1533
+ let courseId = _course?._id??courseDefault?._id
1534
+ let campusId = _campus?._id??campusDefault?._id
1535
+
1536
+ if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1537
+ const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
1538
+ if(!uniqueErrors.has(errorMsg)){
1539
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1540
+ uniqueErrors.add(errorMsg)
1541
+ errorCounter++
1542
+ }
1543
+ }
1544
+ else if ( exStudentMap.has(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)){
1545
+ const exStudent = exStudentMap.get(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)
1546
+ const errorMsg = `Existing Data Found:[${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`
1547
+ if(!uniqueErrors.has(errorMsg)){
1548
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1549
+ uniqueErrors.add(errorMsg)
1550
+ errorCounter++
1551
+ }
1552
+ }
1553
+ else{
1554
+ uNum.add(studentNumber)
1555
+ uLname.add(lastName)
1556
+ uMname.add(middleName)
1557
+ uFname.add(firstName)
1558
+ uCourse.add(courseId)
1559
+ uCampus.add(campusId)
1560
+ newStudent.push({
1046
1561
  studentNumber: _student?.student_number,
1047
1562
  firstName: _student?.first_name,
1048
1563
  lastName: _student?.last_name,
1049
1564
  middleName: _student?.middle_name,
1050
- },
1051
- defaults:{
1052
1565
  email: email,
1053
- courseId: _course?._id??courseDefault,
1054
- campusId: _campus?._id??campusDefault,
1055
- collegeId: _college?._id??collegeDefault,
1566
+ courseId: _course?._id??courseDefault?._id,
1567
+ campusId: _campus?._id??campusDefault?._id,
1568
+ collegeId: _college?._id??collegeDefault?._id,
1056
1569
  admittedYearId: _acadYear?._id ?? null,
1057
1570
  admittedSemId: _semester?._id ?? null,
1058
1571
  modifiedById,
1059
- createdById
1060
- }
1061
- })
1062
- if (created){
1063
- logger.info(`New student record created ${createdCounter + 1}/${createdCounter + 1}: [${record.studentNumber}] ${record.lastName}, ${record.firstName} ${record.middleName} `)
1064
- createdCounter++;
1065
- }
1066
- else {
1067
-
1068
- const errorMsg = `Record student already exists: [${record.studentNumber}] ${record.lastName}, ${record.firstName} ${record.middleName}`;
1069
-
1070
- if (!uniqueErrors.has(errorMsg)) {
1071
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1072
- uniqueErrors.add(errorMsg);
1073
- errorCounter++;
1074
- }
1075
-
1572
+ createdById,
1573
+ })
1076
1574
  }
1077
1575
 
1078
1576
  } catch (error) {
1079
- logger.error(`Error occurred: ${error}`);
1080
- logger.error(`Error occurred: ${error.stack || error}`);
1577
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1081
1578
  }
1082
1579
  }
1083
1580
 
1581
+ if (newStudent.length > 0) {
1582
+ await Students.bulkCreate(newStudent)
1583
+ createdCounter += newStudent.length
1584
+
1585
+ newStudent.forEach((exStudent, index) => {
1586
+ logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`)
1587
+ });
1588
+ }
1589
+
1084
1590
  console.log("");
1085
1591
  console.log("########################################################")
1086
1592
  console.log("")
1087
- logger.info(' Student Data Migration Completed');
1593
+ logger.info('Student Data Migration Completed');
1088
1594
  logger.info(`Total successful Student records created: ${createdCounter}/${createdCounter}`);
1089
1595
  logger.info(`Total Student Error Records: ${errorCounter}/${errorCounter}`);
1596
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1090
1597
  console.log("")
1091
1598
  console.log("########################################################")
1092
1599
  console.log("")
1093
1600
 
1094
1601
  let totalSummary = {
1095
- itemLength: data.length,
1602
+ itemLength: createdCounter + errorCounter,
1096
1603
  error: errorCounter,
1097
1604
  success: createdCounter
1098
1605
  }
1099
1606
  return totalSummary
1100
1607
 
1101
1608
  } catch (error) {
1102
- logger.error(`Error occurred: ${error}`);
1103
- logger.error(`Error occurred: ${error.stack || error}`);
1609
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1104
1610
 
1105
1611
  }
1106
1612
  },
@@ -1126,20 +1632,33 @@ const server = {
1126
1632
  const acadYearSeq = await AcademicYears.findAll()
1127
1633
  const acadDeptSeq = await AcademicDepartments.findAll()
1128
1634
 
1129
-
1130
1635
  const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1131
-
1636
+
1132
1637
  let createdCounter = 0
1133
1638
  let errorCounter = 0
1134
1639
  let uniqueErrors = new Set()
1135
1640
 
1136
1641
 
1137
1642
  const db_schema = schema
1138
- // let maxIds = await Campuses.max('_id'); = await Sections.max('_id'); // Fetch maximum _id directly from the Sections model
1139
- // let maxId = maxIds|| 0;
1140
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Sections__id_seq" RESTART WITH ${maxId + 1}`);
1141
-
1142
-
1643
+ let maxIds = await Sections.max('_id'); // Fetch maximum _id directly from the Sections model
1644
+ let maxId = maxIds|| 0;
1645
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Sections__id_seq" RESTART WITH ${maxId + 1}`);
1646
+
1647
+ let uName = new Set()
1648
+ let uCode = new Set()
1649
+ let uSub = new Set()
1650
+ let uIns = new Set()
1651
+ let uSem = new Set()
1652
+ let uYear = new Set()
1653
+ let uCrs = new Set()
1654
+ let uDept = new Set()
1655
+ let uCam = new Set()
1656
+
1657
+ let newSection = []
1658
+
1659
+ const exSect = await Sections.findAll()
1660
+ const exSectMap = new Map(exSect.map(sect => [`[${sect.code}] - ${sect.name} [${sect.subjectId}, ${sect.instructorId}, ${sect.semesterId}, ${sect.academicYearId}, ${sect.courseId}, ${sect.departmentId}, ${sect.campusId}]`, sect]))
1661
+
1143
1662
  for (let i = 0; i < student.length; i++) {
1144
1663
  try {
1145
1664
 
@@ -1179,27 +1698,60 @@ const server = {
1179
1698
  let code = sections ?? 'CODE'
1180
1699
  code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
1181
1700
 
1182
- let fromPrompts = await Picked()
1183
- let semester = fromPrompts.semester
1184
- let yearsFrom = fromPrompts.yearFrom
1185
- let yearsTo = fromPrompts.yearTo
1186
- let _semester = semesterSeq.find(sem => sem.code === semester)
1187
- let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1701
+ let fromPrompts = await Picked()
1702
+ let semester = fromPrompts.semester
1703
+ let yearsFrom = fromPrompts.yearFrom
1704
+ let yearsTo = fromPrompts.yearTo
1705
+ let _semester = semesterSeq.find(sem => sem.code === semester)
1706
+ let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1188
1707
 
1189
1708
  let modifiedById = userMail._id;
1190
1709
  let createdById = userMail._id;
1191
1710
 
1192
- let defaultSub = 99999
1193
- let defaultInst = 99999
1194
-
1195
1711
  let classType = 'SYNCHRONOUS'
1196
-
1197
- let [record, created] = await Sections.findOrCreate({
1198
- where: {
1712
+
1713
+ let name = sections
1714
+ let subjectId = _subjects?._id??null
1715
+ let instructorId = _instructors?._id??null
1716
+ let semesterId = _semester?._id??null
1717
+ let academicYearId = _acadYear?._id??null
1718
+ let courseId = _course?._id??null
1719
+ let departmentId = _insdepartment?._id??null
1720
+ let campusId = _campus?._id??null
1721
+
1722
+
1723
+ if(uCode.has(code) && uName.has(name) && uSub.has(subjectId) && uIns.has(instructorId) && uSem.has(semesterId) && uYear.has(academicYearId)&& uCrs.has(courseId)&& uDept.has(departmentId) && uCam.has(campusId)){
1724
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [subjectId: ${subjectId}, instructorId: ${instructorId}]`
1725
+ if(!uniqueErrors.has(errorMsg)){
1726
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1727
+ uniqueErrors.add(errorMsg)
1728
+ errorCounter++
1729
+ }
1730
+ }
1731
+ else if ( exSectMap.has(`[${code}] - ${name} [${subjectId}, ${instructorId}, ${semesterId}, ${academicYearId}, ${courseId}, ${departmentId}, ${campusId}]`)){
1732
+ const exSect = exSectMap.get(`[${code}] - ${name} [${subjectId}, ${instructorId}, ${semesterId}, ${academicYearId}, ${courseId}, ${departmentId}, ${campusId}]`)
1733
+ const errorMsg = `Existing Data Found:[${exSect.code}] - ${exSect.name} [subjectId: ${exSect.subjectId}, instructorId: ${exSect.instructorId}]`
1734
+ if(!uniqueErrors.has(errorMsg)){
1735
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1736
+ uniqueErrors.add(errorMsg)
1737
+ errorCounter++
1738
+ }
1739
+ }
1740
+ else{
1741
+ uName.add(name)
1742
+ uCode.add(code)
1743
+ uSub.add(subjectId)
1744
+ uIns.add(instructorId)
1745
+ uSem.add(semesterId)
1746
+ uYear.add(academicYearId)
1747
+ uCrs.add(courseId)
1748
+ uDept.add(departmentId)
1749
+ uCam .add(campusId)
1750
+ newSection.push({
1199
1751
  name: sections,
1200
1752
  code,
1201
- subjectId: _subjects?._id??defaultSub??null,
1202
- instructorId: _instructors?._id??defaultInst??null,
1753
+ subjectId: _subjects?._id??null,
1754
+ instructorId: _instructors?._id??null,
1203
1755
  classType,
1204
1756
  semesterId: _semester?._id??null,
1205
1757
  academicYearId: _acadYear?._id??null,
@@ -1208,64 +1760,289 @@ const server = {
1208
1760
  departmentId: _insdepartment?._id??null,
1209
1761
  modifiedById,
1210
1762
  createdById,
1211
-
1212
- },
1213
- defaults: {
1214
- // classType,
1215
- // semesterId: _semester?._id??null,
1216
- // academicYearId: _acadYear?._id??null,
1217
- // courseId: _course?._id??null,
1218
- // campusId: _campus?._id??null,
1219
- // modifiedById,
1220
- // createdById,
1221
-
1222
- }
1223
- });
1224
-
1225
- if (created) {
1226
- logger.info(`New section record created ${createdCounter + 1}/${createdCounter + 1}: ${record.name} `);
1227
- createdCounter++;
1228
- } else {
1229
-
1230
- const errorMsg = `Record section already exists: ${record.name} `;
1231
-
1232
- if (!uniqueErrors.has(errorMsg)) {
1233
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1234
- uniqueErrors.add(errorMsg);
1235
- errorCounter++;
1236
- }
1763
+ })
1237
1764
  }
1765
+
1238
1766
  }
1239
1767
  } catch (error) {
1240
- logger.error(`Error occurred: ${error}`);
1241
- logger.error(`Error occurred: ${error.stack || error}`);
1768
+ ;
1769
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1242
1770
  }
1243
1771
  }
1772
+
1773
+ if (newSection.length > 0) {
1774
+ await Sections.bulkCreate(newSection)
1775
+ createdCounter += newSection.length
1776
+
1777
+ newSection.forEach((sect, index) => {
1778
+ logger.info(`${index + 1}/${index + 1}: New Section Record Created: [${sect.code}] - ${sect.name} [subjectId: ${sect.subjectId}, instructorId: ${sect.instructorId}]`)
1779
+ });
1780
+ }
1781
+
1782
+
1783
+ // let batchSize = 500
1784
+ // for (let i = 0; i < newSection.length; i += batchSize){
1785
+ // const batch = newSection.slice(i, i + batchSize)
1786
+ // await Sections.bulkCreate(batch)
1787
+ // createdCounter += batch.length
1788
+ // batch.forEach((sect, index) => {
1789
+ // logger.info(`${index + 1}/${index + 1}: New Section Record Created: [${sect.code}] - ${sect.name}`)
1790
+ // })
1791
+ // }
1792
+
1244
1793
 
1245
1794
  console.log("");
1246
1795
  console.log("########################################################");
1247
1796
  console.log("");
1248
- logger.info(' Section Data Migration Completed');
1797
+ logger.info('Section Data Migration Completed');
1249
1798
  logger.info(`Total successful Section records created: ${createdCounter}/${createdCounter}`);
1250
1799
  logger.info(`Total Section Error Records: ${errorCounter}/${errorCounter}`);
1800
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1251
1801
  console.log("");
1252
1802
  console.log("########################################################");
1253
1803
  console.log("");
1254
1804
 
1255
1805
  let totalSummary = {
1256
- itemLength: student.length,
1806
+ itemLength: createdCounter + errorCounter,
1257
1807
  error: errorCounter,
1258
1808
  success: createdCounter
1259
1809
  };
1260
1810
  return totalSummary;
1261
1811
 
1262
1812
  } catch (error) {
1263
- logger.error(`Error occurred: ${error}`);
1264
- logger.error(`Error occurred: ${error.stack || error}`);
1813
+ ;
1814
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1265
1815
  }
1266
1816
  },
1267
1817
 
1818
+ async EnrolledStudentss(){
1819
+ try {
1820
+ console.log("");
1821
+ console.log("########################################################")
1822
+ console.log(" Enrolled Students Migration ")
1823
+ console.log("########################################################")
1824
+ console.log("");
1825
+
1826
+ const studentApi = (await api.Student()).data
1827
+ const instructorApi = await api.Instructor()
1828
+
1829
+ const studentSeq = await Students.findAll()
1830
+ const courseSeq = await Courses.findAll()
1831
+ const campusSeq = await Campuses.findAll()
1832
+ const acadYearSeq = await AcademicYears.findAll()
1833
+ const semesterSeq = await Semesters.findAll()
1834
+ const sectionSeq = await Sections.findAll()
1835
+ const instructorSeq = await Instructors.findAll()
1836
+ const subjectSeq = await Subjects.findAll()
1837
+
1838
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1839
+
1840
+ let createdCounter = 0
1841
+ let errorCounter = 0
1842
+ let uniqueErrors = new Set()
1843
+
1844
+ const db_schema = schema
1845
+ let maxIds = await EnrolledStudents.max('_id'); // Fetch maximum _id directly from the EnrolledStudents model
1846
+ let maxId = maxIds|| 0;
1847
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."EnrolledStudents__id_seq" RESTART WITH ${maxId + 1}`);
1848
+
1849
+ let uStud = new Set()
1850
+ let uCrs = new Set()
1851
+ let uIns = new Set()
1852
+ let uSec = new Set()
1853
+ let uCam = new Set()
1854
+ let uYear = new Set()
1855
+ let uSem = new Set()
1856
+ let uGrade = new Set()
1857
+ let uRemarks = new Set()
1858
+ let uAllStat = new Set()
1859
+
1860
+ let newEnroll = []
1861
+
1862
+ const existings = await EnrolledStudents.findAll()
1863
+ const existingEnrolledMap = new Map(existings.map(enroll => [`[${enroll.studentId} ${enroll.instructorId} ${enroll.sectionId}] ${enroll.finalGrade} ${enroll.remarks} ${enroll.overAllStatus}`, enroll]))
1864
+
1865
+ for (let i = 0; i < studentApi.length; i++){
1866
+ try {
1867
+ let _student = studentApi[i]
1868
+ let student = studentSeq.find(st => st.studentNumber === _student?.student_number)
1869
+ let campus = campusSeq.find(ca => ca.name === _student?.campus)
1870
+ let course = courseSeq.find(cr => cr.name === _student?.course)
1871
+ let _students = studentApi[i].subjects_enrolled
1872
+
1873
+ let fromPrompts = await Picked()
1874
+
1875
+ let semester = fromPrompts.semester
1876
+ let yearsFrom = fromPrompts.yearFrom
1877
+ let yearsTo = fromPrompts.yearTo
1878
+ let _semester = semesterSeq.find(sem => sem.code === semester)
1879
+ let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1880
+
1881
+ let modifiedById = userMail._id;
1882
+ let createdById = userMail._id;
1883
+
1884
+ for (let j = 0; j < _students.length; j++){
1885
+ let instrcutor = _students[j].faculty_id
1886
+ let sections = _students[j].section_name
1887
+ let fGrade = _students[j].final_grade
1888
+ let rmarks = _students[j].remarks
1889
+
1890
+ let _inst = instructorApi.find(i => i.faculty_id === instrcutor)
1891
+ let _instructor = instructorSeq.find(ins => ins.employeeNumber === _inst?.faculty_id)
1892
+ let _section = sectionSeq.find(sec => sec.name === sections)
1893
+
1894
+
1895
+ if (!_inst) {
1896
+ continue;
1897
+ }
1898
+
1899
+ if (!_student) {
1900
+ continue;
1901
+ }
1902
+
1903
+ if (!student) {
1904
+ continue;
1905
+ }
1906
+
1907
+ let overAllStatus = null
1908
+ let finalG = fGrade
1909
+
1910
+ let graded = false
1911
+ if (finalG){
1912
+ graded = true
1913
+ }
1914
+ else if (!finalG){
1915
+ finalG = 0
1916
+ }
1917
+
1918
+ let remarks = rmarks?.toUpperCase()??null
1919
+ if (remarks === 'INCOMPLETE'){
1920
+ finalG = 0
1921
+ overAllStatus = "INC"
1922
+ }
1923
+ else if (remarks === 'UNOFFICIALLY DROPPED'){
1924
+ finalG = 0
1925
+ overAllStatus = "UD"
1926
+ }
1927
+ else if (remarks === 'UNAUTHORIZED WITHDRAWAL'){
1928
+ finalG = 0
1929
+ overAllStatus = "UW"
1930
+ }
1931
+ else if (remarks === 'DROPPED'){
1932
+ finalG = 0
1933
+ overAllStatus = "DRP"
1934
+ }
1935
+ else if (remarks === 'NO CREDIT'){
1936
+ finalG = 0
1937
+ overAllStatus = "IN-PROG"
1938
+ }
1939
+ else if (remarks === 'CREDITED'){
1940
+ finalG = 0
1941
+ overAllStatus = "UD"
1942
+ }
1943
+ else if (remarks === 'PASSED'){
1944
+ overAllStatus = "PASSED"
1945
+ }
1946
+ else if (!remarks){
1947
+ finalG = 0
1948
+ }
1949
+ if(finalG === 5.00){
1950
+ remarks = "FAILED"
1951
+ overAllStatus = "FAILED"
1952
+ }
1953
+
1954
+ let studentId = student?._id
1955
+ let courseId = course?._id
1956
+ let instructorId = _instructor?._id??null
1957
+ let sectionId = _section?._id??null
1958
+ let campusId = campus?._id
1959
+ let academicYearId = _acadYear?._id
1960
+ let semesterId = _semester?._id
1961
+ let finalGrade = finalG
1962
+
1963
+ if(uStud.has(studentId) && uIns.has(instructorId) && uSec.has(sectionId) && uGrade.has(finalGrade) && uRemarks.has(remarks) && uAllStat.has(overAllStatus)){
1964
+ const errorMsg = `Duplicate Payload Found: [${studentId}] - [${courseId}, ${instructorId}, ${sectionId}] = ${finalGrade}, ${remarks}, ${overAllStatus}`
1965
+ if(!uniqueErrors.has(errorMsg)){
1966
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1967
+ uniqueErrors.add(errorMsg)
1968
+ errorCounter++
1969
+ }
1970
+ }
1971
+ else if (existingEnrolledMap.has(`[${studentId} ${instructorId} ${sectionId} ${finalGrade}] ${remarks} ${overAllStatus}`)){
1972
+ const existings = existingEnrolledMap.get(`[${studentId} ${instructorId} ${sectionId} ${finalGrade}] ${remarks} ${overAllStatus}`)
1973
+ const errorMsg = `Existing Data Found: [${existings.studentId}] - [${existings.courseId}, ${existings.instructorId}, ${existings.sectionId}] = ${existings.finalGrade}, ${existings.remarks}, ${existings.overAllStatus}`
1974
+ if(!uniqueErrors.has(errorMsg)){
1975
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1976
+ uniqueErrors.add(errorMsg)
1977
+ errorCounter++
1978
+ }
1979
+ }
1980
+ else{
1981
+ uStud.add(studentId)
1982
+ uCrs.add(courseId)
1983
+ uIns.add(instructorId)
1984
+ uSec.add(sectionId)
1985
+ uCam.add(campusId)
1986
+ uYear.add(academicYearId)
1987
+ uSem.add(semesterId)
1988
+ uGrade.add(finalGrade)
1989
+ uAllStat.add(overAllStatus)
1990
+ uRemarks.add(remarks)
1991
+ newEnroll.push({
1992
+ studentId: student?._id,
1993
+ courseId: course?._id,
1994
+ instructorId: _instructor?._id??null,
1995
+ sectionId: _section?._id??null,
1996
+ campusId: campus?._id,
1997
+ academicYearId: _acadYear?._id,
1998
+ semesterId: _semester?._id,
1999
+ finalGrade: finalG,
2000
+ graded,
2001
+ overAllStatus,
2002
+ remarks,
2003
+ createdById,
2004
+ modifiedById,
2005
+ })
2006
+ }
2007
+ }
2008
+ } catch (error) {
2009
+ logger.error(`Error occurred: ${error.stack} ${error}`);
2010
+ }
2011
+ }
2012
+
2013
+ if (newEnroll.length > 0) {
2014
+ await EnrolledStudents.bulkCreate(newEnroll)
2015
+ createdCounter += newEnroll.length
2016
+
2017
+ newEnroll.forEach((es, index) => {
2018
+ logger.info(`${index + 1}/${index + 1}: New Enrolled Students Record Created: [${es.studentId}] - [${es.courseId}, ${es.instructorId}, ${es.sectionId}] = ${es.finalGrade}, ${es.remarks}, ${es.overAllStatus}`)
2019
+ });
2020
+ }
2021
+
2022
+ console.log("");
2023
+ console.log("########################################################")
2024
+ console.log("")
2025
+ logger.info('Enrolled Student Data Migration Completed');
2026
+ logger.info(`Total successful Enrolled Student records created: ${createdCounter}/${createdCounter}`);
2027
+ logger.info(`Total Enrolled Student Error Records: ${errorCounter}/${errorCounter}`);
2028
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
2029
+ console.log("")
2030
+ console.log("########################################################")
2031
+ console.log("")
2032
+
2033
+ let totalSummary = {
2034
+ itemLength: createdCounter + errorCounter,
2035
+ error: errorCounter,
2036
+ success: createdCounter
2037
+ }
2038
+ return totalSummary
1268
2039
 
2040
+ } catch (error) {
2041
+ logger.error(`Error occurred: ${error.stack} ${error}`);
2042
+
2043
+ }
2044
+ },
2045
+
1269
2046
  async EnrolledStudent(){
1270
2047
  try {
1271
2048
  console.log("");
@@ -1292,10 +2069,9 @@ const server = {
1292
2069
  let uniqueErrors = new Set()
1293
2070
 
1294
2071
 
1295
- const db_schema = schema
1296
- // let maxIds = await Campuses.max('_id'); = await EnrolledStudents.max('_id'); // Fetch maximum _id directly from the EnrolledStudents model
1297
- // let maxId = maxIds|| 0;
1298
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."EnrolledStudents__id_seq" RESTART WITH ${maxId + 1}`);
2072
+ let maxIds = await EnrolledStudents.max('_id'); // Fetch maximum _id directly from the EnrolledStudents model
2073
+ let maxId = maxIds|| 0;
2074
+ await db.sequelize.query(`ALTER SEQUENCE public_migrations."EnrolledStudents__id_seq" RESTART WITH ${maxId + 1}`);
1299
2075
 
1300
2076
 
1301
2077
  for (let i = 0; i < studentApi.length; i++){
@@ -1350,19 +2126,56 @@ const server = {
1350
2126
  continue;
1351
2127
  }
1352
2128
 
1353
-
1354
- let totalPoints = 100
2129
+ let overAllStatus = null
1355
2130
  let finalG = fGrade
1356
- let gradePoints = ((-4.0 / totalPoints) * parseFloat (finalG) + 5.0).toFixed(2)
2131
+
2132
+ // let totalPoints = 100
2133
+ // let finalG = fGrade
2134
+ // let gradePoints = ((-4.0 / totalPoints) * parseFloat (finalG) + 5.0).toFixed(2)
2135
+
1357
2136
  let graded = false
1358
- if (gradePoints){
2137
+ if (finalG){
1359
2138
  graded = true
1360
2139
  }
1361
- else if (!gradePoints){
1362
- gradePoints = 0
1363
- }
1364
- let remarks = rmarks?.toUpperCase()??null
2140
+ else if (!finalG){
2141
+ finalG = 0
2142
+ }
1365
2143
 
2144
+ let remarks = rmarks?.toUpperCase()??null
2145
+ if (remarks === 'INCOMPLETE'){
2146
+ finalG = 0
2147
+ overAllStatus = "INC"
2148
+ }
2149
+ else if (remarks === 'UNOFFICIALLY DROPPED'){
2150
+ finalG = 0
2151
+ overAllStatus = "UD"
2152
+ }
2153
+ else if (remarks === 'UNAUTHORIZED WITHDRAWAL'){
2154
+ finalG = 0
2155
+ overAllStatus = "UW"
2156
+ }
2157
+ else if (remarks === 'DROPPED'){
2158
+ finalG = 0
2159
+ overAllStatus = "DRP"
2160
+ }
2161
+ else if (remarks === 'NO CREDIT'){
2162
+ finalG = 0
2163
+ overAllStatus = "IN-PROG"
2164
+ }
2165
+ else if (remarks === 'CREDITED'){
2166
+ finalG = 0
2167
+ overAllStatus = "UD"
2168
+ }
2169
+ else if (remarks === 'PASSED'){
2170
+ overAllStatus = "PASSED"
2171
+ }
2172
+ else if (!remarks){
2173
+ finalG = 0
2174
+ }
2175
+ if(finalG === 5.00){
2176
+ remarks = "FAILED"
2177
+ overAllStatus = "FAILED"
2178
+ }
1366
2179
  // return
1367
2180
  let [record, created] = await EnrolledStudents.findOrCreate({
1368
2181
  where:{
@@ -1373,9 +2186,10 @@ const server = {
1373
2186
  campusId: campus?._id,
1374
2187
  academicYearId: _acadYear?._id,
1375
2188
  semesterId: _semester?._id,
1376
- finalGrade: gradePoints,
2189
+ finalGrade: finalG,
1377
2190
  graded,
1378
2191
  remarks,
2192
+ overAllStatus,
1379
2193
  createdById,
1380
2194
  modifiedById,
1381
2195
  },
@@ -1385,11 +2199,11 @@ const server = {
1385
2199
  })
1386
2200
 
1387
2201
  if (created) {
1388
- logger.info(`New enrolled student record created ${createdCounter + 1}/${createdCounter + 1}: studentId = [${record.studentId}], sectionId = [${record.sectionId}], instructorId = [${record.instructorId}]`);
2202
+ logger.info(`${createdCounter + 1}/${createdCounter + 1}: New Enrolled Students Record Created: [${record.studentId}] - [${record.courseId}, ${record.instructorId}, ${record.sectionId}] = ${record.finalGrade}, ${record.remarks}, ${record.overAllStatus}`)
1389
2203
  createdCounter++;
1390
2204
  } else {
1391
2205
 
1392
- const errorMsg = `Record enrolled student already exists: studentId = [${record.studentId}], sectionId = [${record.sectionId}], instructorId = [${record.instructorId}]`;
2206
+ const errorMsg = `Record enrolled student already exists: studentId = [${record.studentId}] - [${record.courseId}, ${record.instructorId}, ${record.sectionId}] = ${record.finalGrade}, ${record.remarks}, ${record.overAllStatus}`;
1393
2207
 
1394
2208
  if (!uniqueErrors.has(errorMsg)) {
1395
2209
  logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
@@ -1399,8 +2213,7 @@ const server = {
1399
2213
  }
1400
2214
  }
1401
2215
  } catch (error) {
1402
- logger.error(`Error occurred: ${error}`);
1403
- logger.error(`Error occurred: ${error.stack || error}`);
2216
+ console.error(error);
1404
2217
  }
1405
2218
  }
1406
2219
 
@@ -1422,11 +2235,11 @@ const server = {
1422
2235
  return totalSummary
1423
2236
 
1424
2237
  } catch (error) {
1425
- logger.error(`Error occurred: ${error}`);
1426
- logger.error(`Error occurred: ${error.stack || error}`);
2238
+ console.error(error);
1427
2239
 
1428
2240
  }
1429
2241
  },
2242
+
1430
2243
  }
1431
2244
 
1432
2245
  async function runServerFunctions() {
@@ -1439,7 +2252,7 @@ async function runServerFunctions() {
1439
2252
  }
1440
2253
  }
1441
2254
  } catch (error) {
1442
- logger.error(`Error occurred: ${error.stack || error}`);
2255
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1443
2256
  }
1444
2257
  console.log("");
1445
2258
  console.log("########################################################");