def process_speaker_view(speaker_id): if request.method == 'GET': speaker = DataGetter.get_speaker(speaker_id) if not speaker or speaker.name == '': abort(404) form_elems = DataGetter.get_custom_form_elements(speaker.event_id) if not form_elems: flash("Speaker and Session forms have been incorrectly configured for this event." " Session creation has been disabled", "danger") return redirect(url_for('.display_my_sessions_view', event_id=speaker.event_id)) speaker_form = json.loads(form_elems.speaker_form) event = DataGetter.get_event(speaker.event_id) return render_template( 'gentelella/users/mysessions/mysession_speaker_edit.html', photo_delete_url=url_for('.avatar_delete', event_id=event.id, speaker_id=speaker.id), speaker_form=speaker_form, event=event, speaker=speaker) if request.method == 'POST': speaker = DataGetter.get_speaker(speaker_id) event = DataGetter.get_event(speaker.event_id) DataManager.edit_speaker(request, speaker) flash("The speaker has been updated successfully", "success") return redirect(url_for('event_detail.display_event_cfs', identifier=event.identifier, show_speaker_modal=True))
def add_order(event_id): if request.method == 'POST': order = TicketingManager.create_order(request.form, True) return redirect(url_for('.proceed_order', event_id=event_id, order_identifier=order.identifier)) event = DataGetter.get_event(event_id) return render_template('gentelella/users/events/tickets/add_order.html', event=event, event_id=event_id)
def display_orders(event_id, pdf=None): from_date = request.args.get('from_date') to_date = request.args.get('to_date') discount_code = request.args.get('discount_code') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.display_orders', event_id=event_id)) if from_date and to_date: orders = TicketingManager.get_orders( event_id=event_id, from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y') ) elif discount_code == '': return redirect(url_for('.display_orders', event_id=event_id)) elif discount_code: orders = TicketingManager.get_orders( event_id=event_id, discount_code=discount_code, ) else: orders = TicketingManager.get_orders(event_id) event = DataGetter.get_event(event_id) if pdf is not None: return (event, event_id, orders, discount_code) else: return render_template('gentelella/users/events/tickets/orders.html', event=event, event_id=event_id, orders=orders, from_date=from_date, to_date=to_date, discount_code=discount_code)
def session_display_view(event_id, session_id): session = get_session_or_throw(session_id) if request.method == 'POST': DataManager.edit_session(request, session) return redirect(url_for('.index_view', event_id=event_id)) event = DataGetter.get_event(event_id) if not event.has_session_speakers: return render_template( 'gentelella/admin/event/info/enable_module.html', active_page='sessions', title='Sessions', event=event) form_elems = DataGetter.get_custom_form_elements(event_id) if not form_elems: flash( "Speaker and Session forms have been incorrectly configured for this event." " Session creation has been disabled", "danger") return redirect(url_for('.index_view', event_id=event_id)) session_form = json.loads(form_elems.session_form) speakers = DataGetter.get_speakers(event_id).all() return render_template('gentelella/admin/event/sessions/edit.html', session=session, session_form=session_form, event_id=event_id, event=event, speakers=speakers)
def create_view(event_id): event = DataGetter.get_event(event_id) if not event.has_session_speakers: return render_template( 'gentelella/admin/event/info/enable_module.html', active_page='sessions', title='Sessions', event=event) if request.method == 'POST': DataManager.add_session_to_event(request, event_id) flash("The session and speaker have been saved") get_from = request.args.get("from") if get_from and get_from == 'speaker': return redirect( url_for('event_speakers.index_view', event_id=event_id)) return redirect(url_for('.index_view', event_id=event_id)) form_elems = DataGetter.get_custom_form_elements(event_id) if not form_elems: flash( "Speaker and Session forms have been incorrectly configured for this event." " Session creation has been disabled", "danger") return redirect(url_for('.index_view', event_id=event_id)) speaker_form = json.loads(form_elems.speaker_form) session_form = json.loads(form_elems.session_form) speakers = DataGetter.get_speakers(event_id).all() return render_template('gentelella/admin/event/sessions/new.html', speaker_form=speaker_form, session_form=session_form, event=event, speakers=speakers)
def display_ticket_stats(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) orders_summary = { 'completed': { 'class': 'success', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'pending': { 'class': 'warning', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'orders_count': 0, 'total_sales': 0 } } tickets_summary = {} for ticket in event.tickets: tickets_summary[str(ticket.id)] = { 'name': ticket.name, 'quantity': ticket.quantity, 'completed': { 'tickets_count': 0, 'sales': 0 }, 'pending': { 'tickets_count': 0, 'sales': 0 }, 'expired': { 'class': 'danger', 'tickets_count': 0, 'sales': 0 } } for order in orders: if order.status == 'initialized': order.status = 'pending' orders_summary[str(order.status)]['orders_count'] += 1 orders_summary[str(order.status)]['total_sales'] += order.amount for order_ticket in order.tickets: orders_summary[str(order.status)]['tickets_count'] += order_ticket.quantity ticket = get_ticket(order_ticket.ticket_id) tickets_summary[str(ticket.id)][str(order.status)]['tickets_count'] += order_ticket.quantity if order.paid_via != 'free' and order.amount > 0: tickets_summary[str(ticket.id)][str(order.status)]['sales'] += order_ticket.quantity * ticket.price return render_template('gentelella/admin/event/tickets/tickets.html', event=event, event_id=event_id, orders_summary=orders_summary, tickets_summary=tickets_summary)
def create_event_copy(event_id): old_event = DataGetter.get_event(event_id) event = clone_row(old_event) event.name = "Copy of " + event.name event.state = "Draft" save_to_db(event) sponsors_old = DataGetter.get_sponsors(event_id).all() tracks_old = DataGetter.get_tracks(event_id).all() microlocations_old = DataGetter.get_microlocations(event_id).all() call_for_paper_old = DataGetter.get_call_for_papers(event_id).first() social_links = DataGetter.get_social_links_by_event_id(event_id).all() custom_forms = DataGetter.get_custom_form_elements(event_id) for social_link in social_links: clone_row(social_link, event.id) for sponsor in sponsors_old: clone_row(sponsor, event.id) for track in tracks_old: clone_row(track, event.id) for microlocation in microlocations_old: clone_row(microlocation, event.id) if call_for_paper_old: clone_row(call_for_paper_old, event.id) if custom_forms: clone_row(custom_forms, event.id) return event
def process_session_view(session_id): if request.method == 'GET': session = DataGetter.get_sessions_of_user_by_id(session_id) speaker = DataGetter.get_speakers( session.event_id).filter_by(user_id=login.current_user.id).first() if not session: abort(404) form_elems = DataGetter.get_custom_form_elements(session.event_id) if not form_elems: flash( "Speaker and Session forms have been incorrectly configured for this event." " Session creation has been disabled", "danger") return redirect( url_for('.display_my_sessions_view', event_id=session.event_id)) session_form = json.loads(form_elems.session_form) event = DataGetter.get_event(session.event_id) return render_template( 'gentelella/users/mysessions/mysession_session_edit.html', session=session, speaker=speaker, session_form=session_form, event=event) if request.method == 'POST': session = DataGetter.get_sessions_of_user_by_id(session_id) speaker = DataGetter.get_speakers( session.event_id).filter_by(user_id=login.current_user.id).first() DataManager.edit_session(request, session, speaker) flash("The session has been updated successfully", "success") return redirect(url_for('.display_session_view', session_id=session_id))
def edit_view(event_id, step=''): event = DataGetter.get_event(event_id) custom_forms = DataGetter.get_custom_form_elements(event_id) speaker_form = json.loads(custom_forms.speaker_form) session_form = json.loads(custom_forms.session_form) call_for_speakers = DataGetter.get_call_for_papers(event_id).first() preselect = [] required = [] for session_field in session_form: if session_form[session_field]['include'] == 1: preselect.append(session_field) if session_form[session_field]['require'] == 1: required.append(session_field) for speaker_field in speaker_form: if speaker_form[speaker_field]['include'] == 1: preselect.append(speaker_field) if speaker_form[speaker_field]['require'] == 1: required.append(speaker_field) hash = get_random_hash() if CallForPaper.query.filter_by(hash=hash).all(): hash = get_random_hash() current_timezone = get_current_timezone() seed = { 'event': get_event_json(event), 'sponsors': get_sponsors_json(event_id), 'microlocations': get_microlocations_json(event_id), 'sessionTypes': get_session_types_json(event_id), 'tracks': get_tracks_json(event_id), 'callForSpeakers': call_for_speakers.serialize if call_for_speakers else None } return render_template( 'gentelella/admin/event/wizard/wizard.html', event=event, step=step, seed=json.dumps(seed), required=required, preselect=preselect, current_date=datetime.datetime.now(), event_types=DataGetter.get_event_types(), event_licences=DataGetter.get_event_licences(), event_topics=DataGetter.get_event_topics(), event_sub_topics=DataGetter.get_event_subtopics(), timezones=DataGetter.get_all_timezones(), call_for_speakers=call_for_speakers, cfs_hash=hash, current_timezone=current_timezone, payment_countries=DataGetter.get_payment_countries(), payment_currencies=DataGetter.get_payment_currencies(), included_settings=get_module_settings())
def invited_view(event_id, session_id): session = DataGetter.get_session(session_id) event = DataGetter.get_event(event_id) return render_template('gentelella/admin/event/sessions/invited.html', session=session, event_id=event_id, event=event)
def display_attendees(self, event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id, status='completed') return self.render('/gentelella/admin/event/tickets/attendees.html', event=event, event_id=event_id, orders=orders)
def download_speakers_as_csv(event_id): speakers = DataGetter.get_speakers(event_id) event = DataGetter.get_event(event_id) main = [["Speaker Name", "Speaker Email", "Speaker Session(s)", \ "Speaker Mobile", "Speaker Organisation", "Speaker Position"]] for speaker in speakers: data = [speaker.name if speaker.name else '', speaker.email if speaker.email else ''] if speaker.sessions: session_details = '' for session in speaker.sessions: if not session.deleted_at: session_details += session.title + ' (' + session.state + '), ' data.append(session_details[:-2]) data.append(speaker.mobile if speaker.mobile else '') data.append(speaker.organisation if speaker.organisation else '') data.append(speaker.position if speaker.position else '') main.append(data) final = StringIO() csvWriter = writer(final) csvWriter.writerows(main) response = make_response(final.getvalue()) final.close() response.headers['Content-Type'] = 'text/csv' response.headers['Content-Disposition'] = \ 'inline; filename=%s-Speakers.csv' % (re.sub(r"[^\w\s]", '', event.name).replace(" ", "_")) return response
def trigger_after_purchase_notifications(buyer_email, event_id, event, invoice_id, order_url, resend=False): if not event and not event_id: raise Exception('event or event_id is required') if not event: event = DataGetter.get_event(event_id) admin_msg_setting = DataGetter.get_message_setting_by_action(TICKET_PURCHASED) organizers = DataGetter.get_user_event_roles_by_role_name(event.id, 'organizer') for organizer in organizers: email_notification_setting = DataGetter.get_email_notification_settings_by_event_id(organizer.user.id, event_id) if not admin_msg_setting or \ (email_notification_setting and email_notification_setting.after_ticket_purchase == 1 and admin_msg_setting.user_control_status == 1) or admin_msg_setting.user_control_status == 0: send_email_for_after_purchase_organizers(organizer.user.email, buyer_email, invoice_id, order_url, event.name, event.organizer_name) if resend: send_notif_for_resend(organizer.user, invoice_id, order_url, event.name, buyer_email) else: send_notif_for_after_purchase_organizer(organizer.user, invoice_id, order_url, event.name, buyer_email) coorganizers = DataGetter.get_user_event_roles_by_role_name(event.id, 'coorganizer') for coorganizer in coorganizers: email_notification_setting = DataGetter.get_email_notification_settings_by_event_id(coorganizer.user.id, event_id) if not admin_msg_setting or \ (email_notification_setting and email_notification_setting.after_ticket_purchase == 1 and admin_msg_setting.user_control_status == 1) or admin_msg_setting.user_control_status == 0: send_email_for_after_purchase_organizers(coorganizer.user.email, buyer_email, invoice_id, order_url, event.name, event.organizer_name) if resend: send_notif_for_resend(coorganizer.user, invoice_id, order_url, event.name, buyer_email) else: send_notif_for_after_purchase_organizer(coorganizer.user, invoice_id, order_url, event.name, buyer_email)
def download_sessions_as_csv(event_id): sessions = DataGetter.get_sessions_by_event_id(event_id) event = DataGetter.get_event(event_id) main = [["Session Title", "Session Speakers", \ "Session Track", "Session Abstract", "Email Sent"]] for session in sessions: if not session.deleted_at: data = [session.title + " (" + session.state + ")" if session.title else ''] if session.speakers: inSession = '' for speaker in session.speakers: if speaker.name: inSession += (speaker.name + ', ') data.append(inSession[:-2]) data.append(session.track.name if session.track.name else '') data.append(strip_tags(session.short_abstract) if session.short_abstract else '') data.append('Yes' if session.state_email_sent else 'No') main.append(data) final = StringIO() csvWriter = writer(final) csvWriter.writerows(main) response = make_response(final.getvalue()) final.close() response.headers['Content-Type'] = 'text/csv' response.headers['Content-Disposition'] = \ 'inline; filename=%s-Sessions.csv' % (re.sub(r"[^\w\s]", '', event.name).replace(" ", "_")) return response
def display_orders(self, event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) return self.render('/gentelella/admin/event/tickets/orders.html', event=event, event_id=event_id, orders=orders)
def display_orders(event_id): from_date = request.args.get('from_date') to_date = request.args.get('to_date') discount_code = request.args.get('discount_code') if ('from_date' in request.args and not from_date) or ('to_date' in request.args and not to_date) or \ ('from_date' in request.args and 'to_date' not in request.args) or \ ('to_date' in request.args and 'from_date' not in request.args): return redirect(url_for('.display_orders', event_id=event_id)) if from_date and to_date: orders = TicketingManager.get_orders( event_id=event_id, from_date=datetime.strptime(from_date, '%d/%m/%Y'), to_date=datetime.strptime(to_date, '%d/%m/%Y')) elif discount_code == '': return redirect(url_for('.display_orders', event_id=event_id)) elif discount_code: orders = TicketingManager.get_orders( event_id=event_id, discount_code=discount_code, ) else: orders = TicketingManager.get_orders(event_id) event = DataGetter.get_event(event_id) return render_template('gentelella/users/events/tickets/orders.html', event=event, event_id=event_id, orders=orders, from_date=from_date, to_date=to_date, discount_code=discount_code)
def user_role_invite(event_id, hash): """Accept User-Role invite for the event. """ event = DataGetter.get_event(event_id) user = current_user role_invite = DataGetter.get_event_role_invite(event.id, hash, email=user.email) if role_invite: if role_invite.has_expired(): delete_from_db(role_invite, 'Deleted RoleInvite') flash('Sorry, the invitation link has expired.', 'error') return redirect(url_for('.details_view', event_id=event.id)) if user.has_role(event.id): flash('You have already been assigned a Role in the Event.', 'warning') return redirect(url_for('events.details_view', event_id=event_id)) role = role_invite.role data = dict() data['user_email'] = role_invite.email data['user_role'] = role.name DataManager.add_role_to_event(data, event.id) # Delete Role Invite after it has been accepted delete_from_db(role_invite, 'Deleted RoleInvite') flash('You have been added as a %s' % role.title_name) return redirect(url_for('.details_view', event_id=event.id)) else: abort(404)
def display_view(event_id): sessions = DataGetter.get_sessions_by_event_id(event_id) event = DataGetter.get_event(event_id) if not event.has_session_speakers: return render_template('gentelella/users/events/info/enable_module.html', active_page='scheduler', title='Scheduler', event=event) return render_template('gentelella/users/events/scheduler/scheduler.html', sessions=sessions, event=event)
def test_scheduler_publish(self): with app.test_request_context(): event = ObjectMother.get_event() save_to_db(event, "Event saved") rv = self.app.get(url_for('event_scheduler.publish', event_id=event.id), follow_redirects=True) event = DataGetter.get_event(event.id) self.assertTrue(event.schedule_published_on is not None, msg=rv.data)
def trigger_new_session_notifications(session_id, event_id=None, event=None): if not event and not event_id: raise Exception('event or event_id is required') if not event: event = DataGetter.get_event(event_id) link = url_for('event_sessions.session_display_view', event_id=event.id, session_id=session_id, _external=True) admin_msg_setting = DataGetter.get_message_setting_by_action(NEW_SESSION) organizers = DataGetter.get_user_event_roles_by_role_name( event.id, 'organizer') for organizer in organizers: email_notification_setting = DataGetter.get_email_notification_settings_by_event_id( organizer.user.id, event_id) if not admin_msg_setting or \ (email_notification_setting and email_notification_setting.new_paper == 1 and admin_msg_setting.user_control_status == 1) or \ admin_msg_setting.user_control_status == 0: send_new_session_organizer(organizer.user.email, event.name, link) # Send notification print " notif Sending" send_notif_new_session_organizer(organizer.user, event.name, link)
def publish_event(event_id): event = DataGetter.get_event(event_id) if string_empty(event.location_name): flash( "Your event was saved. To publish your event please review the highlighted fields below.", "warning") return redirect( url_for('.edit_view', event_id=event.id) + "#highlight=location_name") if not current_user.can_publish_event(): flash("You don't have permission to publish event.") return redirect(url_for('.details_view', event_id=event_id)) event.state = 'Published' save_to_db(event, 'Event Published') organizers = DataGetter.get_user_event_roles_by_role_name( event_id, 'organizer') speakers = DataGetter.get_user_event_roles_by_role_name( event_id, 'speaker') link = url_for('.details_view', event_id=event_id, _external=True) for organizer in organizers: send_event_publish(organizer.user.email, event.name, link) for speaker in speakers: send_event_publish(speaker.user.email, event.name, link) record_activity('publish_event', event_id=event.id, status='published') flash("Your event has been published.", "success") event_json_modified.send(current_app._get_current_object(), event_id=event_id) return redirect(url_for('.details_view', event_id=event_id))
def restore_event_revision(event_id, version_id): event = DataGetter.get_event(event_id) version = event.versions[version_id] version.revert() db.session.commit() flash("Your event has been restored.", "success") return redirect(url_for('.details_view', event_id=event_id))
def unpublish_event(event_id): event = DataGetter.get_event(event_id) event.state = 'Draft' save_to_db(event, 'Event Unpublished') record_activity('publish_event', event_id=event.id, status='un-published') flash("Your event has been unpublished.", "warning") return redirect(url_for('.details_view', event_id=event_id))
def publish_event(event_id): event = DataGetter.get_event(event_id) if string_empty(event.location_name): flash( "Your event was saved. To publish your event please review the highlighted fields below.", "warning") return redirect(url_for('.edit_view', event_id=event.id) + "#highlight=location_name") if not current_user.can_publish_event(): flash("You don't have permission to publish event.") return redirect(url_for('.details_view', event_id=event_id)) event.state = 'Published' save_to_db(event, 'Event Published') organizers = DataGetter.get_user_event_roles_by_role_name(event_id, 'organizer') speakers = DataGetter.get_user_event_roles_by_role_name(event_id, 'speaker') link = url_for('.details_view', event_id=event_id, _external=True) for organizer in organizers: send_event_publish(organizer.user.email, event.name, link) for speaker in speakers: send_event_publish(speaker.user.email, event.name, link) record_activity('publish_event', event_id=event.id, status='published') flash("Your event has been published.", "success") return redirect(url_for('.details_view', event_id=event_id))
def access_codes_view(event_id): event = DataGetter.get_event(event_id) access_codes = TicketingManager.get_access_codes(event_id) return render_template('gentelella/users/events/tickets/access_codes.html', event=event, access_codes=access_codes, event_id=event_id)
def process_session_view(session_id): if request.method == 'GET': session = DataGetter.get_sessions_of_user_by_id(session_id) if not session: abort(404) form_elems = DataGetter.get_custom_form_elements(session.event_id) if not form_elems: flash("Speaker and Session forms have been incorrectly configured for this event." " Session creation has been disabled", "danger") return redirect(url_for('.display_my_sessions_view', event_id=session.event_id)) speaker_form = json.loads(form_elems.speaker_form) session_form = json.loads(form_elems.session_form) event = DataGetter.get_event(session.event_id) speaker = DataGetter.get_speakers(session.event_id).filter_by(user_id=login.current_user.id).first() return render_template( 'gentelella/users/mysessions/mysession_detail_edit.html', session=session, photo_delete_url=url_for('.avatar_delete', event_id=event.id, speaker_id=speaker.id), speaker_form=speaker_form, session_form=session_form, event=event, speaker=speaker) if request.method == 'POST': session = DataGetter.get_sessions_of_user_by_id(session_id) speaker = DataGetter.get_speakers(session.event_id).filter_by(user_id=login.current_user.id).first() DataManager.edit_session(request, session, speaker) flash("The session has been updated successfully", "success") return redirect(url_for('.display_session_view', session_id=session_id))
def get_attendee_export_info(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) holders = [] ticket_names = [] for ticket in event.tickets: ticket_names.append(ticket.name) for order in orders: for holder in order.ticket_holders: discount = TicketingManager.get_discount_code(event_id, order.discount_code_id) order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at, 'ticket_name': holder.ticket.name, 'ticket_type': holder.ticket.type, 'firstname': holder.firstname, 'lastname': holder.lastname, 'email': holder.email, 'occupation': holder.occupation, 'occupation_detail': holder.occupation_detail, 'gender': holder.gender, 'expertise': holder.expertise, 'welcome_reception': holder.welcome_reception, 'recruitment': holder.recruitment, 'unesco_hackathon': holder.unesco_hackathon, 'country': holder.country, 'ticket_price': holder.ticket.price, 'discount': discount } order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email if discount and str(holder.ticket.id) in discount.tickets.split(","): if discount.type == "amount": order_holder['ticket_price'] = order_holder['ticket_price'] - discount.value else: order_holder['ticket_price'] -= order_holder['ticket_price'] * discount.value / 100.0 order_holder['checked_in'] = holder.checked_in order_holder['id'] = holder.id holders.append(order_holder) if len(order.ticket_holders) == 0: order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at } order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email holders.append(order_holder) return (event, event_id, holders, orders, ticket_names)
def get_attendee_export_info(event_id): event = DataGetter.get_event(event_id) orders = TicketingManager.get_orders(event_id) holders = [] ticket_names = [] for ticket in event.tickets: ticket_names.append(ticket.name) for order in orders: for holder in order.ticket_holders: discount = TicketingManager.get_discount_code(event_id, order.discount_code_id) order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at, 'ticket_name': holder.ticket.name, 'ticket_type': holder.ticket.type, 'firstname': holder.firstname, 'lastname': holder.lastname, 'email': holder.email, 'country': holder.country, 'ticket_price': holder.ticket.price, 'discount': discount } order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email if discount and str(holder.ticket.id) in discount.tickets.split(","): if discount.type == "amount": order_holder['ticket_price'] = order_holder['ticket_price'] - discount.value else: order_holder['ticket_price'] -= order_holder['ticket_price'] * discount.value / 100.0 order_holder['checked_in'] = holder.checked_in order_holder['id'] = holder.id holders.append(order_holder) if len(order.ticket_holders) == 0: order_holder = { 'order_invoice': order.get_invoice_number(), 'paid_via': order.paid_via, 'status': order.status, 'completed_at': order.completed_at, 'created_at': order.created_at } if order.status == 'completed' or order.status == 'placed': order_holder['order_url'] = url_for('ticketing.view_order_after_payment', order_identifier=order.identifier) else: order_holder['order_url'] = url_for('ticketing.show_transaction_error', order_identifier=order.identifier) order_holder['by_whom'] = order.user.user_detail.fullname \ if order.user.user_detail and order.user.user_detail.fullname else order.user.email holders.append(order_holder) return (event, event_id, holders, orders, ticket_names)
def discount_codes_view(event_id): event = DataGetter.get_event(event_id) discount_codes = TicketingManager.get_discount_codes(event_id) return render_template( 'gentelella/users/events/tickets/discount_codes.html', event=event, discount_codes=discount_codes, event_id=event_id)
def index_view(event_id): speakers = DataGetter.get_speakers(event_id) event = DataGetter.get_event(event_id) if not event.has_session_speakers: return render_template('gentelella/users/events/info/enable_module.html', active_page='speakers', title='Speakers', event=event) return render_template('gentelella/users/events/speakers/base_speaker_table.html', speakers=speakers, event_id=event_id, event=event)
def test_event_publish(self): with app.test_request_context(): event = ObjectMother.get_event() save_to_db(event, "Event saved") url = url_for('events.publish_event', event_id=event.id) rv = self.app.get(url, follow_redirects=True) event = DataGetter.get_event(event.id) self.assertEqual("Published", event.state, msg=event.state)
def restore_session_view(event_id, session_id): session = get_session_or_throw(session_id) event = DataGetter.get_event(event_id) return render_template( 'gentelella/admin/event/sessions/browse_revisions.html', session=session, event_id=event_id, event=event)
def unpublish(event_id): if login.current_user.is_coorganizer(event_id): abort(404) event = DataGetter.get_event(event_id) event.schedule_published_on = None save_to_db(event, "Event schedule unpublished") flash('The schedule has been unpublished for this event', 'success') return redirect(url_for('.display_view', event_id=event_id))
def discount_codes_view(self, event_id): event = DataGetter.get_event(event_id) discount_codes = TicketingManager.get_discount_codes(event_id) return self.render( '/gentelella/admin/event/tickets/discount_codes.html', event=event, discount_codes=discount_codes, event_id=event_id)
def index_view(event_id): sessions = DataGetter.get_sessions_by_event_id(event_id) event = DataGetter.get_event(event_id) if not event.has_session_speakers: return render_template('gentelella/users/events/info/enable_module.html', active_page='sessions', title='Sessions', event=event) return render_template('gentelella/users/events/sessions/base_session_table.html', sessions=sessions, event_id=event_id, event=event)
def new_view(event_id, user_id, hash): invite = DataGetter.get_invite_by_user_id(user_id) event = DataGetter.get_event(event_id) if invite and invite.hash == hash: if request.method == 'POST': DataManager.add_session_to_event(request, event_id) return redirect(url_for('.index_view', event_id=event_id)) return render_template('gentelella/admin/sessions/new.html', event=event)
def edit_view(event_id, step=''): event = DataGetter.get_event(event_id) custom_forms = DataGetter.get_custom_form_elements(event_id) speaker_form = json.loads(custom_forms.speaker_form) session_form = json.loads(custom_forms.session_form) call_for_speakers = DataGetter.get_call_for_papers(event_id).first() preselect = [] required = [] for session_field in session_form: if session_form[session_field]['include'] == 1: preselect.append(session_field) if session_form[session_field]['require'] == 1: required.append(session_field) for speaker_field in speaker_form: if speaker_form[speaker_field]['include'] == 1: preselect.append(speaker_field) if speaker_form[speaker_field]['require'] == 1: required.append(speaker_field) hash = get_random_hash() if CallForPaper.query.filter_by(hash=hash).all(): hash = get_random_hash() current_timezone = get_current_timezone() seed = { 'event': get_event_json(event), 'sponsors': get_sponsors_json(event_id), 'microlocations': get_microlocations_json(event_id), 'sessionTypes': get_session_types_json(event_id), 'tracks': get_tracks_json(event_id), 'callForSpeakers': call_for_speakers.serialize if call_for_speakers else None } return render_template('gentelella/users/events/wizard/wizard.html', event=event, step=step, seed=json.dumps(seed), required=required, preselect=preselect, current_date=datetime.datetime.now(), event_types=DataGetter.get_event_types(), event_licences=DataGetter.get_event_licences(), event_topics=DataGetter.get_event_topics(), event_sub_topics=DataGetter.get_event_subtopics(), timezones=DataGetter.get_all_timezones(), call_for_speakers=call_for_speakers, cfs_hash=hash, current_timezone=current_timezone, payment_countries=DataGetter.get_payment_countries(), payment_currencies=DataGetter.get_payment_currencies(), included_settings=get_module_settings(), session_types=get_session_types_json(event_id), microlocations=get_microlocations_json(event_id))
def discount_codes_create(self, event_id, discount_code_id=None): event = DataGetter.get_event(event_id) if request.method == 'POST': TicketingManager.create_edit_discount_code(request.form, event_id) flash("The discount code has been added.", "success") return redirect(url_for('.discount_codes_view', event_id=event_id)) discount_code = None if discount_code_id: discount_code = TicketingManager.get_discount_code(event_id, discount_code_id) return self.render('/gentelella/admin/event/tickets/discount_codes_create.html', event=event, event_id=event_id, discount_code=discount_code)
def access_codes_create(event_id, access_code_id=None): event = DataGetter.get_event(event_id) if request.method == 'POST': TicketingManager.create_edit_access_code(request.form, event_id) flash("The access code has been added.", "success") return redirect(url_for('.access_codes_view', event_id=event_id)) access_code = None if access_code_id: access_code = TicketingManager.get_access_code(event_id, access_code_id) return render_template('gentelella/users/events/tickets/access_codes_create.html', event=event, event_id=event_id, access_code=access_code)
def delete_user_role_invite(event_id, hash): event = DataGetter.get_event(event_id) role_invite = DataGetter.get_event_role_invite(event.id, hash) if role_invite: delete_from_db(role_invite, 'Deleted RoleInvite') flash('Invitation link has been successfully deleted.') return redirect(url_for('.details_view', event_id=event.id)) else: abort(404)
def user_logged_in(user): speakers = DataGetter.get_speaker_by_email(user.email).all() for speaker in speakers: if not speaker.user: speaker.user = user role = Role.query.filter_by(name='speaker').first() event = DataGetter.get_event(speaker.event_id) uer = UsersEventsRoles(user=user, event=event, role=role) save_to_db(uer) save_to_db(speaker) return True
def display_export_view(event_id): event = DataGetter.get_event(event_id) export_jobs = DataGetter.get_export_jobs(event_id) user = current_user if not AuthManager.is_verified_user(): flash(Markup("Your account is unverified. " "Please verify by clicking on the confirmation link that has been emailed to you." '<br>Did not get the email? Please <a href="/resend_email/" class="alert-link"> ' 'click here to resend the confirmation.</a>')) return render_template( 'gentelella/users/events/export/export.html', event=event, export_jobs=export_jobs, current_user=user )
def export_xcal_task(event_id): event = DataGetter.get_event(event_id) try: os.mkdir(app.config['TEMP_UPLOADS_FOLDER']) except OSError as exc: if exc.errno != errno.EEXIST: raise exc filename = "xcal.xcs" file_path = app.config['TEMP_UPLOADS_FOLDER'] + "/" + filename with open(file_path, "w") as temp_file: temp_file.write(XCalExporter.export(event_id)) xcal_file = UploadedFile(file_path=file_path, filename=filename) event.xcal_url = upload(xcal_file, UPLOAD_PATHS['exports']['xcal'].format(event_id=event_id)) save_to_db(event)
def display_session_view(session_id): session = DataGetter.get_sessions_of_user_by_id(session_id) if not session: abort(404) form_elems = DataGetter.get_custom_form_elements(session.event_id) if not form_elems: flash("Speaker and Session forms have been incorrectly configured for this event." " Session creation has been disabled", "danger") return redirect(url_for('.display_my_sessions_view', event_id=session.event_id)) speaker_form = json.loads(form_elems.speaker_form) session_form = json.loads(form_elems.session_form) event = DataGetter.get_event(session.event_id) speakers = DataGetter.get_speakers(session.event_id).all() return render_template('gentelella/users/mysessions/mysession_detail.html', session=session, speaker_form=speaker_form, session_form=session_form, event=event, speakers=speakers)
def display_event_cfs_via_hash(hash): call_for_speakers = CallForPaper.query.filter_by(hash=hash).first() if not call_for_speakers: abort(404) event = DataGetter.get_event(call_for_speakers.event_id) placeholder_images = DataGetter.get_event_default_images() if event.sub_topic: custom_placeholder = DataGetter.get_custom_placeholder_by_name(event.sub_topic) elif event.topic: custom_placeholder = DataGetter.get_custom_placeholder_by_name(event.topic) else: custom_placeholder = DataGetter.get_custom_placeholder_by_name('Other') if not event.has_session_speakers: abort(404) if not call_for_speakers: abort(404) if request.method == 'POST': return process_event_cfs(event.identifier) form_elems = DataGetter.get_custom_form_elements(event.id) speaker_form = json.loads(form_elems.speaker_form) session_form = json.loads(form_elems.session_form) now = datetime.now(pytz.timezone(event.timezone if (event.timezone and event.timezone != '') else 'UTC')) start_date = pytz.timezone(event.timezone).localize(call_for_speakers.start_date) end_date = pytz.timezone(event.timezone).localize(call_for_speakers.end_date) state = "now" if end_date < now: state = "past" elif start_date > now: state = "future" speakers = DataGetter.get_speakers(event.id).all() accepted_sessions_count = get_count(DataGetter.get_sessions(event.id)) return render_template('gentelella/guest/event/cfs.html', event=event, speaker_form=speaker_form, accepted_sessions_count=accepted_sessions_count, session_form=session_form, call_for_speakers=call_for_speakers, placeholder_images=placeholder_images, state=state, speakers=speakers, via_hash=True, custom_placeholder=custom_placeholder)
def edit_view(event_id, speaker_id): speaker = get_speaker_or_throw(speaker_id) event = DataGetter.get_event(event_id) form_elems = DataGetter.get_custom_form_elements(event_id) if not form_elems: flash("Speaker form has been incorrectly configured for this event. Editing has been disabled", "danger") return redirect(url_for('.index_view', event_id=event_id)) speaker_form = json.loads(form_elems.speaker_form) if request.method == 'GET': return render_template('gentelella/users/events/speakers/edit.html', speaker=speaker, event_id=event_id, event=event, speaker_form=speaker_form) if request.method == 'POST': save_speaker(request, event_id, speaker) flash("Speaker has been saved", "success") return redirect(url_for('.index_view', event_id=event_id))
def trigger_new_session_notifications(session_id, event_id=None, event=None): if not event and not event_id: raise Exception('event or event_id is required') if not event: event = DataGetter.get_event(event_id) link = url_for('event_sessions.session_display_view', event_id=event.id, session_id=session_id, _external=True) organizers = DataGetter.get_user_event_roles_by_role_name(event_id, 'organizer') for organizer in organizers: email_notification_setting = DataGetter.get_email_notification_settings_by_event_id(organizer.user.id, event_id) if email_notification_setting and email_notification_setting.new_paper == 1: send_new_session_organizer(organizer.user.email, event.name, link) # Send notification send_notif_new_session_organizer(organizer.user, event.name, link)
def add_speaker_view(event_id, session_id): event = DataGetter.get_event(event_id) if not event.has_session_speakers: return render_template('gentelella/users/events/info/enable_module.html', active_page='sessions', title='Sessions', event=event) form_elems = DataGetter.get_custom_form_elements(event_id) if not form_elems: flash("Speaker form has been incorrectly configured for this event. Editing has been disabled", "danger") return redirect(url_for('.index_view', event_id=event_id)) speaker_form = json.loads(form_elems.speaker_form) if request.method == 'GET': return render_template('gentelella/users/events/speakers/edit.html', event_id=event_id, event=event, speaker_form=speaker_form) if request.method == 'POST': DataManager.add_speaker_to_session(request, event_id, session_id) flash("The speaker has been added to session") return redirect(url_for('.index_view', event_id=event_id))
def create_event_copy(event_id): old_event = DataGetter.get_event(event_id) event = clone_row(old_event) event.name = "Copy of " + event.name event.identifier = get_new_event_identifier() event.state = "Draft" save_to_db(event) role = Role.query.filter_by(name=ORGANIZER).first() uer = UsersEventsRoles(login.current_user, event, role) if save_to_db(uer, "Event saved"): new_email_notification_setting = EmailNotification(next_event=1, new_paper=1, session_schedule=1, session_accept_reject=1, after_ticket_purchase=1, user_id=login.current_user.id, event_id=event.id) save_to_db(new_email_notification_setting, "EmailSetting Saved") sponsors_old = DataGetter.get_sponsors(event_id).all() tracks_old = DataGetter.get_tracks(event_id).all() microlocations_old = DataGetter.get_microlocations(event_id).all() call_for_paper_old = DataGetter.get_call_for_papers(event_id).first() social_links = DataGetter.get_social_links_by_event_id(event_id).all() custom_forms = DataGetter.get_custom_form_elements(event_id) for social_link in social_links: clone_row(social_link, event.id) for sponsor in sponsors_old: clone_row(sponsor, event.id) for track in tracks_old: clone_row(track, event.id) for microlocation in microlocations_old: clone_row(microlocation, event.id) if call_for_paper_old: clone_row(call_for_paper_old, event.id) if custom_forms: clone_row(custom_forms, event.id) return event
def save_sponsors_from_json(json, event_id=None): event_id = event_id if event_id else json['event_id'] event = DataGetter.get_event(event_id) sponsors_enabled = json['sponsors_enabled'] if sponsors_enabled: ids = [] for sponsor in json['sponsors']: if sponsor['id'] and represents_int(sponsor['id']): item = Sponsor.query.get(sponsor['id']) else: item = Sponsor(event_id=event_id) if sponsor['name'].strip() == '': continue item.name = sponsor['name'] item.level = sponsor['level'] item.sponsor_type = sponsor['type'] item.url = sponsor['url'] item.description = sponsor['description'] save_to_db(item) if item.logo != sponsor['logo']: if sponsor['logo'] and sponsor['logo'] != '': item.logo = save_event_image(sponsor['logo'], UPLOAD_PATHS['sponsors']['logo'].format( event_id=int(event.id), id=int(item.id) )) else: item.logo = '' save_to_db(item) ids.append(item.id) if len(ids) > 0: Sponsor.query.filter(~Sponsor.id.in_(ids)).filter_by(event_id=event_id).delete(synchronize_session='fetch') else: Sponsor.query.filter_by(event_id=event_id).delete(synchronize_session='fetch') event.state = json['state'] if event.location_name.strip() != '' else 'Draft' save_to_db(event) return { 'event_id': event.id }
def save_session_speakers(json, event_id=None): event_id = event_id if event_id else json['event_id'] event = DataGetter.get_event(event_id) if json['sessions_speakers_enabled']: event.has_session_speakers = True save_microlocations(json['microlocations'], event_id) save_tracks(json['tracks'], event_id) save_session_types(json['session_types'], event_id) save_call_for_speakers(json['call_for_speakers'], event_id) save_custom_forms(json['custom_forms'], event_id) else: event.has_session_speakers = False event.state = json['state'] if event.location_name.strip() != '' else 'Draft' save_to_db(event) return { 'event_id': event.id }
def trigger_new_session_notifications(session_id, event_id=None, event=None): if not event and not event_id: raise Exception('event or event_id is required') if not event: event = DataGetter.get_event(event_id) link = url_for('event_sessions.session_display_view', event_id=event.id, session_id=session_id, _external=True) admin_msg_setting = DataGetter.get_message_setting_by_action(NEW_SESSION) organizers = DataGetter.get_user_event_roles_by_role_name(event.id, 'organizer') for organizer in organizers: email_notification_setting = DataGetter.get_email_notification_settings_by_event_id(organizer.user.id, event.id) if not admin_msg_setting or \ (email_notification_setting and email_notification_setting.new_paper == 1 and admin_msg_setting.user_control_status == 1) or admin_msg_setting.user_control_status == 0: send_new_session_organizer(organizer.user.email, event.name, link) # Send notification send_notif_new_session_organizer(organizer.user, event.name, link)