Esempio n. 1
0
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(),
    }
Esempio n. 2
0
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
Esempio n. 3
0
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,
    }
Esempio n. 4
0
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
Esempio n. 5
0
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(),
    }
Esempio n. 6
0
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,
    }
Esempio n. 7
0
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,
    }
Esempio n. 8
0
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,
    }
Esempio n. 9
0
    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)
Esempio n. 10
0
def get_persons_query(meeting_id):
    return (Person.select().join(PersonMeeting)
                  .where(PersonMeeting.meeting==meeting_id))
Esempio n. 11
0
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(),
    }
Esempio n. 12
0
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,
    }
Esempio n. 13
0
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,
    }
Esempio n. 14
0
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,
    }
Esempio n. 15
0
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,
    }
Esempio n. 16
0
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'})