summaryrefslogtreecommitdiff
path: root/fracture/invoice.py
diff options
context:
space:
mode:
Diffstat (limited to 'fracture/invoice.py')
-rw-r--r--fracture/invoice.py44
1 files changed, 17 insertions, 27 deletions
diff --git a/fracture/invoice.py b/fracture/invoice.py
index d795340..295b7a8 100644
--- a/fracture/invoice.py
+++ b/fracture/invoice.py
@@ -1,5 +1,6 @@
import json
import sqlite3
+from itertools import groupby
from datetime import date, datetime, timedelta
from configparser import ConfigParser
from collections import OrderedDict
@@ -386,41 +387,30 @@ class Invoice:
def to_row(self):
row = OrderedDict(
- type = self.type,
- id = self.id,
- date = self.date.strftime("%Y-%m-%d"),
- customer_id = self.customer.id,
- customer_name = self.customer.name,
+ type = self.type,
+ id = self.id,
+ date = self.date.strftime("%Y-%m-%d"),
+ customer_id = self.customer.id,
+ customer_name = self.customer.name,
+ base_imp_total = Conf.round(self.base),
+ total = Conf.round(self.total),
)
- total_base = 0
- total_charged = 0
- vats = sorted(Product.VATS)
- to_base_key = lambda v: "base("+str(v*100)+"%)"
- to_vat_key = lambda v: "VAT("+str(v*100)+"%)"
- for vat in vats:
- ps = filter(lambda p: p.vat == vat, self.products)
+ to_base_key = lambda v: "base("+str(v*100)+"%)"
+ to_vat_key = lambda v: "VAT("+str(v*100)+"%)"
+ pvat = lambda p: p.vat
- vat_base = 0
- charged_vat = 0
- for product in ps:
- vat_base += product.base
- charged_vat += product.charged_vat
- row[to_base_key(vat)] = round(vat_base, Conf.CURRENCY_DECIMAL)
- row[to_vat_key(vat)] = round(charged_vat, Conf.CURRENCY_DECIMAL)
+ vs = groupby(sorted(self.products, key=pvat), key=pvat)
- total_base += vat_base
- total_charged += vat_base + charged_vat
+ 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["base(TOTAL)"] = round(total_base, Conf.CURRENCY_DECIMAL)
to_tax_key = lambda tax: tax.name + "("+ str(tax.ratio*100) +"%)"
for i in self.taxes:
- tax_amount = i.ratio * total_base
+ tax_amount = i.ratio * self.base
row[to_tax_key(i)] = round(tax_amount, Conf.CURRENCY_DECIMAL)
- total_charged += tax_amount
-
- row["TOTAL"] = round(total_charged, Conf.CURRENCY_DECIMAL)
-
return row