update docker deployment and changing seed kandang name

This commit is contained in:
Alberto-Audrix committed 2026-08-31 11:10:32 +07:00
1 parent 76f4d0106a
commit 74dd3faf60
40 files changed
+1253 -122

No files matched your search

+13 -5
View File
@@ -1,3 +1,5 @@
from datetime import date
from django.core.exceptions import ValidationError
from django.db import models
from wagtail.admin.panels import FieldPanel
@@ -126,10 +128,16 @@ class Cycle(models.Model):
@property
def current_day(self) -> int:
from django.utils import timezone
from apps.operations.services.visibility import visible_through_date
today = timezone.localdate()
if today <= self.start_date:
return 1
elapsed = (today - self.start_date).days + 1
effective = visible_through_date()
if effective < self.start_date:
return 0
elapsed = (effective - self.start_date).days + 1
return min(max(elapsed, 1), self.total_days)
@property
def visible_through_date(self) -> date:
from apps.operations.services.visibility import visible_through_date as cutoff_date
return cutoff_date()
+23 -2
View File
@@ -27,18 +27,24 @@ class FlockSerializer(PkAsIdMixin, serializers.ModelSerializer):
class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
kandang = serializers.PrimaryKeyRelatedField(queryset=Kandang.objects.all())
kandang_name = serializers.CharField(source="kandang.kandang_name", read_only=True)
flock = serializers.SerializerMethodField()
flock_name = serializers.SerializerMethodField()
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",
"flock",
"flock_name",
"total_days",
"current_day",
"visible_through_date",
"start_date",
"end_date",
"chick_in_weight",
@@ -48,12 +54,27 @@ class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer):
"created_at",
"updated_at",
]
read_only_fields = ["id", "flock", "feed_initial_balance", "created_at", "updated_at"]
read_only_fields = [
"id",
"kandang_name",
"flock",
"flock_name",
"feed_initial_balance",
"created_at",
"updated_at",
]
def _first_flock(self, obj):
return obj.flocks.order_by("flock_id").first()
def get_flock(self, obj):
flock = obj.flocks.order_by("flock_id").first()
flock = self._first_flock(obj)
return flock.pk if flock is not None else None
def get_flock_name(self, obj):
flock = self._first_flock(obj)
return flock.flock_name if flock is not None else None
def create(self, validated_data):
kandang = validated_data["kandang"]
cycle = Cycle.objects.create(**validated_data)
+4
View File
@@ -32,6 +32,8 @@ class FarmAPITests(TestCase):
)
self.assertEqual(response.status_code, 201, response.data)
self.assertEqual(response.data["chick_in_weight"], 42)
self.assertEqual(response.data["kandang_name"], "Kandang 1")
self.assertEqual(response.data["flock_name"], "Kandang 1")
self.assertIsNotNone(response.data["flock"])
cycle = Cycle.objects.get(pk=response.data["id"])
flock = Flock.objects.get(pk=response.data["flock"])
@@ -54,6 +56,8 @@ class FarmAPITests(TestCase):
results = response.data["results"] if isinstance(response.data, dict) else response.data
self.assertEqual(len(results), 1)
self.assertEqual(results[0]["flock"], flock.pk)
self.assertEqual(results[0]["kandang_name"], "Kandang 1")
self.assertEqual(results[0]["flock_name"], "Flock A")
def test_list_flocks_by_cycle(self):
cycle = Cycle.objects.create(