Skip to content

Commit 5468dbc

Browse files
mrsaicharan1iamareebjamal
authored andcommitted
fix: Made ticket invoice generation similar to tickets (#5886)
Added serving route and static page Add billing info invoice
1 parent 9317162 commit 5468dbc

File tree

4 files changed

+156
-2
lines changed

4 files changed

+156
-2
lines changed

app/api/auth.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,3 +304,24 @@ def ticket_attendee_authorized(order_identifier):
304304
return ForbiddenError({'source': ''}, 'Unauthorized Access').respond()
305305
else:
306306
return ForbiddenError({'source': ''}, 'Authentication Required to access ticket').respond()
307+
308+
309+
@ticket_blueprint.route('/orders/invoices/<string:order_identifier>')
310+
@jwt_required()
311+
def order_invoices(order_identifier):
312+
if current_user:
313+
try:
314+
order = Order.query.filter_by(identifier=order_identifier).first()
315+
user_id = order.user.id
316+
except NoResultFound:
317+
return NotFoundError({'source': ''}, 'Order Invoice not found').respond()
318+
if current_user.id == user_id:
319+
key = UPLOAD_PATHS['pdf']['order'].format(identifier=order_identifier)
320+
file_path = '../generated/invoices/{}/{}/'.format(key, generate_hash(key)) + order_identifier + '.pdf'
321+
response = make_response(send_file(file_path))
322+
response.headers['Content-Disposition'] = 'attachment; filename=invoice-%s.zip' % order_identifier
323+
return response
324+
else:
325+
return ForbiddenError({'source': ''}, 'Unauthorized Access').respond()
326+
else:
327+
return ForbiddenError({'source': ''}, 'Authentication Required to access Invoice').respond()

app/api/helpers/order.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,14 @@ def set_expiry_for_order(order, override=False):
4747

4848
def create_pdf_tickets_for_holder(order):
4949
"""
50-
Create tickets for the holders of an order.
50+
Create tickets and invoices for the holders of an order.
5151
:param order: The order for which to create tickets for.
5252
"""
5353
if order.status == 'completed':
5454
pdf = create_save_pdf(render_template('pdf/ticket_purchaser.html', order=order),
5555
UPLOAD_PATHS['pdf']['ticket_attendee'],
5656
dir_path='/static/uploads/pdf/tickets/', identifier=order.identifier, upload_dir='generated/tickets/')
57+
5758
order.tickets_pdf_url = pdf
5859

5960
for holder in order.ticket_holders:
@@ -67,6 +68,11 @@ def create_pdf_tickets_for_holder(order):
6768
pdf = order.tickets_pdf_url
6869
holder.pdf_url = pdf
6970
save_to_db(holder)
71+
72+
# create order invoices pdf
73+
create_save_pdf(render_template('pdf/order_invoice.html', order=order, event=order.event),
74+
UPLOAD_PATHS['pdf']['order'], dir_path='/static/uploads/pdf/tickets/',
75+
identifier=order.identifier, upload_dir='generated/invoices/')
7076
save_to_db(order)
7177

7278

app/api/helpers/storage.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@
7979
'system_image': 'event_topic/{event_topic_id}/system_image'
8080
},
8181
'pdf': {
82-
'ticket_attendee': 'attendees/tickets/pdf/{identifier}'
82+
'ticket_attendee': 'attendees/tickets/pdf/{identifier}',
83+
'order': 'orders/invoices/pdf/{identifier}'
8384
}
8485
}
8586

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title> {{ ("Order Invoice") }}</title>
6+
<style type="text/css">
7+
{% include 'bootstrap/bootstrap_pdf.css' %}
8+
table th {
9+
text-align: left;
10+
}
11+
12+
table td {
13+
text-align: left;
14+
border-spacing: 1em;
15+
}
16+
17+
table {
18+
margin-top: 20px;
19+
border-collapse: separate;
20+
}
21+
22+
.total-row {
23+
margin-top: 25px;
24+
}
25+
26+
.order-total {
27+
margin-right: 50px;
28+
}
29+
30+
tr.padded td{
31+
padding-top : 40px;
32+
}
33+
</style>
34+
</head>
35+
<body id="body">
36+
<h3 style="text-align:center;">{{ ("Order Invoice") }}</h3>
37+
<br>
38+
<table class="table with-datatable" id="orders-table" width="100%">
39+
<thead>
40+
<tr>
41+
<th>
42+
{{ ("Order") }}
43+
</th>
44+
<th>
45+
{{ ("Order Details") }}
46+
</th>
47+
<th>
48+
{{ ("Billing Info") }}
49+
</th>
50+
</tr>
51+
</thead>
52+
<tbody>
53+
{% if order.status != "deleted" %}
54+
<tr class="padded">
55+
<td><br>
56+
Order Number :<br>
57+
Order By :<br>
58+
Order Status :<br>
59+
Quantity :<br>
60+
Total Amount :<br>
61+
Payment Mode :<br>
62+
Discount Code :<br>
63+
</td>
64+
<td><br>
65+
<strong>{{ order.get_invoice_number() }}</strong><br>
66+
{% if order.user and order.user.first_name and order.user.last_name %}
67+
{{ order.user.fullname }}
68+
{% elif order.user %}
69+
{{ order.user.email }}
70+
{% else %}
71+
{{ ('Information unavailable') }}
72+
{% endif %}<br>
73+
{% if order.status == 'completed' %}
74+
{{ order.status | capitalize }}
75+
{% elif order.status == 'pending' or order.status == 'initialized' %}
76+
{{ ("Pending") }}
77+
{% elif order.status == 'placed' %}
78+
{{ order.status | capitalize }}
79+
{% elif order.status == 'cancelled' %}
80+
{{ order.status | capitalize }}
81+
{% else %}
82+
{{ order.status | capitalize }}
83+
{% endif %}<br>
84+
{{ order.tickets_count }}<br>
85+
{{ event.payment_currency | currency_symbol }}{{ order.amount | money }}<br>
86+
{% if order.status == 'completed' %}
87+
{{ order.paid_via | capitalize }}
88+
{% else %}
89+
{{ ('Payment pending') }}
90+
{% endif %}<br>
91+
{% if order.discount_code %}
92+
{{ order.discount_code.code }}<br>
93+
{% else %}
94+
{{ ('NA') }}
95+
{% endif %}<br>
96+
</td>
97+
{% if order.is_billing_enabled %}
98+
<td style="text-align:center;"><br>
99+
<strong>
100+
Company :<br>
101+
Tax Info :<br>
102+
Address :<br>
103+
City :<br>
104+
State/Province :<br>
105+
Zip Code: <br>
106+
Country: <br>
107+
</strong>
108+
</td>
109+
<td><br>
110+
<strong>
111+
{{ order.company }}<br>
112+
{{ order.tax_business_info }}<br>
113+
{{ order.address }}<br>
114+
{{ order.city }}<br>
115+
{{ order.state }}<br>
116+
{{ order.zipcode }}<br>
117+
{{ order.country }}<br>
118+
</strong>
119+
</td>
120+
{% endif %}
121+
</tr>
122+
{% endif %}
123+
</tbody>
124+
</table>
125+
</body>
126+
</html>

0 commit comments

Comments
 (0)