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:
Lizandro Guarnizo
2026-03-24 21:51:29 -05:00
parent aa17dc299b
commit 2abce6d4c2
10 changed files with 262 additions and 51 deletions
+47 -1
View File
@@ -91,7 +91,7 @@ class Enfermera {
*/
public function agenda(int $enfermeraId, string $fecha = ''): array {
$fecha = $fecha ?: date('Y-m-d');
return $this->db->fetchAll("
$rows = $this->db->fetchAll("
SELECT
d.id AS domicilio_id,
d.fecha_programada,
@@ -151,6 +151,52 @@ class Enfermera {
AND d.fecha_programada = ?
ORDER BY d.hora_programada ASC
", [$enfermeraId, $fecha]);
// Bulk-load todos los archivos de órdenes vinculados a estos domicilios
$domIds = array_values(array_filter(array_column($rows, 'domicilio_id')));
if (!empty($domIds)) {
$ph = implode(',', array_fill(0, count($domIds), '?'));
$archivos = $this->db->fetchAll(
"SELECT domicilio_id, id AS orden_id, local_file
FROM lab_ordenes_medicas
WHERE domicilio_id IN ($ph) AND local_file IS NOT NULL
ORDER BY id ASC",
$domIds
);
$archivosPorDom = [];
foreach ($archivos as $a) {
$archivosPorDom[$a['domicilio_id']][] = $a;
}
foreach ($rows as &$row) {
$did = $row['domicilio_id'];
if (!empty($archivosPorDom[$did])) {
$row['archivos_ordenes'] = $archivosPorDom[$did];
} elseif (!empty($row['orden_local_file'])) {
// Fallback: domicilio creado antes de la migración
$row['archivos_ordenes'] = [[
'orden_id' => $row['orden_id_display'] ?? $row['orden_id'],
'local_file' => $row['orden_local_file'],
]];
} else {
$row['archivos_ordenes'] = [];
}
}
unset($row);
} else {
foreach ($rows as &$row) {
if (!empty($row['orden_local_file'])) {
$row['archivos_ordenes'] = [[
'orden_id' => $row['orden_id_display'] ?? $row['orden_id'],
'local_file' => $row['orden_local_file'],
]];
} else {
$row['archivos_ordenes'] = [];
}
}
unset($row);
}
return $rows;
}
/**