83 lines
3.7 KiB
PHP
83 lines
3.7 KiB
PHP
<?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);
|
|
}
|