def create(self, request): """ Create a new episode, optionally implicitly creating a patient. * Extract the data from the request * Create or locate the patient * Create a new episode * Update the patient with any extra data passed in * return the patient """ demographics_data = request.data.pop('demographics', None) location_data = request.data.pop('location', {}) tagging = request.data.pop('tagging', {}) hospital_number = demographics_data.get('hospital_number', None) if hospital_number: patient, created = Patient.objects.get_or_create( demographics__hospital_number=hospital_number) if created: demographics = patient.demographics_set.get() demographics.hospital_number = hospital_number demographics.save() else: patient = Patient.objects.create() patient.update_from_demographics_dict(demographics_data, request.user) episode = Episode(patient=patient) episode.update_from_dict(request.data, request.user) location = episode.location_set.get() location.update_from_dict(location_data, request.user) episode.set_tag_names([n for n, v in tagging[0].items() if v], request.user) serialised = episode.to_dict(request.user) return _build_json_response(serialised, status_code=status.HTTP_201_CREATED)
def create(self, request): from opal.models import Patient hospital_number = request.data.pop('patient_hospital_number', None) tagging = request.data.pop('tagging', {}) if hospital_number: patient, created = Patient.objects.get_or_create( demographics__hospital_number=hospital_number) if created: demographics = patient.demographics_set.get() demographics.hospital_number = hospital_number demographics.save() else: patient = Patient.objects.create() episode = Episode(patient=patient) episode.update_from_dict(request.data, request.user) episode.set_tag_names([n for n, v in tagging[0].items() if v], request.user) serialised = episode.to_dict(request.user) return Response(serialised, status=status.HTTP_201_CREATED)
def create(self, request): """ Create a new episode, optionally implicitly creating a patient. * Extract the data from the request * Create or locate the patient * Create a new episode * Update the patient with any extra data passed in * return the patient """ demographics_data = request.data.pop('demographics', None) location_data = request.data.pop('location', {}) tagging = request.data.pop('tagging', {}) hospital_number = demographics_data.get('hospital_number', None) if hospital_number: patient, created = Patient.objects.get_or_create( demographics__hospital_number=hospital_number) if created: demographics = patient.demographics_set.get() demographics.hospital_number = hospital_number demographics.save() else: patient = Patient.objects.create() patient.update_from_demographics_dict(demographics_data, request.user) episode = Episode(patient=patient) episode.update_from_dict(request.data, request.user) location = episode.location_set.get() location.update_from_dict(location_data, request.user) episode.set_tag_names(list(tagging.keys()), request.user) serialised = episode.to_dict(request.user) return json_response( serialised, status_code=status.HTTP_201_CREATED )