From dd515852b6703b8da8bea863d04597a466d0731b Mon Sep 17 00:00:00 2001 From: Emmi Takkinen Date: Wed, 23 Apr 2025 12:48:40 +0300 Subject: [PATCH] Bug 39233: Drop non-patron guarantor info when guarantee is updated as an adult via update_patrons_category.pl When child patrons category is updated via update_patrons_category.pl patrons relationship with their guarantor is dropped from borrower_relationships table. But non-patron guarantees info is still kept in borrowers table. This patch fixes this by setting non-patron guarantor columns in borrower table as undefined when patron is stored. To test: 1. Find child patron with non-patron guarantor or create one. 2. Update patrons age so that their category is updated when you run following: perl misc/cronjobs/update_patrons_category.pl --confirm --too_old --from K --to PT 3. Check patrons info from patrons detail page. => Note that non-patron guarantors info was not dropped. 4. Apply this patch. 5. Run cronjob again. => Non-patron guarantors info should have now dropped. Alsp prove t/db_dependent/Patrons.t. Sponsored-by: Koha-Suomi Oy Signed-off-by: David Nind --- Koha/Patron.pm | 10 +++++++--- t/db_dependent/Patrons.t | 6 +++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 56df7f9b8d..661ea9e952 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -377,9 +377,13 @@ sub store { $self->add_enrolment_fee_if_needed(1) if C4::Context->preference('FeeOnChangePatronCategory'); - # Clean up guarantors on category change if required - $self->guarantor_relationships->delete - unless ( $self->category->can_be_guarantee ); + # Clean up both patron and non-patron guarantors on category change if required + unless ( $self->category->can_be_guarantee ) { + $self->guarantor_relationships->delete; + $self->contactname(undef); + $self->contactfirstname(undef); + $self->relationship(undef); + } } diff --git a/t/db_dependent/Patrons.t b/t/db_dependent/Patrons.t index e8ee2fd4f7..32b2b1d7b2 100755 --- a/t/db_dependent/Patrons.t +++ b/t/db_dependent/Patrons.t @@ -116,7 +116,7 @@ foreach my $b ( $patrons->as_list() ) { } subtest "Update patron categories" => sub { - plan tests => 29; + plan tests => 30; t::lib::Mocks::mock_preference( 'borrowerRelationship', 'test' ); my $c_categorycode = $builder->build( { @@ -318,6 +318,10 @@ subtest "Update patron categories" => sub { Koha::Patrons->find( $adult1->borrowernumber )->guarantee_relationships->guarantees->count, 1, 'Guarantee was removed when made adult' ); + is( + Koha::Patrons->find( $child3->borrowernumber )->relationship, undef, + 'Non-patron guarantor relationship dropped when child patron updated to adult' + ); is( Koha::Patrons->search_patrons_to_update_category( { from => $c_categorycode_2 } ) ->update_category_to( { category => $a_categorycode_2 } ), 1, -- 2.39.5