diff --git a/api/lab/ciudades.php b/api/lab/ciudades.php new file mode 100644 index 0000000..6b0b082 --- /dev/null +++ b/api/lab/ciudades.php @@ -0,0 +1,64 @@ +query($sql)->fetchAll(PDO::FETCH_ASSOC); + jsonOk(['ciudades' => $rows]); +} + +requireMethod('POST'); +requireAdmin(); + +$body = inputJson(); +$action = trim($body['action'] ?? ''); + +if ($action === 'save') { + $nombre = trim($body['nombre'] ?? ''); + $id = (int)($body['id'] ?? 0); + if (!$nombre) jsonError('nombre requerido.'); + if (strlen($nombre) > 100) jsonError('nombre demasiado largo (máx 100).'); + + if ($id) { + $pdo->prepare('UPDATE lab_ciudades SET nombre = ? WHERE id = ?')->execute([$nombre, $id]); + jsonOk(['id' => $id], 'Ciudad actualizada.'); + } else { + $st = $pdo->prepare('INSERT INTO lab_ciudades (nombre) VALUES (?)'); + try { + $st->execute([$nombre]); + } catch (\PDOException $e) { + if ($e->getCode() == 23000) jsonError('Ya existe una ciudad con ese nombre.'); + throw $e; + } + jsonOk(['id' => (int)$pdo->lastInsertId()], 'Ciudad creada.'); + } +} + +if ($action === 'toggle') { + $id = (int)($body['id'] ?? 0); + if (!$id) jsonError('id requerido.'); + $pdo->prepare('UPDATE lab_ciudades SET activa = NOT activa WHERE id = ?')->execute([$id]); + jsonOk([], 'Estado actualizado.'); +} + +if ($action === 'delete') { + $id = (int)($body['id'] ?? 0); + if (!$id) jsonError('id requerido.'); + $uso = $pdo->prepare('SELECT COUNT(*) FROM lab_pacientes WHERE ciudad = (SELECT nombre FROM lab_ciudades WHERE id = ?)'); + $uso->execute([$id]); + if ((int)$uso->fetchColumn() > 0) jsonError('No se puede eliminar: hay pacientes con esta ciudad. Desactívela en su lugar.'); + $pdo->prepare('DELETE FROM lab_ciudades WHERE id = ?')->execute([$id]); + jsonOk([], 'Ciudad eliminada.'); +} + +jsonError('action inválida.'); diff --git a/modules/lab_ciudades/module.php b/modules/lab_ciudades/module.php new file mode 100644 index 0000000..64c1cf9 --- /dev/null +++ b/modules/lab_ciudades/module.php @@ -0,0 +1,12 @@ + 'lab_ciudades', + 'name' => 'Ciudades', + 'icon' => 'fas fa-map-marker-alt', + 'category' => 'lab', + 'route' => '/lab_ciudades.php', + 'is_active' => true, + 'sort_order' => 23, + 'oleada' => 0, + 'description' => 'Gestión de ciudades de pacientes', + 'links' => [['name' => 'Ciudades', 'icon' => 'fas fa-map-marker-alt', 'route' => '/lab_ciudades.php']], +]; diff --git a/modules/lab_ciudades/views/index.php b/modules/lab_ciudades/views/index.php new file mode 100644 index 0000000..4007c17 --- /dev/null +++ b/modules/lab_ciudades/views/index.php @@ -0,0 +1,149 @@ + + + +
+ +| Nombre | +Estado | +Acciones | +
|---|---|---|
| Cargando… | ||