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);
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
=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"`
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>