ZoeApi/controllers/chamadaController.js

171 lines
8.1 KiB
JavaScript

require('../connections/mysql-server');
require('../helpers/CheckToken');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var routes = function () {
router.get('/getChamadasProfessor/:IDFuncionario/:db', verifyJWT, (req, res) => {
const IDFuncionario = parseInt(req.params.IDFuncionario);
const db = req.params.db;
execSQLQuery2(`SELECT
ch.IDChamadas,
ch.IDTurma,
ch.IDCurso,
ch.Data,
tt.IDMatricula,
co.NomeVersao
FROM ${db}Chamadas ch
INNER JOIN ${db}Cursos co ON co.Codigo = ch.IDCurso
INNER JOIN ${db}TreinandosTurmas tt ON tt.IDCurso = ch.IDCurso AND tt.CodigoTurma = ch.IDTurma
WHERE ch.IDInstrutor = ${IDFuncionario};`, res, req.originalUrl);
});
router.get('/getQRCodeAluno/:_key', verifyJWT, (req, res) => {
const _key = req.params._key;
execSQLQuery(`SELECT
qr.idusers,
qr.idunits
FROM qrcodes qr
where qr._key = ?;`, res, req.originalUrl, [_key]);
});
router.get('/getInfoAluno/:IDMatricula/:db', verifyJWT, (req, res) => {
const IDMatricula = parseInt(req.params.IDMatricula);
const db = req.params.db;
execSQLQuery2(`SELECT DISTINCT
cl.Nome,
cu.Codigo AS 'IDCurso',
cu.NomeVersao,
tt.IDTreinando,
tt.CodigoTurma,
(select count(*) from ${db}Chamadas ch2 where ch2.IDTurma = tt.CodigoTurma and ch2.IDCurso = tt.IDCurso) AS qtde_presencas
FROM ${db}TreinandosTurmas tt
INNER JOIN ${db}Clientes cl ON cl.IDCliente = tt.IDTreinando
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
LEFT JOIN ${db}Chamadas ch ON tt.CodigoTurma = ch.IDTurma AND tt.IDCurso = ch.IDCurso
LEFT JOIN ${db}ChamadasDetalhes cd ON cd.IDChamadas = ch.IDChamadas AND cd.IDTreinando = tt.IDTreinando
WHERE tt.IDMatricula = ${IDMatricula} and tt.CodigoTurma > 0
GROUP BY cl.Nome, cu.Codigo, cu.NomeVersao, tt.IDTreinando, tt.CodigoTurma, tt.IDCurso
ORDER BY cl.Nome ASC;`, res, req.originalUrl);
});
router.get('/checarCursoParaChamada/:IDTurma/:idCourse/:db', verifyJWT, (req, res) => {
const IDTurma = parseInt(req.params.IDTurma);
const idCourse = parseInt(req.params.idCourse);
const db = req.params.db;
execSQLQuery2(`SELECT
tc.IdTurmasCalendario,
tc.Data,
tc.HoraInicial,
tc.HoraFinal,
tc.CodigoInstrutor
FROM ${db}TurmasCalendario tc
WHERE tc.IdTurma = ${IDTurma} AND CodigoCurso = ${idCourse} AND tc.Ministrado = 0
ORDER BY tc.Data ASC;`, res, req.originalUrl);
});
router.post('/EnviarChamada', verifyJWT, (req, res) => {
const db = req.body.db;
const Alunos = JSON.parse(req.body.Alunos);
console.log(Alunos);
RealizaChamada(0, db, Alunos, function(Sucesso) {
res.send(Sucesso);
});
});
router.post('/insertNewToken', verifyJWT, (req, res) => {
const db = req.body.db;
const description = req.body.description;
const idunits = req.body.idunits;
const token = req.body.token;
execSQLQuery(`insert into appnotifications (description, idunits, token) values (?, ?, ?);`, res, req.originalUrl, [description, idunits, token]);
});
router.post('/changeReceive', verifyJWT, (req, res) => {
const token = req.body.token;
execSQLQuery(`update appnotifications set receive = !receive where token = ?;`, res, req.originalUrl, [token]);
});
router.get('/getAllUnitTokens/:idunits', verifyJWT, (req, res) => {
const idunits = req.params.idunits;
execSQLQuery(`select * from appnotifications where receive = 1 and ${(idunits > 0) ? 'idunits = ?' : 'true'};`, res, req.originalUrl, [idunits]);
});
return router;
};
function RealizaChamada(Index, db, Alunos, callback) {
if (Index < Alunos.length) {
const sqlGetTurmasCalendario = `SELECT
tc.IdTurmasCalendario,
tc.Data,
tc.HoraInicial,
tc.HoraFinal,
tc.CodigoInstrutor,
tt.IDTreinando
FROM ${db}TurmasCalendario tc
inner join ${db}TreinandosTurmas tt on tt.IDCurso = tc.CodigoCurso and tc.IdTurma = tt.CodigoTurma
WHERE tc.IdTurma = ${Alunos[Index]['CodigoTurma']} AND CodigoCurso = ${Alunos[Index]['IDCurso']} AND tc.Ministrado = 0
ORDER BY tc.Data ASC;`;
sqlServerConnection.request().query(sqlGetTurmasCalendario, function (error0, results0, fields0) {
if (error0 || !results0.recordset || results0.recordset.length == 0) {
console.log("Erro GetTurmasCalendario: " + error0);
Index++;
RealizaChamada(Index, db, Alunos, callback);
return;
}
const TurmasCalendario = results0.recordset;
Alunos[Index]['IDTreinando'] = TurmasCalendario[0]['IDTreinando'];
const sqlGetChamada = `select coalesce((SELECT TOP(1) IDChamadas FROM ${db}Chamadas ORDER BY IDChamadas DESC), 1) as 'IDChamadas';`;
sqlServerConnection.request().query(sqlGetChamada, function (error1, results1, fields1) {
const IDChamadas = results1.recordsets[0][0]['IDChamadas'] + 1;
const IDTurma = Alunos[Index]['CodigoTurma'];
const IDCurso = Alunos[Index]['IDCurso'];
const Data = formatDate(TurmasCalendario[0]['Data'], 0);
const Hora = formatDate(TurmasCalendario[0]['HoraInicial'], 1);
const HoraInicial = formatDate(TurmasCalendario[0]['HoraInicial'], 1);
const HoraFinal = formatDate(TurmasCalendario[0]['HoraFinal'], 1);
const CodigoInstrutor = TurmasCalendario[0]['CodigoInstrutor'];
const DataEnvioApp = formatDate(new Date(), 0);
const sqlInsertChamada = `INSERT INTO ${db}Chamadas (IDChamadas, IDTurma, IDCurso, Data, Hora, HoraInicio, HoraTermino, IDInstrutor, Flex, APP, DataEnvioAPP, DataAtualizacaoAPP, IDFuncionarioAPP)
VALUES (${IDChamadas}, ${IDTurma}, ${IDCurso}, '${Data}', '${Hora}', '${HoraInicial}', '${HoraFinal}', ${CodigoInstrutor}, 1, 1, '${DataEnvioApp}', '${DataEnvioApp}', ${CodigoInstrutor});`;
sqlServerConnection.request().query(sqlInsertChamada, function (error2, results2, fields2) {
const sqlInsertChamadaConteudo = `INSERT INTO ${db}ChamadasConteudos (IDChamadas, CodigoConteudo, DescricaoConteudo)
VALUES (${IDChamadas}, 0, 'Aula de robótica');`;
sqlServerConnection.request().query(sqlInsertChamadaConteudo, function (error3, results3, fields3) {
const sqlUpdateTurmasCalendario = `UPDATE ${db}TurmasCalendario SET
Ministrado = 1,
Data = '${Data}'
WHERE IdTurmasCalendario = ${TurmasCalendario[0]['IdTurmasCalendario']};`;
sqlServerConnection.request().query(sqlUpdateTurmasCalendario, function (error4, results4, fields4) {
const sqlInsertChamadasDetalhes = `INSERT INTO ${db}ChamadasDetalhes (IDChamadas, IDTreinando, Presente, Avisada, Justificativa, UltimaCarta)
VALUES (${IDChamadas}, ${Alunos[Index]['IDTreinando']}, 1, 0, null, null);`;
sqlServerConnection.request().query(sqlInsertChamadasDetalhes, function (error5, results5, fields5) {
Index++;
RealizaChamada(Index, db, Alunos, callback);
});
});
});
});
});
});
}
else {
callback(true);
}
}
function formatDate(date, ret) {
var novaData = date.toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ");
return novaData[ret];
}
module.exports = routes;