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;