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)
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)
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
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