ConfirmSpreadingModal の改善点:
groupedEntries(肥料別リスト表示)→ layout(圃場×肥料のマトリクス表)に変更 ✅ 施肥計画編集画面と同じ「圃場名 / 面積(反) / 肥料列... / 合計」のテーブル構造に統一 ✅ 各セルに計画値ラベル + 実績入力欄を縦並び ✅ 列合計(肥料別)・行合計(圃場別)・総合計を追加 ✅ 計画情報サマリーカード(年度・品種・圃場数・肥料数)を追加 ✅ 操作ガイド(sky色バナー)を追加 ✅ モーダル幅を max-w-4xl → max-w-[95vw] に拡大(マトリクス表に合わせて) ✅ ドキュメント更新: document/13_マスタードキュメント_施肥計画編.md — 在庫引当・散布確定・確定取消 API を追記 ✅ 改善案/在庫管理機能実装案.md — 微修正 ✅
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
# マスタードキュメント:施肥計画機能
|
||||
|
||||
> **作成**: 2026-03-01
|
||||
> **最終更新**: 2026-03-01
|
||||
> **対象機能**: 施肥計画(年度×品種単位のマトリクス管理)
|
||||
> **実装状況**: 実装完了・本番稼働中(最終 commit deb03ef)
|
||||
> **最終更新**: 2026-03-15
|
||||
> **対象機能**: 施肥計画(年度×品種単位のマトリクス管理・在庫引当・散布確定)
|
||||
> **実装状況**: 実装完了・本番稼働中
|
||||
|
||||
---
|
||||
|
||||
## 概要
|
||||
|
||||
農業生産者が「年度 × 品種」単位で施肥計画を立てる機能。
|
||||
複数圃場 × 複数肥料 × 袋数をマトリクス形式で管理し、PDF出力する。
|
||||
複数圃場 × 複数肥料 × 袋数をマトリクス形式で管理し、PDF出力に加えて在庫引当と散布確定まで一連で扱う。
|
||||
|
||||
### 機能スコープ(IN / OUT)
|
||||
|
||||
@@ -18,9 +18,11 @@
|
||||
|---|---|
|
||||
| 肥料マスタ管理 | 肥料購入管理 |
|
||||
| 施肥計画の作成・編集・削除 | 圃場への配置計画(置き場所割り当て) |
|
||||
| 3方式の自動計算 | 施肥作業の実績記録 |
|
||||
| 3方式の自動計算 | 個別作業日報の詳細管理 |
|
||||
| 作付け計画からの圃場自動取得 | |
|
||||
| PDF出力(圃場×肥料マトリクス表) | |
|
||||
| 在庫引当・引当解除 | |
|
||||
| 散布確定(計画値確認 + 実績入力) | |
|
||||
|
||||
---
|
||||
|
||||
@@ -47,6 +49,8 @@
|
||||
| name | varchar(200) | required | 計画名(ユーザーが自由入力) |
|
||||
| year | int | required | 年度 |
|
||||
| variety | FK(plans.Variety) | PROTECT | 品種(≠NULL) |
|
||||
| is_confirmed | bool | default=False | 散布確定済みフラグ |
|
||||
| confirmed_at | datetime | nullable | 散布確定日時 |
|
||||
| created_at | datetime | auto | |
|
||||
| updated_at | datetime | auto | |
|
||||
|
||||
@@ -102,6 +106,8 @@
|
||||
| GET | `/api/fertilizer/plans/{id}/` | 詳細取得(entries 含む) |
|
||||
| PUT | `/api/fertilizer/plans/{id}/` | 更新(entries 全置換) |
|
||||
| DELETE | `/api/fertilizer/plans/{id}/` | 削除 |
|
||||
| POST | `/api/fertilizer/plans/{id}/confirm_spreading/` | 散布確定(引当 → 使用へ変換) |
|
||||
| POST | `/api/fertilizer/plans/{id}/unconfirm/` | 散布確定取消(使用 → 引当に戻す) |
|
||||
| GET | `/api/fertilizer/plans/{id}/pdf/` | PDF出力(application/pdf) |
|
||||
|
||||
一覧レスポンス例(FertilizationPlan):
|
||||
@@ -113,6 +119,8 @@
|
||||
"variety": 3,
|
||||
"variety_name": "コシヒカリ",
|
||||
"crop_name": "米",
|
||||
"is_confirmed": false,
|
||||
"confirmed_at": null,
|
||||
"field_count": 12,
|
||||
"fertilizer_count": 2,
|
||||
"entries": [
|
||||
@@ -146,6 +154,19 @@ POST/PUT リクエスト例:
|
||||
|
||||
PUT 時は entries が全置換(削除→再作成)。entries を省略した場合は既存を維持。
|
||||
|
||||
散布確定 API リクエスト例:
|
||||
```json
|
||||
{
|
||||
"entries": [
|
||||
{"field_id": 5, "fertilizer_id": 1, "actual_bags": 2.4},
|
||||
{"field_id": 6, "fertilizer_id": 1, "actual_bags": 0}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- `actual_bags > 0`: 対応する引当を使用実績へ変換
|
||||
- `actual_bags = 0`: 未散布として引当解除
|
||||
|
||||
### 圃場候補取得
|
||||
|
||||
```
|
||||
@@ -269,8 +290,8 @@ GET /api/plans/crops/
|
||||
### 施肥計画一覧(`/fertilizer`)
|
||||
|
||||
- 年度セレクタ(localStorage `fertilizerYear` で保持)
|
||||
- 計画カード一覧: 計画名・作物/品種・圃場数・肥料数
|
||||
- 操作ボタン: PDF出力・編集・削除
|
||||
- 計画カード一覧: 計画名・作物/品種・圃場数・肥料数・散布確定状態
|
||||
- 操作ボタン: PDF出力・編集・削除・散布確定
|
||||
- ヘッダー: 「肥料マスタ」「新規作成」ボタン
|
||||
|
||||
### 肥料マスタ(`/fertilizer/masters`)
|
||||
@@ -295,6 +316,12 @@ GET /api/plans/crops/
|
||||
6. **手動調整**: マトリクス表のセルを直接編集
|
||||
7. **保存**: 「保存」ボタンで entries を一括送信
|
||||
|
||||
#### 在庫連携・確定状態
|
||||
|
||||
- 肥料列ヘッダーに在庫 / 利用可能在庫 / 計画計 / 不足数を表示
|
||||
- 散布確定済みの計画は情報バナーを表示し、編集操作をロック
|
||||
- 「確定取消」で使用実績を引当に戻し、再編集できる
|
||||
|
||||
#### マトリクスの表示仕様
|
||||
|
||||
- 自動計算直後: セルに計算値(小数)がそのまま表示される(編集可)
|
||||
@@ -302,6 +329,15 @@ GET /api/plans/crops/
|
||||
- `↩` ボタン押下: 整数値を破棄し、元の計算値に戻る(参照グレー表示も消える)
|
||||
- 編集中に計算を再実行すると、その肥料列の `adjusted` と `roundedColumns` がリセットされる
|
||||
|
||||
### 散布確定モーダル(`/fertilizer` 一覧から起動)
|
||||
|
||||
- 全画面遷移ではなくモーダル表示
|
||||
- 施肥計画編集と同じ視線移動になるよう、`圃場 = 行`、`肥料 = 列` のマトリクス表を採用
|
||||
- 画面上部に計画名・年度・作物/品種・対象圃場数・肥料数を表示
|
||||
- 各セルは「薄いグレーの計画値」+「実績入力欄」の2段表示
|
||||
- 行末に圃場ごとの実績合計、表フッターに肥料別合計と総合計を表示
|
||||
- `0` を入力したセルは未散布として扱い、対応する引当を解除する
|
||||
|
||||
#### State 構成
|
||||
|
||||
```typescript
|
||||
|
||||
Reference in New Issue
Block a user