feat: inicializacion de Help Desk segun estandar Telcotronics con bitacora de errores e integracion MCP
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { isAuthenticated } = require('../middleware/auth');
|
||||
const Ticket = require('../models/Ticket');
|
||||
const Department = require('../models/Department');
|
||||
|
||||
router.get('/dashboard', isAuthenticated, async (req, res) => {
|
||||
try {
|
||||
const tickets = await Ticket.findByUser(req.session.user.company_id, req.session.user.id);
|
||||
res.render('client/dashboard', { tickets });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cargar tickets');
|
||||
res.redirect('/');
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/new-ticket', isAuthenticated, async (req, res) => {
|
||||
try {
|
||||
const departments = await Department.findAll(req.session.user.company_id);
|
||||
res.render('client/new-ticket', { departments });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cargar formulario');
|
||||
res.redirect('/client/dashboard');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/new-ticket', isAuthenticated, async (req, res) => {
|
||||
const { department_id, asunto, mensaje, prioridad } = req.body;
|
||||
if (!asunto || !mensaje) {
|
||||
req.flash('error_msg', 'Asunto y mensaje son obligatorios');
|
||||
return res.redirect('/client/new-ticket');
|
||||
}
|
||||
try {
|
||||
await Ticket.create(req.session.user.company_id, req.session.user.id, department_id || null, asunto, mensaje, prioridad || 'media');
|
||||
req.flash('success_msg', 'Ticket creado exitosamente');
|
||||
res.redirect('/client/dashboard');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al crear ticket');
|
||||
res.redirect('/client/new-ticket');
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/ticket/:id', isAuthenticated, async (req, res) => {
|
||||
try {
|
||||
const ticket = await Ticket.findById(req.params.id);
|
||||
if (!ticket) {
|
||||
req.flash('error_msg', 'Ticket no encontrado');
|
||||
return res.redirect('/client/dashboard');
|
||||
}
|
||||
if (ticket.company_id !== req.session.user.company_id) {
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
return res.redirect('/client/dashboard');
|
||||
}
|
||||
if (ticket.user_id !== req.session.user.id && req.session.user.rol === 'client') {
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
return res.redirect('/client/dashboard');
|
||||
}
|
||||
const respuestas = await Ticket.getResponses(req.params.id);
|
||||
res.render('client/view-ticket', { ticket, respuestas });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cargar ticket');
|
||||
res.redirect('/client/dashboard');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/ticket/:id/respond', isAuthenticated, async (req, res) => {
|
||||
const { mensaje } = req.body;
|
||||
if (!mensaje) {
|
||||
req.flash('error_msg', 'El mensaje es obligatorio');
|
||||
return res.redirect(`/client/ticket/${req.params.id}`);
|
||||
}
|
||||
try {
|
||||
await Ticket.addResponse(req.params.id, req.session.user.id, mensaje);
|
||||
req.flash('success_msg', 'Respuesta enviada');
|
||||
res.redirect(`/client/ticket/${req.params.id}`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al enviar respuesta');
|
||||
res.redirect(`/client/ticket/${req.params.id}`);
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/ticket/:id/close', isAuthenticated, async (req, res) => {
|
||||
try {
|
||||
const ticket = await Ticket.findById(req.params.id);
|
||||
if (ticket && ticket.company_id !== req.session.user.company_id) {
|
||||
req.flash('error_msg', 'Acceso denegado');
|
||||
return res.redirect('/client/dashboard');
|
||||
}
|
||||
await Ticket.update(req.params.id, { status: 'cerrado' });
|
||||
req.flash('success_msg', 'Ticket cerrado');
|
||||
res.redirect(`/client/ticket/${req.params.id}`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cerrar ticket');
|
||||
res.redirect(`/client/ticket/${req.params.id}`);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user