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)
Beispiel #7
0
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)
Beispiel #12
0
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
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #19
0
 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 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 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 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 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))
Beispiel #29
0
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))
Beispiel #30
0
    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 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 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 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)
Beispiel #40
0
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
    )
Beispiel #48
0
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))
Beispiel #54
0
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)