From 5cd08373b1eca33ba1b8bd867b6de5d40c0d7242 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 24 Jul 2020 12:18:44 -0400 Subject: [PATCH] Bug 26059: Create guarantor/guarantee links on patron import The change to allow multiple guarantors was meant to maintain the ability to import patrons with a Koha patron guarantor, but is not working as intended. A) Adding the guarantor simply doesn't work B) We have two columns named 'relationship', one for the borrowers table, and one for the guarantor relationships table. This clearly doesn't work and will cause confusion. The one for the guarantor relationships table should be renamed. C) guarantor_firstname and guarantor_surname in the CSV file do nothing and should be removed. This patch also fixes a minor issue that causes warnings like: CGI::param called in list context from /kohadevbox/koha/tools/import_borrowers.pl line 124 Test Plan: 1) Create a CSV with contents like: cardnumber,surname,firstname,branchcode,categorycode,guarantor_relationship,guarantor_id bloop,gloop,froop,MPL,J,father,48 brim,flim,zim,MPL,J,father,48 2) Attempt to upload this file, ensure you have a borrowernumber 48 that can have guarantors 3) Note the accounts are not linked 4) Apply this patch 5) Restart all the things! 6) Upload the file again 7) The patrons should now be linked! 8) Download the starter CSV file 9) Note the second relationship column is now guarantor_relationship 10) Note the columns guarantor_firstname and guarantor_surname are no longer present Signed-off-by: Amit Gupta Signed-off-by: Marti Fuerst Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart --- Koha/Patrons/Import.pm | 27 +++++++++++++++++++++------ tools/import_borrowers.pl | 6 +++--- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Koha/Patrons/Import.pm b/Koha/Patrons/Import.pm index 03e3b0ad85..d951bf54ed 100644 --- a/Koha/Patrons/Import.pm +++ b/Koha/Patrons/Import.pm @@ -227,9 +227,9 @@ sub import_patrons { next LINE; } - my $relationship = $borrower{relationship}; - my $guarantor_id = $borrower{guarantor_id}; - delete $borrower{relationship}; + my $guarantor_relationship = $borrower{guarantor_relationship}; + delete $borrower{guarantor_relationship}; + my $guarantor_id = $borrower{guarantor_id}; delete $borrower{guarantor_id}; # Remove warning for int datatype that cannot be null @@ -358,6 +358,7 @@ sub import_patrons { Koha::Patron->new(\%borrower)->store; }; unless ( $@ ) { + $borrowernumber = $patron->id; if ( $patron->is_debarred ) { AddDebarment( @@ -410,13 +411,26 @@ sub import_patrons { # Add a guarantor if we are given a relationship if ( $guarantor_id ) { - Koha::Patron::Relationship->new( + my $relationship = Koha::Patron::Relationships->find( { guarantee_id => $borrowernumber, - relationship => $relationship, guarantor_id => $guarantor_id, } - )->store(); + ); + + if ( $relationship ) { + $relationship->relationship( $guarantor_relationship ); + $relationship->store(); + } + else { + Koha::Patron::Relationship->new( + { + guarantee_id => $borrowernumber, + relationship => $guarantor_relationship, + guarantor_id => $guarantor_id, + } + )->store(); + } } } @@ -494,6 +508,7 @@ sub set_column_keys { my @columnkeys = map { $_ ne 'borrowernumber' ? $_ : () } Koha::Patrons->columns(); push( @columnkeys, 'patron_attributes' ) if $extended; + push( @columnkeys, qw( guarantor_relationship guarantor_id ) ); return @columnkeys; } diff --git a/tools/import_borrowers.pl b/tools/import_borrowers.pl index b3ead07fc7..a0c4bfbc01 100755 --- a/tools/import_borrowers.pl +++ b/tools/import_borrowers.pl @@ -62,7 +62,7 @@ my $extended = C4::Context->preference('ExtendedPatronAttributes'); my @columnkeys = map { $_ ne 'borrowernumber' ? $_ : () } Koha::Patrons->columns(); push( @columnkeys, 'patron_attributes' ) if $extended; -push( @columnkeys, qw( relationship guarantor_id guarantor_firstname guarantor_surname ) ); +push( @columnkeys, qw( guarantor_relationship guarantor_id ) ); my $input = CGI->new(); @@ -123,9 +123,9 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) { file => $handle, defaults => \%defaults, matchpoint => $matchpoint, - overwrite_cardnumber => $input->param('overwrite_cardnumber'), + overwrite_cardnumber => scalar $input->param('overwrite_cardnumber'), overwrite_passwords => $overwrite_passwords, - preserve_extended_attributes => $input->param('ext_preserve') || 0, + preserve_extended_attributes => scalar $input->param('ext_preserve') || 0, } ); -- 2.39.5