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"})
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)