def create_registration(regform, data, invitation=None, management=False, notify_user=True): registration = Registration(registration_form=regform, user=get_user_by_email(data['email']), base_price=regform.base_price, currency=regform.currency) for form_item in regform.active_fields: if form_item.parent.is_manager_only: with db.session.no_autoflush: value = form_item.field_impl.default_value else: value = data.get(form_item.html_field_name) with db.session.no_autoflush: data_entry = RegistrationData() registration.data.append(data_entry) for attr, value in form_item.field_impl.process_form_data(registration, value).iteritems(): setattr(data_entry, attr, value) if form_item.type == RegistrationFormItemType.field_pd and form_item.personal_data_type.column: setattr(registration, form_item.personal_data_type.column, value) if invitation is None: # Associate invitation based on email in case the user did not use the link with db.session.no_autoflush: invitation = (RegistrationInvitation .find(email=data['email'], registration_id=None) .with_parent(regform) .first()) if invitation: invitation.state = InvitationState.accepted invitation.registration = registration registration.sync_state(_skip_moderation=management) db.session.flush() notify_registration_creation(registration, notify_user) logger.info('New registration %s by %s', registration, session.user) return registration
def create_registration(regform, data, invitation=None, management=False, notify_user=True, skip_moderation=None): user = session.user if session else None registration = Registration(registration_form=regform, user=get_user_by_email(data['email']), base_price=regform.base_price, currency=regform.currency) if skip_moderation is None: skip_moderation = management for form_item in regform.active_fields: if form_item.parent.is_manager_only: value = form_item.field_impl.default_value else: value = data.get(form_item.html_field_name) data_entry = RegistrationData() registration.data.append(data_entry) for attr, value in form_item.field_impl.process_form_data(registration, value).items(): setattr(data_entry, attr, value) if form_item.type == RegistrationFormItemType.field_pd and form_item.personal_data_type.column: setattr(registration, form_item.personal_data_type.column, value) if invitation is None: # Associate invitation based on email in case the user did not use the link invitation = (RegistrationInvitation.query .filter_by(email=data['email'], registration_id=None) .with_parent(regform) .first()) if invitation: invitation.state = InvitationState.accepted invitation.registration = registration registration.sync_state(_skip_moderation=skip_moderation) db.session.flush() signals.event.registration_created.send(registration, management=management, data=data) notify_registration_creation(registration, notify_user) logger.info('New registration %s by %s', registration, user) registration.log(EventLogRealm.management if management else EventLogRealm.participants, EventLogKind.positive, 'Registration', f'New registration: {registration.full_name}', user, data={'Email': registration.email}) return registration
def create_registration(regform, data, invitation=None, management=False, notify_user=True, skip_moderation=None): user = session.user if session else None registration = Registration(registration_form=regform, user=get_user_by_email(data['email']), base_price=regform.base_price, currency=regform.currency) if skip_moderation is None: skip_moderation = management for form_item in regform.active_fields: if form_item.parent.is_manager_only: value = form_item.field_impl.default_value else: value = data.get(form_item.html_field_name) data_entry = RegistrationData() registration.data.append(data_entry) for attr, value in form_item.field_impl.process_form_data(registration, value).iteritems(): setattr(data_entry, attr, value) if form_item.type == RegistrationFormItemType.field_pd and form_item.personal_data_type.column: setattr(registration, form_item.personal_data_type.column, value) if invitation is None: # Associate invitation based on email in case the user did not use the link invitation = (RegistrationInvitation .find(email=data['email'], registration_id=None) .with_parent(regform) .first()) if invitation: invitation.state = InvitationState.accepted invitation.registration = registration registration.sync_state(_skip_moderation=skip_moderation) db.session.flush() notify_registration_creation(registration, notify_user) logger.info('New registration %s by %s', registration, user) regform.event.log(EventLogRealm.management if management else EventLogRealm.participants, EventLogKind.positive, 'Registration', 'New registration: {}'.format(registration.full_name), user, data={'Email': registration.email}) return registration