X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Freserveratios.pl;h=55eb01825a389d707051ab0ea70d4becdedaf2ae;hb=c8ad1e6928ed424ae127bfac870d00fae7ea180a;hp=5d6a2a2931da84c8199a594294b09766b3847f2c;hpb=c15e1206fdda1fa2fd366c5f38d23b0014ba4022;p=koha_fer diff --git a/circ/reserveratios.pl b/circ/reserveratios.pl index 5d6a2a2931..55eb01825a 100755 --- a/circ/reserveratios.pl +++ b/circ/reserveratios.pl @@ -14,26 +14,27 @@ # 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/; 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 $startdate = $input->param('from'); +my $enddate = $input->param('to'); +my $ratio = $input->param('ratio'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -46,19 +47,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,26 +54,24 @@ 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)) { $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) { @@ -97,23 +83,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, @@ -139,25 +108,30 @@ 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); $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 + my $record = GetMarcBiblio($data->{biblionumber}); + $data->{subtitle} = GetRecordValue('subtitle', $record, GetFrameworkCode($data->{biblionumber})); push( @reservedata, { @@ -165,36 +139,34 @@ while ( my $data = $sth->fetchrow_hashref ) { priority => $data->{priority}, name => $data->{borrower}, title => $data->{title}, + subtitle => $data->{subtitle}, 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(), ); output_html_with_http_headers $input, $cookie, $template->output;