allocation画面に品種変更確認と履歴表示を追加する #8
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
概要
allocation 画面で品種変更時の影響を明示し、変更履歴を確認できる UI を追加する。
スコープ
受け入れ条件
PlanVarietyChangeと整合している関連
#8 レビュー結果
総合: 問題なし、承認
実装の評価
バックエンド
fertilizer_moved_entry_countへのフィールド名変更が #7 レビューのフィードバックを受けて対応済み(models.py・migration・services.py・serializer全て一致)。get_variety_change_count/get_latest_variety_changeのキャッシュ参照:_prefetched_objects_cacheはDjangoの内部属性で、prefetch_relatedを使った場合のみ有効です。views.pyのquerysetでprefetch_related('variety_changes', ...)しているため意図通りに動きますが、単体でシリアライザを使った場合(テストなど)は毎回DBクエリが走ります。現状の使い方では問題なし。views.pyの queryset 重複解消:querysetとget_queryset内のqueryset = Plan.objects.all()が重複していたのをqueryset = self.querysetに統一。正しい修正。フロントエンド
実装 | 評価 -- | -- toast state + useEffect で4秒後自動消去 | CLAUDE.mdの「alert禁止方針」に沿っている ✅ confirm() による確認ダイアログ | CLAUDE.mdには「施肥機能でalert/confirm廃止」とあるが、これはallocation画面のため別規則。実用上は問題なし 同品種への変更を early return でスキップ | `(existingPlan.variety 履歴バッジのツールチップ | title 属性で複数行表示(\n 結合) ✅ 型定義のオプショナル化 | 既存の Plan 型への追加が ? で後方互換 ✅テストについて
#8 は UI・確認ダイアログ・トーストがメインの変更であり、バックエンドの新規テストは追加されていません。これは妥当です。
シリアライザの
get_variety_change_count/get_latest_variety_changeは既存テスト (test_serializer_update_creates_history_when_variety_changes) が間接的に通っており、0件ケースはtest_serializer_update_does_not_create_history_without_variety_changeでカバーされています。気になる点(1件)
confirm()の使用施肥計画の画面では
alert/confirmを廃止してインラインバナーに統一していますが、allocation画面ではconfirm()を使っています。ブラウザによってはconfirm()がブロックされる可能性があります(施肥画面でこの問題があったため廃止した経緯があります)。今後統一するなら allocation 画面も独自モーダルに移行すべきですが、今回のスコープ(#8)としては許容範囲です。
</html>
2026-04-07 時点で実装済みを確認したためクローズします。
確認内容:
latest_variety_changeを通じて変更日時、旧品種、新品種、移動件数を参照できる構成を確認apps.plans.testsが 2026-04-07 に Docker 内で通過関連ファイル:
frontend/src/app/allocation/page.tsxbackend/apps/plans/serializers.pybackend/apps/plans/views.pybackend/apps/plans/tests.py