@@ -83,24 +83,12 @@ def _profile_sections(profile):
8383 [line for line in to_info if line .strip ()])
8484
8585
86- def generate_invoice (buffer , invoice_data ):
87- """Create the PDF invoice into ``buffer``."""
88- doc = SimpleDocTemplate (
89- buffer ,
90- pagesize = LETTER ,
91- rightMargin = 40 ,
92- leftMargin = 40 ,
93- topMargin = 40 ,
94- bottomMargin = 40 ,
95- )
96- styles = getSampleStyleSheet ()
97- styles .add (ParagraphStyle (name = "RightAlign" , parent = styles ["Normal" ], alignment = TA_RIGHT ))
98- styles .add (ParagraphStyle (name = "Heading" , parent = styles ["Heading1" ], fontSize = 16 , spaceAfter = 10 ))
99- styles .add (ParagraphStyle (name = "SubHeading" , parent = styles ["Heading2" ], fontSize = 12 , spaceAfter = 8 ))
100-
101- elements = []
102- elements .append (Paragraph ("Recharge Services Invoice" , styles ["Heading" ]))
103- elements .append (Spacer (1 , 12 ))
86+ def _header_elements (invoice_data , styles ):
87+ """Return flowables for the invoice header section."""
88+ elements = [
89+ Paragraph ("Recharge Services Invoice" , styles ["Heading" ]),
90+ Spacer (1 , 12 ),
91+ ]
10492
10593 header_table_data = [
10694 [
@@ -113,8 +101,7 @@ def generate_invoice(buffer, invoice_data):
113101 ],
114102 ]
115103 header_table = Table (header_table_data , colWidths = [250 , 250 ])
116- elements .append (header_table )
117- elements .append (Spacer (1 , 20 ))
104+ elements .extend ([header_table , Spacer (1 , 20 )])
118105
119106 elements .append (Paragraph ("<b>From (Billed By)</b>" , styles ["SubHeading" ]))
120107 for line in invoice_data ["from_info" ]:
@@ -126,7 +113,12 @@ def generate_invoice(buffer, invoice_data):
126113 elements .append (Paragraph (line , styles ["Normal" ]))
127114 elements .append (Spacer (1 , 20 ))
128115
129- elements .append (Paragraph ("<b>Invoice Summary</b>" , styles ["SubHeading" ]))
116+ return elements
117+
118+
119+ def _table_elements (invoice_data , styles ):
120+ """Return flowables for the invoice summary table."""
121+ elements = [Paragraph ("<b>Invoice Summary</b>" , styles ["SubHeading" ])]
130122 table_data = [["Description" , "Billing Period" , "Qty / Units" , "Rate" , "Amount" ]]
131123 for item in invoice_data ["items" ]:
132124 table_data .append (
@@ -155,18 +147,21 @@ def generate_invoice(buffer, invoice_data):
155147 ]
156148 )
157149 )
158- elements .append ( table )
159- elements . append ( Spacer ( 1 , 20 ))
150+ elements .extend ([ table , Spacer ( 1 , 20 )] )
151+ return elements
160152
161- elements .append (Paragraph ("Payment Instructions" , styles ["SubHeading" ]))
153+
154+ def _note_elements (invoice_data , styles ):
155+ """Return flowables for payment instructions and notes."""
156+ elements = [Paragraph ("Payment Instructions" , styles ["SubHeading" ])]
162157 for line in invoice_data ["bank_info" ]:
163158 elements .append (Paragraph (line , styles ["Normal" ]))
164159 elements .append (Spacer (1 , 20 ))
165160
166161 elements .append (Paragraph ("Notes" , styles ["SubHeading" ]))
167162 elements .append (Paragraph (invoice_data ["notes" ], styles ["Normal" ]))
168-
169163 elements .append (Spacer (1 , 20 ))
164+
170165 elements .append (
171166 Paragraph (
172167 "Generated by Recharge Management System on "
@@ -175,6 +170,28 @@ def generate_invoice(buffer, invoice_data):
175170 styles ["Normal" ],
176171 )
177172 )
173+ return elements
174+
175+
176+ def generate_invoice (buffer , invoice_data ):
177+ """Create the PDF invoice into ``buffer``."""
178+ doc = SimpleDocTemplate (
179+ buffer ,
180+ pagesize = LETTER ,
181+ rightMargin = 40 ,
182+ leftMargin = 40 ,
183+ topMargin = 40 ,
184+ bottomMargin = 40 ,
185+ )
186+ styles = getSampleStyleSheet ()
187+ styles .add (ParagraphStyle (name = "RightAlign" , parent = styles ["Normal" ], alignment = TA_RIGHT ))
188+ styles .add (ParagraphStyle (name = "Heading" , parent = styles ["Heading1" ], fontSize = 16 , spaceAfter = 10 ))
189+ styles .add (ParagraphStyle (name = "SubHeading" , parent = styles ["Heading2" ], fontSize = 12 , spaceAfter = 8 ))
190+
191+ elements = []
192+ elements .extend (_header_elements (invoice_data , styles ))
193+ elements .extend (_table_elements (invoice_data , styles ))
194+ elements .extend (_note_elements (invoice_data , styles ))
178195
179196 doc .build (elements )
180197
0 commit comments