ZoeApi/controllers/usersController.js

1172 lines
78 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 = `<html>
<head>
<meta charset="UTF-8">
<title>Relatório de Alunos por Unidade</title>
</head>
<body>
<table>
<tr>
<th>Unidade</th>
<th>Matricula</th>
<th>Aulas</th>
<th>Ultima Aula</th>
<th>Horas Assistidas</th>
<th>Aluno</th>
<th>Cancelada</th>
<th>Suspensa</th>
</tr>`;
for (let i = 0; i < NovaListaAulas.length; i++) {
TabelaHtml += `${(i % 2 === 0) ? '<tr>' : '<tr style="background: #eee">'}
<td>${NovaListaAulas[i]['Unidade']}</td>
<td>${NovaListaAulas[i]['Matricula']}</td>
<td>${NovaListaAulas[i]['Aulas']}</td>
<td>${NovaListaAulas[i]['UltimaAula']}</td>
<td>${NovaListaAulas[i]['HorasAssistidas']}</td>
<td>${NovaListaAulas[i]['Aluno']}</td>
<td>${NovaListaAulas[i]['Cancelada']}</td>
<td>${NovaListaAulas[i]['Suspensa']}</td>
</tr>`;
}
TabelaHtml += `</table></body></html>`;
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 = `<html>
<head>
<meta charset="UTF-8">
<title>Relatório de Alunos por Unidade</title>
</head>
<body>
<table>
<tr>
<th>Unidade</th>
<th>Matricula</th>
<th>Curso</th>
<th>Aulas</th>
<th>Pendentes</th>
<th>Ultima Aula</th>
<th>Horas Assistidas</th>
<th>Aluno</th>
<th>Cancelada</th>
<th>Suspensa</th>
</tr>`;
for (let i = 0; i < NovaListaAulas.length; i++) {
TabelaHtml += `${(i % 2 === 0) ? '<tr>' : '<tr style="background: #eee">'}
<td>${NovaListaAulas[i]['Unidade']}</td>
<td>${NovaListaAulas[i]['Matricula']}</td>
<td>${NovaListaAulas[i]['Curso']}</td>
<td>${NovaListaAulas[i]['Aulas']}</td>
<td>${NovaListaAulas[i]['Pendentes']}</td>
<td>${NovaListaAulas[i]['UltimaAula']}</td>
<td>${NovaListaAulas[i]['HorasAssistidas']}</td>
<td>${NovaListaAulas[i]['Aluno']}</td>
<td>${NovaListaAulas[i]['Cancelada']}</td>
<td>${NovaListaAulas[i]['Suspensa']}</td>
</tr>`;
}
TabelaHtml += `</table></body></html>`;
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;