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:
Akira
2026-02-19 13:07:16 +09:00
parent cce119b1a8
commit 4afe37968b
8 changed files with 206 additions and 15 deletions

View File

@@ -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())