feat: inicializacion de Help Desk segun estandar Telcotronics con bitacora de errores e integracion MCP
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { isSuperAdmin } = require('../middleware/auth');
|
||||
const Company = require('../models/Company');
|
||||
const User = require('../models/User');
|
||||
const Ticket = require('../models/Ticket');
|
||||
|
||||
router.get('/companies', isSuperAdmin, async (req, res) => {
|
||||
try {
|
||||
const companies = await Company.findAll();
|
||||
for (const c of companies) {
|
||||
c.userCount = await Company.countUsers(c.id);
|
||||
c.ticketCount = await Company.countTickets(c.id);
|
||||
}
|
||||
res.render('saas/companies', { companies });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al cargar empresas');
|
||||
res.redirect('/');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/companies/create', isSuperAdmin, async (req, res) => {
|
||||
const { name, slug, plan } = req.body;
|
||||
if (!name || !slug) {
|
||||
req.flash('error_msg', 'Nombre y slug son obligatorios');
|
||||
return res.redirect('/saas/companies');
|
||||
}
|
||||
try {
|
||||
const existing = await Company.findBySlug(slug);
|
||||
if (existing) {
|
||||
req.flash('error_msg', 'El slug ya existe');
|
||||
return res.redirect('/saas/companies');
|
||||
}
|
||||
const companyId = await Company.create(name, slug, plan || 'free');
|
||||
const Department = require('../models/Department');
|
||||
await Department.create(companyId, 'Soporte Técnico', 'Problemas técnicos');
|
||||
await Department.create(companyId, 'General', 'Consultas generales');
|
||||
|
||||
const bcrypt = require('bcryptjs');
|
||||
const hash = await bcrypt.hash('123456', 10);
|
||||
await User.create(companyId, 'Admin', `admin@${slug}.com`, hash, 'admin');
|
||||
|
||||
req.flash('success_msg', `Empresa ${name} creada`);
|
||||
res.redirect('/saas/companies');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al crear empresa');
|
||||
res.redirect('/saas/companies');
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/companies/update/:id', isSuperAdmin, async (req, res) => {
|
||||
const { name, plan, max_users, max_tickets, is_active } = req.body;
|
||||
try {
|
||||
const data = {};
|
||||
if (name) data.name = name;
|
||||
if (plan) data.plan = plan;
|
||||
if (max_users) data.max_users = parseInt(max_users);
|
||||
if (max_tickets) data.max_tickets = parseInt(max_tickets);
|
||||
data.is_active = is_active ? 1 : 0;
|
||||
await Company.update(req.params.id, data);
|
||||
req.flash('success_msg', 'Empresa actualizada');
|
||||
res.redirect('/saas/companies');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
req.flash('error_msg', 'Error al actualizar empresa');
|
||||
res.redirect('/saas/companies');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user