예제 #1
0
    def form(self, session, message='', panelists=(), **params):
        event = session.event(params, allowed=['location', 'start_time'])
        if 'name' in params:
            session.add(event)

            # Associate a panel app with this event, and if the event is new, use the panel app's name and title
            if 'panel_id' in params and params['panel_id']:
                add_panel = session.panel_application(id=params['panel_id'])
                add_panel.event_id = event.id
                session.add(add_panel)
                if event.is_new:
                    event.name = add_panel.name
                    event.description = add_panel.description
                    for pa in add_panel.applicants:
                        if pa.attendee_id:
                            assigned_panelist = AssignedPanelist(
                                attendee_id=pa.attendee.id, event_id=event.id)
                            session.add(assigned_panelist)

            message = check(event)
            if not message:
                new_panelist_ids = set(listify(panelists))
                old_panelist_ids = {
                    ap.attendee_id
                    for ap in event.assigned_panelists
                }
                for ap in event.assigned_panelists:
                    if ap.attendee_id not in new_panelist_ids:
                        session.delete(ap)
                for attendee_id in new_panelist_ids:
                    if attendee_id not in old_panelist_ids:
                        attendee = session.attendee(id=attendee_id)
                        session.add(
                            AssignedPanelist(event=event, attendee=attendee))
                raise HTTPRedirect('edit#{}', event.start_slot
                                   and (event.start_slot - 1))

        assigned_panelists = sorted(event.assigned_panelists,
                                    reverse=True,
                                    key=lambda a: a.attendee.first_name)

        all_panelists = session.query(Attendee).filter(
            or_(Attendee.ribbon.contains(c.PANELIST_RIBBON),
                Attendee.badge_type == c.GUEST_BADGE)).order_by(
                    Attendee.full_name).all()

        approved_panel_apps = session.query(PanelApplication).filter(
            PanelApplication.status == c.ACCEPTED).order_by('applied')

        return {
            'message': message,
            'event': event,
            'assigned': [ap.attendee_id for ap in assigned_panelists],
            'panelists': [(a.id, a.full_name) for a in all_panelists],
            'approved_panel_apps': approved_panel_apps
        }
예제 #2
0
    def associate(self, session, message='', **params):
        app = session.panel_application(params)
        if app.status != c.ACCEPTED:
            raise HTTPRedirect(
                'index?message={}', 'You cannot associate a non-accepted panel application with an event')

        elif app.event_id and cherrypy.request.method == 'GET':
            raise HTTPRedirect(
                'index?message={}{}', 'This panel application is already associated with the event ', app.event.name)

        if cherrypy.request.method == 'POST':
            if not app.event_id:
                message = 'You must select an event'
            else:
                for attendee in app.matched_attendees:
                    assigned_panelist = session.query(AssignedPanelist).filter_by(
                        event_id=app.event_id, attendee_id=attendee.id).first()

                    if not assigned_panelist:
                        app.event.assigned_panelists.append(AssignedPanelist(attendee=attendee))
                raise HTTPRedirect('index?message={}{}{}', app.name, ' was associated with ', app.event.name)

        return {
            'app': app,
            'message': message,
            'panels': session.query(Event).filter(Event.location.in_(c.PANEL_ROOMS)).order_by('name')
        }
예제 #3
0
def import_events(session):
    event_locs, _ = zip(*c.EVENT_LOCATION_OPTS)
    for e in dump['events']:
        if e['location'] in event_locs:
            e['start_time'] = offset_to_datetime(e['start_time'])
            panelists = e.pop('panelists')
            event = Event(**e)
            session.add(event)
            for secret_id in panelists:
                session.add(AssignedPanelist(event=event, attendee=attendees[secret_id]))