feat: multi-archivo órdenes visible en enfermero, domicilios y órdenes médicas
- OrdenMedica::filtrarCampos(): agrega domicilio_id al whitelist - Domicilio::obtener(): consulta secundaria archivos_ordenes[] con fallback - Enfermera::agenda(): bulk-query archivos_ordenes[] por domicilio_id - api/lab/link_ordenes_domicilio.php: API POST vincula orden_ids a domicilio_id - conversations.php guardar(): trackea allOrdenIds[], llama link API post-save - lab_domicilios.php: renderOrdenesDetail() multi-archivo en detalle - enfermero_portal.php: renderOrdenesEnfermero() multi-archivo en cards - lab_ordenes.php: botón 'Ver domicilio' cuando domicilio_id está vinculado - migrations/: ALTER TABLE lab_ordenes_medicas ADD domicilio_id + índice
This commit is contained in:
+29
-17
@@ -531,23 +531,8 @@ const portal = {
|
||||
<!-- Cobro y pago -->
|
||||
${cobroHtml}
|
||||
|
||||
<!-- Orden médica -->
|
||||
${item.orden_local_file ? `
|
||||
<div class="mt-2 mb-2">
|
||||
<!-- Vista previa solo para imágenes (falla silenciosamente para PDFs) -->
|
||||
<img src="${resOrden(item.orden_local_file)}"
|
||||
id="ord-img-${item.orden_id}"
|
||||
style="max-width:100%;max-height:180px;border-radius:8px;border:1px solid #ddd;cursor:zoom-in;display:block"
|
||||
alt="Orden"
|
||||
onclick="window.open('${resOrden(item.orden_local_file)}','_blank')"
|
||||
onerror="this.style.display='none'">
|
||||
<!-- Botón siempre visible: funciona para imágenes Y PDFs -->
|
||||
<a href="${resOrden(item.orden_local_file)}" target="_blank"
|
||||
class="btn btn-sm btn-outline-danger w-100 mt-1">
|
||||
<i class="fas fa-file-medical me-1"></i>
|
||||
Ver / Descargar orden #${item.orden_id_display || item.orden_id || ''}
|
||||
</a>
|
||||
</div>` : ''}
|
||||
<!-- Órdenes médicas (multi-archivo) -->
|
||||
${renderOrdenesEnfermero(item)}
|
||||
<!-- Servicios extra registrados -->
|
||||
${seSuf ? `<div class="d-flex flex-wrap gap-1 mb-2">${seSuf}</div>` : ''}
|
||||
|
||||
@@ -708,6 +693,33 @@ function resOrden(f) {
|
||||
return `api/lab/descargar_orden.php?file=${encodeURIComponent(f)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renderiza todas las órdenes médicas adjuntas a un domicilio.
|
||||
* Soporta multi-archivo (archivos_ordenes[]) con fallback a orden_local_file.
|
||||
*/
|
||||
function renderOrdenesEnfermero(item) {
|
||||
const archivos = item.archivos_ordenes || [];
|
||||
if (!archivos.length) return '';
|
||||
return archivos.map(a => {
|
||||
const lf = a.local_file || '';
|
||||
const url = resOrden(lf);
|
||||
const oid = a.orden_id || '';
|
||||
if (!lf) return '';
|
||||
const isImg = /\.(jpe?g|png|gif|webp)$/i.test(lf);
|
||||
return `<div class="mt-2 mb-2">
|
||||
${isImg ? `<img src="${url}"
|
||||
style="max-width:100%;max-height:180px;border-radius:8px;border:1px solid #ddd;cursor:zoom-in;display:block"
|
||||
alt="Orden" onclick="window.open('${url}','_blank')"
|
||||
onerror="this.style.display='none'">` : ''}
|
||||
<a href="${url}" target="_blank"
|
||||
class="btn btn-sm btn-outline-danger w-100 mt-1">
|
||||
<i class="fas fa-file-medical me-1"></i>
|
||||
Ver / Descargar orden${oid ? ' #' + oid : ''}
|
||||
</a>
|
||||
</div>`;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
portal.init();
|
||||
agendaNueva.init();
|
||||
|
||||
Reference in New Issue
Block a user