diff --git a/controller/processController.js b/controller/processController.js index 96d34e3..1036163 100644 --- a/controller/processController.js +++ b/controller/processController.js @@ -219,16 +219,19 @@ const processAtendimento = async (ticketData) => { const titulo = `Mundiale - Protocolo: ${ticketData.ticket_mundiale} - ${ticketData.cliente_nome}`; ticketData.titulo = titulo; - const selectedEntityCodServico = await glpiModel.selectEntityId(ticketData.codigo_servico); - // Prioriza a entidade do serviço; se não existir tenta pelo cliente; fallback para 0 - if (selectedEntityCodServico.name.include(ticketData.codigo_cliente)) { - ticketData.entidades_id = selectedEntityCodServico.id; - logInfo(`Entidade encontrada por serviço: ${selectedEntityCodServico.name}`); + // Busca a entidade primeiro pelo código do serviço + // Se não encontrar, busca pelo código do cliente + // Se ainda assim não encontrar, atribui 0 (contratos ativos) + const selectedEntityCodServico = await glpiModel.selectEntityIdCodServico(ticketData.codigo_cliente, ticketData.codigo_servico); + + if (selectedEntityCodServico) { + ticketData.entidades_id = selectedEntityCodServico; + logInfo(`Entidade encontrada por serviço: ${selectedEntityCodServico}`); } else { - const selectedEntityCodCliente = await glpiModel.selectEntityId(ticketData.codigo_cliente); + const selectedEntityCodCliente = await glpiModel.selectEntityIdCodCliente(ticketData.codigo_cliente); if (selectedEntityCodCliente) { - ticketData.entidades_id = selectedEntityCodCliente.id; - logInfo(`Entidade encontrada por cliente: ${selectedEntityCodCliente.name}`); + ticketData.entidades_id = selectedEntityCodCliente; + logInfo(`Entidade encontrada por cliente: ${selectedEntityCodCliente}`); } else { ticketData.entidades_id = 0; logInfo(`Nenhuma entidade encontrada para serviço="${ticketData.codigo_servico}" ou cliente="${ticketData.codigo_cliente}", atribuindo contratos ativos`); diff --git a/model/glpiModel.js b/model/glpiModel.js index 4df0025..ac53af1 100644 --- a/model/glpiModel.js +++ b/model/glpiModel.js @@ -64,24 +64,46 @@ class GlpiModel { } } - static async selectEntityId(id) { + static async selectEntityIdCodCliente(id) { - const query = `SELECT id, name FROM glpi_entities WHERE name LIKE ? OR name LIKE ? LIMIT 1;`; + const query = `SELECT id FROM glpi_entities WHERE name LIKE ? OR name LIKE ? LIMIT 1;`; const values = [`${id} -%`, `${id}-%`]; try { const [rows] = await pool.execute(query, values); if (!rows || rows.length === 0) { - logInfo(`Entidade não encontrada para: ${id} `); + logInfo(`Entidade não encontrada por código de cliente para: ${id} `); return null; } - logInfo(`Entidade encontrada para: ${id}`); + logInfo(`Entidade encontrada por código de cliente para: ${id}`); - return { id: Number(rows[0].id), name: rows[0].name }; + return Number(rows[0].id); } catch (err) { - logError(`Erro ao buscar entidade: ${err}`); + logError(`Erro ao buscar entidade por código de cliente: ${err}`); + throw err; + } + } + + static async selectEntityIdCodServico(idCliente, idServico) { + + const query = `SELECT id FROM glpi_entities WHERE name LIKE ? LIMIT 1;`; + const values = [`${idCliente} - ${idServico} %`]; + + try { + const [rows] = await pool.execute(query, values); + if (!rows || rows.length === 0) { + logInfo(`Entidade não encontrada por código de serviço para: ${idServico} `); + return null; + } + + logInfo(`Entidade encontrada por código de serviço para: ${idServico}`); + + + return Number(rows[0].id); + } catch (err) { + logError(`Erro ao buscar entidade por código de serviço: ${err}`); throw err; } }