diff --git a/care/facility/api/serializers/prescription_supplier.py b/care/facility/api/serializers/prescription_supplier.py deleted file mode 100644 index 3bcaeb99fb..0000000000 --- a/care/facility/api/serializers/prescription_supplier.py +++ /dev/null @@ -1,56 +0,0 @@ -from rest_framework import serializers - -from care.facility.api.serializers import TIMESTAMP_FIELDS -from care.facility.api.serializers.facility import FacilityBasicInfoSerializer -from care.facility.models import Facility, PatientConsultation, PatientRegistration -from care.facility.models.prescription_supplier import PrescriptionSupplier -from care.utils.serializer.external_id_field import ExternalIdSerializerField -from config.serializers import ChoiceField - - -class MinimalPatientSerializer(serializers.ModelSerializer): - id = serializers.CharField(source="external_id") - - class Meta: - model = PatientRegistration - fields = ("id", "name", "phone_number", "address") - - -class PrescriptionSupplierConsultationSerializer(serializers.ModelSerializer): - id = serializers.CharField(source="external_id", read_only=True) - patient = MinimalPatientSerializer(read_only=True) - - class Meta: - model = PatientConsultation - fields = ("id", "prescriptions", "patient") - - -class PrescriptionSupplierSerializer(serializers.ModelSerializer): - id = serializers.CharField(source="external_id", read_only=True) - scheme = ChoiceField(choices=PrescriptionSupplier.SchemeChoices) - status = ChoiceField(choices=PrescriptionSupplier.StatusChoices) - consultation_object = PrescriptionSupplierConsultationSerializer( - source="consultation", read_only=True - ) - facility_object = FacilityBasicInfoSerializer(source="facility", read_only=True) - - consultation = ExternalIdSerializerField( - required=True, queryset=PatientConsultation.objects.all() - ) - facility = ExternalIdSerializerField(required=True, queryset=Facility.objects.all()) - - class Meta: - model = PrescriptionSupplier - exclude = ("deleted", "external_id") - read_only_fields = TIMESTAMP_FIELDS - - def create(self, validated_data): - instance = super().create(validated_data) - instance.updated_user = self.context["request"].user - instance.save() - - def update(self, instance, validated_data): - instance = super().update(instance, validated_data) - instance.updated_user = self.context["request"].user - instance.save() - return instance diff --git a/care/facility/api/viewsets/prescription_supplier.py b/care/facility/api/viewsets/prescription_supplier.py deleted file mode 100644 index 8ff837f455..0000000000 --- a/care/facility/api/viewsets/prescription_supplier.py +++ /dev/null @@ -1,89 +0,0 @@ -from django.db.models.query_utils import Q -from django_filters import rest_framework as filters -from dry_rest_permissions.generics import DRYPermissions -from rest_framework import mixins -from rest_framework.permissions import IsAuthenticated -from rest_framework.viewsets import GenericViewSet - -from care.facility.api.serializers.prescription_supplier import ( - PrescriptionSupplierConsultationSerializer, - PrescriptionSupplierSerializer, -) -from care.facility.models.patient_consultation import PatientConsultation -from care.facility.models.prescription_supplier import PrescriptionSupplier -from care.users.models import User - - -class PrescriptionSupplierConsultationFilter(filters.FilterSet): - patient = filters.CharFilter(field_name="patient__external_id") - patient_name = filters.CharFilter( - field_name="patient__name", lookup_expr="icontains" - ) - facility = filters.UUIDFilter(field_name="facility_external_id") - - -class PrescriptionSupplierConsultationViewSet( - mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet -): - lookup_field = "external_id" - serializer_class = PrescriptionSupplierConsultationSerializer - permission_classes = (IsAuthenticated,) - queryset = ( - PatientConsultation.objects.all() - .select_related("facility", "patient") - .order_by("-id") - ) - filter_backends = (filters.DjangoFilterBackend,) - filterset_class = PrescriptionSupplierConsultationFilter - - def get_queryset(self): - if self.request.user.is_superuser: - return self.queryset - elif self.request.user.user_type >= User.TYPE_VALUE_MAP["DistrictLabAdmin"]: - return self.queryset.filter( - patient__facility__district=self.request.user.district - ) - elif self.request.user.user_type >= User.TYPE_VALUE_MAP["StateLabAdmin"]: - return self.queryset.filter( - patient__facility__state=self.request.user.state - ) - return self.queryset.filter( - Q(patient__created_by=self.request.user) - | Q(facility__users__id__exact=self.request.user.id) - ).distinct("id") - - -class PrescriptionSupplierFilter(filters.FilterSet): - patient = filters.CharFilter(field_name="consultation__patient__external_id") - patient_name = filters.CharFilter( - field_name="consultation__patient__name", lookup_expr="icontains" - ) - facility = filters.UUIDFilter(field_name="facility_external_id") - - -class PrescriptionSupplierViewSet( - mixins.ListModelMixin, - mixins.CreateModelMixin, - mixins.UpdateModelMixin, - mixins.RetrieveModelMixin, - GenericViewSet, -): - lookup_field = "external_id" - serializer_class = PrescriptionSupplierSerializer - permission_classes = (IsAuthenticated, DRYPermissions) - queryset = ( - PrescriptionSupplier.objects.all() - .select_related("facility", "consultation", "consultation__patient") - .order_by("-id") - ) - filter_backends = (filters.DjangoFilterBackend,) - filterset_class = PrescriptionSupplierFilter - - def get_queryset(self): - if self.request.user.is_superuser: - return self.queryset - elif self.request.user.user_type >= User.TYPE_VALUE_MAP["DistrictLabAdmin"]: - return self.queryset.filter(facility__district=self.request.user.district) - elif self.request.user.user_type >= User.TYPE_VALUE_MAP["StateLabAdmin"]: - return self.queryset.filter(facility__state=self.request.user.state) - return self.queryset.filter(facility__users__id__exact=self.request.user.id) diff --git a/care/facility/migrations/0402_delete_prescriptionsupplier.py b/care/facility/migrations/0402_delete_prescriptionsupplier.py new file mode 100644 index 0000000000..5d3c33d8fd --- /dev/null +++ b/care/facility/migrations/0402_delete_prescriptionsupplier.py @@ -0,0 +1,15 @@ +# Generated by Django 4.2.5 on 2023-12-08 07:36 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("facility", "0401_merge_20231208_0054"), + ] + + operations = [ + migrations.DeleteModel( + name="PrescriptionSupplier", + ), + ] diff --git a/care/facility/models/prescription_supplier.py b/care/facility/models/prescription_supplier.py deleted file mode 100644 index 434bbe67e1..0000000000 --- a/care/facility/models/prescription_supplier.py +++ /dev/null @@ -1,68 +0,0 @@ -import enum - -from django.db import models - -from care.facility.models import FacilityBaseModel -from care.users.models import User - - -class PrescriptionSupplier(FacilityBaseModel): - class SchemeEnum(enum.Enum): - GOVERNMENT_SUPPLY = 10 - DONATION = 30 - PAID_BY_PATIENT = 40 - - SchemeChoices = [(e.value, e.name) for e in SchemeEnum] - - class StatusEnum(enum.Enum): - PENDING = 10 - INITIATED = 30 - COMPLETED = 40 - DEFERRED = 50 - - StatusChoices = [(e.value, e.name) for e in StatusEnum] - - facility = models.ForeignKey("Facility", on_delete=models.PROTECT) - consultation = models.ForeignKey( - "PatientConsultation", - on_delete=models.PROTECT, - related_name="patient_consultation", - ) - scheme = models.IntegerField( - choices=SchemeChoices, default=10, null=False, blank=False - ) - status = models.IntegerField( - choices=StatusChoices, default=10, null=False, blank=False - ) - supplier = models.TextField(default="", blank=True) - remarks = models.TextField(default="", blank=True) - updated_user = models.ForeignKey( - User, on_delete=models.SET_NULL, null=True, blank=True - ) - - def has_object_read_permission(self, request): - return ( - request.user.is_superuser - or ( - self.facility - and request.user.user_type == User.TYPE_VALUE_MAP["Pharmacist"] - and request.user in self.facility.users.all() - ) - or ( - request.user.user_type >= User.TYPE_VALUE_MAP["DistrictLabAdmin"] - and (self.facility and request.user.district == self.facility.district) - ) - or ( - request.user.user_type >= User.TYPE_VALUE_MAP["StateLabAdmin"] - and (self.facility and request.user.state == self.facility.state) - ) - ) - - def has_object_write_permission(self, request): - if ( - request.user.user_type == User.TYPE_VALUE_MAP["DistrictReadOnlyAdmin"] - or request.user.user_type == User.TYPE_VALUE_MAP["StateReadOnlyAdmin"] - or request.user.user_type == User.TYPE_VALUE_MAP["StaffReadOnly"] - ): - return False - return self.has_object_read_permission(request) diff --git a/config/api_router.py b/config/api_router.py index cb1b98dbed..d78f0f568e 100644 --- a/config/api_router.py +++ b/config/api_router.py @@ -64,10 +64,6 @@ MedibaseViewSet, MedicineAdministrationViewSet, ) -from care.facility.api.viewsets.prescription_supplier import ( - PrescriptionSupplierConsultationViewSet, - PrescriptionSupplierViewSet, -) from care.facility.api.viewsets.resources import ( ResourceRequestCommentViewSet, ResourceRequestViewSet, @@ -135,9 +131,6 @@ router.register("assetbed", AssetBedViewSet) router.register("consultationbed", ConsultationBedViewSet) -router.register("pharmacy/consultation", PrescriptionSupplierConsultationViewSet) -router.register("pharmacy/prescription", PrescriptionSupplierViewSet) - # Local Body / LSG Viewsets router.register("state", StateViewSet) router.register("district", DistrictViewSet)