Skip to content

Commit

Permalink
Merge branch 'master' into issue#5345
Browse files Browse the repository at this point in the history
  • Loading branch information
aeswibon authored Sep 5, 2023
2 parents 177055e + 1a8e0ce commit dbfed16
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 1 deletion.
12 changes: 12 additions & 0 deletions care/facility/api/serializers/prescription.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.shortcuts import get_object_or_404
from django.utils import timezone
from rest_framework import serializers

from care.facility.models import MedibaseMedicine, MedicineAdministration, Prescription
Expand Down Expand Up @@ -77,6 +78,17 @@ class MedicineAdministrationSerializer(serializers.ModelSerializer):
administered_by = UserBaseMinimumSerializer(read_only=True)
prescription = PrescriptionSerializer(read_only=True)

def validate_administered_date(self, value):
if value > timezone.now():
raise serializers.ValidationError(
"Administered Date cannot be in the future."
)
if self.context["prescription"].created_date > value:
raise serializers.ValidationError(
"Administered Date cannot be before Prescription Date."
)
return value

class Meta:
model = MedicineAdministration
exclude = ("deleted",)
Expand Down
9 changes: 8 additions & 1 deletion care/facility/api/viewsets/prescription.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,14 @@ def discontinue(self, request, *args, **kwargs):
)
def administer(self, request, *args, **kwargs):
prescription_obj = self.get_object()
serializer = MedicineAdministrationSerializer(data=request.data)
if prescription_obj.discontinued:
return Response(
{"error": "Administering discontinued prescriptions is not allowed"},
status=status.HTTP_400_BAD_REQUEST,
)
serializer = MedicineAdministrationSerializer(
data=request.data, context={"prescription": prescription_obj}
)
serializer.is_valid(raise_exception=True)
serializer.save(prescription=prescription_obj, administered_by=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
Expand Down
58 changes: 58 additions & 0 deletions care/facility/tests/test_medicine_administrations_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from django.utils import timezone
from rest_framework import status

from care.facility.models import MedibaseMedicine, Prescription
from care.utils.tests.test_base import TestBase


class MedicineAdministrationsApiTestCase(TestBase):
def setUp(self) -> None:
super().setUp()
self.normal_prescription = self.create_prescription()

def create_prescription(self, **kwargs):
data = {
"consultation": self.create_consultation(),
"medicine": MedibaseMedicine.objects.first(),
"prescription_type": "REGULAR",
"dosage": "1 mg",
"frequency": "OD",
"is_prn": False,
}
return Prescription.objects.create(
**{**data, **kwargs, "prescribed_by": self.user}
)

def test_administer(self):
prescription = self.normal_prescription
res = self.client.post(
f"/api/v1/consultation/{prescription.consultation.external_id}/prescriptions/{prescription.external_id}/administer/",
{"notes": "Test Notes"},
)
self.assertEqual(res.status_code, status.HTTP_201_CREATED)

def test_administer_in_future(self):
prescription = self.normal_prescription
res = self.client.post(
f"/api/v1/consultation/{prescription.consultation.external_id}/prescriptions/{prescription.external_id}/administer/",
{"notes": "Test Notes", "administered_date": "2300-09-01T16:34"},
)
self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

def test_administer_in_past(self):
prescription = self.normal_prescription
res = self.client.post(
f"/api/v1/consultation/{prescription.consultation.external_id}/prescriptions/{prescription.external_id}/administer/",
{"notes": "Test Notes", "administered_date": "2019-09-01T16:34"},
)
self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

def test_administer_discontinued(self):
prescription = self.create_prescription(
discontinued=True, discontinued_date=timezone.now()
)
res = self.client.post(
f"/api/v1/consultation/{prescription.consultation.external_id}/prescriptions/{prescription.external_id}/administer/",
{"notes": "Test Notes"},
)
self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)

0 comments on commit dbfed16

Please sign in to comment.