up
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
/**
|
||||
* POST /api/lab/save_domicilio.php
|
||||
* Crea, actualiza o cambia estado de un domicilio.
|
||||
* Body JSON:
|
||||
* { id?, paciente_id, orden_id?, direccion, ciudad?, barrio?,
|
||||
* indicaciones_dir?, fecha_programada, hora_programada?,
|
||||
* tipo_servicio?, estado?,
|
||||
* -- Para cambio de estado solamente:
|
||||
* solo_estado?: true, nuevo_estado?, motivo_cancelacion?, ... }
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('POST');
|
||||
|
||||
try {
|
||||
$datos = inputJson();
|
||||
$dom = new Domicilio();
|
||||
$admin = adminId();
|
||||
|
||||
// Solo cambio de estado
|
||||
if (!empty($datos['id']) && !empty($datos['solo_estado'])) {
|
||||
$id = (int)$datos['id'];
|
||||
$nuevoEstado = $datos['nuevo_estado'] ?? '';
|
||||
$extras = array_filter([
|
||||
'motivo_cancelacion' => $datos['motivo_cancelacion'] ?? null,
|
||||
'fecha_reprogramada' => $datos['fecha_reprogramada'] ?? null,
|
||||
'hora_llegada' => $datos['hora_llegada'] ?? null,
|
||||
'hora_salida' => $datos['hora_salida'] ?? null,
|
||||
'observaciones' => $datos['observaciones'] ?? null,
|
||||
'muestras_tomadas' => $datos['muestras_tomadas'] ?? null,
|
||||
]);
|
||||
$dom->cambiarEstado($id, $nuevoEstado, $admin, $extras);
|
||||
jsonOk(['id' => $id], 'Estado actualizado');
|
||||
}
|
||||
|
||||
if (!empty($datos['id'])) {
|
||||
// Actualización general
|
||||
$id = (int)$datos['id'];
|
||||
unset($datos['id'], $datos['solo_estado']);
|
||||
// Normalizar orden_id: vacío o 0 → null
|
||||
if (isset($datos['orden_id']) && ($datos['orden_id'] === '' || (int)$datos['orden_id'] === 0)) {
|
||||
$datos['orden_id'] = null;
|
||||
}
|
||||
$dom->actualizar($id, $datos, $admin);
|
||||
jsonOk(['id' => $id], 'Domicilio actualizado correctamente');
|
||||
} else {
|
||||
// Creación
|
||||
foreach (['paciente_id', 'direccion', 'fecha_programada'] as $req) {
|
||||
if (empty($datos[$req])) {
|
||||
jsonError("El campo $req es obligatorio");
|
||||
}
|
||||
}
|
||||
// Normalizar orden_id: vacío o 0 → null (evita FK constraint)
|
||||
if (isset($datos['orden_id']) && ($datos['orden_id'] === '' || (int)$datos['orden_id'] === 0)) {
|
||||
$datos['orden_id'] = null;
|
||||
}
|
||||
// Si el creador es un enfermero y no vino enfermera_id, auto-asignarlo desde la sesión
|
||||
if (empty($datos['enfermera_id']) && userRole() === 'enfermero') {
|
||||
$eid = enfermeraId();
|
||||
if ($eid) $datos['enfermera_id'] = $eid;
|
||||
}
|
||||
$id = $dom->crear($datos, $admin);
|
||||
|
||||
// Crear asignación automática si se indicó enfermera_id
|
||||
if (!empty($datos['enfermera_id'])) {
|
||||
$asig = new Asignacion();
|
||||
$asig->asignar($id, (int)$datos['enfermera_id'], $admin);
|
||||
}
|
||||
|
||||
jsonOk(['id' => $id], 'Domicilio creado correctamente');
|
||||
}
|
||||
} catch (InvalidArgumentException $e) {
|
||||
jsonError($e->getMessage());
|
||||
} catch (Exception $e) {
|
||||
jsonError($e->getMessage(), 500);
|
||||
}
|
||||
Reference in New Issue
Block a user