diff options
Diffstat (limited to 'lasku.py')
-rwxr-xr-x | lasku.py | 30 |
1 files changed, 25 insertions, 5 deletions
@@ -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# & ' |