diff --git a/backend/apps/farms/services/pusat_export.py b/backend/apps/farms/services/pusat_export.py index 959bdef..be4e832 100644 --- a/backend/apps/farms/services/pusat_export.py +++ b/backend/apps/farms/services/pusat_export.py @@ -231,9 +231,10 @@ def build_ops_export( if cycle is not None: series_filter["cycle_id"] = cycle.pk - def series(model, serializer_class, order_fields=("date", "pk")): + def series(model, serializer_class, order_fields=("date", "pk"), override_filter=None): + fltr = override_filter if override_filter is not None else series_filter qs = ( - model.objects.filter(**series_filter) + model.objects.filter(**fltr) .select_related("cycle", "cycle__kandang") .order_by(*order_fields) ) @@ -241,6 +242,12 @@ def build_ops_export( qs, serializer_class, page=page, page_size=page_size, site_id=site.pk ) + ai_insight_filter = ( + {"cycle_id": cycle.pk} + if cycle is not None + else {"cycle__kandang__site_id": site.pk} + ) + return { "exported_at": timezone.now().isoformat(), "from": date_from.isoformat(), @@ -256,7 +263,9 @@ def build_ops_export( "feed_sacks": series(FeedSacks, FeedSacksSerializer), "chicken_countings": series(ChickenCounting, ChickenCountingSerializer), "chicken_weights": series(ChickenWeight, ChickenWeightSerializer), - "ai_insights": series(AIInsight, AIInsightSerializer), + "ai_insights": series( + AIInsight, AIInsightSerializer, override_filter=ai_insight_filter + ), }, } diff --git a/components/shared/PageAiInsight.tsx b/components/shared/PageAiInsight.tsx index 526a263..9e77b94 100644 --- a/components/shared/PageAiInsight.tsx +++ b/components/shared/PageAiInsight.tsx @@ -603,13 +603,15 @@ export const PageAiInsight: React.FC = ({ } const text = apiResult.insight_text ?? ''; - const parsed = - apiResult.summary || apiResult.insight - ? { - summary: apiResult.summary || '', - insight: apiResult.insight || '', - } - : parseAiResult(text); + let parsed: { summary: string; insight: string } | null = null; + if (apiResult.summary || apiResult.insight) { + parsed = { + summary: apiResult.summary || '', + insight: apiResult.insight || apiResult.insight_text || '', + }; + } else { + parsed = parseAiResult(text); + } if (!parsed || (!parsed.summary && !parsed.insight)) { throw new Error('Respons AI tidak dapat diproses.');