up
This commit is contained in:
@@ -30,5 +30,16 @@ try {
|
|||||||
jsonOk(['id' => $id], 'Paciente creado correctamente');
|
jsonOk(['id' => $id], 'Paciente creado correctamente');
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} 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 {
|
public function crear(array $datos, ?int $adminId = null): int {
|
||||||
$campos = $this->filtrarCampos($datos);
|
$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);
|
$this->log->registrar($adminId, 'pacientes', 'crear', $id, $campos);
|
||||||
return $id;
|
return $id;
|
||||||
}
|
}
|
||||||
@@ -125,7 +140,22 @@ class Paciente {
|
|||||||
*/
|
*/
|
||||||
public function actualizar(int $id, array $datos, ?int $adminId = null): bool {
|
public function actualizar(int $id, array $datos, ?int $adminId = null): bool {
|
||||||
$campos = $this->filtrarCampos($datos);
|
$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);
|
$this->log->registrar($adminId, 'pacientes', 'editar', $id, $campos);
|
||||||
return $ok > 0;
|
return $ok > 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user