@@ -, +, @@ deletion tool --- .../prog/en/modules/patron_lists/lists.tt | 22 +++++- .../prog/en/modules/tools/cleanborrowers.tt | 30 ++++++--- tools/cleanborrowers.pl | 78 ++++++++++++++-------- 3 files changed, 95 insertions(+), 35 deletions(-) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/patron_lists/lists.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/patron_lists/lists.tt @@ -47,6 +47,12 @@       + [% IF CAN_user_tools_edit_patrons %] +   + [% END %] + [% IF CAN_user_tools_delete_anonymize_patrons %] +   + [% END %] @@ -57,7 +63,7 @@ [% l.patron_list_patrons_rs.count || 0 %] - Add patrons + Add patrons @@ -75,6 +81,20 @@ Print patron cards + [% IF CAN_user_tools_edit_patrons %] + + + Edit patrons + + + [% END %] + [% IF CAN_user_tools_delete_anonymize_patrons %] + + + Delete patrons + + + [% END %] [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cleanborrowers.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cleanborrowers.tt @@ -12,7 +12,7 @@ */ function checkForm(form) { if((form.checkbox[0].checked)){ - if ( (!form.date1.value) && (!form.borrower_dateexpiry.value) && (!form.borrower_categorycode.value) ){ + if ( (!form.date1.value) && (!form.borrower_dateexpiry.value) && (!form.borrower_categorycode.value) && (!form.patron_list_id.value)){ alert(_("Please enter at least one criterion for deletion!")); return false; } @@ -88,8 +88,21 @@ [% END %] + [% IF patron_lists %] +
  • + + + If using a patron list, no other criteria will be used. +
  • + [% END %] +
    Anonymize checkout history [% UNLESS Koha.Preference('AnonymousPatron') %] @@ -121,12 +134,12 @@
    Warnings
    - [% IF ( totalToDelete ) %] + [% IF patrons_to_delete.size %]
    What do you want to do for deleted patrons? @@ -136,12 +149,12 @@
    -
    +
    [% END %] - [% IF ( totalToAnonymize ) %] - Checkout history for [% totalToAnonymize %] patrons will be anonymized - + [% IF patrons_to_anonymize.size %] + Checkout history for [% patrons_to_anonymize.size %] patrons will be anonymized + [% END %] @@ -149,6 +162,7 @@ + Cancel
    --- a/tools/cleanborrowers.pl +++ a/tools/cleanborrowers.pl @@ -40,7 +40,9 @@ use C4::Output; use C4::Members; # GetBorrowersWhoHavexxxBorrowed. use C4::Circulation; # AnonymiseIssueHistory. use Koha::DateUtils qw( dt_from_string output_pref ); +use Koha::Database; use Date::Calc qw/Today Add_Delta_YM/; +use Koha::List::Patron; my $cgi = new CGI; @@ -63,6 +65,7 @@ my $borrower_dateexpiry = $params->{borrower_dateexpiry} ? dt_from_string $params->{borrower_dateexpiry} : undef; +my $patron_list_id = $params->{patron_list_id}; my $borrower_categorycode = $params->{'borrower_categorycode'} || q{}; @@ -80,28 +83,35 @@ if ( $step == 2 ) { my %checkboxes = map { $_ => 1 } split /\0/, $params->{'checkbox'}; - my $totalDel; - my $membersToDelete; - if ( $checkboxes{borrower} ) { - $membersToDelete = GetBorrowersToExpunge( - _get_selection_params($not_borrowered_since, $borrower_dateexpiry, $borrower_categorycode) - ); - _skip_borrowers_with_nonzero_balance( $membersToDelete ); - $totalDel = scalar @$membersToDelete; - + my $patrons_to_delete; + if ($patron_list_id) { + my @patron_list_patrons = + Koha::Database->new()->schema()->resultset('PatronListPatron') + ->search( { patron_list_id => $patron_list_id } ); + $patrons_to_delete = \@patron_list_patrons; } - my $totalAno; - my $membersToAnonymize; + else { + if ( $checkboxes{borrower} ) { + $patrons_to_delete = GetBorrowersToExpunge( + _get_selection_params( + $not_borrowered_since, + $borrower_dateexpiry, + $borrower_categorycode, + ) + ); + } + } + _skip_borrowers_with_nonzero_balance_or_issues($patrons_to_delete); + + my $members_to_anonymize; if ( $checkboxes{issue} ) { - $membersToAnonymize = GetBorrowersWithIssuesHistoryOlderThan($last_issue_date); - $totalAno = scalar @$membersToAnonymize; + $members_to_anonymize = GetBorrowersWithIssuesHistoryOlderThan($last_issue_date); } $template->param( - totalToDelete => $totalDel, - totalToAnonymize => $totalAno, - memberstodelete_list => $membersToDelete, - memberstoanonymize_list => $membersToAnonymize, + patrons_to_delete => $patrons_to_delete, + patrons_to_anonymize => $members_to_anonymize, + patron_list_id => $patron_list_id, ); } @@ -113,18 +123,32 @@ elsif ( $step == 3 ) { # delete members if ($do_delete) { - my $membersToDelete = GetBorrowersToExpunge( - _get_selection_params($not_borrowered_since, $borrower_dateexpiry, $borrower_categorycode) - ); - _skip_borrowers_with_nonzero_balance( $membersToDelete ); - $totalDel = scalar(@$membersToDelete); + my $patrons_to_delete; + if ($patron_list_id) { + my @patron_list_patrons = + Koha::Database->new()->schema()->resultset('PatronListPatron') + ->search( { patron_list_id => $patron_list_id } ); + $patrons_to_delete = \@patron_list_patrons; + } + else { + $patrons_to_delete = GetBorrowersToExpunge( + _get_selection_params( + $not_borrowered_since, $borrower_dateexpiry, + $borrower_categorycode + ) + ); + } + _skip_borrowers_with_nonzero_balance_or_issues($patrons_to_delete); + + $totalDel = scalar(@$patrons_to_delete); $radio = $params->{'radio'}; for ( my $i = 0 ; $i < $totalDel ; $i++ ) { $radio eq 'testrun' && last; - my $borrowernumber = $membersToDelete->[$i]->{'borrowernumber'}; - $radio eq 'trash' && MoveMemberToDeleted( $borrowernumber ); - C4::Members::HandleDelBorrower( $borrowernumber ); - DelMember( $borrowernumber ); + my $borrowernumber = $patrons_to_delete->[$i]->{'borrowernumber'} + || $patrons_to_delete->[$i]->get_column('borrowernumber'); + $radio eq 'trash' && MoveMemberToDeleted($borrowernumber); + C4::Members::HandleDelBorrower($borrowernumber); + DelMember($borrowernumber); } $template->param( do_delete => '1', @@ -145,6 +169,8 @@ elsif ( $step == 3 ) { trash => ( $radio eq "trash" ) ? (1) : (0), testrun => ( $radio eq "testrun" ) ? 1: 0, ); +} else { # $step == 1 + $template->param( patron_lists => [ GetPatronLists() ] ); } $template->param( --