예제 #1
0
 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()
예제 #2
0
    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)
예제 #3
0
 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()
예제 #4
0
 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)