40 lines
1.2 KiB
PHP
40 lines
1.2 KiB
PHP
<?php
|
|
/** GET /api/lab/get_ordenes.php — Lista paginada de órdenes médicas con filtros */
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('GET');
|
|
|
|
try {
|
|
$om = new OrdenMedica();
|
|
|
|
$filtros = array_filter([
|
|
'estado' => $_GET['estado'] ?? '',
|
|
'paciente_id' => (int)($_GET['paciente_id'] ?? 0) ?: null,
|
|
'desde' => $_GET['desde'] ?? '',
|
|
'hasta' => $_GET['hasta'] ?? '',
|
|
'busqueda' => trim($_GET['busqueda'] ?? $_GET['search'] ?? ''),
|
|
], fn($v) => $v !== null && $v !== '');
|
|
|
|
$pagina = max(1, (int)($_GET['page'] ?? 1));
|
|
$por = max(1, min(100, (int)($_GET['limit'] ?? 30)));
|
|
|
|
// Vista de una sola orden
|
|
if (!empty($_GET['id'])) {
|
|
$orden = $om->obtener((int)$_GET['id']);
|
|
if (!$orden) {
|
|
jsonError('Orden no encontrada', 404);
|
|
}
|
|
jsonOk(['orden' => $orden]);
|
|
}
|
|
|
|
$resultado = $om->listar($filtros, $pagina, $por);
|
|
|
|
// Incluir también el contador por estado para el dashboard
|
|
if (!isset($_GET['no_counts'])) {
|
|
$resultado['contadores'] = $om->contadorPorEstado();
|
|
}
|
|
|
|
jsonOk($resultado);
|
|
} catch (Exception $e) {
|
|
jsonError($e->getMessage(), 500);
|
|
}
|