From 666a2e60b897d92edbe0a08163c3872d17c2c421 Mon Sep 17 00:00:00 2001
From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com>
Date: Tue, 24 Mar 2026 21:26:13 -0500
Subject: [PATCH] Revert "feat: soporte multi-archivo en modal Agendar
Domicilio"
This reverts commit 45ef99991b173ca3be236f1205e852c8ce934be9.
---
conversations.php | 218 ++++++++++++++++++++++------------------------
1 file changed, 105 insertions(+), 113 deletions(-)
diff --git a/conversations.php b/conversations.php
index 7490308..00037d9 100644
--- a/conversations.php
+++ b/conversations.php
@@ -6589,13 +6589,30 @@ if (!isUserLoggedIn()) {
-
+
-
-
@@ -6850,10 +6867,10 @@ if (!isUserLoggedIn()) {
// ══════════════════════════════════════════════════════════════════════════════
const labDomicilio = (() => {
// Estado interno
- let _msgId = null;
- let _localFiles = []; // string[] — nombres de archivos ya en el servidor
- let _newOrderFiles = []; // File[] — archivos nuevos pendientes de subir
- let _convId = null;
+ let _msgId = null;
+ let _localFile = null;
+ let _newOrderFile = null; // nuevo archivo de orden cargado desde el modal
+ let _convId = null;
let _pacienteId = null;
let _isNewPaciente = false; // true = paciente nuevo (no existe en BD aún)
let _pacNombre = '';
@@ -6945,9 +6962,9 @@ const labDomicilio = (() => {
/* Abre el modal desde el botón del mensaje imagen */
abrir(msgId, localFile, convId) {
- _msgId = msgId || null;
- _localFiles = localFile ? [localFile] : [];
- _convId = convId ? parseInt(convId) : null;
+ _msgId = msgId || null;
+ _localFile = localFile|| null;
+ _convId = convId ? parseInt(convId) : null;
// Guardar también el userId actual para usarContacto cuando convId no esté disponible
if (!_convId && typeof chatApp !== 'undefined' && chatApp.currentUserId) {
_convId = '__user:' + chatApp.currentUserId;
@@ -6956,7 +6973,7 @@ const labDomicilio = (() => {
mostrarFormulario();
labDomicilio._resetFull();
- labDomicilio._renderFilesPanel();
+ labDomicilio._updateOrdenPreview();
if (!_bsModal) _bsModal = new bootstrap.Modal('#modalAgendarDomicilio', { backdrop: true, keyboard: true });
_bsModal.show();
@@ -6967,10 +6984,10 @@ const labDomicilio = (() => {
/* Reset completo (nombre paciente + todos los campos) */
_resetFull() {
- _pacienteId = null;
- _pacNombre = '';
- _histDirs = [];
- _newOrderFiles = [];
+ _pacienteId = null;
+ _pacNombre = '';
+ _histDirs = [];
+ _newOrderFile = null;
$('labdom-pac-busq').value = '';
$('labdom-pac-list').style.display = 'none';
$('labdom-pac-buscar').classList.remove('d-none');
@@ -6992,94 +7009,71 @@ const labDomicilio = (() => {
labDomicilio._resetDomicilio();
},
- /* Renderiza la lista de órdenes médicas adjuntas (soporta múltiples archivos) */
- _renderFilesPanel() {
- const listDiv = document.getElementById('labdom-files-list');
+ /* Actualiza la previa de orden médica en el modal (imagen o icono de archivo) */
+ _updateOrdenPreview() {
+ const prevDiv = document.getElementById('labdom-img-prev');
const addBtn = document.getElementById('labdom-btn-add-orden');
- if (!listDiv) return;
- const iconMap = { pdf: 'fas fa-file-pdf text-danger', doc: 'fas fa-file-word text-primary', docx: 'fas fa-file-word text-primary', mp4: 'fas fa-file-video text-warning', mkv: 'fas fa-file-video text-warning', mp3: 'fas fa-file-audio text-success', ogg: 'fas fa-file-audio text-success', webm: 'fas fa-file-video text-warning' };
- const total = _localFiles.length + _newOrderFiles.length;
- if (total === 0) {
- listDiv.classList.add('d-none');
- listDiv.innerHTML = '';
- if (addBtn) addBtn.innerHTML = '
Adjuntar orden médica
(opcional)';
- return;
- }
- if (addBtn) addBtn.innerHTML = '
Añadir otro archivo';
- let html = '
';
- _localFiles.forEach((fname, i) => {
- const isImg = /\.(jpg|jpeg|png|gif|webp|bmp)$/i.test(fname);
- const ext = (fname || '').split('.').pop().toLowerCase();
- const iCls = iconMap[ext] || 'fas fa-file text-secondary';
- const thumb = isImg
- ? `
})
`
- : `
`;
- html += `
-
${thumb}
-
${escLab(fname)}
-
-
`;
- });
- _newOrderFiles.forEach((file, i) => {
- const isImg = /^image\//.test(file.type);
- const ext = file.name.split('.').pop().toLowerCase();
- const iCls = iconMap[ext] || 'fas fa-file text-secondary';
- const tid = `labdom-nth-${i}`;
- const thumb = isImg
- ? `
![]()
`
- : `
`;
- html += `
-
${thumb}
-
${escLab(file.name)} nuevo
-
-
`;
- });
- html += '
';
- listDiv.innerHTML = html;
- listDiv.classList.remove('d-none');
- // Cargar previsualizaciones de imágenes nuevas
- _newOrderFiles.forEach((file, i) => {
- if (/^image\//.test(file.type)) {
- const img = document.getElementById(`labdom-nth-${i}`);
- if (img) { const rd = new FileReader(); rd.onload = ev => { img.src = ev.target.result; }; rd.readAsDataURL(file); }
+ const imgEl = document.getElementById('labdom-img-el');
+ const iconEl = document.getElementById('labdom-file-icon');
+ const nameEl = document.getElementById('labdom-file-name');
+ if (!prevDiv) return;
+ if (_localFile || _newOrderFile) {
+ prevDiv.style.display = '';
+ if (addBtn) addBtn.style.display = 'none';
+ const fileName = _newOrderFile ? _newOrderFile.name : (_localFile || '');
+ if (nameEl) nameEl.textContent = fileName;
+ const isImage = /\.(jpg|jpeg|png|gif|webp|bmp)$/i.test(fileName);
+ if (isImage) {
+ if (imgEl) {
+ imgEl.style.display = '';
+ if (_newOrderFile) {
+ const reader = new FileReader();
+ reader.onload = ev => { imgEl.src = ev.target.result; };
+ reader.readAsDataURL(_newOrderFile);
+ } else {
+ imgEl.src = `uploads/media/${_localFile}`;
+ }
+ }
+ if (iconEl) iconEl.style.display = 'none';
+ } else {
+ if (imgEl) imgEl.style.display = 'none';
+ if (iconEl) {
+ const ext = (fileName || '').split('.').pop().toLowerCase();
+ const iconMap = { pdf: 'fas fa-file-pdf text-danger', doc: 'fas fa-file-word text-primary', docx: 'fas fa-file-word text-primary', mp4: 'fas fa-file-video text-warning', mkv: 'fas fa-file-video text-warning', mp3: 'fas fa-file-audio text-success', ogg: 'fas fa-file-audio text-success', webm: 'fas fa-file-video text-warning' };
+ iconEl.innerHTML = `
`;
+ iconEl.style.display = 'flex';
+ }
}
- });
+ } else {
+ prevDiv.style.display = 'none';
+ if (addBtn) addBtn.style.display = '';
+ }
},
- /* Abre el selector de archivo para agregar una o más órdenes médicas */
- _agregarArchivo() {
+ /* Abre el selector de archivo para cambiar o agregar la orden médica */
+ _cambiarOrden() {
const inp = document.getElementById('labdom-orden-input');
if (!inp) return;
const handler = (e) => {
inp.removeEventListener('change', handler);
- const files = e.target.files;
- if (!files || !files.length) return;
- for (const f of files) _newOrderFiles.push(f);
- labDomicilio._renderFilesPanel();
+ const file = e.target.files && e.target.files[0];
+ if (!file) return;
+ _newOrderFile = file;
+ _localFile = null;
+ labDomicilio._updateOrdenPreview();
inp.value = '';
};
inp.addEventListener('change', handler);
inp.click();
},
- /* Elimina un archivo concreto de la lista (local = del servidor, new = pendiente subir) */
- _eliminarArchivo(source, index) {
- if (source === 'local') {
- if (index === 0) _msgId = null;
- _localFiles.splice(index, 1);
- } else {
- _newOrderFiles.splice(index, 1);
- }
- labDomicilio._renderFilesPanel();
- },
-
- /* Mantiene compatibilidad con código externo que llame _eliminarOrden() */
+ /* Elimina la orden médica adjunta */
_eliminarOrden() {
- if (!confirm('¿Eliminar todas las órdenes médicas adjuntas?')) return;
- _localFiles = [];
- _newOrderFiles = [];
- _msgId = null;
- labDomicilio._renderFilesPanel();
+ if (!confirm('¿Eliminar la orden médica adjunta?')) return;
+ _localFile = null;
+ _newOrderFile = null;
+ _msgId = null;
+ labDomicilio._updateOrdenPreview();
},
/* Muestra/oculta el campo «nombre del seguro» según la selección */
@@ -7416,23 +7410,22 @@ const labDomicilio = (() => {
notas_admin: fv('labdom-notas') || null,
};
- // Subir todos los archivos nuevos y añadirlos a _localFiles
- for (const file of _newOrderFiles) {
+ // Subir nuevo archivo de orden si el usuario cambió o agregó uno desde el modal
+ if (_newOrderFile) {
try {
const fd = new FormData();
- fd.append('file', file);
+ fd.append('file', _newOrderFile);
const upRes = await fetch('api/lab/upload_orden.php', { method: 'POST', body: fd });
const upData = await upRes.json();
if (upData.success && upData.local_file) {
- _localFiles.push(upData.local_file);
+ _localFile = upData.local_file;
+ _newOrderFile = null;
}
} catch (_e) { /* silencioso — no bloquea el flujo */ }
}
- _newOrderFiles = [];
- // Crear registro de orden por cada archivo y enlazarlo al domicilio
- let firstOrdenId = null;
- for (let _fi = 0; _fi < _localFiles.length; _fi++) {
+ // Si hay orden médica (original o recién subida), crear registro y enlazar
+ if (_localFile) {
try {
const convIdNum = (_convId && !String(_convId).startsWith('__user:'))
? parseInt(_convId) : null;
@@ -7441,20 +7434,19 @@ const labDomicilio = (() => {
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
paciente_id: _pacienteId,
- local_file: _localFiles[_fi],
- media_message_id: (_fi === 0 ? _msgId : null) || null,
+ 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 && firstOrdenId === null) {
- firstOrdenId = orData.orden_id;
+ if (orData.success && orData.orden_id) {
+ datos.orden_id = orData.orden_id;
}
} catch (_) { /* no bloquea si falla la creación de la orden */ }
}
- if (firstOrdenId) datos.orden_id = firstOrdenId;
try {
const r = await fetch('api/lab/save_domicilio.php', {
@@ -7606,9 +7598,9 @@ const labDomicilio = (() => {
pacienteId: _pacienteId,
pacNombre: _pacNombre,
histDirs: [..._histDirs],
- msgId: _msgId,
- localFiles: [..._localFiles],
- newOrderFiles: [..._newOrderFiles],
+ msgId: _msgId,
+ localFile: _localFile,
+ newOrderFile: _newOrderFile,
cardVisible: !document.getElementById('labdom-pac-card')?.classList.contains('d-none'),
pacInfo: {
nombre: document.getElementById('labdom-pac-nombre')?.value || '',
@@ -7691,13 +7683,13 @@ const labDomicilio = (() => {
labDomicilio._resetFull(); // limpia el DOM
// Restaurar estado interno DESPUÉS del reset (para que no se sobreescriba)
- _convId = sesion.convId;
- _pacienteId = sesion.pacienteId;
- _pacNombre = sesion.pacNombre;
- _histDirs = sesion.histDirs || [];
- _msgId = sesion.msgId;
- _localFiles = sesion.localFiles || [];
- _newOrderFiles = sesion.newOrderFiles || [];
+ _convId = sesion.convId;
+ _pacienteId = sesion.pacienteId;
+ _pacNombre = sesion.pacNombre;
+ _histDirs = sesion.histDirs || [];
+ _msgId = sesion.msgId;
+ _localFile = sesion.localFile;
+ _newOrderFile = sesion.newOrderFile || null;
// Restaurar campos del formulario
const f = sesion.fields || {};
@@ -7742,7 +7734,7 @@ const labDomicilio = (() => {
}
labDomicilio._calcTotal();
- labDomicilio._renderFilesPanel();
+ labDomicilio._updateOrdenPreview();
// Abrir el modal
if (!_bsModal) _bsModal = new bootstrap.Modal('#modalAgendarDomicilio', { backdrop: true, keyboard: true });