(bug #3695) allow to limit overdues by categorycode

This add two new options to overdue_notices.pl to select only overdues for few categorycodes, or to exclude few categorycodes.

Conflicts solved misc/cronjobs/overdue_notices.pl
This commit is contained in:
Henri-Damien LAURENT 2009-10-07 11:49:01 +02:00
parent bfffa5361b
commit 213b78174b

View file

@ -53,6 +53,8 @@ overdue_notices.pl [ -n ] [ -library <branchcode> ] [ -library <branchcode>...]
-library <branchname> only deal with overdues from this library (repeatable : several libraries can be given)
-csv <filename> populate CSV file
-itemscontent <list of fields> item information in templates
-borcat <categorycode> category code that must be included
-borcatout <categorycode> category code that must be excluded
=head1 OPTIONS
@ -105,6 +107,14 @@ defaults to issuedate,title,barcode,author
Other possible values come from fields in the biblios, items, and
issues tables.
=item B<-borcat>
Repetable field, that permit to select only few of patrons categories.
=item B<-borcatout>
Repetable field, permis to exclude some patrons categories.
=item B<-t> | B<--triggered>
This option causes a notice to be generated if and only if
@ -224,6 +234,7 @@ alert them of items that have just become due.
# These variables are set by command line options.
# They are initially set to default values.
my $dbh = C4::Context->dbh();
my $help = 0;
my $man = 0;
my $verbose = 0;
@ -234,6 +245,8 @@ my $csvfilename;
my $triggered = 0;
my $listall = 0;
my $itemscontent = join( ',', qw( issuedate title barcode author ) );
my @myborcat;
my @myborcatout;
GetOptions(
'help|?' => \$help,
@ -246,6 +259,8 @@ GetOptions(
'itemscontent=s' => \$itemscontent,
'list-all' => \$listall,
't|triggered' => \$triggered,
'borcat=s' => \@myborcat,
'borcatout=s' => \@myborcatout,
) or pod2usage(2);
pod2usage(1) if $help;
pod2usage( -verbose => 2 ) if $man;
@ -293,7 +308,6 @@ if (@branchcodes) {
# these are the fields that will be substituted into <<item.content>>
my @item_content_fields = split( /,/, $itemscontent );
my $dbh = C4::Context->dbh();
binmode( STDOUT, ":utf8" );
our $csv; # the Text::CSV_XS object
@ -330,8 +344,23 @@ SELECT biblio.*, items.*, issues.*, TO_DAYS(NOW())-TO_DAYS(date_due) AS days_ove
AND TO_DAYS(NOW())-TO_DAYS(date_due) BETWEEN ? and ?
END_SQL
my $rqoverduerules = $dbh->prepare("SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = ? ");
$rqoverduerules->execute($branchcode);
my $query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = ? ";
$query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat);
$query .= " AND categorycode NOT IN (".join( ',' , ('?') x @myborcatout ).") " if (@myborcatout);
my $rqoverduerules = $dbh->prepare($query);
$rqoverduerules->execute($branchcode, @myborcat, @myborcatout);
# We get default rules is there is no rule for this branch
if($rqoverduerules->rows == 0){
$query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = '' ";
$query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat);
$query .= " AND categorycode NOT IN (".join( ',' , ('?') x @myborcatout ).") " if (@myborcatout);
$rqoverduerules = $dbh->prepare($query);
$rqoverduerules->execute(@myborcat, @myborcatout);
}
# my $outfile = 'overdues_' . ( $mybranch || $branchcode || 'default' );
while ( my $overdue_rules = $rqoverduerules->fetchrow_hashref ) {
PERIOD: foreach my $i ( 1 .. 3 ) {