X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=circ%2Foverdue.pl;h=2bd230282be1b692ebface843bd58e37543db565;hb=cf4144bca8d9a8c4010347d40558f29382d5669c;hp=81d3aa37d13cdf289f242f3958583e1668a7a9a7;hpb=47321d0068dd51053a3f6cc209fe7ffa4adc5d14;p=koha.git diff --git a/circ/overdue.pl b/circ/overdue.pl index 81d3aa37d1..2bd230282b 100755 --- a/circ/overdue.pl +++ b/circ/overdue.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl -# $Id$ # Copyright 2000-2002 Katipo Communications # @@ -20,16 +19,27 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; +# use warnings; # FIXME use C4::Context; use C4::Output; use CGI; use C4::Auth; -use C4::Date; +use C4::Branch; +use C4::Overdues qw/GetOverduesByBorrowers/; +use C4::Dates qw/format_date format_date_in_iso/; +use Date::Calc qw/Today/; +use Text::CSV_XS; my $input = new CGI; -my $type = $input->param('type'); +my $order = $input->param( 'order' ) || ''; +my $showall = $input->param('showall'); -my $theme = $input->param('theme'); # only used if allowthemeoverride is set +my $bornamefilter = $input->param( 'borname'); +my $borcatfilter = $input->param( 'borcat' ); +my $itemtypefilter = $input->param('itemtype'); +my $borflagsfilter = $input->param('borflags') || ""; +my $branchfilter = $input->param( 'branch' ); +my $op = $input->param( 'op' ) || ''; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -37,88 +47,151 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { reports => 1, circulate => 1 }, + flagsrequired => { reports => 1, circulate => "circulate_remaining_permissions" }, 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] ); my $dbh = C4::Context->dbh; -my $sth = - $dbh->prepare( - "select date_due,borrowernumber,itemnumber - from issues - where isnull(returndate) && date_dueexecute($todaysdate); - -my @overduedata; -while ( my $data = $sth->fetchrow_hashref ) { - $duedate = format_date($data->{'date_due'}); - $borrowernumber = $data->{'borrowernumber'}; - $itemnum = $data->{'itemnumber'}; - - my $sth1 = - $dbh->prepare( -"select concat(firstname,' ',surname),phone,email from borrowers where borrowernumber=?" - ); - $sth1->execute($borrowernumber); - $data1 = $sth1->fetchrow_hashref; - $name = $data1->{'concat(firstname,\' \',surname)'}; - $phone = $data1->{'phone'}; - $email = $data1->{'email'}; - $sth1->finish; - - my $sth2 = - $dbh->prepare("select biblionumber from items where itemnumber=?"); - $sth2->execute($itemnum); - $data2 = $sth2->fetchrow_hashref; - $biblionumber = $data2->{'biblionumber'}; - $sth2->finish; - - my $sth3 = - $dbh->prepare("select title,author from biblio where biblionumber=?"); - $sth3->execute($biblionumber); - $data3 = $sth3->fetchrow_hashref; - $title = $data3->{'title'}; - $author = $data3->{'author'}; - $sth3->finish; - push( - @overduedata, - { - duedate => $duedate, - borrowernumber => $borrowernumber, - itemnum => $itemnum, - name => $name, - phone => $phone, - email => $email, - biblionumber => $biblionumber, - title => $title, - author => $author - } - ); +my $req; +$req = $dbh->prepare( "select categorycode, description from categories order by description"); +$req->execute; +my @borcatloop; +while (my ($catcode, $description) =$req->fetchrow) { + push @borcatloop, { + value => $catcode, + selected => $catcode eq $borcatfilter ? 1 : 0, + catname => $description, + }; +} + +$req = $dbh->prepare( "select itemtype, description from itemtypes order by description"); +$req->execute; +my @itemtypeloop; +while (my ($itemtype, $description) =$req->fetchrow) { + push @itemtypeloop, { + value => $itemtype, + selected => $itemtype eq $itemtypefilter ? 1 : 0, + itemtypename => $description, + }; +} +my $onlymine=C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{flags}!=1 && + C4::Context->userenv->{branch}; + +$branchfilter = C4::Context->userenv->{'branch'} if ($onlymine && !$branchfilter); + +$template->param( + branchloop => GetBranchesLoop($branchfilter, $onlymine), + branchfilter => $branchfilter, + borcatloop => \@borcatloop, + itemtypeloop => \@itemtypeloop, + borname => $bornamefilter, + order => $order, + showall => $showall, + csv_param_string => $input->query_string(), + DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), + dateduefrom => $input->param( 'dateduefrom' ) || '', + datedueto => $input->param( 'datedueto' ) || '', +); + +my @sort_roots = qw(borrower title barcode date_due); +push @sort_roots, map {$_ . " desc"} @sort_roots; +my @order_loop = ({selected => $order ? 0 : 1}); # initial blank row +foreach (@sort_roots) { + my $tmpl_name = $_; + $tmpl_name =~ s/\s/_/g; + push @order_loop, { + selected => $order eq $_ ? 1 : 0, + ordervalue => $_, + foo => $tmpl_name, + 'order_' . $tmpl_name => 1, + }; } +$template->param(ORDER_LOOP => \@order_loop); + +my $todaysdate = sprintf("%-04.4d-%-02.2d-%02.2d", Today()); + +$bornamefilter =~s/\*/\%/g; +$bornamefilter =~s/\?/\_/g; + +my $dateduefrom = format_date_in_iso($input->param( 'dateduefrom' )); +my $datedueto = format_date_in_iso($input->param( 'datedueto' )); + +my @overduedata = @{GetOverduesByBorrowers($branchfilter, $borcatfilter, $itemtypefilter, $borflagsfilter, $bornamefilter, $order, $dateduefrom, $datedueto)}; $template->param( - todaysdate => $todaysdate, - overdueloop => \@overduedata + todaysdate => format_date($todaysdate), + overdueloop => \@overduedata ); +# download the complete CSV +if ($op eq 'csv') { + binmode(STDOUT, ":utf8"); + my $csv = build_csv(\@overduedata); + print $input->header(-type => 'application/vnd.sun.xml.calc', + -encoding => 'utf-8', + -attachment=>"overdues.csv", + -filename=>"overdues.csv" ); + print $csv; + exit; +} + output_html_with_http_headers $input, $cookie, $template->output; + + +sub build_csv { + my $overdues = shift; + + return "" if scalar(@$overdues) == 0; + + my @lines = (); + + # build header ... + my @keys = ( + 'borrowernumber', + 'title', + 'firstname', + 'surname', + 'address', + 'city', + 'zipcode', + 'phone', + 'email', + 'branchcode', + 'overdues' + ); + + my $csv = Text::CSV_XS->new({ + binary => 1, + sep_char => C4::Context->preference("delimiter") ? + C4::Context->preference("delimiter") : ';' , + }); + $csv->combine(@keys); + push @lines, $csv->string(); + + # ... and rest of report + foreach my $overdue ( @{ $overdues } ) { + my $issues; + foreach my $issue ( @{$overdue->{overdues} }){ + $issues .= "$issue->{title} / $issue->{author} / $issue->{itemcallnumber} / $issue->{barcode} / ".$issue->{issuedate}. " - " . $issue->{date_due} . " \r\n"; + } + push @lines, $csv->string() if $csv->combine( + $overdue->{borrowernumber}, + $overdue->{title}, + $overdue->{firstname}, + $overdue->{surname}, + $overdue->{address}, + $overdue->{city}, + $overdue->{zipcode}, + $overdue->{phone}, + $overdue->{email}, + $overdue->{branchcode}, + $issues, + ); + } + + return join("\n", @lines) . "\n"; +}