From 69392c8020cc9e47c8c5d83fb92ab2c201c33c98 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 11 Dec 2020 07:13:12 -0500 Subject: [PATCH] Bug 27204: Fix end boundary index, never return results for non-existant accountlines There are two primary issues I've identified with requesting line items for fees via SIP: 1) The end boundary is incorrect. For example, if send a request with a BP ( starting item) of 1, and a BQ (end item) of 1, I should get just the first item. Instead I will get two items 2) Our SIP server does not check bounds. For example, if I have 3 fines, but I send a BP of 1 and a BQ of 5, I will get back 5 AVs, two of them being "empty" because the patron only has 3 accountlines! Test Plan: 1) Apply the unit test patch 2) prove t/db_dependent/SIP/Patron.t 3) Note the failures 4) Apply the second patch 5) prove t/db_dependent/SIP/Patron.t 6) All tests should pass! Signed-off-by: Martin Renvoize Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart (cherry picked from commit 0a5232412fee9a9811b7354c8ea98ee889eaee3c) Signed-off-by: Fridolin Somers (cherry picked from commit 0ebfff111dcecca92deffb36fd62e58e0a9e3bba) Signed-off-by: Andrew Fuerste-Henry --- C4/SIP/ILS/Patron.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/C4/SIP/ILS/Patron.pm b/C4/SIP/ILS/Patron.pm index 6969c115ed..f6548a34ae 100644 --- a/C4/SIP/ILS/Patron.pm +++ b/C4/SIP/ILS/Patron.pm @@ -373,7 +373,7 @@ sub fine_items { ); $start = $start ? $start - 1 : 0; - $end = $end ? $end : scalar @fees - 1; + $end = $end ? $end - 1 : scalar @fees - 1; my $av_field_template = $server ? $server->{account}->{av_field_template} : undef; $av_field_template ||= "[% accountline.description %] [% accountline.amountoutstanding | format('%.2f') %]"; @@ -384,6 +384,8 @@ sub fine_items { for ( my $i = $start; $i <= $end; $i++ ) { my $fee = $fees[$i]; + next unless $fee; + my $output; $tt->process( \$av_field_template, { accountline => $fee }, \$output ); push( @return_values, { barcode => $output } ); -- 2.39.5