require('../connections/mysql-server'); require('../connections/sql-server'); require('../helpers/CheckToken'); const express = require('express'); const router = express.Router(); const bodyParser = require('body-parser'); const { Router } = require('express'); router.use(bodyParser.urlencoded({ extended: true })); router.use(bodyParser.json()); var routes = function () { router.post('/authUser', (req, res) => { //const password = encriptPassword(req.body.password); const type = parseInt(req.body.type); const password = req.body.password; const user = req.body.login; const db = req.body.db; this.id = type + user + password; const query = `SELECT zu.user AS IDMatricula, zu.userName AS Nome, zu.idzoeusertype AS idusertype FROM zoeusers zu WHERE zu.enabled = 1 AND CONCAT(zu.idunits, '.dbo.') = '${db}' AND zu.user = '${user}' AND zu.password = '${password}';`; //console.log(query); execMySQLQueryLogin(query, res, req.originalUrl); }); router.post('/authUserOld', (req, res) => { const type = parseInt(req.body.type); const password = encriptPassword(req.body.password); const email = req.body.email; const user = req.body.login; this.id = type + user + password; const db = req.body.db; const ModoEmergencia = req.body.ME || false; /* if(db != "SGPInicial.dbo." && user == "190000"){ //Vai entra não rapai }else {*/ switch (type) { case 1: //funcionário execSQLQueryLogin(`SELECT *, 1 as 'idusertype' FROM ${db}Funcionarios WHERE IDFuncionario = '${user}' AND Senha = '${password}'`, res, req.originalUrl); break; case "1": //funcionário app execSQLQueryLogin(`SELECT IDFuncionario, Nome, 1 as 'idusertype' FROM ${db}Funcionarios WHERE IDFuncionario = '${user}' AND Senha = '${password}'`, res, req.originalUrl); break; case 2: //adm execMySQLQueryLogin(`SELECT * FROM users WHERE user = '${user}' AND password = '${password}' AND enabled = 1 AND idusertype in (2, 3, 6, 7, 8, 9, 10, 11, 12, 13);`, res, req.originalUrl); break; case 3: //First Access execSQLQuery2(`SELECT mt.IDMatricula, c.e_mail, c.Nome, c.IDCliente, c.SenhaIntranet FROM ${db}MatriculasTreinandos mt INNER JOIN ${db}Clientes c ON mt.IDTreinando = c.IDCliente WHERE mt.IDMatricula = '${user}' AND c.e_mail = '${email}';`, res, req.originalUrl); break; case 4: //aluno if (ModoEmergencia) { execMySQLQueryLogin(`SELECT ${user} AS IDMatricula, '123' AS SenhaIntranet, 'Aluno' AS Nome, 4 as 'idusertype';`, res, req.originalUrl); } else { //console.log("Matricula: " + user + " - Senha: '" + password + "'"); // '      ' espaços em branco das senhas if (user == "190000") { if (db == "SGPInicial.dbo." && password == encriptPassword("z0et3acherM02ster") ) { execSQLQueryLogin(`SELECT '190000' as 'IDMatricula', 'maker2019' as 'SenhaIntranet', 'Sistema' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } else if(db != "SGPInicial.dbo." && password == encriptPassword("zoeteacher")) { execSQLQueryLogin(`SELECT '190000' as 'IDMatricula', 'maker2019' as 'SenhaIntranet', 'Sistema' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } } else if (user =="190024" && password == encriptPassword("123")) { execSQLQueryLogin(`SELECT '190024' as 'IDMatricula', 'maker2019' as 'SenhaIntranet', 'Sistema' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } else if(user=="190025" && password == encriptPassword("123")) { execSQLQueryLogin(`SELECT '190025' as 'IDMatricula', 'maker2019' as 'SenhaIntranet', 'Sistema' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } else if(user=="190026" && password == encriptPassword("123")) { execSQLQueryLogin(`SELECT '190026' as 'IDMatricula', 'maker2019' as 'SenhaIntranet', 'Sistema' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } else if(user=="240001" && password == encriptPassword("123")) { execSQLQueryLogin(`SELECT '240001' as 'IDMatricula', '123' as 'SenhaIntranet', 'ZoeSistema' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } else if (user == "190001" && password == encriptPassword("123")) { execSQLQueryLogin(`SELECT '190001' as 'IDMatricula', '123' as 'SenhaIntranet', 'Aluno Demonstração' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); } else if (user == "190002" && password == encriptPassword("123")) { mysqlConnection.query(`select * from usershomework uh inner join units un on un.idunits = uh.idunits where uh.idusers = ${user} and un.reference_db = '${db.split('.dbo.')[0]}';`, function(error, AlunoExiste, fields) { if (AlunoExiste.length > 0 && AlunoExiste[0]['disabled'] == 1) { res.send(JSON.stringify({ "status": 500, "error": "Usuário desativado", "response": [], "token": null })); } else if (AlunoExiste.length > 0 && AlunoExiste[0]['disabled'] == 0) { mysqlConnection.query(`update usershomework set disabled = 1 where idusers = ${user} and idunits = (select idunits from units where reference_db = '${db.split('.dbo.')[0]}');`, function(error, results, fields) { execSQLQueryLogin(`SELECT '190002' as 'IDMatricula', '123' as 'SenhaIntranet', 'Professor' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); }); } else { mysqlConnection.query(`insert into usershomework (idusers, idunits, disabled) values (${user}, (select idunits from units where reference_db = '${db.split('.dbo.')[0]}'), 1);`, function(error, results, fields) { execSQLQueryLogin(`SELECT '190002' as 'IDMatricula', '123' as 'SenhaIntranet', 'Professor' as 'Nome', 4 as 'idusertype';`, res, req.originalUrl); }); } }); } else { mysqlConnection.query(`SELECT desativado FROM alunosdesativados where idunits = (select idunits from units where reference_db = '${db.split('.dbo.')[0]}') and idusers = ${user};`, function(error, AlunoDesativado, fields) { if (AlunoDesativado && AlunoDesativado.length > 0 && AlunoDesativado[0]['desativado'] == 1) { res.send(JSON.stringify({ "status": 500, "error": "Usuário desativado", "response": [], "token": null })); console.log(new Date().toUTCString() + " - " + req.originalUrl + "/ error 500"); } else { execSQLQueryLogin(`SELECT distinct mt.IDMatricula, c.SenhaIntranet, c.Nome, 4 as 'idusertype' FROM ${db}MatriculasTreinandos mt INNER JOIN ${db}Clientes c ON mt.IDTreinando = c.IDCliente inner join ${db}TreinandosTurmas tt on tt.IDMatricula = mt.IDMatricula and tt.CodigoTurma > 0 WHERE mt.IDMatricula = '${user}' AND c.SenhaIntranet = '${password}' and tt.Faltoso = 0 and tt.Concluiu = 0 and tt.Desistente = 0;`, res, req.originalUrl); } }); } } break; case 5: //franchisee execMySQLQueryLogin(`SELECT us.idusers, us.name, us.idunits, (SELECT u.reference_db FROM units u WHERE u.idunits = us.idunits) AS 'db', us.idusertype FROM users us WHERE us.user = '${user}' AND us.password = '${password}' AND us.enabled = 1 AND us.idusertype in (5, 14, 15, 16);`, res, req.originalUrl); break; default: console.log("default"); break; } //} }); router.post('/loginzoerobot', (req, res) => { const robot_id = req.body.robot_id; const idusers = parseInt(req.body.idusers); const idunits = parseInt(req.body.idunits); const idusertype = parseInt(req.body.idusertype); const password = req.body.password; const db = req.body.db; const micro = parseInt(req.body.micro) || 0; execSQLQuery(`CALL loginzoerobot('${robot_id}', ${idusers}, ${idunits}, '${db}', '${password}', ${idusertype}, ${micro})`, res, req.originalUrl); }) router.post('/getloginzoerobot', (req, res) => { const robot_id = req.body.robot_id; mysqlConnection.query(`CALL getloginzoerobot('${robot_id}')`, function(error, response, fields) { res.send(response[0]); }) }) router.post('/updatezoerobotmicro', (req, res) => { const robot_id = req.body.robot_id; const micro = parseInt(req.body.micro); execSQLQuery(`CALL updatezoerobotmicro('${robot_id}', ${micro})`, res, req.originalUrl); }) router.get('/closeCon', (req, res) => { console.log("Fechando conexões"); mysqlConnection.end(); res.send(true); }) router.get('/authTeacher/:db/:login/:senha', (req, res) => { let Login = req.params.login; let Senha = encriptPassword(req.params.senha); let Banco = req.params.db; let sqlQuery = `SELECT IDFuncionario, Nome FROM ${Banco}.dbo.Funcionarios WHERE Nome = '${Login}' AND Senha = '${Senha}';`; sqlServerConnection.request().query(sqlQuery, function (error, results, fields) { const Caminho = `http:${req.headers.host.split(':')[0]}/assets/`; try { if (results.recordsets[0].length > 0) res.redirect(Caminho + 'login_succefull.php'); else res.redirect(Caminho + 'restart_login.php'); } catch (e) { res.redirect(Caminho + 'restart_login.php'); } }) }) router.patch('/cadPass', (req, res) => { const password = encriptPassword(req.body.password); const user = req.body.login; const db = req.body.db; execSQLQuery2(` UPDATE ${db}Clientes SET SenhaIntranet = '${password}' WHERE IDCliente = ${user}`, res, req.originalUrl ); }) router.post('/ChangeUserIcon', (req, res) => { console.log(req.body); const idusers = parseInt(req.body.idusers); const usericon = req.body.usericon; execSQLQuery(` UPDATE myrobot.usersLevel SET usericon = '${usericon}' WHERE idusers = ${idusers}`, res, req.originalUrl ); }) router.patch('/ResetPass', (req, res) => { const id = req.body.id; const db = req.body.db; execSQLQuery2(` UPDATE ${db}Clientes SET SenhaIntranet = null WHERE IDCliente = ${id}`, res, req.originalUrl ); }) router.post('/insert', verifyJWT, (req, res) => { const idusertype = req.body.idusertype; const idcities = req.body.idcities; const idstates = req.body.idstates; const name = req.body.name; const user = req.body.user; const password = encriptPassword(req.body.password); const email = req.body.email; const telephone = req.body.telephone; const address = req.body.address; const district = req.body.district; const enabled = req.body.enabled ? 1 : 0; const idunits = req.body.idunits; execSQLQuery(`INSERT INTO users (idusertype, idcities, idstates, name, user, password, email, telephone, address, district, enabled, idunits) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [idusertype, idcities, idstates, name, user, password, email, telephone, address, district, enabled, idunits]); }); router.post('/givexp', (req, res) => { const xpAdd = parseInt(req.body.xpAdd); const userId = parseInt(req.body.userId); const unitid = parseInt(req.body.unitid); execSQLQuery(`UPDATE usersLevel SET usersxp = usersxp + ${xpAdd} where idusers = ${userId} AND idunit = ${unitid};`, res, req.originalUrl); }); router.post('/createusersprofile', (req, res) => { const userId = parseInt(req.body.userId); const unitId = parseInt(req.body.unitId); execSQLQuery(`INSERT INTO usersLevel (idusers, idunit,usersxp) VALUES (${userId}, ${unitId}, 0);`, res, req.originalUrl); }); router.patch('/update', verifyJWT, (req, res) => { const idusers = req.body.idusers; const idusertype = req.body.idusertype; const idcities = req.body.idcities; const idstates = req.body.idstates; const name = req.body.name; const user = req.body.user; const password = encriptPassword(req.body.password); const email = req.body.email; const telephone = req.body.telephone; const address = req.body.address; const district = req.body.district; const enabled = req.body.enabled ? 1 : 0; const idunits = req.body.idunits; execSQLQuery(`UPDATE users SET idusertype = ${idusertype}, idcities = ${idcities}, idstates = ${idstates}, name = '${name}', user = '${user}', password = '${password}', email = '${email}', telephone = '${telephone}', address = '${address}', district = '${district}', enabled = ${enabled}, idunits = ${idunits} WHERE idusers = ${idusers};`, res, req.originalUrl, [idusertype, idcities, idstates, name, user, password, email, telephone, address, district, enabled, idunits, idusers]); }); router.get('/disable/:idusers', verifyJWT, (req, res) => { const idusers = parseInt(req.params.idusers); execSQLQuery(`UPDATE users SET enabled = not enabled WHERE idusers = ${idusers};`, res, req.originalUrl); }); router.get('/getUser/:idusers', verifyJWT, (req, res) => { const idusers = parseInt(req.params.idusers); execSQLQuery(`SELECT * FROM users WHERE idusers = ${idusers};`, res, req.originalUrl); }); router.get('/getUserType', verifyJWT, (req, res) => { execSQLQuery(`SELECT * FROM usertype;`, res, req.originalUrl); }); router.post('/inserirleveluser', verifyJWT, (req, res) => { const idusers = req.body.idusers; const idunit = req.body.idunits; execSQLQuery(`INSERT INTO usersLevel (idusers, idunit) VALUES (?, ?);`, res, req.originalUrl, [idusers, idunit]); }); router.post('/insertUserType', verifyJWT, (req, res) => { const idusertype = req.body.idusertype; const description = req.body.description; const enabled = req.body.enabled ? 1 : 0; execSQLQuery(`INSERT INTO usertype (description, enabled) VALUES (?, ?);`, res, req.originalUrl, [description, enabled]); }); router.patch('/updateUserType', verifyJWT, (req, res) => { const idusertype = req.body.idusertype; const description = req.body.description; const enabled = req.body.enabled ? 1 : 0; execSQLQuery(`update usertype set description = ?, enabled = ? where idusertype = ?;`, res, req.originalUrl, [description, enabled, idusertype]); }); router.get('/getidusertype/:idusertype', (req, res) => { const idusertype = parseInt(req.params.idusertype); execSQLQuery(`SELECT * FROM usertype WHERE idusertype = ${idusertype};`, res, req.originalUrl); }); //AVATAR router.get('/getavatar', verifyJWT, (req, res) => { execSQLQuery(`SELECT * FROM myrobot.avatarusers;`, res, req.originalUrl); }); //LEVEL router.get('/getleveluser/:idusers/:idunit', (req, res) =>{ const idusers = parseInt(req.params.idusers); const idunit = parseInt(req.params.idunit); let sqlQuery = `SELECT * FROM usersLevel WHERE idusers = ${idusers} AND idunit = ${idunit};`; /* console.log(sqlQuery); */ execSQLQuery(sqlQuery, res, req.originalUrl); }); router.get('/getEmployee/:banco', (req, res) => { const db = req.params.banco; execSQLQuery2(`SELECT distinct fu.IDFuncionario, fu.Nome, fa.DescricaoAcesso FROM ${db}Funcionarios fu INNER JOIN ${db}FuncionariosAcesso fa ON fa.IDFuncionario = fu.IDFuncionario WHERE fa.Permitido = 1 AND fa.DescricaoAcesso = 'EAD Acesso Online Professor';`, res, req.originalUrl); }); router.get('/getEmployeeId/:id/:banco', (req, res) => { id = parseInt(req.params.id); const db = req.params.banco; execSQLQuery2(` SELECT distinct ${db}Funcionarios.IDFuncionario, ${db}Funcionarios.Nome, ${db}FuncionariosAcesso.DescricaoAcesso FROM ${db}Funcionarios INNER JOIN ${db}FuncionariosAcesso ON ${db}FuncionariosAcesso.IDFuncionario = ${db}Funcionarios.IDFuncionario WHERE ${db}FuncionariosAcesso.Permitido = 1 AND ${db}Funcionarios.IDFuncionario = ${id} AND ${db}FuncionariosAcesso.DescricaoAcesso = 'EAD Acesso Online Professor'`, res, req.originalUrl ); }); router.get('/getUser', verifyJWT, (req, res) => { execSQLQuery(`SELECT us.*, ut.description FROM users us inner join usertype ut on ut.idusertype = us.idusertype;`, res, req.originalUrl); }); router.get('/getStudentName/:id/:banco', verifyJWT, (req, res) => { id = parseInt(req.params.id); const db = req.params.banco; execSQLQuery2(` select top(1) C.Nome from ${db}TreinandosTurmas TT inner join ${db}Clientes C on C.IDCliente = TT.IDTreinando where TT.IDMatricula = ${id};`, res, req.originalUrl ); }) router.get('/SolucaoProblemas', (req, res) => { AtualizaConexaoMySQL(); }); router.get('/RelatorioAlunosAulasGeral/:idunits', (req, res) => { const idunits = parseInt(req.params.idunits); let condicao = `un.idunits = ${idunits}`; if (idunits == 0) condicao = "true"; const sqlQuery = `select *, al.Aulas * 2 as 'HorasAssistidas' from ( select un.idunits, un.unityname as 'Unidade', sc.idusers as 'Matricula', count(*) as 'Aulas', (select date_format(sc1.insert_date, '%d/%m/%Y %H:%i') from stepclass sc1 where sc1.idunits = sc.idunits and sc1.idusers = sc.idusers order by sc1.insert_date desc limit 1) as 'UltimaAula' from stepclass sc inner join units un on un.idunits = sc.idunits where ${condicao} group by un.idunits, sc.idusers, un.unityname order by un.unityname, sc.idusers asc) al`; mysqlConnection.query(sqlQuery, function(error, ListagemAulas, fields) { mysqlConnection.query(`select * from units un where ${condicao};`, function(error, ListaUnidades, fields) { LoopAlunosSQLServerGeral(ListagemAulas, ListaUnidades, 0, function(NovaListaAulas) { let TabelaHtml = ` Relatório de Alunos por Unidade `; for (let i = 0; i < NovaListaAulas.length; i++) { TabelaHtml += `${(i % 2 === 0) ? '' : ''} `; } TabelaHtml += `
Unidade Matricula Aulas Ultima Aula Horas Assistidas Aluno Cancelada Suspensa
${NovaListaAulas[i]['Unidade']} ${NovaListaAulas[i]['Matricula']} ${NovaListaAulas[i]['Aulas']} ${NovaListaAulas[i]['UltimaAula']} ${NovaListaAulas[i]['HorasAssistidas']} ${NovaListaAulas[i]['Aluno']} ${NovaListaAulas[i]['Cancelada']} ${NovaListaAulas[i]['Suspensa']}
`; res.send(JSON.stringify({"status": 200, "Dados": NovaListaAulas, "TabelaHtml": TabelaHtml})); }) }) }) }) function LoopAlunosSQLServerGeral(ListagemAulas, ListaUnidades, Index, callback) { if (Index < ListaUnidades.length) { const sqlQuery = `SELECT mt.IDMatricula, c.Nome, tu.Cancelada, tu.Suspensa FROM ${ListaUnidades[Index]['reference_db']}.dbo.MatriculasTreinandos mt INNER JOIN ${ListaUnidades[Index]['reference_db']}.dbo.Clientes c ON mt.IDTreinando = c.IDCliente INNER JOIN ${ListaUnidades[Index]['reference_db']}.dbo.Turmas tu ON tu.IdTurma = mt.CodigoTurma;`; sqlServerConnection.request().query(sqlQuery, function (error, AlunosUnidade, fields) { AlunosUnidade = AlunosUnidade['recordset']; if (AlunosUnidade && AlunosUnidade.length > 0) { for (let i = 0; i < AlunosUnidade.length; i++) { AlunosUnidade[i]['Encontrado'] = 0; for (let o = 0; o < ListagemAulas.length; o++) { if (ListagemAulas[o]['idunits'] == ListaUnidades[Index]['idunits']) { if (ListagemAulas[o]['Matricula'] == AlunosUnidade[i]['IDMatricula']) { ListagemAulas[o]['Aluno'] = AlunosUnidade[i]['Nome']; ListagemAulas[o]['Cancelada'] = AlunosUnidade[i]['Cancelada']; ListagemAulas[o]['Suspensa'] = AlunosUnidade[i]['Suspensa']; AlunosUnidade[i]['Encontrado'] = 1; } } } if (AlunosUnidade[i]['Encontrado'] == 0) { ListagemAulas.push({ "idunits": ListaUnidades[Index]['idunits'], "Unidade": ListaUnidades[Index]['unityname'], "Matricula": AlunosUnidade[i]['IDMatricula'], "Aulas": 0, "HorasAssistidas": 0, "Aluno": AlunosUnidade[i]['Nome'], "Cancelada": AlunosUnidade[i]['Cancelada'], "Suspensa": AlunosUnidade[i]['Suspensa'], }); } } } Index++; LoopAlunosSQLServer(ListagemAulas, ListaUnidades, Index, callback); }) } else { callback(ListagemAulas); } } router.get('/RelatorioAlunosAulas/:idunits', (req, res) => { const idunits = parseInt(req.params.idunits); let condicao = `un.idunits = ${idunits}`; if (idunits == 0) condicao = "true"; const sqlQuery = `select *, al.Aulas * 2 as 'HorasAssistidas' from ( select un.idunits, un.unityname as 'Unidade', sc.idusers as 'Matricula', cl.idcourses, /*(select co2.name from courses co2 where co2.idcourses = cl.idcourses) as 'Curso',*/ count(*) as 'Aulas', (select count(*) from stepclass sc1 where sc1.idunits = un.idunits and sc1.idusers = sc.idusers and sc1.idclasses in (select cl2.idclasses from classes cl2 where cl2.idcourses = cl.idcourses) and sc1.completedClass = 0) as 'Pendentes', (select date_format(sc1.insert_date, '%d/%m/%Y %H:%i') from stepclass sc1 where sc1.idunits = sc.idunits and sc1.idusers = sc.idusers order by sc1.insert_date desc limit 1) as 'UltimaAula' from stepclass sc inner join classes cl on cl.idclasses = sc.idclasses and cl.idcourses in (select co.idcourses from courses co where co.aditional = 0 and co.extracourse = 0) inner join units un on un.idunits = sc.idunits where ${condicao} group by un.idunits, sc.idusers, un.unityname, cl.idcourses order by un.unityname, sc.idusers asc) al`; mysqlConnection.query(sqlQuery, function(error, ListagemAulas, fields) { mysqlConnection.query(`select * from units un where ${condicao};`, function(error, ListaUnidades, fields) { // un.enabled = 1 and LoopAlunosSQLServer(ListagemAulas, ListaUnidades, 0, function(NovaListaAulas) { let TabelaHtml = ` Relatório de Alunos por Unidade `; for (let i = 0; i < NovaListaAulas.length; i++) { TabelaHtml += `${(i % 2 === 0) ? '' : ''} `; } TabelaHtml += `
Unidade Matricula Curso Aulas Pendentes Ultima Aula Horas Assistidas Aluno Cancelada Suspensa
${NovaListaAulas[i]['Unidade']} ${NovaListaAulas[i]['Matricula']} ${NovaListaAulas[i]['Curso']} ${NovaListaAulas[i]['Aulas']} ${NovaListaAulas[i]['Pendentes']} ${NovaListaAulas[i]['UltimaAula']} ${NovaListaAulas[i]['HorasAssistidas']} ${NovaListaAulas[i]['Aluno']} ${NovaListaAulas[i]['Cancelada']} ${NovaListaAulas[i]['Suspensa']}
`; res.send(JSON.stringify({"status": 200, "Dados": NovaListaAulas, "TabelaHtml": TabelaHtml})); }) }) }) }) function LoopAlunosSQLServer(ListagemAulas, ListaUnidades, Index, callback) { if (Index < ListaUnidades.length) { const sqlQuery = `SELECT distinct mt.IDMatricula, c.Nome, tu.IdTurma, tu.Cancelada, tu.Suspensa, tc.CodigoCurso, cu.NomeVersao as 'Curso', (select count(*) from ${ListaUnidades[Index]['reference_db']}.dbo.Chamadas ch where ch.IDTurma = tu.IdTurma and ch.IDCurso = cu.Codigo) as 'Chamadas', (select count(*) from ${ListaUnidades[Index]['reference_db']}.dbo.TurmasCalendario tc1 where tc1.IDTurma = tu.IdTurma and tc1.CodigoCurso = cu.Codigo and tc1.Ministrado = 1) as 'Ministradas' FROM ${ListaUnidades[Index]['reference_db']}.dbo.MatriculasTreinandos mt INNER JOIN ${ListaUnidades[Index]['reference_db']}.dbo.Clientes c ON mt.IDTreinando = c.IDCliente LEFT JOIN ${ListaUnidades[Index]['reference_db']}.dbo.Turmas tu ON tu.IdTurma = mt.CodigoTurma left join ${ListaUnidades[Index]['reference_db']}.dbo.TurmasCalendario tc on tc.IdTurma = tu.IdTurma left join ${ListaUnidades[Index]['reference_db']}.dbo.Cursos cu on cu.Codigo = tc.CodigoCurso order by mt.IDMatricula asc;`; sqlServerConnection.request().query(sqlQuery, function (error, AlunosUnidade, fields) { AlunosUnidade = AlunosUnidade['recordset']; if (AlunosUnidade && AlunosUnidade.length > 0) { //console.log(AlunosUnidade); for (let i = 0; i < AlunosUnidade.length; i++) { AlunosUnidade[i]['Encontrado'] = 0; for (let o = 0; o < ListagemAulas.length; o++) { if (ListagemAulas[o]['idunits'] == ListaUnidades[Index]['idunits'] && ListagemAulas[o]['Matricula'] == AlunosUnidade[i]['IDMatricula']) { ListagemAulas[o]['Aluno'] = AlunosUnidade[i]['Nome']; ListagemAulas[o]['Cancelada'] = (AlunosUnidade[i]['Cancelada'] != null) ? AlunosUnidade[i]['Cancelada'] : true; ListagemAulas[o]['Suspensa'] = (AlunosUnidade[i]['Suspensa'] != null) ? AlunosUnidade[i]['Suspensa'] : true; if (ListagemAulas[o]['idcourses'] == AlunosUnidade[i]['CodigoCurso']) { ListagemAulas[o]['Curso'] = AlunosUnidade[i]['Curso']; ListagemAulas[o]['Chamadas'] = AlunosUnidade[i]['Chamadas']; ListagemAulas[o]['Ministradas'] = AlunosUnidade[i]['Ministradas']; AlunosUnidade[i]['Encontrado'] = 1; } } } if (AlunosUnidade[i]['Encontrado'] == 0) { ListagemAulas.push({ "idunits": ListaUnidades[Index]['idunits'], "Unidade": ListaUnidades[Index]['unityname'], "Matricula": AlunosUnidade[i]['IDMatricula'], "Curso": AlunosUnidade[i]['Curso'], "Aulas": 0, "Pendentes": 0, "HorasAssistidas": 0, "Aluno": AlunosUnidade[i]['Nome'], "Cancelada": AlunosUnidade[i]['Cancelada'], "Suspensa": AlunosUnidade[i]['Suspensa'], "Chamadas": 0, "Ministradas": 0, }); } } } Index++; LoopAlunosSQLServer(ListagemAulas, ListaUnidades, Index, callback); }) } else { callback(ListagemAulas); } } router.post('/insertLog', (req, res) => { const desc = req.body.desc; console.log(desc); execSQLQuery(`insert into logs_general (description) values (?);`, res, req.originalUrl, [desc]); }); router.post('/transferirMatriculas', verifyJWT, (req, res) => { const Matricula = parseInt(req.body.Matricula); const idunitsD = parseInt(req.body.idunitsD); const dbD = req.body.dbD; const idunitsP = parseInt(req.body.idunitsP); const dbP = req.body.dbP; // JUNTAR DADOS DO ALUNO A SER TRANSFERIDO const SQLDadosAluno = `select distinct tt.CodigoTurma, mt.IDClienteResponsavel, tt.IDTreinando, pm.IDPreMatricula, tt.IDMatricula from ${dbD}TreinandosTurmas tt inner join ${dbD}Matriculas mt on mt.IDMatricula = tt.IDMatricula inner join ${dbD}PreMatricula pm on pm.IDPreMatricula = mt.IDPreMatricula where tt.IDMatricula = ${Matricula};`; //console.log(SQLDadosAluno); sqlServerConnection.request().query(SQLDadosAluno, function (error, DadosAluno, fields) { DadosAluno = DadosAluno['recordset'][0]; // CRIAR E ABASTECER AS TABELAS A SEREM MIGRADAS AdicionarTabelas(dbD, dbP, DadosAluno, function(success) { // MONTAR E EXECUTAR SQL DE INSERT MontaSQLInserts(dbP, DadosAluno, 0, 0, function(Sucesso) { // CASO DE ALGUM ERRO NO PROCESSO, PARA A EXECUCAO if (!Sucesso) { res.send(DadosAluno); return; } // REMOVER DADOS DUPLICADOS PARA MATRICULAS TREINANDOS const SQLRemoverDuplicados = `SELECT IDMatricula, IDTreinando, CodigoTurma, COUNT(*) AS CNT FROM ${dbP}MatriculasTreinandos GROUP BY IDMatricula, IDTreinando, CodigoTurma HAVING COUNT(*) > 1;`; sqlServerConnection.request().query(SQLRemoverDuplicados, function (error, results, fields) { console.log("Consulta de duplicados concluida com SUCESSO"); const Duplicados = results['recordset']; let SQLDeleteDup = `delete from ${dbP}MatriculasTreinandos where `; let SQLInsertDup = `insert into ${dbP}MatriculasTreinandos (IDMatricula, IDTreinando, CodigoTurma) values `; for (let i = 0; i < Duplicados.length; i++) { if (i > 0) { SQLInsertDup += `, `; SQLDeleteDup += ` or `; } SQLInsertDup += `(${Duplicados[i]['IDMatricula']}, ${Duplicados[i]['IDTreinando']}, ${Duplicados[i]['CodigoTurma']})`; SQLDeleteDup += `(IDMatricula = ${Duplicados[i]['IDMatricula']} and IDTreinando = ${Duplicados[i]['IDTreinando']} and CodigoTurma = ${Duplicados[i]['CodigoTurma']})`; } // REMOVER DUPLICADOS sqlServerConnection.request().query(SQLDeleteDup, function (error, results2, fields) { if (error) console.log("ERRO ao remover duplicados"); else console.log("Remover duplicados concluido com SUCESSO"); // INSERIR REGISTROS CORRETOS sqlServerConnection.request().query(SQLInsertDup, function (error, results2, fields) { if (error) console.log("ERRO ao incluir TreinandosTurmas"); else console.log("Incluir TreinandosTurmas concluido com SUCESSO"); // ATUALIZAR UNIDADE E MATRICULA NA TABELA STEPCLASS const SQLStepClass = `update stepclass set idunits = ${idunitsP}, idusers = ${DadosAluno.Tabelas[21].Dados[0]['IDMatricula']} where idunits = ${idunitsD} and idusers = ${Matricula};`; mysqlConnection.query(SQLStepClass, function (errorSC, resultsSC, fieldsSC) { if (errorSC) console.log("ERRO ao atualizar STEPCLASS"); else console.log("STEPCLASS atualizado com SUCESSO"); // ATUALIZAR UNIDADE E MATRICULA NA TABELA USERGIVENASNWERS const SQLUserGivenAnswers = `update usergivenanswers set idunits = ${idunitsP}, idusers = ${DadosAluno.Tabelas[21].Dados[0]['IDMatricula']} where idunits = ${idunitsD} and idusers = ${Matricula};`; mysqlConnection.query(SQLUserGivenAnswers, function (errorUG, resultsUG, fieldsUG) { if (errorUG) console.log("ERRO ao atualizar USERGIVENANSWERS"); else console.log("USERGIVENANSWERS atualizado com SUCESSO"); // ATUALIZAR UNIDADE E MATRICULA NA TABELA USERSTAGES const SQLUserStages = `update userstages set idunits = ${idunitsP}, idusers = ${DadosAluno.Tabelas[21].Dados[0]['IDMatricula']} where idunits = ${idunitsD} and idusers = ${Matricula};`; mysqlConnection.query(SQLUserStages, function (errorUS, resultsUS, fieldsUS) { if (errorUS) console.log("ERRO ao atualizar USERSTAGES"); else console.log("USERSTAGES atualizado com SUCESSO"); // ATUALIZAR UNIDADE E MATRICULA NA TABELA QRCODES const SQLQRCode = `update qrcodes set idunits = ${idunitsP}, idusers = ${DadosAluno.Tabelas[21].Dados[0]['IDMatricula']} where idunits = ${idunitsD} and idusers = ${Matricula};`; mysqlConnection.query(SQLQRCode, function (errorQR, resultsQR, fieldsQR) { if (errorQR) console.log("ERRO ao atualizar QRCODE"); else console.log("QRCODE atualizado com SUCESSO"); // ATUALIZAR UNIDADE E MATRICULA NA TABELA BARCODES const SQLBarCode = `update barcodes set idunits = ${idunitsP}, idusers = ${DadosAluno.Tabelas[21].Dados[0]['IDMatricula']} where idunits = ${idunitsD} and idusers = ${Matricula};`; mysqlConnection.query(SQLBarCode, function (errorBC, resultsBC, fieldsBC) { if (errorBC) console.log("ERRO ao atualizar BARCODE"); else console.log("BARCODE atualizado com SUCESSO"); // TRANCAR ALUNO NA UNIDADE ANTERIOR const SQLPreRequerimento = `insert into ${dbD}PreRequerimento (IDTreinando, IDMatricula, Data, IDFuncionario, IDTurma, TipoRequerimento, TipoRequerimentoAnt, Status, IDMotivo, DescricaoMotivo) values (${DadosAluno.IDTreinando}, ${DadosAluno.IDMatricula}, '2021-02-19', 1250, 0, 'T', 'T', 'C', 6, 'Aluno transferido para outra unidade');`; sqlServerConnection.request().query(SQLPreRequerimento, function (error, resPR, fields) { if (error) console.log("ERRO ao criar PreRequerimento"); else console.log("PreRequerimento criado com sucesso"); const SQLGetIDs = `select coalesce((select top(1) IdTransferencia from ${dbD}Transferencias order by IdTransferencia desc), 0) + 1 as 'IDTransferencia', coalesce((select top(1) IDPreRequerimento from ${dbD}PreRequerimento order by IDPreRequerimento desc), 1) as 'IDPreRequerimento';`; sqlServerConnection.request().query(SQLGetIDs, function (error, resIDs, fields) { if (error) console.log("ERRO ao reunir IDs para Transferencia"); else console.log("Reunido IDs para Transferencia com SUCESSO"); const IDs = resIDs['recordset'][0]; const SQLTransferencia = `insert into ${dbD}Transferencias (IdTransferencia, IDTreinando, IDMatricula, DataTransferencia, Motivo, CobrarTaxa, ValorTaxa, VencimentoTaxa, FuncionarioResponsavel, ObsAviso, TipoTransferencia, ParcelasTaxa, IDMotivo, IDPreRequerimento) values (${IDs.IDTransferencia}, ${DadosAluno.IDTreinando}, ${DadosAluno.IDMatricula}, '2021-02-19', 'Aluno transferido para outra unidade', 0, 0, '2021-02-19', 1250, '', 'T', 1, 6, ${IDs.IDPreRequerimento});`; sqlServerConnection.request().query(SQLTransferencia, function (error, resTransf, fields) { if (error) console.log("ERRO ao criar Transferencia"); else console.log("Transferencia criada com sucesso"); let SQLTransfDet = `insert into ${dbD}TransferenciasDetalhe (IDTransferencia, IDCurso, CodigoTurma, IDTreinando) values `; for (let i = 0; i < DadosAluno.Tabelas[22].Dados.length; i++) { if (i > 0) SQLTransfDet += `, `; SQLTransfDet += `(${IDs.IDTransferencia}, ${DadosAluno.Tabelas[22].Dados[i].IDCurso}, ${DadosAluno.CodigoTurma}, ${DadosAluno.IDTreinando})`; } sqlServerConnection.request().query(SQLTransfDet, function (error, resTransfDet, fields) { if (error) console.log("ERRO ao criar TransferenciaDetalhes"); else console.log("TransferenciaDetalhes criado com sucesso"); const SQLRemoverTurma = `update ${dbD}TreinandosTurmas set CodigoTurma = 0 where IDMatricula = ${DadosAluno.IDMatricula} and IDTreinando = ${DadosAluno.IDTreinando};`; sqlServerConnection.request().query(SQLRemoverTurma, function (error, resRemTurma, fields) { if (error) console.log("ERRO ao setar CodigoTurma = 0 em TreinandosTurmas"); else console.log("CodigoTurma = 0 realizado com sucesso"); res.send(DadosAluno); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); function AdicionarTabelas(dbD, dbP, DadosAluno, callback) { let Tabelas = []; let Campos0 = [{"Forcar": true, "CampoP": "IDFuncionario", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "Turmas", "IdTurma", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos0, true, function(Success) { let Campos1 = [{"Forcar": true, "CampoP": "IDAtendente", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "Atendimentos", "IdAtendimento", `select at.* from ${dbD}Atendimentos at inner join ${dbD}Matriculas mt on mt.IDAtendimento = at.IdAtendimento where mt.IDMatricula = ${DadosAluno['IDMatricula']};`, Tabelas, Campos1, true, function(Success) { let Campos2 = [{"IdxT": 1, "IdxD": 0, "CampoD": "IdAtendimento", "CampoP": "IdAtendimento", "Seq": true}, {"Forcar": true, "CampoP": "IDFuncionarioCadastro", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "AtendimentosCabecalho", "", `select ac.* from ${dbD}AtendimentosCabecalho ac inner join ${dbD}Matriculas mt on mt.IDAtendimento = ac.IdAtendimento where mt.IDMatricula = ${DadosAluno['IDMatricula']};`, Tabelas, Campos2, true, function(Success) { let Campos3 = [{"IdxT": 1, "IdxD": 0, "CampoD": "IdAtendimento", "CampoP": "IDAtendimento", "Seq": true}, {"Forcar": true, "CampoP": "IDAtendente", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "AtendimentosComissoes", "", `select ac.* from ${dbD}AtendimentosComissoes ac inner join ${dbD}Matriculas mt on mt.IDAtendimento = ac.IdAtendimento where mt.IDMatricula = ${DadosAluno['IDMatricula']};`, Tabelas, Campos3, true, function(Success) { let Campos4 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IdTurma", "Seq": false}, {"Forcar": true, "CampoP": "IDFuncionarioInstrutor", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "AtendimentosFuncionarios", "", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos4, false, function(Success) { let Campos5 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "Notas", "", `IDTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos5, true, function(Success) { let Campos6 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IdTurma", "Seq": false}, {"Forcar": true, "CampoP": "IDFuncionario", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "TransacoesTurmas", "IDTransacao", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos6, true, function(Success) { let Campos7 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IdTurma", "Seq": false}, {"Forcar": true, "CampoP": "CodigoInstrutor", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "TransacoesTurmasCalendario", "", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos7, true, function(Success) { let Campos8 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "TransacoesTurmasDetalhe", "", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos8, true, function(Success) { let Campos9 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IdTurma", "Seq": false}, {"Forcar": true, "CampoP": "IdInstrutor", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "TurmasAgendaCalendario", "IdTurmasAgendaCalendario", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos9, true, function(Success) { let Campos10 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "TurmasDetalhe", "", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos10, true, function(Success) { let Campos11 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IdTurma", "Seq": false}, {"Forcar": true, "CampoP": "CodigoInstrutor", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "TurmasCalendario", "IdTurmasCalendario", `IdTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos11, true, function(Success) { let Campos12 = [{"Forcar": true, "CampoP": "FuncionarioCadastro", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "Clientes", "IDCliente", `IDCliente in (${DadosAluno['IDClienteResponsavel']}, ${DadosAluno['IDTreinando']});`, Tabelas, Campos12, true, function(Success) { let Campos13 = [{"IdxT": 12, "IdxD": 0, "CampoD": "IDCliente", "CampoP": "IDResponsavel", "Seq": false}, {"Forcar": true, "CampoP": "IDFuncionario", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "PreMatricula", "IDPreMatricula", `IDPreMatricula = ${DadosAluno['IDPreMatricula']}`, Tabelas, Campos13, true, function(Success) { let Campos14 = [{"IdxT": 13, "IdxD": 0, "CampoD": "IDPreMatricula", "CampoP": "IDPreMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "PreMatriculaTreinandos", "", `IDPreMatricula = ${DadosAluno['IDPreMatricula']}`, Tabelas, Campos14, true, function(Success) { let Campos15 = [{"IdxT": 13, "IdxD": 0, "CampoD": "IDPreMatricula", "CampoP": "IDPreMatricula", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "PreMatriculaParcelas", "", `IDPreMatricula = ${DadosAluno['IDPreMatricula']}`, Tabelas, Campos15, true, function(Success) { let Campos16 = [{"IdxT": 13, "IdxD": 0, "CampoD": "IDPreMatricula", "CampoP": "IDPreMatricula", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "PreMatriculaFinanceiroMaterial", "", `IDPreMatricula = ${DadosAluno['IDPreMatricula']}`, Tabelas, Campos16, true, function(Success) { let Campos17 = [{"IdxT": 13, "IdxD": 0, "CampoD": "IDPreMatricula", "CampoP": "IDPreMatricula", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "PreMatriculaCursos", "", `IDPreMatricula = ${DadosAluno['IDPreMatricula']}`, Tabelas, Campos17, true, function(Success) { let Campos18 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}, {"Forcar": true, "CampoP": "IDInstrutor", "Valor": 1250}, {"Forcar": true, "CampoP": "IDFuncionarioAPP", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "Chamadas", "IDChamadas", `IDTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos18, true, function(Success) { let Campos19 = [{"IdxT": 18, "IdxD": 0, "CampoD": "IDChamadas", "CampoP": "IDChamadas", "Seq": true}]; PreencheDadosTabela(dbD, dbP, 0, "ChamadasConteudos", "", `select cd.* from ${dbD}Chamadas ch inner join ${dbD}ChamadasConteudos cd on cd.IDChamadas = ch.IDChamadas where ch.IDTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos19, true, function(Success) { let Campos20 = [{"IdxT": 18, "IdxD": 0, "CampoD": "IDChamadas", "CampoP": "IDChamadas", "Seq": true}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "ChamadasDetalhes", "", `select cd.* from ${dbD}Chamadas ch inner join ${dbD}ChamadasDetalhes cd on cd.IDChamadas = ch.IDChamadas where ch.IDTurma = ${DadosAluno['CodigoTurma']}`, Tabelas, Campos20, true, function(Success) { let Campos21 = [{"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "CodigoTurma", "Seq": false}, {"IdxT": 12, "IdxD": 0, "CampoD": "IDCliente", "CampoP": "IDClienteResponsavel", "Seq": false}, {"IdxT": 1, "IdxD": 0, "CampoD": "IdAtendimento", "CampoP": "IDAtendimento", "Seq": false}, {"IdxT": 13, "IdxD": 0, "CampoD": "IDPreMatricula", "CampoP": "IDPreMatricula", "Seq": false}, {"Forcar": true, "CampoP": "FuncionarioVenda", "Valor": 1250}, {"Forcar": true, "CampoP": "FuncionarioCadastro", "Valor": 1250}]; let Ano = (new Date().getFullYear() - 2000) * 10000; PreencheDadosTabela(dbD, dbP, Ano, "Matriculas", "IDMatricula", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos21, true, function(Success) { let Campos22 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "CodigoTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "TreinandosTurmas", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos22, true, function(Success) { let Campos23 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "TreinandosTurmasMateriais", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos23, true, function(Success) { let Campos24 = [{"Ignorar": true, "CampoP": "NumeroProva"}, {"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "NotasDetalhesSequencial", "NumeroProva", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos24, true, function(Success) { let Campos25 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "NotasDetalhes", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos25, true, function(Success) { let Campos26 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "CodigoTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "MatriculasTreinandos", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos26, true, function(Success) { let Campos27 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "MatriculasProdutos", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos27, true, function(Success) { let Campos28 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "CodigoTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "MatriculasCursos", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos28, true, function(Success) { let Campos29 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "CodigoTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "HistoricoTreinandosTurmas", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos29, true, function(Success) { let Campos30 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": 0, "CampoD": "IDCliente", "CampoP": "IDClienteResponsavel", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "CodigoTurma", "Seq": false}, {"Forcar": true, "CampoP": "FuncionarioCadastro", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "HistoricoMatriculas", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos30, true, function(Success) { let Campos31 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}, {"Forcar": true, "CampoP": "IDFuncionario", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "HistoricoFaltas", "IDHistFalta", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos31, true, function(Success) { let Campos32 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}, {"Forcar": true, "CampoP": "IDFuncionario", "Valor": 1250}]; PreencheDadosTabela(dbD, dbP, 0, "HistoricoEvadidos", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos32, true, function(Success) { let Campos33 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": (Tabelas[12].Dados.length - 1), "CampoD": "IDCliente", "CampoP": "IDTreinando", "Seq": false}, {"IdxT": 0, "IdxD": 0, "CampoD": "IdTurma", "CampoP": "IDTurma", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "Evadidos", "", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos33, true, function(Success) { let Campos34 = [{"IdxT": 21, "IdxD": 0, "CampoD": "IDMatricula", "CampoP": "IDMatricula", "Seq": false}, {"IdxT": 12, "IdxD": 0, "CampoD": "IDCliente", "CampoP": "Cliente", "Seq": false}]; PreencheDadosTabela(dbD, dbP, 0, "ContasReceber", "IDContasReceber", `IDMatricula = ${DadosAluno['IDMatricula']}`, Tabelas, Campos34, true, function(Success) { DadosAluno['Tabelas'] = Tabelas; callback(true); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); }); } function PreencheDadosTabela(dbD, dbP, AcrescimoID, NomeTabela, IDTabela, Consulta, Tabelas, CamposReplace, ErroCritico, callback) { let Query = ``; if (Consulta[0] == "s") Query = Consulta; else Query = `select * from ${dbD}${NomeTabela} where ${Consulta};` sqlServerConnection.request().query(Query, function (error, Dados, fields) { const SQLID = (IDTabela != "") ? `select top(1) (${IDTabela} + 1) as 'ID' from ${dbP}${NomeTabela} order by ${IDTabela} desc;` : "select 0 as 'ID';"; sqlServerConnection.request().query(SQLID, function (error, ID, fields) { ID = (ID['recordset'].length > 0) ? ID['recordset'][0]['ID'] : (1 + AcrescimoID); if (Dados) { Dados = Dados['recordset']; for (let i = 0; i < Dados.length; i++) { if (IDTabela != "") Dados[i][IDTabela] = (ID + i); for (let o = 0; o < CamposReplace.length; o++) { if (CamposReplace[o].Forcar) { Dados[i][CamposReplace[o].CampoP] = CamposReplace[o].Valor; } else if (!CamposReplace[o].Ignorar) { Dados[i][CamposReplace[o].CampoP] = Tabelas[CamposReplace[o].IdxT].Dados[CamposReplace[o].IdxD][CamposReplace[o].CampoD] + ((Dados.length > 1 && CamposReplace[o].Seq) ? i : 0); } } } Tabelas.push({"Tabela": NomeTabela, "IDTabela": IDTabela, "Dados": Dados, "ProxID": ID, "SQL": "", "CamposReplace": CamposReplace, "ErroCritico": ErroCritico}); console.log(`Tabela ${NomeTabela} consultada com sucesso`); } else { Tabelas.push({"Tabela": NomeTabela, "IDTabela": IDTabela, "Dados": [], "ProxID": 0, "SQL": "", "CamposReplace": CamposReplace, "ErroCritico": ErroCritico}); console.log(`Erro ao consultar tabela ${NomeTabela}`); console.log(Consulta); //console.log(error); } callback(true); }); }); } function MontaSQLInserts(dbP, DadosAluno, IndexT, IndexD, callback) { let ModoInsert = true; if (IndexT < DadosAluno.Tabelas.length) { if (IndexD < DadosAluno.Tabelas[IndexT].Dados.length) { DadosAluno.Tabelas[IndexT]['SQL'] += "insert into " + dbP + DadosAluno.Tabelas[IndexT].Tabela + " ("; for (let key in DadosAluno.Tabelas[IndexT].Dados[IndexD]) { if (DadosAluno.Tabelas[IndexT]['SQL'][DadosAluno.Tabelas[IndexT]['SQL'].length - 1] != "(") DadosAluno.Tabelas[IndexT]['SQL'] += ", "; let InsereCampo = true; for (let j = 0; j < DadosAluno.Tabelas[IndexT].CamposReplace.length; j++) { if (DadosAluno.Tabelas[IndexT].CamposReplace[j].Ignorar && DadosAluno.Tabelas[IndexT].CamposReplace[j].CampoP == key) { InsereCampo = false; break; } } if (InsereCampo) DadosAluno.Tabelas[IndexT]['SQL'] += key; } DadosAluno.Tabelas[IndexT]['SQL'] += ") values ("; for (let key in DadosAluno.Tabelas[IndexT].Dados[IndexD]) { let InsereCampo = true; for (let j = 0; j < DadosAluno.Tabelas[IndexT].CamposReplace.length; j++) { if (DadosAluno.Tabelas[IndexT].CamposReplace[j].Ignorar && DadosAluno.Tabelas[IndexT].CamposReplace[j].CampoP == key) { InsereCampo = false; break; } } if (InsereCampo) { // SE NAO FOR O PRIMEIRO VALOR INSERIDO if (DadosAluno.Tabelas[IndexT]['SQL'][DadosAluno.Tabelas[IndexT]['SQL'].length - 1] != "(") DadosAluno.Tabelas[IndexT]['SQL'] += ", "; // SE FOR DATA if (DadosAluno.Tabelas[IndexT].Dados[IndexD][key] && (DadosAluno.Tabelas[IndexT].Dados[IndexD][key].toString().includes(" (Horário ") || DadosAluno.Tabelas[IndexT].Dados[IndexD][key].toString().includes(" Time)"))) { DadosAluno.Tabelas[IndexT].Dados[IndexD][key] = new Date(DadosAluno.Tabelas[IndexT].Dados[IndexD][key].toString()).toISOString().replace('T', ' ').split('.')[0]; } if (DadosAluno.Tabelas[IndexT].Dados[IndexD][key] == null) DadosAluno.Tabelas[IndexT]['SQL'] += "null"; else DadosAluno.Tabelas[IndexT]['SQL'] += "'" + DadosAluno.Tabelas[IndexT].Dados[IndexD][key] + "'"; } } DadosAluno.Tabelas[IndexT]['SQL'] += "); "; IndexD++; MontaSQLInserts(dbP, DadosAluno, IndexT, IndexD, callback); } else { if (ModoInsert) { sqlServerConnection.request().query(DadosAluno.Tabelas[IndexT]['SQL'], function (error, Dados, fields) { if (error && DadosAluno.Tabelas[IndexT].ErroCritico) { console.log("INSERT SQL EXECUTADO com ERRO na tabela " + DadosAluno.Tabelas[IndexT].Tabela); console.log(DadosAluno.Tabelas[IndexT]['SQL']); console.log(error); callback(false); return; } else { console.log("INSERT SQL EXECUTADO com SUCESSO na tabela " + DadosAluno.Tabelas[IndexT].Tabela); } IndexT++; IndexD = 0; setTimeout(() => { MontaSQLInserts(dbP, DadosAluno, IndexT, IndexD, callback); }, 300); }); } else { IndexT++; IndexD = 0; MontaSQLInserts(dbP, DadosAluno, IndexT, IndexD, callback); } } } else { callback(ModoInsert); } } router.get('/getOnlineUsers/:tempo/:idunits', (req, res) => { const Tempo = req.params.tempo; const idunits = req.params.idunits; const SQLOnline = `select concat(un.reference_db, '.dbo.') as 'Banco', un.unityname as 'Unidade', co.name as 'Curso', cl.name as 'Aula', cl.description as 'Pauta', sc.idusers as 'Matricula', case when sc.completedClass = 1 then 'Sim' else 'Não' end as 'Concluida', date_format(sc.insert_date, '%d/%m/%Y %h:%i') as 'IniciadoEm', date_format(sc.update_date, '%d/%m/%Y %h:%i') as 'VistoUltimo', (select count(*) from stepclass sc1 where sc1.idunits = sc.idunits and sc1.insert_date > date_format (now(), '%y-%m-%d')) as 'AulasHoje', (select count(*) from stepclass sc1 where sc1.insert_date > date_format(now(), '%y-%m-%d')) as 'TotalAulas' from stepclass sc inner join units un on un.idunits = sc.idunits inner join classes cl on cl.idclasses = sc.idclasses inner join courses co on co.idcourses = cl.idcourses where ${(idunits == 0) ? 'true' : 'sc.idunits = ' + idunits} and sc.update_date > date_sub(now(), interval ${Tempo} minute) order by sc.update_date desc;`; mysqlConnection.query(SQLOnline, function (error, Alunos, fields) { let SQLNomes = ``; for (let i = 0; i < Alunos.length; i++) { if (SQLNomes != ``) SQLNomes += ` union all `; SQLNomes += `select distinct '${Alunos[i].Unidade}' as Unidade, tt.IDMatricula as 'Matricula', cl.Nome, '${Alunos[i].Curso}' as Curso, '${Alunos[i].Aula}' as Aula, '${Alunos[i].Concluida}' as Concluida, '${Alunos[i].IniciadoEm}' as IniciadoEm, '${Alunos[i].VistoUltimo}' as VistoUltimo from ${Alunos[i].Banco}TreinandosTurmas tt inner join ${Alunos[i].Banco}Clientes cl on cl.IDCliente = tt.IDTreinando where tt.IDMatricula = ${Alunos[i].Matricula}` } execSQLQuery2(SQLNomes, res, req.originalUrl); }); }); return router; } module.exports = routes;