ZoeApi/controllers/appController.js

1642 lines
58 KiB
JavaScript

require('../connections/mysql-server');
require('../connections/sql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var routes = function () {
router.get('/checkFranchiseePortal', (req, res) => {
execSQLQuery(
`SELECT
franchiseeportal
FROM config;`,
res,
req.originalUrl
);
});
router.get('/changeFranchiseePortal/:estado', (req, res) => {
const estado = req.params.estado ? 1 : 0;
execSQLQuery(
`UPDATE config SET
franchiseeportal = ${estado}
WHERE idconfig = 1;`,
res,
req.originalUrl
);
});
router.get('/checkVersionApp', (req, res) => {
execSQLQuery(
`SELECT
versionapp
FROM config;`,
res,
req.originalUrl
);
});
router.get('/checkVersionRobot/:idrobot', (req, res) => {
let idrobot = req.params.idrobot;
let Caminho = Variables('src_media') + 'downloads/';
let fs = require('fs');
if (idrobot == 0) Caminho += 'ZoeRobot';
else if (idrobot == 1) Caminho += 'MiniRobot';
fs.readFile(Caminho + '/versao.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' success 200'
);
res.send(data);
});
//execSQLQuery('SELECT versionrobot, messagerobot FROM config;', res, req.originalUrl);
});
router.get('/getZoeRobots', (req, res) => {
mysqlConnection.query(
`SELECT * FROM zoerobots;`,
function (error, results, fields) {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' success 200'
);
res.send(JSON.stringify(results));
}
);
});
router.get('/getZoeRobotsApks/:idzoerobots', (req, res) => {
const idzoerobots = req.params.idzoerobots;
mysqlConnection.query(
`SELECT * FROM zoerobotsapks where idzoerobots = ${idzoerobots};`,
function (error, results, fields) {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' success 200'
);
res.send(`{"Aplicativos": ` + JSON.stringify(results) + `}`);
}
);
});
router.post('/insertZoeRobotsApks', (req, res) => {
const idzoerobots = req.body.idzoerobots;
const descricao = req.body.descricao;
const versao = req.body.versao;
const mensagem = req.body.mensagem;
const packagename = req.body.packagename;
const enderecoapk = req.body.enderecoapk;
const nomeinstalador = req.body.nomeinstalador;
const pasta = req.body.pasta;
execSQLQuery(
`insert into zoerobotsapks (idzoerobots, descricao, versao, mensagem, packagename, enderecoapk, nomeinstalador, pasta) values (?, ?, ?, ?, ?, ?, ?, ?);`,
res,
req.originalUrl,
[
idzoerobots,
descricao,
versao,
mensagem,
packagename,
enderecoapk,
nomeinstalador,
pasta,
]
);
});
router.delete('/deleteZoeRobotsApks/:idzoerobots', (req, res) => {
const idzoerobots = req.params.idzoerobots;
execSQLQuery(
`delete from zoerobotsapks WHERE idzoerobots = ${idzoerobots};`,
res,
req.originalUrl
);
});
router.post('/SetVersaoRobotFile/:idrobot', verifyJWT, (req, res) => {
let Caminho = Variables('src_media') + 'downloads/';
const fs = require('fs');
const Json = JSON.stringify(req.body);
const idrobot = parseInt(req.params.idrobot);
if (idrobot == 0) Caminho += 'ZoeRobot';
else if (idrobot == 1) Caminho += 'MiniRobot';
fs.writeFile(Caminho + '/versao.txt', Json, (err) => {
if (err) throw err;
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' success 200'
);
res.send(true);
});
});
router.get('/checkRobotCourses', (req, res) => {
execSQLQuery(
`SELECT
robotcourses
FROM config;`,
res,
req.originalUrl
);
});
router.post('/checkexistnotificationclose/:tk', verifyJWT, (req, res) => {
let idteacher = req.body.idteacher;
let db = req.body.db;
execSQLQuery2(
`
SELECT
IDNotificacoes,
IDChamadaAPP
FROM
${db}NotificacoesErroEnvioAPP
WHERE
IDInstrutor = ${idteacher}
AND
EnviarRespostaAPP = 1
AND
RespostaRecebidaAPP = 0
AND
IDChamadaAPP != NULL;`,
res,
req.originalUrl
);
});
router.post('/notificationsteacher/:tk', verifyJWT, (req, res) => {
let idteacher = req.body.idteacher;
let idcall = req.body.idcall;
let db = req.body.db;
execSQLQuery2(
`
SELECT
*
FROM
${db}NotificacoesErroEnvioAPP
WHERE
IDInstrutor = ${idteacher}
AND
IDChamadaAPP = ${idcall};`,
res,
req.originalUrl
);
});
router.post('/send/:tk', verifyJWT, (req, res) => {
let db = req.body.db;
let idteacher = req.body.idteacher;
let description = req.body.desc;
let date = req.body.date;
let students = req.body.students;
let content = req.body.content;
var StudentsIDs = students.split(',');
let Nomes = '';
let sqlQry = `
SELECT
*
FROM
${db}FuncionariosAcesso
WHERE
IDFuncionario = ${idteacher}
AND
DescricaoAcesso = '${description}'
AND
permitido = 1;`;
//Check user have permission to this
sqlServerConnection
.request()
.query(sqlQry, function (error, results, fields) {
if (!error && results.length != 0) {
//Check if date exist in TurmasCalendario
CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
0,
Nomes,
res,
content,
null
);
} else {
res.send(
'Funcionário não tem acesso a "Inclusão de Controle de Chamadas"'
);
}
});
/*if(checkAccessEmployee(db, idteacher, description)) {
var ResultTurmasCalendario = SeacrhCall(db, date, idteacher, idstudent);
res.send(ResultTurmasCalendario);
}
else {
res.send('Funcionário não tem acesso a "Inclusão de Controle de Chamadas"');
}*/
});
router.post('/checkclass/:tk', verifyJWT, (req, res) => {
let date = req.body.date;
let idstudent = req.body.idstudent;
let db = req.body.db;
execSQLQuery2(
`
SELECT top(1) *
FROM ${db}TurmasCalendario
where IDTurma = ${idstudent}
and Ministrado = 0
order by Data asc;`,
res,
req.originalUrl
);
});
router.post('/homeworkend', verifyJWT, (req, res) => {
const homework = req.body.homework;
const idstudent = parseInt(req.body.idstudent || req.body.idusers);
const idunits = parseInt(req.body.idunits);
const idclasses = parseInt(req.body.idclasses);
const SQLQry = `UPDATE stepclass SET
homework = (SELECT CASE WHEN r.qtde = 0 THEN 0 ELSE ${homework} END AS home FROM
(SELECT COUNT(*) AS qtde FROM stepclass WHERE idusers = ${idstudent} AND idunits = ${idunits} AND idclasses = ${idclasses} AND STR_TO_DATE(datefinal, '%d/%m/%Y') > NOW()) r)
WHERE idusers = ${idstudent} AND idunits = ${idunits} AND idclasses = ${idclasses};`;
mysqlConnection.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
res.send(200);
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' success 200'
);
} else {
res.send(500);
console.log(
new Date().toUTCString() +
' - ' +
req.originalUrl +
' fail 500 ' +
error
);
}
});
InsertUserStage(idstudent, idunits, idclasses, homework);
InsertNotes();
//InsertNotasDetalhes(idstudent, idunits, idclasses);
});
router.get('/InsertNotes', (req, res) => {
if (InsertNotes()) res.send({ error: null, response: false, status: 500 });
else res.send({ error: null, response: true, status: 200 });
});
router.get('/verifyCorrection/:idunits', verifyJWT, (req, res) => {
let idunits = req.params.idunits;
execSQLQuery(
`
SELECT
idusers,
idclasses,
homework,
datefinal
FROM
stepclass
WHERE
note IS NULL
AND
completedClass = 1
AND
idunits = ${idunits};`,
res,
req.originalUrl
);
});
router.post('/listQRcodesByAny/:tk', verifyJWT, (req, res) => {
var value = req.body.value;
var db = req.body.db;
execSQLQuery2(
`
SELECT
c.Nome,
mt.IDMatricula,
t.IdTurma
FROM
${db}Turmas t
INNER JOIN
${db}MatriculasTreinandos mt
ON
t.IdTurma = mt.CodigoTurma
INNER JOIN
${db}Clientes c
ON
c.IDCliente = mt.IDTreinando
INNER JOIN
${db}Matriculas m
ON
m.IDMatricula = mt.IDMatricula
WHERE
m.QRCode = '${value}';`,
res,
req.originalUrl
);
});
router.get('/linkStudent/:db/:idusers/:qrcode/:tk', (req, res) => {
let db = req.params.db;
let idusers = req.params.idusers;
let qrcode = req.params.qrcode;
let token = req.params.tk;
if (token == Variables('tk_fixed')) {
let sqlQry = `
SELECT
*
FROM
units
WHERE
reference_db = '${db}'
AND
enabled = 1;`;
mysqlConnection.query(sqlQry, function (error, results, fields) {
if (!error && results.length != 0) {
var idunits = results[0]['idunits'];
let sqlQry2 = `
UPDATE
qrcodes
SET
idusers = ${idusers},
idunits = ${idunits}
WHERE
_key = '${qrcode}'
AND
idusers is null;`;
execSQLQuery(sqlQry2, res, req.originalUrl);
} else {
res.send('not found');
}
});
} else {
res.status(500).send({ status: 'expired' });
}
});
router.get('/linkBarCode/:db/:idusers/:_key/:idcourses/:tk', (req, res) => {
let db = req.params.db;
let idusers = req.params.idusers;
let _key = req.params._key;
let idcourses = req.params.idcourses;
let token = req.params.tk;
if (token == Variables('tk_fixed')) {
let sqlQry = `
SELECT
*
FROM
units
WHERE
reference_db = '${db}'
AND
enabled = 1;`;
mysqlConnection.query(sqlQry, function (error, results, fields) {
if (!error && results.length != 0) {
var idunits = results[0]['idunits'];
let sqlQry2 = `
UPDATE
barcodes
SET
idusers = ${idusers},
idunits = ${idunits},
idcourses = ${idcourses}
WHERE
_key = '${_key}'
AND
idusers is null;`;
execSQLQuery(sqlQry2, res, req.originalUrl);
} else {
res.send('not found');
}
});
//execSQLQuery(sqlQry, res, req.originalUrl);
} else {
res.status(500).send({ status: 'expired' });
}
});
router.get('/getCuriosities/:tk', verifyJWT, (req, res) => {
execSQLQuery(`SELECT * FROM curiosities`, res, req.originalUrl);
});
router.get('/checkQR/:_key/:_token', (req, res) => {
let _key = req.params._key;
let token = req.params._token;
if (token != Variables('tk_fixed')) {
res.status(500).send({ status: 'expired' });
} else {
var sqlQry = `
SELECT
*
FROM
qrcodes
WHERE
_key = '${_key}';`;
mysqlConnection.query(sqlQry, function (error, results, fields) {
if (!error && results.length != 0) {
var ordem = results[0]['ordem'];
var idqrlotes = results[0]['idqrlotes'];
var src =
Variables('src_qrcodes') +
idqrlotes +
'/qr_' +
idqrlotes +
'_' +
ordem +
'.jpg';
var cmd = '';
if (results[0]['idusers']) cmd = 'N,';
else cmd = 'S,';
console.log("/checkQR/ success 200 - '" + cmd + src + "'");
res.send(cmd + src);
} else {
res.status(500).send('QRCode não encontrado');
}
});
}
});
router.get(
'/isLastClass/:idusers/:idunits/:idclasses',
verifyJWT,
(req, res) => {
let idusers = req.params.idusers;
let idunits = req.params.idunits;
let idclasses = req.params.idclasses;
execSQLQuery(
`update stepclass set
homework = 1
where (SELECT aval FROM classes WHERE idclasses = ${idclasses}) = 1
and idusers = ${idusers} and idunits = ${idunits} and idclasses = ${idclasses};`,
res,
req.originalUrl
);
setTimeout(() => {
InsertNotes();
setTimeout(() => {
InsertCourseNotes();
}, 200);
}, 500);
}
);
router.get(
'/checkHasStudentsToNotificate/:idteacher/:db',
verifyJWT,
(req, res) => {
console.log('/checkHasStudentsToNotificate success 200');
let idteacher = req.params.idteacher;
let db = req.params.db;
let sqlQuery = `
SELECT DISTINCT
tc.IdTurma, tc.CodigoCurso, tt.IDMatricula
FROM
${db}TurmasCalendario tc
INNER JOIN
${db}TreinandosTurmas tt
ON
tc.IdTurma = tt.CodigoTurma
AND
tc.CodigoCurso = tt.IDCurso
WHERE
tc.Ministrado = 1
AND
tc.CodigoInstrutor = ${idteacher};
`;
sqlServerConnection
.request()
.query(sqlQuery, function (error, results, fields) {
if (!error && results.length != 0) {
//res.send(results);
//console.log(results);
indexStudents = 0;
LoopStudentsOfTeacher(results, res, db, idteacher);
} else {
res.send(false);
}
});
}
);
router.post('/insertScoregame/:tk', (req, res) => {
let token = req.params.tk;
if (token != Variables('tk_fixed')) {
res.status(500).send({ status: 'expired' });
return;
}
let cidade = '';
let jogador = req.body.jogador;
let pontuacao = req.body.pontuacao;
let idgames = 1;
execSQLQuery(
`INSERT INTO scoregames (cidade, jogador, pontuacao, idgames) VALUES ('${cidade}', '${jogador}', ${pontuacao}, ${idgames});`,
res,
req.originalUrl
);
});
router.post('/updateScoregame/:tk', (req, res) => {
let token = req.params.tk;
if (token != Variables('tk_fixed')) {
res.status(500).send({ status: 'expired' });
return;
}
let cidade = '';
let jogador = req.body.jogador;
let pontuacao = req.body.pontuacao;
let idgames = 1;
execSQLQuery(
`UPDATE scoregames SET pontuacao = ${pontuacao} WHERE jogador = '${jogador}' AND idgames = ${idgames};`,
res,
req.originalUrl
);
});
router.get('/listScoregame/:tk/:idgames', (req, res) => {
let token = req.params.tk;
let idgames = req.params.idgames;
if (token != Variables('tk_fixed')) {
res.status(500).send({ status: 'expired' });
return;
}
execSQLQuery(
`SELECT jogador, pontuacao FROM scoregames WHERE idgames = ${idgames} ORDER BY pontuacao ASC;`,
res,
req.originalUrl
);
});
router.get('/InsertCourseNotes', (req, res) => {
if (InsertCourseNotes())
res.send({ error: null, response: false, status: 500 });
else res.send({ error: null, response: true, status: 200 });
});
router.post('/DesativarAluno', (req, res) => {
const idunits = parseInt(req.body.idunits);
const idusers = parseInt(req.body.idusers);
execSQLQuery(
`insert into alunosdesativados (idunits, idusers) values (${idunits}, ${idusers});`,
res,
req.originalUrl
);
});
router.get('/MudarAlunoDesativado/:idunits/:idusers', (req, res) => {
const idunits = parseInt(req.params.idunits);
const idusers = parseInt(req.params.idusers);
execSQLQuery(
`update alunosdesativados set
desativado = !desativado
where idunits = ${idunits} and idusers = ${idusers};`,
res,
req.originalUrl
);
});
router.get('/MudarAlunoDesativadoP/:idunits/:idusers', (req, res) => {
const idunits = parseInt(req.params.idunits);
const idusers = parseInt(req.params.idusers);
execSQLQuery(
`update usershomework set
disabled = !disabled
where idunits = ${idunits} and idusers = ${idusers};`,
res,
req.originalUrl
);
});
router.get('/InserirNotasSQLServer', (req, res) => {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - initing...'
);
let SqlQueryUnidades = `select
idunits,
unityname as 'Unidade',
concat(reference_db, '.dbo.') as 'db'
from units
where enabled = 1
order by unityname asc;`;
mysqlConnection.query(SqlQueryUnidades, function (error, Unidades, fields) {
PreencherNotasSQLServer(Unidades, 0, function (Unidades) {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - finished'
);
res.send(Unidades);
});
});
});
router.get('/InserirRespostasAlunos', (req, res) => {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - initing...'
);
let SqlQueryUnidades = `select
idunits,
unityname as 'Unidade',
concat(reference_db, '.dbo.') as 'db'
from units
where enabled = 1
order by unityname asc;`;
mysqlConnection.query(SqlQueryUnidades, function (error, Unidades, fields) {
let SqlQueryRespostas = `select distinct
cc.idclasses,
ea.idexerciseanswers
from classescontent cc
inner join exercisequestions eq on eq.idexercises = cc.idexercises
inner join exerciseanswers ea on ea.idexercisequestions = eq.idexercisequestions
where ea.iscorrect = 1;`;
mysqlConnection.query(
SqlQueryRespostas,
function (error, Respostas, fields) {
PreencherAulas(Unidades, Respostas, 0, function (Unidades) {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - finished'
);
res.send(Unidades);
});
}
);
});
});
function PreencherAulas(Unidades, Respostas, Index, callback) {
if (Index < Unidades.length) {
console.log(
'Analisando unidade ' +
(Index + 1) +
' de ' +
Unidades.length +
' (' +
Unidades[Index]['Unidade'] +
')'
);
Unidades[Index]['AulaAluno'] = [];
let SqlQueryMySQL = `select * from (
select
sc.idusers,
sc.idunits,
sc.idclasses,
sc.note,
ExA.Questoes,
count(ug.idusergivenanswers) as 'Respostas'
from stepclass sc
inner join (select distinct
cl.idclasses,
cl.name as 'Aula',
count(cc.idexercises) as 'Questoes'
from classes cl
inner join courses co on co.idcourses = cl.idcourses
inner join classescontent cc on cc.idclasses = cl.idclasses
left join exercisequestions eq on eq.idexercises = cc.idexercises
where co.idtypescourse in (1,2,3)
group by cl.idclasses, cc.idclasses
order by cl.idclasses asc) ExA on sc.idclasses = ExA.idclasses and ExA.Questoes > 0
left join usergivenanswers ug on ug.idunits = sc.idunits and ug.idusers = sc.idusers and ug.idclasses = sc.idclasses
where sc.idunits = ${Unidades[Index]['idunits']} and sc.completedClass = 1 and (now() >= date_add(convert(sc.dateinicial, date), interval 7 day) or sc.homework is not null)
group by sc.idusers, sc.idunits, sc.idclasses) R
where R.Respostas = 0;`;
mysqlConnection.query(SqlQueryMySQL, function (error, AulaAluno, fields) {
Unidades[Index]['AulaAluno'] = AulaAluno;
if (AulaAluno && AulaAluno.length > 0) {
Unidades[Index][
'SQLRes'
] = `insert into usergivenanswers (idusergivenanswers, idusers, idexerciseanswers, date_answered, fixed, idclasses, idunits) values `;
Unidades[Index]['SQLNot'] = `update stepclass set note = null where `;
} else {
Unidades[Index]['SQLRes'] = 'select 1;';
Unidades[Index]['SQLNot'] = 'select 1 ;';
}
for (let i = 0; i < Unidades[Index]['AulaAluno'].length; i++) {
Unidades[Index][
'SQLNot'
] += `(idusers = ${Unidades[Index]['AulaAluno'][i]['idusers']} and idunits = ${Unidades[Index]['AulaAluno'][i]['idunits']} and idclasses = ${Unidades[Index]['AulaAluno'][i]['idclasses']}) or `;
for (let o = 0; o < Respostas.length; o++) {
if (
Respostas[o].idclasses ==
Unidades[Index]['AulaAluno'][i]['idclasses']
) {
Unidades[Index][
'SQLRes'
] += `((select ug1.idusergivenanswers + 1 from usergivenanswers ug1 order by ug1.idusergivenanswers desc limit 1), ${Unidades[Index]['AulaAluno'][i]['idusers']}, ${Respostas[o]['idexerciseanswers']}, '25/01/2021', 1, ${Unidades[Index]['AulaAluno'][i]['idclasses']}, ${Unidades[Index]['AulaAluno'][i]['idunits']}),`;
}
}
}
Unidades[Index]['SQLRes'] =
Unidades[Index]['SQLRes'].substring(
0,
Unidades[Index]['SQLRes'].length - 1
) + ';';
Unidades[Index]['SQLNot'] =
Unidades[Index]['SQLNot'].substring(
0,
Unidades[Index]['SQLNot'].length - 4
) + ';';
mysqlConnection.query(
Unidades[Index]['SQLRes'],
function (error, insRespostas, fields) {
mysqlConnection.query(
Unidades[Index]['SQLNot'],
function (error, updNotas, fields) {
Index++;
PreencherAulas(Unidades, Respostas, Index, callback);
}
);
}
);
});
} else {
callback(Unidades);
}
}
router.get('/RemoverRespostasAlunos', (req, res) => {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - initing...'
);
let SqlQueryUnidades = `select
idunits,
unityname as 'Unidade',
concat(reference_db, '.dbo.') as 'db'
from units
where enabled = 1
order by unityname asc;`;
mysqlConnection.query(SqlQueryUnidades, function (error, Unidades, fields) {
RemoverAulas(Unidades, 0, function (Unidades) {
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - finished'
);
res.send(Unidades);
});
});
});
function RemoverAulas(Unidades, Index, callback) {
if (Index < Unidades.length) {
console.log(
'Analisando unidade ' +
(Index + 1) +
' de ' +
Unidades.length +
' (' +
Unidades[Index]['Unidade'] +
')'
);
Unidades[Index]['AulaAluno'] = [];
let SqlQueryMySQL = `select * from (
select
sc.idusers,
sc.idunits,
sc.idclasses,
sc.note,
ExA.Questoes,
count(ug.idusergivenanswers) as 'Respostas'
from stepclass sc
inner join (select distinct
cl.idclasses,
cl.name as 'Aula',
count(cc.idexercises) as 'Questoes'
from classes cl
inner join courses co on co.idcourses = cl.idcourses
inner join classescontent cc on cc.idclasses = cl.idclasses
left join exercisequestions eq on eq.idexercises = cc.idexercises
where co.idtypescourse in (1,2,3)
group by cl.idclasses, cc.idclasses
order by cl.idclasses asc) ExA on sc.idclasses = ExA.idclasses and ExA.Questoes > 0
left join usergivenanswers ug on ug.idunits = sc.idunits and ug.idusers = sc.idusers and ug.idclasses = sc.idclasses
where sc.idunits = ${Unidades[Index]['idunits']} and sc.completedClass = 1 and (now() >= date_add(convert(sc.dateinicial, date), interval 7 day) or sc.homework is not null)
group by sc.idusers, sc.idunits, sc.idclasses) R
where R.Respostas != R.Questoes;`;
mysqlConnection.query(SqlQueryMySQL, function (error, AulaAluno, fields) {
Unidades[Index]['AulaAluno'] = AulaAluno;
if (AulaAluno && AulaAluno.length > 0) {
Unidades[Index]['SQLRem'] = `delete from usergivenanswers where `;
} else {
Unidades[Index]['SQLRem'] = 'select 1;';
}
LoopRemoverRespostas(Unidades[Index], 0, '', function (newUnidade) {
Unidades[Index] = newUnidade;
if (Unidades[Index]['IDsRemover'] == '') {
Unidades[Index]['IDsRemover'] = 'select 1;';
} else {
Unidades[Index]['SQLRem'] +=
'(' + Unidades[Index]['IDsRemover'] + ')';
}
mysqlConnection.query(
Unidades[Index]['SQLRem'],
function (error, delRespostas, fields) {
Index++;
RemoverAulas(Unidades, Index, callback);
}
);
});
});
} else {
callback(Unidades);
}
}
function LoopRemoverRespostas(Unidade, Index, IDsRemover, callback) {
if (Index < Unidade['AulaAluno'].length) {
let sqlQueryRespostas = `select * from usergivenanswers ug where ug.idunits = ${Unidade['AulaAluno'][Index]['idunits']} and ug.idclasses = ${Unidade['AulaAluno'][Index]['idclasses']} and ug.idusers = ${Unidade['AulaAluno'][Index]['idusers']};`;
mysqlConnection.query(
sqlQueryRespostas,
function (error, ResAluno, fields) {
for (let i = 0; i < ResAluno.length; i++) {
if (IDsRemover != '') IDsRemover += ' or ';
IDsRemover += `(idunits = ${ResAluno[i]['idunits']} and idusers = ${ResAluno[i]['idusers']} and idclasses = ${ResAluno[i]['idclasses']})`;
}
Index++;
LoopRemoverRespostas(Unidade, Index, IDsRemover, callback);
}
);
} else {
Unidade['IDsRemover'] = IDsRemover;
callback(Unidade);
}
}
router.get('/RelatorioMatriculasSenhas/:db', (req, res) => {
const db = req.params.db;
console.log(
new Date().toUTCString() + ' - ' + req.originalUrl + ' - initing...'
);
const SqlQuery = `select distinct
tt.IDMatricula,
cl.Nome,
cl.SenhaIntranet as 'Senha'
from ${db}Clientes cl
inner join ${db}TreinandosTurmas tt on tt.IDTreinando = cl.IDCliente
order by tt.IDMatricula asc;`;
sqlServerConnection
.request()
.query(SqlQuery, function (error, results, fields) {
let Relatorio = [];
for (let i = 0; i < results['recordset'].length; i++) {
Relatorio.push(results['recordset'][i]);
Relatorio[i]['Senha'] = encriptPassword(
Relatorio[i]['Senha'],
Relatorio[i]['Senha'].length
);
}
res.send(Relatorio);
});
});
return router;
};
let indexStudents = 0;
function LoopStudentsOfTeacher(Alunos, res, db, idteacher) {
if (indexStudents < Alunos.length) {
let sqlQuery = `
SELECT
COUNT(sc.idusers) as qtde_stepclass
FROM
stepclass sc
INNER JOIN
classes c ON sc.idclasses = c.idclasses
INNER JOIN
courses co ON co.idcourses = c.idcourses
WHERE
sc.idusers = ${
Alunos[indexStudents]['IDMatricula']
} AND sc.idunits = (SELECT idunits FROM units WHERE reference_db = '${
db.split('.')[0]
}') AND co.idcourses = ${Alunos[indexStudents]['CodigoCurso']};`;
mysqlConnection.query(sqlQuery, function (error, results, fields) {
if (!error && results.length != 0) {
let sqlQuery2 = `SELECT COUNT(*) AS Ministradas FROM ${db}TurmasCalendario WHERE CodigoCurso = ${Alunos[indexStudents]['CodigoCurso']} AND IdTurma = ${Alunos[indexStudents]['IdTurma']} AND Ministrado = 1;`;
sqlServerConnection
.request()
.query(sqlQuery2, function (error2, results2, fields) {
if (!error && results2.length > 0) {
if (results2[0]['Ministradas'] > results[0]['qtde_stepclass']) {
res.send(true);
} else {
indexStudents++;
LoopStudentsOfTeacher(Alunos, res, db, idteacher);
}
} else {
indexStudents++;
LoopStudentsOfTeacher(Alunos, res, db, idteacher);
}
});
} else {
indexStudents++;
LoopStudentsOfTeacher(Alunos, res, db, idteacher);
}
});
} else {
res.send(false);
}
}
function CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
i,
Nomes,
res,
content,
finalIDchamada
) {
try {
if (i < StudentsIDs.length) {
if (parseInt(StudentsIDs[i]) > 190000) {
StudentsIDs[
i
] = `(SELECT DISTINCT top(1) CodigoTurma FROM ${db}TreinandosTurmas WHERE IDMatricula = ${StudentsIDs[i]})`;
}
let sqlQry1 = `SELECT top(1) *, ${StudentsIDs[i]} AS 'CodTurma'
FROM ${db}TurmasCalendario tc
INNER JOIN ${db}TreinandosTurmas tt
ON tt.CodigoTurma = tc.IdTurma
where tc.IDTurma = ${StudentsIDs[i]}
and Ministrado = 0
order by Data asc;`;
console.log(sqlQry1);
sqlServerConnection
.request()
.query(sqlQry1, function (error1, results1, fields) {
if (!error1 && results1.length != 0) {
//console.log(results1);
var ResultTurmasCalendario = results1.recordsets[0][0];
if (ResultTurmasCalendario) {
StudentsIDs[i] = ResultTurmasCalendario['CodTurma'];
//console.log(StudentsIDs[i]);
let sqlQry2 = `
SELECT
*
FROM
${db}TreinandosTurmas
WHERE
CodigoTurma = ${ResultTurmasCalendario['IdTurma']}
AND
IDCurso = ${ResultTurmasCalendario['CodigoCurso']}
AND
Desistente = 0
AND
Faltoso = 0;
`;
sqlServerConnection
.request()
.query(sqlQry2, function (error2, results2, fields) {
if (!error2 && results2.length != 0) {
//console.log(results2.recordset[0]);
var ResultTreinandosTurmas = results2.recordset[0];
if (
ResultTreinandosTurmas['CodigoTurma'] == StudentsIDs[i]
) {
let sqlQry3 = `SELECT TOP 1 IDChamadas FROM ${db}Chamadas ORDER BY IDChamadas DESC;`;
sqlServerConnection
.request()
.query(sqlQry3, function (error3, results3, fields) {
console.log(results3);
let idchamada = results3.recordsets[0].length
? results3.recordsets[0][0]['IDChamadas'] + 1
: 1;
let idturma = ResultTurmasCalendario['IdTurma'];
let idcurso = ResultTurmasCalendario['CodigoCurso'];
let data2 = formatDate(
ResultTurmasCalendario['Data'],
0
);
let hora = formatDate(
ResultTurmasCalendario['HoraInicial'],
1
);
let horainicio = formatDate(
ResultTurmasCalendario['HoraInicial'],
1
);
let horatermino = formatDate(
ResultTurmasCalendario['HoraFinal'],
1
);
let idinstrutor =
ResultTurmasCalendario['CodigoInstrutor'];
let dataenvioapp = formatDate(new Date(), 0);
let dataatualizacaoapp = formatDate(new Date(), 0);
let idfuncionarioapp =
ResultTurmasCalendario['CodigoInstrutor'];
let sqlQry4 = `INSERT INTO ${db}Chamadas
(IDChamadas, IDTurma, IDCurso, Data, Hora, HoraInicio, HoraTermino, IDInstrutor, Flex, APP, DataEnvioAPP, DataAtualizacaoAPP, IDFuncionarioAPP)
VALUES
(${idchamada},${idturma},${idcurso},'${date}','${hora}','${horainicio}','${horatermino}',${idinstrutor},1,1,'${dataenvioapp}','${dataatualizacaoapp}',${idfuncionarioapp});`;
sqlServerConnection
.request()
.query(
sqlQry4,
function (error6, results6, fields) {
if (!error6) {
let sqlQry6 = `DELETE FROM ${db}ChamadasConteudos WHERE IDChamadas = ${idchamada};`;
sqlServerConnection
.request()
.query(
sqlQry6,
function (error7, results7, fields) {
if (!error7) {
let sqlQry7 = `INSERT INTO ${db}ChamadasConteudos (IDChamadas, CodigoConteudo, DescricaoConteudo) VALUES (${idchamada}, 0, '${content}');`;
//console.log(sqlQry7);
sqlServerConnection
.request()
.query(
sqlQry7,
function (
error8,
results8,
fields
) {
if (!error8) {
let sqlQry8 = `UPDATE ${db}TurmasCalendario SET Ministrado = 1, Data = '${date}' WHERE IdTurmasCalendario = ${ResultTurmasCalendario['IdTurmasCalendario']};`;
//console.log(sqlQry8);
sqlServerConnection
.request()
.query(
sqlQry8,
function (
error9,
results9,
fields
) {
if (!error9) {
let sqlQry9 = `DELETE FROM ${db}ChamadasDetalhes WHERE IDChamadas = ${idchamada};`;
//console.log(sqlQry9);
sqlServerConnection
.request()
.query(
sqlQry9,
function (
error10,
results10,
fields
) {
if (!error10) {
let sqlQry10 = `INSERT INTO ${db}ChamadasDetalhes
(IDChamadas, IDTreinando, Presente, Avisada, Justificativa, UltimaCarta) VALUES
(${idchamada}, ${ResultTreinandosTurmas['IDTreinando']}, 1, 0, null, null);`;
//console.log(sqlQry10);
sqlServerConnection
.request()
.query(
sqlQry10,
function (
error11,
results11,
fields
) {
if (
!error11
) {
i++;
CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
i,
Nomes,
res,
content,
idchamada
);
}
}
);
}
}
);
}
}
);
}
}
);
}
}
);
} else {
console.log('erro sqlQry4: ' + sqlQry4);
console.log(error6);
}
}
);
});
} else {
console.log('Não existe');
var sqlQry5 = `SELECT * FROM ${db}Clientes WHERE IDCliente = ${StudentsIDs[i]};`;
sqlServerConnection
.request()
.query(sqlQry5, function (error5, results5, fields) {
if (!error5 && results5.length != 0) {
if (Nomes == '') {
console.log(results5.recordsets);
Nomes = results5.recordset[0]['Nome'];
} else {
Nomes += ', ' + results5.recordset[0]['Nome'];
}
}
i++;
CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
i,
Nomes,
res,
content,
null
);
});
}
} else {
console.log('erro sqlQry2');
i++;
CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
i,
Nomes,
res,
content,
null
);
}
});
} else {
console.log('erro: turmas calendário retornou null');
i++;
CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
i,
Nomes,
res,
content,
null
);
}
} else {
console.log('erro sqlQry1: ' + error1);
i++;
CheckDateExists(
db,
date,
idteacher,
StudentsIDs,
i,
Nomes,
res,
content,
null
);
}
});
} else {
//console.log("finalIDchamada: " + finalIDchamada);
res.send(
JSON.stringify({
idcallresponse: finalIDchamada,
})
);
}
} catch (error) {
console.error(error);
res.send(
JSON.stringify({
error: error,
})
);
}
}
function formatDate(date, ret) {
var novaData = date
.toISOString()
.replace(/T/, ' ')
.replace(/\..+/, '')
.split(' ');
return novaData[ret];
}
function InsertNotes() {
console.log(new Date().toUTCString() + ' - /InsertNotes');
const SQLQryNotasAulas = `update stepclass A
join
(select * from
(select distinct
*,
((AC2.TotalAcertos / AC2.ItensAula) * 10) as 'Nota'
from (
select
*,
(AC.Acertos + AC.Erros + AC.Atividades) as 'ItensAula',
(AC.Acertos + AC.NotaAtividades) as 'TotalAcertos'
from
(select
sc.idusers,
sc.idclasses,
sc.idunits,
sc.completedClass,
sc.datefinal,
coalesce((ea.iscorrect), 0) as 'Acertos',
coalesce(sum(case when ea.iscorrect = 1 then 0 else 1 end), 0) as 'Erros',
(SELECT COUNT(*) FROM userstages WHERE idusers = sc.idusers AND idclasses = sc.idclasses AND idunits = sc.idunits) AS 'Atividades',
(SELECT coalesce(SUM(note), 0) FROM userstages WHERE idusers = sc.idusers AND idclasses = sc.idclasses AND idunits = sc.idunits) AS 'NotaAtividades',
sc.note
from (select * from stepclass sc where sc.completedClass = 1 and sc.idusers > 190008 and sc.note is null and (CASE WHEN STR_TO_DATE(sc.datefinal, '%d/%m/%Y') < NOW() OR sc.homework = 1 THEN 1 ELSE 0 END) = 1) sc
left join usergivenanswers ug on ug.idclasses = sc.idclasses and ug.idusers = sc.idusers and ug.idunits = sc.idunits
left join exerciseanswers ea on ea.idexerciseanswers = ug.idexerciseanswers
left join userstages us on us.idclasses = sc.idclasses and us.idusers = sc.idusers and us.idunits = sc.idunits
group by sc.idusers, sc.idclasses, sc.idunits, sc.completedClass, sc.note, sc.datefinal, ea.iscorrect) AC) AC2) AC3) B
on A.idusers = B.idusers and A.idunits = B.idunits and A.idclasses = B.idclasses
set A.note = B.Nota;`;
const SQLNewInsertNotes = `update stepclass A
join (select
R.idusers,
R.idunits,
R.idclasses,
R.Questoes,
R.EAcertos as 'ExerciciosAcertos',
R.TAcertos as 'TarefasAcertos',
case
when (R.Questoes + R.TAcertos + R.TErros) = 0 then 10
when ((R.EAcertos + R.TAcertos) / (R.Questoes + R.TAcertos + R.TErros) * 10) > 10 then 10
else ((R.EAcertos + R.TAcertos) / (R.Questoes + R.TAcertos + R.TErros) * 10)
end as 'Nota'
from (select distinct
sc.idstepclass,
sc.idusers,
sc.idunits,
sc.idclasses,
ExA.Questoes,
(select count(*) from usergivenanswers ug inner join exerciseanswers ea on ea.idexerciseanswers = ug.idexerciseanswers and ea.iscorrect = 1 where ug.idclasses = sc.idclasses and ug.idunits = sc.idunits and ug.idusers = sc.idusers) as 'EAcertos',
(select count(*) from usergivenanswers ug inner join exerciseanswers ea on ea.idexerciseanswers = ug.idexerciseanswers and ea.iscorrect = 0 where ug.idclasses = sc.idclasses and ug.idunits = sc.idunits and ug.idusers = sc.idusers) as 'EErros',
(select count(*) from userstages us where us.idclasses = sc.idclasses and us.idunits = sc.idunits and us.idusers = sc.idusers and us.note = 1) as 'TAcertos',
(select count(*) from userstages us where us.idclasses = sc.idclasses and us.idunits = sc.idunits and us.idusers = sc.idusers and us.note = 0) as 'TErros'
from stepclass sc
inner join (select distinct
cl.idclasses,
cl.name as 'Aula',
count(cc.idexercises) as 'Questoes'
from classes cl
inner join classescontent cc on cc.idclasses = cl.idclasses
left join exercisequestions eq on eq.idexercises = cc.idexercises
group by cl.idclasses, cc.idclasses
order by cl.idclasses asc) ExA on ExA.idclasses = sc.idclasses
where sc.note is null and sc.completedClass = 1 and (now() >= date_add(convert(sc.dateinicial, date), interval 7 day) or sc.homework is not null)) R) B
on A.idusers = B.idusers and A.idunits = B.idunits and A.idclasses = B.idclasses
set A.note = B.Nota;`;
mysqlConnection.query(SQLNewInsertNotes, function (error, results, fields) {
console.log(new Date().toUTCString() + ' - Notas de aulas lançadas');
InsertCourseNotes();
return true;
});
}
function InsertNotasDetalhes(idusers, idunits, idclasses) {
console.log(new Date().toUTCString() + ' - /InsertNotasDetalhes');
let sqlQry0 = `
SELECT
*
FROM
(SELECT note AS Nota from stepclass where idusers = ${idusers} and idunits = ${idunits} and idclasses = ${idclasses}) AS note,
(SELECT reference_db AS Banco from units where idunits = ${idunits}) AS banco,
(SELECT idcourses AS IDCurso from classes where idclasses = ${idclasses}) AS curso,
(SELECT ordem + 1 AS Conceito from classes where idclasses = ${idclasses}) AS conceito;`;
mysqlConnection.query(sqlQry0, function (error, results, fields) {
if (!error && results.length != 0) {
let nota = results[0]['Nota'];
let db = results[0]['Banco'] + '.dbo.';
let idcourses = results[0]['IDCurso'];
let concept = results[0]['Conceito'];
let sqlServerQuery = `
INSERT INTO
${db}NotasDetalhes(IDTurma, IDCurso, IDMatricula, IDTreinando, IDConceito, Nota)
SELECT
CodigoTurma, IDCurso, IDMatricula, IDTreinando, ${concept} as IDConceito, ${nota} as Nota FROM ${db}TreinandosTurmas WHERE IDMatricula = ${idusers} AND IDCurso = ${idcourses};
INSERT INTO
${db}NotasDetalhesSequencial(IDTurma, IDCurso, IDMatricula, IDTreinando, IDConceito)
SELECT
CodigoTurma, IDCurso, IDMatricula, IDTreinando, ${concept} as IDConceito FROM ${db}TreinandosTurmas WHERE IDMatricula = ${idusers} AND IDCurso = ${idcourses};`;
//console.log(sqlServerQuery);
sqlServerConnection
.request()
.query(sqlServerQuery, function (error1, results1, fields) {
return true;
});
}
});
}
function InsertCourseNotes() {
console.log(new Date().toUTCString() + ' - /InsertCourseNotes');
const SQLQry = `select
Tab2.idcourses,
Tab2.idusers,
(sum(Tab2.note) / Tab2.AulasCurso) as 'note',
Tab2.idunits
from (
select
Tab1.*,
sc.idstepclass,
sc.note
from (
select
sc.idusers,
co.idcourses,
sc.idunits,
count(sc.idclasses) as 'Aulas',
(select count(*) from classes cl1 where cl1.idcourses = co.idcourses and cl1.disabled = 0) as 'AulasCurso'
from stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join courses co on co.idcourses = cl.idcourses
where sc.note is not null
group by sc.idusers, co.idcourses, sc.idunits) Tab1
inner join stepclass sc on sc.idunits = Tab1.idunits and sc.idusers = Tab1.idusers
inner join classes cl on cl.idclasses = sc.idclasses and cl.idcourses = Tab1.idcourses
where Tab1.Aulas = Tab1.AulasCurso
order by idunits, idcourses, idusers) Tab2
group by Tab2.idcourses, Tab2.idusers, Tab2.idunits;`;
mysqlConnection.query(SQLQry, function (error, results, fields) {
LoopCursoNotas(0, results, function (Sucesso) {
console.log(new Date().toUTCString() + ' - Notas de cursos lançadas');
return Sucesso;
});
});
}
function LoopCursoNotas(Index, Registros, callback) {
if (!Registros) {
callback(false);
return;
}
if (Index < Registros.length) {
let SQLInsert = `INSERT INTO coursenotes (idcourses, idusers, note, idunits) VALUES (${Registros[Index]['idcourses']}, ${Registros[Index]['idusers']}, ${Registros[Index]['note']}, ${Registros[Index]['idunits']});`;
//console.log(SQLInsert);
mysqlConnection.query(SQLInsert, function (error, results, fields) {
if (!error) {
console.log(
'Notas do curso lançadas para o aluno ' +
Registros[Index]['idusers'] +
' da unidade ' +
Registros[Index]['idcourses']
);
}
Index++;
LoopCursoNotas(Index, Registros, callback);
});
} else {
callback(true);
}
}
let IndexNotaDetalhe = 0;
function LoopNotasDetalhes(idusers, idunits, idcourses, conceito) {
if (IndexNotaDetalhe <= conceito) {
let sqlQry = `SELECT idclasses FROM classes WHERE ordem = ${IndexNotaDetalhe} AND idcourses = ${idcourses};`;
mysqlConnection.query(sqlQry, function (error, results, fields) {
let idclasses;
try {
idclasses = results[0]['idclasses'];
} catch (e) {
return true;
}
InsertNotasDetalhes(idusers, idunits, idclasses);
setTimeout(() => {
IndexNotaDetalhe++;
LoopNotasDetalhes(idusers, idunits, idcourses, IndexNotaDetalhe);
}, 200);
});
} else {
return true;
}
}
function InsertTraineeProgramNotes(idusers, idunits, idclasses) {
console.log('/InsertTraineeProgramNotes');
const SQLQry = `
INSERT INTO
traineeprogramnotes (idtraineeprogram, idusers, note, idunits)
SELECT
(SELECT DISTINCT
idtraineeprogram
FROM
traineeprogramcourses
WHERE
idcourses = (SELECT idcourses FROM classes WHERE idclasses = ${idclasses})) idtraineeprogram,
${idusers} AS idusers,
(SELECT
SUM(note) / COUNT(*) AS Nota
FROM
coursenotes
WHERE
idusers = ${idusers} AND idunits = ${idunits}) AS note,
${idunits} AS idunits
FROM
(SELECT 1) r
WHERE
(SELECT COUNT(*) as qtde FROM coursenotes WHERE idusers = ${idusers} AND idunits = ${idusers}) =
(SELECT COUNT(*) as qtde FROM traineeprogramcourses WHERE
idtraineeprogram = (SELECT DISTINCT idtraineeprogram FROM traineeprogramcourses WHERE idcourses = (SELECT idcourses FROM classes WHERE idclasses = ${idclasses})));`;
mysqlConnection.query(SQLQry, function (error, results, fields) {
if (!error && results.length != 0) {
//console.log(results['affectedRows']);
/*if (results['affectedRows'] == 1) {
let sqlQry0 = `
SELECT * FROM
(SELECT SUM(note) / COUNT(*) AS Nota FROM coursenotes WHERE idusers = ${idusers} AND idunits = ${idunits}) AS note,
(SELECT reference_db AS Banco from units where idunits = ${idunits}) AS banco,
(SELECT idcourses AS IDCurso from classes where idclasses = ${idclasses}) AS curso`;
mysqlConnection.query(sqlQry0, function (error, results, fields) {
if (!error && results.length != 0) {
console.log(results[0]);
let nota = results[0]['Nota'];
let db = results[0]['Banco'] + ".dbo.";
let idcourses = results[0]['IDCurso'];
let sqlQry1 = `
UPDATE
${db}TreinandosTurmas tt
SET
Nota = ${nota}
WHERE
IDMatricula = ${idusers}
AND
IDCurso = ${idcourses}`;
//console.log(sqlQry1);
sqlServerConnection.request().query(sqlQry1, function (error1, results1, fields) {
console.log("/Inserted TreinandosTurmas");
return true;
})
}
else {
return false;
}
});
}
else {
return true;
}*/
return true;
} else {
return true;
}
});
}
function InsertUserStage(idusers, idunits, idclasses, note) {
mysqlConnection.query(
'select * from userstages order by iduserstages desc;',
function (error, results, fields) {
let IDUserStages = '';
if (!results || results == '' || results.length == 0) IDUserStages = '1';
else IDUserStages = parseInt(results[0]['iduserstages']) + 1;
console.log(IDUserStages);
const SQLInsert = `INSERT INTO userstages(iduserstages, idstages, idusers, idunits, idclasses, note) values
(${IDUserStages}, 2, ${idusers}, ${idunits}, ${idclasses}, ${note});`;
mysqlConnection.query(SQLInsert, function (error, results, fields) {
if (!error)
console.log(
'/HomeWork success - Matrícula: ' +
idusers +
' ; Unidade: ' +
idunits
);
else
console.log(
'/HomeWork error - Matrícula: ' + idusers + ' ; Unidade: ' + idunits
);
});
}
);
}
function PreencherNotasSQLServer(Unidades, Index, callback) {
if (Index < Unidades.length) {
console.log(
'Analisando unidade ' +
(Index + 1) +
' de ' +
Unidades.length +
' (' +
Unidades[Index]['Unidade'] +
')'
);
let SqlQueryMySQL = `select * from (
select
cl.idcourses as 'IDCurso',
sc.idusers as 'IDMatricula',
(cl.ordem + 1) + ((co.idtypescourse - 1) * 16) as 'IDConceito',
sc.note as 'Nota'
from stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join courses co on co.idcourses = cl.idcourses
inner join units un on un.idunits = sc.idunits
where co.idtypescourse in (1,2,3) and sc.idunits = ${Unidades[Index]['idunits']}) R
order by R.IDConceito asc;`;
mysqlConnection.query(SqlQueryMySQL, function (error, NotasMySQL, fields) {
let SqlQuerySQLServer = `select * from ${Unidades[Index]['db']}NotasDetalhes;`;
sqlServerConnection
.request()
.query(SqlQuerySQLServer, function (error, results, fields) {
let NotasSQLServer = [];
if (results['recordset']) {
NotasSQLServer = results['recordset'];
}
Unidades[Index].NotasLancar = [];
for (let i = 0; i < NotasMySQL.length; i++) {
let Existe = false;
for (let o = 0; o < NotasSQLServer.length; o++) {
if (
NotasMySQL[i]['IDCurso'] == NotasSQLServer[o]['IDCurso'] &&
NotasMySQL[i]['IDMatricula'] ==
NotasSQLServer[o]['IDMatricula'] &&
NotasMySQL[i]['IDConceito'] == NotasSQLServer[o]['IDConceito']
) {
Existe = true;
break;
}
}
if (!Existe) {
Unidades[Index].NotasLancar.push(NotasMySQL[i]);
}
}
console.log(
'Registros para inserir: ' + Unidades[Index]['NotasLancar'].length
);
InserirNotasSqlServer(Unidades, 0, Index, callback);
});
});
} else {
callback(Unidades);
}
}
function InserirNotasSqlServer(Unidades, Index1, Index2, callback) {
if (Index1 < Unidades[Index2]['NotasLancar'].length) {
let SqlQuerySQLInsert = `insert into ${Unidades[Index2]['db']}NotasDetalhes (IDTurma, IDCurso, IDMatricula, IDTreinando, IDConceito, Nota) select top 1 tt.CodigoTurma, ${Unidades[Index2]['NotasLancar'][Index1]['IDCurso']}, ${Unidades[Index2]['NotasLancar'][Index1]['IDMatricula']}, tt.IDTreinando, ${Unidades[Index2]['NotasLancar'][Index1]['IDConceito']}, ${Unidades[Index2]['NotasLancar'][Index1]['Nota']} from ${Unidades[Index2]['db']}TreinandosTurmas tt where tt.IDMatricula = ${Unidades[Index2]['NotasLancar'][Index1]['IDMatricula']}`;
sqlServerConnection
.request()
.query(SqlQuerySQLInsert, function (error, results, fields) {
if (!error) {
let SqlQuerySQLInsert2 = `insert into ${Unidades[Index2]['db']}NotasDetalhesSequencial (IDTurma, IDCurso, IDMatricula, IDTreinando, IDConceito) select top 1 tt.CodigoTurma, ${Unidades[Index2]['NotasLancar'][Index1]['IDCurso']}, ${Unidades[Index2]['NotasLancar'][Index1]['IDMatricula']}, tt.IDTreinando, ${Unidades[Index2]['NotasLancar'][Index1]['IDConceito']} from ${Unidades[Index2]['db']}TreinandosTurmas tt where tt.IDMatricula = ${Unidades[Index2]['NotasLancar'][Index1]['IDMatricula']}`;
sqlServerConnection
.request()
.query(SqlQuerySQLInsert2, function (error, results, fields) {
Index1++;
InserirNotasSqlServer(Unidades, Index1, Index2, callback);
});
} else {
Index1++;
InserirNotasSqlServer(Unidades, Index1, Index2, callback);
}
});
} else {
Index2++;
PreencherNotasSQLServer(Unidades, Index2, callback);
}
}
module.exports = routes;