Bugzilla – Attachment 45296 Details for
Bug 14292
Add --category and --skip-category options to longoverdue.pl to include or exclude borrower categories.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 14292: [Alternate for 3.18] Add patron category restrictions to longoverdue.pl
Bug-14292-Alternate-for-318-Add-patron-category-re.patch (text/plain), 12.22 KB, created by
Barton Chittenden
on 2015-12-01 21:41:46 UTC
(
hide
)
Description:
Bug 14292: [Alternate for 3.18] Add patron category restrictions to longoverdue.pl
Filename:
MIME Type:
Creator:
Barton Chittenden
Created:
2015-12-01 21:41:46 UTC
Size:
12.22 KB
patch
obsolete
>From 2cfd1fb903b40b45bf7b8c6c0c3c0a740b432d74 Mon Sep 17 00:00:00 2001 >From: Barton Chittenden <barton@bywatersolutins.com> >Date: Mon, 31 Aug 2015 08:42:32 -0700 >Subject: [PATCH] Bug 14292: [Alternate for 3.18] Add patron category > restrictions to longoverdue.pl > >This is the same patch set, rebased on 3.18.x > >Add command line options --category and --skip-category > >Convert usage() to pod2usage. (This was previous FIXME) > >Make borrower category handling more user friendly: > > Make --category and --skip-category mutally exclusive > > Check that categories specified by --category > and --skip-category exist in categories table. > > Add --list-categories opttion to show available > borrower categories. > >http://bugs.koha-community.org/show_bug.cgi?id=14292 > >QA Follow-up > >QA fixes - wording and trailing whitespaces > >Simplify the category list > >Basically we have 3 lists of categories: >1/ The full one, in the DB >2/ The one we want and list with --category >3/ The one we don't want and list with --skip-category > >The list of categories to process is: > * 1 if none --category or --skip-category options are provided > * 2 if --category is provided > * 1 - 3 if --skip-category is provided > >(follow-up) Make --category and --skip-category case insensitive > >"my" variable $borrower_category masks earlier declaration in same scope >"my" variable $skip_borrower_category masks earlier declaration in same scope > >Signed-off-by: hbraum@nekls.org > >Signed-off-by: Barton Chittenden <barton@bywatersolutions.com> > >Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >--- > misc/cronjobs/longoverdue.pl | 211 +++++++++++++++++++++++++++++++++--------- > 1 file changed, 169 insertions(+), 42 deletions(-) > >diff --git a/misc/cronjobs/longoverdue.pl b/misc/cronjobs/longoverdue.pl >index b60ed23..909bf78 100755 >--- a/misc/cronjobs/longoverdue.pl >+++ b/misc/cronjobs/longoverdue.pl >@@ -37,64 +37,161 @@ use C4::Context; > use C4::Items; > use C4::Circulation qw/LostItem/; > use Getopt::Long; >+use Pod::Usage; >+use Koha::Borrowers; > > my $lost; # key=lost value, value=num days. > my ($charge, $verbose, $confirm, $quiet); > my $endrange = 366; > my $mark_returned = 0; >+my $borrower_category = []; >+my $skip_borrower_category = []; >+my $help=0; >+my $man=0; >+my $list_categories = 0; > >-GetOptions( >- 'lost=s%' => \$lost, >- 'c|charge=s' => \$charge, >- 'confirm' => \$confirm, >- 'verbose' => \$verbose, >- 'quiet' => \$quiet, >- 'maxdays=s' => \$endrange, >- 'mark-returned' => \$mark_returned, >+GetOptions( >+ 'lost=s%' => \$lost, >+ 'c|charge=s' => \$charge, >+ 'confirm' => \$confirm, >+ 'v|verbose' => \$verbose, >+ 'quiet' => \$quiet, >+ 'maxdays=s' => \$endrange, >+ 'mark-returned' => \$mark_returned, >+ 'h|help' => \$help, >+ 'man|manual' => \$man, >+ 'category=s' => $borrower_category, >+ 'skip-category=s' => $skip_borrower_category, >+ 'list-categories' => \$list_categories, > ); > >-my $usage = << 'ENDUSAGE'; >-longoverdue.pl : This cron script set lost values on overdue items and optionally sets charges the patron's account >-for the item's replacement price. It is designed to be run as a nightly job. The command line options that globally >-define this behavior for this script will likely be moved into Koha's core circulation / issuing rules code in a >-near-term release, so this script is not intended to have a long lifetime. >+if ( $man ) { >+ pod2usage( -verbose => 2 >+ -exitval => 0 >+ ); >+} >+ >+if ( $help ) { >+ pod2usage( -verbose => 1, >+ -exitval => 0 >+ ); >+} >+ >+if ( scalar @$borrower_category && scalar @$skip_borrower_category) { >+ pod2usage( -verbose => 1, >+ -message => "The options --category and --skip-category are mually exclusive.\n" >+ . "Use one or the other.", >+ -exitval => 1 >+ ); >+} >+ >+if ( $list_categories ) { >+ my @categories = sort map { uc $_->[0] } @{ C4::Context->dbh->selectall_arrayref(q|SELECT categorycode FROM categories|) }; >+ print "\nBorrowrer Categories: " . join( " ", @categories ) . "\n\n"; >+ exit 0; >+} >+ >+=head1 SYNOPSIS >+ >+ longoverdue.pl [ --help | -h | --man | --list-categories ] >+ longoverdue.pl --lost | -l DAYS=LOST_CODE [ --charge | -c CHARGE_CODE ] [ --verbose | -v ] [ --quiet ] >+ [ --maxdays MAX_DAYS ] [ --mark-returned ] [ --category BORROWER_CATEGORY ] ... >+ [ --skip-category BORROWER_CATEGORY ] ... >+ [ --commit ] >+ >+ >+WARNING: Flippant use of this script could set all or most of the items in your catalog to Lost and charge your >+ patrons for them! >+ >+WARNING: This script is known to be faulty. It is NOT recommended to use multiple --lost options. >+ See http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=2883 >+ >+=cut >+ >+=head1 OPTIONS > > This script takes the following parameters : > >- --lost | -l This option takes the form of n=lv, >- where n is num days overdue, and lv is the lost value. See warning below. >+=over 8 >+ >+=item B<--lost | -l> >+ >+This option takes the form of n=lv, where n is num days overdue, and lv is the lost value. See warning above. >+ >+=item B<--charge | -c> >+ >+This specifies what lost value triggers Koha to charge the account for the lost item. Replacement costs are not charged if this is not specified. >+ >+=item B<--verbose | -v> >+ >+verbose. >+ >+=item B<--confirm> >+ >+confirm. without this option, the script will report the number of affected items and return without modifying any records. >+ >+=item B<--quiet> >+ >+suppress summary output. >+ >+=item B<--maxdays> >+ >+Specifies the end of the range of overdue days to deal with (defaults to 366). This value is universal to all lost num days overdue passed. > >- --charge | -c This specifies what lost value triggers Koha to charge the account for the >- lost item. Replacement costs are not charged if this is not specified. >+=item B<--mark-returned> > >- --verbose | v verbose. >+When an item is marked lost, remove it from the borrowers issued items. > >- --confirm confirm. without this option, the script will report the number of affected items and >- return without modifying any records. >+=item B<--category> > >- --quiet suppress summary output. >+Act on the listed borrower category code (borrowers.categorycode). >+Exclude all others. This may be specified multiple times to include multiple categories. >+May not be used with B<--skip-category> > >- --maxdays Specifies the end of the range of overdue days to deal with (defaults to 366). This >- value is universal to all lost num days overdue passed. >+=item B<--skip-category> > >- --mark-returned When an item is marked lost, remove it from the borrowers issued items. >+Act on all available borrower category codes, except those listed. >+This may be specified multiple times, to exclude multiple categories. >+May not be used with B<--category> >+ >+=item B<--list-categories> >+ >+List borrower categories available for use by B<--category> or >+B<--skip-category>, and exit. >+ >+=item B<--help | -h> >+ >+Display short help message an exit. >+ >+=item B<--man | --manual > >+ >+Display entire manual and exit. >+ >+=back >+ >+=cut >+ >+=head1 Description >+ >+This cron script set lost values on overdue items and optionally sets charges the patron's account >+for the item's replacement price. It is designed to be run as a nightly job. The command line options that globally >+define this behavior for this script will likely be moved into Koha's core circulation / issuing rules code in a >+near-term release, so this script is not intended to have a long lifetime. >+ >+ >+=cut >+ >+=head1 Examples > >- examples : > $PERL5LIB/misc/cronjobs/longoverdue.pl --lost 30=1 > Would set LOST=1 after 30 days (up to one year), but not charge the account. > This would be suitable for the Koha default LOST authorized value of 1 -> 'Lost'. > > $PERL5LIB/misc/cronjobs/longoverdue.pl --lost 60=2 --charge 2 > Would set LOST=2 after 60 days (up to one year), and charge the account when setting LOST=2. >- This would be suitable for the Koha default LOST authorized value of 2 -> 'Long Overdue' >- >-WARNING: Flippant use of this script could set all or most of the items in your catalog to Lost and charge your >-patrons for them! >- >-WARNING: This script is known to be faulty. It is NOT recommended to use multiple --lost options. >- See http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=2883 >+ This would be suitable for the Koha default LOST authorized value of 2 -> 'Long Overdue' > >-ENDUSAGE >+=cut > > # FIXME: We need three pieces of data to operate: > # ~ lower bound (number of days), >@@ -104,9 +201,7 @@ ENDUSAGE > # FIXME: do checks on --lost ranges to make sure they are exclusive. > # FIXME: do checks on --lost ranges to make sure the authorized values exist. > # FIXME: do checks on --lost ranges to make sure don't go past endrange. >-# FIXME: convert to using pod2usage >-# FIXME: allow --help or -h >-# >+# > if ( ! defined($lost) ) { > my $longoverdue_value = C4::Context->preference('DefaultLongOverdueLostValue'); > my $longoverdue_days = C4::Context->preference('DefaultLongOverdueDays'); >@@ -114,8 +209,10 @@ if ( ! defined($lost) ) { > $lost->{$longoverdue_days} = $longoverdue_value; > } > else { >- print $usage; >- die "ERROR: No --lost (-l) option defined"; >+ pod2usage( { >+ -exitval => 1, >+ -msg => q|ERROR: No --lost (-l) option defined|, >+ } ); > } > } > if ( ! defined($charge) ) { >@@ -151,10 +248,36 @@ sub longoverdue_sth { > return C4::Context->dbh->prepare($query); > } > >-#FIXME - Should add a 'system' user and get suitable userenv for it for logging, etc. >+my $dbh = C4::Context->dbh; >+my @available_categories = map { uc $_->[0] } @{ $dbh->selectall_arrayref(q|SELECT categorycode FROM categories|) }; >+$borrower_category = [ map { uc $_ } @$borrower_category ]; >+$skip_borrower_category = [ map { uc $_} @$skip_borrower_category ]; >+my %category_to_process; >+for my $cat ( @$borrower_category ) { >+ unless ( grep { /^$cat$/ } @available_categories ) { >+ pod2usage( >+ '-exitval' => 1, >+ '-message' => "The category $cat does not exist in the database", >+ ); >+ } >+ $category_to_process{$cat} = 1; >+} >+if ( @$skip_borrower_category ) { >+ for my $cat ( @$skip_borrower_category ) { >+ unless ( grep { /^$cat$/ } @available_categories ) { >+ pod2usage( >+ '-exitval' => 1, >+ '-message' => "The category $cat does not exist in the database", >+ ); >+ } >+ } >+ %category_to_process = map { $_ => 1 } @available_categories; >+ %category_to_process = ( %category_to_process, map { $_ => 0 } @$skip_borrower_category ); >+} >+ >+my $filter_borrower_categories = ( scalar @$borrower_category || scalar @$skip_borrower_category ); > > my $count; >-# my @ranges = map { > my @report; > my $total = 0; > my $i = 0; >@@ -169,12 +292,16 @@ foreach my $startrange (sort keys %$lost) { > my ($date1) = bounds($startrange); > my ($date2) = bounds( $endrange); > # print "\nRange ", ++$i, "\nDue $startrange - $endrange days ago ($date2 to $date1), lost => $lostvalue\n" if($verbose); >- $verbose and >+ $verbose and > printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i, > $startrange, $endrange, $date2, $date1, $lostvalue; > $sth_items->execute($startrange, $endrange, $lostvalue); > $count=0; >- while (my $row=$sth_items->fetchrow_hashref) { >+ ITEM: while (my $row=$sth_items->fetchrow_hashref) { >+ if( $filter_borrower_categories ) { >+ my $category = uc Koha::Borrowers->find( $row->{borrowernumber} )->categorycode(); >+ next ITEM unless ( $category_to_process{ $category } ); >+ } > printf ("Due %s: item %5s from borrower %5s to lost: %s\n", $row->{date_due}, $row->{itemnumber}, $row->{borrowernumber}, $lostvalue) if($verbose); > if($confirm) { > ModItem({ itemlost => $lostvalue }, $row->{'biblionumber'}, $row->{'itemnumber'}); >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 14292
:
42125
|
42614
|
42892
|
43304
|
43305
|
43336
|
43337
|
43439
|
43489
|
43490
|
43491
|
43492
|
43493
|
43494
|
45293
| 45296