def test_get_get_subrecord_from_model_name(self): self.assertEqual(tmodels.HatWearer, subrecords.get_subrecord_from_model_name("HatWearer")) self.assertEqual( tmodels.FamousLastWords, subrecords.get_subrecord_from_model_name("FamousLastWords"))
def test_get_get_subrecord_from_model_name(self): self.assertEqual( tmodels.HatWearer, subrecords.get_subrecord_from_model_name("HatWearer") ) self.assertEqual( tmodels.FamousLastWords, subrecords.get_subrecord_from_model_name("FamousLastWords") )
def get_or_create_patient(self, data, user): Demographics = subrecords.get_subrecord_from_model_name('Demographics') demographics_fields = Demographics._get_fieldnames_to_serialize() demographics_data = { i: v for i, v in data.iteritems() if v and i in demographics_fields } filter_fields = [ "first_name", "surname", "hospital_number", "nhs_number" ] filter_args = { i: v for i, v in demographics_data.iteritems() if v and i in filter_fields } demographics = Demographics.objects.filter( **filter_args ).first() if demographics: created = False patient = demographics.patient else: created = True patient = models.Patient.objects.create() demographics = patient.demographics_set.first() demographics.update_from_dict(demographics_data, user) return patient, created
def get_or_create_patient(self, data, user): Demographics = subrecords.get_subrecord_from_model_name('Demographics') demographics_fields = Demographics._get_fieldnames_to_serialize() demographics_data = { i: v for i, v in data.iteritems() if v and i in demographics_fields } filter_fields = [ "first_name", "surname", "hospital_number", "nhs_number" ] filter_args = { i: v for i, v in demographics_data.iteritems() if v and i in filter_fields } demographics = Demographics.objects.filter(**filter_args).first() if demographics: created = False patient = demographics.patient else: created = True patient = models.Patient.objects.create() demographics = patient.demographics_set.first() demographics.update_from_dict(demographics_data, user) return patient, created
def test_demographics_does_not_exist(self): # This is one of those things that should not exist, but let's make # doubly sure that we raise an exception if it does happen ! patient = models.Patient.objects.create() patient.demographics_set.get().delete() Demographics = subrecords.get_subrecord_from_model_name('Demographics') with self.assertRaises(Demographics.DoesNotExist): demographics = patient.demographics()
def _model_and_field_from_path(fieldname): model_name, field_name = fieldname.split(".") model = get_subrecord_from_model_name(model_name) field = None if hasattr(model, field_name): # this is true for lookuplists lookuplist_field = getattr(model, field_name) if isinstance(lookuplist_field, fields.ForeignKeyOrFreeText): field = lookuplist_field if not field: field = model._meta.get_field(field_name) return model, field
def _model_and_field_from_path(fieldname): model_name, field_name = fieldname.split(".") model = get_subrecord_from_model_name(model_name) field = None if hasattr(model, field_name): # this is true for lookuplists lookuplist_field = getattr(model, field_name) if lookuplist_field.__class__ == fields.ForeignKeyOrFreeText: field = lookuplist_field if not field: field = model._meta.get_field(field_name) return model, field
def update_contact_details(self, patient, data, user): """ current behaviour is if there are no contact details we'll let you populate them, otherwise they'll stay the same """ ContactDetails = subrecords.get_subrecord_from_model_name('ContactDetails') contact_details_fields = ContactDetails._get_fieldnames_to_serialize() contact_details = patient.contactdetails_set.first() if not contact_details.updated: contact_detail_data = { i: v for i, v in data.iteritems() if i in contact_details_fields } contact_details.update_from_dict(contact_detail_data, user)
def update_contact_details(self, patient, data, user): """ current behaviour is if there are no contact details we'll let you populate them, otherwise they'll stay the same """ ContactDetails = subrecords.get_subrecord_from_model_name( 'ContactDetails') contact_details_fields = ContactDetails._get_fieldnames_to_serialize() contact_details = patient.contactdetails_set.first() if not contact_details.updated: contact_detail_data = { i: v for i, v in data.iteritems() if i in contact_details_fields } contact_details.update_from_dict(contact_detail_data, user)
def list(self, request, *args, **kwargs): Demographics = subrecords.get_subrecord_from_model_name("Demographics") hospital_number = request.query_params.get("hospital_number") if not hospital_number: return HttpResponseBadRequest("Please pass in a hospital number") demographics = Demographics.objects.filter( hospital_number=hospital_number).last() # the patient is in elcid if demographics: return json_response( dict(patient=demographics.patient.to_dict(request.user), status=self.PATIENT_FOUND_IN_APPLICATION)) else: if getattr(settings, "UPSTREAM_DEMOGRAPHICS_SERVICE", None): upstream_demographics = import_string( settings.UPSTREAM_DEMOGRAPHICS_SERVICE) demographics = upstream_demographics(hospital_number) if demographics: return json_response( dict(patient=dict(demographics=[demographics]), status=self.PATIENT_FOUND_UPSTREAM)) return json_response(dict(status=self.PATIENT_NOT_FOUND))
def test_subrecord_does_not_exist(self): with self.assertRaises(ValueError): subrecords.get_subrecord_from_model_name('NotAModel')
""" Patient matching """ import collections from opal import models from opal.core import subrecords from . import exceptions Demographics = subrecords.get_subrecord_from_model_name('Demographics') Mapping = collections.namedtuple( 'Mapping', ('data_fieldname', 'demographics_fieldname') ) class FieldConverter(object): def __init__(self, convert, target_fieldname): self.convert = convert self.target_fieldname = target_fieldname def get_value(self, raw_data): return self.convert(raw_data) class Matcher(object): direct_match_field = None attribute_match_fields = []