summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-07-17 19:32:00 +0300
committerLars Wirzenius <liw@liw.fi>2018-07-17 19:32:00 +0300
commit024e01883988419d7842e1dbd5cf4ec2baaab19d (patch)
tree1ca762cf91bf8303d291365cc4ebcea66582932c
parent614cc88b4131660f7fa75a62cd29609ed89661ee (diff)
downloadlasku-024e01883988419d7842e1dbd5cf4ec2baaab19d.tar.gz
Fix: how the various numbers are caluclated
-rwxr-xr-xlasku.py30
1 files changed, 25 insertions, 5 deletions
diff --git a/lasku.py b/lasku.py
index 8f9e185..dc56a25 100755
--- a/lasku.py
+++ b/lasku.py
@@ -6,6 +6,9 @@ import sys
import yaml
+def debug(*args):
+ sys.stderr.write('{}\n'.format(' '.join(str(x) for x in args)))
+
def euros(cents):
return '%.02f' % (cents / 100.0)
@@ -13,18 +16,35 @@ def euros(cents):
class Item:
def __init__(self, itemdict):
- self.dict = itemdict
+ self.dict = dict(itemdict)
count = itemdict['count']
- unit_cents = int(itemdict['unit'] * 100)
+ if count == "":
+ return
+
+ unit_cents = int(itemdict['unit'] * 100.0)
vatpc = float(itemdict['vatpc']) / 100.0
self.total_cents = count * unit_cents
- self.vat_cents = int(unit_cents * vatpc)
+
+ self.vat_cents = 0
+ if vatpc > 0:
+ total_cents_with_vat = int(unit_cents / (1.0 - vatpc))
+ self.vat_cents = total_cents_with_vat - unit_cents
+ debug('dict', self.dict)
+ debug('total_cents', self.total_cents)
+ debug('vatpc', vatpc)
+ debug('total_cents_with_vat', total_cents_with_vat)
+ debug('vat_cents', self.vat_cents)
+ debug('calc', int(vatpc * total_cents_with_vat))
+ assert int(total_cents_with_vat * vatpc) == self.vat_cents
+ assert total_cents_with_vat == unit_cents + self.vat_cents
self.dict.update({
+ 'unit_euros': euros(unit_cents),
'total_cents': self.total_cents,
'total': euros(self.total_cents),
+ 'unitwithvat': euros(self.total_cents + self.vat_cents),
'vat_cents': self.vat_cents,
'vat': euros(self.vat_cents),
'vatsum': euros(self.vat_cents * count),
@@ -36,8 +56,8 @@ item_template = (
r'\raggedbottom #number# & '
r'\parbox[t]{5.5cm}{#desc#\\#date#} & '
r'\raggedbottom #count# & '
- r'\raggedbottom #unit# & '
- r'\raggedbottom #vat# & '
+ r'\raggedbottom #unit_euros# & '
+ r'\raggedbottom #unitwithvat# & '
r'\raggedbottom #vatpc#\% & '
r'\raggedbottom #total# & '
r'\raggedbottom #vatsum# & '