Example #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()
Example #2
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()
Example #3
0
def _get_sorted_regform_items(regform, item_ids):
    """Return the form items ordered by their position in the registration form."""

    return (RegistrationFormItem.find(
        ~RegistrationFormItem.is_deleted,
        RegistrationFormItem.id.in_(item_ids)).with_parent(regform).join(
            RegistrationFormItem.parent, aliased=True).filter(
                ~RegistrationFormItem.is_deleted)  # parent deleted
            .order_by(RegistrationFormItem.position)  # parent position
            .reset_joinpoint().order_by(
                RegistrationFormItem.position)  # item position
            .all())
Example #4
0
def _get_sorted_regform_items(regform, item_ids):
    """Return the form items ordered by their position in the registration form."""

    return (
        RegistrationFormItem.find(~RegistrationFormItem.is_deleted, RegistrationFormItem.id.in_(item_ids))
        .with_parent(regform)
        .join(RegistrationFormItem.parent, aliased=True)
        .filter(~RegistrationFormItem.is_deleted)  # parent deleted
        .order_by(RegistrationFormItem.position)  # parent position
        .reset_joinpoint()
        .order_by(RegistrationFormItem.position)  # item position
        .all()
    )
Example #5
0
def _get_basic_columns(form, ids):
    """
    Retrieve information needed for the header of "basic" columns (personal + special).

    Returns a list of ``{'id': ..., 'caption': ...}`` dictionaries.
    """
    result = []
    for item_id in PERSONAL_COLUMNS:
        if item_id in ids:
            field = RegistrationFormItem.find_one(registration_form=form, personal_data_type=PersonalDataType[item_id])
            result.append({"id": field.id, "caption": field.title})

    for item_id in SPECIAL_COLUMNS:
        if item_id in ids:
            result.append({"id": item_id, "caption": SPECIAL_COLUMN_LABELS[item_id]["title"]})
    return result
Example #6
0
    def _get_static_columns(self, ids):
        """
        Retrieve information needed for the header of the static
        columns (including static and personal items).

        :return: a list of {'id': ..., 'caption': ...} dicts
        """
        result = []
        for item_id in ids:
            if item_id in self.personal_items:
                field = RegistrationFormItem.find_one(
                    registration_form=self.regform, personal_data_type=PersonalDataType[item_id]
                )
                result.append({"id": field.id, "caption": field.title})
            elif item_id in self.static_items:
                result.append({"id": item_id, "caption": self.static_items[item_id]["title"]})
        return result
Example #7
0
    def _get_static_columns(self, ids):
        """
        Retrieve information needed for the header of the static
        columns (including static and personal items).

        :return: a list of {'id': ..., 'caption': ...} dicts
        """
        result = []
        for item_id in ids:
            if item_id in self.personal_items:
                field = RegistrationFormItem.find_one(
                    registration_form=self.regform,
                    personal_data_type=PersonalDataType[item_id])
                result.append({'id': field.id, 'caption': field.title})
            elif item_id in self.static_items:
                result.append({
                    'id': item_id,
                    'caption': self.static_items[item_id]['title']
                })
        return result
Example #8
0
def _get_basic_columns(form, ids):
    """
    Retrieve information needed for the header of "basic" columns (personal + special).

    Returns a list of ``{'id': ..., 'caption': ...}`` dictionaries.
    """
    result = []
    for item_id in PERSONAL_COLUMNS:
        if item_id in ids:
            field = RegistrationFormItem.find_one(
                registration_form=form,
                personal_data_type=PersonalDataType[item_id])
            result.append({'id': field.id, 'caption': field.title})

    for item_id in SPECIAL_COLUMNS:
        if item_id in ids:
            result.append({
                'id': item_id,
                'caption': SPECIAL_COLUMN_LABELS[item_id]['title']
            })
    return result