up
This commit is contained in:
@@ -30,5 +30,16 @@ try {
|
||||
jsonOk(['id' => $id], 'Paciente creado correctamente');
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
jsonError($e->getMessage(), 500);
|
||||
$msg = $e->getMessage();
|
||||
// Traducir errores de clave duplicada que hayan escapado la validación previa
|
||||
if (stripos($msg, 'Duplicate entry') !== false || stripos($msg, '1062') !== false) {
|
||||
if (stripos($msg, 'numero_documento') !== false || stripos($msg, 'documento') !== false) {
|
||||
jsonError('Ya existe un paciente con ese número de documento');
|
||||
}
|
||||
if (stripos($msg, 'email') !== false) {
|
||||
jsonError('Ya existe un paciente con ese correo electrónico');
|
||||
}
|
||||
jsonError('Ya existe un registro con esos datos (valor duplicado)');
|
||||
}
|
||||
jsonError($msg, 400);
|
||||
}
|
||||
|
||||
@@ -115,7 +115,22 @@ class Paciente {
|
||||
*/
|
||||
public function crear(array $datos, ?int $adminId = null): int {
|
||||
$campos = $this->filtrarCampos($datos);
|
||||
$id = $this->db->insert('lab_pacientes', $campos);
|
||||
|
||||
// Validar documento duplicado antes de insertar
|
||||
if (!empty($campos['numero_documento'])) {
|
||||
$existente = $this->db->fetch(
|
||||
'SELECT id, nombre_completo FROM lab_pacientes WHERE numero_documento = ?',
|
||||
[$campos['numero_documento']]
|
||||
);
|
||||
if ($existente) {
|
||||
throw new Exception(
|
||||
'Ya existe un paciente registrado con ese número de documento: ' .
|
||||
$existente['nombre_completo']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$id = $this->db->insert('lab_pacientes', $campos);
|
||||
$this->log->registrar($adminId, 'pacientes', 'crear', $id, $campos);
|
||||
return $id;
|
||||
}
|
||||
@@ -125,7 +140,22 @@ class Paciente {
|
||||
*/
|
||||
public function actualizar(int $id, array $datos, ?int $adminId = null): bool {
|
||||
$campos = $this->filtrarCampos($datos);
|
||||
$ok = $this->db->update('lab_pacientes', $campos, 'id = ?', [$id]);
|
||||
|
||||
// Validar que el documento no pertenezca a otro paciente
|
||||
if (!empty($campos['numero_documento'])) {
|
||||
$existente = $this->db->fetch(
|
||||
'SELECT id, nombre_completo FROM lab_pacientes WHERE numero_documento = ? AND id != ?',
|
||||
[$campos['numero_documento'], $id]
|
||||
);
|
||||
if ($existente) {
|
||||
throw new Exception(
|
||||
'Ese número de documento ya está registrado para: ' .
|
||||
$existente['nombre_completo']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$ok = $this->db->update('lab_pacientes', $campos, 'id = ?', [$id]);
|
||||
$this->log->registrar($adminId, 'pacientes', 'editar', $id, $campos);
|
||||
return $ok > 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user