def edit_patient(request, patient_id): if request.method == "POST": data = json.loads(request.POST.get('result')) patinfo = data.get('patient') if patinfo: #this is all quite similar to creating a new patient; the code should probably be #consolidated patient = loader.get_patient(patinfo['_id']) patient.first_name = patinfo['fname'] patient.last_name = patinfo['lname'] patient.birthdate = string_to_datetime(patinfo['dob']).date() if patinfo['dob'] else None patient.birthdate_estimated = patinfo['dob_est'] patient.gender = patinfo['sex'] if patinfo.get('phone'): patient.phones = [CPhone(is_default=True, number=patinfo['phone'])] else: patient.phones = [] patient.address = CAddress(village=patinfo.get('village'), address=patinfo.get('address'), clinic_id=settings.BHOMA_CLINIC_ID, zone=patinfo['chw_zone'], zone_empty_reason=patinfo['chw_zone_na']) #update mother info only if was edited during patient edit, or if no linkage has yet been created if patinfo.get('mother_edited') or (patinfo.get('motherable') and (len(patient.relationships) == 0 or patient.relationships[0].patient_uuid == None)): mother = relationship_from_instance(patinfo) patient.relationships = [mother] if mother else [] patient.save() return HttpResponseRedirect(reverse("single_patient", args=(data.get('_id'),))) return render_to_response(request, "bhoma_touchscreen.html", {'form': {'name': 'patient edit', 'wfobj': 'wfEditPatient', 'wfargs': json.dumps(patient_id)}, 'mode': 'workflow', 'dynamic_scripts': ["%spatient/javascripts/patient_reg.js" \ % settings.STATIC_URL,] })
def patient_select(request): """ Entry point for patient select/registration workflow """ if request.method == "POST": data = json.loads(request.POST.get('result')) merge_id = data.get("merge_with", None) create_new = data.get("new") and not merge_id pat_dict = data.get("patient") if not data: return HttpResponseRedirect('/') elif create_new: # Here's an example format: # u'patient': {u'dob': u'2000-02-02', u'sex': u'm', # u'lname': u'alskdjf', u'phone': None, # u'fname': u'f8rask', u'village': u'PP'f, # u'dob_est': False, u'id': u'727272727272'}} # def map_basic_data(pat_dict): # let's use the same keys, for now this will have to suffice new_dict = {} mapping = (("dob", "birthdate"), ("fname", "first_name"), ("lname", "last_name"), ("dob_est", "birthdate_estimated"), ("sex", "gender"), ("id", "patient_id") ) for oldkey, newkey in mapping: new_dict[newkey] = pat_dict.get(oldkey) return new_dict clean_data = map_basic_data(pat_dict) patient = patient_from_instance(clean_data) if pat_dict.get("phone"): patient.phones=[CPhone(is_default=True, number=pat_dict["phone"])] else: patient.phones = [] # TODO: create an encounter for this reg? patient.address = CAddress(village=pat_dict.get("village"), address=pat_dict.get("address"), clinic_id=settings.BHOMA_CLINIC_ID, zone=pat_dict.get("chw_zone"), zone_empty_reason=pat_dict.get("chw_zone_na")) patient.clinic_ids = [settings.BHOMA_CLINIC_ID,] if pat_dict.get('motherable'): mother = relationship_from_instance(pat_dict) patient.relationships = [mother] if mother else [] patient.save() return HttpResponseRedirect(reverse("single_patient", args=(patient.get_id,))) elif merge_id: return HttpResponseRedirect(reverse("single_patient", args=(merge_id,))) elif pat_dict is not None: # we get a real couch patient object in this case pat_uid = pat_dict["_id"] return HttpResponseRedirect(reverse("single_patient", args=(pat_uid,))) return render_to_response(request, "bhoma_touchscreen.html", {'form': {'name': 'patient reg', 'wfobj': 'wfGetPatient'}, 'mode': 'workflow', 'dynamic_scripts': ["%spatient/javascripts/patient_reg.js" \ % settings.STATIC_URL,] })