From 661e6389c990c603cbc6a0a9444c27ec9d01afe2 Mon Sep 17 00:00:00 2001 From: Colin Campbell Date: Tue, 5 Apr 2016 12:56:24 +0100 Subject: [PATCH] Bug 16202: GetIssuingCharges should return a collectable amount Charges should not include elements less than a penny/cent they are not displayed but can be saved to the database causing "odd" behaviour down the line Make the routine round the resultant charge to nearest cent, so consistent values are returned. Removed the one case where it was rounded post call. Although the main danger is values generated by the discount calculation apply the rounding to all returned charges in case the item charge is defined using the 3rd or 4th decimal places. NOTE: prove -v t/db_dependent/Circulation.t triggers the change. Though, all the returned amounts are 0.00 only. Signed-off-by: Mark Tompsett Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall (cherry picked from commit d84ed89557e2c921f261b1c620434d432dcbd3f7) Signed-off-by: Katrin Fischer --- C4/Circulation.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index f25bcc11ab..e53aca1143 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -933,7 +933,6 @@ sub CanBookBeIssued { if ( $rentalConfirmation ){ my ($rentalCharge) = GetIssuingCharges( $item->{'itemnumber'}, $borrower->{'borrowernumber'} ); if ( $rentalCharge > 0 ){ - $rentalCharge = sprintf("%.02f", $rentalCharge); $needsconfirmation{RENTALCHARGE} = $rentalCharge; } } @@ -3241,6 +3240,9 @@ sub GetIssuingCharges { my $discount = _get_discount_from_rule($discount_rules, $branch, $item_type); $charge = ( $charge * ( 100 - $discount ) ) / 100; } + if ($charge) { + $charge = sprintf '%.2f', $charge; # ensure no fractions of a penny returned + } } return ( $charge, $item_type ); -- 2.39.5