From c9c4961c0e244d760ab146c3324ba3ecb054ee20 Mon Sep 17 00:00:00 2001 From: Lucas Gass Date: Mon, 3 Nov 2025 18:33:47 +0000 Subject: [PATCH] Bug 34069: Add a CannotRestore exception and throw when the userid, borrowernumber, or cardnumber is already in use Signed-off-by: Katie Bliss --- Koha/Exceptions/Patron.pm | 5 +++++ Koha/Old/Patron.pm | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/Koha/Exceptions/Patron.pm b/Koha/Exceptions/Patron.pm index f775e99cd12..7eaa31c9330 100644 --- a/Koha/Exceptions/Patron.pm +++ b/Koha/Exceptions/Patron.pm @@ -41,6 +41,11 @@ use Exception::Class ( isa => 'Koha::Exceptions::Patron', description => "Patron not found" }, + 'Koha::Exceptions::Patron::CannotRestore' => { + isa => 'Koha::Exceptions::Patron', + description => 'The patron cannot be restored due to conflicts', + fields => ['type'], + }, ); sub full_message { diff --git a/Koha/Old/Patron.pm b/Koha/Old/Patron.pm index 61600e7bb1f..62264ed3fac 100644 --- a/Koha/Old/Patron.pm +++ b/Koha/Old/Patron.pm @@ -50,6 +50,35 @@ sub restore_deleted_borrower { my $schema = Koha::Database->new->schema; my $restored_patron; + # Check if borrowernumber exists in borrowers. If it does thrown an exception, cannot restore. + my $existing_borrower = Koha::Patrons->find( $self->borrowernumber ); + if ($existing_borrower) { + Koha::Exceptions::Patron::CannotRestore->throw( + error => 'Borrowernumber already exists', + type => 'borrowernumber', + ); + } + + # Check if cardnumber exists in borrowers. If it does thrown an exception, cannot restore. + my $existing_cardnumber = Koha::Patrons->find( { cardnumber => $self->cardnumber } ); + if ($existing_cardnumber) { + Koha::Exceptions::Patron::CannotRestore->throw( + error => 'Cardnumber already in use', + type => 'cardnumber', + ); + } + + # Check if userid exists. If it does thrown an exception, cannot restore. + if ( $self->userid ) { + my $existing_userid = Koha::Patrons->find( { userid => $self->userid } ); + if ($existing_userid) { + Koha::Exceptions::Patron::CannotRestore->throw( + error => 'Username already in use', + type => 'userid', + ); + } + } + $schema->txn_do( sub { # Retrive all the data about this patron from deleteborrowers table -- 2.39.5