-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathagendamentos.js
More file actions
136 lines (129 loc) · 6.1 KB
/
agendamentos.js
File metadata and controls
136 lines (129 loc) · 6.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
const express = require('express');
const router = express.Router();
const pool = require('../db');
router.get('/', async (req, res) => {
try {
const { filtro, status_id, telefonista_id } = req.query;
let query = 'SELECT a.*, c.nome AS cliente_nome, l.nome AS local_nome FROM Agendamentos a LEFT JOIN Clientes c ON a.cliente_id = c.id LEFT JOIN Locais l ON a.local_id = l.id';
const values = [];
if (status_id) {
query += ' WHERE a.status_id = $1';
values.push(status_id);
}
if (telefonista_id) {
query += status_id ? ' AND a.telefonista_id = $2' : ' WHERE a.telefonista_id = $1';
values.push(telefonista_id);
}
if (filtro) {
query += (status_id || telefonista_id ? ' AND' : ' WHERE') + ' a.cliente_id::text ILIKE $' + (values.length + 1);
values.push(`%${filtro}%`);
}
const result = await pool.query(query, values);
res.status(200).json(result.rows);
} catch (error) {
console.error('Erro na query:', error);
res.status(500).json({ error: 'Erro ao buscar agendamentos' });
}
});
router.post('/', async (req, res) => {
const { cliente_id, veiculo_id, data_hora, status_id, servico_id, local_id, tipo_agendamento_id, observacoes, tecnico_id, telefonista_id } = req.body;
try {
const query = 'INSERT INTO Agendamentos (cliente_id, veiculo_id, data_hora, status_id, servico_id, local_id, tipo_agendamento_id, observacoes, tecnico_id, telefonista_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *';
const values = [cliente_id, veiculo_id, data_hora, status_id, servico_id, local_id, tipo_agendamento_id, observacoes, tecnico_id, telefonista_id];
const result = await pool.query(query, values);
const agendamento = result.rows[0];
const queryRelacionada = `
SELECT a.*,
c.nome AS cliente_nome,
v.placa AS veiculo_placa,
s.nome AS status_nome,
srv.nome AS servico_nome,
l.nome AS local_nome,
ta.nome AS tipo_agendamento_nome,
t.nome AS tecnico_nome,
u.nome AS telefonista_nome
FROM Agendamentos a
LEFT JOIN Clientes c ON a.cliente_id = c.id
LEFT JOIN Veiculos v ON a.veiculo_id = v.id
LEFT JOIN Status s ON a.status_id = s.id
LEFT JOIN Servicos srv ON a.servico_id = srv.id
LEFT JOIN Locais l ON a.local_id = l.id
LEFT JOIN tipoagendamento ta ON a.tipo_agendamento_id = ta.id
LEFT JOIN Tecnicos t ON a.tecnico_id = t.id
LEFT JOIN Usuarios u ON a.telefonista_id = u.id
WHERE a.id = $1
`;
const agendamentoCompleto = await pool.query(queryRelacionada, [agendamento.id]);
res.status(201).json(agendamentoCompleto.rows[0]);
} catch (error) {
console.error('Erro na query:', error);
res.status(500).json({ error: 'Erro ao criar agendamento' });
}
});
router.put('/:id', async (req, res) => {
const { id } = req.params;
const { cliente_id, veiculo_id, data_hora, status_id, servico_id, local_id, tipo_agendamento_id, observacoes, tecnico_id, telefonista_id } = req.body;
try {
const query = 'UPDATE Agendamentos SET cliente_id = $1, veiculo_id = $2, data_hora = $3, status_id = $4, servico_id = $5, local_id = $6, tipo_agendamento_id = $7, observacoes = $8, tecnico_id = $9, telefonista_id = $10 WHERE id = $11 RETURNING *';
const values = [cliente_id, veiculo_id, data_hora, status_id, servico_id, local_id, tipo_agendamento_id, observacoes, tecnico_id, telefonista_id, id];
const result = await pool.query(query, values);
if (result.rows.length === 0) return res.status(404).json({ error: 'Agendamento não encontrado' });
const agendamento = result.rows[0];
const queryRelacionada = `
SELECT a.*,
c.nome AS cliente_nome,
v.placa AS veiculo_placa,
s.nome AS status_nome,
srv.nome AS servico_nome,
l.nome AS local_nome,
ta.nome AS tipo_agendamento_nome,
t.nome AS tecnico_nome,
u.nome AS telefonista_nome
FROM Agendamentos a
LEFT JOIN Clientes c ON a.cliente_id = c.id
LEFT JOIN Veiculos v ON a.veiculo_id = v.id
LEFT JOIN Status s ON a.status_id = s.id
LEFT JOIN Servicos srv ON a.servico_id = srv.id
LEFT JOIN Locais l ON a.local_id = l.id
LEFT JOIN tipoagendamento ta ON a.tipo_agendamento_id = ta.id
LEFT JOIN Tecnicos t ON a.tecnico_id = t.id
LEFT JOIN Usuarios u ON a.telefonista_id = u.id
WHERE a.id = $1
`;
const agendamentoCompleto = await pool.query(queryRelacionada, [agendamento.id]);
res.status(200).json(agendamentoCompleto.rows[0]);
} catch (error) {
console.error('Erro na query:', error);
res.status(500).json({ error: 'Erro ao atualizar agendamento' });
}
});
router.delete('/:id', async (req, res) => {
const { id } = req.params;
try {
const query = 'DELETE FROM Agendamentos WHERE id = $1 RETURNING *';
const result = await pool.query(query, [id]);
if (result.rows.length === 0) return res.status(404).json({ error: 'Agendamento não encontrado' });
res.status(200).json({ message: 'Agendamento deletado com sucesso' });
} catch (error) {
console.error('Erro na query:', error);
res.status(500).json({ error: 'Erro ao deletar agendamento' });
}
});
// Adicionar uma função de verificação automática
const verificarStatusAutomatico = async () => {
try {
const today = new Date().toISOString().split('T')[0];
const result = await pool.query(
'SELECT id, data, status_id, hora_final FROM Agendamentos WHERE status_id = 1 AND data < $1 AND hora_final IS NULL',
[today]
);
for (const agendamento of result.rows) {
await pool.query('UPDATE Agendamentos SET status_id = 4 WHERE id = $1', [agendamento.id]); // 4 = Não Comparecido
}
} catch (error) {
console.error('Erro ao verificar status automático:', error);
}
};
// Chamar a função em intervalos (ex.: a cada hora)
setInterval(verificarStatusAutomatico, 3600000); // 1 hora = 3600000 ms
module.exports = router;