#!/usr/bin/perl
# Copyright 2008 Liblime
+# Copyright 2010 BibLibre
#
# This file is part of Koha.
#
use strict;
use warnings;
-use utf8;
BEGIN {
comma separated list of fields that get substituted into templates in
places of the E<lt>E<lt>items.contentE<gt>E<gt> 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>
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;
@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";
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;
$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
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 = "";
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<rary>'?
- 'items.content' => $titles
+ 'items.content' => $titles,
+ 'count' => $itemcount,
}
}
);
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 = {
return unless exists $params->{$required};
}
+ my $todaysdate = C4::Dates->new()->output("syspref");
+ $params->{'letter'}->{title} =~ s/<<today>>/$todaysdate/g;
+ $params->{'letter'}->{content} =~ s/<<today>>/$todaysdate/g;
if ( $params->{'substitute'} ) {
while ( my ( $key, $replacedby ) = each %{ $params->{'substitute'} } ) {
$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>)/;
$item_format = $1;
my $formatted_fine = currency_format("$1", "$fine", FMT_SYMBOL);
$params->{'letter'}->{'content'} =~ s/<fine>.*<\/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>.*<\/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>.*<\/item>)/$1\n$item_format/ if scalar(@{$params->{'items'}} > 0);
}
}