diff options
Diffstat (limited to 'fracture/__main__.py')
-rw-r--r-- | fracture/__main__.py | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/fracture/__main__.py b/fracture/__main__.py index d0305ab..c51c556 100644 --- a/fracture/__main__.py +++ b/fracture/__main__.py @@ -1,6 +1,7 @@ -from invoice import Invoice, Tax +from invoice import Invoice, Tax, Product import db +from csv import DictWriter import datetime from functools import wraps from argparse import ArgumentParser as ap @@ -27,6 +28,10 @@ def load_config(): conf = ConfigParser() conf.read(confile) + # VAT-types + for k in conf["vat"]: + Product.VATS += (float(conf["vat"][k]),) + # SERIES for k in conf["series"]: Invoice.SERIES[int(k)] = conf["series"][k] @@ -55,10 +60,10 @@ def load_config(): templatefile = path.join(confile, templatefile) # INVOICE LEVEL TAXES (like IRPF in Spain) - tax = [] + tax = () for k in conf["taxes"]: - tax.append(Tax(k, conf.getfloat("taxes",k))) - Invoice.DEFAULT_TAXES = tuple(tax) + tax += (Tax(k, conf.getfloat("taxes",k)),) + Invoice.DEFAULT_TAXES = tax # DATABASE Invoice.DB_FILE = path.join(basedir, "invoice.db") @@ -112,7 +117,26 @@ def new_invoice(): @command def summarize(xlsx=False, year=None, quarter=None): invoices = Invoice.load_by_date(year, quarter) - rows = map(lambda x: x.to_row(), invoices) + rows = sorted((map(lambda x: x.to_row(), invoices)), + key=lambda x: x["type"]) + + keys = list(rows[0].keys()) + for r in rows: + for k in r.keys(): + if k not in keys: + # TODO: + # Inserts all the taxes at the end, but this is not cool + # because it needs information about how is the invoice + # arranged + # Maybe move this to a static function in invoices and call it + # summary and make it work with some logic like: create the + # keys first and then go setting them in order + keys.insert(-1, k) + import sys + wrtr = DictWriter(sys.stdout, keys) + wrtr.writeheader() + for r in rows: + wrtr.writerow(r) if __name__ == "__main__": |