Example #1
0
def check_permissions(file_type, associating_id, user):
    try:
        if file_type == FileUpload.FileType.PATIENT.value:
            patient = PatientRegistration.objects.get(
                external_id=associating_id)
            if patient.last_consultation:
                if patient.last_consultation.assigned_to:
                    if user == patient.last_consultation.assigned_to:
                        return patient.id
            if not has_facility_permission(user, patient.facility):
                raise Exception("No Permission")
            return patient.id
        if file_type == FileUpload.FileType.CONSULTATION.value:
            consultation = PatientConsultation.objects.get(
                external_id=associating_id)
            if consultation.assigned_to:
                if user == consultation.assigned_to:
                    return consultation.id
            if not (has_facility_permission(user,
                                            consultation.patient.facility)
                    or has_facility_permission(user, consultation.facility)):
                raise Exception("No Permission")
            return consultation.id
        else:
            raise Exception("Undefined File Type")
    except Exception:
        raise serializers.ValidationError({"permission": "denied"})
Example #2
0
 def transfer(self, request, *args, **kwargs):
     shifting_obj = self.get_object()
     if has_facility_permission(
             request.user, shifting_obj.
             shifting_approving_facility) or has_facility_permission(
                 request.user, shifting_obj.assigned_facility):
         if shifting_obj.assigned_facility and shifting_obj.status >= 70:
             if shifting_obj.patient:
                 patient = shifting_obj.patient
                 patient.facility = shifting_obj.assigned_facility
                 patient.is_active = True
                 patient.allow_transfer = False
                 patient.save()
                 shifting_obj.status = 80
                 shifting_obj.save(update_fields=["status"])
                 # Discharge from all other active consultations
                 PatientConsultation.objects.filter(
                     patient=patient, discharge_date__isnull=True).update(
                         discharge_date=localtime(now()))
                 return Response({"transfer": "completed"},
                                 status=status.HTTP_200_OK)
     return Response({"error": "Invalid Request"},
                     status=status.HTTP_400_BAD_REQUEST)