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 }
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') }
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]))