ZoeApi/controllers/relatorioController.js

670 lines
31 KiB
JavaScript

require('../connections/mysql-server');
require('../connections/sql-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 () {
function CheckFiltros(Filtro, reference_db, callback) {
let Condicao1 = "";
let Condicao2 = "";
if (Filtro == 0) {
callback(Condicao1, Condicao2);
}
else if (Filtro == 1) {
Condicao1 = `where R.Cancelada = 'Sim'`;
callback(Condicao1, Condicao2);
}
else if (Filtro == 2) {
Condicao1 = `where R.Cancelada = 'Não'`;
callback(Condicao1, Condicao2);
}
else if (Filtro == 3) {
Condicao2 = `where T.Cursos = T.Concluidos`;
callback(Condicao1, Condicao2);
}
else if (Filtro == 4 || Filtro == 5) {
let MySQLQuery = `select distinct group_concat(sc.idusers) as 'Matriculas' from stepclass sc inner join units un on un.idunits = sc.idunits where un.reference_db = '${reference_db.replace('.dbo.', '')}';`;
mysqlConnection.query(MySQLQuery, function (error, Matriculas, fields) {
Condicao2 = `where T.Matricula ${(Filtro == 5) ? 'not' : ''} in (${Matriculas[0]['Matriculas']})`
callback(Condicao1, Condicao2);
});
}
}
function LoopSQLMatriculas(Unidades, Index, SQLServerQuery, DataInicial, DataFinal, Filtro, callback) {
if (Index < Unidades.length) {
CheckFiltros(Filtro, Unidades[Index], function(Condicao1, Condicao2) {
if (Index > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select * from (
select
R.Matricula, R.Aluno, R.Data, R.Unidade, R.ValorTotal, R.ValorPrimeira, R.Mensalidade, R.QTDParcela, R.Parcelas, R.ValorParcela, R.TotalMaterial, R.TotalSMaterial, R.TotalCMaterial, R.Cancelada,
count(R.IDCurso) as 'Cursos',
sum(case when R.Concluiu = 1 then 1 else 0 end) as 'Concluidos',
(select top 1 cu.NomeVersao from ${Unidades[Index]}TreinandosTurmas tt inner join ${Unidades[Index]}Cursos cu on cu.Codigo = tt.IDCurso and cu.IDTipoCurso in (3,5) where tt.IDMatricula = R.Matricula) as 'Curso'
from (
select distinct
tt.IDMatricula as 'Matricula',
cl.Nome as 'Aluno',
convert(varchar, mt.DataMatricula, 103) as 'Data',
'${Unidades[Index].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
ROUND(mt.ValorTotal, 2) as 'ValorTotal',
ROUND(pm.ValorMatricula, 2) as 'ValorPrimeira',
ROUND(pm.ValorParcela, 2) as 'Mensalidade',
pm.QTDParcela,
A.Parcelas,
ROUND(A.ValorParcela, 2) as 'ValorParcela',
ROUND(A.Parcelas * A.ValorParcela, 2) as 'TotalMaterial',
ROUND(pm.QTDParcela * pm.ValorParcela, 2) as 'TotalSMaterial',
ROUND((pm.QTDParcela * pm.ValorParcela) + (A.Parcelas * A.ValorParcela), 2) as 'TotalCMaterial',
case when pr.TipoRequerimento = 'C' then 'Sim' else 'Não' end as 'Cancelada',
tt.Concluiu,
tt.IDCurso
from ${Unidades[Index]}TreinandosTurmas tt
inner join ${Unidades[Index]}Matriculas mt on mt.IDMatricula = tt.IDMatricula
inner join ${Unidades[Index]}Clientes cl on cl.IDCliente = tt.IDTreinando
inner join ${Unidades[Index]}PreMatricula pm on pm.IDPreMatricula = mt.IDPreMatricula
left join (select R.*, R.Parcelas * R.ValorParcela as 'TotalMaterial' from (select IDPreMatricula, count(*) as 'Parcelas', ValorParcela from ${Unidades[Index]}PreMatriculaFinanceiroMaterial group by IDPreMatricula, ValorParcela) R) A on A.IDPreMatricula = pm.IDPreMatricula
left join ${Unidades[Index]}PreRequerimento pr on pr.IDTreinando = tt.IDTreinando
where ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}) R
${Condicao1}
group by R.Matricula, R.Aluno, R.Data, R.Unidade, R.ValorTotal, R.ValorPrimeira, R.Mensalidade, R.QTDParcela, R.Parcelas, R.ValorParcela, R.TotalMaterial, R.TotalSMaterial, R.TotalCMaterial, R.Cancelada) T
${Condicao2}
`;
Index++;
LoopSQLMatriculas(Unidades, Index, SQLServerQuery, DataInicial, DataFinal, Filtro, callback);
});
}
else {
callback(SQLServerQuery);
}
}
router.post('/getMatriculas', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
const Filtro = parseInt(req.body.Filtro);
LoopSQLMatriculas(Unidades, 0, "", DataInicial, DataFinal, Filtro, function(SQLServerQuery) {
SQLServerQuery += `order by T.Matricula asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
});
router.post('/getTickets', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select A.Media, B.Moda, C.*, D.MediaMatricula from (
select
round(sum(pp.Valor) / count(pp.Valor), 2) as 'Media'
from ${Unidades[i]}PreMatriculaParcelas pp
inner join ${Unidades[i]}PreMatricula pm on pm.IDPreMatricula = pp.IDPreMatricula
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where pp.Material = 0 and ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}) A inner join (
select top 1
round(pp.Valor, 2) as 'Moda'
from ${Unidades[i]}PreMatriculaParcelas pp
inner join ${Unidades[i]}PreMatricula pm on pm.IDPreMatricula = pp.IDPreMatricula
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where pp.Material = 0 and ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}
group by pp.Valor
order by count(pp.Valor) desc) B on 1 = 1
inner join (
select
round(pp.Valor, 2) as 'Valor',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}PreMatriculaParcelas pp
inner join ${Unidades[i]}PreMatricula pm on pm.IDPreMatricula = pp.IDPreMatricula
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where pp.Material = 0 and ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}
) C on 1 = 1
inner join (
select
round(sum(pm.ValorMatricula) / count(pm.ValorMatricula), 2) as 'MediaMatricula'
from ${Unidades[i]}PreMatricula pm
inner join ${Unidades[i]}Matriculas mt on mt.IDPreMatricula = pm.IDPreMatricula
where ${(!DataInicial || !DataFinal) ? '1=1' : "mt.DataMatricula between '" + DataInicial + "' and '" + DataFinal + "'"}
) D on 1 = 1
`;
}
SQLServerQuery += `order by C.Unidade asc, C.Valor asc;`;
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getCancelamentos', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select distinct
cl.Nome as 'Aluno',
pr.IDMatricula as 'Matricula',
convert(varchar, pr.Data, 103) as 'Data',
mv.DescricaoMotivo as 'Motivo',
pr.DescricaoMotivo,
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}PreRequerimento pr
inner join ${Unidades[i]}TreinandosTurmas tt on tt.IDTreinando = pr.IDTreinando
inner join ${Unidades[i]}Clientes cl on cl.IDCliente = pr.IDTreinando
inner join ${Unidades[i]}Motivos mv on mv.IDMotivo = pr.IDMotivo
where pr.TipoRequerimento = 'C' and ${(!DataInicial || !DataFinal) ? '1=1' : "pr.Data between '" + DataInicial + "' and '" + DataFinal + "'"}
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getVisitas', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select distinct
ra.Descricao as 'Resultado',
mt.IDMatricula,
fa.Descricao as 'FormaAtendimento',
ve.Descricao as 'Divulgacao',
pv.Descricao as 'Curso',
fu.Nome as 'Funcionario',
ca.Nome as 'Cliente',
convert(varchar, ca.Data, 103) + ' ' + convert(varchar, ca.Hora, 8) as 'Data',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}ControleAtendimento ca
inner join ${Unidades[i]}FormasAtendimento fa on fa.IDFormaAtendimento = ca.IDFormaAtendimento
inner join ${Unidades[i]}Veiculos ve on ve.IDVeiculo = ca.IDVeiculo
left join ${Unidades[i]}ProdutosVendas pv on pv.IDProduto = ca.IDProduto
inner join ${Unidades[i]}Funcionarios fu on fu.IDFuncionario = ca.IDFuncionario
left join ${Unidades[i]}Atendimentos at on at.IdAtendimento = ca.IDAtendimento
left join ${Unidades[i]}ResultadosAtendimento ra on ra.IDResultadoAtendimento = at.IDResultadoAtendimento
left join ${Unidades[i]}Matriculas mt on (mt.IDAtendimento + 1) = at.IdAtendimento
where ${(!DataInicial || !DataFinal) ? '1=1' : "ca.Data between '" + DataInicial + "' and '" + DataFinal + "'"}
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getAlunosIrregulares', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `
select distinct
mt.IDMatricula as 'Matricula',
c.Nome,
case when tt.Faltoso = 0 then 'Não' else 'Sim' end as 'Faltoso',
case when tt.Desistente = 0 then 'Não' else 'Sim' end as 'Desistente',
case when tt.Concluiu = 0 then 'Não' else 'Sim' end as 'Concluiu',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade'
from ${Unidades[i]}MatriculasTreinandos mt
inner join ${Unidades[i]}Clientes c ON mt.IDTreinando = c.IDCliente
inner join ${Unidades[i]}TreinandosTurmas tt on tt.IDTreinando = mt.IDTreinando
where tt.Faltoso = 1 or tt.Concluiu = 1 or tt.Desistente = 1
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.get('/getAlunosDesativados', verifyJWT, (req, res) => {
execSQLQuery(`select
ad.idusers as 'Matricula',
ad.idunits,
un.unityname as 'Unidade',
ad.desativado,
case when ad.desativado = 1 then 'Sim' else 'Não' end as 'DesativadoT'
from alunosdesativados ad
inner join units un on un.idunits = ad.idunits;`, res, req.originalUrl);
});
router.get('/getAlunosDesativadosP', verifyJWT, (req, res) => {
execSQLQuery(`select
uh.idusers as 'Matricula',
uh.idunits,
un.unityname as 'Unidade',
uh.disabled as 'desativado',
case when uh.disabled = 1 then 'Sim' else 'Não' end as 'DesativadoT'
from usershomework uh
inner join units un on un.idunits = uh.idunits;`, res, req.originalUrl);
});
router.post('/getAlunosCursos', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select
S.Curso,
S.Alunos,
S.Unidade,
round((convert(decimal,S.Alunos, 2) / S.Total) * 100, 2) as 'Porcentagem'
from (
select distinct
co.Codigo as 'IDCurso',
co.NomeVersao as 'Curso',
count(tt.IDCurso) as 'Alunos',
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
(select sum(T.Alunos) as 'Total' from (
select distinct
co.Codigo as 'IDCurso',
count(tt.IDCurso) as 'Alunos'
from ${Unidades[i]}TreinandosTurmas tt
inner join ${Unidades[i]}Cursos co on co.Codigo = tt.IDCurso and co.IDTipoCurso in (3,5)
inner join ${Unidades[i]}Matriculas ma on ma.IDMatricula = tt.IDMatricula and ma.DataMatricula >= '${DataInicial}' and ma.DataMatricula <= '${DataFinal}'
group by co.NomeVersao, co.Codigo) T) as 'Total'
from ${Unidades[i]}TreinandosTurmas tt
inner join ${Unidades[i]}Cursos co on co.Codigo = tt.IDCurso and co.IDTipoCurso in (3,5)
inner join ${Unidades[i]}Matriculas ma on ma.IDMatricula = tt.IDMatricula and ma.DataMatricula >= '${DataInicial}' and ma.DataMatricula <= '${DataFinal}'
group by co.NomeVersao, co.Codigo) S
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getAlunosAtivos', (req, res) => {
let Unidades = req.body.Unidades;
const CruzaMySQL = req.body.cruzamysql;
const Cancelada = req.body.cancelada ? 1 : 0;
const Suspensa = req.body.suspensa ? 1 : 0;
const Desistente = req.body.desistente ? 1 : 0;
const Faltoso = req.body.faltoso ? 1 : 0;
const Concluiu = req.body.concluiu ? 1 : 0;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let NovaUnidades = [];
for (let i = 0; i < Unidades.length; i++) {
NovaUnidades.push({"db": Unidades[i], "TabelaDatas": [], "TabelaSQL": "(select * from ("});
}
GetUltimaAulaMatriculas(0, NovaUnidades, function(newUnidades) {
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
if (!CruzaMySQL) {
SQLServerQuery += `select ROW_NUMBER() OVER(ORDER BY GG.Unidade ASC, GG.Matricula ASC) AS 'N', * from (
select distinct
T.Unidade,
T.IDMatricula as 'Matricula',
T.Nome,
T.Responsavel,
T.Endereco,
T.Fone,
T.UltimaData
from (
select
'${NovaUnidades[i]['db'].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
*,
case when R.CH_Consumida >= R.CargaHorariaTotal then 1 else 0 end as 'Concluiu'
from (
select
tt.IDMatricula,
tt.IDTreinando,
tt.IDCurso,
tu.IdTurma,
(select re.Nome from ${NovaUnidades[i]['db']}Clientes re where re.IDCliente = mt.IDClienteResponsavel) as 'Responsavel',
cl.Endereco,
case
when cl.Celular != '' then cl.Celular
when cl.FoneResidencial != '' then cl.FoneResidencial
when cl.FoneRecado != '' then cl.FoneRecado
when cl.FoneComercial != '' then cl.FoneComercial
end as 'Fone',
cl.Nome,
tu.Codigo,
tu.DataInicio,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario asc) as 'PrimeiraAula',
tu.DataTermino,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario desc) as 'UltimaAula',
cu.CH_Individual,
(select (count(*) * 2) from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso) as 'CH_Consumida',
(select top(1) ch.Data from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso order by ch.IDChamadas desc) as 'UltimaChamada',
H_${i}.UltimaData,
case when pr.IDPreRequerimento is not null then 1 else 0 end as 'Trancada',
tt.Desistente,
tt.Faltoso,
tu.Cancelada,
tu.Suspensa,
tu.CargaHorariaTotal,
mt.DataMatricula
from ${NovaUnidades[i]['db']}TreinandosTurmas tt
inner join ${NovaUnidades[i]['db']}Turmas tu on tu.IdTurma = tt.CodigoTurma
inner join ${NovaUnidades[i]['db']}Cursos cu on cu.Codigo = tt.IDCurso
inner join ${NovaUnidades[i]['db']}Clientes cl on cl.IDCliente = tt.IDTreinando
inner join ${NovaUnidades[i]['db']}Matriculas mt on mt.IDMatricula = tt.IDMatricula
left join ${NovaUnidades[i]['db']}PreRequerimento pr on pr.IDMatricula = tt.IDMatricula and pr.IDTurma = tt. CodigoTurma and pr.TipoRequerimento = 'T'
left join ${NovaUnidades[i]['TabelaSQL']} on H_${i}.Matricula = tt.IDMatricula) R
) T
where (T.Cancelada = ${Cancelada} and T.Suspensa = ${Suspensa} and T.Desistente = ${Desistente} and T.Faltoso = ${Faltoso} and T.Concluiu = ${Concluiu} and T.DataMatricula < '${DataFinal}') or
T.UltimaData between '${DataInicial}' and '${DataFinal}'
) GG
`;
}
else {
SQLServerQuery += `select ROW_NUMBER() OVER(ORDER BY GG.Unidade ASC, GG.Matricula ASC) AS 'N', * from (
select distinct
T.Unidade,
T.IDMatricula as 'Matricula',
T.Nome,
T.Responsavel,
T.Endereco,
T.Fone
from (
select
'${NovaUnidades[i]['db'].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
*,
case when R.CH_Sistema >= R.CargaHorariaTotal then 1 else 0 end as 'Concluiu'
from (
select
tt.IDMatricula,
tt.IDTreinando,
tt.IDCurso,
tu.IdTurma,
(select re.Nome from ${NovaUnidades[i]['db']}Clientes re where re.IDCliente = mt.IDClienteResponsavel) as 'Responsavel',
cl.Endereco,
case
when cl.Celular != '' then cl.Celular
when cl.FoneResidencial != '' then cl.FoneResidencial
when cl.FoneRecado != '' then cl.FoneRecado
when cl.FoneComercial != '' then cl.FoneComercial
end as 'Fone',
cl.Nome,
tu.Codigo,
tu.DataInicio,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario asc) as 'PrimeiraAula',
tu.DataTermino,
(select top(1) tc.Data from ${NovaUnidades[i]['db']}TurmasCalendario tc where tc.IdTurma = tt.CodigoTurma and tc.CodigoCurso = tt.IDCurso order by tc.IdTurmasCalendario desc) as 'UltimaAula',
cu.CH_Individual,
(select (count(*) * 2) from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso) as 'CH_Consumida',
(select top(1) ch.Data from ${NovaUnidades[i]['db']}Chamadas ch where ch.IDTurma = tt.CodigoTurma and ch. IDCurso = tt.IDCurso order by ch.IDChamadas desc) as 'UltimaChamada',
H_${i}.UltimaData,
H_${i}.PrimeiraData,
H_${i}.CH_Sistema,
case when pr.IDPreRequerimento is not null then 1 else 0 end as 'Trancada',
tt.Desistente,
tt.Faltoso,
tu.Cancelada,
tu.Suspensa,
tu.CargaHorariaTotal,
mt.DataMatricula
from ${NovaUnidades[i]['db']}TreinandosTurmas tt
left join ${NovaUnidades[i]['db']}Turmas tu on tu.IdTurma = tt.CodigoTurma
inner join ${NovaUnidades[i]['db']}Cursos cu on cu.Codigo = tt.IDCurso
left join ${NovaUnidades[i]['db']}ProgramaTreinamentoCursos pc on pc.CodigoCurso = cu.Codigo
left join ${NovaUnidades[i]['db']}ProgramaTreinamento pt on pt.Codigo = pc.Codigo and pt.Desativado = 0
inner join ${NovaUnidades[i]['db']}Clientes cl on cl.IDCliente = tt.IDTreinando
left join ${NovaUnidades[i]['db']}Matriculas mt on mt.IDMatricula = tt.IDMatricula
left join ${NovaUnidades[i]['db']}PreRequerimento pr on pr.IDMatricula = tt.IDMatricula and pr.IDTurma = tt. CodigoTurma and pr.TipoRequerimento = 'T'
left join ${NovaUnidades[i]['TabelaSQL']} on H_${i}.Matricula = tt.IDMatricula) R
) T
where (T.Cancelada = ${Cancelada} and T.Suspensa = ${Suspensa} and T.Desistente = ${Desistente} and T.Faltoso = ${Faltoso} and T.Concluiu = ${Concluiu} and T.DataMatricula < '${DataFinal}')
${(Concluiu == 1) ? `` : `or ((T.PrimeiraData <= '${DataInicial}' and T.UltimaData >= '${DataFinal}') or
(T.PrimeiraData between '${DataInicial}' and '${DataFinal}') or
(T.UltimaData between '${DataInicial}' and '${DataFinal}') or
(T.PrimeiraData between '${DataInicial}' and '${DataFinal}' and T.UltimaData >= '${DataFinal}') or
(T.UltimaData between '${DataInicial}' and '${DataFinal}' and T.PrimeiraData <= '${DataInicial}')
)`}) GG
`;
}
}
SQLServerQuery += `order by GG.Unidade asc, GG.Matricula asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
});
function GetUltimaAulaMatriculas(Index, Unidades, callback) {
if (Index < Unidades.length) {
let SQLQuery = `select
sc.idusers,
max(date_format(sc.insert_date, '%Y-%m-%d')) as 'UltimaAula'
from stepclass sc
inner join units un on un.idunits = sc.idunits
where un.reference_db = '${Unidades[Index]['db'].replace('.dbo.', '')}'
group by sc.idusers;`;
let newSQLQuery = `select
sc.idusers,
tc.idtraineeprogram,
(count(sc.insert_date) * 2) as 'CH_Consumida',
min(date_format(sc.insert_date, '%Y-%m-%d')) as 'PrimeiraAula',
max(date_format(sc.insert_date, '%Y-%m-%d')) as 'UltimaAula'
from stepclass sc
inner join classes cl on cl.idclasses = sc.idclasses
inner join traineeprogramcourses tc on tc.idcourses = cl.idcourses
inner join traineeprogram tp on tp.idtraineeprogram = tc.idtraineeprogram and tp.disabled = 0
inner join units un on un.idunits = sc.idunits
where un.reference_db = '${Unidades[Index]['db'].replace('.dbo.', '')}'
group by sc.idusers, tc.idtraineeprogram;`;
mysqlConnection.query(newSQLQuery, function (error, Datas, fields) {
Unidades[Index]['TabelaDatas'] = Datas;
for (let i = 0; i < Datas.length; i++) {
if (i > 0)
Unidades[Index]['TabelaSQL'] += `union all `;
Unidades[Index]['TabelaSQL'] += `select '${Datas[i]['idusers']}' as 'Matricula', '${Datas[i]['PrimeiraAula']}' as 'PrimeiraData', '${Datas[i]['UltimaAula']}' as 'UltimaData', '${Datas[i]['idtraineeprogram']}' as 'ProgramaTreinamento', '${Datas[i]['CH_Consumida']}' as 'CH_Sistema' `;
}
if (Datas.length == 0) {
Unidades[Index]['TabelaSQL'] += `select '' as 'Matricula', '' as 'PrimeiraData', '' as 'UltimaData', '' as 'ProgramaTreinamento', '' as 'CH_Sistema'`;
}
Unidades[Index]['TabelaSQL'] += `) G_${Index}) H_${Index}`;
Index++;
GetUltimaAulaMatriculas(Index, Unidades, callback);
});
}
else {
callback(Unidades);
}
}
router.post('/getContasReceber', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
LoopContasReceber(0, Unidades, DataInicial, DataFinal, [], function(Resultados) {
res.send({ "status": 200, "error": null, "response": Resultados });
});
//SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
//execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
function LoopContasReceber(Index, Unidades, DataInicial, DataFinal, Resultados, callback) {
if (Index < Unidades.length) {
sqlServerConnection.request().query(`exec ${Unidades[Index]}proc_InicializaRelAtrasadas '${DataInicial}','${DataFinal}',0,1,0,0,'G',0,'';`, function (error, results, fields) {
for (let i = 0; i < results['recordsets'][0].length; i++) {
results['recordsets'][0][i]['Unidade'] = Unidades[Index].split('.dbo.')[0].replace('SGP', '');
Resultados.push(results['recordsets'][0][i]);
}
Index++;
LoopContasReceber(Index, Unidades, DataInicial, DataFinal, Resultados, callback);
});
}
else {
callback(Resultados);
}
}
router.post('/getParcelasAtrasadas', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
const IDCliente = req.body.IDCliente;
let SQLServerQuery = `exec ${Unidade}proc_PesquisaParcelasAtrasadas ${IDMatricula},${IDCliente},3, .02, .0003;`;
//SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getHistoricoFinanceiro', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
let SQLServerQuery = `exec ${Unidade}proc_ContasReceberHistorico .02, .0003,3,${IDMatricula};`;
//SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/InserirCobranca', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
const IDFuncionario = req.body.IDFuncionario;
const DataStr = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ")[0];
const Data = DataStr.split('-')[0] + "-" + DataStr.split('-')[1] + "-" + DataStr.split('-')[2];
const Hora = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '').split(" ")[1];
const Protestado = req.body.Protestado ? 1 : 0;
const Observacao = req.body.Observacao;
const IDTipoRequisicao = req.body.IDTipoRequisicao;
const IDDepartamento = req.body.IDDepartamento;
let SQLServerQuery = `exec ${Unidade}proc_InserirCobranca ${IDMatricula},${IDFuncionario},'${Data}','${Hora}',${Protestado},'${Observacao}',${IDTipoRequisicao},${IDDepartamento};`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.get('/getListaFuncionarios/:db', verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(`select IDFuncionario, Nome from ${db}Funcionarios;`, res, req.originalUrl);
});
router.get('/getHistoricoCobrancas/:db/:IDMatricula', verifyJWT, (req, res) => {
const db = req.params.db;
const IDMatricula = req.params.IDMatricula;
execSQLQuery2(`exec ${db}proc_HistoricoGeral ${IDMatricula};`, res, req.originalUrl);
});
router.get('/verificaAGendamento/:db/:IDMatricula', verifyJWT, (req, res) => {
const db = req.params.db;
const IDMatricula = req.params.IDMatricula;
execSQLQuery2(`exec ${db}proc_VerificaAgendamentoCobranca ${IDMatricula};`, res, req.originalUrl);
});
router.post('/InserirAgendamento', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDMatricula = req.body.IDMatricula;
const DataAgendamento = req.body.DataAgendamento;
let SQLServerQuery = `exec ${Unidade}proc_InserirAgendamentoCobranca ${IDMatricula},'${DataAgendamento}',1;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.patch('/AtualizarDadosCliente', verifyJWT, (req, res) => {
const Unidade = req.body.Unidade;
const IDCliente = req.body.Cliente;
const CEP = req.body.CEP;
const Endereco = req.body.Endereco;
const Bairro = req.body.Bairro;
const Cidade = req.body.Cidade;
const UF = req.body.UF;
const Celular = req.body.Celular;
const FoneComercial = req.body.FoneComercial;
const FoneResidencial = req.body.FoneResidencial;
const FoneRecado = req.body.FoneRecado;
let SQLServerQuery = `update SGP${Unidade}.dbo.Clientes set
CEP = '${CEP}',
Endereco = '${Endereco}',
Bairro = '${Bairro}',
Cidade = '${Cidade}',
UF = '${UF}',
Celular = '${Celular}',
FoneComercial = '${FoneComercial}',
FoneResidencial = '${FoneResidencial}',
FoneRecado = '${FoneRecado}'
where IDCliente = ${IDCliente};`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
router.post('/getAgendamentosCobranca', verifyJWT, (req, res) => {
const Unidades = req.body.Unidades;
const DataInicial = req.body.DataInicial;
const DataFinal = req.body.DataFinal;
let SQLServerQuery = ``;
for (let i = 0; i < Unidades.length; i++) {
if (i > 0) {
SQLServerQuery += `union all
`;
}
SQLServerQuery += `select
'${Unidades[i].replace('.dbo.', '').replace('SGP', '')}' as 'Unidade',
cb.IDCobranca,
ac.IDAgendamentoCobranca,
cb.IDMatricula,
cl.Nome as 'Cliente',
cl.Celular,
convert(varchar, cb.Data, 103) + ' ' + convert(varchar, cb.Hora, 24) as 'Data',
convert(varchar, ac.DataAgendamento, 103) as 'DataAgendamento',
cb.Observacao
from ${Unidades[i]}Cobranca cb
inner join ${Unidades[i]}AgendamentoCobranca ac on ac.IDCobranca = cb.IDCobranca
inner join ${Unidades[i]}Matriculas mt on mt.IDMatricula = cb.IDMatricula
inner join ${Unidades[i]}Clientes cl on cl.IDCliente = mt.IDClienteResponsavel
where ${(!DataInicial || !DataFinal) ? '1=1' : "ac.DataAgendamento between '" + DataInicial + "' and '" + DataFinal + "'"}
`;
}
SQLServerQuery += `order by Unidade asc;`;
//console.log(SQLServerQuery);
execSQLQuery2(SQLServerQuery, res, req.originalUrl);
});
return router;
};
module.exports = routes;