diff --git a/circ/reserveratios.pl b/circ/reserveratios.pl index 5d6a2a2931..b28dc324ec 100755 --- a/circ/reserveratios.pl +++ b/circ/reserveratios.pl @@ -28,12 +28,10 @@ use C4::Debug; use Date::Calc qw/Today Add_Delta_YM/; my $input = new CGI; -my $order = $input->param('order'); -my $startdate=$input->param('from'); -my $enddate=$input->param('to'); -my $ratio=$input->param('ratio'); - -my $theme = $input->param('theme'); # only used if allowthemeoverride is set +my $order = $input->param('order'); +my $startdate = $input->param('from'); +my $enddate = $input->param('to'); +my $ratio = $input->param('ratio'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -46,19 +44,6 @@ 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); # Find yesterday for the default shelf pull start and end dates @@ -66,18 +51,14 @@ my $todaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", $year, $month, $day); my $datelastyear = sprintf("%-04.4d-%-02.2d-%02.2d", Add_Delta_YM($year, $month, $day, -1, 0)); # Predefine the start and end dates if they are not already defined -$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 "") { +if (!defined($startdate) or $startdate !~ s/^\s*(\S+)\s*$/$1/) { # strip spaces, remove Taint $startdate = format_date($datelastyear); } -if (!defined($enddate) or $enddate eq "") { - $enddate = format_date($todaysdate); +if (!defined($enddate) or $enddate !~ s/^\s*(\S+)\s*$/$1/) { # strip spaces, remove Taint + $enddate = format_date($todaysdate); } -if (!defined($ratio) or $ratio eq "" or $ratio !~ /^\s*\d+\s*$/ ) { +if (!defined($ratio) or $ratio !~ s/^\s*(0?\.?\d+)(\.0*)?\s*$/$1/) { # strip spaces, remove Taint $ratio = 3; } if ($ratio == 0) { @@ -144,20 +125,23 @@ notforloan = 0 AND damaged = 0 AND itemlost = 0 AND wthdrawn = 0 $sqldatewhere "; - if (C4::Context->preference('IndependantBranches')){ $strsth .= " AND items.holdingbranch=? "; push @query_params, C4::Context->userenv->{'branch'}; } $strsth .= " GROUP BY reserves.biblionumber " . $sqlorderby; + +$template->param(sql => $strsth); my $sth = $dbh->prepare($strsth); $sth->execute(@query_params); +my $ratio_atleast1 = ($ratio >= 1) ? 1 : 0; my @reservedata; while ( my $data = $sth->fetchrow_hashref ) { - my @itemlist; - my $ratiocalc = int(10 * $data->{reservecount} / $data->{itemcount} / $ratio )/10; + 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 push( @reservedata, { @@ -166,34 +150,32 @@ while ( my $data = $sth->fetchrow_hashref ) { name => $data->{borrower}, title => $data->{title}, author => $data->{author}, - notes => $data->{notes}, + notes => $data->{notes}, itemnum => $data->{itemnumber}, biblionumber => $data->{biblionumber}, holdingbranch => $data->{holdingbranch}, - listbranch => $data->{listbranch}, + listbranch => $data->{listbranch}, branch => $data->{branch}, itemcallnumber => $data->{itemcallnumber}, - location => $data->{l_location}, - itype => $data->{l_itype}, + location => $data->{l_location}, + itype => $data->{l_itype}, reservecount => $data->{reservecount}, - itemcount => $data->{itemcount}, - ratiocalc => $ratiocalc, - ratio_ge_one => $ratiocalc ge 1.0 ? 1 : "", - listcall => $data->{listcall} + itemcount => $data->{itemcount}, + ratiocalc => sprintf("%.0d", $ratio_atleast1 ? ($thisratio / $ratio) : $thisratio), + thisratio => sprintf("%.2f", $thisratio), + thisratio_atleast1 => ($thisratio >= 1) ? 1 : 0, + listcall => $data->{listcall} } ); } - -$sth->finish; - $template->param( + ratio_atleast1 => $ratio_atleast1, todaysdate => format_date($todaysdate), from => $startdate, to => $enddate, ratio => $ratio, reserveloop => \@reservedata, - "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1, DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/reserveratios.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/reserveratios.tmpl index fb18f9cff4..0eeb7cf9a0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/reserveratios.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/reserveratios.tmpl @@ -9,7 +9,7 @@ - +
-These items have a large number of holds.
+These items have a hold ratio ≥ .
+ +| Items &order=itemcount&from=&to=">Sort | +Hold Ratio | Title &order=biblio&from=&to=">Sort | @@ -73,42 +87,29 @@ $.tablesorter.addParser({||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| - - | -- - | -- - - | - -- | - | - | - | to order |
+ + | + | + | + + | ++ | + | + | + | to order |