62 lines
2.0 KiB
Python
62 lines
2.0 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", "cycle", "created_at", "updated_at"]
|
|
read_only_fields = ["id", "created_at", "updated_at"]
|
|
|
|
|
|
class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
|
|
kandang = serializers.PrimaryKeyRelatedField(queryset=Kandang.objects.all())
|
|
flock = serializers.SerializerMethodField()
|
|
chick_in_weight = serializers.IntegerField(source="doc_in_weight")
|
|
current_day = serializers.IntegerField(read_only=True)
|
|
|
|
class Meta:
|
|
model = Cycle
|
|
fields = [
|
|
"id",
|
|
"kandang",
|
|
"flock",
|
|
"total_days",
|
|
"current_day",
|
|
"start_date",
|
|
"end_date",
|
|
"chick_in_weight",
|
|
"doc_in_count",
|
|
"feed_initial_balance",
|
|
"status",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
read_only_fields = ["id", "flock", "feed_initial_balance", "created_at", "updated_at"]
|
|
|
|
def get_flock(self, obj):
|
|
flock = obj.flocks.order_by("flock_id").first()
|
|
return flock.pk if flock is not None else None
|
|
|
|
def create(self, validated_data):
|
|
kandang = validated_data["kandang"]
|
|
cycle = Cycle.objects.create(**validated_data)
|
|
Flock.objects.create(flock_name=kandang.kandang_name[:30], cycle=cycle)
|
|
return cycle
|