diff --git a/.gitignore b/.gitignore index a5effd7..20b9a5b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ __pycache__/ env/ build/ develop-eggs/ -dist/ +#dist/ downloads/ eggs/ .eggs/ diff --git a/pyinvoice/templates.py b/pyinvoice/templates.py index 1fca116..306d760 100644 --- a/pyinvoice/templates.py +++ b/pyinvoice/templates.py @@ -1,12 +1,13 @@ from __future__ import unicode_literals from datetime import datetime, date from decimal import Decimal + from reportlab.lib import colors from reportlab.lib.enums import TA_CENTER, TA_RIGHT from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import inch -from reportlab.platypus import SimpleDocTemplate, Paragraph, Table +from reportlab.platypus import SimpleDocTemplate, Paragraph, Table, Spacer from pyinvoice.components import SimpleTable, TableWithHeader, PaidStamp from pyinvoice.models import PDFInfo, Item, Transaction, InvoiceInfo, ServiceProviderInfo, ClientInfo @@ -46,6 +47,8 @@ class SimpleInvoice(SimpleDocTemplate): self._item_tax_rate = None self._transactions = [] self._story = [] + self._bottom_tip = None + self._bottom_tip_align = None @property def items(self): @@ -66,6 +69,10 @@ class SimpleInvoice(SimpleDocTemplate): if isinstance(t, Transaction): self._transactions.append(t) + def set_bottom_tip(self, text, align=TA_CENTER): + self._bottom_tip = text + self._bottom_tip_align = align + @staticmethod def __format_value(value): if isinstance(value, datetime): @@ -244,6 +251,20 @@ class SimpleInvoice(SimpleDocTemplate): transaction_table_data.insert(0, ('Transaction id', 'Gateway', 'Transaction date', 'Amount')) self._story.append(TableWithHeader(transaction_table_data, horizontal_align='LEFT')) + def __build_bottom_tip(self): + if self._bottom_tip: + self._story.append(Spacer(5, 5)) + self._story.append( + Paragraph( + self._bottom_tip, + ParagraphStyle( + 'BottomTip', + parent=self._defined_styles.get('Normal'), + alignment=self._bottom_tip_align + ) + ) + ) + def finish(self): self._story = [] @@ -251,5 +272,6 @@ class SimpleInvoice(SimpleDocTemplate): self.__build_service_provider_and_client_info() self.__build_items() self.__build_transactions() + self.__build_bottom_tip() self.build(self._story, onFirstPage=PaidStamp(7 * inch, 5.8 * inch) if self.is_paid else None) \ No newline at end of file diff --git a/setup.py b/setup.py index c647ea9..965fc27 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,9 @@ #!/usr/bin/env python -from setuptools import setup import os +from setuptools import setup + + with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme: README = readme.read() diff --git a/tests/test_templates.py b/tests/test_templates.py index d04042f..4cffe12 100644 --- a/tests/test_templates.py +++ b/tests/test_templates.py @@ -1,6 +1,6 @@ import os import unittest -from datetime import datetime +from datetime import datetime, date from pyinvoice.models import InvoiceInfo, ServiceProviderInfo, ClientInfo, Item, Transaction from pyinvoice.templates import SimpleInvoice @@ -11,7 +11,8 @@ class TestSimpleInvoice(unittest.TestCase): self.file_base_dir = os.path.dirname(os.path.realpath(__file__)) def test_simple(self): - doc = SimpleInvoice(os.path.join(self.file_base_dir, 'fixtures/dist/simple.pdf')) + invoice_path = os.path.join(self.file_base_dir, 'fixtures/dist/simple.pdf') + doc = SimpleInvoice(invoice_path) doc.is_paid = True @@ -41,9 +42,20 @@ class TestSimpleInvoice(unittest.TestCase): doc.add_item(Item('Item', 'Item desc', 1, '1.1')) doc.add_item(Item('Item', 'Item desc', 2, '2.2')) doc.add_item(Item('Item', 'Item desc', 3, '3.3')) + + items = doc.items + self.assertEqual(len(items), 3) + doc.set_item_tax_rate(20) # 20% doc.add_transaction(Transaction('Paypal', 111, datetime.now(), 1)) - doc.add_transaction(Transaction('Strip', 222, datetime.now(), 2)) + doc.add_transaction(Transaction('Strip', 222, date.today(), 2)) - doc.finish() \ No newline at end of file + transactions = doc.transactions + self.assertEqual(len(transactions), 2) + + doc.set_bottom_tip("Email: example@example.com
Don't hesitate to contact us for any questions.") + + doc.finish() + + self.assertTrue(os.path.exists(invoice_path)) \ No newline at end of file