up
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
/**
|
||||
* POST /api/lab/create_enfermero_user.php
|
||||
* Crea o actualiza el usuario de acceso al sistema para una enfermera.
|
||||
* Solo administradores pueden llamar este endpoint.
|
||||
*
|
||||
* Body JSON:
|
||||
* { enfermera_id, username, password?, full_name? }
|
||||
* Si el usuario ya existe para esa enfermera_id, actualiza username/password.
|
||||
* Si password viene vacío en actualización, no cambia la contraseña.
|
||||
*
|
||||
* Returns:
|
||||
* { ok:true, message, user_id }
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
requireAdmin();
|
||||
requireMethod('POST');
|
||||
|
||||
try {
|
||||
$datos = inputJson();
|
||||
$enfermeraId = (int)($datos['enfermera_id'] ?? 0);
|
||||
$username = trim($datos['username'] ?? '');
|
||||
$password = $datos['password'] ?? '';
|
||||
$fullName = trim($datos['full_name'] ?? '');
|
||||
|
||||
if (!$enfermeraId) jsonError('enfermera_id es obligatorio');
|
||||
if (!$username) jsonError('username es obligatorio');
|
||||
if (strlen($username) < 3) jsonError('El usuario debe tener al menos 3 caracteres');
|
||||
|
||||
$db = Database::getInstance();
|
||||
|
||||
// Verificar que la enfermera existe
|
||||
$enf = $db->fetch('SELECT id, nombre_completo FROM lab_enfermeras WHERE id = ?', [$enfermeraId]);
|
||||
if (!$enf) jsonError('Enfermera no encontrada', 404);
|
||||
|
||||
if (empty($fullName)) $fullName = $enf['nombre_completo'];
|
||||
|
||||
// ¿Ya existe un usuario vinculado a esta enfermera?
|
||||
$existente = $db->fetch(
|
||||
'SELECT id, username FROM admin_users WHERE enfermera_id = ? LIMIT 1',
|
||||
[$enfermeraId]
|
||||
);
|
||||
|
||||
if ($existente) {
|
||||
// --- ACTUALIZAR ---
|
||||
// Verificar que el nuevo username no esté en uso por OTRO usuario
|
||||
$conflicto = $db->fetch(
|
||||
'SELECT id FROM admin_users WHERE username = ? AND id != ?',
|
||||
[$username, $existente['id']]
|
||||
);
|
||||
if ($conflicto) jsonError("El usuario '$username' ya está en uso por otra cuenta");
|
||||
|
||||
$sets = ['username = ?', 'full_name = ?', 'is_active = 1', 'updated_at = NOW()'];
|
||||
$vals = [$username, $fullName];
|
||||
|
||||
if (!empty($password)) {
|
||||
if (strlen($password) < 6) jsonError('La contraseña debe tener al menos 6 caracteres');
|
||||
$sets[] = 'password_hash = ?';
|
||||
$vals[] = password_hash($password, PASSWORD_DEFAULT);
|
||||
}
|
||||
|
||||
$vals[] = $existente['id'];
|
||||
$db->execute(
|
||||
'UPDATE admin_users SET ' . implode(', ', $sets) . ' WHERE id = ?',
|
||||
$vals
|
||||
);
|
||||
|
||||
jsonOk(['user_id' => $existente['id']], 'Acceso actualizado correctamente');
|
||||
|
||||
} else {
|
||||
// --- CREAR ---
|
||||
if (empty($password)) jsonError('La contraseña es obligatoria para crear el acceso');
|
||||
if (strlen($password) < 6) jsonError('La contraseña debe tener al menos 6 caracteres');
|
||||
|
||||
// Verificar username único
|
||||
$conflicto = $db->fetch('SELECT id FROM admin_users WHERE username = ?', [$username]);
|
||||
if ($conflicto) jsonError("El usuario '$username' ya está en uso");
|
||||
|
||||
$hash = password_hash($password, PASSWORD_DEFAULT);
|
||||
$db->execute(
|
||||
"INSERT INTO admin_users (username, password_hash, full_name, role, enfermera_id, is_active, created_at)
|
||||
VALUES (?, ?, ?, 'enfermero', ?, 1, NOW())",
|
||||
[$username, $hash, $fullName, $enfermeraId]
|
||||
);
|
||||
$userId = $db->lastInsertId();
|
||||
|
||||
jsonOk(['user_id' => $userId], 'Acceso creado correctamente');
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
jsonError($e->getMessage(), 500);
|
||||
}
|
||||
Reference in New Issue
Block a user