示例#1
0
 def post(self, args, pk=None, category=None, **kwargs):
     old = models.Episode.objects.get(pk=pk)
     new = models.Episode(patient=old.patient,
                          category=category,
                          date_of_admission=old.date_of_admission)
     new.save()
     for sub in episode_subrecords():
         if sub._is_singleton:
             continue
         for item in sub.objects.filter(episode=old):
             item.id = None
             item.episode = new
             item.save()
     serialised = new.to_dict(self.request.user)
     glossolalia.admit(serialised)
     return _build_json_response(serialised)
示例#2
0
 def post(self, args, pk=None, category=None, **kwargs):
     old = models.Episode.objects.get(pk=pk)
     new = models.Episode(patient=old.patient,
                          category=category,
                          date_of_admission=old.date_of_admission)
     new.save()
     for sub in episode_subrecords():
         if sub._is_singleton:
             continue
         for item in sub.objects.filter(episode=old):
             item.id = None
             item.episode = new
             item.save()
     serialised = new.to_dict(self.request.user)
     glossolalia.admit(serialised)
     return _build_json_response(serialised)
示例#3
0
 def test_admit_calls_send_upstream(self, sender):
     with patch('opal.core.glossolalia.INTEGRATING', new=True):
         admit = glossolalia.admit({})
         self.assertEqual('admit', sender.call_args[0][0])
         self.assertEqual({},
                          json.loads(
                              sender.call_args[0][1]['data'])['episode'])
示例#4
0
def episode_list_and_create_view(request):
    if request.method == 'GET':
        serialised = models.Episode.objects.serialised_active(request.user)
        return _build_json_response(serialised)

    elif request.method == 'POST':
        data = _get_request_data(request)
        hospital_number = data['demographics'].get('hospital_number')
        if hospital_number:
            patient, _ = models.Patient.objects.get_or_create(
                demographics__hospital_number=hospital_number)
        else:
            patient = models.Patient.objects.create()

        patient.update_from_demographics_dict(data['demographics'],
                                              request.user)
        try:
            episode = patient.create_episode()
            episode_fields = models.Episode._get_fieldnames_to_serialize()
            episode_data = {}
            for fname in episode_fields:
                if fname in data:
                    episode_data[fname] = data[fname]
            episode.update_from_dict(episode_data, request.user)

        except exceptions.APIError:
            return _build_json_response(
                {'error': 'Patient already has active episode'}, 400)

        location = episode.location_set.get()
        location.update_from_dict(data['location'], request.user)
        if 'tagging' in data:
            tag_names = [n for n, v in data['tagging'][0].items() if v]
            episode.set_tag_names(tag_names, request.user)

        serialised = episode.to_dict(request.user)
        glossolalia.admit(serialised)
        return _build_json_response(serialised, 201)
示例#5
0
def episode_list_and_create_view(request):
    if request.method == 'GET':
        serialised = models.Episode.objects.serialised_active(request.user)
        return _build_json_response(serialised)

    elif request.method == 'POST':
        data = _get_request_data(request)
        hospital_number = data['demographics'].get('hospital_number')
        if hospital_number:
            patient, _ = models.Patient.objects.get_or_create(
                demographics__hospital_number=hospital_number)
        else:
            patient = models.Patient.objects.create()

        patient.update_from_demographics_dict(data['demographics'], request.user)
        try:
            episode = patient.create_episode()
            episode_fields = models.Episode._get_fieldnames_to_serialize()
            episode_data = {}
            for fname in episode_fields:
                if fname in data:
                    episode_data[fname] = data[fname]
            episode.update_from_dict(episode_data, request.user)

        except exceptions.APIError:
            return _build_json_response(
                {'error': 'Patient already has active episode'}, 400)

        location = episode.location_set.get()
        location.update_from_dict(data['location'], request.user)
        if 'tagging' in data:
            tag_names = [n for n, v in data['tagging'][0].items() if v]
            episode.set_tag_names(tag_names, request.user)

        serialised = episode.to_dict(request.user)
        glossolalia.admit(serialised)
        return _build_json_response(serialised, 201)
示例#6
0
 def test_admit_not_integratng(self, sender):
     with patch('opal.core.glossolalia.INTEGRATING', new=False):
         admit = glossolalia.admit(None)
         self.assertEqual(
             None, admit)  # Mostly a proxy for "Does this stacktrace?"
         self.assertFalse(sender.called)
 def test_admit_calls_send_upstream(self, sender):
     with patch('opal.core.glossolalia.INTEGRATING', new=True):
         admit = glossolalia.admit({})
         self.assertEqual('admit', sender.call_args[0][0])
         self.assertEqual({}, json.loads(sender.call_args[0][1]['data'])['episode'])
 def test_admit_not_integratng(self, sender):
     with patch('opal.core.glossolalia.INTEGRATING', new=False):
         admit = glossolalia.admit(None)
         self.assertEqual(None, admit) # Mostly a proxy for "Does this stacktrace?"
         self.assertFalse(sender.called)