Esempio n. 1
0
    def _participant_list_table(self, regform):

        def _process_registration(reg, column_ids, active_fields):
            data_by_field = reg.data_by_field

            def _content(column_id):
                if column_id in data_by_field:
                    return data_by_field[column_id].get_friendly_data(for_humans=True)
                elif column_id in active_fields and active_fields[column_id].personal_data_type is not None:
                    # some legacy registrations have no data in the firstname/lastname/email field
                    # so we need to get it from the registration object itself
                    return getattr(reg, active_fields[column_id].personal_data_type.column)
                else:
                    # no data available for the field
                    return ''

            columns = [{'text': _content(column_id)} for column_id in column_ids]
            return {'checked_in': self._is_checkin_visible(reg), 'columns': columns}

        active_fields = {field.id: field for field in regform.active_fields}
        column_ids = [column_id
                      for column_id in registration_settings.get_participant_list_columns(self.event, regform)
                      if column_id in active_fields]
        headers = [active_fields[column_id].title.title() for column_id in column_ids]
        registrations = [_process_registration(reg, column_ids, active_fields) for reg in regform.active_registrations]
        table = {'headers': headers, 'rows': registrations, 'title': regform.title}
        table['show_checkin'] = any(registration['checked_in'] for registration in registrations)
        return table
Esempio n. 2
0
    def _process(self):
        form = ParticipantsDisplayFormColumnsForm()
        if form.validate_on_submit():
            registration_settings.set_participant_list_columns(
                self.event, form.json.data['columns'], self.regform)
            flash(
                _('The settings for "{}" have been saved.').format(
                    self.regform.title), 'success')
            return jsonify_data()

        available_fields = {
            field.id: field
            for field in self.regform.active_fields
        }
        enabled_fields = []
        for field_id in registration_settings.get_participant_list_columns(
                self.event, self.regform):
            try:
                field = available_fields[field_id]
            except KeyError:
                continue
            enabled_fields.append(field)
            del available_fields[field_id]

        disabled_fields = available_fields.values()
        return jsonify_template(
            'events/registration/management/regform_display_form_columns.html',
            form=form,
            enabled_columns=enabled_fields,
            disabled_columns=disabled_fields)
Esempio n. 3
0
    def _participant_list_table(self, regform):
        def _process_registration(reg, column_ids, active_fields):
            data_by_field = reg.data_by_field

            def _content(column_id):
                if column_id in data_by_field:
                    return data_by_field[column_id].get_friendly_data(for_humans=True)
                elif column_id in active_fields and active_fields[column_id].personal_data_type is not None:
                    # some legacy registrations have no data in the firstname/lastname/email field
                    # so we need to get it from the registration object itself
                    return getattr(reg, active_fields[column_id].personal_data_type.column)
                else:
                    # no data available for the field
                    return ''

            columns = [{'text': _content(column_id)} for column_id in column_ids]
            return {'checked_in': self._is_checkin_visible(reg), 'columns': columns}

        active_fields = {field.id: field for field in regform.active_fields}
        column_ids = [column_id
                      for column_id in registration_settings.get_participant_list_columns(self.event_new, regform)
                      if column_id in active_fields]
        headers = [active_fields[column_id].title.title() for column_id in column_ids]
        active_registrations = sorted(regform.active_registrations, key=attrgetter('last_name', 'first_name', 'id'))
        registrations = [_process_registration(reg, column_ids, active_fields) for reg in active_registrations]
        return {'headers': headers,
                'rows': registrations,
                'title': regform.title,
                'show_checkin': any(registration['checked_in'] for registration in registrations)}
Esempio n. 4
0
    def _process(self):
        regforms = (self.event_new.registration_forms
                    .filter_by(is_deleted=False)
                    .order_by(db.func.lower(RegistrationForm.title))
                    .all())

        form = ParticipantsDisplayForm()
        if form.validate_on_submit():
            data = form.json.data
            registration_settings.set(self.event, 'merge_registration_forms', data['merge_forms'])
            registration_settings.set_participant_list_form_ids(self.event, data['participant_list_forms'])
            registration_settings.set_participant_list_columns(self.event, data['participant_list_columns'])
            for regform in regforms:
                regform.publish_registrations_enabled = regform.id in data['participant_list_forms']
            flash(_("The participants display settings have been saved."), 'success')
            return redirect(url_for('.manage_regforms_display', self.event_new))

        available_columns = {field[0].name: field[1]['title'] for field in PersonalDataType.FIELD_DATA}
        enabled_columns = []
        disabled_columns = []
        for column_name in registration_settings.get_participant_list_columns(self.event):
            if column_name in available_columns:
                enabled_columns.append({'id': column_name, 'title': available_columns[column_name]})
                del available_columns[column_name]
        for column_name, column_title in available_columns.iteritems():
            disabled_columns.append({'id': column_name, 'title': column_title})
        disabled_columns.sort(key=itemgetter('title'))

        available_forms = {regform.id: regform for regform in regforms}
        enabled_forms = []
        disabled_forms = []
        # Handle forms that have already been sorted by the user.
        for form_id in registration_settings.get_participant_list_form_ids(self.event):
            try:
                regform = available_forms[form_id]
            except KeyError:
                continue
            # Make sure publication was not disabled since the display settings were modified.
            if regform.publish_registrations_enabled:
                enabled_forms.append(regform)
                del available_forms[form_id]
        for form_id, regform in available_forms.iteritems():
            # There might be forms with publication enabled that haven't been sorted by the user yet.
            if regform.publish_registrations_enabled:
                enabled_forms.append(regform)
            else:
                disabled_forms.append(regform)
        disabled_forms.sort(key=attrgetter('title'))

        merge_forms = registration_settings.get(self.event, 'merge_registration_forms')
        return WPManageRegistration.render_template('management/regform_display.html', self.event, event=self.event,
                                                    regforms=regforms, enabled_columns=enabled_columns,
                                                    disabled_columns=disabled_columns, enabled_forms=enabled_forms,
                                                    disabled_forms=disabled_forms, merge_forms=merge_forms, form=form)
Esempio n. 5
0
    def _process(self):
        regforms = sorted(self.event_new.registration_forms, key=lambda f: f.title.lower())
        form = ParticipantsDisplayForm()
        if form.validate_on_submit():
            data = form.json.data
            registration_settings.set(self.event_new, 'merge_registration_forms', data['merge_forms'])
            registration_settings.set_participant_list_form_ids(self.event_new, data['participant_list_forms'])
            registration_settings.set_participant_list_columns(self.event_new, data['participant_list_columns'])
            for regform in regforms:
                regform.publish_registrations_enabled = regform.id in data['participant_list_forms']
            flash(_("The participants display settings have been saved."), 'success')
            return redirect(url_for('.manage_regforms_display', self.event_new))

        available_columns = {field[0].name: field[1]['title'] for field in PersonalDataType.FIELD_DATA}
        enabled_columns = []
        disabled_columns = []
        for column_name in registration_settings.get_participant_list_columns(self.event_new):
            if column_name in available_columns:
                enabled_columns.append({'id': column_name, 'title': available_columns[column_name]})
                del available_columns[column_name]
        for column_name, column_title in available_columns.iteritems():
            disabled_columns.append({'id': column_name, 'title': column_title})
        disabled_columns.sort(key=itemgetter('title'))

        available_forms = {regform.id: regform for regform in regforms}
        enabled_forms = []
        disabled_forms = []
        # Handle forms that have already been sorted by the user.
        for form_id in registration_settings.get_participant_list_form_ids(self.event_new):
            try:
                regform = available_forms[form_id]
            except KeyError:
                continue
            # Make sure publication was not disabled since the display settings were modified.
            if regform.publish_registrations_enabled:
                enabled_forms.append(regform)
                del available_forms[form_id]
        for form_id, regform in available_forms.iteritems():
            # There might be forms with publication enabled that haven't been sorted by the user yet.
            if regform.publish_registrations_enabled:
                enabled_forms.append(regform)
            else:
                disabled_forms.append(regform)
        disabled_forms.sort(key=attrgetter('title'))

        merge_forms = registration_settings.get(self.event_new, 'merge_registration_forms')
        return WPManageRegistration.render_template('management/regform_display.html', self.event_new,
                                                    regforms=regforms, enabled_columns=enabled_columns,
                                                    disabled_columns=disabled_columns, enabled_forms=enabled_forms,
                                                    disabled_forms=disabled_forms, merge_forms=merge_forms, form=form)
Esempio n. 6
0
    def _participant_list_table(self, regform):
        def _process_registration(reg, column_ids, active_fields):
            data_by_field = reg.data_by_field

            def _content(column_id):
                if column_id in data_by_field:
                    return data_by_field[column_id].get_friendly_data(for_humans=True)
                elif (column_id in active_fields and active_fields[column_id].personal_data_type is not None and
                        active_fields[column_id].personal_data_type.column is not None):
                    # some legacy registrations have no data in the firstname/lastname/email field
                    # so we need to get it from the registration object itself
                    return getattr(reg, active_fields[column_id].personal_data_type.column)
                else:
                    # no data available for the field
                    return ''

            def _sort_key_date(column_id):
                data = data_by_field.get(column_id)
                if data and data.field_data.field.input_type == 'date':
                    return data.data
                else:
                    return None

            columns = [{'text': _content(column_id), 'sort_key': _sort_key_date(column_id)} for column_id in column_ids]
            return {'checked_in': self._is_checkin_visible(reg), 'columns': columns}

        active_fields = {field.id: field for field in regform.active_fields}
        column_ids = [column_id
                      for column_id in registration_settings.get_participant_list_columns(self.event, regform)
                      if column_id in active_fields]
        headers = [active_fields[column_id].title.title() for column_id in column_ids]
        query = (Registration.query.with_parent(regform)
                 .filter(Registration.is_state_publishable)
                 .options(subqueryload('data'))
                 .order_by(db.func.lower(Registration.first_name),
                           db.func.lower(Registration.last_name),
                           Registration.friendly_id))
        is_participant = self.event.is_user_registered(session.user)
        registrations = [_process_registration(reg, column_ids, active_fields) for reg in query
                         if reg.is_publishable(is_participant)]
        return {'headers': headers,
                'rows': registrations,
                'title': regform.title,
                'show_checkin': any(registration['checked_in'] for registration in registrations),
                'num_participants': query.count()}
Esempio n. 7
0
    def _process(self):
        regforms = sorted(self.event.registration_forms, key=lambda f: f.title.lower())
        form = ParticipantsDisplayForm(regforms=regforms)
        if form.validate_on_submit():
            data = form.json.data
            registration_settings.set(self.event, 'merge_registration_forms', data['merge_forms'])
            registration_settings.set_participant_list_form_ids(self.event, data['participant_list_forms'])
            registration_settings.set_participant_list_columns(self.event, data['participant_list_columns'])
            flash(_('The participants display settings have been saved.'), 'success')
            return redirect(url_for('.manage_regforms_display', self.event))
        elif form.is_submitted():
            for error in form.error_list:
                flash(error, 'error')

        available_columns = {field[0].name: field[1]['title'] for field in PersonalDataType.FIELD_DATA}
        enabled_columns = []
        disabled_columns = []
        for column_name in registration_settings.get_participant_list_columns(self.event):
            if column_name in available_columns:
                enabled_columns.append({'id': column_name, 'title': available_columns[column_name]})
                del available_columns[column_name]
        for column_name, column_title in available_columns.items():
            disabled_columns.append({'id': column_name, 'title': column_title})
        disabled_columns.sort(key=itemgetter('title'))

        available_forms = {regform.id: regform for regform in regforms}
        sorted_forms = []
        # Handle forms that have already been sorted by the user.
        for form_id in registration_settings.get_participant_list_form_ids(self.event):
            try:
                regform = available_forms[form_id]
            except KeyError:
                continue
            sorted_forms.append(regform)
            del available_forms[form_id]
        for form_id, regform in available_forms.items():
            sorted_forms.append(regform)

        merge_forms = registration_settings.get(self.event, 'merge_registration_forms')
        return WPManageRegistration.render_template('management/regform_display.html', self.event,
                                                    regforms=regforms, enabled_columns=enabled_columns,
                                                    disabled_columns=disabled_columns, sorted_forms=sorted_forms,
                                                    merge_forms=merge_forms, form=form)
Esempio n. 8
0
    def _process(self):
        form = ParticipantsDisplayFormColumnsForm()
        if form.validate_on_submit():
            registration_settings.set_participant_list_columns(self.event, form.json.data['columns'], self.regform)
            flash(_('The settings for "{}" have been saved.').format(self.regform.title), 'success')
            return jsonify_data()

        available_fields = {field.id: field for field in self.regform.active_fields}
        enabled_fields = []
        for field_id in registration_settings.get_participant_list_columns(self.event, self.regform):
            try:
                field = available_fields[field_id]
            except KeyError:
                continue
            enabled_fields.append(field)
            del available_fields[field_id]

        disabled_fields = available_fields.values()
        return jsonify_template('events/registration/management/regform_display_form_columns.html', form=form,
                                enabled_columns=enabled_fields, disabled_columns=disabled_fields)