分配計画機能を実装

施肥計画の圃場を配置場所単位でグループ化し、グループ×肥料の集計表を
表示・PDF出力できる機能を追加。

- Backend: DistributionPlan/Group/GroupField モデル (migration 0003)
- API: GET/POST/PUT/DELETE/PDF (/api/fertilizer/distribution/)
- Frontend: 一覧・新規作成・編集画面 (/distribution)
- Navbar に分配計画メニューを追加
- 集計プレビューはクライアントサイド計算(API不要)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Akira
2026-03-02 09:43:20 +09:00
parent 0d321df1c4
commit 466eef128c
15 changed files with 1656 additions and 5 deletions

View File

@@ -190,6 +190,23 @@ FertilizationEntry (施肥エントリ・中間テーブル)
├── fertilizer (FK to Fertilizer, PROTECT) ← 使用中の肥料は削除不可
├── bags袋数、Decimal
└── unique_together = ['plan', 'field', 'fertilizer']
DistributionPlan (分配計画)
├── fertilization_plan (FK to FertilizationPlan, CASCADE)
├── name計画名
└── groups → DistributionGroup
DistributionGroup (分配グループ)
├── distribution_plan (FK to DistributionPlan, CASCADE)
├── nameグループ名
├── order表示順
└── unique_together = ['distribution_plan', 'name']
DistributionGroupField (グループ圃場割り当て)
├── distribution_plan (FK to DistributionPlan, CASCADE) ← 一意制約用
├── group (FK to DistributionGroup, CASCADE)
├── field (FK to fields.Field, PROTECT)
└── unique_together = ['distribution_plan', 'field'] ← 1圃場=1グループ/1計画
```
### 重要な設計判断
@@ -324,7 +341,14 @@ FertilizationEntry (施肥エントリ・中間テーブル)
- APIJWT認証: `GET/POST /api/fertilizer/fertilizers/`, `GET/POST /api/fertilizer/plans/?year=`, `GET /api/fertilizer/plans/{id}/pdf/`, `GET /api/fertilizer/candidate_fields/?year=&variety_id=`, `POST /api/fertilizer/calculate/`
- 自動計算3方式: 反当袋数(per_tan)、均等配分(even)、反当チッソ(nitrogen)
- フロントエンド: `/fertilizer/`(一覧), `/fertilizer/new``/fertilizer/[id]/edit`(編集・マトリクス表), `/fertilizer/masters/`(肥料マスタ)
- スコープ外(将来): 購入管理、配置計画
- スコープ外(将来): 購入管理
11. **分配計画機能**2026-03-02 実装):
- Django `apps/fertilizer` アプリに3モデル追加DistributionPlan, DistributionGroup, DistributionGroupField
- APIJWT認証: `GET/POST /api/fertilizer/distribution/?year=`, `GET/PUT/DELETE /api/fertilizer/distribution/{id}/`, `GET /api/fertilizer/distribution/{id}/pdf/`
- 施肥計画を元に圃場をカスタムグループに割り当て、グループ×肥料の集計表を生成
- PDF出力A4横向き・グループ合計行★圃場サブ行
- フロントエンド: `/distribution/`(一覧), `/distribution/new``/distribution/[id]/edit`(編集)
- マスタードキュメント: `document/14_マスタードキュメント_分配計画編.md`
### 🚧 既知の課題・技術的負債
@@ -451,6 +475,7 @@ docker-compose exec backend python manage.py migrate
- **メール通知機能**: `document/11_マスタードキュメント_メール通知関連編.md`
- **気象データ機能**: `document/12_マスタードキュメント_気象データ編.md`
- **施肥計画機能**: `document/13_マスタードキュメント_施肥計画編.md`
- **分配計画機能**: `document/14_マスタードキュメント_分配計画編.md`
### 設計ドキュメント(プロジェクト横断)
@@ -476,6 +501,7 @@ docker-compose exec backend python manage.py migrate
## 📝 更新履歴
- 2026-02-28: Cursor連携を廃止。Claude Code 単独運用に変更。`document/20_Cursor_Claude連携ガイド.md` を削除
- 2026-03-02: 分配計画機能を実装。`apps/fertilizer` に DistributionPlan/DistributionGroup/DistributionGroupField 追加、API `/api/fertilizer/distribution/`、PDF出力A4横・グループ★行圃場サブ行、フロントエンド `/distribution/`。マスタードキュメント `document/14_マスタードキュメント_分配計画編.md` 追加
- 2026-03-01: 施肥計画機能を実装・本番稼働。`apps/fertilizer`Fertilizer, FertilizationPlan, FertilizationEntry, 自動計算3方式, PDF出力, PROTECT migration 0002、フロントエンド `/fertilizer/`(一覧・編集・肥料マスタ)。施肥機能全体で alert/confirm 廃止・インラインバナーに統一。マスタードキュメント `document/13_マスタードキュメント_施肥計画編.md` 追加
- 2026-02-28: 気象データ機能を実装・本番稼働。`apps/weather`WeatherRecord, 5 API、Windmill `f/weather/weather_sync`毎朝6時、フロントエンド `/weather`年別集計・期間指定・Rechartsグラフ`Crop.base_temp` 追加。デプロイコマンドの本番パス修正(/home/keinasystem/)。マスタードキュメント `document/12_マスタードキュメント_気象データ編.md` 追加
- 2026-02-25: CLAUDE.md更新。パスワード変更機能追記。メールフィルタリング機能を本番稼働済みに更新。マスタードキュメント `document/11_マスタードキュメント_メール通知関連編.md` リンク追加。デプロイコマンド(`--env-file .env.production` 必須)をトラブルシューティングに追加