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
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
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
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
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
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
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