All patches to Koha 3 beta to date. All work with branches.

Billing.pl     -- new, gives bills that occur in a range, works
 pendingreserves.pl  -- fixed, works now, with branches also
 reserveratios.pl  -- indicates distressed reserves
 itemslost.pl  -- Fix to this to make it more useful and fix bugs
 Itmes.pm -- small change to work for itemslost, should not affect
             anything else
 and all tmpl files.

Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Darrell Ulm 2008-04-01 12:01:00 -05:00 committed by Joshua Ferraro
parent e5a6500c7c
commit 8cafcef8bf
10 changed files with 1032 additions and 139 deletions

View file

@ -876,14 +876,19 @@ sub GetLostItems {
my $query = "
SELECT *
FROM items
WHERE itemlost IS NOT NULL
AND itemlost <> 0
FROM items, biblio, authorised_values
WHERE
items.biblionumber = biblio.biblionumber
AND items.itemlost = authorised_values.authorised_value
AND authorised_values.category = 'LOST'
AND itemlost IS NOT NULL
AND itemlost <> 0
";
foreach my $key (keys %$where) {
$query .= " AND " . $key . " LIKE '%" . $where->{$key} . "%'";
}
$query .= " ORDER BY ".$orderby if defined $orderby;
$query .= " ORDER BY ".$orderby." " if defined $orderby;
my $sth = $dbh->prepare($query);
$sth->execute;

216
circ/billing.pl Executable file
View file

@ -0,0 +1,216 @@
#!/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 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., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
use strict;
use C4::Context;
use C4::Output;
use CGI;
use C4::Auth;
use C4::Dates qw/format_date format_date_in_iso/;
use vars qw($debug);
BEGIN {
$debug = $ENV{DEBUG} || 0;
}
my $input = new CGI;
my $order = $input->param('order');
my $startdate=$input->param('from');
my $enddate=$input->param('to');
my $max_bill=$input->param('ratio');
my $theme = $input->param('theme'); # only used if allowthemeoverride is set
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "circ/billing.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
flagsrequired => { circulate => 1 },
debug => 1,
}
);
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 @datearr = localtime( time() );
my
$todaysdate =
( 1900 + $datearr[5] ) . '-'
. sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr[3] );
# Find yesterday for the default shelf pull start and end dates
# A defualt of the prior years's holds is a reasonable way to pull holds
my @datearr_yesterday = localtime( time() - 86400*365 );
my $yesterdaysdate =
( 1900 + $datearr_yesterday[5] ) . '-'
. sprintf( "%0.2d", ( $datearr_yesterday[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr_yesterday[3] );
# 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 "") {
$startdate = format_date($yesterdaysdate);
}
if (!defined($enddate) or $enddate eq "") {
$enddate = format_date($todaysdate);
}
if (!defined($max_bill) or $max_bill eq "") {
$max_bill = C4::Context->preference('noissuescharge');
if ($max_bill <= 0) {
$max_bill = 20.00;
}
}
my $dbh = C4::Context->dbh;
my ($sqlorderby, $sqldatewhere, $presqldatewhere) = ("","","");
$debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
# the dates below is to check for compliance of the current date range
#$sqldatewhere .= " AND date >= " . $dbh->quote(format_date_in_iso($startdate)) if ($startdate) ;
$sqldatewhere .= " AND date <= " . $dbh->quote(format_date_in_iso($enddate)) if ($enddate) ;
# the date below is to check for compliance of all fees prior
$presqldatewhere .= " AND date < " . $dbh->quote(format_date_in_iso($startdate)) if ($startdate) ;
if ($order eq "patron") {
$sqlorderby = " order by surname, firstname ";
} elsif ($order eq "fee") {
$sqlorderby = " order by l_amountoutstanding DESC ";
} elsif ($order eq "desc") {
$sqlorderby = " order by l_description ";
} elsif ($order eq "type") {
$sqlorderby = " order by l_accounttype ";
} elsif ($order eq "date") {
$sqlorderby = " order by l_date DESC ";
} elsif ($order eq "total") {
$sqlorderby = " order by sum_amount DESC ";
} else {
$sqlorderby = " order by surname, firstname ";
}
my $strsth =
"SELECT
GROUP_CONCAT(accountlines.accounttype ORDER BY accountlines.date DESC SEPARATOR '<br>') as l_accounttype,
GROUP_CONCAT(description ORDER BY accountlines.date DESC SEPARATOR '<br>') as l_description,
GROUP_CONCAT(round(amountoutstanding,2) ORDER BY accountlines.date DESC SEPARATOR '<br>') as l_amountoutstanding,
GROUP_CONCAT(accountlines.date ORDER BY accountlines.date DESC SEPARATOR '<br>') as l_date,
GROUP_CONCAT(accountlines.itemnumber ORDER BY accountlines.date DESC SEPARATOR '<br>') as l_itemnumber,
count(*) as cnt,
max(accountlines.date) as maxdate,
round(sum(amountoutstanding),2) as sum_amount,
borrowers.borrowernumber as borrowernumber,
borrowers.surname as surname,
borrowers.firstname as firstname,
borrowers.email as email,
borrowers.phone as phone,
accountlines.itemnumber,
description,
accountlines.date as accountdate
FROM
borrowers, accountlines
WHERE
accountlines.borrowernumber = borrowers.borrowernumber
AND accountlines.amountoutstanding <> 0
AND accountlines.borrowernumber
IN (SELECT borrowernumber FROM accountlines
where borrowernumber >= 0
$sqldatewhere
GROUP BY accountlines.borrowernumber HAVING sum(amountoutstanding) >= $max_bill )
AND accountlines.borrowernumber
NOT IN (SELECT borrowernumber FROM accountlines
where borrowernumber >= 0
$presqldatewhere
GROUP BY accountlines.borrowernumber HAVING sum(amountoutstanding) >= $max_bill )
";
if (C4::Context->preference('IndependantBranches')){
$strsth .= " AND borrowers.branchcode=? ";
}
$strsth .= " GROUP BY accountlines.borrowernumber HAVING sum(amountoutstanding) >= $max_bill " . $sqlorderby;
my $sth = $dbh->prepare($strsth);
if (C4::Context->preference('IndependantBranches')){
$sth->execute(C4::Context->userenv->{'branch'});
}
else {
$sth->execute();
}
my @reservedata;
my $previous;
my $this;
while ( my $data = $sth->fetchrow_hashref ) {
my @itemlist;
push(
@reservedata,
{
l_accountype => $data->{l_accounttype},
l_description => $data->{l_description},
l_amountoutstanding => $data->{l_amountoutstanding},
l_date => $data->{l_date},
l_itemnumber => $data->{l_itemnumber},
l_accounttype => $data->{l_accounttype},
l_title => $data->{l_title},
cnt => $data->{cnt},
maxdate => $data->{maxdate},
sum_amount => $data->{sum_amount},
borrowernumber => $data->{borrowernumber},
surname => $data->{surname},
firstname => $data->{firstname},
phone => $data->{phone},
email => $data->{email},
patronname => $data->{surname} . ", " . $data->{firstname} ,
description => $data->{description},
amountoutstanding => $data->{amountoutstanding},
accountdata => $data->{accountdata}
}
);
}
$sth->finish;
$template->param(
todaysdate => format_date($todaysdate),
from => $startdate,
to => $enddate,
ratio => $max_bill,
reserveloop => \@reservedata,
"BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
);
output_html_with_http_headers $input, $cookie, $template->output;

View file

@ -18,6 +18,11 @@
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
# 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
#
# The reserve pull lists *works* as long as not for indepencdant branches, I can fix!
use strict;
use C4::Context;
use C4::Output;
@ -33,18 +38,14 @@ BEGIN {
my $input = new CGI;
my $order = $input->param('order');
my $startdate = $input->param('from');
my $enddate = $input->param('to');
my $theme = $input->param('theme'); # only used if allowthemeoverride is set
my $op = $input->param('op');
my $biblionumber = $input->param('biblionumber');
my $borrowernumber = $input->param('borrowernumber');
my $startdate=$input->param('from');
my $enddate=$input->param('to');
my $tmpl_name = ($op eq 'slip') ? "circ/hold-transfer-slip.tmpl" : "circ/pendingreserves.tmpl" ;
my $theme = $input->param('theme'); # only used if allowthemeoverride is set
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => $tmpl_name,
template_name => "circ/pendingreserves.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
@ -54,6 +55,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
);
my $duedate;
my $borrowernumber;
my $itemnum;
my $data1;
my $data2;
@ -61,70 +63,115 @@ my $data3;
my $name;
my $phone;
my $email;
my $biblionumber;
my $title;
my $author;
warn $op;
warn $biblionumber;
warn $borrowernumber;
my @datearr = localtime( time() );
my $todaysdate =
( 1900 + $datearr[5] ) . '-'
. sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr[3] );
my $dbh = C4::Context->dbh;
my ($sqlorderby, $sqldatewhere, $sqlwhowhere) = ("","","");
$debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
if ($op eq 'slip') {
$sqlwhowhere .= " && reserves.borrowernumber = " . $dbh->quote($borrowernumber) ;
$sqlwhowhere .= " && reserves.biblionumber = " . $dbh->quote($biblionumber) ;
} else {
$sqldatewhere .= " AND reservedate >= " . $dbh->quote(format_date_in_iso($startdate)) if ($startdate) ;
$sqldatewhere .= " AND reservedate <= " . $dbh->quote(format_date_in_iso($enddate)) if ($enddate) ;
# Find yesterday for the default shelf pull end dates
# A defualt of the prior day's holds is a reasonable way to pull holds
my @datearr_yesterday = localtime( time() - 86400 );
my $yesterdaysdate =
( 1900 + $datearr_yesterday[5] ) . '-'
. sprintf( "%0.2d", ( $datearr_yesterday[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr_yesterday[3] );
# Find 10 years ago for the default shelf pull start and end dates
# A defualt of the prior day's holds is a reasonable way to pull holds
my @datearr_past = localtime( time() - 86400*365*10 );
my $pastdate =
( 1900 + $datearr_past[5] ) . '-'
. sprintf( "%0.2d", ( $datearr_past[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr_past[3] );
# 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 "") {
$startdate = format_date($pastdate);
}
if ($order eq "borrower") {
$sqlorderby = " order by borrower, reservedate";
} elsif ($order eq "biblio") {
$sqlorderby = " order by biblio.title, priority,reservedate";
} elsif ($order eq "priority") {
$sqlorderby = "order by priority DESC";
if (!defined($enddate) or $enddate eq "") {
$enddate = format_date($yesterdaysdate);
}
my $dbh = C4::Context->dbh;
my ($sqlorderby, $sqldatewhere) = ("","");
$debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
$sqldatewhere .= " AND reservedate >= " . $dbh->quote(format_date_in_iso($startdate)) if ($startdate) ;
$sqldatewhere .= " AND reservedate <= " . $dbh->quote(format_date_in_iso($enddate)) if ($enddate) ;
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 reservedate, borrower";
$sqlorderby = " order by biblio.title ";
}
my $strsth =
"SELECT reservedate,
"SELECT min(reservedate) as l_reservedate,
reserves.borrowernumber as borrowernumber,
concat(firstname,' ',surname) as borrower,
borrowers.phone,
borrowers.email,
GROUP_CONCAT(DISTINCT items.holdingbranch
ORDER BY items.itemnumber SEPARATOR '<br>') l_holdingbranch,
reserves.biblionumber,
reserves.branchcode as branch,
items.holdingbranch,
reserves.branchcode,
GROUP_CONCAT(DISTINCT reserves.branchcode
ORDER BY items.itemnumber SEPARATOR ', ') l_branch,
items.holdingbranch as branch,
items.itemcallnumber,
GROUP_CONCAT(DISTINCT items.itype
ORDER BY items.itemnumber SEPARATOR '<br>') l_itype,
GROUP_CONCAT(DISTINCT items.location
ORDER BY items.itemnumber SEPARATOR '<br>') l_location,
GROUP_CONCAT(DISTINCT items.itemcallnumber
ORDER BY items.itemnumber SEPARATOR '<br>') l_itemcallnumber,
items.itemnumber,
notes,
notificationdate,
reminderdate,
priority,
max(priority) as priority,
reserves.found,
biblio.title,
biblio.author
biblio.author,
count(DISTINCT items.itemnumber) as icount,
count(DISTINCT reserves.borrowernumber) as rcount
FROM reserves
LEFT JOIN items ON items.biblionumber=reserves.biblionumber
LEFT JOIN borrowers ON reserves.borrowernumber=borrowers.borrowernumber
LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber
WHERE reserves.found is NULL
$sqlwhowhere
LEFT JOIN items ON items.biblionumber=reserves.biblionumber
LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber
LEFT JOIN branchtransfers ON items.itemnumber=branchtransfers.itemnumber
WHERE
reserves.found IS NULL
$sqldatewhere
AND items.itemnumber NOT IN (SELECT itemnumber FROM issues)
AND reserves.itemnumber is NULL";
AND items.itemnumber NOT IN (SELECT itemnumber FROM branchtransfers where datearrived IS NULL)
AND items.itemnumber NOT IN (SELECT itemnumber FROM issues)
AND reserves.priority <> 0
AND reserves.itemnumber is NULL
AND notforloan = 0 AND damaged = 0 AND itemlost = 0 AND wthdrawn = 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')){
$strsth .= " AND items.holdingbranch=? ";
}
$strsth .= $sqlorderby;
warn $strsth;
$strsth .= " GROUP BY reserves.biblionumber " . $sqlorderby;
my $sth = $dbh->prepare($strsth);
if (C4::Context->preference('IndependantBranches')){
@ -142,76 +189,89 @@ while ( my $data = $sth->fetchrow_hashref ) {
push(
@reservedata,
{
reservedate => $previous eq $this?"":format_date( $data->{reservedate} ),
priority => $previous eq $this?"":$data->{priority},
name => $previous eq $this?"":$data->{borrower},
title => $previous eq $this?"":$data->{title},
author => $previous eq $this?"":$data->{author},
borrowernumber => $previous eq $this?"":$data->{borrowernumber},
itemnum => $previous eq $this?"":$data->{itemnumber},
phone => $previous eq $this?"":$data->{phone},
email => $previous eq $this?"":$data->{email},
biblionumber => $previous eq $this?"":$data->{biblionumber},
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->{holdingbranch},
branch => $previous eq $this?"":$data->{branch},
itemcallnumber => $data->{itemcallnumber},
notes => $previous eq $this?"":$data->{notes},
notificationdate => $previous eq $this?"":$data->{notificationdate},
reminderdate => $previous eq $this?"":$data->{reminderdate}
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}
}
);
$previous=$this;
}
$sth->finish;
$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 => $previous eq $this?"":format_date( $data->{reservedate} ),
priority => $previous eq $this?"":$data->{priority},
name => $previous eq $this?"":$data->{borrower},
title => $previous eq $this?"":$data->{title},
author => $previous eq $this?"":$data->{author},
borrowernumber => $previous eq $this?"":$data->{borrowernumber},
itemnum => $previous eq $this?"":$data->{itemnumber},
phone => $previous eq $this?"":$data->{phone},
email => $previous eq $this?"":$data->{email},
biblionumber => $previous eq $this?"":$data->{biblionumber},
statusw => ( $data->{found} eq "W" ),
statusf => ( $data->{found} eq "F" ),
holdingbranch => $data->{holdingbranch},
branch => $previous eq $this?"":$data->{branch},
itemcallnumber => $data->{itemcallnumber},
notes => $previous eq $this?"":$data->{notes},
notificationdate => $previous eq $this?"":$data->{notificationdate},
reminderdate => $previous eq $this?"":$data->{reminderdate},
thisitemonly => 1,
}
);
$previous=$this;
}
$sth->finish;
# *** 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 => format_date($todaysdate),
from => $startdate,
to => $enddate,
reserveloop => \@reservedata,
to => $enddate,
reserveloop => \@reservedata,
"BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
);

206
circ/reserveratios.pl Executable file
View file

@ -0,0 +1,206 @@
#!/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 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., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
use strict;
use C4::Context;
use C4::Output;
use CGI;
use C4::Auth;
use C4::Dates qw/format_date format_date_in_iso/;
use vars qw($debug);
BEGIN {
$debug = $ENV{DEBUG} || 0;
}
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 ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "circ/reserveratios.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
flagsrequired => { circulate => 1 },
debug => 1,
}
);
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 @datearr = localtime( time() );
my
$todaysdate =
( 1900 + $datearr[5] ) . '-'
. sprintf( "%0.2d", ( $datearr[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr[3] );
# Find yesterday for the default shelf pull start and end dates
# A defualt of the prior years's holds is a reasonable way to pull holds
my @datearr_yesterday = localtime( time() - 86400*365 );
my $yesterdaysdate =
( 1900 + $datearr_yesterday[5] ) . '-'
. sprintf( "%0.2d", ( $datearr_yesterday[4] + 1 ) ) . '-'
. sprintf( "%0.2d", $datearr_yesterday[3] );
# 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 "") {
$startdate = format_date($yesterdaysdate);
}
if (!defined($enddate) or $enddate eq "") {
$enddate = format_date($todaysdate);
}
if (!defined($ratio) or $ratio eq "") {
$ratio = 3;
}
my $dbh = C4::Context->dbh;
my ($sqlorderby, $sqldatewhere) = ("","");
$debug and warn format_date_in_iso($startdate) . "\n" . format_date_in_iso($enddate);
$sqldatewhere .= " AND reservedate >= " . $dbh->quote(format_date_in_iso($startdate)) if ($startdate) ;
$sqldatewhere .= " AND reservedate <= " . $dbh->quote(format_date_in_iso($enddate)) if ($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,
reserves.biblionumber,
reserves.branchcode as branch,
items.holdingbranch,
items.itemcallnumber,
items.itemnumber,
GROUP_CONCAT(DISTINCT items.itemcallnumber
ORDER BY items.itemnumber SEPARATOR '<br>') as listcall,
GROUP_CONCAT(DISTINCT holdingbranch
ORDER BY items.itemnumber SEPARATOR '<br>') as listbranch,
GROUP_CONCAT(DISTINCT items.location
ORDER BY items.itemnumber SEPARATOR '<br>') as l_location,
GROUP_CONCAT(DISTINCT items.itype
ORDER BY items.itemnumber SEPARATOR '<br>') as l_itype,
notes,
reserves.found,
biblio.title,
biblio.author,
count(DISTINCT reserves.borrowernumber) as reservecount,
count(DISTINCT items.itemnumber) as itemcount
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
$sqldatewhere
";
if (C4::Context->preference('IndependantBranches')){
$strsth .= " AND items.holdingbranch=? ";
}
$strsth .= " GROUP BY reserves.biblionumber " . $sqlorderby;
my $sth = $dbh->prepare($strsth);
if (C4::Context->preference('IndependantBranches')){
$sth->execute(C4::Context->userenv->{'branch'});
}
else {
$sth->execute();
}
my @reservedata;
while ( my $data = $sth->fetchrow_hashref ) {
my @itemlist;
my $ratiocalc = int(10 * $data->{reservecount} / $data->{itemcount} / $ratio )/10;
push(
@reservedata,
{
reservedate => format_date( $data->{reservedate} ),
priority => $data->{priority},
name => $data->{borrower},
title => $data->{title},
author => $data->{author},
notes => $data->{notes},
itemnum => $data->{itemnumber},
biblionumber => $data->{biblionumber},
holdingbranch => $data->{holdingbranch},
listbranch => $data->{listbranch},
branch => $data->{branch},
itemcallnumber => $data->{itemcallnumber},
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}
}
);
}
$sth->finish;
$template->param(
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;

View file

@ -0,0 +1,175 @@
<!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->
<title>Koha &rsaquo; Circulation &rsaquo; Billing</title>
<!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
<!-- Additions to enable Calendar system -->
<link rel="stylesheet" type="text/css" href="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar-system.css" />
<!-- End of additions --><!-- Additions to enable Calendar system -->
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar.js"></script>
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar-en.js"></script>
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar-setup.js"></script>
<!-- End of additions -->
</head>
<body>
<!-- TMPL_INCLUDE NAME="header.inc" -->
<!-- TMPL_INCLUDE NAME="circ-search.inc" -->
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a> &rsaquo; Billing</div>
<div id="doc3" class="yui-t2">
<div id="bd">
<div id="yui-main">
<div class="yui-b">
<h1>Billing on
<!-- TMPL_VAR NAME="todaysdate" --> <br>From <!-- TMPL_VAR NAME="from" -->
to <!-- TMPL_VAR NAME="to" --></h1>
<div id="filters">
<br />
<form method="post" >
<p>
<label for "ratio">
Currency Cutoff:
</label>
<input type="text" size="5" id="ratio" name="ratio" value="<!-- TMPL_VAR NAME="ratio" -->" />
<label for "from">
Start date:
</label>
<input type="text" size="10" id="from" name="from" value="<!-- TMPL_VAR NAME="from" -->" />
<img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" border="0" id="openCalendarFrom" style="cursor: pointer;" alt="" />
<script language="JavaScript" type="text/javascript">
function validate1(date) {
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
var weekDay = date.getDay();
var dayMonth = month + '-' + day;
var dateString = year + '-' + month + '-' + day;
var dateTo = document.getElementById('to').value.split("-");
var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]);
if (date > limitDate) {
return true;
} else {
return false;
}
}
Calendar.setup(
{
inputField : "from",
ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
button : "openCalendarFrom",
disableFunc : validate1,
dateStatusFunc : validate1
}
);
</script>
<label for "to" >
End date:
</label>
<input size="10" id="to" name="to" value="<!-- TMPL_VAR NAME="to" -->" type="text" />
<img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" alt="" id="openCalendarTo" style="cursor: pointer;" valign="top" border="0" />
<script type="text/javascript">
function validate2(date) {
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
var weekDay = date.getDay();
var dayMonth = month + '-' + day;
var dateString = year + '-' + month + '-' + day;
var dateFrom = document.getElementById('from').value.split("-");
var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]);
if (limitDate > date) {
return true;
} else {
return false;
}
}
Calendar.setup(
{
inputField : "to",
ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
button : "openCalendarTo",
disableFunc : validate2,
dateStatusFunc : validate2
}
);
</script>
(inclusive)
<input type="submit" value="Go" class="submit">
</p>
</form>
<p>The following patrons have bills.</p>
</div>
<div class="searchresults">
<!-- TMPL_IF NAME="reserveloop" -->
<table>
<tr>
<th >Patron
<a href="/cgi-bin/koha/circ/billing.pl?order=patron&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Fee Item
<a href="/cgi-bin/koha/circ/billing.pl?order=fee&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Description
<a href="/cgi-bin/koha/circ/billing.pl?order=desc&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Type
<a href="/cgi-bin/koha/circ/billing.pl?order=type&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Date
<a href="/cgi-bin/koha/circ/billing.pl?order=date&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Total Amount
<a href="/cgi-bin/koha/circ/billing.pl?order=total&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
</tr>
<!-- TMPL_IF name="BiblioDefaultViewmarc" -->
<!-- /TMPL_IF -->
<!-- TMPL_IF name="BiblioDefaultViewisbd" -->
<!-- /TMPL_IF -->
<!-- TMPL_LOOP NAME="reserveloop" -->
<tr>
<!-- TMPL_IF name="surname" -->
<td>
<p><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=<!--TMPL_VAR Name="borrowernumber"-->"><!-- TMPL_VAR NAME="patronname" --></a><br /><!-- TMPL_VAR NAME="phone" --><br />
<!-- TMPL_IF NAME="email" --><a href="mailto:<!-- TMPL_VAR NAME="email" -->?subject=Account: <!-- TMPL_VAR NAME="title" -->">
<!-- TMPL_VAR NAME="email" --></a><!--/TMPL_IF-->
</p>
</td>
<td align="right">
<p><!-- TMPL_VAR NAME="l_amountoutstanding" --></p>
</td>
<td>
<p><!-- TMPL_VAR NAME="l_description" --></p>
</td>
<td>
<p><!-- TMPL_VAR NAME="l_accounttype" --></p>
</td>
<td>
<p><!-- TMPL_VAR NAME="l_date" --></p>
</td>
<td align="right">
<p><!-- TMPL_VAR NAME="sum_amount" --></p>
</td>
</tr>
<!-- /TMPL_LOOP -->
</table>
<!-- TMPL_ELSE -->
<b>No items found.</b>
<!-- /TMPL_IF -->
</div>
</div>
</div>
<div class="yui-b">
<!-- TMPL_INCLUDE NAME="circ-menu.inc" -->
</div>
</div>
<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->

View file

@ -35,6 +35,8 @@
<li> <a href="/cgi-bin/koha/circ/overdue.pl">Overdues</a></li>
<li> <a href="/cgi-bin/koha/circ/branchoverdues.pl">Fines</a></li>
<li> <a href="/cgi-bin/koha/circ/stats.pl?time=yesterday">Daily reconciliation</a></li>
<li> <a href="/cgi-bin/koha/circ/reserveratios.pl">Reserve Ratios</a></li>
<li> <a href="/cgi-bin/koha/circ/billing.pl">Billing</a></li>
</ul>
</div>

View file

@ -22,12 +22,14 @@
<div id="yui-main">
<div class="yui-b">
<h1>Pending holds as of <!-- TMPL_VAR NAME="todaysdate" --></h1>
<h1>Reserve Pull List</h1>
<h1>Pending holds on <!-- TMPL_VAR NAME="todaysdate" --> (from <!-- TMPL_VAR NAME="from" -->
to <!-- TMPL_VAR NAME="to" -->)</h1>
<div id="filters">
<br />
<form method="post" >
<p>
<label for "from">
Start date:
</label>
@ -91,7 +93,8 @@ Calendar.setup(
}
);
</script>
(inclusive)
<br>
<i>(Inclusive, default is (10yr/ago to yesterday), set"to" to today as needed. )</i>
<input type="submit" value="Go" class="submit">
</p>
</form>
@ -103,39 +106,46 @@ Calendar.setup(
<!-- TMPL_IF NAME="reserveloop" -->
<table>
<tr>
<th >
Priority
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=priority&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
<th>
Pull This Many Items
</th>
<th>
Items Available
</th>
<th >Hold Date
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=date&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Patron
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=borrower&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
<th>
Patrons with Reserves
</th>
<th >Title
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=biblio&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>
Library
Libraries
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=library&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>
Available Call Numbers
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=call&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>
Available Itypes
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=itype&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>
Available Locations
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=location&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Earliest Hold Date
<a href="/cgi-bin/koha/circ/pendingreserves.pl?order=date&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
</tr>
<!-- TMPL_LOOP NAME="reserveloop" -->
<tr>
<!-- TMPL_IF name="borrowernumber" -->
<td><p><!-- TMPL_VAR NAME="priority" --></p></td>
<td width="15%">
<p><!-- TMPL_VAR NAME="reservedate" --></p>
<p>in <!-- TMPL_VAR NAME="branch" --></p>
<!-- TMPL_IF NAME="statusw" --><p>Waiting</p><!-- /TMPL_IF --><!-- TMPL_IF NAME="statusf" --><p>Fullfilled</p><!-- /TMPL_IF -->
</td>
<td>
<p><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!--TMPL_VAR Name="borrowernumber"-->"><!-- TMPL_VAR NAME="name" --></a><br /><!-- TMPL_VAR NAME="phone" --><br />
<!-- TMPL_IF NAME="email" --><a href="mailto:<!-- TMPL_VAR NAME="email" -->?subject=Reservation: <!-- TMPL_VAR NAME="title" -->">
<!-- TMPL_VAR NAME="email" --></a><!--/TMPL_IF-->
</p>
</td>
<td><p><center><b><!-- TMPL_VAR NAME="pullcount" --></b></center></p></td>
<td><!-- TMPL_VAR NAME="count" --></td>
<td><!-- TMPL_VAR NAME="rcount" --></td>
<td>
<p>
<!-- TMPL_IF name="BiblioDefaultViewmarc" -->
@ -157,13 +167,20 @@ Calendar.setup(
<p><!-- TMPL_VAR NAME="notes" --></p>
</td>
<!-- TMPL_ELSE -->
<td colspan="2">
<td colspan="3">
&nbsp;
</td>
<td>"</td>
<td>"</td>
<!-- /TMPL_IF -->
<td><p><!-- TMPL_VAR NAME="holdingbranch" --> <!-- TMPL_VAR NAME="itemcallnumber" --></p></td>
<td><p><!-- TMPL_VAR NAME="holdingbranch" --></p></td>
<td><p><!-- TMPL_VAR NAME="itemcallnumber" --></p></td>
<td><p><!-- TMPL_VAR NAME="itype" --></p></td>
<td><p><!-- TMPL_VAR NAME="location" --></p></td>
<td width="15%">
<p><!-- TMPL_VAR NAME="reservedate" --></p>
<p>in <!-- TMPL_VAR NAME="branch" --></p>
<!-- TMPL_IF NAME="statusw" --><p>Waiting</p><!-- /TMPL_IF --><!-- TMPL_IF NAME="statusf" --><p>Fullfilled</p><!-- /TMPL_IF -->
</td>
</tr>
<!-- /TMPL_LOOP -->
</table>

View file

@ -0,0 +1,186 @@
<!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->
<title>Koha &rsaquo; Circulation &rsaquo; Reserve Ratios</title>
<!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
<!-- Additions to enable Calendar system -->
<link rel="stylesheet" type="text/css" href="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar-system.css" />
<!-- End of additions --><!-- Additions to enable Calendar system -->
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar.js"></script>
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar-en.js"></script>
<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/calendar/calendar-setup.js"></script>
<!-- End of additions -->
</head>
<body>
<!-- TMPL_INCLUDE NAME="header.inc" -->
<!-- TMPL_INCLUDE NAME="circ-search.inc" -->
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a> &rsaquo; Reserve Ratios</div>
<div id="doc3" class="yui-t2">
<div id="bd">
<div id="yui-main">
<div class="yui-b">
<h1>Reserve Ratios to Calculate Items Needed<br>
Calculated on <!-- TMPL_VAR NAME="todaysdate" --> <br>From <!-- TMPL_VAR NAME="from" -->
to <!-- TMPL_VAR NAME="to" --></h1>
<div id="filters">
<br />
<form method="post" >
<p>
<label for "ratio">
Reserves Ratio:
</label>
<input type="text" size="5" id="ratio" name="ratio" value="<!-- TMPL_VAR NAME="ratio" -->" />
<label for "from">
Start date:
</label>
<input type="text" size="10" id="from" name="from" value="<!-- TMPL_VAR NAME="from" -->" />
<img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" border="0" id="openCalendarFrom" style="cursor: pointer;" alt="" />
<script language="JavaScript" type="text/javascript">
function validate1(date) {
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
var weekDay = date.getDay();
var dayMonth = month + '-' + day;
var dateString = year + '-' + month + '-' + day;
var dateTo = document.getElementById('to').value.split("-");
var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]);
if (date > limitDate) {
return true;
} else {
return false;
}
}
Calendar.setup(
{
inputField : "from",
ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
button : "openCalendarFrom",
disableFunc : validate1,
dateStatusFunc : validate1
}
);
</script>
<label for "to" >
End date:
</label>
<input size="10" id="to" name="to" value="<!-- TMPL_VAR NAME="to" -->" type="text" />
<img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" alt="" id="openCalendarTo" style="cursor: pointer;" valign="top" border="0" />
<script type="text/javascript">
function validate2(date) {
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
var weekDay = date.getDay();
var dayMonth = month + '-' + day;
var dateString = year + '-' + month + '-' + day;
var dateFrom = document.getElementById('from').value.split("-");
var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]);
if (limitDate > date) {
return true;
} else {
return false;
}
}
Calendar.setup(
{
inputField : "to",
ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
button : "openCalendarTo",
disableFunc : validate2,
dateStatusFunc : validate2
}
);
</script>
(inclusive)
<input type="submit" value="Go" class="submit">
</p>
</form>
<p>These items have a large number of holds.</p>
</div>
<div class="searchresults">
<!-- TMPL_IF NAME="reserveloop" -->
<table>
<tr>
<th >Reserves
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=reservecount&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Items
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=itemcount&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Title
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=biblio&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Holding Branches
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=branch&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Location
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=location&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Itype
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=itype&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th>Call Numbers
<a href="/cgi-bin/koha/circ/reserveratios.pl?ratio=<!-- TMPL_VAR NAME="ratio" -->&order=callnumber&from=<!-- TMPL_VAR NAME="from" -->&to=<!-- TMPL_VAR NAME="to" -->">Sort</a>
</th>
<th >Items Needed
</th>
</tr>
<!-- TMPL_LOOP NAME="reserveloop" -->
<tr>
<!-- TMPL_IF name="ratio_ge_one" -->
<td>
<p><!-- TMPL_VAR NAME="reservecount" --></p>
</td>
<td>
<p><!-- TMPL_VAR NAME="itemcount" --></p>
</td>
<td>
<p>
<!-- TMPL_IF name="BiblioDefaultViewmarc" -->
<a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" ESCAPE="URL" -->">
<!-- TMPL_VAR NAME="title" --> <!-- TMPL_VAR NAME="subtitle" -->
</a>
<!-- TMPL_ELSE -->
<!-- TMPL_IF name="BiblioDefaultViewisbd" -->
<a href="/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" ESCAPE="URL" -->">
<!-- TMPL_VAR NAME="title" --> <!-- TMPL_VAR NAME="subtitle" -->
</a>
<!-- TMPL_ELSE -->
<a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" ESCAPE="URL" -->">
<!-- TMPL_VAR NAME="title" --> <!-- TMPL_VAR NAME="subtitle" -->
</a>
<!-- /TMPL_IF -->
<!-- /TMPL_IF -->
</p>
<p><!-- TMPL_VAR NAME="notes" --></p>
</td>
<td><p><!-- TMPL_VAR NAME="listbranch" --></p></td>
<td><p><!-- TMPL_VAR NAME="location" --></p></td>
<td><p><!-- TMPL_VAR NAME="itype" --></p></td>
<td><p><!-- TMPL_VAR NAME="listcall" --></p></td>
<td><p><b>Order: <!-- TMPL_VAR NAME="ratiocalc" --></b></p></td>
<!-- /TMPL_IF -->
</tr>
<!-- /TMPL_LOOP -->
</table>
<!-- TMPL_ELSE -->
<b>No items found.</b>
<!-- /TMPL_IF -->
</div>
</div>
</div>
<div class="yui-b">
<!-- TMPL_INCLUDE NAME="circ-menu.inc" -->
</div>
</div>
<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->

View file

@ -28,9 +28,13 @@
<!-- TMPL_IF NAME="itemsloop" --><table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Lost Code</th>
<th>Barcode</th>
<th>Date last seen</th>
<th>Price</th>
<th>Rep.Price</th>
<th>Branch</th>
<th>Itemtype</th>
<th>Holdingbranch</th>
@ -39,12 +43,18 @@
<!-- TMPL_LOOP NAME="itemsloop"-->
<tr>
<td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber"-->" title="<!-- TMPL_VAR NAME="itemnotes"-->">
<!-- TMPL_VAR NAME="title"--></td>
</a></td>
<td><!-- TMPL_VAR NAME="author"--></td>
<td><!-- TMPL_VAR NAME="lib"--></td>
<td><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber"-->" title="<!-- TMPL_VAR NAME="itemnotes"-->">
<!-- TMPL_VAR NAME="barcode"-->
</a></td>
<td><!-- TMPL_VAR NAME="datelastseen"--></td>
<td><!-- TMPL_VAR NAME="price" --></td>
<td><!-- TMPL_VAR NAME="replacementprice" --></td>
<td><!-- TMPL_VAR NAME="homebranch" --></td>
<td><!-- TMPL_VAR NAME="itemtype" --></td>
<td><!-- TMPL_VAR NAME="itype" --></td>
<td><!-- TMPL_VAR NAME="holdingbranch"--></td>
<td><!-- TMPL_VAR NAME="location"--></td>
</tr>
@ -57,10 +67,16 @@
<fieldset class="rows"><ol> <li><label for="orderbyfilter">Order by: </label>
<select id="orderbyfilter" name="orderbyfilter">
<option value=""> --- </option>
<option value="title">Title</option>
<option value="author">Author</option>
<option value="homebranch">Branch</option>
<option value="itemtype">Itemtypes</option>
<option value="itype">Itemtypes</option>
<option value="barcode">Barcode</option>
<option value="price">price</option>
<option value="price">Price</option>
<option value="replacementprice">Replacement Price</option>
<option value="lib">Lost Code</option>
<option value="datelastseen">Date Last Seen</option>
<option value="location">Location</option>
</select></li>
<li><label for="barcodefilter">Barcode: </label><input type="text" name="barcodefilter" id="barcodefilter" size="6" /></li>

View file

@ -57,14 +57,24 @@ if ( $get_items ) {
$where{barcode} = $barcodefilter if defined $barcodefilter;
$where{itemtype} = $itemtypesfilter if defined $itemtypesfilter;
my $items = GetLostItems( \%where, $orderbyfilter );
my $items = GetLostItems( \%where, $orderbyfilter );
$template->param(
total => scalar @$items,
itemsloop => $items,
get_items => $get_items
get_items => $get_items
);
}
# Get the Lost colletion codes
#my $fw = GetFrameworkCode($biblionumber);
#$item = GetAuthorisedValues(GetAuthValCode('items.itemlost',$fw),$item->{itemlost}) if GetAuthValCode('items.itemlost',$fw);
#if ($item->{damaged}) {
# $item->{itemdamagedloop}= GetAuthorisedValues(GetAuthValCode('items.damaged',$fw),$item->{damaged}) if GetAuthValCode('items.damaged',$fw);
#}
#get collection code description, too
#my $ccodes = GetAuthorisedValueDesc('','', 'ccode' ,'','','ccode');
# getting all branches.
my $branches = GetBranches;
my $branch = C4::Context->userenv->{"branchname"};