1515from app .models .ticket import Ticket
1616from app .models .track import Track
1717from app .models .users_events_role import UsersEventsRoles
18+ from app .models .tax import Tax
1819
1920event_copy = Blueprint ('event_copy' , __name__ , url_prefix = '/v1/events' )
2021
@@ -23,6 +24,14 @@ def start_sponsor_logo_generation_task(event_id):
2324 from .helpers .tasks import sponsor_logos_url_task
2425 sponsor_logos_url_task .delay (event_id = event_id )
2526
27+
28+ def copy_to_event (object , event ):
29+ db .session .expunge (object ) # expunge the object
30+ make_transient (object )
31+ object .event_id = event .id
32+ delattr (object , 'id' )
33+ save_to_db (object )
34+
2635@event_copy .route ('/<identifier>/copy' , methods = ['POST' ])
2736def create_event_copy (identifier ):
2837 id = 'identifier'
@@ -36,97 +45,57 @@ def create_event_copy(identifier):
3645 return abort (
3746 make_response (jsonify (error = "Access Forbidden" ), 403 )
3847 )
39- tickets = Ticket .query .filter_by (event_id = event .id ).all ()
40- social_links = SocialLink .query .filter_by (event_id = event .id ).all ()
41- sponsors = Sponsor .query .filter_by (event_id = event .id ).all ()
42- microlocations = Microlocation .query .filter_by (event_id = event .id ).all ()
43- tracks = Track .query .filter_by (event_id = event .id ).all ()
44- custom_forms = CustomForms .query .filter_by (event_id = event .id ).all ()
45- discount_codes = DiscountCode .query .filter_by (event_id = event .id ).all ()
46- speaker_calls = SpeakersCall .query .filter_by (event_id = event .id ).all ()
47- user_event_roles = UsersEventsRoles .query .filter_by (event_id = event .id ).all ()
48+ tickets = Ticket .query .filter_by (event_id = event .id , deleted_at = None ).all ()
49+ social_links = SocialLink .query .filter_by (event_id = event .id , deleted_at = None ).all ()
50+ sponsors = Sponsor .query .filter_by (event_id = event .id , deleted_at = None ).all ()
51+ microlocations = Microlocation .query .filter_by (event_id = event .id , deleted_at = None ).all ()
52+ tracks = Track .query .filter_by (event_id = event .id , deleted_at = None ).all ()
53+ custom_forms = CustomForms .query .filter_by (event_id = event .id , deleted_at = None ).all ()
54+ discount_codes = DiscountCode .query .filter_by (event_id = event .id , deleted_at = None ).all ()
55+ speaker_calls = SpeakersCall .query .filter_by (event_id = event .id , deleted_at = None ).all ()
56+ user_event_roles = UsersEventsRoles .query .filter_by (event_id = event .id , deleted_at = None ).all ()
57+ taxes = Tax .query .filter_by (event_id = event .id , deleted_at = None ).all ()
4858
4959 db .session .expunge (event ) # expunge the object from session
5060 make_transient (event )
5161 delattr (event , 'id' )
5262 event .identifier = get_new_event_identifier ()
5363 save_to_db (event )
5464
65+ # Ensure tax information is copied
66+ for tax in taxes :
67+ copy_to_event (tax , event )
68+
5569 # Removes access_codes, order_tickets, ticket_tags for the new tickets created.
5670 for ticket in tickets :
57- ticket_id = ticket .id
58- db .session .expunge (ticket ) # expunge the object from session
59- make_transient (ticket )
60- ticket .event_id = event .id
61- delattr (ticket , 'id' )
62- save_to_db (ticket )
71+ copy_to_event (ticket , event )
6372
6473 for link in social_links :
65- link_id = link .id
66- db .session .expunge (link ) # expunge the object from session
67- make_transient (link )
68- link .event_id = event .id
69- delattr (link , 'id' )
70- save_to_db (link )
74+ copy_to_event (link , event )
7175
7276 for sponsor in sponsors :
73- sponsor_id = sponsor .id
74- db .session .expunge (sponsor ) # expunge the object from session
75- make_transient (sponsor )
76- sponsor .event_id = event .id
77- delattr (sponsor , 'id' )
78- save_to_db (sponsor )
77+ copy_to_event (sponsor , event )
7978
8079 start_sponsor_logo_generation_task (event .id )
8180
8281 for location in microlocations :
83- location_id = location .id
84- db .session .expunge (location ) # expunge the object from session
85- make_transient (location )
86- location .event_id = event .id
87- delattr (location , 'id' )
88- save_to_db (location )
82+ copy_to_event (location , event )
8983
9084 # No sessions are copied for new tracks
9185 for track in tracks :
92- track_id = track .id
93- db .session .expunge (track ) # expunge the object from session
94- make_transient (track )
95- track .event_id = event .id
96- delattr (track , 'id' )
97- save_to_db (track )
86+ copy_to_event (track , event )
9887
9988 for call in speaker_calls :
100- call_id = call .id
101- db .session .expunge (call ) # expunge the object from session
102- make_transient (call )
103- call .event_id = event .id
104- delattr (call , 'id' )
105- save_to_db (call )
89+ copy_to_event (call , event )
10690
10791 for code in discount_codes :
108- code_id = code .id
109- db .session .expunge (code ) # expunge the object from session
110- make_transient (code )
111- code .event_id = event .id
112- delattr (code , 'id' )
113- save_to_db (code )
92+ copy_to_event (code , event )
11493
11594 for form in custom_forms :
116- form_id = form .id
117- db .session .expunge (form ) # expunge the object from session
118- make_transient (form )
119- form .event_id = event .id
120- delattr (form , 'id' )
121- save_to_db (form )
95+ copy_to_event (form , event )
12296
12397 for user_role in user_event_roles :
124- user_role_id = user_role .id
125- db .session .expunge (user_role )
126- make_transient (user_role )
127- user_role .event_id = event .id
128- delattr (user_role , 'id' )
129- save_to_db (user_role )
98+ copy_to_event (user_role , event )
13099
131100 return jsonify ({
132101 'id' : event .id ,
0 commit comments