Files
dashboard-cpsp/backend/apps/farms/serializers.py
T

76 lines
2.6 KiB
Python

from rest_framework import serializers
from apps.accounts.serializers import PkAsIdMixin
from apps.farms.models import Cycle, Flock, Kandang, Site
class SiteSerializer(PkAsIdMixin, serializers.ModelSerializer):
class Meta:
model = Site
fields = ["id", "site_name", "user", "created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class KandangSerializer(PkAsIdMixin, serializers.ModelSerializer):
class Meta:
model = Kandang
fields = ["id", "kandang_name", "site", "created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class FlockSerializer(PkAsIdMixin, serializers.ModelSerializer):
class Meta:
model = Flock
fields = ["id", "flock_name", "kandang", "created_at", "updated_at"]
read_only_fields = ["id", "created_at", "updated_at"]
class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
kandang = serializers.PrimaryKeyRelatedField(queryset=Kandang.objects.all())
kandang_name = serializers.CharField(source="kandang.kandang_name", read_only=True)
chick_in_weight = serializers.IntegerField(source="doc_in_weight")
current_day = serializers.IntegerField(read_only=True)
visible_through_date = serializers.DateField(read_only=True)
class Meta:
model = Cycle
fields = [
"id",
"kandang",
"kandang_name",
"total_days",
"current_day",
"visible_through_date",
"start_date",
"end_date",
"chick_in_weight",
"doc_in_count",
"feed_initial_balance",
"feed_initial_balance_date",
"status",
"created_at",
"updated_at",
]
read_only_fields = [
"id",
"kandang_name",
"feed_initial_balance",
"feed_initial_balance_date",
"status",
"created_at",
"updated_at",
]
def validate(self, attrs):
attrs.pop("status", None)
start = attrs.get("start_date", getattr(self.instance, "start_date", None))
end = attrs.get("end_date", getattr(self.instance, "end_date", None))
if start and end and end < start:
raise serializers.ValidationError({"end_date": "Must be on or after start_date."})
return attrs
def to_representation(self, instance):
if instance.sync_status():
instance.save(update_fields=["status", "updated_at"])
return super().to_representation(instance)