feat(herramientas): agregar soporte de fotografias y evidencias para herramientas, kits y asignaciones de custodia
This commit is contained in:
+44
-7
@@ -8,6 +8,7 @@ const Ticket = require('../models/Ticket');
|
||||
const Herramienta = require('../models/Herramienta');
|
||||
const HerramientaSet = require('../models/HerramientaSet');
|
||||
const HerramientaAsignacion = require('../models/HerramientaAsignacion');
|
||||
const { guardarFoto } = require('../config/uploader');
|
||||
|
||||
router.get('/dashboard', isCompanyAdmin, async (req, res) => {
|
||||
try {
|
||||
@@ -192,6 +193,11 @@ router.post('/herramientas/create', isCompanyAdmin, async (req, res) => {
|
||||
return res.redirect('/admin/herramientas');
|
||||
}
|
||||
try {
|
||||
let foto_url = null;
|
||||
if (req.files && req.files.foto) {
|
||||
foto_url = await guardarFoto(req.files.foto, 'herramienta');
|
||||
}
|
||||
|
||||
await Herramienta.create({
|
||||
company_id: req.session.user.company_id,
|
||||
nombre,
|
||||
@@ -202,7 +208,8 @@ router.post('/herramientas/create', isCompanyAdmin, async (req, res) => {
|
||||
modelo: modelo || null,
|
||||
estado: estado || 'operativo',
|
||||
ubicacion_bodega: ubicacion_bodega || null,
|
||||
notas: notas || null
|
||||
notas: notas || null,
|
||||
foto_url
|
||||
});
|
||||
req.flash('success_msg', `Herramienta "${nombre}" registrada correctamente`);
|
||||
res.redirect('/admin/herramientas#tab-herramientas');
|
||||
@@ -217,7 +224,7 @@ router.post('/herramientas/create', isCompanyAdmin, async (req, res) => {
|
||||
router.post('/herramientas/edit/:id', isCompanyAdmin, async (req, res) => {
|
||||
const { nombre, codigo, numero_serie, categoria, marca, modelo, estado, ubicacion_bodega, notas } = req.body;
|
||||
try {
|
||||
await Herramienta.update(req.params.id, req.session.user.company_id, {
|
||||
const updateData = {
|
||||
nombre,
|
||||
codigo,
|
||||
numero_serie,
|
||||
@@ -227,7 +234,13 @@ router.post('/herramientas/edit/:id', isCompanyAdmin, async (req, res) => {
|
||||
estado,
|
||||
ubicacion_bodega,
|
||||
notas
|
||||
});
|
||||
};
|
||||
|
||||
if (req.files && req.files.foto) {
|
||||
updateData.foto_url = await guardarFoto(req.files.foto, 'herramienta');
|
||||
}
|
||||
|
||||
await Herramienta.update(req.params.id, req.session.user.company_id, updateData);
|
||||
req.flash('success_msg', 'Herramienta actualizada exitosamente');
|
||||
res.redirect('/admin/herramientas#tab-herramientas');
|
||||
} catch (error) {
|
||||
@@ -265,12 +278,18 @@ router.post('/herramientas/sets/create', isCompanyAdmin, async (req, res) => {
|
||||
items = [herramientas_ids];
|
||||
}
|
||||
|
||||
let foto_url = null;
|
||||
if (req.files && req.files.foto) {
|
||||
foto_url = await guardarFoto(req.files.foto, 'kit');
|
||||
}
|
||||
|
||||
await HerramientaSet.create({
|
||||
company_id: req.session.user.company_id,
|
||||
nombre,
|
||||
codigo: codigo || null,
|
||||
descripcion: descripcion || null,
|
||||
categoria: categoria || 'general'
|
||||
categoria: categoria || 'general',
|
||||
foto_url
|
||||
}, items);
|
||||
|
||||
req.flash('success_msg', `Kit de herramientas "${nombre}" creado con ${items.length} instrumentos.`);
|
||||
@@ -291,13 +310,19 @@ router.post('/herramientas/sets/edit/:id', isCompanyAdmin, async (req, res) => {
|
||||
items = Array.isArray(herramientas_ids) ? herramientas_ids : (herramientas_ids ? [herramientas_ids] : []);
|
||||
}
|
||||
|
||||
await HerramientaSet.update(req.params.id, req.session.user.company_id, {
|
||||
const updateData = {
|
||||
nombre,
|
||||
codigo,
|
||||
descripcion,
|
||||
categoria,
|
||||
is_active: is_active === '1' || is_active === 1 ? 1 : 0
|
||||
}, items);
|
||||
};
|
||||
|
||||
if (req.files && req.files.foto) {
|
||||
updateData.foto_url = await guardarFoto(req.files.foto, 'kit');
|
||||
}
|
||||
|
||||
await HerramientaSet.update(req.params.id, req.session.user.company_id, updateData, items);
|
||||
|
||||
req.flash('success_msg', 'Set / Kit actualizado exitosamente');
|
||||
res.redirect('/admin/herramientas#tab-sets');
|
||||
@@ -329,6 +354,11 @@ router.post('/herramientas/asignar', isCompanyAdmin, async (req, res) => {
|
||||
return res.redirect('/admin/herramientas');
|
||||
}
|
||||
try {
|
||||
let foto_entrega_url = null;
|
||||
if (req.files && req.files.foto_entrega) {
|
||||
foto_entrega_url = await guardarFoto(req.files.foto_entrega, 'entrega');
|
||||
}
|
||||
|
||||
await HerramientaAsignacion.create({
|
||||
company_id: req.session.user.company_id,
|
||||
tecnico_id: parseInt(tecnico_id),
|
||||
@@ -336,6 +366,7 @@ router.post('/herramientas/asignar', isCompanyAdmin, async (req, res) => {
|
||||
herramienta_id: herramienta_id ? parseInt(herramienta_id) : null,
|
||||
tipo_asignacion: tipo_asignacion || 'dotacion_fija',
|
||||
observaciones_entrega: observaciones_entrega || 'Asignación administrativa de equipamiento',
|
||||
foto_entrega_url,
|
||||
asignado_por: req.session.user.id
|
||||
});
|
||||
req.flash('success_msg', 'Equipamiento asignado al técnico exitosamente');
|
||||
@@ -351,9 +382,15 @@ router.post('/herramientas/asignar', isCompanyAdmin, async (req, res) => {
|
||||
router.post('/herramientas/devolver/:id', isCompanyAdmin, async (req, res) => {
|
||||
const { observaciones_devolucion, estado } = req.body;
|
||||
try {
|
||||
let foto_devolucion_url = null;
|
||||
if (req.files && req.files.foto_devolucion) {
|
||||
foto_devolucion_url = await guardarFoto(req.files.foto_devolucion, 'devolucion');
|
||||
}
|
||||
|
||||
await HerramientaAsignacion.devolver(req.params.id, req.session.user.company_id, {
|
||||
observaciones_devolucion: observaciones_devolucion || 'Devuelto conforme a bodega',
|
||||
estado: estado || 'devuelto'
|
||||
estado: estado || 'devuelto',
|
||||
foto_devolucion_url
|
||||
});
|
||||
req.flash('success_msg', 'Devolución de herramientas registrada correctamente');
|
||||
res.redirect('/admin/herramientas#tab-asignaciones');
|
||||
|
||||
Reference in New Issue
Block a user