Esempio n. 1
0
    def add_subcase_block(self):

        parent_node = self.xform.data_node
        action = next(self.form.actions.get_open_actions())
        case_id = session_var(action.case_session_var)
        subcase_node = _make_elem('{x}subcase_0')
        parent_node.append(subcase_node)
        subcase_node.insert(0, self.subcase_block.elem)
        self.subcase_block.add_create_block(
            relevance=self.xform.action_relevance(action.open_condition),
            case_name=self.subcase.case_name,
            case_type=self.subcase.case_type,
            delay_case_id=bool(self.subcase.repeat_context),
            autoset_owner_id=autoset_owner_id_for_advanced_action(action),
            has_case_sharing=self.form.get_app().case_sharing,
            case_id=case_id)
        self.subcase_block.add_update_block(self.subcase.case_properties)
Esempio n. 2
0
    def add_subcase_block(self):

        parent_node = self.xform.data_node
        action = next(self.form.actions.get_open_actions())
        case_id = session_var(action.case_session_var)
        subcase_node = _make_elem('{x}subcase_0')
        parent_node.append(subcase_node)
        subcase_node.insert(0, self.subcase_block.elem)
        self.subcase_block.add_create_block(
            relevance=self.xform.action_relevance(action.open_condition),
            case_name=self.subcase.case_name,
            case_type=self.subcase.case_type,
            delay_case_id=bool(self.subcase.repeat_context),
            autoset_owner_id=autoset_owner_id_for_advanced_action(action),
            has_case_sharing=self.form.get_app().case_sharing,
            case_id=case_id
        )
        self.subcase_block.add_update_block(self.subcase.case_properties)
Esempio n. 3
0
def _ucla_form_modifier(form, question_ids):

    message = ""

    xform = form.wrapped_xform()

    # Get the questions specified in question_ids
    question_dict = {
        q["value"].split("/")[-1]: FormQuestion.wrap(q)
        for q in form.get_questions(["en"])
    }
    question_ids = {q for q in question_ids}.intersection(question_dict.keys())
    questions = [question_dict[k] for k in question_ids]

    # Get the existing subcases
    existing_subcases = {c.case_name: c for c in form.actions.subcases}

    message += "Found %s questions.\n" % len(questions)

    for question in questions:
        for option in question.options:

            hidden_value_tag = question.value.split(
                "/")[-1] + "-" + option.value
            hidden_value_path = "/data/" + hidden_value_tag
            hidden_value_text = option.label

            # Create new hidden values for each question option if they don't already exist:

            if hidden_value_tag not in question_dict:

                # Add data element
                tag = "{x}%s" % hidden_value_tag
                element = etree.Element(tag.format(**namespaces))
                xform.data_node.append(element)

                # Add bind
                xform.itext_node.addprevious(
                    _make_elem(
                        "bind", {
                            "nodeset": xform.resolve_path(hidden_value_path),
                            "calculate": '"' + hidden_value_text + '"'
                        }))

                message += "Node " + hidden_value_path + " created!\n"
            else:
                message += "Node " + hidden_value_path + " already exists, skipping.\n"

            # Create FormActions for opening subcases

            if hidden_value_path not in existing_subcases:
                action = OpenSubCaseAction(
                    condition=FormActionCondition(
                        type='if',
                        question=question.value,
                        operator='selected',
                        answer=option.value,
                    ),
                    case_name=hidden_value_path,
                    case_type='task',
                    # Note, the case properties will not necessarily be created in the order given.
                    case_properties={
                        'task_responsible': '/data/task_responsible',
                        'task_due': '/data/task_due',
                        'owner_id': '/data/owner_id',
                        'task_risk_factor': '/data/task_risk_factor',
                        'study_id': '/data/study_id',
                        'patient_name': '/data/patient_name'
                    },
                    close_condition=FormActionCondition(answer=None,
                                                        operator=None,
                                                        question=None,
                                                        type='never'))
                form.actions.subcases.append(action)
                message += "OpenSubCaseAction " + hidden_value_path + " created!\n"
            else:
                message += "OpenSubCaseAction " + hidden_value_path + " already exists, skipping.\n"

    app = form.get_app()
    # Save the xform modifications
    save_xform(app, form, etree.tostring(xform.xml, encoding="unicode"))
    # save the action modifications
    app.save()
    message += "Form saved.\n"
    return message
Esempio n. 4
0
def _ucla_form_modifier(form, question_ids):

    message = ""

    xform = form.wrapped_xform()

    # Get the questions specified in question_ids
    question_dict = {q["value"].split("/")[-1]: FormQuestion.wrap(q) for q in form.get_questions(["en"])}
    question_ids = {q for q in question_ids}.intersection(question_dict.keys())
    questions = [question_dict[k] for k in question_ids]

    # Get the existing subcases
    existing_subcases = {c.case_name:c for c in form.actions.subcases}

    message += "Found %s questions.\n" % len(questions)

    for question in questions:
        for option in question.options:

            hidden_value_tag = question.value.split("/")[-1] + "-" + option.value
            hidden_value_path = "/data/" + hidden_value_tag
            hidden_value_text = option.label

            # Create new hidden values for each question option if they don't already exist:

            if hidden_value_tag not in question_dict:

                # Add data element
                tag = "{x}%s" % hidden_value_tag
                element = etree.Element(tag.format(**namespaces))
                xform.data_node.append(element)

                # Add bind
                xform.itext_node.addprevious(_make_elem("bind",{
                    "nodeset": xform.resolve_path(hidden_value_path),
                    "calculate": '"'+hidden_value_text+'"'
                }))

                message += "Node " + hidden_value_path + " created!\n"
            else:
                message += "Node " + hidden_value_path + " already exists, skipping.\n"

            # Create FormActions for opening subcases

            if hidden_value_path not in existing_subcases:
                action = OpenSubCaseAction(
                    condition=FormActionCondition(
                        type='if',
                        question=question.value,
                        operator='selected',
                        answer=option.value,
                    ),
                    case_name=hidden_value_path,
                    case_type='task',
                    # Note, the case properties will not necessarily be created in the order given.
                    case_properties={
                        'task_responsible': '/data/task_responsible',
                        'task_due': '/data/task_due',
                        'owner_id': '/data/owner_id',
                        'task_risk_factor': '/data/task_risk_factor',
                        'study_id': '/data/study_id',
                        'patient_name': '/data/patient_name'
                    },
                    close_condition=FormActionCondition(
                        answer=None,
                        operator=None,
                        question=None,
                        type='never'
                    )
                )
                form.actions.subcases.append(action)
                message += "OpenSubCaseAction " + hidden_value_path + " created!\n"
            else:
                message += "OpenSubCaseAction " + hidden_value_path + " already exists, skipping.\n"

    app = form.get_app()
    # Save the xform modifications
    save_xform(app, form, etree.tostring(xform.xml, encoding="unicode"))
    # save the action modifications
    app.save()
    message += "Form saved.\n"
    return message