updating cycle close request feature to get approval from national dashboard instead auto from system

This commit is contained in:
Alberto-Audrix committed 2026-09-09 14:18:39 +07:00
1 parent 3a868cf1db
commit e4dbfd0252
31 files changed
+1322 -182

No files matched your search

+18 -3
View File
@@ -75,6 +75,7 @@ class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
chick_in_weight = serializers.IntegerField(source="doc_in_weight")
current_day = serializers.IntegerField(read_only=True)
visible_through_date = serializers.DateField(read_only=True)
soft_end_date = serializers.SerializerMethodField()
class Meta:
model = Cycle
@@ -85,6 +86,7 @@ class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
"total_days",
"current_day",
"visible_through_date",
"soft_end_date",
"start_date",
"end_date",
"chick_in_weight",
@@ -92,6 +94,9 @@ class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
"feed_initial_balance",
"feed_initial_balance_date",
"status",
"proposed_end_date",
"close_requested_at",
"close_requested_by",
"created_at",
"updated_at",
]
@@ -100,20 +105,30 @@ class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
"kandang_name",
"feed_initial_balance",
"feed_initial_balance_date",
"end_date",
"status",
"proposed_end_date",
"close_requested_at",
"close_requested_by",
"created_at",
"updated_at",
"soft_end_date",
]
def get_soft_end_date(self, obj: Cycle):
return obj.soft_end_date()
def validate(self, attrs):
attrs.pop("status", None)
# Defense in depth: end_date is read-only (GM approve only).
attrs.pop("end_date", None)
if self.instance is None:
attrs.setdefault("total_days", 1)
start = attrs.get("start_date", getattr(self.instance, "start_date", None))
end = attrs.get("end_date", getattr(self.instance, "end_date", None))
end = getattr(self.instance, "end_date", None) if self.instance else 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)