feat: inicializacion de Help Desk segun estandar Telcotronics con bitacora de errores e integracion MCP
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { isAgent } = require('../middleware/auth');
|
||||
const Ticket = require('../models/Ticket');
|
||||
const Department = require('../models/Department');
|
||||
|
||||
router.get('/dashboard', isAgent, async (req, res) => {
|
||||
try {
|
||||
let tickets;
|
||||
if (['superadmin', 'admin'].includes(req.session.user.rol)) {
|
||||
tickets = await Ticket.findAll(req.session.user.company_id);
|
||||
} else {
|
||||
tickets = await Ticket.findByAgent(req.session.user.company_id, req.session.user.id);
|
||||
}
|
||||
const stats = await Ticket.countByStatus(req.session.user.company_id);
|
||||
const departments = await Department.findAll(req.session.user.company_id);
|
||||
res.render('agent/dashboard', { tickets, stats, departments });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cargar dashboard');
|
||||
res.redirect('/');
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/ticket/:id', isAgent, async (req, res) => {
|
||||
try {
|
||||
const ticket = await Ticket.findById(req.params.id);
|
||||
if (!ticket) {
|
||||
req.flash('error_msg', 'Ticket no encontrado');
|
||||
return res.redirect('/agent/dashboard');
|
||||
}
|
||||
if (ticket.company_id !== req.session.user.company_id && req.session.user.rol !== 'superadmin') {
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
return res.redirect('/agent/dashboard');
|
||||
}
|
||||
const respuestas = await Ticket.getResponses(req.params.id);
|
||||
let agents = [];
|
||||
if (['superadmin', 'admin'].includes(req.session.user.rol)) {
|
||||
const User = require('../models/User');
|
||||
const allUsers = await User.findAll(req.session.user.company_id);
|
||||
agents = allUsers.filter(u => u.rol === 'agent');
|
||||
}
|
||||
res.render('agent/view-ticket', { ticket, respuestas, agents });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cargar ticket');
|
||||
res.redirect('/agent/dashboard');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/ticket/:id/respond', isAgent, async (req, res) => {
|
||||
const { mensaje } = req.body;
|
||||
if (!mensaje) {
|
||||
req.flash('error_msg', 'El mensaje es obligatorio');
|
||||
return res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
}
|
||||
try {
|
||||
await Ticket.addResponse(req.params.id, req.session.user.id, mensaje);
|
||||
req.flash('success_msg', 'Respuesta enviada');
|
||||
res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al enviar respuesta');
|
||||
res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/ticket/:id/status', isAgent, async (req, res) => {
|
||||
const { status, assigned_to } = req.body;
|
||||
try {
|
||||
const data = {};
|
||||
if (status) data.status = status;
|
||||
if (assigned_to && ['superadmin', 'admin'].includes(req.session.user.rol)) {
|
||||
data.assigned_to = assigned_to;
|
||||
}
|
||||
await Ticket.update(req.params.id, data);
|
||||
req.flash('success_msg', 'Ticket actualizado');
|
||||
res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al actualizar ticket');
|
||||
res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/ticket/:id/assign', isAgent, async (req, res) => {
|
||||
if (!['superadmin', 'admin'].includes(req.session.user.rol)) {
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
return res.redirect('/agent/dashboard');
|
||||
}
|
||||
const { assigned_to } = req.body;
|
||||
try {
|
||||
await Ticket.update(req.params.id, { assigned_to: assigned_to || null });
|
||||
if (assigned_to) {
|
||||
await Ticket.update(req.params.id, { status: 'en_progreso' });
|
||||
}
|
||||
req.flash('success_msg', 'Ticket asignado');
|
||||
res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al asignar ticket');
|
||||
res.redirect(`/agent/ticket/${req.params.id}`);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user