def get_or_create_patient(self, patient_id, phone_number=None, \ backend=None, gender=None, date_registered=None): response = '' try: patient = Patient.objects.get(alias__iexact=patient_id) response = _("Patient %(id)s reregistered ") % {"id": patient_id } if not patient.subscribed: patient.subscribe() p_created = False except Patient.DoesNotExist: patient = Patient(alias=patient_id) response = _("Patient %(id)s registered ") % {"id": patient_id } p_created = True site_code = site_code_from_patient_id(patient_id) try: patient.site = Site.objects.get( code__iexact=site_code ) except Site.DoesNotExist: response = _("Site %(code)s does not exist") % {"code": site_code } return (patient, response) if gender: patient.gender = gender patient.state = PatientState.objects.get(code='default') if date_registered: patient.date_registered = date_registered patient.save() if phone_number is None: return (patient, response) # save connections conn, c_created = PersistantConnection.objects.get_or_create(\ identity= phone_number, backend=backend) if conn.reporter is None: response = response + \ _("with new number %(num)s") % \ {"num": phone_number} else: response = response + \ _("with existing number %(num)s") % \ {"num": phone_number } if conn.reporter.alias != patient.alias: response = response + _(" (from patient %(old_id)s)") % \ {"old_id": conn.reporter.alias } conn.reporter = patient conn.save() patient.set_preferred_connection( conn ) # you can only subscribe the patient once you have established # their preferred connection patient.subscribe() return (patient, response)
def is_patient_invalid(self, patient_id, gender=None, phone_number=None): if len(patient_id) == 0: return [_("Missing 'patient_id'.") + REGISTER_COMMAND ] try: site_code = site_code_from_patient_id(patient_id) except ValueError: return [_("Poorly formatted patient_id: %(code)s") % \ {"code" : patient_id}] try: Site.objects.get(code=site_code) except Site.DoesNotExist: return [_("Unknown sitecode %(code)s") % {"code" : site_code}] if len(gender) > 0: if not gender.lower().startswith('m') and not gender.lower().startswith('f'): return [_("Invalid gender %(gender)s") % {"gender" : gender}] if len(phone_number) > 0: if not re.match(r"^\+?\d+$", phone_number): return [_("Invalid phone number %(num)s") % {"num" : phone_number}] return False
def is_patient_invalid(self, patient_id, gender=None, phone_number=None): if len(patient_id) == 0: return [_("Missing 'patient_id'. ") + REGISTER_COMMAND ] try: site_code = site_code_from_patient_id(patient_id) except ValueError: return [_("Patient (%(id)s) not recognized") % \ {"id" : patient_id}] try: Site.objects.get(code__iexact=site_code) except Site.DoesNotExist: response = _("Site %(code)s does not exist") % {"code": site_code } return [response] if len(gender) > 0: if not gender.lower().startswith('m') and not gender.lower().startswith('f'): return [_("Invalid gender %(gender)s") % {"gender" : gender}] if len(phone_number) > 0: if not re.match(r"^\+?\d+$", phone_number): return [_("Invalid phone number %(num)s") % {"num" : phone_number}] return False