From af9275ba649f2660df3c025c825f567b911e7098 Mon Sep 17 00:00:00 2001 From: Klaus-Uwe Mitterer Date: Fri, 12 Feb 2021 18:27:04 +0000 Subject: [PATCH] Implement logo display Version bump --- LICENSE | 2 +- README.rst | 11 +---------- pyinvoice/templates.py | 43 ++++++++++++++++++++++++++++-------------- setup.py | 8 ++++---- 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/LICENSE b/LICENSE index 18aadfd..7c5ddfd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 zhangshine +Copyright (c) 2015 zhangshine, (c) 2021 Kumi Systems e.U. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.rst b/README.rst index a858935..affcd0a 100644 --- a/README.rst +++ b/README.rst @@ -2,17 +2,8 @@ PyInvoice ========= -.. image:: https://api.travis-ci.org/CiCiApp/PyInvoice.svg?branch=master - :target: https://github.com/CiCiApp/PyInvoice - Invoice/Receipt Generator. -Screenshot ----------- - -.. image:: https://ciciapp.github.io/PyInvoice/dist/invoice.png - :target: https://github.com/CiCiApp/PyInvoice - Dependency ---------- * Reportlab @@ -37,7 +28,7 @@ Install .. code-block:: bash - pip install pyinvoice + pip install https://kumig.it/kumisystems/PyInvoice Usage ----- diff --git a/pyinvoice/templates.py b/pyinvoice/templates.py index f966378..fd4b241 100644 --- a/pyinvoice/templates.py +++ b/pyinvoice/templates.py @@ -7,7 +7,7 @@ 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, Spacer +from reportlab.platypus import SimpleDocTemplate, Paragraph, Table, Spacer, Image from pyinvoice.components import SimpleTable, TableWithHeader, PaidStamp from pyinvoice.models import PDFInfo, Item, Transaction, InvoiceInfo, ServiceProviderInfo, ClientInfo @@ -52,6 +52,8 @@ class SimpleInvoice(SimpleDocTemplate): self._story = [] self._bottom_tip = None self._bottom_tip_align = None + self._logo = None + self._build_kwargs = {} @property def items(self): @@ -190,8 +192,8 @@ class SimpleInvoice(SimpleDocTemplate): item.name, Paragraph(item.description, self._defined_styles.get('TableParagraph')), item.units, - item.unit_price, - item.amount + '{0:.2f}'.format(float(item.unit_price)), + '{0:.2f}'.format(item.amount) ) ) item_subtotal += item.amount @@ -221,7 +223,7 @@ class SimpleInvoice(SimpleDocTemplate): # ##### Subtotal ##### rounditem_subtotal = self.getroundeddecimal(item_subtotal, self.precision) item_data.append( - ('Subtotal', '', '', '', rounditem_subtotal) + ('Subtotal', '', '', '', '{0:.2f}'.format(rounditem_subtotal)) ) style.append(('SPAN', (0, sum_start_y_index), (sum_start_x_index, sum_start_y_index))) @@ -232,7 +234,7 @@ class SimpleInvoice(SimpleDocTemplate): tax_total = item_subtotal * (Decimal(str(self._item_tax_rate)) / Decimal('100')) roundtax_total = self.getroundeddecimal(tax_total, self.precision) item_data.append( - ('Vat/Tax ({0}%)'.format(self._item_tax_rate), '', '', '', roundtax_total) + ('Vat/Tax ({0}%)'.format(self._item_tax_rate), '', '', '', '{0:.2f}'.format(roundtax_total)) ) sum_start_y_index += 1 style.append(('SPAN', (0, sum_start_y_index), (sum_start_x_index, sum_start_y_index))) @@ -243,7 +245,7 @@ class SimpleInvoice(SimpleDocTemplate): # Total total = item_subtotal + (tax_total if tax_total else Decimal('0')) roundtotal = self.getroundeddecimal(total, self.precision) - item_data.append(('Total', '', '', '', roundtotal)) + item_data.append(('Total', '', '', '', '{0:.2f}'.format(roundtotal))) sum_start_y_index += 1 style.append(('SPAN', (0, sum_start_y_index), (sum_start_x_index, sum_start_y_index))) style.append(('ALIGN', (0, sum_start_y_index), (sum_end_x_index, -1), 'RIGHT')) @@ -267,7 +269,7 @@ class SimpleInvoice(SimpleDocTemplate): t.transaction_id, Paragraph(t.gateway, self._defined_styles.get('TableParagraph')), self._format_value(t.transaction_datetime), - t.amount, + '{0:.2f}'.format(t.amount), ) for t in self._transactions if isinstance(t, Transaction) ] @@ -298,17 +300,30 @@ class SimpleInvoice(SimpleDocTemplate): ) ) - def finish(self): - self._story = [] + def logo(self, logo): + if isinstance(logo, Image): + self._logo = logo + else: + self._logo = Image(logo) + def _build_logo(self): + if self._logo: + self._logo.hAlign = "LEFT" + self._logo.vAlign = "TOP" + + self._story.append(self._logo) + + def _build_paid_stamp(self): + if self.is_paid: + self._build_kwargs['onFirstPage'] = PaidStamp(3 * inch, -2 * inch) + + def finish(self): + self._build_logo() self._build_invoice_info() self._build_service_provider_and_client_info() self._build_items() self._build_transactions() self._build_bottom_tip() + self._build_paid_stamp() - kwargs = {} - if self.is_paid: - kwargs['onFirstPage'] = PaidStamp(7 * inch, 5.8 * inch) - - self.build(self._story, **kwargs) \ No newline at end of file + self.build(self._story, **self._build_kwargs) \ No newline at end of file diff --git a/setup.py b/setup.py index 6955285..00ed041 100644 --- a/setup.py +++ b/setup.py @@ -16,15 +16,15 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( name='PyInvoice', - version='0.1.7', + version='0.1.8', packages=['pyinvoice', 'tests'], include_package_data=True, license='MIT License', description='Invoice/Receipt generator', long_description=README, - url='https://github.com/CiCiApp/PyInvoice', - author='zhangshine', - author_email='zhangshine0125@gmail.com', + url='https://kumig.it/kumisystems/PyInvoice', + author='Kumi Systems e.U.', + author_email='support@kumi.systems', install_requires=['reportlab'], test_suite='tests', classifiers=[