lms-sync 1.0.45 → 1.0.47

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,7 @@ const logger = require('../utils/logger')
3
3
  const api = require('../apiConnections/apiConnects')
4
4
  const moment = require('moment')
5
5
  const { Picked } = require('./semesterPick')
6
+ const Mixins = require('../utils/Mixins')
6
7
 
7
8
  const {
8
9
  AcademicDepartments,
@@ -38,9 +39,8 @@ const server = {
38
39
  let maxIdsUser = await Users.max('_id'); //Fetch maximum _id directly from the campuses model
39
40
 
40
41
  let maxId = maxIds|| 0;
41
- let maxIdSems = maxIdsSem|| 0;
42
- let maxIdUsers = maxIdsUser|| 0;
43
-
42
+ let maxIdSems = maxIdsSem || 0;
43
+ let maxIdUsers = maxIdsUser || 0;
44
44
 
45
45
  await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
46
46
  await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxIdUsers + 1}`);
@@ -135,8 +135,6 @@ const server = {
135
135
  let errorCounter = 0
136
136
  let uniqueErrors = new Set()
137
137
 
138
-
139
-
140
138
  let uCode = new Set()
141
139
  let uName = new Set()
142
140
 
@@ -156,6 +154,11 @@ const server = {
156
154
  let name = _campus?.name
157
155
  let code = _campus?.code
158
156
 
157
+ let migratedAt = new Date() //present date of the migration
158
+ let migratedTable = 'Campuses' // sql counterpart main table
159
+ let referenceId = _campus?.id // id of the data
160
+ let isMigrated = true
161
+
159
162
  if(uCode.has(code) && uName.has(name)){
160
163
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
161
164
  if(!uniqueErrors.has(errorMsg)){
@@ -183,10 +186,10 @@ const server = {
183
186
  address: _campus?.address,
184
187
  modifiedById,
185
188
  createdById,
186
- // migratedAt,
187
- // migratedTable,
188
- // referenceId,
189
- // isMigrated
189
+ migratedAt,
190
+ migratedTable,
191
+ referenceId,
192
+ isMigrated
190
193
  })
191
194
  }
192
195
 
@@ -267,12 +270,7 @@ const server = {
267
270
 
268
271
  let createdCounter = 0
269
272
  let errorCounter = 0
270
- let uniqueErrors = new Set()
271
-
272
- // let migratedAt = new Date() //present date of the migration
273
- // let migratedTable = 'colleges' // sql counterpart main table
274
- // let referenceId = collegeApi.id // id of the data
275
- // let isMigrated = true
273
+ let uniqueErrors = new Set()
276
274
 
277
275
  let uCode = new Set()
278
276
  let uName = new Set()
@@ -296,6 +294,11 @@ const server = {
296
294
  let name = _college?.name
297
295
  let code = _college?.code
298
296
 
297
+ let migratedAt = new Date() //present date of the migration
298
+ let migratedTable = 'Colleges' // sql counterpart main table
299
+ let referenceId = _college.id // id of the data
300
+ let isMigrated = true
301
+
299
302
  if(uCode.has(code) && uName.has(name)){
300
303
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
301
304
  if(!uniqueErrors.has(errorMsg)){
@@ -321,7 +324,15 @@ const server = {
321
324
  code: _college?.code,
322
325
  campusId: _campus?._id??campusDefault?._id,
323
326
  modifiedById,
324
- createdById
327
+ createdById,
328
+ migratedAt,
329
+ migratedTable,
330
+ referenceId,
331
+ isMigrated,
332
+ migratedAt,
333
+ migratedTable,
334
+ referenceId,
335
+ isMigrated
325
336
  })
326
337
  }
327
338
 
@@ -372,7 +383,7 @@ const server = {
372
383
  try {
373
384
  console.log("");
374
385
  console.log("########################################################")
375
- console.log(" Academic Departments Migration ")
386
+ console.log(" Academic Departments Migration ")
376
387
  console.log("########################################################")
377
388
  console.log("");
378
389
 
@@ -424,6 +435,7 @@ const server = {
424
435
  let newAcadDeptTwo = []
425
436
  const exAcadDeptTwo = await AcademicDepartments.findAll()
426
437
  const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
438
+
427
439
 
428
440
  for (let i = 0; i < departmentApi.length; i++){
429
441
  try {
@@ -438,6 +450,11 @@ const server = {
438
450
  let name = _acadDept?.name
439
451
  let code = _acadDept?.code
440
452
 
453
+ let migratedAt = new Date() //present date of the migration
454
+ let migratedTable = 'Departments' // sql counterpart main table
455
+ let referenceId = _acadDept.id // id of the data
456
+ let isMigrated = true
457
+
441
458
  if(uCode.has(code) && uName.has(name)){
442
459
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
443
460
  if(!uniqueErrors.has(errorMsg)){
@@ -464,7 +481,11 @@ const server = {
464
481
  collegeId: _college?._id??collegeDefault?._id,
465
482
  campusId: campus?._id??campusDefault?._id,
466
483
  modifiedById,
467
- createdById
484
+ createdById,
485
+ migratedAt,
486
+ migratedTable,
487
+ referenceId,
488
+ isMigrated
468
489
  })
469
490
  }
470
491
  } catch (error) {
@@ -572,6 +593,279 @@ const server = {
572
593
  },
573
594
 
574
595
  async Instructor(){
596
+ let userIds = []
597
+ try {
598
+ console.log("");
599
+ console.log("########################################################")
600
+ console.log(" Instructors Migrations ")
601
+ console.log("########################################################")
602
+ console.log("");
603
+
604
+
605
+ const db_schema = schema
606
+ let maxIds = await Users.max('_id'); //Fetch maximum _id directly from the Users model
607
+ let maxIdsIns = await Instructors.max('_id'); //Fetch maximum _id directly from the Users model
608
+
609
+ let maxId = maxIds|| 0;
610
+ let maxIdIns = maxIdsIns|| 0;
611
+
612
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
613
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxId + 1}`);
614
+
615
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Instructors__id_seq"`);
616
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxIdIns + 1}`);
617
+
618
+ const instructorApi = await api.Instructor()
619
+ const departmentApi = await api.Department()
620
+
621
+ const departmentSeq = await AcademicDepartments.findAll()
622
+ const campusSeq = await Campuses.findAll()
623
+
624
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
625
+ if (!userMail){}
626
+
627
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
628
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
629
+
630
+ let defaultPayload = {
631
+ firstName: 'Instructor',
632
+ lastName: 'Default',
633
+ middleName: 'Migration',
634
+ employeeNumber: '_Instructor',
635
+ departmentId: departmentDefault?._id,
636
+ campusId: campusDefault?._id,
637
+ modifiedById: userMail?._id,
638
+ createdById: userMail?._id
639
+ };
640
+
641
+ let [defaults, createddef] = await Instructors.findOrCreate({
642
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
643
+ defaults: defaultPayload
644
+ });
645
+
646
+ let createdCounter = 0
647
+ let errorCounter = 0
648
+ let uniqueErrors = new Set()
649
+
650
+ let uEmail = new Set()
651
+ let uPass = new Set()
652
+ let uTPass = new Set()
653
+ let uULname = new Set()
654
+ let uUFname = new Set()
655
+ let uUMname = new Set()
656
+ let uScopes = new Set()
657
+
658
+ let newUser = []
659
+
660
+ const exUser = await Users.findAll()
661
+ const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
662
+
663
+ let uDept = new Set()
664
+ let uCamp = new Set()
665
+ let uLname = new Set()
666
+ let uMname = new Set()
667
+ let uFname = new Set()
668
+ let uNum = new Set()
669
+
670
+ let newInstructor = []
671
+
672
+ const exInst = await Instructors.findAll()
673
+ const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
674
+
675
+ for (let i = 0; i < instructorApi.length; i++){
676
+ try {
677
+ let _instructor = instructorApi[i]
678
+
679
+ let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
680
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
681
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
682
+
683
+ let modifiedById = userMail?._id
684
+ let createdById = userMail?._id
685
+
686
+ let campusDefault = "MSC - Boac Campus"
687
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
688
+
689
+ let role = _instructor?.role
690
+ let isChairPerson = false
691
+ let isDean = false
692
+
693
+ if(role === "Program Chair"){
694
+ isChairPerson = true
695
+ }
696
+ if(role === "Dean"){
697
+ isDean = true
698
+ }
699
+
700
+ let migratedAt = new Date() //present date of the migration
701
+ let migratedTable = 'Instructors' // sql counterpart main table
702
+ let referenceId = _instructor?.id // id of the data
703
+ let isMigrated = true
704
+
705
+ let firstName = _instructor?.first_name
706
+ let lastName = _instructor?.last_name
707
+ let middleName = _instructor?.middle_name
708
+ let getUserName = Mixins.generateUsername(firstName, lastName)
709
+ let email = `${getUserName}@msumarinduque.edu.ph`
710
+ let password = `${getUserName}`
711
+ let temporaryPassword = password
712
+ let adminScopes = []
713
+
714
+ let employeeNumber = _instructor?.faculty_id
715
+ let departmentId = _acadDepartment?._id??departmentDefault?._id
716
+ let campusId = campusMap?._id??_campusDefault?._id
717
+
718
+ if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
719
+ const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
720
+ if(!uniqueErrors.has(errorMsg)){
721
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
722
+ uniqueErrors.add(errorMsg)
723
+ // errorCounter++
724
+ }
725
+ }
726
+ else if (exUserMap.has(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)){
727
+ const exUser = exUserMap.get(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)
728
+ const errorMsg = `Existing Data Found: [${exUser.email} - ${exUser.password} ${exUser.temporaryPassword}] - ${exUser.lastName}, ${exUser.firstName} ${exUser.middleName} ${exUser.adminScopes}`
729
+ if(!uniqueErrors.has(errorMsg)){
730
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
731
+ uniqueErrors.add(errorMsg)
732
+ // errorCounter++
733
+ }
734
+ }
735
+ else{
736
+ uEmail.add(email)
737
+ uPass.add(password)
738
+ uTPass.add(temporaryPassword)
739
+ uULname.add(lastName)
740
+ uUFname.add(firstName)
741
+ uUMname.add(middleName)
742
+ uScopes.add(adminScopes)
743
+ newUser.push({
744
+ firstName: _instructor?.first_name,
745
+ lastName: _instructor?.last_name,
746
+ middleName: _instructor?.middle_name,
747
+ password: password,
748
+ temporaryPassword: password,
749
+ email,
750
+ modifiedById,
751
+ createdById,
752
+ adminScopes,
753
+ })
754
+ }
755
+
756
+ if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
757
+ const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
758
+ if(!uniqueErrors.has(errorMsg)){
759
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
760
+ uniqueErrors.add(errorMsg)
761
+ errorCounter++
762
+ }
763
+ }
764
+ else if ( exInstMap.has(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)){
765
+ const exInst = exInstMap.get(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)
766
+ const errorMsg = `Existing Data Found:[${exInst.employeeNumber}] - ${exInst.lastName}, ${exInst.firstName} ${exInst.middleName} [departmentId: ${exInst.departmentId}, campusId: ${exInst.campusId}]`
767
+ if(!uniqueErrors.has(errorMsg)){
768
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
769
+ uniqueErrors.add(errorMsg)
770
+ errorCounter++
771
+ }
772
+ }
773
+ else{
774
+ uNum.add(employeeNumber)
775
+ uLname.add(lastName)
776
+ uFname.add(firstName)
777
+ uMname.add(middleName)
778
+ uDept.add(departmentId)
779
+ uCamp.add(campusId)
780
+ newInstructor.push({
781
+ firstName: _instructor?.first_name,
782
+ lastName: _instructor?.last_name,
783
+ middleName: _instructor?.middle_name,
784
+ employeeNumber: _instructor?.faculty_id,
785
+ departmentId: _acadDepartment?._id??departmentDefault?._id,
786
+ academicDepartmentId: _acadDepartment?._id??departmentDefault?._id,
787
+ campusId: campusMap?._id??_campusDefault?._id??campusDefault?._id,
788
+ isDean,
789
+ isChairPerson,
790
+ modifiedById,
791
+ createdById,
792
+ migratedAt,
793
+ migratedTable,
794
+ // referenceId,
795
+ isMigrated
796
+ })
797
+ }
798
+
799
+ } catch (error) {
800
+ logger.error(`Error occurred: ${error} ${error.stack}`);
801
+ }
802
+ }
803
+
804
+ if (newUser.length > 0) {
805
+ const createdUser = await Users.bulkCreate(newUser, {returning: true})
806
+ userIds = createdUser.map(_user => _user._id) // Remove const or let
807
+ createdCounter += newUser.length
808
+ newUser.forEach((user, index) => {
809
+ // logger.info(`${index + 1}/${index + 1}: New Instructor User Record Created: [${user.email} - ${user.password} ${user.temporaryPassword}] - ${user.lastName}, ${user.firstName} ${user.middleName} ${user.adminScopes}`)
810
+ });
811
+ }
812
+
813
+
814
+ if (newInstructor.length > 0) {
815
+ // Associate userIds with new instructors
816
+ newInstructor = newInstructor.map((inst, index) => ({
817
+ ...inst,
818
+ userId: userIds[index]
819
+ }));
820
+
821
+ await Instructors.bulkCreate(newInstructor);
822
+ createdCounter += newInstructor.length;
823
+
824
+ newInstructor.forEach((inst, index) => {
825
+ logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`);
826
+ });
827
+ }
828
+
829
+
830
+ // if (newInstructor.length > 0) {
831
+
832
+ // await Instructors.bulkCreate(newInstructor)
833
+ // createdCounter += newInstructor.length
834
+
835
+ // newInstructor.forEach((inst, index) => {
836
+ // logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`)
837
+ // });
838
+
839
+ // }
840
+
841
+
842
+ console.log("");
843
+ console.log("########################################################")
844
+ console.log("")
845
+ logger.info('User Instructors Data Creation Completed');
846
+ logger.info(`Total successful User Instructors records created: ${createdCounter}/${createdCounter}`);
847
+ logger.info(`Total User Instructors Error Records: ${errorCounter}/${errorCounter}`);
848
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
849
+
850
+ console.log("")
851
+ console.log("########################################################")
852
+ console.log("")
853
+
854
+ let totalSummary = {
855
+ itemLength: createdCounter + errorCounter,
856
+ error: errorCounter,
857
+ success: createdCounter
858
+ }
859
+ return totalSummary
860
+
861
+ } catch (error) {
862
+ ;
863
+ logger.error(`Error occurred: ${error} ${error.stack} `);
864
+
865
+ }
866
+ },
867
+
868
+ async Instructorsss(){
575
869
  try {
576
870
  console.log("");
577
871
  console.log("########################################################")
@@ -590,8 +884,10 @@ const server = {
590
884
 
591
885
  const departmentSeq = await AcademicDepartments.findAll()
592
886
  const campusSeq = await Campuses.findAll()
593
- const instructorSeq = await Instructors.findAll()
594
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
887
+ const userSeq = await Users.findAll()
888
+
889
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
890
+ if (!userMail){}
595
891
  const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
596
892
  const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
597
893
 
@@ -627,16 +923,18 @@ const server = {
627
923
  const exInst = await Instructors.findAll()
628
924
  const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
629
925
 
926
+
630
927
  for (let i = 0; i < instructorApi.length; i++){
631
928
  try {
929
+
632
930
  let _instructor = instructorApi[i]
931
+
932
+ let findUser = await userSeq.find( f => f.lastName === _instructor?.last_name && f.firstName === _instructor?.first_name && f.middleName === _instructor?.middle_name)
633
933
 
634
934
  let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
635
-
636
935
  let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
637
-
638
936
  let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
639
-
937
+
640
938
  let modifiedById = userMail?._id
641
939
  let createdById = userMail?._id
642
940
 
@@ -644,7 +942,6 @@ const server = {
644
942
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
645
943
 
646
944
  let role = _instructor?.role
647
-
648
945
  let isChairPerson = false
649
946
  let isDean = false
650
947
 
@@ -661,6 +958,7 @@ const server = {
661
958
  let employeeNumber = _instructor?.faculty_id
662
959
  let departmentId = _acadDepartment?._id??departmentDefault?._id
663
960
  let campusId = campusMap?._id??_campusDefault?._id
961
+ let userId = findUser?._id
664
962
 
665
963
  if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
666
964
  const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
@@ -698,11 +996,12 @@ const server = {
698
996
  isChairPerson,
699
997
  modifiedById,
700
998
  createdById,
999
+ userId
701
1000
  })
702
1001
  }
703
1002
 
704
1003
  } catch (error) {
705
- logger.error(`Error occurred: ${error} ${error.stack}`);
1004
+ logger.error(`Error occurred: ${error} ${error.stack}`);
706
1005
  }
707
1006
  }
708
1007
 
@@ -717,7 +1016,6 @@ const server = {
717
1016
 
718
1017
  }
719
1018
 
720
-
721
1019
  console.log("");
722
1020
  console.log("########################################################")
723
1021
  console.log("")
@@ -823,6 +1121,10 @@ const server = {
823
1121
  let campusId = campus?._id??null
824
1122
  let departmentId = _department?._id??null
825
1123
 
1124
+ let migratedAt = new Date() //present date of the migration
1125
+ let migratedTable = 'Courses' // sql counterpart main table
1126
+ let referenceId = courseCode?.id // id of the data
1127
+ let isMigrated = true
826
1128
 
827
1129
 
828
1130
  if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
@@ -855,7 +1157,11 @@ const server = {
855
1157
  campusId: campus?._id??campusDefault?._id,
856
1158
  departmentId: _department?._id??departmentDefault?._id,
857
1159
  modifiedById,
858
- createdById
1160
+ createdById,
1161
+ migratedAt,
1162
+ migratedTable,
1163
+ referenceId,
1164
+ isMigrated
859
1165
  })
860
1166
  }
861
1167
 
@@ -969,6 +1275,11 @@ const server = {
969
1275
  let modifiedById = userMail?._id
970
1276
  let createdById = userMail?._id
971
1277
 
1278
+ let migratedAt = new Date() //present date of the migration
1279
+ let migratedTable = 'Rooms' // sql counterpart main table
1280
+ let referenceId = _room?.id // id of the data
1281
+ let isMigrated = true
1282
+
972
1283
  let name = _room?.name
973
1284
  let campusId = _campus?._id??_campusDefault?._id??null
974
1285
 
@@ -997,7 +1308,11 @@ const server = {
997
1308
  campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
998
1309
  capacity,
999
1310
  modifiedById,
1000
- createdById
1311
+ createdById,
1312
+ migratedAt,
1313
+ migratedTable,
1314
+ referenceId,
1315
+ isMigrated
1001
1316
  })
1002
1317
  }
1003
1318
 
@@ -1093,6 +1408,11 @@ const server = {
1093
1408
  let modifiedById = userMail?._id
1094
1409
  let createdById = userMail?._id
1095
1410
 
1411
+ let migratedAt = new Date() //present date of the migration
1412
+ let migratedTable = 'AcademicYears' // sql counterpart main table
1413
+ let referenceId = _acadyear?.id // id of the data
1414
+ let isMigrated = true
1415
+
1096
1416
 
1097
1417
  if(uFrom.has(from) && uTo.has(to)){
1098
1418
  const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
@@ -1119,7 +1439,11 @@ const server = {
1119
1439
  to,
1120
1440
  modifiedById,
1121
1441
  createdById,
1122
- default: isDefault
1442
+ default: isDefault,
1443
+ migratedAt,
1444
+ migratedTable,
1445
+ referenceId,
1446
+ isMigrated
1123
1447
  })
1124
1448
  }
1125
1449
 
@@ -1247,6 +1571,11 @@ const server = {
1247
1571
  let departmentId = _department?._id??departmentDefault?._id
1248
1572
  let description = _description
1249
1573
 
1574
+ let migratedAt = new Date() //present date of the migration
1575
+ let migratedTable = 'Subjects' // sql counterpart main table
1576
+ let referenceId = _subjects?.subject_id // id of the data
1577
+ let isMigrated = true
1578
+
1250
1579
  if(uCode.has(code) && uName.has(name) && uDescription.has(description) && uUnits.has(units) && uDept.has(departmentId)){
1251
1580
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [units: ${units}, departmentId: ${departmentId}]`
1252
1581
  if(!uniqueErrors.has(errorMsg)){
@@ -1279,10 +1608,10 @@ const server = {
1279
1608
  description,
1280
1609
  modifiedById,
1281
1610
  createdById,
1282
- // migratedAt,
1283
- // migratedTable,
1284
- // referenceId,
1285
- // isMigrated
1611
+ migratedAt,
1612
+ migratedTable,
1613
+ referenceId,
1614
+ isMigrated
1286
1615
  })
1287
1616
  }
1288
1617
 
@@ -1395,6 +1724,11 @@ const server = {
1395
1724
 
1396
1725
  let days = null
1397
1726
 
1727
+ let migratedAt = new Date() //present date of the migration
1728
+ let migratedTable = 'Schedules' // sql counterpart main table
1729
+ let referenceId = _schedule?.schedule_id // id of the data
1730
+ let isMigrated = true
1731
+
1398
1732
  if (dayHandler.length > 1) {
1399
1733
  days = dayHandler[0].split('').map(day => dayMappings[day]).join(', ');
1400
1734
  } else {
@@ -1433,12 +1767,11 @@ const server = {
1433
1767
  to : etFormat??to,
1434
1768
  days,
1435
1769
  modifiedById,
1436
- createdById
1437
-
1438
- // migratedAt,
1439
- // migratedTable,
1440
- // referenceId,
1441
- // isMigrated
1770
+ createdById,
1771
+ migratedAt,
1772
+ migratedTable,
1773
+ referenceId,
1774
+ isMigrated
1442
1775
  })
1443
1776
  }
1444
1777
  } catch (error) {
@@ -1481,6 +1814,7 @@ const server = {
1481
1814
  },
1482
1815
 
1483
1816
  async Student(){
1817
+ let userIds = []
1484
1818
  try {
1485
1819
  console.log("");
1486
1820
  console.log("########################################################")
@@ -1489,8 +1823,15 @@ const server = {
1489
1823
  console.log("");
1490
1824
 
1491
1825
  const db_schema = schema
1826
+ let maxIdsU = await Users.max('_id'); //Fetch maximum _id directly from the Users model
1492
1827
  let maxIds = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1828
+
1493
1829
  let maxId = maxIds|| 0;
1830
+ let maxIdU = maxIdsU|| 0;
1831
+
1832
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
1833
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxIdU + 1}`);
1834
+
1494
1835
  await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Students__id_seq"`);
1495
1836
  await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
1496
1837
 
@@ -1511,7 +1852,18 @@ const server = {
1511
1852
  let errorCounter = 0
1512
1853
  let uniqueErrors = new Set()
1513
1854
 
1514
- const emailDomain = 'default.msc.edu.ph';
1855
+ let uEmail = new Set()
1856
+ let uPass = new Set()
1857
+ let uTPass = new Set()
1858
+ let uULname = new Set()
1859
+ let uUFname = new Set()
1860
+ let uUMname = new Set()
1861
+ let uScopes = new Set()
1862
+
1863
+ let newUser = []
1864
+
1865
+ const exUser = await Users.findAll()
1866
+ const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
1515
1867
 
1516
1868
  let uNum = new Set()
1517
1869
  let uLname = new Set()
@@ -1534,10 +1886,237 @@ const server = {
1534
1886
  let _campus = campusSeq.find(a => a.name === _student?.campus)
1535
1887
  let _course = courseSeq.find(b => b.name === _student?.course)
1536
1888
  let _college = collegeSeq.find(c => c.name === _student?.college)
1889
+
1890
+ let modifiedById = userMail?._id
1891
+ let createdById = userMail?._id
1892
+
1893
+ let fromPrompts = await Picked()
1894
+
1895
+ // let semester = "2nd Semester"
1896
+ let semester = fromPrompts.semester
1897
+ let yearsFrom = fromPrompts.yearFrom
1898
+ let yearsTo = fromPrompts.yearTo
1899
+
1900
+ let _semester = semesterSeq.find(sem => sem.code === semester)
1901
+ let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1902
+
1903
+ let studentNumber = _student?.student_number
1904
+ let firstName = _student?.first_name
1905
+ let lastName = _student?.last_name
1906
+ let middleName = _student?.middle_name
1907
+ let courseId = _course?._id??courseDefault?._id
1908
+ let campusId = _campus?._id??campusDefault?._id
1909
+
1910
+ let getUserName = Mixins.generateUsername(firstName, lastName)
1911
+ let email = `${getUserName}@msumarinduque.edu.ph`
1912
+ let password = `${getUserName}`
1913
+ let temporaryPassword = password
1914
+ let adminScopes = []
1915
+
1916
+ let migratedAt = new Date() //present date of the migration
1917
+ let migratedTable = 'Students' // sql counterpart main table
1918
+ let referenceId = _student?.id // id of the data
1919
+ let isMigrated = true
1920
+
1921
+ if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
1922
+ const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
1923
+ if(!uniqueErrors.has(errorMsg)){
1924
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1925
+ uniqueErrors.add(errorMsg)
1926
+ // errorCounter++
1927
+ }
1928
+ }
1929
+ else if (exUserMap.has(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)){
1930
+ const exUser = exUserMap.get(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)
1931
+ const errorMsg = `Existing Data Found: [${exUser.email} - ${exUser.password} ${exUser.temporaryPassword}] - ${exUser.lastName}, ${exUser.firstName} ${exUser.middleName} ${exUser.adminScopes}`
1932
+ if(!uniqueErrors.has(errorMsg)){
1933
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1934
+ uniqueErrors.add(errorMsg)
1935
+ // errorCounter++
1936
+ }
1937
+ }
1938
+ else{
1939
+ uEmail.add(email)
1940
+ uPass.add(password)
1941
+ uTPass.add(temporaryPassword)
1942
+ uULname.add(lastName)
1943
+ uUFname.add(firstName)
1944
+ uUMname.add(middleName)
1945
+ uScopes.add(adminScopes)
1946
+ newUser.push({
1947
+ firstName: _student?.first_name,
1948
+ lastName: _student?.last_name,
1949
+ middleName: _student?.middle_name,
1950
+ password: password,
1951
+ temporaryPassword: password,
1952
+ email,
1953
+ modifiedById,
1954
+ createdById,
1955
+ adminScopes,
1956
+ })
1957
+ }
1958
+
1959
+ if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1960
+ const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
1961
+ if(!uniqueErrors.has(errorMsg)){
1962
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1963
+ uniqueErrors.add(errorMsg)
1964
+ errorCounter++
1965
+ }
1966
+ }
1967
+ else if ( exStudentMap.has(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)){
1968
+ const exStudent = exStudentMap.get(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)
1969
+ const errorMsg = `Existing Data Found:[${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`
1970
+ if(!uniqueErrors.has(errorMsg)){
1971
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1972
+ uniqueErrors.add(errorMsg)
1973
+ errorCounter++
1974
+ }
1975
+ }
1976
+ else{
1977
+ uNum.add(studentNumber)
1978
+ uLname.add(lastName)
1979
+ uMname.add(middleName)
1980
+ uFname.add(firstName)
1981
+ uCourse.add(courseId)
1982
+ uCampus.add(campusId)
1983
+ newStudent.push({
1984
+ studentNumber: _student?.student_number,
1985
+ firstName: _student?.first_name,
1986
+ lastName: _student?.last_name,
1987
+ middleName: _student?.middle_name,
1988
+ email: email,
1989
+ courseId: _course?._id??courseDefault?._id,
1990
+ campusId: _campus?._id??campusDefault?._id,
1991
+ collegeId: _college?._id??collegeDefault?._id,
1992
+ admittedYearId: _acadYear?._id ?? null,
1993
+ admittedSemId: _semester?._id ?? null,
1994
+ modifiedById,
1995
+ createdById,
1996
+ migratedAt,
1997
+ migratedTable,
1998
+ // referenceId,
1999
+ isMigrated
2000
+ })
2001
+ }
1537
2002
 
1538
- const getLastName = _student?.last_name.toLowerCase().replace(/\s/g, '') ?? "";
2003
+ } catch (error) {
2004
+ logger.error(`Error occurred: ${error.stack} ${error}`);
2005
+ }
2006
+ }
2007
+
2008
+ if (newUser.length > 0) {
2009
+ const createdUser = await Users.bulkCreate(newUser, {returning: true})
2010
+ userIds = createdUser.map(_user => _user._id) // Remove const or let
2011
+ createdCounter += newUser.length
2012
+ newUser.forEach((user, index) => {
2013
+ // logger.info(`${index + 1}/${index + 1}: New Student User Record Created: [${user.email} - ${user.password} ${user.temporaryPassword}] - ${user.lastName}, ${user.firstName} ${user.middleName} ${user.adminScopes}`)
2014
+ });
2015
+ }
2016
+
2017
+ if (newStudent.length > 0) {
2018
+ // Associate userIds with new students
2019
+ newStudent = newStudent.map((exStudent, index) => ({
2020
+ ...exStudent,
2021
+ userId: userIds[index]
2022
+ }));
2023
+
2024
+ await Students.bulkCreate(newStudent);
2025
+ createdCounter += newStudent.length;
2026
+
2027
+ newStudent.forEach((exStudent, index) => {
2028
+ logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`)
2029
+ });
2030
+ }
2031
+
2032
+ // if (newStudent.length > 0) {
2033
+ // await Students.bulkCreate(newStudent)
2034
+ // createdCounter += newStudent.length
2035
+
2036
+ // newStudent.forEach((exStudent, index) => {
2037
+ // logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`)
2038
+ // });
2039
+ // }
2040
+
2041
+ console.log("");
2042
+ console.log("########################################################")
2043
+ console.log("")
2044
+ logger.info('Student Data Migration Completed');
2045
+ logger.info(`Total successful Student records created: ${createdCounter}/${createdCounter}`);
2046
+ logger.info(`Total Student Error Records: ${errorCounter}/${errorCounter}`);
2047
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
2048
+ console.log("")
2049
+ console.log("########################################################")
2050
+ console.log("")
2051
+
2052
+ let totalSummary = {
2053
+ itemLength: createdCounter + errorCounter,
2054
+ error: errorCounter,
2055
+ success: createdCounter
2056
+ }
2057
+ return totalSummary
2058
+
2059
+ } catch (error) {
2060
+ logger.error(`Error occurred: ${error.stack} ${error}`);
2061
+
2062
+ }
2063
+ },
1539
2064
 
1540
- let email = `${_student?.student_number}_${getLastName}@${emailDomain}`;
2065
+ async Studentsss(){
2066
+ try {
2067
+ console.log("");
2068
+ console.log("########################################################")
2069
+ console.log(" Students Migration ")
2070
+ console.log("########################################################")
2071
+ console.log("");
2072
+
2073
+ const db_schema = schema
2074
+ let maxIds = await Students.max('_id'); // Fetch maximum _id directly from the Students model
2075
+ let maxId = maxIds|| 0;
2076
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Students__id_seq"`);
2077
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
2078
+
2079
+ const studentApi = await api.Student()
2080
+
2081
+ const campusSeq = await Campuses.findAll()
2082
+ const courseSeq = await Courses.findAll()
2083
+ const collegeSeq = await Colleges.findAll()
2084
+ const semesterSeq = await Semesters.findAll()
2085
+ const acadYearSeq = await AcademicYears.findAll()
2086
+ const userSeq = await Users.findAll()
2087
+
2088
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
2089
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
2090
+ const courseDefault = await Courses.findOne({ where: { name: 'Course Default' } });
2091
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
2092
+
2093
+ let createdCounter = 0
2094
+ let errorCounter = 0
2095
+ let uniqueErrors = new Set()
2096
+
2097
+ let uNum = new Set()
2098
+ let uLname = new Set()
2099
+ let uMname = new Set()
2100
+ let uFname = new Set()
2101
+ let uCourse = new Set()
2102
+ let uCampus = new Set()
2103
+
2104
+ let newStudent = []
2105
+
2106
+ const exStudent = await Students.findAll()
2107
+ const exStudentMap = new Map(exStudent.map(student => [`[${student.studentNumber}] - ${student.lastName}, ${student.firstName} ${student.middleName} [${student.courseId}, ${student.campusId}]`, student]))
2108
+
2109
+ const {data} = studentApi
2110
+
2111
+ for (let i = 0; i < data.length; i++){
2112
+ try {
2113
+ let _student = data[i]
2114
+
2115
+ let _campus = campusSeq.find(a => a.name === _student?.campus)
2116
+ let _course = courseSeq.find(b => b.name === _student?.course)
2117
+ let _college = collegeSeq.find(c => c.name === _student?.college)
2118
+
2119
+ let findUser = await userSeq.find( f => f.lastName === _student?.last_name && f.firstName === _student?.first_name && f.middleName === _student?.middle_name)
1541
2120
 
1542
2121
  let modifiedById = userMail?._id
1543
2122
  let createdById = userMail?._id
@@ -1559,6 +2138,12 @@ const server = {
1559
2138
  let courseId = _course?._id??courseDefault?._id
1560
2139
  let campusId = _campus?._id??campusDefault?._id
1561
2140
 
2141
+ let getUserName = Mixins.generateUsername(firstName, lastName)
2142
+ let email = `${getUserName}@msumarinduque.edu.ph`
2143
+
2144
+ let userId = findUser?._id
2145
+
2146
+
1562
2147
  if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1563
2148
  const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
1564
2149
  if(!uniqueErrors.has(errorMsg)){
@@ -1596,6 +2181,7 @@ const server = {
1596
2181
  admittedSemId: _semester?._id ?? null,
1597
2182
  modifiedById,
1598
2183
  createdById,
2184
+ userId
1599
2185
  })
1600
2186
  }
1601
2187
 
@@ -1655,6 +2241,7 @@ const server = {
1655
2241
 
1656
2242
  const subjectApi = await api.Subject();
1657
2243
  const instructorApi = await api.Instructor()
2244
+ const sectionApi = await api.Section()
1658
2245
 
1659
2246
  const subjectSeq = await Subjects.findAll();
1660
2247
  const instructorSeq = await Instructors.findAll()
@@ -1711,6 +2298,8 @@ const server = {
1711
2298
  let _insdepartment = acadDeptSeq.find(idep => idep.name === _instructor?.department_name)
1712
2299
 
1713
2300
 
2301
+ let _sections = sectionApi.find(sect => sect.name === sections)
2302
+
1714
2303
  if (!_subject) {
1715
2304
  // console.error(`Subject with code ${subjects} not found.`);
1716
2305
  continue;
@@ -1745,6 +2334,11 @@ const server = {
1745
2334
  let departmentId = _insdepartment?._id??null
1746
2335
  let campusId = _campus?._id??null
1747
2336
 
2337
+ let migratedAt = new Date() //present date of the migration
2338
+ let migratedTable = 'Sections' // sql counterpart main table
2339
+ let referenceId = _sections?.id // id of the data
2340
+ let isMigrated = true
2341
+
1748
2342
 
1749
2343
  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)){
1750
2344
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [subjectId: ${subjectId}, instructorId: ${instructorId}]`
@@ -1786,6 +2380,10 @@ const server = {
1786
2380
  departmentId: _insdepartment?._id??null,
1787
2381
  modifiedById,
1788
2382
  createdById,
2383
+ migratedAt,
2384
+ migratedTable,
2385
+ referenceId,
2386
+ isMigrated
1789
2387
  })
1790
2388
  }
1791
2389
 
@@ -1908,6 +2506,11 @@ const server = {
1908
2506
  let modifiedById = userMail?._id;
1909
2507
  let createdById = userMail?._id;
1910
2508
 
2509
+ let migratedAt = new Date() //present date of the migration
2510
+ let migratedTable = 'campuses' // sql counterpart main table
2511
+ let referenceId = _campus?.id // id of the data
2512
+ let isMigrated = true
2513
+
1911
2514
  for (let j = 0; j < _students.length; j++){
1912
2515
  let instrcutor = _students[j].faculty_id
1913
2516
  let sections = _students[j].section_name
@@ -1977,6 +2580,7 @@ const server = {
1977
2580
  remarks = "FAILED"
1978
2581
  overAllStatus = "FAILED"
1979
2582
  }
2583
+
1980
2584
 
1981
2585
  let studentId = student?._id
1982
2586
  let courseId = course?._id
@@ -2126,6 +2730,11 @@ const server = {
2126
2730
  let modifiedById = userMail?._id;
2127
2731
  let createdById = userMail?._id;
2128
2732
 
2733
+ let migratedAt = new Date() //present date of the migration
2734
+ let migratedTable = 'Students' // sql counterpart main table
2735
+ let referenceId = _student?.id // id of the data
2736
+ let isMigrated = true
2737
+
2129
2738
  for (let j = 0; j < _students.length; j++){
2130
2739
 
2131
2740
  let instrcutor = _students[j].faculty_id
@@ -2220,6 +2829,10 @@ const server = {
2220
2829
  overAllStatus,
2221
2830
  createdById,
2222
2831
  modifiedById,
2832
+ migratedAt,
2833
+ migratedTable,
2834
+ // referenceId,
2835
+ isMigrated
2223
2836
  },
2224
2837
  default:{
2225
2838
 
@@ -2312,10 +2925,12 @@ module.exports = {
2312
2925
  AcademicDepartments: server.AcademicDepartment,
2313
2926
  Course: server.Course,
2314
2927
  Room: server.Room,
2928
+ UserInstructor: server.UserInstructor,
2315
2929
  Instructor: server.Instructor,
2316
2930
  AcademicYear: server.AcademicYear,
2317
2931
  Subject: server.Subject,
2318
2932
  Schedule: server.Schedule,
2933
+ UserStudents: server.UserStudents,
2319
2934
  Student: server.Student,
2320
2935
  Section: server.Section,
2321
2936
  EnrolledStudent: server.EnrolledStudent,