Untitled

 avatar
user_7854577
plain_text
4 months ago
6.7 kB
3
Indexable
# patient_management/models.py
from django.db import models
from user_management.models import User
from doctor_management.models import DoctorProfile
from room_management.models import Room  # Assuming Room is defined in room_management

class PatientProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='patient_profile')
    date_of_birth = models.DateField()
    address = models.TextField()
    contact_number = models.CharField(max_length=15)
    emergency_contact = models.CharField(max_length=15)
    medical_history = models.TextField(blank=True, null=True)
    assigned_doctor = models.ForeignKey(DoctorProfile, on_delete=models.SET_NULL, null=True, blank=True, related_name='patients')

class Admission(models.Model):
    patient = models.ForeignKey(PatientProfile, on_delete=models.CASCADE, related_name='admissions')
    admission_date = models.DateTimeField(auto_now_add=True)
    discharge_date = models.DateTimeField(blank=True, null=True)
    reason = models.TextField()
    room = models.ForeignKey(Room, on_delete=models.SET_NULL, null=True, blank=True, related_name='admissions')

class AppointmentBooking(models.Model):
    patient = models.ForeignKey(PatientProfile, on_delete=models.CASCADE, related_name='appointments')
    doctor = models.ForeignKey(DoctorProfile, on_delete=models.CASCADE, related_name='booked_appointments')
    appointment_date = models.DateTimeField()
    symptoms = models.TextField()


# patient_management/serializers.py
from rest_framework import serializers
from .models import PatientProfile, Admission, AppointmentBooking

class PatientProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = PatientProfile
        fields = ['id', 'user', 'date_of_birth', 'address', 'contact_number', 'emergency_contact', 'medical_history', 'assigned_doctor']
        depth = 1

class AdmissionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Admission
        fields = ['id', 'patient', 'admission_date', 'discharge_date', 'reason', 'room']

class AppointmentBookingSerializer(serializers.ModelSerializer):
    class Meta:
        model = AppointmentBooking
        fields = ['id', 'patient', 'doctor', 'appointment_date', 'symptoms']


# patient_management/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework import status
from .models import PatientProfile, Admission, AppointmentBooking
from .serializers import PatientProfileSerializer, AdmissionSerializer, AppointmentBookingSerializer

class PatientProfileView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        if request.user.role != 'Patient':
            return Response({'error': 'Only patients can access this resource.'}, status=status.HTTP_403_FORBIDDEN)
        try:
            patient_profile = PatientProfile.objects.get(user=request.user)
            serializer = PatientProfileSerializer(patient_profile)
            return Response(serializer.data)
        except PatientProfile.DoesNotExist:
            return Response({'error': 'Profile not found.'}, status=status.HTTP_404_NOT_FOUND)

    def post(self, request):
        if request.user.role != 'Patient':
            return Response({'error': 'Only patients can create their profiles.'}, status=status.HTTP_403_FORBIDDEN)
        serializer = PatientProfileSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user=request.user)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


class AdmissionManagementView(APIView):
    permission_classes = [IsAuthenticated]

    def post(self, request):
        if request.user.role != 'Patient':
            return Response({'error': 'Only patients can admit themselves.'}, status=status.HTTP_403_FORBIDDEN)
        serializer = AdmissionSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def get(self, request):
        if request.user.role != 'Patient':
            return Response({'error': 'Only patients can view their admissions.'}, status=status.HTTP_403_FORBIDDEN)
        try:
            patient_profile = PatientProfile.objects.get(user=request.user)
            admissions = patient_profile.admissions.all()
            serializer = AdmissionSerializer(admissions, many=True)
            return Response(serializer.data)
        except PatientProfile.DoesNotExist:
            return Response({'error': 'Profile not found.'}, status=status.HTTP_404_NOT_FOUND)


class AppointmentBookingView(APIView):
    permission_classes = [IsAuthenticated]

    def post(self, request):
        if request.user.role != 'Patient':
            return Response({'error': 'Only patients can book appointments.'}, status=status.HTTP_403_FORBIDDEN)
        serializer = AppointmentBookingSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def get(self, request):
        if request.user.role != 'Patient':
            return Response({'error': 'Only patients can view their appointments.'}, status=status.HTTP_403_FORBIDDEN)
        try:
            patient_profile = PatientProfile.objects.get(user=request.user)
            appointments = patient_profile.appointments.all()
            serializer = AppointmentBookingSerializer(appointments, many=True)
            return Response(serializer.data)
        except PatientProfile.DoesNotExist:
            return Response({'error': 'Profile not found.'}, status=status.HTTP_404_NOT_FOUND)


# patient_management/urls.py
from django.urls import path
from .views import PatientProfileView, AdmissionManagementView, AppointmentBookingView

urlpatterns = [
    path('profile/', PatientProfileView.as_view(), name='patient_profile'),
    path('admissions/', AdmissionManagementView.as_view(), name='admission_management'),
    path('appointments/', AppointmentBookingView.as_view(), name='appointment_booking'),
]

# settings.py (additional INSTALLED_APPS configuration)
INSTALLED_APPS += [
    'patient_management',
]
Editor is loading...
Leave a Comment