def bhoma_case_from_xml(test_class, filename, pat_id_override=None, referral_id_override=None): file_path = os.path.join(os.path.dirname(__file__), "data", filename) with open(file_path, "rb") as f: xml_data = f.read() doc_id, uid, case_id, ref_id = replace_ids_and_post(xml_data, case_id_override=pat_id_override, referral_id_override=referral_id_override) doc = CXFormInstance.get(doc_id) encounter = Encounter.from_xform(doc) case = get_or_update_bhoma_case(doc, encounter) test_class.assertNotEqual(None, case) return case
def add_form_to_patient(patient_id, form): """ Adds a clinic form to a patient, including all processing necessary. """ patient = CPatient.get(patient_id) new_encounter = Encounter.from_xform(form) patient.encounters.append(new_encounter) encounter_info = ENCOUNTERS_BY_XMLNS.get(form.namespace) if not encounter_info: raise Exception("Attempt to add unknown form type: %s to patient %s!" % \ (form.namespace, patient_id)) if encounter_info.classification == CLASSIFICATION_CLINIC: case = get_or_update_bhoma_case(form, new_encounter) if case: patient.cases.append(case) if is_pregnancy_encounter(new_encounter): update_pregnancies(patient, new_encounter) if is_delivery_encounter(new_encounter): update_deliveries(patient, new_encounter) elif encounter_info.classification == CLASSIFICATION_PHONE: # process phone form process_phone_form(patient, new_encounter) else: logging.error("Unknown classification %s for encounter: %s" % \ (encounter_info.classification, form.get_id)) # finally close any previous cases we had open, according # to the complicated rules close_previous_cases_from_new_form(patient, form, new_encounter) patient.save()