X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Freserveratios.pl;h=216fb0b638bb3ab66191a38149bc58474ab2456c;hb=5d6c092921919526ade501facb1220f8a108a08f;hp=f44966cef7eed5e6342c3c201668a8b7abec5d84;hpb=10816a8b336f9a84830e14d426fe9d3830891b0e;p=koha_fer diff --git a/circ/reserveratios.pl b/circ/reserveratios.pl index f44966cef7..216fb0b638 100755 --- a/circ/reserveratios.pl +++ b/circ/reserveratios.pl @@ -14,23 +14,25 @@ # 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., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# 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. use strict; use warnings; +use CGI; +use Date::Calc qw/Today Add_Delta_YM/; + use C4::Context; use C4::Output; -use CGI; use C4::Auth; use C4::Dates qw/format_date format_date_in_iso/; use C4::Debug; -use Date::Calc qw/Today Add_Delta_YM/; +use C4::Biblio qw/GetMarcBiblio GetRecordValue GetFrameworkCode/; +use C4::Acquisition qw/GetOrdersByBiblionumber/; my $input = new CGI; -my $order = $input->param('order') || ''; my $startdate = $input->param('from'); my $enddate = $input->param('to'); my $ratio = $input->param('ratio'); @@ -46,6 +48,12 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +my $booksellerid = $input->param('booksellerid') // ''; +my $basketno = $input->param('basketno') // ''; +if ($booksellerid && $basketno) { + $template->param( booksellerid => $booksellerid, basketno => $basketno ); +} + my ( $year, $month, $day ) = Today(); my $todaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", $year, $month, $day); # Find yesterday for the default shelf pull start and end dates @@ -60,15 +68,17 @@ if (!defined($startdate) or $startdate !~ s/^\s*(\S+)\s*$/$1/) { # strip space if (!defined($enddate) or $enddate !~ s/^\s*(\S+)\s*$/$1/) { # strip spaces, remove Taint $enddate = format_date($todaysdate); } -if (!defined($ratio) or $ratio !~ s/^\s*(0?\.?\d+)(\.0*)?\s*$/$1/) { # strip spaces, remove Taint +if (!defined($ratio)) { $ratio = 3; } -if ($ratio == 0) { +# Force to be a number +$ratio += 0; +if ($ratio <= 0) { $ratio = 1; # prevent division by zero } my $dbh = C4::Context->dbh; -my ($sqlorderby, $sqldatewhere) = ("",""); +my $sqldatewhere = ""; $debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate); my @query_params = (); if ($startdate) { @@ -80,23 +90,6 @@ if ($enddate) { push @query_params, format_date_in_iso($enddate); } -if ($order eq "biblio") { - $sqlorderby = " ORDER BY biblio.title, holdingbranch, listcall, l_location "; -} elsif ($order eq "callnumber") { - $sqlorderby = " ORDER BY listcall, holdingbranch, l_location "; -} elsif ($order eq "itemcount") { - $sqlorderby = " ORDER BY itemcount, reservecount "; -} elsif ($order eq "itype") { - $sqlorderby = " ORDER BY l_itype, holdingbranch, listcall "; -} elsif ($order eq "location") { - $sqlorderby = " ORDER BY l_location, holdingbranch, listcall "; -} elsif ($order eq "reservecount") { - $sqlorderby = " ORDER BY reservecount DESC "; -} elsif ($order eq "branch") { - $sqlorderby = " ORDER BY holdingbranch, l_location, listcall "; -} else { - $sqlorderby = " ORDER BY reservecount DESC "; -} my $strsth = "SELECT reservedate, reserves.borrowernumber as borrowernumber, @@ -113,7 +106,7 @@ my $strsth = ORDER BY items.itemnumber SEPARATOR '
') as l_location, GROUP_CONCAT(DISTINCT items.itype ORDER BY items.itemnumber SEPARATOR '
') as l_itype, - notes, + reserves.found, biblio.title, biblio.author, @@ -122,17 +115,17 @@ my $strsth = FROM reserves LEFT JOIN items ON items.biblionumber=reserves.biblionumber LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber - WHERE -notforloan = 0 AND damaged = 0 AND itemlost = 0 AND wthdrawn = 0 + WHERE + notforloan = 0 AND damaged = 0 AND itemlost = 0 AND withdrawn = 0 $sqldatewhere "; -if (C4::Context->preference('IndependantBranches')){ - $strsth .= " AND items.holdingbranch=? "; +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 reservecount DESC"; $template->param(sql => $strsth); my $sth = $dbh->prepare($strsth); @@ -144,6 +137,8 @@ while ( my $data = $sth->fetchrow_hashref ) { my $thisratio = $data->{reservecount} / $data->{itemcount}; my $ratiocalc = ($thisratio / $ratio); ($thisratio / $ratio) >= 1 or next; # TODO: tighter targeting -- get ratio limit into SQL using HAVING clause + my $record = GetMarcBiblio($data->{biblionumber}); + $data->{subtitle} = GetRecordValue('subtitle', $record, GetFrameworkCode($data->{biblionumber})); push( @reservedata, { @@ -151,8 +146,8 @@ while ( my $data = $sth->fetchrow_hashref ) { priority => $data->{priority}, name => $data->{borrower}, title => $data->{title}, + subtitle => $data->{subtitle}, author => $data->{author}, - notes => $data->{notes}, itemnum => $data->{itemnumber}, biblionumber => $data->{biblionumber}, holdingbranch => $data->{holdingbranch}, @@ -171,6 +166,11 @@ while ( my $data = $sth->fetchrow_hashref ) { ); } +for my $rd ( @reservedata ) { + next unless $rd->{biblionumber}; + $rd->{pendingorders} = CountPendingOrdersByBiblionumber( $rd->{biblionumber} ); +} + $template->param( ratio_atleast1 => $ratio_atleast1, todaysdate => format_date($todaysdate), @@ -178,7 +178,22 @@ $template->param( to => $enddate, ratio => $ratio, reserveloop => \@reservedata, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), ); output_html_with_http_headers $input, $cookie, $template->output; + +sub CountPendingOrdersByBiblionumber { + my $biblionumber = shift; + my @orders = GetOrdersByBiblionumber( $biblionumber ); + my $cnt = 0; + if (scalar(@orders)) { + for my $order ( @orders ) { + next if $order->{datecancellationprinted}; + my $onum = $order->{quantity} // 0; + my $rnum = $order->{quantityreceived} // 0; + next if $rnum >= $onum; + $cnt += ($onum - $rnum); + } + } + return $cnt; +}