From e4f295c29f70c7a356c0ef25f7326579992ef0cb Mon Sep 17 00:00:00 2001 From: Gigin George Date: Thu, 19 May 2022 18:32:58 +0530 Subject: [PATCH] Fix Bed Validation, End-Date; Add Bed to Admin (#766) --- care/facility/admin.py | 3 ++- care/facility/api/serializers/bed.py | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/care/facility/admin.py b/care/facility/admin.py index f34027b132..945bbfab8a 100644 --- a/care/facility/admin.py +++ b/care/facility/admin.py @@ -5,7 +5,7 @@ from care.facility.models.ambulance import Ambulance, AmbulanceDriver from care.facility.models.asset import Asset -from care.facility.models.bed import AssetBed +from care.facility.models.bed import AssetBed, Bed from care.facility.models.patient_sample import PatientSample from care.facility.models.patient_tele_consultation import PatientTeleConsultation @@ -211,3 +211,4 @@ class FacilityUserAdmin(DjangoQLSearchMixin, admin.ModelAdmin, ExportCsvMixin): admin.site.register(PatientInvestigationGroup, PatientTestGroupAdmin) admin.site.register(AssetBed) admin.site.register(Asset) +admin.site.register(Bed) diff --git a/care/facility/api/serializers/bed.py b/care/facility/api/serializers/bed.py index 8136287589..a19fd38731 100644 --- a/care/facility/api/serializers/bed.py +++ b/care/facility/api/serializers/bed.py @@ -84,9 +84,7 @@ class ConsultationBedSerializer(ModelSerializer): bed_object = BedSerializer(source="bed", read_only=True) - consultation = ExternalIdSerializerField( - queryset=PatientConsultation.objects.all(), write_only=True, required=True - ) + consultation = ExternalIdSerializerField(queryset=PatientConsultation.objects.all(), write_only=True, required=True) bed = ExternalIdSerializerField(queryset=Bed.objects.all(), write_only=True, required=True) class Meta: @@ -107,23 +105,32 @@ def validate(self, attrs): raise ValidationError({"consultation": "Should be in the same facility as the bed"}) start_date = attrs["start_date"] end_date = attrs.get("end_date", None) - existing_qs = ConsultationBed.objects.filter(consultation=consultation, bed=bed) + existing_qs = ConsultationBed.objects.filter(consultation=consultation) # Conflict checking logic - if existing_qs.filter(start_date__gt=start_date, end_date__lt=start_date).exists(): + if existing_qs.filter(start_date__gt=start_date).exists(): raise ValidationError({"start_date": "Cannot create conflicting entry"}) if end_date: if existing_qs.filter(start_date__gt=end_date, end_date__lt=end_date).exists(): raise ValidationError({"end_date": "Cannot create conflicting entry"}) else: raise ValidationError( - {"consultation": "Field is Required", "bed": "Field is Required", "start_date": "Field is Required",} + { + "consultation": "Field is Required", + "bed": "Field is Required", + "start_date": "Field is Required", + } ) return super().validate(attrs) def create(self, validated_data): consultation = validated_data["consultation"] bed = validated_data["bed"] - existing_beds = ConsultationBed.objects.filter(consultation=consultation, bed=bed, end_date__isnull=True) + current_bed = consultation.current_bed.bed if consultation.current_bed else None + existing_beds = ConsultationBed.objects.filter( + consultation=consultation, + bed=current_bed, + end_date__isnull=True, + ) existing_beds.update(end_date=validated_data["start_date"]) obj = super().create(validated_data) consultation.current_bed = obj # This needs better logic, when an update occurs and the latest bed is no longer the last bed consultation relation added.