feat(fsm): modulo de asignacion de tareas y visitas tecnicas integrado con tareas.telcotronics.com

This commit is contained in:
2026-10-17 03:06:16 -05:00
parent 0f2708462e
commit 3afcff699a
9 changed files with 802 additions and 8 deletions
+89
View File
@@ -0,0 +1,89 @@
const db = require('../config/db');
class TicketVisita {
static async create(data) {
const {
company_id,
ticket_id,
external_id = null,
tecnico_email,
tecnico_nombre = null,
titulo,
descripcion = null,
ubicacion = null,
latitud = null,
longitud = null,
fecha_visita = null,
fecha_fin = null,
estado = 'programada',
checklist_json = null,
historial_json = null
} = data;
const [result] = await db.query(
`INSERT INTO ticket_visitas
(company_id, ticket_id, external_id, tecnico_email, tecnico_nombre, titulo, descripcion, ubicacion, latitud, longitud, fecha_visita, fecha_fin, estado, checklist_json, historial_json)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[
company_id,
ticket_id,
external_id,
tecnico_email,
tecnico_nombre,
titulo,
descripcion,
ubicacion,
latitud,
longitud,
fecha_visita,
fecha_fin,
estado,
typeof checklist_json === 'object' && checklist_json !== null ? JSON.stringify(checklist_json) : checklist_json,
typeof historial_json === 'object' && historial_json !== null ? JSON.stringify(historial_json) : historial_json
]
);
return result.insertId;
}
static async findByTicket(companyId, ticketId) {
const [rows] = await db.query(
'SELECT * FROM ticket_visitas WHERE company_id = ? AND ticket_id = ? ORDER BY id DESC LIMIT 1',
[companyId, ticketId]
);
return rows[0] || null;
}
static async findAllByTicket(companyId, ticketId) {
const [rows] = await db.query(
'SELECT * FROM ticket_visitas WHERE company_id = ? AND ticket_id = ? ORDER BY id DESC',
[companyId, ticketId]
);
return rows;
}
static async findById(id) {
const [rows] = await db.query('SELECT * FROM ticket_visitas WHERE id = ?', [id]);
return rows[0] || null;
}
static async update(id, data) {
const fields = [];
const values = [];
for (const [key, val] of Object.entries(data)) {
fields.push(`${key} = ?`);
if ((key === 'checklist_json' || key === 'historial_json') && typeof val === 'object' && val !== null) {
values.push(JSON.stringify(val));
} else {
values.push(val);
}
}
if (fields.length === 0) return;
values.push(id);
await db.query(`UPDATE ticket_visitas SET ${fields.join(', ')} WHERE id = ?`, values);
}
}
module.exports = TicketVisita;