fix feed data pull from api using total instead of each kandang data

This commit is contained in:
Alberto-Audrix committed 2026-09-02 09:38:45 +07:00
1 parent 54d65724aa
commit 55ccc84386
2 files changed
+109 -7

No files matched your search

+40 -7
View File
@@ -19,14 +19,32 @@ class KarungWebError(Exception):
self.status_code = status_code
def masuk_source_for_kandang(kandang_name: str) -> str:
"""Map a kandang label like ``Kandang 1`` to the karung-web-admin source ``K1 - In``."""
def kandang_index(kandang_name: str) -> str:
"""Extract the numeric kandang index from labels like ``Kandang 1``."""
match = re.search(r"(\d+)", kandang_name or "")
if not match:
raise ValidationError(
f"Cannot derive IoT masuk source from kandang name: {kandang_name!r}"
f"Cannot derive IoT kandang index from kandang name: {kandang_name!r}"
)
return f"K{match.group(1)} - In"
return match.group(1)
def source_for_kandang(kandang_name: str, *, kind: str) -> str:
"""Map a kandang label to a karung-web-admin source such as ``K1 - In``."""
return f"K{kandang_index(kandang_name)} - {kind}"
def masuk_source_for_kandang(kandang_name: str) -> str:
"""Map a kandang label like ``Kandang 1`` to the karung-web-admin source ``K1 - In``."""
return source_for_kandang(kandang_name, kind="In")
def _karung_for_source(rows: list[dict[str, Any]] | None, expected_source: str) -> int:
normalized = _normalize_source(expected_source)
for row in rows or []:
if _normalize_source(row.get("source")) == normalized:
return int(row.get("karung") or row.get("counter_value") or 0)
return 0
def _normalize_source(value: str | None) -> str:
@@ -126,10 +144,14 @@ def request_karung(
block = sections.get(section) or {}
totals = block.get("totals") or {}
remote_cycle = data.get("cycle") or {}
kandang_name = cycle.kandang.kandang_name
k_index = kandang_index(kandang_name)
masuk_rows = block.get("masuk") or []
tuang_rows = block.get("tuang") or []
in_today = int(totals.get("masuk") or 0)
out_today = int(totals.get("tuang") or 0)
feed_use_today = out_today
in_today = _karung_for_source(masuk_rows, f"K{k_index} - In")
feed_use_today = _karung_for_source(tuang_rows, f"K{k_index} - Use")
out_today = _karung_for_source(masuk_rows, f"K{k_index} - Out")
saldo_awal = int(remote_cycle.get("saldo_awal") or 0)
snapshot_raw = block.get("date")
@@ -166,6 +188,17 @@ def request_karung(
"section": section,
"snapshot_date": snapshot_date.isoformat(),
"totals": totals,
"kandang": kandang_name,
"kandang_sources": {
"in": source_for_kandang(kandang_name, kind="In"),
"use": source_for_kandang(kandang_name, kind="Use"),
"out": source_for_kandang(kandang_name, kind="Out"),
},
"kandang_totals": {
"in_today": in_today,
"feed_use_today": feed_use_today,
"out_today": out_today,
},
"saldo_awal": saldo_awal,
"remote_cycle": remote_cycle,
}