Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 32 additions & 63 deletions app/api/event_copy.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from app.models.ticket import Ticket
from app.models.track import Track
from app.models.users_events_role import UsersEventsRoles
from app.models.tax import Tax

event_copy = Blueprint('event_copy', __name__, url_prefix='/v1/events')

Expand All @@ -23,6 +24,14 @@ def start_sponsor_logo_generation_task(event_id):
from .helpers.tasks import sponsor_logos_url_task
sponsor_logos_url_task.delay(event_id=event_id)


def copy_to_event(object, event):
db.session.expunge(object) # expunge the object
make_transient(object)
object.event_id = event.id
delattr(object, 'id')
save_to_db(object)

@event_copy.route('/<identifier>/copy', methods=['POST'])
def create_event_copy(identifier):
id = 'identifier'
Expand All @@ -36,97 +45,57 @@ def create_event_copy(identifier):
return abort(
make_response(jsonify(error="Access Forbidden"), 403)
)
tickets = Ticket.query.filter_by(event_id=event.id).all()
social_links = SocialLink.query.filter_by(event_id=event.id).all()
sponsors = Sponsor.query.filter_by(event_id=event.id).all()
microlocations = Microlocation.query.filter_by(event_id=event.id).all()
tracks = Track.query.filter_by(event_id=event.id).all()
custom_forms = CustomForms.query.filter_by(event_id=event.id).all()
discount_codes = DiscountCode.query.filter_by(event_id=event.id).all()
speaker_calls = SpeakersCall.query.filter_by(event_id=event.id).all()
user_event_roles = UsersEventsRoles.query.filter_by(event_id=event.id).all()
tickets = Ticket.query.filter_by(event_id=event.id, deleted_at=None).all()
social_links = SocialLink.query.filter_by(event_id=event.id, deleted_at=None).all()
sponsors = Sponsor.query.filter_by(event_id=event.id, deleted_at=None).all()
microlocations = Microlocation.query.filter_by(event_id=event.id, deleted_at=None).all()
tracks = Track.query.filter_by(event_id=event.id, deleted_at=None).all()
custom_forms = CustomForms.query.filter_by(event_id=event.id, deleted_at=None).all()
discount_codes = DiscountCode.query.filter_by(event_id=event.id, deleted_at=None).all()
speaker_calls = SpeakersCall.query.filter_by(event_id=event.id, deleted_at=None).all()
user_event_roles = UsersEventsRoles.query.filter_by(event_id=event.id, deleted_at=None).all()
taxes = Tax.query.filter_by(event_id=event.id, deleted_at=None).all()

db.session.expunge(event) # expunge the object from session
make_transient(event)
delattr(event, 'id')
event.identifier = get_new_event_identifier()
save_to_db(event)

# Ensure tax information is copied
for tax in taxes:
copy_to_event(tax, event)

# Removes access_codes, order_tickets, ticket_tags for the new tickets created.
for ticket in tickets:
ticket_id = ticket.id
db.session.expunge(ticket) # expunge the object from session
make_transient(ticket)
ticket.event_id = event.id
delattr(ticket, 'id')
save_to_db(ticket)
copy_to_event(ticket, event)

for link in social_links:
link_id = link.id
db.session.expunge(link) # expunge the object from session
make_transient(link)
link.event_id = event.id
delattr(link, 'id')
save_to_db(link)
copy_to_event(link, event)

for sponsor in sponsors:
sponsor_id = sponsor.id
db.session.expunge(sponsor) # expunge the object from session
make_transient(sponsor)
sponsor.event_id = event.id
delattr(sponsor, 'id')
save_to_db(sponsor)
copy_to_event(sponsor, event)

start_sponsor_logo_generation_task(event.id)

for location in microlocations:
location_id = location.id
db.session.expunge(location) # expunge the object from session
make_transient(location)
location.event_id = event.id
delattr(location, 'id')
save_to_db(location)
copy_to_event(location, event)

# No sessions are copied for new tracks
for track in tracks:
track_id = track.id
db.session.expunge(track) # expunge the object from session
make_transient(track)
track.event_id = event.id
delattr(track, 'id')
save_to_db(track)
copy_to_event(track, event)

for call in speaker_calls:
call_id = call.id
db.session.expunge(call) # expunge the object from session
make_transient(call)
call.event_id = event.id
delattr(call, 'id')
save_to_db(call)
copy_to_event(call, event)

for code in discount_codes:
code_id = code.id
db.session.expunge(code) # expunge the object from session
make_transient(code)
code.event_id = event.id
delattr(code, 'id')
save_to_db(code)
copy_to_event(code, event)

for form in custom_forms:
form_id = form.id
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@uds5501 you missed the first step in the function?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which is unneeded. I don't see form_id being used anywhere?

db.session.expunge(form) # expunge the object from session
make_transient(form)
form.event_id = event.id
delattr(form, 'id')
save_to_db(form)
copy_to_event(form, event)

for user_role in user_event_roles:
user_role_id = user_role.id
db.session.expunge(user_role)
make_transient(user_role)
user_role.event_id = event.id
delattr(user_role, 'id')
save_to_db(user_role)
copy_to_event(user_role, event)

return jsonify({
'id': event.id,
Expand Down