From cd4cf2ec5b0b25b729b6733f9137a786ea70c762 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 16 Sep 2014 12:51:13 -0400 Subject: [PATCH] Bug 12933 - Add ability to print overdue slip from staff intranet Some librarians would like to be able to print an overdues slip from the staff intranet. This slip would be defined as the print transport version of the ODUE slip. Test Plan: 1) Apply this patch 2) Locate a patron with overdues 3) Define a print version of the ODUE slip 4) Try Print > Print overdues --- C4/Members.pm | 19 +++++ C4/Overdues.pm | 71 ++++++++++++++++++++ Koha/Template/Plugin/Borrowers.pm | 12 +++- .../prog/en/includes/members-toolbar.inc | 11 +++- misc/cronjobs/overdue_notices.pl | 70 ------------------- 5 files changed, 111 insertions(+), 72 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index e3a5538..21d44b5 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -104,6 +104,7 @@ BEGIN { GetBorrowersWithEmail HasOverdues + GetOverdues ); #Modify data @@ -2493,6 +2494,24 @@ sub HasOverdues { return $count; } +sub GetOverdues { + my ( $borrowernumber ) = @_; + + my $sql = " + 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 = ? + "; + + my $sth = C4::Context->dbh->prepare( $sql ); + $sth->execute( $borrowernumber ); + + return $sth->fetchall_arrayref({}); +} + END { } # module clean-up code here (global destructor) 1; diff --git a/C4/Overdues.pm b/C4/Overdues.pm index 31314d6..4a5c7a1 100644 --- a/C4/Overdues.pm +++ b/C4/Overdues.pm @@ -24,12 +24,14 @@ use strict; use Date::Calc qw/Today Date_to_Days/; use Date::Manip qw/UnixDate/; use List::MoreUtils qw( uniq ); +use Locale::Currency::Format 1.28; use C4::Circulation; use C4::Context; use C4::Accounts; use C4::Log; # logaction use C4::Debug; +use C4::Budgets qw(GetCurrency); use vars qw($VERSION @ISA @EXPORT); @@ -53,6 +55,7 @@ BEGIN { &RemoveNotifyLine &AddNotifyLine &GetOverdueMessageTransportTypes + &parse_letter ); # subs to remove push @EXPORT, qw( @@ -947,6 +950,74 @@ sub GetOverdueMessageTransportTypes { return \@mtts; } +=head2 parse_letter + +parses the letter template, replacing the placeholders with data +specific to this patron, biblio, or item for overdues + +named parameters: + letter - required hashref + borrowernumber - required integer + substitute - optional hashref of other key/value pairs that should + be substituted in the letter content + +returns the C hashref, with the content updated to reflect the +substituted keys and values. + +=cut + +sub parse_letter { + my $params = shift; + foreach my $required (qw( letter_code borrowernumber )) { + return unless ( exists $params->{$required} && $params->{$required} ); + } + + my $substitute = $params->{'substitute'} || {}; + $substitute->{today} ||= C4::Dates->new()->output("syspref"); + + my %tables = ( 'borrowers' => $params->{'borrowernumber'} ); + if ( my $p = $params->{'branchcode'} ) { + $tables{'branches'} = $p; + } + + my $currencies = GetCurrency(); + my $currency_format; + $currency_format = $currencies->{currency} if defined($currencies); + + my @item_tables; + if ( my $i = $params->{'items'} ) { + my $item_format = ''; + foreach my $item (@$i) { + my $fine = GetFine($item->{'itemnumber'}, $params->{'borrowernumber'}); + if ( !$item_format and defined $params->{'letter'}->{'content'} ) { + $params->{'letter'}->{'content'} =~ m/(.*<\/item>)/; + $item_format = $1; + } + + $item->{'fine'} = currency_format($currency_format, "$fine", FMT_SYMBOL); + # if active currency isn't correct ISO code fallback to sprintf + $item->{'fine'} = sprintf('%.2f', $fine) unless $item->{'fine'}; + + push @item_tables, { + 'biblio' => $item->{'biblionumber'}, + 'biblioitems' => $item->{'biblionumber'}, + 'items' => $item, + 'issues' => $item->{'itemnumber'}, + }; + } + } + + return C4::Letters::GetPreparedLetter ( + module => 'circulation', + letter_code => $params->{'letter_code'}, + branchcode => $params->{'branchcode'}, + tables => \%tables, + substitute => $substitute, + repeat => { item => \@item_tables }, + message_transport_type => $params->{message_transport_type}, + ); +} + 1; __END__ diff --git a/Koha/Template/Plugin/Borrowers.pm b/Koha/Template/Plugin/Borrowers.pm index b8f3de5..3e2c59b 100644 --- a/Koha/Template/Plugin/Borrowers.pm +++ b/Koha/Template/Plugin/Borrowers.pm @@ -22,7 +22,8 @@ use Modern::Perl; use base qw( Template::Plugin ); -use Koha::Borrower::Debarments qw//; +use Koha::Borrower::Debarments qw(); +use C4::Members qw(HasOverdues); =pod @@ -48,4 +49,13 @@ sub IsDebarred { return Koha::Borrower::Debarments::IsDebarred($borrower->{borrowernumber}); } +sub HasOverdues { + my ( $self, $borrowernumber ) = @_; + + return unless $borrowernumber; + + return C4::Members::HasOverdues($borrowernumber); +} + + 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc index caa2fbf..3b61b96 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc @@ -1,3 +1,4 @@ +[% USE Borrowers %]