From f0c259b52d341afd12862640f9a37b48693d32e4 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Thu, 29 Nov 2018 02:07:18 +0000 Subject: [PATCH] Bug 15422: Correct calculation of holds ratio report See comment 1 for a detailed explanation of current calculations and needed calculations Also removes an unnecessary variable To test: 1 - Place 4 holds on a biblio with one item 2 - go to /cgi-bin/koha/circ/reserveratios.pl (Circulation->Holds ratios) 3 - Run with 'Hold ratio'=3, it says order 1, ok 4 - Run with HR=4, it says order 1, wrong 5 - Run with HR=2, it syas order 2, wrong 6 - Run with HR=.5, it syas order 4, wrong 7 - Apply patch 8 - Run with HR=3, order 1, OK 9 - Run with HR=4, item does not appear (0 to order), OK 10 - Run with HR=2, order 1, OK 11 - Run with HR=.5, order 7, OK --- circ/reserveratios.pl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/circ/reserveratios.pl b/circ/reserveratios.pl index 104928a..dc04b33 100755 --- a/circ/reserveratios.pl +++ b/circ/reserveratios.pl @@ -148,12 +148,11 @@ $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 $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 $ratiocalc = $data->{reservecount}/$ratio - $data->{itemcount}; + $ratiocalc >= 1 or next; # TODO: tighter targeting -- get ratio limit into SQL using HAVING clause my $record = GetMarcBiblio({ biblionumber => $data->{biblionumber} }); $data->{subtitle} = GetRecordValue('subtitle', $record, GetFrameworkCode($data->{biblionumber})); push( @@ -176,7 +175,7 @@ while ( my $data = $sth->fetchrow_hashref ) { itype => [split('\|', $data->{l_itype})], reservecount => $data->{reservecount}, itemcount => $data->{itemcount}, - ratiocalc => sprintf( "%.0d", $ratio_atleast1 ? ( $thisratio / $ratio ) : $thisratio ), + ratiocalc => sprintf( "%.0d", $ratiocalc ), thisratio => sprintf( "%.2f", $thisratio ), thisratio_atleast1 => ( $thisratio >= 1 ) ? 1 : 0, listcall => [split('\|', $data->{listcall})] @@ -190,7 +189,6 @@ for my $rd ( @reservedata ) { } $template->param( - ratio_atleast1 => $ratio_atleast1, todaysdate => $todaysdate, from => $startdate, to => $enddate, -- 2.1.4