def _clone_form_items(self, old_form, new_form, clone_all_revisions): old_sections = RegistrationFormSection.find( RegistrationFormSection.registration_form_id == old_form.id) items_attrs = get_simple_column_attrs(RegistrationFormSection) for old_section in old_sections: new_section = RegistrationFormSection( **{attr: getattr(old_section, attr) for attr in items_attrs}) for old_item in old_section.children: new_item = RegistrationFormItem( parent=new_section, registration_form=new_form, **{attr: getattr(old_item, attr) for attr in items_attrs}) if new_item.is_field: if clone_all_revisions: self._clone_all_field_versions(old_item, new_item) else: field_data = RegistrationFormFieldData( field=new_item, versioned_data=old_item.versioned_data) new_item.current_data = field_data self._field_data_map[ old_item.current_data] = field_data new_section.children.append(new_item) new_form.form_items.append(new_section) db.session.flush()
def _process(self): new_position = request.json['endPos'] + 1 old_position = self.section.position if new_position == old_position: return jsonify(success=True) elif new_position < old_position: def fn(section): return (section.position >= new_position and section.id != self.section.id and not section.is_deleted and section.is_enabled) start_enum = new_position + 1 else: def fn(section): return (old_position < section.position <= new_position and section.id != self.section.id and not section.is_deleted and section.is_enabled) start_enum = self.section.position to_update = filter( fn, RegistrationFormSection.find( registration_form=self.regform, is_deleted=False).order_by( RegistrationFormSection.position).all()) self.section.position = new_position for pos, section in enumerate(to_update, start_enum): section.position = pos db.session.flush() return jsonify(success=True)
def _clone_form_items(self, old_form, new_form, clone_all_revisions): old_sections = RegistrationFormSection.find(RegistrationFormSection.registration_form_id == old_form.id) items_attrs = get_simple_column_attrs(RegistrationFormSection) for old_section in old_sections: new_section = RegistrationFormSection(**{attr: getattr(old_section, attr) for attr in items_attrs}) for old_item in old_section.children: new_item = RegistrationFormItem(parent=new_section, registration_form=new_form, **{attr: getattr(old_item, attr) for attr in items_attrs}) if new_item.is_field: if clone_all_revisions: self._clone_all_field_versions(old_item, new_item) else: field_data = RegistrationFormFieldData(field=new_item, versioned_data=old_item.versioned_data) new_item.current_data = field_data self._field_data_map[old_item.current_data] = field_data new_section.children.append(new_item) new_form.form_items.append(new_section) db.session.flush()
def _process(self): new_position = request.json['endPos'] + 1 old_position = self.section.position if new_position == old_position: return jsonify(success=True) elif new_position < old_position: def fn(section): return section.position >= new_position and section.id != self.section.id start_enum = new_position + 1 else: def fn(section): return (section.position > old_position and section.position <= new_position and section.id != self.section.id) start_enum = self.section.position to_update = filter(fn, RegistrationFormSection.find(registration_form=self.regform, is_deleted=False) .order_by(RegistrationFormSection.position).all()) self.section.position = new_position for pos, section in enumerate(to_update, start_enum): section.position = pos db.session.flush() return jsonify(success=True)