From 231ed790e4739af49c212568f90a105601035837 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 5 Jun 2013 16:26:31 +0200 Subject: [PATCH] Bug 10419: new cronjob for deleting patrons This patch provides a cronjob script for deleting patrons. It takes 3 options: --not_borrowed_since --expired_date --category_code See the perldoc misc/cronjobs/delete_patrons.pl. Use the -v flag for a verbose mode. Signed-off-by: Kyle M Hall Signed-off-by: Chris Cormack Signed-off-by: Galen Charlton Signed-off-by: Katrin Fischer Passes all tests and QA script. Signed-off-by: Galen Charlton --- misc/cronjobs/delete_patrons.pl | 123 ++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 misc/cronjobs/delete_patrons.pl diff --git a/misc/cronjobs/delete_patrons.pl b/misc/cronjobs/delete_patrons.pl new file mode 100644 index 0000000000..ad3c875339 --- /dev/null +++ b/misc/cronjobs/delete_patrons.pl @@ -0,0 +1,123 @@ +#!/usr/bin/perl + +use Modern::Perl; + +use Pod::Usage; +use Getopt::Long; + +use C4::Members; +use Koha::DateUtils; + +my ( $help, $verbose, $not_borrowered_since, $expired_before, $category_code, + $dryrun ); +GetOptions( + 'h|help' => \$help, + 'v|verbose' => \$verbose, + 'not_borrowered_since:s' => \$not_borrowered_since, + 'expired_before:s' => \$expired_before, + 'category_code:s' => \$category_code, + 'dry-run' => \$dryrun, +) || pod2usage(1); + +if ($help) { + pod2usage(1); +} + +$not_borrowered_since = dt_from_string( $not_borrowered_since, 'iso' ) + if $not_borrowered_since; + +$expired_before = dt_from_string( $expired_before, 'iso' ) + if $expired_before; + +unless ( $not_borrowered_since or $expired_before or $category_code ) { + pod2usage(q{At least one filter is mandatory}); + exit; +} + +my $members = GetBorrowersToExpunge( + { + not_borrowered_since => $not_borrowered_since, + expired_before => $expired_before, + category_code => $category_code, + } +); + +say "I found " . scalar(@$members) . " patrons to delete"; +for my $member (@$members) { + print "Trying to delete patron " . $member->{borrowernumber} . "... "; + eval { + C4::Members::MoveMemberToDeleted( $member->{borrowernumber} ) + unless $dryrun; + }; + if ($@) { + say "Failed, I cannot move this patron ($@)"; + next; + } + eval { C4::Members::DelMember( $member->{borrowernumber} ) unless $dryrun; }; + if ($@) { + say "Failed, I cannot delete this patron ($@)"; + next; + } + say "OK"; +} + +=head1 NAME + +delete_patrons - This script deletes patrons + +=head1 SYNOPSIS + +delete_patrons.pl [-h -v] --not_borrowered_since=`date -d '-3 month' "+%Y-%m-%d"` --expired_before=`date -d '-3 month' "+%Y-%m-%d"` --category_code=CAT + +Options are cumulatives. + +=head1 OPTIONS + +=over + +=item B<-h|--help> + +Print a brief help message + +=item B<--not_borrowered_since> + +Delete patrons who have not borrowered since this date. + +=item B<--expired_date> + +Delete patrons with an account expired before this date. + +=item B<--category_code> + +Delete patrons who have this category code. + +=item B<--dry-run> + +Dry run mode. To use with the verbose mode. + +=item B<-v|--verbose> + +Verbose mode. + +=back + +=head1 AUTHOR + +Jonathan Druart + +=head1 COPYRIGHT + +Copyright 2013 BibLibre + +=head1 LICENSE + +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. + +You should have received a copy of the GNU General Public License along +with Koha; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +=cut