Browse Source

added invoice

Fabian Peter Hammerle 7 years ago
parent
commit
1611b290c9
3 changed files with 63 additions and 2 deletions
  1. 23 0
      finoex/__init__.py
  2. 2 2
      setup.py
  3. 38 0
      tests/test_yaml.py

+ 23 - 0
finoex/__init__.py

@@ -117,6 +117,29 @@ class Sum(ioex.calcex.Figure):
         )
 
 
+class Invoice(_Object, _YamlInitConstructor, _YamlVarsRepresenter):
+
+    yaml_tag = u'!invoice'
+
+    def __init__(self, creditor, invoice_id, invoice_date,
+                 debitor_id, items=None):
+        assert isinstance(creditor, str)
+        self.creditor = creditor
+        assert isinstance(invoice_id, str)
+        self.invoice_id = invoice_id
+        assert (isinstance(invoice_date, datetime.date)
+                or isinstance(invoice_date, datetime.datetime))
+        self.invoice_date = invoice_date
+        assert isinstance(debitor_id, str)
+        self.debitor_id = debitor_id
+        if items:
+            assert isinstance(items, list)
+            assert all([isinstance(i, Item) for i in items])
+            self.items = items
+        else:
+            self.items = []
+
+
 class Order(_Object, _YamlInitConstructor, _YamlVarsRepresenter):
 
     yaml_tag = u'!order'

+ 2 - 2
setup.py

@@ -4,12 +4,12 @@ import glob
 
 setup(
     name = 'finoex',
-    version = '0.2.0',
+    version = '0.3.0',
     # description = '',
     author = 'Fabian Peter Hammerle',
     author_email = 'fabian.hammerle@gmail.com',
     url = 'https://git.hammerle.me/fphammerle/finoex',
-    download_url = 'https://git.hammerle.me/fphammerle/finoex/archive/0.1.2.tar.gz',
+    download_url = 'https://git.hammerle.me/fphammerle/finoex/archive/0.3.0.tar.gz',
     # keywords = [],
     # classifiers = [],
     packages = ['finoex'],

+ 38 - 0
tests/test_yaml.py

@@ -179,6 +179,18 @@ def get_order_c():
             )
     return order
 
+def get_invoice(items = True):
+    inv = finoex.Invoice(
+            creditor = u'platformπ',
+            invoice_id = u'id',
+            invoice_date = datetime.datetime(2016, 5, 8, 0, 18, 17),
+            debitor_id = u'customer',
+            )
+    if items:
+        inv.items.append(get_item_a())
+        inv.items.append(get_item_b())
+    return inv
+
 def get_distance():
     return finoex.Distance(2.4142, u'km')
 
@@ -329,6 +341,19 @@ distance: !distance '3.21 km'
 driver: driver
 name: taxi ride
 price_brutto: !sum '1.23 EUR'
+"""],
+    [get_invoice(), u"""!invoice
+creditor: platformπ
+debitor_id: customer
+invoice_date: 2016-05-08 00:18:17
+invoice_id: id
+items:
+- !item
+  name: item a
+  price_brutto: !sum '1.23 EUR'
+- !item
+  name: item β
+  price_brutto: !sum '20.45 EUR'
 """],
     ])
 def test_to_yaml(source_object, expected_yaml):
@@ -462,6 +487,19 @@ driver: driver
 name: taxi ride
 price_brutto: !sum '1.23 EUR'
 route_map: null
+"""],
+    [get_invoice(), u"""!invoice
+creditor: platformπ
+debitor_id: customer
+invoice_date: 2016-05-08T00:18:17
+invoice_id: id
+items:
+- !item
+  name: item a
+  price_brutto: !sum '1.23 EUR'
+- !item
+  name: item β
+  price_brutto: !sum '20.45 EUR'
 """],
     ])
 def test_from_yaml(expected_object, source_yaml):