fix feed initial balance and report button

This commit is contained in:
Alberto-Audrix committed 2026-09-01 08:38:16 +07:00
1 parent 30a736641f
commit 569d7c6bb6
9 files changed
+135 -24

No files matched your search

@@ -0,0 +1,32 @@
from __future__ import annotations
from datetime import date
from apps.farms.models import Cycle
from apps.operations.models import FeedSacks
def recompute_feed_sack_in_totals(cycle: Cycle) -> None:
"""Rebuild cumulative in_total from the cycle opening balance plus daily IoT in."""
running = cycle.feed_initial_balance
for fs_row in FeedSacks.objects.filter(cycle=cycle).order_by("date", "pk"):
running += fs_row.in_today
if fs_row.in_total != running:
fs_row.in_total = running
fs_row.save(update_fields=["in_total", "updated_at"])
def ensure_opening_feed_sack_snapshot(cycle: Cycle, balance_date: date) -> FeedSacks | None:
"""Seed a zero-activity snapshot when opening balance is saved before any IoT sync."""
if FeedSacks.objects.filter(cycle=cycle).exists():
return None
return FeedSacks.objects.create(
cycle=cycle,
date=balance_date,
in_today=0,
out_today=0,
in_total=cycle.feed_initial_balance,
out_total=0,
feed_use_today=0,
feed_use_total=0,
)