lms-sync 1.0.70 → 1.0.71
Sign up to get free protection for your applications and to get access to all the features.
- package/apiConnections/mapping.js +168 -40
- package/apiConnections/tablePick.js +2 -1
- package/models/semesters.model.js +16 -0
- package/package.json +1 -1
@@ -91,48 +91,49 @@ const server = {
|
|
91
91
|
defaults: yearDefPayload
|
92
92
|
});
|
93
93
|
|
94
|
-
let semesterData = [
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
]
|
120
|
-
|
121
|
-
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
|
-
|
125
|
-
code: semesters.code,
|
126
|
-
description: semesters.description,
|
127
|
-
modifiedById: userMail?._id,
|
128
|
-
createdById: userMail?._id
|
129
|
-
}
|
120
|
+
// ]
|
130
121
|
|
131
|
-
|
132
|
-
|
133
|
-
|
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,
|