feat: relacionar imagen de WhatsApp con orden médica al agendar domicilio
Al abrir el modal desde una imagen en el chat: - guardar() crea primero la OrdenMedica via crear_desde_whatsapp.php y pasa el orden_id resultante a save_domicilio.php - Enfermera::agenda() hace LEFT JOIN a lab_ordenes_medicas para traer local_file de la orden asociada (as orden_local_file) - enfermero_portal._cardHTML() muestra la imagen de la orden médica con link para ampliar
This commit is contained in:
@@ -106,6 +106,7 @@ class Enfermera {
|
|||||||
d.examenes_solicitados,
|
d.examenes_solicitados,
|
||||||
d.tipo_cliente,
|
d.tipo_cliente,
|
||||||
d.seguro_nombre,
|
d.seguro_nombre,
|
||||||
|
d.orden_id,
|
||||||
p.id AS paciente_id,
|
p.id AS paciente_id,
|
||||||
p.nombre_completo AS paciente_nombre,
|
p.nombre_completo AS paciente_nombre,
|
||||||
p.telefono AS paciente_telefono,
|
p.telefono AS paciente_telefono,
|
||||||
@@ -114,11 +115,13 @@ class Enfermera {
|
|||||||
p.tipo_documento AS paciente_tipo_documento,
|
p.tipo_documento AS paciente_tipo_documento,
|
||||||
p.numero_documento AS paciente_numero_documento,
|
p.numero_documento AS paciente_numero_documento,
|
||||||
p.eps AS paciente_eps,
|
p.eps AS paciente_eps,
|
||||||
|
om.local_file AS orden_local_file,
|
||||||
a.estado AS asignacion_estado,
|
a.estado AS asignacion_estado,
|
||||||
a.id AS asignacion_id
|
a.id AS asignacion_id
|
||||||
FROM lab_asignaciones a
|
FROM lab_asignaciones a
|
||||||
JOIN lab_domicilios d ON d.id = a.domicilio_id
|
JOIN lab_domicilios d ON d.id = a.domicilio_id
|
||||||
JOIN lab_pacientes p ON p.id = d.paciente_id
|
JOIN lab_pacientes p ON p.id = d.paciente_id
|
||||||
|
LEFT JOIN lab_ordenes_medicas om ON om.id = d.orden_id
|
||||||
WHERE a.enfermera_id = ?
|
WHERE a.enfermera_id = ?
|
||||||
AND d.fecha_programada = ?
|
AND d.fecha_programada = ?
|
||||||
ORDER BY d.hora_programada ASC
|
ORDER BY d.hora_programada ASC
|
||||||
|
|||||||
@@ -7085,6 +7085,31 @@ const labDomicilio = (() => {
|
|||||||
notas_admin: fv('labdom-notas') || null,
|
notas_admin: fv('labdom-notas') || null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Si la ventana se abrió desde una imagen (orden médica), crear primero
|
||||||
|
// la OrdenMedica y luego enlazarla al domicilio via orden_id
|
||||||
|
if (_localFile) {
|
||||||
|
try {
|
||||||
|
const convIdNum = (_convId && !String(_convId).startsWith('__user:'))
|
||||||
|
? parseInt(_convId) : null;
|
||||||
|
const orRes = await fetch('api/lab/crear_desde_whatsapp.php', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
paciente_id: _pacienteId,
|
||||||
|
local_file: _localFile,
|
||||||
|
media_message_id: _msgId || null,
|
||||||
|
conversation_id: convIdNum,
|
||||||
|
examenes_solicitados: datos.examenes_solicitados,
|
||||||
|
estado: 'pendiente',
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const orData = await orRes.json();
|
||||||
|
if (orData.success && orData.orden_id) {
|
||||||
|
datos.orden_id = orData.orden_id;
|
||||||
|
}
|
||||||
|
} catch (_) { /* no bloquea si falla la creación de la orden */ }
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const r = await fetch('api/lab/save_domicilio.php', {
|
const r = await fetch('api/lab/save_domicilio.php', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|||||||
@@ -412,6 +412,17 @@ const portal = {
|
|||||||
? `<div class="small mb-2"><span class="badge bg-info text-dark"><i class="fas fa-shield-alt me-1"></i>Seguro${item.seguro_nombre ? ': ' + esc(item.seguro_nombre) : ''}</span></div>`
|
? `<div class="small mb-2"><span class="badge bg-info text-dark"><i class="fas fa-shield-alt me-1"></i>Seguro${item.seguro_nombre ? ': ' + esc(item.seguro_nombre) : ''}</span></div>`
|
||||||
: ''}
|
: ''}
|
||||||
|
|
||||||
|
<!-- Orden médica (imagen) -->
|
||||||
|
${item.orden_local_file ? `
|
||||||
|
<div class="mt-2 mb-2">
|
||||||
|
<a href="uploads/media/${esc(item.orden_local_file)}" target="_blank"
|
||||||
|
title="Ver orden médica">
|
||||||
|
<img src="uploads/media/${esc(item.orden_local_file)}"
|
||||||
|
style="max-width:100%;max-height:180px;border-radius:8px;border:1px solid #ddd;cursor:zoom-in"
|
||||||
|
alt="Orden médica #${item.orden_id}">
|
||||||
|
</a>
|
||||||
|
<div class="small text-muted mt-1"><i class="fas fa-file-medical me-1"></i>Orden #${item.orden_id}</div>
|
||||||
|
</div>` : ''}
|
||||||
<!-- Servicios extra registrados -->
|
<!-- Servicios extra registrados -->
|
||||||
${seSuf ? `<div class="d-flex flex-wrap gap-1 mb-2">${seSuf}</div>` : ''}
|
${seSuf ? `<div class="d-flex flex-wrap gap-1 mb-2">${seSuf}</div>` : ''}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user