A-1(ダッシュボード画面)の実装が完了しました。
実装内容: バックエンド: summary APIに total_fields, assigned_fields, unassigned_fields を追加 フロントエンド: /dashboard に新画面を作成 概要サマリー: 全圃場数 / 作付け済み / 未割当(警告アイコン付き) 作物別集計テーブル(筆数・面積・合計行) クイックアクセス: 4つのボタン(作付け計画・圃場管理・帳票出力・データ取込) 年度セレクタで切替可能 Navbar: 「ホーム」ボタン追加、KeinaSystemロゴクリックでダッシュボードへ ルート (/): /allocation → /dashboard にリダイレクト先変更 http://localhost:3000/dashboard で確認できます。 残りタスク: A-7(検索・フィルタ)のみです
This commit is contained in:
@@ -4,6 +4,7 @@ from rest_framework.response import Response
|
||||
from django.db.models import Sum
|
||||
from .models import Crop, Variety, Plan
|
||||
from .serializers import CropSerializer, VarietySerializer, PlanSerializer
|
||||
from apps.fields.models import Field
|
||||
|
||||
|
||||
class CropViewSet(viewsets.ModelViewSet):
|
||||
@@ -48,8 +49,16 @@ class PlanViewSet(viewsets.ModelViewSet):
|
||||
by_crop[crop_name]['count'] += 1
|
||||
by_crop[crop_name]['area'] += float(plan.field.area_tan)
|
||||
|
||||
total_fields = Field.objects.count()
|
||||
assigned_field_ids = plans.values_list('field_id', flat=True).distinct()
|
||||
assigned_count = assigned_field_ids.count()
|
||||
unassigned_count = total_fields - assigned_count
|
||||
|
||||
return Response({
|
||||
'year': int(year),
|
||||
'total_fields': total_fields,
|
||||
'assigned_fields': assigned_count,
|
||||
'unassigned_fields': unassigned_count,
|
||||
'total_plans': plans.count(),
|
||||
'total_area': float(total_area),
|
||||
'by_crop': list(by_crop.values())
|
||||
|
||||
Reference in New Issue
Block a user