Пример #1
0
class PatientCVsViewSet(viewsets.ModelViewSet):
    queryset = Patient.all(active=True)
    serializer_class = PatientSerializer

    def retrieve(self, request, *args, **kwargs):
        patient = self.get_object()
        return self.buildResponse(patient)

    #Refactor this URGENT
    def buildResponse(self, patient):
        headers = CVGroup.all()
        headerSerialized = CVGroupSerializer(headers, many=True)

        results = []
        for group in headers:
            obj = {"group": group.title}
            cvs = CVPatient.all(patient=patient, group=group)
            content = []
            cvsSplitedByDate = [
                list(grp)
                for i, grp in groupby(sorted(cvs.values()),
                                      key=lambda item: item["measure_date"])
            ]

            # These nested fors hurts my soul, but i don't know a better solution
            for cvsInThatDate in cvsSplitedByDate:
                cvToAddInResponse = {
                    "measure_date":
                    cvsInThatDate[0]["measure_date"].strftime("%Y-%m-%d %H:%M")
                }
                for cv in cvsInThatDate:
                    cvName = ClinicalVariable.objects.get(
                        id=cv["variable_id"]).variable
                    cvToAddInResponse[cvName] = cv["value"]
                content += [cvToAddInResponse]

            obj["content"] = content
            results += [obj]

        return Response({"headers": headerSerialized.data, "results": results})

    @list_route(methods=['post'])
    @transaction.atomic
    def addVariables(self, request, *args, **kwargs):
        measure_date = timezone.now()
        group = CVGroup.objects.get(title=request.data["group"])
        patient = Patient.objects.get(id=request.data["patient"])

        for cv in request.data:
            if (cv != "group" and cv != "patient"):
                variable = cv
                value = request.data[cv]
                CVPatient.new(patient, group, variable, value, measure_date)

        return self.buildResponse(patient)
Пример #2
0
 def listDischarged(self, request, *args, **kwargs):
     '''
     Return a list of active patients that are discharged from the hospital
     '''
     self.queryset = Patient.all(status=Patient.DISCHARGED)
     return super(PatientViewSet, self).list(request, *args, **kwargs)
Пример #3
0
 def listAdmitted(self, request, *args, **kwargs):
     '''
     Return a list of active patients that are admitted in the hospital
     '''
     self.queryset = Patient.all(status=Patient.ADMITTED)
     return super(PatientViewSet, self).list(request, *args, **kwargs)