Bug 10419: (follow-up) functional improvements
[koha.git] / misc / cronjobs / delete_patrons.pl
index 526028b..119ac1c 100755 (executable)
@@ -6,17 +6,18 @@ use Pod::Usage;
 use Getopt::Long;
 
 use C4::Members;
+use C4::VirtualShelves;
 use Koha::DateUtils;
 
-my ( $help, $verbose, $not_borrowered_since, $expired_before, $category_code,
+my ( $help, $verbose, $not_borrowed_since, $expired_before, $category_code,
     $branchcode, $confirm );
 GetOptions(
     'h|help'                 => \$help,
     'v|verbose'              => \$verbose,
-    'not_borrowered_since:s' => \$not_borrowered_since,
+    'not_borrowed_since:s'   => \$not_borrowed_since,
     'expired_before:s'       => \$expired_before,
     'category_code:s'        => \$category_code,
-    'branchcode:s'           => \$branchcode,
+    'library:s'              => \$branchcode,
     'c|confirm'              => \$confirm,
 ) || pod2usage(1);
 
@@ -24,48 +25,69 @@ if ($help) {
     pod2usage(1);
 }
 
-$not_borrowered_since = dt_from_string( $not_borrowered_since, 'iso' )
-  if $not_borrowered_since;
+$not_borrowed_since = dt_from_string( $not_borrowed_since, 'iso' )
+  if $not_borrowed_since;
 
 $expired_before = dt_from_string( $expired_before, 'iso' )
   if $expired_before;
 
-unless ( $not_borrowered_since or $expired_before or $category_code or $branchcode ) {
+unless ( $not_borrowed_since or $expired_before or $category_code or $branchcode ) {
     pod2usage(q{At least one filter is mandatory});
     exit;
 }
 
 my $members = GetBorrowersToExpunge(
     {
-        not_borrowered_since => $not_borrowered_since,
+        not_borrowered_since => $not_borrowed_since,
         expired_before       => $expired_before,
         category_code        => $category_code,
         branchcode           => $branchcode,
     }
 );
 
+unless ($confirm) {
+    say "Doing a dry run; no patron records will actually be deleted.";
+    say "Run again with --confirm to delete the records.";
+}
+
 say scalar(@$members) . " patrons to delete";
 
 my $dbh = C4::Context->dbh;
 $dbh->{RaiseError} = 1;
 $dbh->{PrintError} = 0;
 
+@$members = ( { borrowernumber => 19 } );
+
+$dbh->{AutoCommit} = 0; # use transactions to avoid partial deletes
 for my $member (@$members) {
-    print "Trying to delete patron " . $member->{borrowernumber} . "... ";
+    print "Trying to delete patron $member->{borrowernumber}... "
+      if $verbose;
     eval {
         C4::Members::MoveMemberToDeleted( $member->{borrowernumber} )
           if $confirm;
     };
     if ($@) {
-        say "Failed, cannot move this patron ($@)";
+        say "Failed to delete patron $member->{borrowernumber}, cannot move it: ($@)";
+        $dbh->rollback;
+        next;
+    }
+    eval {
+        C4::VirtualShelves::HandleDelBorrower( $member->{borrowernumber} )
+          if $confirm;
+    };
+    if ($@) {
+        say "Failed to delete patron $member->{borrowernumber}, error handling its lists: ($@)";
+        $dbh->rollback;
         next;
     }
     eval { C4::Members::DelMember( $member->{borrowernumber} ) if $confirm; };
     if ($@) {
-        say "Failed, cannot delete this patron ($@)";
+        say "Failed to delete patron $member->{borrowernumber}: $@)";
+        $dbh->rollback;
         next;
     }
-    say "OK";
+    $dbh->commit;
+    say "OK" if $verbose;
 }
 
 =head1 NAME
@@ -74,7 +96,7 @@ delete_patrons - This script deletes patrons
 
 =head1 SYNOPSIS
 
-delete_patrons.pl [-h -v -c] --not_borrowered_since=2013-07-21 --expired_before=2013-07-21 --category_code=CAT --branchcode=CPL
+delete_patrons.pl [-h -v -c] --not_borrowed_since=2013-07-21 --expired_before=2013-07-21 --category_code=CAT --branchcode=CPL
 
 dates can be generated with `date -d '-3 month' "+%Y-%m-%d"`
 
@@ -88,9 +110,9 @@ Options are cumulatives.
 
 Print a brief help message
 
-=item B<--not_borrowered_since>
+=item B<--not_borrowed_since>
 
-Delete patrons who have not borrowered since this date.
+Delete patrons who have not borrowed since this date.
 
 =item B<--expired_date>
 
@@ -127,7 +149,7 @@ Copyright 2013 BibLibre
 This file is part of Koha.
 
 Koha is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later version.
+Foundation; either version 3 of the License, or (at your option) any later version.
 
 You should have received a copy of the GNU General Public License along
 with Koha; if not, write to the Free Software Foundation, Inc.,