def provisional_pdf(meeting_id, printout_type): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) filters = {'meeting_flags_%s' % printout_type: '1'} categs, categ_ids = get_categories_for_printouts(meeting, None, all=True) order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] fields = [R('t1.data', 'data'), R('category', 'category'), R('t1.data-> \'printout_representing\'', 'printout_representing')] persons = (Person.select(fields) .group_by("category") .group_by("t1.data -> 'printout_representing'") .group_by("t1.data") .order_by(*order_by) ) persons = sugar.append_persons_query(persons, meeting_id, categories=categ_ids) page_info = { 'title': 'Provisional list as entered by participant', 'meeting_description': _get_meeting_description(meeting, 'E'), 'type': printout_type, 'today': datetime.now(), } return { 'meeting': meeting, 'persons': persons, 'page_info': page_info, 'count': persons.count(), }
def get_person_or_none(meeting_id, person_id): try: person = (Person.select().join(PersonMeeting) .where(meeting=meeting_id, person=person_id).get()) except Person.DoesNotExist: return None return person
def document_distribution(meeting_id, printout_type): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) languages = [(k,v) for k,v in refdata.language.items()] categ = flask.request.args.get('category') page = int(flask.request.args.get('page', 1)) lang = flask.request.args.get('language') additional_params = "" categs, categ_ids = get_categories(meeting, categ, stat=['Party', 'Observer']) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} if lang: filters['personal_language'] = lang order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC")] fields = [R('t1.data-> \'printout_representing\'', 'printout_representing'), R('t1.data-> \'personal_language\'', 'personal_language'), R("t2.category", "category")] persons_query = Person.select(fields).order_by(*order_by) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { "today": datetime.now(), "meeting_description": _get_meeting_description(meeting, 'E'), "title": "Distribution of documents", "url": "printouts.document_distribution", "type": printout_type, "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="document_distribution", printout_type=printout_type), } categories_map = dict(categs) categories_map['2'] = 'Party' return { "page_info": page_info, "languages": languages, "languages_map": dict(languages), "meeting": meeting, "persons": persons_query, "categories": categs, "categories_map": categories_map, "filter_category": categ, "filter_language": lang, "additional_params": additional_params, "hide_filters": True, }
def get_person_or_404(meeting_id, person_id): try: fields = [R('t1.id', 'id'), R('t1.data', 'data'), R('t2.category', 'category'), R('t2.data', 'meeting_data')] person = (Person.select(fields).join(PersonMeeting) .where(meeting=meeting_id, person=person_id).get()) except Person.DoesNotExist: flask.abort(404) return person
def observers(meeting_id, printout_type): # flask.g.pdf_compatible = True meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') page = int(flask.request.args.get('page', 1)) events = meeting.get_events() additional_params = "" categs, categ_ids = get_categories(meeting, categ) if categ: additional_params += '&category=' + categ # filters = {} filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] fields = [R("t1.id", "id"), R("t1.data", "data"), R("t2.data", "meeting_data"), R("t2.category", "category")] persons_query = (Person.select(fields).order_by(*order_by)) if not getattr(flask.g, 'pdf_compatible', None): persons_query = persons_query.paginate(page, PER_PAGE) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { 'title': 'List of announced observers (by organization)', 'meeting_description': _get_meeting_description(meeting, 'E'), 'url': 'printouts.observers', 'type': printout_type, 'print_url': flask.url_for('printouts.print_task_celery', meeting_id=meeting.id, view_name='observers', printout_type=printout_type) } return { 'meeting': meeting, 'events': events, 'page_info': page_info, 'persons': persons_query, 'paginator': paginator, 'count': count, 'categories': categs, 'categories_map': dict(categs), 'filter_category': categ, 'additional_params': additional_params, 'colspan': 7 + events.count(), }
def pigeon_holes(meeting_id, printout_type, download=False): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) languages = [(k,v) for k,v in refdata.language.items()] categ = flask.request.args.get('category') page = int(flask.request.args.get('page', 1)) lang = flask.request.args.get('language') additional_params = "" categs, categ_ids = get_categories_for_printouts(meeting, categ) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} if lang: filters['personal_language'] = lang order_by = [('printout_representing', 'ASC')] fields = [R('t1.data-> \'printout_representing\'', 'printout_representing'), R('t1.data-> \'personal_language\'', 'personal_language'), R("t2.category", "category")] persons_query = Person.select(fields).order_by(*order_by) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { "today": datetime.now(), "meeting_description": _get_meeting_description(meeting, 'E'), "title": "Pigeon holes (%s)" % ('announced' if printout_type == 'verified' else 'attending'), "url": "printouts.pigeon_holes", "type": printout_type, "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="pigeon_holes", printout_type=printout_type), } categories_map = dict(categs) categories_map[2] = 'Party' return { "page_info": page_info, "categories": categs, "categories_map": categories_map, "languages": languages, "languages_map": dict(languages), "persons": persons_query, "meeting": meeting, "filter_category": categ, "filter_language": lang, "paginator": paginator, "additional_params": additional_params, "hide_filters": True, }
def admission_of_observers(meeting_id, printout_type, download=False): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories(meeting, categ, stat=['Observer']) categ_ids = [c for c in categ_ids if c in (70, 80, 90, 91)] if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("category", "ASC"), ("(t1.data -> 'representing_organization')", "ASC")] fields = [R('category', 'category'), R('t1.data-> \'representing_organization\'', 'representing_organization'),] persons_query = Person.select(fields).order_by(*order_by) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { "today": datetime.now(), "meeting_description": {'E': _get_meeting_description(meeting, 'E'), 'S':_get_meeting_description(meeting, 'S'), 'F':_get_meeting_description(meeting, 'F'), }, "title": u"ADMISSION OF OBSERVERS / ADMISIÓN DE OBSERVADORES / ADMISSION DES OBSERVATEURS", "url": "printouts.admission_of_observers", "type": printout_type, "download": download, "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="admission_of_observers", printout_type=printout_type), } return { "meeting": meeting, "page_info": page_info, "paginator": paginator, "persons": persons_query, "filter_category": categ, "categories": categs, "categories_map": dict(categs), "additional_params": additional_params, "hide_filters": True, }
def delegations(meeting_id, printout_type): # flask.g.pdf_compatible = True meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories(meeting, categ, stat=['Party', 'Observer']) if categ: additional_params += '&category=' + categ # filters = {} filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC")] fields = [R('t1.data-> \'printout_representing\'', 'printout_representing'), R("t2.category", "category")] persons_query = Person.select(fields).order_by(*order_by) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { 'title': 'List of delegations (to prepare the meeting room)', 'meeting_description': _get_meeting_description(meeting, 'E'), 'url': 'printouts.delegations', 'type': printout_type, 'print_url': flask.url_for('printouts.print_task_celery', meeting_id=meeting.id, view_name='delegations', printout_type=printout_type) } categories_map = dict(categs) categories_map['2'] = 'Party' return { 'meeting': meeting, 'page_info': page_info, 'persons': persons_query, 'paginator': paginator, 'count': count, 'categories': categs, 'categories_map': categories_map, 'filter_category': categ, 'additional_params': additional_params, }
def query(self, options, meeting_id): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) search = options['search'] order_by = options.get('order_by') fields = [R('t1.id', 'id'), R('t1.data','data'), R('t2.category', 'category'), R('t2.data', 'meeting_data')] results = ( Person.select(fields).join(PersonMeeting) .where(meeting=meeting_id) .where(R('t2.data @> (%s)', {'request_funding': '1'})) .limit(options['limit']) .offset(options['offset']) ) if order_by and not options['count']: order_by_column = self.COLUMNS.get(order_by[0], order_by[0]) order_by_dir = order_by[1].upper() if order_by_column == 'category': results = results.order_by(("(t2.category)", order_by_dir)) else: results = results.order_by( ("(t2.data -> '%s')" % order_by_column, order_by_dir)) if search: search = sugar.util.rescape(unidecode(search.lower())) results = results.where(sugar.data_like('_text_for_search', search, table='t1')) if options['count']: return results.count() def render_column(person): if person.meeting_data.get('funding_accepted', False): return '<i class="icon-ok"></i>' def table_row(person, meeting): cat = sugar.get_person_category_or_404(meeting_id, category_id=person.category_id(meeting.id)) url = url_for('participant.view', meeting_id=meeting.id, person_id=person.id, from_page='funding.home') link = "<a href='%s'>%s</a>" % (jinja2.escape(url), person.name) return { 'id': person.id, 'name': link, 'category': cat.data['name_E'], 'funding_accepted': render_column(person), } return (table_row(person, meeting) for person in results)
def get_persons_query(meeting_id): return (Person.select().join(PersonMeeting) .where(PersonMeeting.meeting==meeting_id))
def events(meeting_id, printout_type): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories_for_printouts(meeting, categ) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] fields = [R("category", "category"), R("t1.data", "data"), R("t2.data", "meeting_data"), R("t2.person_id", "id")] events = meeting.get_events() event_ids = [e.id for e in events] person_ids = [pe.person.id for pe in PersonEvent.select().where(PersonEvent.event << event_ids)] persons_query = (Person.select(fields).order_by(*order_by) .where(Person.id << person_ids)) if not getattr(flask.g, 'pdf_compatible', None): persons_query = persons_query.paginate(page, PER_PAGE) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { 'today': datetime.now(), 'title': 'List of %s participants in events' % ( 'announced' if printout_type == 'verified' else 'attending'), 'meeting_description': _get_meeting_description(meeting, 'E'), 'url': 'printouts.events', 'type': printout_type, 'print_url': flask.url_for('printouts.print_task_celery', meeting_id=meeting.id, view_name='events', printout_type=printout_type), } return { 'page_info': page_info, 'persons': persons_query, 'paginator': paginator, 'events': events, 'count': count, 'meeting': meeting, 'categories': categs, 'categories_map': dict(categs), 'filter_category': categ, 'additional_params': additional_params, 'colspan': 4 + events.count(), }
def provisional(meeting_id, printout_type): # flask.g.pdf_compatible = True from schema import refdata meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') rep = flask.request.args.get('representing') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories_for_printouts(meeting, categ, all=True) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] fields = [ R("t1.data", "data"), R("(t1.data -> 'printout_representing')", "printout_representing"), R("category", "category"), ] persons_query = Person.select(fields).order_by(*order_by) if not getattr(flask.g, 'pdf_compatible', None): persons_query = persons_query.paginate(page, PER_PAGE) if rep: persons_query = persons_query.where( data__contains={'printout_representing': rep}) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) representing_query = ( Person.group_by([Count('*')], ['printout_representing']) .order_by(("printout_representing", "ASC")) ) representing_query = sugar.append_persons_query(representing_query, meeting_id, categories=categ_ids) representing = [(r.printout_representing, r.printout_representing) for r in representing_query] page_info = { "title": "Provisional list as entered by participant", "meeting_description": _get_meeting_description(meeting, 'E'), "url": "printouts.provisional", "type": printout_type, "today": datetime.now(), "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="provisional_pdf", printout_type=printout_type), } return { "page_info": page_info, "persons": persons_query, "count": count, "meeting": meeting, "filter_category": categ, "representing": representing, "paginator": paginator, "categories": categs, "categories_map": dict(categs), "filter_category": categ, "filter_representing": rep, "additional_params": additional_params, }
def list_of_all_participants(meeting_id, printout_type): from schema import refdata meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') rep = flask.request.args.get('representing') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories_for_printouts(meeting, categ, all=True) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] if not getattr(flask.g, 'pdf_compatible', None): fields = [ R("t1.data -> 'personal_first_name'", "personal_first_name"), R("t1.data -> 'personal_last_name'", "personal_last_name"), R("category", "category"), R("t1.data -> 'representing_organization_show'", "representing_organization_show"), R("t1.data -> 'representing_organization'", "representing_organization"), R("t1.data -> 'personal_address'", "personal_address"), R("t1.data -> 'personal_place'", "personal_place"), R("t1.data -> 'personal_email'", "personal_email"), ] persons_query = Person.select(fields).order_by(*order_by) persons_query = persons_query.paginate(page, PER_PAGE) if rep: persons_query = persons_query.where( data__contains={'printout_representing': rep}) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) representing_query = ( Person.group_by([Count('*')], ['printout_representing']) .order_by(("printout_representing", "ASC")) ) representing_query = sugar.append_persons_query(representing_query, meeting_id, categories=categ_ids, filters=filters) representing = [(r.printout_representing, r.printout_representing) for r in representing_query] page_info = { "title": "List of participants / " "Lista de participantes / " "Liste des participants (%s)" % meeting.decoded_data['info_acronym'], "meeting_description": {'E': _get_meeting_description(meeting, 'E'), 'S':_get_meeting_description(meeting, 'S'), 'F':_get_meeting_description(meeting, 'F'), }, "url": "printouts.list_of_all_participants", "type": printout_type, "today": datetime.now(), "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="list_of_all_participants_pdf", printout_type=printout_type), } return { "page_info": page_info, "persons": persons_query, "count": count, "meeting": meeting, "filter_category": categ, "representing": representing, "paginator": paginator, "categories": categs, "categories_map": dict(categs), "filter_category": categ, "filter_representing": rep, "additional_params": additional_params, }
def credentials(meeting_id, printout_type): # flask.g.pdf_compatible = True meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') rep = flask.request.args.get('representing') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories(meeting, categ, stat=['Party']) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("category", "ASC"), ("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] if not getattr(flask.g, 'pdf_compatible', None): fields = [ R("t1.data -> 'personal_first_name'", "personal_first_name"), R("t1.data -> 'personal_last_name'", "personal_last_name"), R("t1.data -> 'meeting_flags_credentials'", "meeting_flags_credentials"), R("category", "category"), R("t2.data", "meeting_data"), R("t1.data -> 'printout_representing'", "printout_representing"), ] persons_query = Person.select(fields).order_by(*order_by) else: fields = [ R('t1.data -> \'personal_first_name\'', 'personal_first_name'), R('t1.data -> \'personal_last_name\'', 'personal_last_name'), R('t1.data-> \'printout_representing\'', 'printout_representing'), R('t2.data', 'meeting_data'), R("category", "category")] persons_query = Person.select(fields).order_by(*order_by) if not getattr(flask.g, 'pdf_compatible', None): persons_query = persons_query.paginate(page, PER_PAGE) if rep: persons_query = persons_query.where( data__contains={'printout_representing': rep}) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) page_info = { "title": "List of credentials", "meeting_description": {'E': _get_meeting_description(meeting, 'E'), 'S':_get_meeting_description(meeting, 'S'), 'F':_get_meeting_description(meeting, 'F'), }, "url": "printouts.credentials", "type": printout_type, "today": datetime.now(), "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="credentials", printout_type=printout_type), } credentials_categories_map = { '11': 'A', '12': 'B', '13': 'C', } return { "meeting": meeting, "page_info": page_info, "paginator": paginator, "persons": persons_query, "count": count, "categories": categs, "categories_map": dict(categs), "credentials_categories_map": credentials_categories_map, "filter_category": categ, "filter_representing": rep, "additional_params": additional_params, }
def list_for_verification(meeting_id, printout_type='attended'): meeting = sugar.get_object_or_404(Meeting, id=meeting_id) categ = flask.request.args.get('category') rep = flask.request.args.get('representing') page = int(flask.request.args.get('page', 1)) additional_params = "" categs, categ_ids = get_categories_for_printouts(meeting, categ) if categ: additional_params += '&category=' + categ filters = {'meeting_flags_%s' % printout_type: '1'} order_by = [("(t1.data -> 'printout_representing')", "ASC"), ("(t1.data -> 'personal_last_name')", "ASC"),] if not getattr(flask.g, 'pdf_compatible', None): fields = [ R("t1.data -> 'personal_first_name'", "personal_first_name"), R("t1.data -> 'personal_last_name'", "personal_last_name"), R("t1.data -> 'representing_organization_show'", "representing_organization_show"), R("t1.data -> 'representing_organization'", "representing_organization"), R("t1.data -> 'personal_address'", "personal_address"), R("t1.data -> 'personal_place'", "personal_place"), R("t1.data -> 'personal_email'", "personal_email"), R("t2.category", "category"), ] persons_query = Person.select(fields).order_by(*order_by) else: fields = [ R("t1.data -> 'personal_first_name'", "personal_first_name"), R("t1.data -> 'personal_last_name'", "personal_last_name"), R("t1.data -> 'representing_organization'", "representing_organization"), R("t1.data -> 'personal_address'", "personal_address"), R("t1.data -> 'personal_place'", "personal_place"), R("t1.data -> 'personal_email'", "personal_email"), ] persons_query = ( Person.group_by(fields, ['printout_representing', 'data']) .order_by(("printout_representing", "ASC"), ("personal_last_name", "ASC")) ) if not getattr(flask.g, 'pdf_compatible', None): persons_query = persons_query.paginate(page, PER_PAGE) if rep: persons_query = persons_query.where( data__contains={'printout_representing': rep}) persons_query = sugar.append_persons_query(persons_query, meeting_id, categories=categ_ids, filters=filters) count = persons_query.count() paginator = sugar.Paginator(per_page=PER_PAGE, page=page, count=count) representing_query = ( Person.group_by([Count('*')], ['printout_representing']) .order_by(("printout_representing", "ASC")) ) representing_query = sugar.append_persons_query(representing_query, meeting_id, categories=categ_ids, filters=filters) representing = [(r.printout_representing, r.printout_representing) for r in representing_query] page_info = { "today": datetime.now(), "title": (u"List of participants for checking / \n" u"Lista de participantes para verificar / \n" u"Liste des participants pour vérification"), "url": "printouts.list_for_verification", "print_url": flask.url_for("printouts.print_task_celery", meeting_id=meeting.id, view_name="list_for_verification", printout_type=printout_type), } return { "page_info": page_info, "persons": persons_query, "filter_category": categ, "representing": representing, "paginator": paginator, "meeting": meeting, "categories": categs, "categories_map": dict(categs), "filter_category": categ, "filter_representing": rep, "additional_params": additional_params, }
def participants(meeting_id): meeting = get_object_or_404(Meeting, id=meeting_id) fields = [R('t1.id', 'id'), R('t1.data', 'data'), R('t2.data', 'meeting_data')] persons = (Person.select(fields).join(PersonMeeting) .where(meeting=meeting_id)) events = [(i.id, i.decoded_data['description_E']) for i in meeting.get_events()] questions = [(i.id, i.decoded_data['title_E']) for i in meeting.get_questions()] ParticipantForm = get_participant_form(meeting.data['info_type']) form = ParticipantForm(meeting=meeting) columns = [ 'personal_name_title', 'personal_last_name', 'personal_first_name', 'category', 'personal_badge_name', 'personal_address', 'personal_place', 'personal_country', 'personal_phone', 'personal_cellular', 'personal_fax', 'personal_email', 'representing_country', 'representing_organization', 'personal_language', 'representing_region', ] if isinstance(form, CMSParticipantForm): columns.extend([ 'birth_date', 'nationality', 'passport_number', 'passport_expiration_date', 'functional_title', 'special_diet' ]) columns.extend([ 'meeting_flags_attended', 'meeting_flags_sponsored', 'meeting_flags_credentials', 'meeting_flags_approval', 'meeting_flags_invitation', 'meeting_flags_verified', 'meeting_flags_statute' ]) if isinstance(form, CMSParticipantForm): columns.extend(['request_funding', 'request_letter', 'funding_accepted']) header = [] for k in columns: if form._fields.get(k): header.append(str(form._fields[k].label.text)) else: header.append(k.replace('_', ' ').capitalize()) header.extend([i[1] for i in events]) header.extend([i[1] for i in questions]) rows = [] for p in persons: data = dict(p.decoded_data) category_id = p.category_id(meeting_id=meeting_id) category = get_person_category_or_None(meeting_id, category_id) data['category'] = category.get_verbose_name() data['representing_country'] = (p.representing_country and unicode(p.representing_country)) data['personal_country'] = (p.personal_country and unicode(p.personal_country)) data['representing_region'] = p.region data['personal_language'] = p.language() data['meeting_flags_attended'] = p.meeting_data.get( 'meeting_flags_attended') and '*' data['meeting_flags_sponsored'] = p.meeting_data.get( 'meeting_flags_sponsored') and '*' data['meeting_flags_credentials'] = p.meeting_data.get( 'meeting_flags_credentials') and '*' data['meeting_flags_approval'] = p.meeting_data.get( 'meeting_flags_approval') and '*' data['meeting_flags_invitation'] = p.meeting_data.get( 'meeting_flags_invitation') and '*' data['meeting_flags_verified'] = p.meeting_data.get( 'meeting_flags_verified') and '*' data['meeting_flags_statute'] = p.meeting_data.get( 'meeting_flags_statute') and '*' data['personal_fee'] = p.meeting_data.get( 'personal_fee') and '*' if 'request_funding' in columns: data['request_funding'] = p.meeting_data.get( 'request_funding') and '*' if 'funding_accepted' in columns: data['funding_accepted'] = p.meeting_data.get( 'funding_accepted') and '*' if 'request_letter' in columns: data['request_letter'] = p.meeting_data.get( 'request_letter') and '*' for e in events: if (PersonEvent.select().where(person=p.id, event=e[0]) .count() > 0): data[e[1]] = '*' for q in questions: if (PersonQuestion.select().where(person=p.id, question=q[0]) .count() > 0): data[q[1]] = '*' for key in data.keys(): if key in EXCLUDE_PARTICIPANT_FIELDS: data.pop(key, None) rows.append([data.get(k) or '' for k in columns] + [data.get(i[1]) or '' for i in events] + [data.get(i[1]) or '' for i in questions]) return Response( generate_excel(header, rows), mimetype='application/vnd.ms-excel', headers={'Content-Disposition': 'attachment; filename=%s.xls' % 'registration'})