From 54bd12f6db2435b5ff2a915ce474b121178c4f1b 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 --- 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 9820013ee7..b6a75ad77f 100644 --- a/C4/SIP/ILS/Patron.pm +++ b/C4/SIP/ILS/Patron.pm @@ -377,7 +377,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') %]"; @@ -388,6 +388,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.20.1