예제 #1
0
 def to_representation(self, instance):
     data = super(AmbulanceSerializer, self).to_representation(instance)
     data["primary_district_obj"] = (DistrictSerializer().to_representation(
         instance.primary_district_obj) if instance.primary_district_obj
                                     else None)
     data["secondary_district_obj"] = (
         DistrictSerializer().to_representation(
             instance.secondary_district_obj)
         if instance.secondary_district_obj else None)
     data["third_district_obj"] = (DistrictSerializer().to_representation(
         instance.third_district_obj)
                                   if instance.third_district_obj else None)
     return data
예제 #2
0
class AmbulanceSerializer(serializers.ModelSerializer):
    drivers = serializers.ListSerializer(child=AmbulanceDriverSerializer())

    primary_district_object = DistrictSerializer(read_only=True,
                                                 source="primary_district")
    secondary_district_object = DistrictSerializer(read_only=True,
                                                   source="secondary_district")
    third_district_object = DistrictSerializer(read_only=True,
                                               source="third_district")

    class Meta:
        model = Ambulance
        read_only_fields = (
            "primary_district_object",
            "secondary_district_object",
            "third_district_object",
        )
        exclude = ("created_by", )

    def validate(self, obj):
        validated = super().validate(obj)
        if not validated.get("price_per_km") and not validated.get(
                "has_free_service"):
            raise ValidationError(
                "The ambulance must provide a price or be marked as free")
        return validated

    def validate_vehicle_number(self, value):
        """
        Converts vehicle number to upper case before passing it to the database\
        Earlier regular expression used only permitted upper case values.
        """
        return value.upper()

    def create(self, validated_data):
        with transaction.atomic():
            drivers = validated_data.pop("drivers", [])
            validated_data.pop("created_by", None)

            ambulance = super(AmbulanceSerializer, self).create(validated_data)

            for d in drivers:
                d["ambulance"] = ambulance
                AmbulanceDriverSerializer().create(d)
            return ambulance

    def update(self, instance, validated_data):
        validated_data.pop("drivers", [])
        ambulance = super(AmbulanceSerializer,
                          self).update(instance, validated_data)
        return ambulance
예제 #3
0
class FacilityLocalGovtBodySerializer(serializers.ModelSerializer):
    local_body = LocalBodySerializer()
    district = DistrictSerializer()

    class Meta:
        model = FacilityLocalGovtBody
        fields = "__all__"
예제 #4
0
class PatientListSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source="external_id", read_only=True)
    facility = serializers.UUIDField(source="facility.external_id",
                                     allow_null=True,
                                     read_only=True)
    facility_object = FacilityBasicInfoSerializer(source="facility",
                                                  read_only=True)
    ward_object = WardSerializer(source="ward", read_only=True)
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    blood_group = ChoiceField(choices=BLOOD_GROUP_CHOICES, required=True)
    disease_status = ChoiceField(choices=DISEASE_STATUS_CHOICES,
                                 default=DiseaseStatusEnum.SUSPECTED.value)
    source = ChoiceField(choices=PatientRegistration.SourceChoices)

    class Meta:
        model = PatientRegistration
        exclude = (
            "created_by",
            "deleted",
            "ongoing_medication",
            "patient_search_id",
            "year_of_birth",
            "meta_info",
            "countries_travelled_old",
            "allergies",
            "external_id",
        )
        read_only = TIMESTAMP_FIELDS
예제 #5
0
class FacilityBasicInfoSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(source="external_id", read_only=True)
    ward_object = WardSerializer(source="ward", read_only=True)
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)
    facility_type = serializers.SerializerMethodField()

    def get_facility_type(self, facility):
        return {
            "id": facility.facility_type,
            "name": facility.get_facility_type_display()
        }

    class Meta:
        model = Facility
        fields = (
            "id",
            "name",
            "local_body",
            "district",
            "state",
            "ward_object",
            "local_body_object",
            "district_object",
            "state_object",
            "facility_type",
        )
예제 #6
0
파일: user.py 프로젝트: sumodgeorge/care
class UserSerializer(SignUpSerializer):
    user_type = ChoiceField(choices=User.TYPE_CHOICES, read_only=True)
    is_superuser = serializers.BooleanField(read_only=True)

    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    class Meta:
        model = User
        fields = (
            "id",
            "username",
            "first_name",
            "last_name",
            "email",
            "user_type",
            "local_body",
            "district",
            "state",
            "phone_number",
            "gender",
            "age",
            "is_superuser",
            "verified",
            "local_body_object",
            "district_object",
            "state_object",
        )
        read_only_fields = ("is_superuser", "verified", "user_type", "ward",
                            "local_body", "district", "state")

    extra_kwargs = {"url": {"lookup_field": "username"}}
예제 #7
0
class FacilityBasicInfoSerializer(serializers.ModelSerializer):
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)
    facility_type = serializers.SerializerMethodField()

    def get_facility_type(self, facility):
        return {
            "id": facility.facility_type,
            "name": FACILITY_TYPES[facility.facility_type - 1][1]
        }

    class Meta:
        model = Facility
        fields = (
            "id",
            "name",
            "local_body",
            "district",
            "state",
            "local_body_object",
            "district_object",
            "state_object",
            "facility_type",
        )
예제 #8
0
class FacilitySerializer(serializers.ModelSerializer):
    """Serializer for facility.models.Facility."""

    facility_type = ChoiceField(choices=FACILITY_TYPES)
    # A valid location => {
    #     "latitude": 49.8782482189424,
    #     "longitude": 24.452545489
    # }
    location = PointField(required=False)

    local_body_object = LocalBodySerializer(source="local_body", read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    class Meta:
        model = Facility
        fields = [
            "id",
            "name",
            "local_body",
            "district",
            "state",
            "facility_type",
            "address",
            "location",
            "oxygen_capacity",
            "phone_number",
            "local_body_object",
            "district_object",
            "state_object",
        ]
예제 #9
0
class UserListSerializer(serializers.ModelSerializer):
    local_body_object = LocalBodySerializer(source="local_body", read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    class Meta:
        model = User
        fields = ("id", "first_name", "last_name", "local_body_object", "district_object", "state_object")
예제 #10
0
파일: patient.py 프로젝트: IHackPy/care
class PatientListSerializer(serializers.ModelSerializer):
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    class Meta:
        model = PatientRegistration
        exclude = ("created_by", "deleted")
예제 #11
0
class AmbulanceSerializer(serializers.ModelSerializer):
    drivers = serializers.ListSerializer(child=AmbulanceDriverSerializer())

    primary_district_object = DistrictSerializer(read_only=True,
                                                 source="primary_district")
    secondary_district_object = DistrictSerializer(read_only=True,
                                                   source="secondary_district")
    third_district_object = DistrictSerializer(read_only=True,
                                               source="third_district")

    class Meta:
        model = Ambulance
        read_only_fields = (
            "primary_district_object",
            "secondary_district_object",
            "third_district_object",
        )
        exclude = ("created_by", )

    def validate(self, obj):
        validated = super().validate(obj)
        if not validated.get("price_per_km") and not validated.get(
                "has_free_service"):
            raise ValidationError(
                "The ambulance must provide a price or be marked as free")
        return validated

    def create(self, validated_data):
        with transaction.atomic():
            drivers = validated_data.pop("drivers", [])
            validated_data.pop("created_by", None)

            ambulance = super(AmbulanceSerializer, self).create(validated_data)

            for d in drivers:
                d["ambulance"] = ambulance
                AmbulanceDriverSerializer().create(d)
            return ambulance

    def update(self, instance, validated_data):
        validated_data.pop("drivers", [])
        ambulance = super(AmbulanceSerializer,
                          self).update(instance, validated_data)
        return ambulance
예제 #12
0
class UserListSerializer(serializers.ModelSerializer):
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)
    user_type = ChoiceField(choices=User.TYPE_CHOICES, read_only=True)

    class Meta:
        model = User
        fields = ("id", "first_name", "last_name", "local_body_object",
                  "district_object", "state_object", "user_type")
예제 #13
0
class PatientListSerializer(serializers.ModelSerializer):
    facility = serializers.IntegerField(source="facility_id",
                                        allow_null=True,
                                        read_only=True)
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    class Meta:
        model = PatientRegistration
        exclude = ("created_by", "deleted")
예제 #14
0
class PatientListSerializer(serializers.ModelSerializer):
    facility = serializers.IntegerField(source="facility_id", allow_null=True, read_only=True)
    facility_object = FacilityBasicInfoSerializer(source="facility", read_only=True)
    local_body_object = LocalBodySerializer(source="local_body", read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    disease_status = ChoiceField(choices=DISEASE_STATUS_CHOICES, default=DiseaseStatusEnum.SUSPECTED.value)
    source = ChoiceField(choices=PatientRegistration.SourceChoices)

    class Meta:
        model = PatientRegistration
        exclude = ("created_by", "deleted", "ongoing_medication", "patient_search_id", "year_of_birth", "meta_info")
        read_only = TIMESTAMP_FIELDS
예제 #15
0
class PatientListSerializer(serializers.ModelSerializer):
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)
    state_object = StateSerializer(source="state", read_only=True)

    def to_representation(self, obj):
        repr = super().to_representation(obj)
        if not self.context["request"].user.is_superuser:
            repr.pop("name")
            repr.pop("phone_number")
        return repr

    class Meta:
        model = PatientRegistration
        exclude = ("created_by", "deleted")
예제 #16
0
 def districts(self, *args, **kwargs):
     division = self.get_object()
     serializer = DistrictSerializer(
         division.districts.all().order_by("name"), many=True)
     return Response(data=serializer.data)
예제 #17
0
 def districts(self, *args, **kwargs):
     state = self.get_object()
     serializer = DistrictSerializer(
         state.district_set.all().order_by("name"), many=True)
     return Response(data=serializer.data)
예제 #18
0
class PatientExternalTestSerializer(serializers.ModelSerializer):
    ward_object = WardSerializer(source="ward", read_only=True)
    local_body_object = LocalBodySerializer(source="local_body",
                                            read_only=True)
    district_object = DistrictSerializer(source="district", read_only=True)

    sample_collection_date = serializers.DateField(input_formats=["%Y-%m-%d"],
                                                   required=False)
    result_date = serializers.DateField(input_formats=["%Y-%m-%d"],
                                        required=False)

    def validate_empty_values(self, data, *args, **kwargs):
        # if "is_repeat" in data:
        #     is_repeat = data["is_repeat"]
        #     if is_repeat.lower() == "yes":
        #         data["is_repeat"] = True
        #     else:
        #         data["is_repeat"] = False

        district_obj = None
        if "district" in data:
            district = data["district"]
            district_obj = District.objects.filter(
                name__icontains=district).first()
            if district_obj:
                data["district"] = district_obj.id
            else:
                raise ValidationError(
                    {"district": ["District Does not Exist"]})
        else:
            raise ValidationError(
                {"district": ["District Not Present in Data"]})

        local_body_obj = None
        if "local_body" in data and district_obj:
            if not data["local_body"]:
                raise ValidationError(
                    {"local_body": ["Local Body Cannot Be Empty"]})
            local_body = data["local_body"]
            local_body_obj = LocalBody.objects.filter(
                name__icontains=local_body, district=district_obj).first()
            if local_body_obj:
                data["local_body"] = local_body_obj.id
            else:
                raise ValidationError(
                    {"local_body": ["Local Body Does not Exist"]})
        else:
            raise ValidationError(
                {"local_body": ["Local Body Not Present in Data"]})

        if "ward" in data and local_body_obj:
            if data["ward"]:
                ward_obj = Ward.objects.filter(
                    number=data["ward"], local_body=local_body_obj).first()
                if ward_obj:
                    data["ward"] = ward_obj.id
                else:
                    raise ValidationError({"ward": ["Ward Does not Exist"]})
        return super().validate_empty_values(data, *args, **kwargs)

    # def validate_ward(self, value):
    #     print(value)

    class Meta:
        model = PatientExternalTest
        fields = "__all__"