up
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/**
|
||||
* POST /api/lab/save_servicio_extra.php
|
||||
* El enfermero agrega (o actualiza/elimina) un servicio extra a un domicilio.
|
||||
*
|
||||
* Body JSON:
|
||||
* { domicilio_id, descripcion, tipo, notas?, requiere_pago?, valor? } -- crear
|
||||
* { id, descripcion?, tipo?, notas?, requiere_pago?, valor? } -- editar
|
||||
* { id, eliminar: true } -- borrar
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireMethod('POST');
|
||||
|
||||
$TIPOS_VALIDOS = ['inyeccion','cura','nebulizacion','toma_muestra',
|
||||
'tension_arterial','glucometria','otro'];
|
||||
|
||||
try {
|
||||
$datos = inputJson();
|
||||
$db = Database::getInstance();
|
||||
|
||||
// ── Eliminar ───────────────────────────────────────────────────────────
|
||||
if (!empty($datos['id']) && !empty($datos['eliminar'])) {
|
||||
$se = $db->fetch('SELECT * FROM lab_servicios_extra WHERE id = ?', [(int)$datos['id']]);
|
||||
if (!$se) jsonError('Servicio no encontrado', 404);
|
||||
if (userRole() === 'enfermero') {
|
||||
requireEnfermeroAccess((int)$se['realizado_por']);
|
||||
}
|
||||
$db->delete('lab_servicios_extra', 'id = ?', [(int)$datos['id']]);
|
||||
jsonOk(['id' => (int)$datos['id']], 'Servicio eliminado');
|
||||
}
|
||||
|
||||
// ── Editar ─────────────────────────────────────────────────────────────
|
||||
if (!empty($datos['id'])) {
|
||||
$id = (int)$datos['id'];
|
||||
$se = $db->fetch('SELECT * FROM lab_servicios_extra WHERE id = ?', [$id]);
|
||||
if (!$se) jsonError('Servicio no encontrado', 404);
|
||||
if (userRole() === 'enfermero') {
|
||||
requireEnfermeroAccess((int)$se['realizado_por']);
|
||||
}
|
||||
$permitidos = ['descripcion','tipo','notas','requiere_pago','valor'];
|
||||
$campos = array_intersect_key($datos, array_flip($permitidos));
|
||||
if (isset($campos['tipo']) && !in_array($campos['tipo'], $TIPOS_VALIDOS)) {
|
||||
jsonError('Tipo de servicio inválido');
|
||||
}
|
||||
$db->update('lab_servicios_extra', $campos, 'id = ?', [$id]);
|
||||
jsonOk(['id' => $id], 'Servicio actualizado');
|
||||
}
|
||||
|
||||
// ── Crear ──────────────────────────────────────────────────────────────
|
||||
foreach (['domicilio_id', 'descripcion', 'tipo'] as $req) {
|
||||
if (empty($datos[$req])) jsonError("El campo $req es obligatorio");
|
||||
}
|
||||
if (!in_array($datos['tipo'], $TIPOS_VALIDOS)) {
|
||||
jsonError('Tipo de servicio inválido');
|
||||
}
|
||||
|
||||
// Verificar que el domicilio existe y que el enfermero le pertenece
|
||||
$domId = (int)$datos['domicilio_id'];
|
||||
if (userRole() === 'enfermero') {
|
||||
$eid = enfermeraId();
|
||||
$asig = $db->fetch(
|
||||
'SELECT a.id FROM lab_asignaciones a WHERE a.domicilio_id = ? AND a.enfermera_id = ?',
|
||||
[$domId, $eid]
|
||||
);
|
||||
if (!$asig) jsonError('No tienes permiso para este domicilio', 403);
|
||||
}
|
||||
|
||||
$id = $db->insert('lab_servicios_extra', [
|
||||
'domicilio_id' => $domId,
|
||||
'descripcion' => trim($datos['descripcion']),
|
||||
'tipo' => $datos['tipo'],
|
||||
'notas' => $datos['notas'] ?? null,
|
||||
'requiere_pago' => !empty($datos['requiere_pago']) ? 1 : 0,
|
||||
'valor' => !empty($datos['valor']) ? (float)$datos['valor'] : null,
|
||||
'realizado_por' => enfermeraId() ?? (userRole() === 'admin' ? null : null),
|
||||
]);
|
||||
|
||||
jsonOk(['id' => $id], 'Servicio extra registrado');
|
||||
|
||||
} catch (Exception $e) {
|
||||
jsonError($e->getMessage(), 500);
|
||||
}
|
||||
Reference in New Issue
Block a user