From aee08b30eb8d6b47f88176a15ecc1628cb2744ab 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 --- C4/Circulation.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 0230429..ca0d23c 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -935,7 +935,6 @@ sub CanBookBeIssued { if ( $rentalConfirmation ){ my ($rentalCharge) = GetIssuingCharges( $item->{'itemnumber'}, $borrower->{'borrowernumber'} ); if ( $rentalCharge > 0 ){ - $rentalCharge = sprintf("%.02f", $rentalCharge); $needsconfirmation{RENTALCHARGE} = $rentalCharge; } } @@ -3130,6 +3129,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.1.4