lms-sync 1.0.70 → 1.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -91,48 +91,49 @@ const server = {
91
91
  defaults: yearDefPayload
92
92
  });
93
93
 
94
- let semesterData = [
95
- {
96
- code: '1st Semester',
97
- description: '1st Semester',
98
- modifiedById: userMail?._id,
99
- createdById: userMail?._id
100
- },
101
- {
102
- code: '2nd Semester',
103
- description: '2nd Semester',
104
- modifiedById: userMail?._id,
105
- createdById: userMail?._id
106
- },
107
- {
108
- code: 'Summer',
109
- description: 'Summer',
110
- modifiedById: userMail?._id,
111
- createdById: userMail?._id
112
- },
113
- {
114
- code: 'School Year',
115
- description: 'School Year',
116
- modifiedById: userMail?._id,
117
- createdById: userMail?._id
118
- }
119
- ]
120
-
121
- for (let sem = 0; sem < semesterData.length; sem++) {
122
- const semesters = semesterData[sem];
94
+ // let semesterData = [
95
+ // {
96
+ // code: '1st Semester',
97
+ // description: '1st Semester',
98
+ // modifiedById: userMail?._id,
99
+ // createdById: userMail?._id
100
+ // },
101
+ // {
102
+ // code: '2nd Semester',
103
+ // description: '2nd Semester',
104
+ // modifiedById: userMail?._id,
105
+ // createdById: userMail?._id
106
+ // },
107
+ // {
108
+ // code: 'Summer',
109
+ // description: 'Summer',
110
+ // modifiedById: userMail?._id,
111
+ // createdById: userMail?._id
112
+ // },
113
+ // {
114
+ // code: 'School Year',
115
+ // description: 'School Year',
116
+ // modifiedById: userMail?._id,
117
+ // createdById: userMail?._id
118
+ // }
123
119
 
124
- let semestersPayload = {
125
- code: semesters.code,
126
- description: semesters.description,
127
- modifiedById: userMail?._id,
128
- createdById: userMail?._id
129
- }
120
+ // ]
130
121
 
131
- let [semdefaults, semcreateddef] = await Semesters.findOrCreate({
132
- where: { code: semestersPayload.code},
133
- defaults: semestersPayload
134
- });
135
- }
122
+ // for (let sem = 0; sem < semesterData.length; sem++) {
123
+ // const semesters = semesterData[sem];
124
+
125
+ // let semestersPayload = {
126
+ // code: semesters.code,
127
+ // description: semesters.description,
128
+ // modifiedById: userMail?._id,
129
+ // createdById: userMail?._id
130
+ // }
131
+
132
+ // let [semdefaults, semcreateddef] = await Semesters.findOrCreate({
133
+ // where: { code: semestersPayload.code},
134
+ // defaults: semestersPayload
135
+ // });
136
+ // }
136
137
 
137
138
  const campusApi = await api.Campus()
138
139
 
@@ -1462,6 +1463,130 @@ const server = {
1462
1463
  }
1463
1464
  },
1464
1465
 
1466
+ async Semester(){
1467
+ try {
1468
+ await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
1469
+
1470
+ console.log("");
1471
+ console.log("########################################################")
1472
+ console.log(" Semesters Migration ")
1473
+ console.log("########################################################")
1474
+ console.log("");
1475
+
1476
+ const db_schema = schema
1477
+ let maxIds = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
1478
+ let maxId = maxIds|| 0;
1479
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Semesters__id_seq"`);
1480
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Semesters__id_seq" RESTART WITH ${maxId + 1}`);
1481
+ await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
1482
+
1483
+ const acadYearApi = await api.AcademicYear()
1484
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1485
+
1486
+ let createdCounter = 0
1487
+ let errorCounter = 0
1488
+ let uniqueErrors = new Set()
1489
+
1490
+ const { acadYearResult, currentSchoolYear } = acadYearApi;
1491
+
1492
+
1493
+ let uCode = new Set()
1494
+ let uDesc = new Set()
1495
+
1496
+ let newYears = []
1497
+
1498
+ const exYear = await Semesters.findAll()
1499
+ const exYearMap = new Map(exYear.map(sem => [`[${sem.code}] ${sem.description}`, sem]))
1500
+
1501
+
1502
+ for (let i = 0; i < acadYearResult.length; i++){
1503
+ try {
1504
+ let _acadyear = acadYearResult[i]
1505
+
1506
+ let modifiedById = userMail?._id
1507
+ let createdById = userMail?._id
1508
+
1509
+ let migratedAt = new Date() //present date of the migration
1510
+ let migratedTable = 'AcademicYears' // sql counterpart main table
1511
+ let referenceId = _acadyear?.id // id of the data
1512
+ let isMigrated = true
1513
+
1514
+ let code = _acadyear?.term
1515
+ let description = _acadyear?.term
1516
+
1517
+
1518
+ if(uCode.has(code) && uDesc.has(description)){
1519
+ const errorMsg = `Duplicate Payload Found: [${code}] ${description}]`
1520
+ if(!uniqueErrors.has(errorMsg)){
1521
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1522
+ uniqueErrors.add(errorMsg)
1523
+ errorCounter++
1524
+ }
1525
+ }
1526
+ else if ( exYearMap.has(`[${code}] ${description}`)){
1527
+ const exYear = exYearMap.get(`[${code}] ${description}`)
1528
+ const errorMsg = `Existing Data Found:[${exYear.code}] ${exYear.description}]`
1529
+ if(!uniqueErrors.has(errorMsg)){
1530
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1531
+ uniqueErrors.add(errorMsg)
1532
+ errorCounter++
1533
+ }
1534
+ }
1535
+ else{
1536
+ uCode.add(code)
1537
+ uDesc.add(description)
1538
+ newYears.push({
1539
+ code,
1540
+ description,
1541
+ modifiedById,
1542
+ createdById,
1543
+ migratedAt,
1544
+ migratedTable,
1545
+ referenceId,
1546
+ isMigrated
1547
+ })
1548
+ }
1549
+
1550
+ } catch (error) {
1551
+ ;
1552
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1553
+ }
1554
+ }
1555
+
1556
+ if (newYears.length > 0) {
1557
+ await Semesters.bulkCreate(newYears)
1558
+ createdCounter += newYears.length
1559
+
1560
+ newYears.forEach((year, index) => {
1561
+ logger.info(`${index + 1}/${index + 1}: New Semesters Years Record Created: [${year.code} - ${year.description}]`)
1562
+ });
1563
+ }
1564
+
1565
+ console.log("");
1566
+ console.log("########################################################")
1567
+ console.log("")
1568
+ logger.info('Semesters Data Migration Completed');
1569
+ logger.info(`Total Successful Semesters Records Created: ${createdCounter}/${createdCounter}`);
1570
+ logger.info(`Total Existing Semesters Records: ${errorCounter}/${errorCounter}`);
1571
+ logger.info(`Total Records: ${createdCounter + errorCounter}`);
1572
+ console.log("")
1573
+ console.log("########################################################")
1574
+ console.log("")
1575
+
1576
+ let totalSummary = {
1577
+ itemLength: createdCounter + errorCounter,
1578
+ error: errorCounter,
1579
+ success: createdCounter
1580
+ }
1581
+ return totalSummary
1582
+
1583
+ } catch (error) {
1584
+ ;
1585
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1586
+
1587
+ }
1588
+ },
1589
+
1465
1590
  async Subject(){
1466
1591
  try {
1467
1592
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
@@ -1888,6 +2013,8 @@ const server = {
1888
2013
  let _course = courseSeq.find(b => b.name === _student?.course)
1889
2014
  let _college = collegeSeq.find(c => c.name === _student?.college)
1890
2015
 
2016
+ let _year = acadYearSeq.find(y => y.from === (_student?.admitted_year_id? _student?.admitted_year_id : null) )
2017
+
1891
2018
  let modifiedById = userMail?._id
1892
2019
  let createdById = userMail?._id
1893
2020
 
@@ -2591,6 +2718,7 @@ module.exports = {
2591
2718
  Instructor: server.Instructor,
2592
2719
  AcadDeptInstructor: server.AcadDeptInstructor,
2593
2720
  AcademicYear: server.AcademicYear,
2721
+ Semester: server.Semester,
2594
2722
  Subject: server.Subject,
2595
2723
  Schedule: server.Schedule,
2596
2724
  Student: server.Student,
@@ -11,6 +11,8 @@ async function promptYearSem() {
11
11
  message: 'Please Select Table:',
12
12
  choices: [
13
13
  { title: 'All Tables', value: 'AllTables' },
14
+ { title: 'AcademicYear', value: 'AcademicYear' },
15
+ { title: 'Semester', value: 'Semester' },
14
16
  { title: 'Campus', value: 'Campus' },
15
17
  { title: 'College', value: 'College' },
16
18
  { title: 'AcademicDepartments', value: 'AcademicDepartments' },
@@ -18,7 +20,6 @@ async function promptYearSem() {
18
20
  { title: 'Academic Department Instructors', value: 'AcadDeptInstructor' },
19
21
  { title: 'Course', value: 'Course' },
20
22
  { title: 'Room', value: 'Room' },
21
- { title: 'AcademicYear', value: 'AcademicYear' },
22
23
  { title: 'Subject', value: 'Subject' },
23
24
  { title: 'Schedule', value: 'Schedule' },
24
25
  { title: 'Student', value: 'Student' },
@@ -62,6 +62,22 @@ module.exports = (sequelize, DataTypes,schema) => {
62
62
  type: DataTypes.DATE,
63
63
  allowNull: true,
64
64
  },
65
+ migratedAt:{
66
+ type: DataTypes.DATE,
67
+ allowNull: true,
68
+ },
69
+ migratedTable:{
70
+ type: DataTypes.STRING,
71
+ allowNull: true,
72
+ },
73
+ referenceId:{
74
+ type: DataTypes.INTEGER,
75
+ allowNull: true,
76
+ },
77
+ isMigrated:{
78
+ type: DataTypes.BOOLEAN,
79
+ allowNull: true,
80
+ },
65
81
  },
66
82
  {
67
83
  sequelize,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lms-sync",
3
- "version": "1.0.70",
3
+ "version": "1.0.72",
4
4
  "description": "Migration App for MSC LMS",
5
5
  "main": "index.js",
6
6
  "scripts": {