X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=circ%2Fpendingreserves.pl;h=932b035c234b812891e54e8154ecb4fe2eb4d09f;hb=5dc392f6638b7723a95007afadb23d2872c3f19f;hp=d723bc25bf157e3341b946abaf4362ab278e94d1;hpb=803095a7989bd1cd4357ebe9736a19284d97b2db;p=koha.git diff --git a/circ/pendingreserves.pl b/circ/pendingreserves.pl index d723bc25bf..932b035c23 100755 --- a/circ/pendingreserves.pl +++ b/circ/pendingreserves.pl @@ -1,22 +1,21 @@ #!/usr/bin/perl - # Copyright 2000-2002 Katipo Communications # # 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. +# 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 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# 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. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # Modification by D.Ulm, actually works (as long as indep. branches not turned on) # Someone let me know what indep. branches is supposed to do and I'll make that part work too @@ -25,26 +24,27 @@ use strict; #use warnings; FIXME - Bug 2505 + +use constant PULL_INTERVAL => 2; + use C4::Context; use C4::Output; -use CGI; +use CGI qw ( -utf8 ); use C4::Auth; -use C4::Dates qw/format_date format_date_in_iso/; use C4::Debug; -use Date::Calc qw/Today Add_Delta_YMD/; +use Koha::DateUtils; +use DateTime::Duration; my $input = new CGI; -my $order = $input->param('order'); my $startdate=$input->param('from'); my $enddate=$input->param('to'); -my $run_report=$input->param('run_report'); -my $report_page=$input->param('report_page'); +my $run_report = ( not defined $input->param('run_report') ) ? 1 : $input->param('run_report'); my $theme = $input->param('theme'); # only used if allowthemeoverride is set my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "circ/pendingreserves.tmpl", + template_name => "circ/pendingreserves.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -53,91 +53,60 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my $duedate; -my $borrowernumber; -my $itemnum; -my $data1; -my $data2; -my $data3; -my $name; -my $phone; -my $email; -my $biblionumber; -my $title; -my $author; - -my ( $year, $month, $day ) = Today(); -my $todaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", $year, $month, $day); -my $yesterdaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YMD($year, $month, $day, 0, 0, -1)); -#changed from delivered range of 10 years-yesterday to 2 days ago-today -# Find two days ago for the default shelf pull start and end dates -my $pastdate = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YMD($year, $month, $day, 0, 0, -2)); - -# Predefine the start and end dates if they are not already defined +my $today = dt_from_string; $startdate =~ s/^\s+//; $startdate =~ s/\s+$//; $enddate =~ s/^\s+//; $enddate =~ s/\s+$//; -# Check if null, should string match, if so set start and end date to yesterday -if (!defined($startdate) or $startdate eq "") { - $startdate = format_date($pastdate); + +if ( $startdate ) { + $startdate = eval{dt_from_string( $startdate )}; } -if (!defined($enddate) or $enddate eq "") { - $enddate = format_date($todaysdate); +unless ( $startdate ){ + # changed from delivered range of 10 years-yesterday to 2 days ago-today + # Find two days ago for the default shelf pull start date, unless HoldsToPullStartDate sys pref is set. + $startdate = $today - DateTime::Duration->new( days => C4::Context->preference('HoldsToPullStartDate') || PULL_INTERVAL ); } +if ( $enddate ) { + $enddate = eval{dt_from_string( $enddate )}; +} +unless ( $enddate ) { + #similarly: calculate end date with ConfirmFutureHolds (days) + $enddate = $today + DateTime::Duration->new( days => C4::Context->preference('ConfirmFutureHolds') || 0 ); +} my @reservedata; -my ($prev_results, $next_results, $next_or_previous) = (0,0,0); if ( $run_report ) { my $dbh = C4::Context->dbh; - my ($sqlorderby, $sqldatewhere, $sqllimitoffset) = ("","",""); - $debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate); + my $sqldatewhere = ""; + my $startdate_iso = output_pref({ dt => $startdate, dateformat => 'iso', dateonly => 1 }); + my $enddate_iso = output_pref({ dt => $enddate, dateformat => 'iso', dateonly => 1 }); + $debug and warn $startdate_iso. "\n" . $enddate_iso; my @query_params = (); - if ($startdate) { + if ($startdate_iso) { $sqldatewhere .= " AND reservedate >= ?"; - push @query_params, format_date_in_iso($startdate); + push @query_params, $startdate_iso; } - if ($enddate) { + if ($enddate_iso) { $sqldatewhere .= " AND reservedate <= ?"; - push @query_params, format_date_in_iso($enddate); - } - - $sqllimitoffset = " LIMIT 251"; - if ($report_page) { - $sqllimitoffset .= " OFFSET=?"; - push @query_params, ($report_page * 250); + push @query_params, $enddate_iso; } - if ($order eq "biblio") { - $sqlorderby = " ORDER BY biblio.title "; - } elsif ($order eq "itype") { - $sqlorderby = " ORDER BY l_itype, location, l_itemcallnumber "; - } elsif ($order eq "location") { - $sqlorderby = " ORDER BY location, l_itemcallnumber, holdingbranch "; - } elsif ($order eq "date") { - $sqlorderby = " ORDER BY l_reservedate, location, l_itemcallnumber "; - } elsif ($order eq "library") { - $sqlorderby = " ORDER BY holdingbranch, l_itemcallnumber, location "; - } elsif ($order eq "call") { - $sqlorderby = " ORDER BY l_itemcallnumber, holdingbranch, location "; - } else { - $sqlorderby = " ORDER BY biblio.title "; - } my $strsth = "SELECT min(reservedate) as l_reservedate, reserves.borrowernumber as borrowernumber, GROUP_CONCAT(DISTINCT items.holdingbranch - ORDER BY items.itemnumber SEPARATOR '
') l_holdingbranch, + ORDER BY items.itemnumber SEPARATOR '|') l_holdingbranch, reserves.biblionumber, reserves.branchcode, GROUP_CONCAT(DISTINCT reserves.branchcode ORDER BY items.itemnumber SEPARATOR ', ') l_branch, items.holdingbranch as branch, GROUP_CONCAT(DISTINCT items.itype - ORDER BY items.itemnumber SEPARATOR '
') l_itype, + ORDER BY items.itemnumber SEPARATOR '|') l_itype, GROUP_CONCAT(DISTINCT items.location - ORDER BY items.itemnumber SEPARATOR '
') l_location, + ORDER BY items.itemnumber SEPARATOR '|') l_location, GROUP_CONCAT(DISTINCT items.itemcallnumber ORDER BY items.itemnumber SEPARATOR '
') l_itemcallnumber, GROUP_CONCAT(DISTINCT items.enumchron @@ -145,7 +114,6 @@ if ( $run_report ) { GROUP_CONCAT(DISTINCT items.copynumber ORDER BY items.itemnumber SEPARATOR '
') l_copynumber, items.itemnumber, - notes, notificationdate, reminderdate, max(priority) as priority, @@ -164,137 +132,68 @@ if ( $run_report ) { $sqldatewhere AND (reserves.itemnumber IS NULL OR reserves.itemnumber = items.itemnumber) AND items.itemnumber NOT IN (SELECT itemnumber FROM branchtransfers where datearrived IS NULL) + AND items.itemnumber NOT IN (select itemnumber FROM reserves where found='W') AND issues.itemnumber IS NULL AND reserves.priority <> 0 - AND notforloan = 0 AND damaged = 0 AND itemlost = 0 AND wthdrawn = 0 + AND reserves.suspend = 0 + AND notforloan = 0 AND damaged = 0 AND itemlost = 0 AND withdrawn = 0 "; # GROUP BY reserves.biblionumber allows only items that are not checked out, else multiples occur when # multiple patrons have a hold on an item - if (C4::Context->preference('IndependantBranches')){ + if (C4::Context->preference('IndependentBranches')){ $strsth .= " AND items.holdingbranch=? "; push @query_params, C4::Context->userenv->{'branch'}; } - $strsth .= " GROUP BY reserves.biblionumber " . $sqlorderby; + $strsth .= " GROUP BY reserves.biblionumber ORDER BY biblio.title "; my $sth = $dbh->prepare($strsth); $sth->execute(@query_params); - my $previous; - my $this; while ( my $data = $sth->fetchrow_hashref ) { - $this=$data->{biblionumber}.":".$data->{borrowernumber}; - my @itemlist; push( @reservedata, { - reservedate => format_date( $data->{l_reservedate} ), - priority => $data->{priority}, - name => $data->{l_patron}, - title => $data->{title}, - author => $data->{author}, - borrowernumber => $data->{borrowernumber}, - itemnum => $data->{itemnumber}, - phone => $data->{phone}, - email => $data->{email}, - biblionumber => $data->{biblionumber}, - statusw => ( $data->{found} eq "W" ), - statusf => ( $data->{found} eq "F" ), - holdingbranch => $data->{l_holdingbranch}, - branch => $data->{l_branch}, - itemcallnumber => $data->{l_itemcallnumber}, - enumchron => $data->{l_enumchron}, - copyno => $data->{l_copynumber}, - notes => $data->{notes}, - notificationdate => $data->{notificationdate}, - reminderdate => $data->{reminderdate}, - count => $data->{icount}, - rcount => $data->{rcount}, - pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount}, - itype => $data->{l_itype}, - location => $data->{l_location} + reservedate => $data->{l_reservedate}, + priority => $data->{priority}, + name => $data->{l_patron}, + title => $data->{title}, + author => $data->{author}, + borrowernumber => $data->{borrowernumber}, + itemnum => $data->{itemnumber}, + phone => $data->{phone}, + email => $data->{email}, + biblionumber => $data->{biblionumber}, + statusw => ( $data->{found} eq "W" ), + statusf => ( $data->{found} eq "F" ), + holdingbranches => [split('\|', $data->{l_holdingbranch})],, + branch => $data->{l_branch}, + itemcallnumber => $data->{l_itemcallnumber}, + enumchron => $data->{l_enumchron}, + copyno => $data->{l_copynumber}, + notificationdate=> $data->{notificationdate}, + reminderdate => $data->{reminderdate}, + count => $data->{icount}, + rcount => $data->{rcount}, + pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount}, + itypes => [split('\|', $data->{l_itype})], + locations => [split('\|', $data->{l_location})], } ); - $previous=$this; } - $sth->finish; - - # Next Page? - if ($report_page > 0) { - $prev_results = $report_page - 1; - } - if ( scalar(@reservedata) > 250 ) { - $next_results = $report_page + 1; - pop(@reservedata); # .. we retrieved 251 results - } - if ($prev_results || $next_results) { - $next_or_previous = 1; - } - - # *** I doubt any of this is needed now with the above fixes *** -d.u. - - #$strsth=~ s/AND reserves.itemnumber is NULL/AND reserves.itemnumber is NOT NULL/; - #$strsth=~ s/LEFT JOIN items ON items.biblionumber=reserves.biblionumber/LEFT JOIN items ON items.biblionumber=reserves.itemnumber/; - #$sth = $dbh->prepare($strsth); - #if (C4::Context->preference('IndependantBranches')){ - # $sth->execute(C4::Context->userenv->{'branch'}); - #} - #else { - # $sth->execute(); - #} - #while ( my $data = $sth->fetchrow_hashref ) { - # $this=$data->{biblionumber}.":".$data->{borrowernumber}; - # my @itemlist; - # push( - # @reservedata, - # { - # reservedate => format_date( $data->{l_reservedate} ), - # priority => $data->{priority}, - # name => $data->{l_patron}, - # title => $data->{title}, - # author => $data->{author}, - # borrowernumber => $data->{borrowernumber}, - # itemnum => $data->{itemnumber}, - # phone => $data->{phone}, - # email => $data->{email}, - # biblionumber => $data->{biblionumber}, - # statusw => ( $data->{found} eq "W" ), - # statusf => ( $data->{found} eq "F" ), - # holdingbranch => $data->{l_holdingbranch}, - # branch => $data->{l_branch}, - # itemcallnumber => $data->{l_itemcallnumber}, - # notes => $data->{notes}, - # notificationdate => $data->{notificationdate}, - # reminderdate => $data->{reminderdate}, - # count => $data->{icount}, - # rcount => $data->{rcount}, - # pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount}, - # itype => $data->{l_itype}, - # location => $data->{l_location}, - # thisitemonly => 1, - # - # } - # ); - # $previous=$this; - #} - #$sth->finish; } $template->param( - todaysdate => format_date($todaysdate), + todaysdate => $today, from => $startdate, - to => $enddate, + to => $enddate, run_report => $run_report, - report_page => $report_page, - prev_results => $prev_results, - next_results => $next_results, - next_or_previous => $next_or_previous, - reserveloop => \@reservedata, + reserveloop => \@reservedata, "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), - dateformat => C4::Context->preference("dateformat"), + HoldsToPullStartDate => C4::Context->preference('HoldsToPullStartDate') || PULL_INTERVAL, + HoldsToPullEndDate => C4::Context->preference('ConfirmFutureHolds') || 0, ); output_html_with_http_headers $input, $cookie, $template->output;