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

+29 -1
View File
@@ -31,6 +31,7 @@ from apps.operations.services.karung_web import KarungWebError, sync_karung_for_
from apps.operations.services.chicken_counting_edge import (
ChickenCountingEdgeError,
sync_chicken_counting_for_cycle,
sync_chicken_weight_for_cycle,
)
from apps.operations.services.visibility import dashboard_publish_time, visible_through_date
@@ -119,6 +120,33 @@ class ChickenWeightViewSet(CycleScopedViewSet):
def applies_visibility_filter(self) -> bool:
return False
@action(detail=False, methods=["post"], url_path="sync")
def sync_from_edge(self, request):
cycle_id = request.data.get("cycle_id")
if not cycle_id:
return Response(
{"detail": "cycle_id is required."},
status=status.HTTP_400_BAD_REQUEST,
)
try:
cycle = Cycle.objects.select_related("kandang").get(pk=cycle_id)
except Cycle.DoesNotExist:
return Response({"detail": "Cycle not found."}, status=status.HTTP_404_NOT_FOUND)
try:
summary = sync_chicken_weight_for_cycle(cycle)
except (ChickenCountingEdgeError, ValidationError) as exc:
code = getattr(exc, "status_code", None)
return Response(
{"detail": str(exc)},
status=code if code and code >= 400 else status.HTTP_502_BAD_GATEWAY,
)
return Response(
{
"upserted": summary["upserted"],
"dates": [d.isoformat() for d in summary["dates"]],
}
)
@action(detail=False, methods=["get"], url_path="latest-avg")
def latest_average(self, request):
cycle_id = request.query_params.get("cycle_id")
@@ -199,7 +227,7 @@ class IotPanelViewSet(viewsets.ModelViewSet):
qs = qs.filter(
flock__kandang_id=cycle.kandang_id,
date__gte=cycle.start_date,
date__lte=cycle.end_date,
date__lte=cycle.operational_end_date(),
)
if params.get("flock_id"):
qs = qs.filter(flock_id=params["flock_id"])