Site/server/controllers/priorieController.js

585 lines
24 KiB
JavaScript

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']}!<br>
Uma tarefa do projeto ${Dados[0]['Projeto']} foi marcada com concluída:<br><br>
Projeto: ${Dados[0]['Projeto']}<br>
Tópico: ${Dados[0]['Topico']}<br>
Tarefa: ${Dados[0]['Tarefa']}<br>
Data de Conclusão: ${Dados[0]['ConcluidaEm']}<br>
Membros: ${Membros}<br><br>
Acesse o sistema para conferir!<br><br>
<a href="http://priorie.mooo.com/login">Clique aqui para acessar o sistema</a>`;
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']}!<br>
Você tem uma nova tarefa atribuída no sistema Priorie para o departamento ${Dados[0]['Departamento']}:<br><br>
Projeto: ${Dados[0]['Projeto']}<br>
Tópico: ${Dados[0]['Topico']}<br>
Tarefa: ${Dados[0]['Tarefa']}<br>
Prioridade: ${Dados[0]['Prioridade']}<br>
Previsão de início: ${Dados[0]['Inicio']}<br>
Previsão de término: ${Dados[0]['Previsao']}<br><br>
Acesse o sistema para conferir!<br><br>
<a href="http://priorie.mooo.com/login">Clique aqui para acessar o sistema</a>`;
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" <zendioninc.contato@gmail.com>',
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("'", '&apos;');
}
return content;
}
//#endregion
return router;
}
module.exports = routes;