コード例 #1
0
ファイル: util.py プロジェクト: vintas/indico
def generate_spreadsheet_from_survey(survey, submission_ids):
    """Generate spreadsheet data from a given survey.

    :param survey: `Survey` for which the user wants to export submissions
    :param submission_ids: The list of submissions to include in the file
    """
    field_names = ['Submitter', 'Submitter Email', 'Submission Date']
    sorted_questions = sorted(survey.questions,
                              key=attrgetter('parent.position', 'position'))
    field_names += [
        unique_col(_format_title(question), question.id)
        for question in sorted_questions
    ]

    submissions = _filter_submissions(survey, submission_ids)
    rows = []
    for submission in submissions:
        submission_dict = {
            'Submitter':
            submission.user.full_name if not submission.is_anonymous else None,
            'Submitter Email':
            submission.user.email if not submission.is_anonymous else None,
            'Submission Date':
            submission.submitted_dt,
        }
        for key in field_names:
            submission_dict.setdefault(key, '')
        for answer in submission.answers:
            key = unique_col(_format_title(answer.question),
                             answer.question.id)
            submission_dict[key] = answer.answer_data
        rows.append(submission_dict)
    return field_names, rows
コード例 #2
0
ファイル: util.py プロジェクト: jas01/indico
def generate_spreadsheet_from_survey(survey, submission_ids):
    """Generates spreadsheet data from a given survey.

    :param survey: `Survey` for which the user wants to export submissions
    :param submission_ids: The list of submissions to include in the file
    """
    field_names = ['Submitter', 'Submitter Email', 'Submission Date']
    sorted_questions = sorted(survey.questions, key=attrgetter('parent.position', 'position'))
    field_names += [unique_col(_format_title(question), question.id) for question in sorted_questions]

    submissions = _filter_submissions(survey, submission_ids)
    rows = []
    for submission in submissions:
        submission_dict = {
            'Submitter': submission.user.full_name if not submission.is_anonymous else None,
            'Submitter Email': submission.user.email if not submission.is_anonymous else None,
            'Submission Date': submission.submitted_dt,
        }
        for key in field_names:
            submission_dict.setdefault(key, '')
        for answer in submission.answers:
            key = unique_col(_format_title(answer.question), answer.question.id)
            submission_dict[key] = answer.answer_data
        rows.append(submission_dict)
    return field_names, rows
コード例 #3
0
def generate_spreadsheet_from_abstracts(abstracts, static_item_ids,
                                        dynamic_items):
    """Generates a spreadsheet data from a given abstract list.

    :param abstracts: The list of abstracts to include in the file
    :param static_item_ids: The abstract properties to be used as columns
    :param dynamic_items: Contribution fields as extra columns
    """
    field_names = ['Id', 'Title']
    static_item_mapping = OrderedDict([
        ('state', ('State', lambda x: x.state.title)),
        ('submitter', ('Submitter', lambda x: x.submitter.full_name)),
        ('authors', ('Primary authors',
                     lambda x: [a.full_name for a in x.primary_authors])),
        ('accepted_track', ('Accepted track',
                            lambda x: x.accepted_track.short_title
                            if x.accepted_track else None)),
        ('submitted_for_tracks',
         ('Submitted for tracks',
          lambda x: [t.short_title for t in x.submitted_for_tracks])),
        ('reviewed_for_tracks',
         ('Reviewed for tracks',
          lambda x: [t.short_title for t in x.reviewed_for_tracks])),
        ('accepted_contrib_type', ('Accepted type',
                                   lambda x: x.accepted_contrib_type.name
                                   if x.accepted_contrib_type else None)),
        ('submitted_contrib_type', ('Submitted type',
                                    lambda x: x.submitted_contrib_type.name
                                    if x.submitted_contrib_type else None)),
        ('score', ('Score', lambda x: round(x.score, 1)
                   if x.score is not None else None)),
        ('submitted_dt',
         ('Submission date',
          lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('modified_dt', ('Modification date', lambda x:
                         (to_unicode(format_datetime(x.modified_dt))
                          if x.modified_dt else '')))
    ])
    field_names.extend(
        unique_col(item.title, item.id) for item in dynamic_items)
    field_names.extend(title for name, (title,
                                        fn) in static_item_mapping.iteritems()
                       if name in static_item_ids)
    rows = []
    for abstract in abstracts:
        data = abstract.data_by_field
        abstract_dict = {'Id': abstract.friendly_id, 'Title': abstract.title}
        for item in dynamic_items:
            key = unique_col(item.title, item.id)
            abstract_dict[key] = data[
                item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in static_item_mapping.iteritems():
            if name not in static_item_ids:
                continue
            value = fn(abstract)
            abstract_dict[title] = value
        rows.append(abstract_dict)
    return field_names, rows
コード例 #4
0
ファイル: util.py プロジェクト: WhiteSymmetry/indico
def generate_spreadsheet_from_registrations(registrations, regform_items, special_items):
    """Generates a spreadsheet data from a given registration list.

    :param registrations: The list of registrations to include in the file
    :param regform_items: The registration form items to be used as columns
    :param special_items: Registration form information as extra columns
    """
    field_names = ['ID', 'Name']
    special_item_mapping = OrderedDict([
        ('reg_date', ('Registration date', lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('state', ('Registration state', lambda x: x.state.title)),
        ('price', ('Price', lambda x: x.render_price())),
        ('checked_in', ('Checked in', lambda x: x.checked_in)),
        ('checked_in_date', ('Check-in date', lambda x: (to_unicode(format_datetime(x.checked_in_dt)) if x.checked_in
                                                         else '')))
    ])
    for item in regform_items:
        field_names.append(unique_col(item.title, item.id))
        if item.input_type == 'accommodation':
            field_names.append(unique_col('{}_{}'.format(item.title, 'Arrival'), item.id))
            field_names.append(unique_col('{}_{}'.format(item.title, 'Departure'), item.id))
    field_names.extend(title for name, (title, fn) in special_item_mapping.iteritems() if name in special_items)
    rows = []
    for registration in registrations:
        data = registration.data_by_field
        registration_dict = {
            'ID': registration.friendly_id,
            'Name': "{} {}".format(registration.first_name, registration.last_name)
        }
        for item in regform_items:
            key = unique_col(item.title, item.id)
            if item.input_type == 'accommodation':
                registration_dict[key] = data[item.id].friendly_data.get('choice') if item.id in data else ''
                key = '{}_{}_{}'.format(item.title, 'Arrival', item.id)
                arrival_date = data[item.id].friendly_data.get('arrival_date') if item.id in data else None
                registration_dict[key] = format_date(arrival_date) if arrival_date else ''
                key = '{}_{}_{}'.format(item.title, 'Departure', item.id)
                departure_date = data[item.id].friendly_data.get('departure_date') if item.id in data else None
                registration_dict[key] = format_date(departure_date) if departure_date else ''
            else:
                registration_dict[key] = data[item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in special_item_mapping.iteritems():
            if name not in special_items:
                continue
            value = fn(registration)
            registration_dict[title] = value
        rows.append(registration_dict)
    return field_names, rows
コード例 #5
0
def generate_spreadsheet_from_abstracts(abstracts, static_item_ids, dynamic_items):
    """Generates a spreadsheet data from a given abstract list.

    :param abstracts: The list of abstracts to include in the file
    :param static_item_ids: The abstract properties to be used as columns
    :param dynamic_items: Contribution fields as extra columns
    """
    field_names = ['Id', 'Title']
    static_item_mapping = OrderedDict([
        ('state', ('State', lambda x: x.state.title)),
        ('submitter', ('Submitter', lambda x: x.submitter.full_name)),
        ('authors', ('Primary authors', lambda x: [a.full_name for a in x.primary_authors])),
        ('accepted_track', ('Accepted track', lambda x: x.accepted_track.short_title if x.accepted_track else None)),
        ('submitted_for_tracks', ('Submitted for tracks',
                                  lambda x: [t.short_title for t in x.submitted_for_tracks])),
        ('reviewed_for_tracks', ('Reviewed for tracks', lambda x: [t.short_title for t in x.reviewed_for_tracks])),
        ('accepted_contrib_type', ('Accepted type',
                                   lambda x: x.accepted_contrib_type.name if x.accepted_contrib_type else None)),
        ('submitted_contrib_type', ('Submitted type',
                                    lambda x: x.submitted_contrib_type.name if x.submitted_contrib_type else None)),
        ('score', ('Score', lambda x: round(x.score, 1))),
        ('submitted_dt', ('Submission date', lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('modified_dt', ('Modification date', lambda x: (to_unicode(format_datetime(x.modified_dt)) if x.modified_dt
                                                         else '')))
    ])
    field_names.extend(unique_col(item.title, item.id) for item in dynamic_items)
    field_names.extend(title for name, (title, fn) in static_item_mapping.iteritems() if name in static_item_ids)
    rows = []
    for abstract in abstracts:
        data = abstract.data_by_field
        abstract_dict = {
            'Id': abstract.friendly_id,
            'Title': abstract.title
        }
        for item in dynamic_items:
            key = unique_col(item.title, item.id)
            abstract_dict[key] = data[item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in static_item_mapping.iteritems():
            if name not in static_item_ids:
                continue
            value = fn(abstract)
            abstract_dict[title] = value
        rows.append(abstract_dict)
    return field_names, rows
コード例 #6
0
ファイル: util.py プロジェクト: stomanin/indico
def generate_spreadsheet_from_survey(survey, submission_ids):
    """Generates spreadsheet data from a given survey.

    :param survey: `Survey` for which the user wants to export submissions
    :param submission_ids: The list of submissions to include in the file
    """
    field_names = ['Submitter', 'Submission Date']
    field_names += [unique_col(question.title, question.id) for question in survey.questions]

    submissions = _filter_submissions(survey, submission_ids)
    rows = []
    for submission in submissions:
        submission_dict = {
            'Submitter': submission.user.full_name if submission.user else None,
            'Submission Date': to_unicode(format_datetime(submission.submitted_dt)),
        }

        for answer in submission.answers:
            key = unique_col(answer.question.title, answer.question.id)
            submission_dict[key] = answer.answer_data
        rows.append(submission_dict)
    return field_names, rows
コード例 #7
0
def generate_spreadsheet_from_registrations(registrations, regform_items, static_items):
    """Generate a spreadsheet data from a given registration list.

    :param registrations: The list of registrations to include in the file
    :param regform_items: The registration form items to be used as columns
    :param static_items: Registration form information as extra columns
    """
    field_names = ['ID', 'Name']
    special_item_mapping = {
        'reg_date': ('Registration date', lambda x: x.submitted_dt),
        'state': ('Registration state', lambda x: x.state.title),
        'price': ('Price', lambda x: x.render_price()),
        'checked_in': ('Checked in', lambda x: x.checked_in),
        'checked_in_date': ('Check-in date', lambda x: x.checked_in_dt if x.checked_in else ''),
        'payment_date': ('Payment date', lambda x: (x.transaction.timestamp
                                                    if (x.transaction is not None and
                                                        x.transaction.status == TransactionStatus.successful)
                                                    else '')),
    }
    for item in regform_items:
        field_names.append(unique_col(item.title, item.id))
        if item.input_type == 'accommodation':
            field_names.append(unique_col('{} ({})'.format(item.title, 'Arrival'), item.id))
            field_names.append(unique_col('{} ({})'.format(item.title, 'Departure'), item.id))
    field_names.extend(title for name, (title, fn) in special_item_mapping.items() if name in static_items)
    rows = []
    for registration in registrations:
        data = registration.data_by_field
        registration_dict = {
            'ID': registration.friendly_id,
            'Name': f"{registration.first_name} {registration.last_name}"
        }
        for item in regform_items:
            key = unique_col(item.title, item.id)
            if item.input_type == 'accommodation':
                registration_dict[key] = data[item.id].friendly_data.get('choice') if item.id in data else ''
                key = unique_col('{} ({})'.format(item.title, 'Arrival'), item.id)
                arrival_date = data[item.id].friendly_data.get('arrival_date') if item.id in data else None
                registration_dict[key] = format_date(arrival_date) if arrival_date else ''
                key = unique_col('{} ({})'.format(item.title, 'Departure'), item.id)
                departure_date = data[item.id].friendly_data.get('departure_date') if item.id in data else None
                registration_dict[key] = format_date(departure_date) if departure_date else ''
            else:
                registration_dict[key] = data[item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in special_item_mapping.items():
            if name not in static_items:
                continue
            value = fn(registration)
            registration_dict[title] = value
        rows.append(registration_dict)
    return field_names, rows