From 57ef4a0b5f816efb22691d9f9868b497a8f250a1 Mon Sep 17 00:00:00 2001
From: Ekaitz Zarraga <ekaitz@elenq.tech>
Date: Tue, 24 Nov 2020 22:48:19 +0100
Subject: handle rounds correctly

---
 fracture/invoice.py | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/fracture/invoice.py b/fracture/invoice.py
index 0ccfec2..a27d50a 100644
--- a/fracture/invoice.py
+++ b/fracture/invoice.py
@@ -31,32 +31,33 @@ class Product:
             price_unit=0.0, vat = 0.21):
         if len(description) == 0:
             raise ValueError("Product: No description provided")
+
         self.description = description
-        self.units       = units
-        self.price_unit  = price_unit
+        self.units       = Conf.round(units)
+        self.price_unit  = Conf.round(price_unit)
         if vat in self.VATS:
             self.vat     = vat
         else:
             raise ValueError("Product: No valid VAT. Valid are:"+\
                     str(Product.VATS))
     @property
-    def total(self):
-        return self.base+self.charged_vat
-    @property
     def base(self):
-        return self.price_unit * self.units
+        return Conf.round(self.price_unit * self.units)
+    @property
+    def total(self):
+        return Conf.round(self.base+self.charged_vat)
     @property
     def charged_vat(self):
-        return self.base * self.vat
+        return Conf.round(self.base * self.vat)
     def to_dict(self):
         return {
             "description": self.description,
             "units":       self.units,
-            "price-unit":  Conf.round(self.price_unit),
+            "price-unit":  self.price_unit,
             "vat":         self.vat,
-            "vat-charged": Conf.round(self.charged_vat),
-            "base":        Conf.round(self.base),
-            "total":       Conf.round(self.total)
+            "vat-charged": self.charged_vat,
+            "base":        self.base,
+            "total":       self.total
         }
 
 class Customer:
@@ -373,8 +374,8 @@ class Invoice:
             ps = tuple(ps)
             res += ({
                     "vat":      vat,
-                    "base":     Conf.round(sum(p.base        for p in ps)),
-                    "charged":  Conf.round(sum(p.charged_vat for p in ps)),
+                    "base":     sum(p.base        for p in ps),
+                    "charged":  sum(p.charged_vat for p in ps),
             },)
         return res
 
@@ -420,8 +421,8 @@ class Invoice:
 
         for vat, ps in vs:
             ps = tuple(ps)
-            row[to_base_key(vat)] = Conf.round(sum(p.base        for p in ps))
-            row[to_vat_key(vat)]  = Conf.round(sum(p.charged_vat for p in ps))
+            row[to_base_key(vat)] = sum(p.base        for p in ps)
+            row[to_vat_key(vat)]  = sum(p.charged_vat for p in ps)
 
 
         to_tax_key = lambda tax: tax.name + "("+ str(tax.ratio*100) +"%)"
-- 
cgit v1.2.3