Files
help_desk/models/HerramientaAsignacion.js
T

105 lines
3.8 KiB
JavaScript

const db = require('../config/db');
class HerramientaAsignacion {
static async findAll(companyId, filtros = {}) {
let sql = `
SELECT tha.*,
u.nombre as tecnico_nombre,
u.email as tecnico_email,
hs.nombre as set_nombre,
hs.codigo as set_codigo,
h.nombre as herramienta_nombre,
h.codigo as herramienta_codigo,
tv.titulo as visita_titulo,
tv.ticket_id,
t.asunto as ticket_asunto,
adm.nombre as asignado_por_nombre
FROM tecnico_herramientas_asignaciones tha
INNER JOIN users u ON tha.tecnico_id = u.id
LEFT JOIN herramientas_sets hs ON tha.set_id = hs.id
LEFT JOIN herramientas h ON tha.herramienta_id = h.id
LEFT JOIN ticket_visitas tv ON tha.ticket_visita_id = tv.id
LEFT JOIN tickets t ON tv.ticket_id = t.id
LEFT JOIN users adm ON tha.asignado_por = adm.id
WHERE tha.company_id = ?
`;
const params = [companyId];
if (filtros.tecnico_id) {
sql += ' AND tha.tecnico_id = ?';
params.push(filtros.tecnico_id);
}
if (filtros.estado) {
sql += ' AND tha.estado = ?';
params.push(filtros.estado);
}
if (filtros.tipo_asignacion) {
sql += ' AND tha.tipo_asignacion = ?';
params.push(filtros.tipo_asignacion);
}
sql += ' ORDER BY tha.id DESC';
const [rows] = await db.query(sql, params);
return rows;
}
static async findByTecnico(companyId, tecnicoId) {
return await this.findAll(companyId, { tecnico_id: tecnicoId });
}
static async findById(id, companyId) {
const [rows] = await db.query(
`SELECT tha.*,
u.nombre as tecnico_nombre,
u.email as tecnico_email,
hs.nombre as set_nombre,
hs.codigo as set_codigo
FROM tecnico_herramientas_asignaciones tha
INNER JOIN users u ON tha.tecnico_id = u.id
LEFT JOIN herramientas_sets hs ON tha.set_id = hs.id
WHERE tha.id = ? AND tha.company_id = ?`,
[id, companyId]
);
return rows[0] || null;
}
static async create(data) {
const {
company_id,
tecnico_id,
set_id = null,
herramienta_id = null,
ticket_visita_id = null,
tipo_asignacion = 'dotacion_fija',
fecha_asignacion = new Date(),
observaciones_entrega = null,
asignado_por = null
} = data;
const [res] = await db.query(
`INSERT INTO tecnico_herramientas_asignaciones
(company_id, tecnico_id, set_id, herramienta_id, ticket_visita_id, tipo_asignacion, fecha_asignacion, estado, observaciones_entrega, asignado_por)
VALUES (?, ?, ?, ?, ?, ?, ?, 'asignado', ?, ?)`,
[company_id, tecnico_id, set_id, herramienta_id, ticket_visita_id, tipo_asignacion, fecha_asignacion, observaciones_entrega, asignado_por]
);
return res.insertId;
}
static async devolver(id, companyId, { observaciones_devolucion = null, estado = 'devuelto' }) {
await db.query(
`UPDATE tecnico_herramientas_asignaciones
SET estado = ?,
fecha_devolucion = NOW(),
observaciones_devolucion = ?
WHERE id = ? AND company_id = ?`,
[estado, observaciones_devolucion, id, companyId]
);
}
static async delete(id, companyId) {
await db.query('DELETE FROM tecnico_herramientas_asignaciones WHERE id = ? AND company_id = ?', [id, companyId]);
}
}
module.exports = HerramientaAsignacion;