[Koha-patches] [PATCH] Fixes bug 5212: Overdue notices pulling in wrong item information

Nicole Engard nengard at bywatersolutions.com
Thu Sep 9 19:56:42 CEST 2010


From: Ian Walls <ian.walls at bywatersolutions.com>

Code was erroneously using the biblionumber as the key for the items table, resulting in incorrect information for any
<<items.--field-->> placed inside the <item> </item> tags of an Overdue Notice.

This patch replaces the biblionumbers listed in the @items array param with hashes consisting of the biblionumber,
biblioitemnumber and itemnumber.  These values are used as the correct keys for the substitution.

Signed-off-by: Nicole Engard <nengard at bywatersolutions.com>
---
 misc/cronjobs/overdue_notices.pl |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl
index 4de6cdd..d56c950 100755
--- a/misc/cronjobs/overdue_notices.pl
+++ b/misc/cronjobs/overdue_notices.pl
@@ -486,14 +486,17 @@ 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'});
+                    my %item = (biblionumber     => $item_info->{'biblionumber'}, 
+                                biblioitemnumber => $item_info->{'biblioitemnumber'}, 
+                                itemnumber       => $item_info->{'itemnumber'});
+                    push (@items, \%item);
                 }
                 $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
@@ -651,12 +654,15 @@ 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 $biblionumber = $item->{'biblionumber'};
+            my $biblioitemnumber = $item->{'biblioitemnumber'};
+            my $itemnumber = $item->{'itemnumber'};
+            my $fine = GetFine($biblionumber, $params->{'borrowernumber'});
             if (!$item_format) {
                 $params->{'letter'}->{'content'} =~ m/(<item>.*<\/item>)/;
                 $item_format = $1;
@@ -668,10 +674,10 @@ sub parse_letter { # FIXME: this code should probably be moved to C4::Letters:pa
                 $formatted_fine = Encode::encode("utf8", $formatted_fine);
                 $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',      $biblionumber );
+            $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'biblioitems', $biblioitemnumber );
+            $params->{'letter'} = C4::Letters::parseletter( $params->{'letter'}, 'items', $itemnumber );
+            $params->{'letter'}->{'content'} =~ s/(<item>.*<\/item>)/$1\n$item_format/ if scalar(@{$params->{'items'}} > 0);
 
         }
     }
-- 
1.5.6.5



More information about the Koha-patches mailing list