@@ -, +, @@ than warning states it will delete - prepare test database with some patron records (at least 2, - confirm issues 1,2 - restore test database - apply patch - ensure issues 1 & 2 are no longer present - first by using new "test - redo the tests, this time choosing "delete permanently" and "move - test #3 by changing "Category type" to "S" in some --- .../prog/en/modules/tools/cleanborrowers.tt | 27 ++++++++++------ tools/cleanborrowers.pl | 33 +++++++++++--------- 2 files changed, 36 insertions(+), 24 deletions(-) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cleanborrowers.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cleanborrowers.tt @@ -76,7 +76,7 @@ - +
- + +
+ [% END %] @@ -148,15 +151,19 @@
- - [% IF ( do_delete ) %] - [% IF ( trash ) %] -

[% TotalDel %] patrons have been successfully moved to trash

+ [% IF ( testrun ) %] +

[% TotalDel %] patrons would have been removed (if it wasn't a test run)

+

No patron records have been actually removed

+ [% ELSE %] + [% IF ( do_delete ) %] + [% IF ( trash ) %] +

[% TotalDel %] patrons have been successfully moved to trash

+ [% ELSE %] +

[% TotalDel %] patrons have been successfully deleted

+ [% END %] [% ELSE %] -

[% TotalDel %] patrons have been successfully deleted

+

No patron records have been removed

[% END %] - [% ELSE %] -

No patron records have been removed

[% END %] [% IF ( do_anonym ) %]

All patrons with checkouts older than [% filterdate1 %] have been anonymized

--- a/tools/cleanborrowers.pl +++ a/tools/cleanborrowers.pl @@ -79,6 +79,7 @@ if ( $params->{'step2'} ) { if ( $checkboxes{borrower} ) { $membersToDelete = GetBorrowersToExpunge( { not_borrowered_since => $filterdate1, expired_before => $borrower_dateexpiry, category_code => $borrower_categorycode } ); + _skip_borrowers_with_nonzero_balance( $membersToDelete ); $totalDel = scalar @$membersToDelete; } @@ -97,7 +98,7 @@ if ( $params->{'step2'} ) { memberstoanonymize_list => $membersToAnonymize, filterdate1 => format_date($filterdate1), filterdate2 => format_date($filterdate2), - borrower_dateexpiry => $borrower_dateexpiry, + borrower_dateexpiry => format_date($borrower_dateexpiry), borrower_categorycode => $borrower_categorycode, ); @@ -121,21 +122,15 @@ if ( $params->{'step3'} ) { if ($do_delete) { my $membersToDelete = GetBorrowersToExpunge( { not_borrowered_since => $filterdate1, expired_before => $borrower_dateexpiry, category_code => $borrower_categorycode } ); + _skip_borrowers_with_nonzero_balance( $membersToDelete ); $totalDel = scalar(@$membersToDelete); $radio = $params->{'radio'}; - if ( $radio eq 'trash' ) { - my $i; - for ( $i = 0 ; $i < $totalDel ; $i++ ) { - MoveMemberToDeleted( $membersToDelete->[$i]->{'borrowernumber'} ); - C4::VirtualShelves::HandleDelBorrower( $membersToDelete->[$i]->{'borrowernumber'} ); - DelMember( $membersToDelete->[$i]->{'borrowernumber'} ); - } - } else { # delete completly. - my $i; - for ( $i = 0 ; $i < $totalDel ; $i++ ) { - C4::VirtualShelves::HandleDelBorrower( $membersToDelete->[$i]->{'borrowernumber'} ); - DelMember( $membersToDelete->[$i]->{'borrowernumber'} ); - } + for ( my $i = 0 ; $i < $totalDel ; $i++ ) { + $radio eq 'testrun' && last; + my $borrowernumber = $membersToDelete->[$i]->{'borrowernumber'}; + $radio eq 'trash' && MoveMemberToDeleted( $borrowernumber ); + C4::VirtualShelves::HandleDelBorrower( $borrowernumber ); + DelMember( $borrowernumber ); } $template->param( do_delete => '1', @@ -156,6 +151,7 @@ if ( $params->{'step3'} ) { $template->param( step3 => '1', trash => ( $radio eq "trash" ) ? (1) : (0), + testrun => ( $radio eq "testrun" ) ? 1: 0, ); #writing the template @@ -172,3 +168,12 @@ $template->param( #writing the template output_html_with_http_headers $cgi, $cookie, $template->output; + +sub _skip_borrowers_with_nonzero_balance { + my $borrowers = shift; + my $balance; + @$borrowers = map { + (undef, undef, $balance) = GetMemberIssuesAndFines( $_->{borrowernumber} ); + ($balance != 0) ? (): ($_); + } @$borrowers; +} --