require('../connector'); const express = require('express'); const router = express.Router(); var routes = function () { //#region LOGIN router.post('/login', function(req, res) { const usuario = req.body.usuario; const senha = req.body.senha; ExecuteQueryPriorie(`select * from usuarios where usuario = '${usuario}' and senha = '${senha}' and habilitado = 1;`, req, res); }); //#endregion //#region USUARIOS router.post('/cadastrarUsuario', function(req, res) { const idusuarios = parseInt(req.body.idusuarios); const iddepartamentos = req.body.iddepartamentos; const nome = req.body.nome; const usuario = req.body.usuario; const senha = req.body.senha; const habilitado = req.body.habilitado ? 1 : 0; const email = req.body.email; ExecuteQueryPriorie(`insert into usuarios (iddepartamentos, nome, senha, usuario, habilitado, email) values (${iddepartamentos}, '${nome}', '${senha}', '${usuario}', ${habilitado}, '${email}');`, req, res); }); router.patch('/atualizarUsuario', function(req, res) { const idusuarios = parseInt(req.body.idusuarios); const iddepartamentos = parseInt(req.body.iddepartamentos); const nome = req.body.nome; const usuario = req.body.usuario; const senha = req.body.senha; const habilitado = req.body.habilitado ? 1 : 0; const email = req.body.email; ExecuteQueryPriorie(`update usuarios set iddepartamentos = ${iddepartamentos}, nome = '${nome}', senha = '${senha}', usuario = '${usuario}', habilitado = ${habilitado}, email = '${email}' where idusuarios = ${idusuarios};`, req, res); }); router.delete('/removerUsuario/:idusuarios', function(req, res) { const idusuarios = parseInt(req.params.idusuarios); ExecuteQueryPriorie(`delete from usuarios where idusuarios = ${idusuarios};`, req, res); }); router.get('/getAllUsuarios', function(req, res) { ExecuteQueryPriorie(`select us.* , dp.descricao as 'departamento' from usuarios us inner join departamentos dp on dp.iddepartamentos = us.iddepartamentos order by nome asc;`, req, res); }); router.get('/getUsuariosEnabled', function(req, res) { ExecuteQueryPriorie(`select * from usuarios where habilitado = 1;`, req, res); }); router.get('/getUsuario/:idusuarios', function(req, res) { const idusuarios = parseInt(req.params.idusuarios); ExecuteQueryPriorie(`select * from usuarios where idusuarios = ${idusuarios};`, req, res); }); //#endregion //#region TAREFAS router.post('/cadastrarTarefa', function(req, res) { const idtarefas = parseInt(req.body.idtarefas); const criadapor = parseInt(req.body.criadapor); const descricao = fixApostrofe(req.body.descricao); const idprojetos = parseInt(req.body.idprojetos); const idtopicos = parseInt(req.body.idtopicos); const idstatus = parseInt(req.body.idstatus); const idtipotarefa = parseInt(req.body.idtipotarefa); const previsaoinicio = req.body.previsaoinicio; const iniciadoem = req.body.iniciadoem; const previsaotermino = req.body.previsaotermino; const concluidoem = req.body.concluidoem; const prioridade = parseInt(req.body.prioridade); const observacao = fixApostrofe(req.body.observacao); ExecuteQueryPriorie(`insert into tarefas (criadapor, descricao, idprojetos, idtopicos, idstatus, idtipotarefa, ${(previsaoinicio) ? 'previsaoinicio,' : ''} ${(iniciadoem) ? 'iniciadoem,' : ''} ${(previsaotermino) ? 'previsaotermino,' : ''} ${(concluidoem) ? 'concluidoem,' : ''} prioridade, observacao) values (${criadapor}, '${descricao}', ${idprojetos}, ${idtopicos}, ${idstatus}, ${idtipotarefa}, ${(previsaoinicio) ? "'" + previsaoinicio + "'," : ''} ${(iniciadoem) ? "'" + iniciadoem + "'," : ''} ${(previsaotermino) ? "'" + previsaotermino + "'," : ''} ${(concluidoem) ? "'" + concluidoem + "'," : ''} ${prioridade}, '${observacao}');`, req, res); }); router.patch('/atualizarTarefa', function(req, res) { const idtarefas = parseInt(req.body.idtarefas); const criadapor = parseInt(req.body.criadapor); const descricao = fixApostrofe(req.body.descricao); const idprojetos = parseInt(req.body.idprojetos); const idtopicos = parseInt(req.body.idtopicos); const idstatus = parseInt(req.body.idstatus); const idtipotarefa = parseInt(req.body.idtipotarefa); const previsaoinicio = req.body.previsaoinicio; const iniciadoem = req.body.iniciadoem; const previsaotermino = req.body.previsaotermino; const concluidoem = req.body.concluidoem; const prioridade = parseInt(req.body.prioridade); const observacao = fixApostrofe(req.body.observacao); ExecuteQueryPriorie(`update tarefas set criadapor = ${criadapor}, descricao = '${descricao}', idprojetos = ${idprojetos}, idtopicos = ${idtopicos}, idstatus = ${idstatus}, idtipotarefa = ${idtipotarefa}, ${(previsaoinicio) ? "previsaoinicio = '" + previsaoinicio + "',": ''} ${(iniciadoem) ? "iniciadoem = '" + iniciadoem + "',": ''} ${(previsaotermino) ? "previsaotermino = '" + previsaotermino + "',": ''} ${(concluidoem) ? "concluidoem = '" + concluidoem + "',": ''} prioridade = ${prioridade}, observacao = '${observacao}' where idtarefas = ${idtarefas};`, req, res, function(Status) { if (Status == 200 && idstatus == 4) { const SQLDados = `select A.*, us.nome as 'Gerente', us.email as 'EmailGerente', us2.nome from (select distinct ta.idtarefas, date_format(ta.concluidoem, '%d/%m/%Y') as 'ConcluidaEm', dm.idusuarios, pr.descricao as 'Projeto', tp.descricao as 'Topico', ta.descricao as 'Tarefa' from tarefas ta inner join projetos pr on pr.idprojetos = ta.idprojetos inner join topicos tp on tp.idtopicos = ta.idtopicos inner join departamentosmembros dm on dm.iddepartamentos = pr.iddepartamentos inner join usuarios us on us.iddepartamentos = dm.iddepartamentos and dm.gestor = 1 where ta.idtarefas = ${idtarefas}) A inner join usuarios us on us.idusuarios = A.idusuarios inner join projetosmembros pm on pm.idtarefas = A.idtarefas inner join usuarios us2 on us2.idusuarios = pm.idusuarios;`; connection.query(SQLDados, function(error, Dados, fields) { if (Dados && Dados[0]['EmailGerente'] != "" && Dados[0]['EmailGerente'] != null) { let Membros = ""; for (let i = 0; i < Dados.length; i++) { if (i > 0) Membros += ", "; Membros += Dados[i]['nome']; } const Mensagem = `Olá ${Dados[0]['Gerente']}!
Uma tarefa do projeto ${Dados[0]['Projeto']} foi marcada com concluída:

Projeto: ${Dados[0]['Projeto']}
Tópico: ${Dados[0]['Topico']}
Tarefa: ${Dados[0]['Tarefa']}
Data de Conclusão: ${Dados[0]['ConcluidaEm']}
Membros: ${Membros}

Acesse o sistema para conferir!

Clique aqui para acessar o sistema`; EnviarEmail(Mensagem, "Tarefa Concluída", Dados[0]['EmailGerente']); } }); } }); }); router.delete('/removerTarefa/:idtarefas', function(req, res) { const idtarefas = parseInt(req.params.idtarefas); ExecuteQueryPriorie(`delete from tarefas where idtarefas = ${idtarefas};`, req, res); }); router.get('/getAllTarefas', function(req, res) { ExecuteQueryPriorie(`select * from tarefas;`, req, res); }); router.get('/getTarefa/:idtarefas', function(req, res) { const idtarefas = parseInt(req.params.idtarefas); ExecuteQueryPriorie(`select * from tarefas where idtarefas = ${idtarefas};`, req, res); }); router.get('/getTarefasUsuario/:idusuarios/:iddepartamentos/:IdsStatus/:idprojetos/:idtopicos', function(req, res) { const idusuarios = parseInt(req.params.idusuarios); const iddepartamentos = parseInt(req.params.iddepartamentos); const idprojetos = parseInt(req.params.idprojetos); const idtopicos = parseInt(req.params.idtopicos); const IdsStatus = req.params.IdsStatus; let Condicao = `pr.iddepartamentos = ${iddepartamentos} /*${(idusuarios == 0) ? 'or' : 'and'}*/and ((`; if (idusuarios == 0) Condicao += `pm.idusuarios in (select distinct dm.idusuarios from departamentosmembros dm where dm.iddepartamentos = ${iddepartamentos})`; else Condicao += "pm.idusuarios = " + idusuarios; Condicao += " and st.idstatus in " + IdsStatus; if (idprojetos > 0) Condicao += " and ta.idprojetos = " + idprojetos; if (idtopicos > 0) Condicao += " and ta.idtopicos = " + idtopicos; if (IdsStatus.includes("100")) { //Condicao += `) or (0 = (select count(*) from projetosmembros pm1 where pm1.idtarefas = ta.idtarefas)${(idprojetos > 0) ? ' and ta.idprojetos = ' + idprojetos : ''}))`; Condicao += `) or (0 = (select count(*) from projetosmembros pm1 inner join tarefas ta1 on ta1.idtarefas = pm1.idtarefas inner join projetos pr1 on pr1.idprojetos = ta1.idprojetos where pm1.idtarefas = ta.idtarefas)${(idprojetos > 0) ? ' and ta.idprojetos = ' + idprojetos : ''}))`; } else Condicao += "))"; let sqlQuery = `select A.*, GROUP_CONCAT(us.nome SEPARATOR ', ') as 'Membros', GROUP_CONCAT(us.idusuarios SEPARATOR ',') as 'MembrosIDs' from ( SELECT distinct ta.idtarefas, ta.descricao, ta.criadapor, (select us2.nome from usuarios us2 where us2.idusuarios = ta.criadapor) as 'criadapor_d', ta.idprojetos, pr.descricao as 'projeto', pr.iddepartamentos, ta.idtopicos, tp.descricao as 'topico', ta.idstatus, ta.idstatus as 'idstatus_c', st.descricao as 'status', st.prioridade as 'prioridade_s', st.color, st.background, ta.idtipotarefa, tt.descricao as 'tipotarefa', ta.previsaoinicio, ta.iniciadoem, ta.previsaotermino, ta.concluidoem, ta.prioridade, pd.descricao as 'prioridade_d', ta.observacao, date_format(ta.insert_date, '%d/%m/%Y %H:%i') as 'insert_date', (select count(*) from projetosmembros pm2 where pm2.idtarefas = ta.idtarefas) as 'QtdMembros' FROM tarefas ta inner join projetos pr on pr.idprojetos = ta.idprojetos inner join topicos tp on tp.idtopicos = ta.idtopicos inner join status st on st.idstatus = ta.idstatus inner join tipotarefa tt on tt.idtipotarefa = ta.idtipotarefa left join projetosmembros pm on pm.idtarefas = ta.idtarefas inner join prioridades pd on pd.prioridade = ta.prioridade where ${Condicao}) A left join projetosmembros pm on pm.idtarefas = A.idtarefas left join usuarios us on us.idusuarios = pm.idusuarios group by A.idtarefas order by A.prioridade_s desc, A.prioridade asc, A.idtipotarefa asc;`; //console.log(sqlQuery); ExecuteQueryPriorie(sqlQuery, req, res); }); router.get('/getMembrosTarefa/:idtarefas', function(req, res) { const idtarefas = parseInt(req.params.idtarefas); ExecuteQueryPriorie(`SELECT pm.idprojetosmembros, pm.idusuarios, pm.idtarefas, us.nome FROM projetosmembros pm left join usuarios us on us.idusuarios = pm.idusuarios where pm.idtarefas = ${idtarefas};`, req, res); }); router.delete('/removerMembroTarefa/:idtarefas/:idusuarios', function(req, res) { const idtarefas = parseInt(req.params.idtarefas); const idusuarios = parseInt(req.params.idusuarios); ExecuteQueryPriorie(`delete from projetosmembros where idtarefas = ${idtarefas} and idusuarios = ${idusuarios};`, req, res); }); router.post('/cadastrarTarefaMembros', function(req, res) { const idtarefas = parseInt(req.body.idtarefas); const idusuarios = parseInt(req.body.idusuarios); ExecuteQueryPriorie(`insert into projetosmembros (idusuarios, idtarefas) values (${idusuarios}, ${idtarefas});`, req, res, function(Status, idprojetosmembros) { if (Status != 200) { return; } const SQLDados = `select pm.idusuarios, us.nome, us.email, pr.descricao as 'Projeto', tp.descricao as 'Topico', ta.descricao as 'Tarefa', date_format(ta.previsaoinicio, '%d/%m/%Y') as 'Inicio', date_format(ta.previsaotermino, '%d/%m/%Y') as 'Previsao', pd.descricao as 'Prioridade', dp.descricao as 'Departamento' from projetosmembros pm inner join tarefas ta on ta.idtarefas = pm.idtarefas inner join projetos pr on pr.idprojetos = ta.idprojetos inner join topicos tp on tp.idtopicos = ta.idtopicos inner join prioridades pd on pd.prioridade = ta.prioridade inner join usuarios us on us.idusuarios = pm.idusuarios inner join departamentos dp on dp.iddepartamentos = pr.iddepartamentos where idprojetosmembros = ${idprojetosmembros};`; connection.query(SQLDados, function(error, Dados, fields) { if (Dados && Dados[0]['email'] != "" && Dados[0]['email'] != null) { const Mensagem = `Olá ${Dados[0]['nome']}!
Você tem uma nova tarefa atribuída no sistema Priorie para o departamento ${Dados[0]['Departamento']}:

Projeto: ${Dados[0]['Projeto']}
Tópico: ${Dados[0]['Topico']}
Tarefa: ${Dados[0]['Tarefa']}
Prioridade: ${Dados[0]['Prioridade']}
Previsão de início: ${Dados[0]['Inicio']}
Previsão de término: ${Dados[0]['Previsao']}

Acesse o sistema para conferir!

Clique aqui para acessar o sistema`; EnviarEmail(Mensagem, "Nova Tarefa Atribuída", Dados[0]['email']); } }); }); }); router.get('/getTarefasPorMembro/:IdsStatus/:idprojetos/:idtopicos', function(req, res) { const IdsStatus = req.params.IdsStatus; const idprojetos = parseInt(req.params.idprojetos); const idtopicos = parseInt(req.params.idtopicos); let Condicao = ""; if (idprojetos > 0) Condicao += " and ta.idprojetos = " + idprojetos; if (idtopicos > 0) Condicao += " and ta.idtopicos = " + idtopicos; ExecuteQueryPriorie(`SELECT pm.idusuarios, pr.iddepartamentos, ta.idstatus, count(*) as 'QtdeTarefas' FROM projetosmembros pm inner join tarefas ta on ta.idtarefas = pm.idtarefas inner join projetos pr on pr.idprojetos = ta.idprojetos where ta.idstatus in ${IdsStatus}${Condicao} group by pr.iddepartamentos, pm.idusuarios, ta.idstatus;`, req, res); }); //#endregion //#region STATUS router.get('/getAllStatus', function(req, res) { ExecuteQueryPriorie(`select * from status;`, req, res); }); //#endregion //#region DEPARTAMENTOS router.get('/getAllDepartamentos', function(req, res) { ExecuteQueryPriorie(`SELECT * from departamentos order by descricao asc;`, req, res); }); router.get('/getDepartamento/:iddepartamentos', function(req, res) { const iddepartamentos = parseInt(req.params.iddepartamentos); ExecuteQueryPriorie(`SELECT * from departamentos where iddepartamentos = ${iddepartamentos} order by descricao asc;`, req, res); }); router.get('/getDepartamentosMembro/:idusuarios', function(req, res) { const idusuarios = parseInt(req.params.idusuarios); ExecuteQueryPriorie(`select * from departamentosmembros where idusuarios = ${idusuarios};`, req, res); }); router.get('/getDepMembroDetalhe/:idusuarios', function(req, res) { const idusuarios = parseInt(req.params.idusuarios); ExecuteQueryPriorie(`SELECT dm.iddepartamentosmembros, dm.idusuarios, us.nome, us.iddepartamentos as 'iddepartamentos_u', dm.iddepartamentos, dp.descricao, dm.gestor, dm.permitecadastro FROM departamentosmembros dm inner join usuarios us on us.idusuarios = dm.idusuarios inner join departamentos dp on dp.iddepartamentos = dm.iddepartamentos where dm.idusuarios = ${idusuarios} order by us.nome asc;`, req, res); }); router.get('/getMemborsDepartamento/:iddepartamentos', function(req, res) { const iddepartamentos = parseInt(req.params.iddepartamentos); ExecuteQueryPriorie(`SELECT dm.iddepartamentosmembros, dm.idusuarios, us.nome, us.iddepartamentos as 'iddepartamentos_u', dm.iddepartamentos, dp.descricao, dm.gestor, dm.permitecadastro FROM departamentosmembros dm inner join usuarios us on us.idusuarios = dm.idusuarios inner join departamentos dp on dp.iddepartamentos = dm.iddepartamentos where dm.iddepartamentos = ${iddepartamentos} order by us.nome asc;`, req, res); }); router.post('/cadastrarDepMembro', function(req, res) { const iddepartamentosmembros = parseInt(req.body.iddepartamentosmembros); const idusuarios = parseInt(req.body.idusuarios); const iddepartamentos = parseInt(req.body.iddepartamentos); const gestor = req.body.gestor ? 1 : 0; const permitecadastro = req.body.permitecadastro ? 1 : 0; ExecuteQueryPriorie(`insert into departamentosmembros (idusuarios, iddepartamentos, gestor, permitecadastro) values (${idusuarios}, ${iddepartamentos}, ${gestor}, ${permitecadastro});`, req, res); }); router.patch('/atualizarDepMembro', function(req, res) { const iddepartamentosmembros = parseInt(req.body.iddepartamentosmembros); const idusuarios = parseInt(req.body.idusuarios); const iddepartamentos = parseInt(req.body.iddepartamentos); const gestor = req.body.gestor ? 1 : 0; const permitecadastro = req.body.permitecadastro ? 1 : 0; ExecuteQueryPriorie(`update departamentosmembros set idusuarios = ${idusuarios}, iddepartamentos = ${iddepartamentos}, gestpr = ${gestor}, permitecadastro = ${permitecadastro} where idtopicos = ${idtopicos};`, req, res); }); router.delete('/removerDepMembro/:iddepartamentosmembros', function(req, res) { const iddepartamentosmembros = parseInt(req.params.iddepartamentosmembros); ExecuteQueryPriorie(`delete from departamentosmembros where iddepartamentosmembros = ${iddepartamentosmembros};`, req, res); }); //#endregion //#region PROJETOS router.post('/cadastrarProjeto', function(req, res) { const idprojetos = parseInt(req.body.idprojetos); const iddepartamentos = parseInt(req.body.iddepartamentos); const descricao = fixApostrofe(req.body.descricao); ExecuteQueryPriorie(`insert into projetos (iddepartamentos, descricao) values (${iddepartamentos}, '${descricao}');`, req, res); }); router.patch('/atualizarProjeto', function(req, res) { const idprojetos = parseInt(req.body.idprojetos); const iddepartamentos = parseInt(req.body.iddepartamentos); const descricao = fixApostrofe(req.body.descricao); ExecuteQueryPriorie(`update projetos set iddepartamentos = ${iddepartamentos}, descricao = '${descricao}' where idprojetos = ${idprojetos};`, req, res); }); router.delete('/removerProjeto/:idprojetos', function(req, res) { const idprojetos = parseInt(req.params.idprojetos); ExecuteQueryPriorie(`delete from projetos where idprojetos = ${idprojetos};`, req, res); }); router.get('/getAllProjetos', function(req, res) { ExecuteQueryPriorie(`select * from projetos;`, req, res); }); router.get('/getProjetosDepartamento/:iddepartamentos', function(req, res) { const iddepartamentos = parseInt(req.params.iddepartamentos); ExecuteQueryPriorie(`select * from projetos where iddepartamentos = ${iddepartamentos} order by descricao asc;`, req, res); }); router.get('/getAllTiposTarefas', function(req, res) { ExecuteQueryPriorie(`select * from tipotarefa;`, req, res); }); //#endregion //#region TOPICOS router.post('/cadastrarTopico', function(req, res) { const idtopicos = parseInt(req.body.idtopicos); const idprojetos = parseInt(req.body.idprojetos); const descricao = fixApostrofe(req.body.descricao); ExecuteQueryPriorie(`insert into topicos (idprojetos, descricao) values (${idprojetos}, '${descricao}');`, req, res); }); router.patch('/atualizarTopico', function(req, res) { const idtopicos = parseInt(req.body.idtopicos); const idprojetos = parseInt(req.body.idprojetos); const descricao = fixApostrofe(req.body.descricao); ExecuteQueryPriorie(`update topicos set idprojetos = ${idprojetos}, descricao = '${descricao}' where idtopicos = ${idtopicos};`, req, res); }); router.delete('/removerTopico/:idtopicos', function(req, res) { const idtopicos = parseInt(req.params.idtopicos); ExecuteQueryPriorie(`delete from topicos where idtopicos = ${idtopicos};`, req, res); }); router.get('/getAllTopicos', function(req, res) { ExecuteQueryPriorie(`select * from topicos;`, req, res); }); router.get('/getTopico/:idtopicos', function(req, res) { const idtopicos = parseInt(req.params.idtopicos); ExecuteQueryPriorie(`select * from topicos where idtopicos = ${idtopicos} order by descricao asc;`, req, res); }); router.get('/getAllTopicosTarefa/:idprojetos', function(req, res) { const idprojetos = parseInt(req.params.idprojetos); ExecuteQueryPriorie(`select * from topicos where idprojetos = ${idprojetos} order by descricao asc;`, req, res); }); //#endregion //#region PRIORIDADES router.get('/getAllPrioridades', function(req, res) { ExecuteQueryPriorie(`select * from prioridades;`, req, res); }); //#endregion //#region ENVIO DE NOTIFICACOES const nodemailer = require('nodemailer'); const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: "zendioninc.contato@gmail.com", pass: "gmailzendioninc", } }); /*var transporter = nodemailer.createTransport({ host: "email-ssl.com.br", port: 465, secure: true, auth: { user: 'staff@myrobot.com.br', pass: 'stAff66**' } });*/ function EnviarEmail(Mensagem, Assunto, Email) { var mailOptions = { from: '"Zendion, INC" ', to: Email, subject: Assunto, html: Mensagem }; transporter.sendMail(mailOptions, function (error, info) { if (error) { console.log("Erro ao enviar e-mail para: " + mailOptions.to); console.log(error); } else { console.log('Email enviado com sucesso para: ' + mailOptions.to + ' - ' + info.response); } }); } //#endregion //#region FUNCOES function fixApostrofe(content) { for (let i = 0; i < 20; i++) { content = content.replace("'", '''); } return content; } //#endregion return router; } module.exports = routes;