Commit 74e21685 authored by fnux's avatar fnux

Fix floating-point issue on bills (Fix #31)

parent 444d6ded
Pipeline #1404 failed with stage
in 3 minutes and 34 seconds
from django.utils.translation import gettext_lazy as _
import decimal
# Define DecimalField properties, used to represent amounts of money.
AMOUNT_MAX_DIGITS=10
AMOUNT_DECIMALS=2
decimal.getcontext().prec = AMOUNT_DECIMALS
# http://xml.coverpages.org/country3166.html
COUNTRIES = (
('AD', _('Andorra')),
......
......@@ -494,6 +494,10 @@ class BillRecord():
else:
self.one_time_price = 0
# Set decimal context for amount computations.
# XXX: understand why we need +1 here.
decimal.getcontext().prec = AMOUNT_DECIMALS + 1
@property
def recurring_count(self):
# Compute billing delta.
......@@ -531,7 +535,7 @@ class BillRecord():
(_, days_in_month) = monthrange(
self.bill.starting_date.year,
self.bill.starting_date.month)
return days / days_in_month
return round(days / days_in_month, AMOUNT_DECIMALS)
elif self.recurring_period == RecurringPeriod.PER_WEEK:
weeks = ceil(billed_delta / timedelta(week=1))
return weeks
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment