X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=misc%2Fcronjobs%2Foverdue_notices.pl;h=6e723b20e69cb48b5e3835eaab18a0375c578915;hb=3b9722c7dd08009a7baabdb84ad108462a1ba3c4;hp=761644a02146699c6cc7bfa3a98a2f1f4d8fa820;hpb=a5bdd61c737f34973b6b1387d54ccb15d7b57792;p=koha.git diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl index 761644a021..6e723b20e6 100755 --- a/misc/cronjobs/overdue_notices.pl +++ b/misc/cronjobs/overdue_notices.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl # Copyright 2008 Liblime +# Copyright 2010 BibLibre # # This file is part of Koha. # @@ -19,7 +20,6 @@ use strict; use warnings; -use utf8; BEGIN { @@ -113,9 +113,9 @@ directory. This can be downloaded or futher processed by library staff. comma separated list of fields that get substituted into templates in places of the EEitems.contentEE placeholder. This -defaults to issuedate,title,barcode,author +defaults to due date,title,barcode,author -Other possible values come from fields in the biblios, items, and +Other possible values come from fields in the biblios, items and issues tables. =item B<-borcat> @@ -256,7 +256,7 @@ my $csvfilename; my $htmlfilename; my $triggered = 0; my $listall = 0; -my $itemscontent = join( ',', qw( issuedate title barcode author biblionumber ) ); +my $itemscontent = join( ',', qw( date_due title barcode author itemnumber ) ); my @myborcat; my @myborcatout; @@ -305,7 +305,7 @@ if (@branchcodes) { @branches = grep { $seen{$_} } @overduebranches; - if (@overduebranches) { + if (@branches) { my $branch_word = scalar @branches > 1 ? 'branches' : 'branch'; $verbose and warn "$branch_word @branches have overdue rules\n"; @@ -330,6 +330,7 @@ our $csv; # the Text::CSV_XS object our $csv_fh; # the filehandle to the CSV file. if ( defined $csvfilename ) { my $sep_char = C4::Context->preference('delimiter') || ','; + $sep_char = "\t" if ($sep_char eq 'tabulation'); $csv = Text::CSV_XS->new( { binary => 1 , sep_char => $sep_char } ); if ( $csvfilename eq '' ) { $csv_fh = *STDOUT; @@ -375,10 +376,11 @@ foreach my $branchcode (@branches) { $verbose and warn sprintf "branchcode : '%s' using %s\n", $branchcode, $admin_email_address; my $sth2 = $dbh->prepare( <<'END_SQL' ); -SELECT biblio.*, items.*, issues.*, TO_DAYS(NOW())-TO_DAYS(date_due) AS days_overdue - FROM issues,items,biblio +SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, TO_DAYS(NOW())-TO_DAYS(date_due) AS days_overdue + FROM issues,items,biblio, biblioitems WHERE items.itemnumber=issues.itemnumber AND biblio.biblionumber = items.biblionumber + AND biblio.biblionumber = biblioitems.biblionumber AND issues.borrowernumber = ? AND TO_DAYS(NOW())-TO_DAYS(date_due) BETWEEN ? and ? END_SQL @@ -472,10 +474,11 @@ END_SQL if ( $overdue_rules->{"debarred$i"} ) { #action taken is debarring - C4::Members::DebarMember($borrowernumber); + C4::Members::DebarMember($borrowernumber, '9999-12-31'); $verbose and warn "debarring $borrowernumber $firstname $lastname\n"; } my @params = ($listall ? ( $borrowernumber , 1 , $MAX ) : ( $borrowernumber, $mindays, $maxdays )); + $verbose and warn "STH2 PARAMS: borrowernumber = $borrowernumber, mindays = $mindays, maxdays = $maxdays"; $sth2->execute(@params); my $itemcount = 0; my $titles = ""; @@ -492,17 +495,18 @@ END_SQL my @item_info = map { $_ =~ /^date|date$/ ? format_date( $item_info->{$_} ) : $item_info->{$_} || '' } @item_content_fields; $titles .= join("\t", @item_info) . "\n"; $itemcount++; - push (@items, $item_info->{'biblionumber'}); + push @items, { itemnumber => $item_info->{'itemnumber'}, biblionumber => $item_info->{'biblionumber'} }; } $sth2->finish; $letter = parse_letter( { letter => $letter, borrowernumber => $borrowernumber, branchcode => $branchcode, - biblionumber => \@items, + items => \@items, substitute => { # this appears to be a hack to overcome incomplete features in this code. bib => $branch_details->{'branchname'}, # maybe 'bib' is a typo for 'lib'? - 'items.content' => $titles + 'items.content' => $titles, + 'count' => $itemcount, } } ); @@ -582,10 +586,14 @@ END_SQL local $, = "\f"; # pagebreak print @output_chunks; } + # Generate the content of the csv with headers + my $content = join(";", qw(title name surname address1 address2 zipcode city email itemcount itemsinfo due_date issue_date)) . "\n"; + $content .= join( "\n", @output_chunks ); + my $attachment = { filename => defined $csvfilename ? 'attachment.csv' : 'attachment.txt', type => 'text/plain', - content => join( "\n", @output_chunks ) + content => $content, }; my $letter = { @@ -642,6 +650,9 @@ sub parse_letter { # FIXME: this code should probably be moved to C4::Letters:pa return unless exists $params->{$required}; } + my $todaysdate = C4::Dates->new()->output("syspref"); + $params->{'letter'}->{title} =~ s/<>/$todaysdate/g; + $params->{'letter'}->{content} =~ s/<>/$todaysdate/g; if ( $params->{'substitute'} ) { while ( my ( $key, $replacedby ) = each %{ $params->{'substitute'} } ) { @@ -657,12 +668,12 @@ sub parse_letter { # FIXME: this code should probably be moved to C4::Letters:pa $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'branches', $params->{'branchcode'} ); } - if ( $params->{'biblionumber'} ) { + if ( $params->{'items'} ) { my $item_format = ''; PROCESS_ITEMS: - while (scalar(@{$params->{'biblionumber'}}) > 0) { - my $item = shift @{$params->{'biblionumber'}}; - my $fine = GetFine($item, $params->{'borrowernumber'}); + while (scalar(@{$params->{'items'}}) > 0) { + my $item = shift @{$params->{'items'}}; + my $fine = GetFine($item->{'itemnumber'}, $params->{'borrowernumber'}); if (!$item_format) { $params->{'letter'}->{'content'} =~ m/(.*<\/item>)/; $item_format = $1; @@ -671,10 +682,10 @@ sub parse_letter { # FIXME: this code should probably be moved to C4::Letters:pa my $formatted_fine = currency_format("$1", "$fine", FMT_SYMBOL); $params->{'letter'}->{'content'} =~ s/.*<\/fine>/$formatted_fine/; } - $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'biblio', $item ); - $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'biblioitems', $item ); - $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'items', $item ); - $params->{'letter'}->{'content'} =~ s/(.*<\/item>)/$1\n$item_format/ if scalar(@{$params->{'biblionumber'}} > 0); + $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'biblio', $item->{'biblionumber'} ); + $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'biblioitems', $item->{'biblionumber'} ); + $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'items', $item->{'itemnumber'} ); + $params->{'letter'}->{'content'} =~ s/(.*<\/item>)/$1\n$item_format/ if scalar(@{$params->{'items'}} > 0); } }