test client info

This commit is contained in:
zhangshine 2015-06-11 21:52:06 +08:00
parent c318180f48
commit 6dccb3927a
3 changed files with 59 additions and 12 deletions

View file

@ -92,7 +92,7 @@ class ClientInfo(AddressInfo):
:type country: str or unicode or None
:type post_code: str or unicode or None
:type email: str or unicode or None
:type post_code: str or unicode or None
:type client_id: str or unicode or int or None
"""
super(ClientInfo, self).__init__(name, street, city, state, country, post_code)
self.email = email

View file

@ -8,7 +8,6 @@ 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.doctemplate import _doNothing
from pyinvoice.components import SimpleTable, TableWithHeader, PaidStamp
from pyinvoice.models import PDFInfo, Item, Transaction, InvoiceInfo, ServiceProviderInfo, ClientInfo
@ -125,26 +124,29 @@ class SimpleInvoice(SimpleDocTemplate):
self._story.append(SimpleTable(service_provider_info_data, horizontal_align='RIGHT'))
def _client_info_data(self):
if not isinstance(self.client_info, ClientInfo):
return []
props = [('name', 'Name'), ('street', 'Street'), ('city', 'City'), ('state', 'State'),
('country', 'Country'), ('post_code', 'Post code'), ('email', 'Email'), ('client_id', 'Client id')]
return self._attribute_to_table_data(self.client_info, props)
def _build_client_info(self):
# ClientInfo
if isinstance(self.client_info, ClientInfo):
self._story.append(
Paragraph('Client', self._defined_styles.get('Heading1'))
)
self._story.append(
SimpleTable(self._client_info_data(), horizontal_align='LEFT')
)
client_info_data = self._client_info_data()
if client_info_data:
self._story.append(Paragraph('Client', self._defined_styles.get('Heading1')))
self._story.append(SimpleTable(client_info_data, horizontal_align='LEFT'))
def _build_service_provider_and_client_info(self):
if isinstance(self.service_provider_info, ServiceProviderInfo) and isinstance(self.client_info, ClientInfo):
# Merge Table
table_data = [
[Paragraph('Service Provider', self._defined_styles.get('Heading1')), '', '', Paragraph('Client', self._defined_styles.get('Heading1')), '']
[
Paragraph('Service Provider', self._defined_styles.get('Heading1')), '',
'',
Paragraph('Client', self._defined_styles.get('Heading1')), ''
]
]
table_style = [
('SPAN', (0, 0), (1, 0)),
@ -288,4 +290,8 @@ class SimpleInvoice(SimpleDocTemplate):
self._build_transactions()
self._build_bottom_tip()
self.build(self._story, onFirstPage=PaidStamp(7 * inch, 5.8 * inch) if self.is_paid else _doNothing)
kwargs = {}
if self.is_paid:
kwargs['onFirstPage'] = PaidStamp(7 * inch, 5.8 * inch)
self.build(self._story, **kwargs)

View file

@ -211,3 +211,44 @@ class TestSimpleInvoice(unittest.TestCase):
invoice.finish()
self.assertTrue(os.path.exists(invoice_path))
def test_client_info(self):
invoice_path = os.path.join(self.file_base_dir, 'client_info.pdf')
if os.path.exists(invoice_path):
os.remove(invoice_path)
invoice = SimpleInvoice(invoice_path)
# Before add client info
info_data = invoice._client_info_data()
self.assertEqual(info_data, [])
# Empty info
invoice.client_info = ClientInfo()
info_data = invoice._client_info_data()
self.assertEqual(info_data, [])
invoice.client_info = ClientInfo(
name='Client ccc',
street='Street sss',
city='City ccc',
state='State sss',
country='Country ccc',
post_code='Post code ppp',
email='Email@example.com',
client_id=3214
)
# After add client info
info_data = invoice._client_info_data()
self.assertEqual(len(info_data), 8)
self.assertEqual(info_data[0][0], 'Name:')
self.assertEqual(info_data[0][1], 'Client ccc')
self.assertEqual(info_data[6][0], 'Email:')
self.assertEqual(info_data[6][1], 'Email@example.com')
self.assertEqual(info_data[7][0], 'Client id:')
self.assertEqual(info_data[7][1], 3214)
invoice.finish()
self.assertTrue(os.path.exists(invoice_path))