Skip to content

Commit 2d8025e

Browse files
author
Hieu Lam - TMA
authored
fix-9127: Add the unique ticket code into the downlad CSV file (#9133)
* fix-9127: Add the unique ticket code into the downlad CSV file * fix-9127: Add the unique ticket code into the downlad CSV file * fix-9127: Add the unique ticket code into the downlad CSV file
1 parent 7b0fdd1 commit 2d8025e

File tree

5 files changed

+60
-5
lines changed

5 files changed

+60
-5
lines changed

app/api/helpers/csv_jobs_util.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def export_orders_csv(orders):
8282
return rows
8383

8484

85-
def get_order_ticket_data(order, ticket):
85+
def get_order_ticket_data(attendee, order, ticket):
8686
"""Get order ticket data"""
8787
data = {}
8888
if not order:
@@ -104,6 +104,12 @@ def get_order_ticket_data(order, ticket):
104104
'City': '',
105105
'Zipcode': '',
106106
}
107+
ticketId = ''
108+
if order.identifier:
109+
if not attendee.identifier:
110+
ticketId = order.identifier + '-' + attendee.get_new_identifier()
111+
else:
112+
ticketId = order.identifier + '-' + attendee.identifier
107113

108114
data = {
109115
'Order#': str(order.get_invoice_number()),
@@ -113,7 +119,7 @@ def get_order_ticket_data(order, ticket):
113119
'Status': str(order.status) if order.status else '-',
114120
'Payment Type': str(order.paid_via) if order.paid_via else '',
115121
'Payment Mode': str(order.payment_mode) if order.payment_mode else '',
116-
'Ticket ID': str(order.identifier) if order.identifier else '',
122+
'Ticket ID': ticketId,
117123
}
118124

119125
if ticket:
@@ -162,7 +168,7 @@ def get_ticket_data(ticket):
162168

163169
def get_attendee_data(attendee, custom_forms, attendee_form_dict):
164170
"""Get attendee data from attendee object"""
165-
order_ticket_data = get_order_ticket_data(attendee.order, attendee.ticket)
171+
order_ticket_data = get_order_ticket_data(attendee, attendee.order, attendee.ticket)
166172
data = {
167173
**order_ticket_data,
168174
'Email': '',

app/api/schema/attendees.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def validate_json(self, data, original_data):
8585
is_discount_applied = fields.Boolean(allow_none=True)
8686
is_access_code_applied = fields.Boolean(allow_none=True)
8787
tag_id = fields.Int(allow_none=True)
88+
identifier = fields.Str(dump_only=True)
8889
event = Relationship(
8990
self_view='v1.attendee_event',
9091
self_view_kwargs={'id': '<id>'},

app/models/ticket_holder.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import base64
2+
import binascii
3+
import os
24
from dataclasses import dataclass
35
from datetime import datetime
46
from io import BytesIO
@@ -11,6 +13,11 @@
1113
from app.models.base import SoftDeletionModel
1214

1315

16+
def get_new_id():
17+
"""Generate a new id for a ticket holder."""
18+
return str(binascii.b2a_hex(os.urandom(3)), 'utf-8')
19+
20+
1421
@dataclass(init=False, unsafe_hash=True)
1522
class TicketHolder(SoftDeletionModel):
1623
__tablename__ = "ticket_holders"
@@ -90,6 +97,7 @@ class TicketHolder(SoftDeletionModel):
9097
is_access_code_applied: bool = db.Column(db.Boolean, default=False)
9198
tag_id: int = db.Column(db.Integer, db.ForeignKey('tags.id', ondelete='CASCADE'))
9299
tag = db.relationship('Tag', backref='ticket_holders')
100+
identifier = db.Column(db.String, default=get_new_id)
93101

94102
@property
95103
def name(self):
@@ -108,7 +116,11 @@ def qr_code(self):
108116
box_size=10,
109117
border=0,
110118
)
111-
qr.add_data(self.order.identifier)
119+
identifier = self.identifier
120+
if not self.identifier:
121+
identifier = get_new_id()
122+
123+
qr.add_data(self.order.identifier + "-" + identifier)
112124
qr.make(fit=True)
113125
img = qr.make_image()
114126

@@ -143,3 +155,8 @@ def pdf_url_path(self) -> str:
143155
+ self.order.identifier
144156
+ '.pdf'
145157
)
158+
159+
@staticmethod
160+
def get_new_identifier():
161+
"""Generate a new identifier for the ticket holder."""
162+
return str(binascii.b2a_hex(os.urandom(3)), 'utf-8')

app/templates/pdf/attendees_pdf.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ <h3 style="text-align:center;">{{ holders[0].event.name }} - {{ ("Attendees List
128128
{% else %}
129129
{{ "Free Ticket" }} <br>
130130
{% endif %}
131-
{{ holder.order.identifier }}<br>
131+
{% if holder.identifier %}
132+
{{ holder.order.identifier }} - {{ holder.identifier }} <br>
133+
{% else %}
134+
{{ holder.order.identifier }} - {{ holder.get_new_identifier()}}<br>
135+
{% endif %}
132136
{{ holder.ticket.name }}<br>
133137
{% if holder.is_checked_in %}
134138
{{ ("Checked In") }}<br>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""empty message
2+
3+
Revision ID: e7e952b58504
4+
Revises: 414c776ae509
5+
Create Date: 2024-03-23 08:47:20.614874
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = 'e7e952b58504'
15+
down_revision = '414c776ae509'
16+
17+
18+
def upgrade():
19+
# ### commands auto generated by Alembic - please adjust! ###
20+
op.add_column('ticket_holders', sa.Column('identifier', sa.String(), nullable=True))
21+
# ### end Alembic commands ###
22+
23+
24+
def downgrade():
25+
# ### commands auto generated by Alembic - please adjust! ###
26+
op.drop_column('ticket_holders', 'identifier')
27+
# ### end Alembic commands ###

0 commit comments

Comments
 (0)