Commit Graph

18 Commits

Author SHA1 Message Date
Akira
8b5e0fc66e A-6 完了。 本セッションの進捗まとめ:
タスク	内容	状態
A-3	前年度コピーボタン	 完了
A-4	品種のインライン追加・削除	 完了
A-5	PDFプレビュー機能	 完了
A-6	エクスポート機能	 完了
残りタスク:

A-2: チェックボックス・一括操作
A-1: ダッシュボード画面
A-7: 検索・フィルタ
確認ポイント:

作付け計画 (/allocation): 年度セレクタの横に「前年度コピー」「品種管理」ボタン、品種セレクトに「+ 新しい品種を追加...」
帳票出力 (/reports): 各帳票にプレビュー/ダウンロードの2ボタン
データ取込 (/import): ページ下部に「データエクスポート」(ZIPダウンロード)
2026-02-19 12:21:17 +09:00
Akira
23cb4d3118 再起動完了しました。対応表モードに「住所」列を追加しました。圃場名の右隣に表示されます。
ブラウザで http://localhost:3000/fields をリロードして、対応表モードで住所列が表示されるか確認してください。
2026-02-18 14:38:22 +09:00
Akira
73e99f62d4 対応表モード 実装サマリー
新規ファイル
ファイル	内容
LinkModal.tsx	共通コンポーネントとして切り出し(圃場詳細・対応表の両方で使用)
変更ファイル
ファイル	変更内容
fields/page.tsx	[通常] / [対応表] トグルボタンを追加。対応表モードでは圃場名・面積・共済漢字地名・中山間所在地を横並び表示。各行で直接+追加/x解除が可能
fields/[id]/page.tsx	LinkModalのインポートを共通コンポーネントに変更
04_画面設計書.md	画面4に対応表モードのレイアウト・機能要件を追記
06_差異レポート.md	E-2の実装状況を更新
対応表モードの機能
一覧表示: 圃場名 / 面積(反) / 共済(耕地-分筆 + 漢字地名) / 中山間(ID + 所在地)
直接編集: 各セルの[+追加]ボタンで検索モーダルを開いて紐づけ追加
紐づけ解除: 各レコードにホバーで表示される[x]ボタン(確認ダイアログ付き)
複数紐づけ: 同一セル内に改行で表示
圃場名クリック: 詳細画面(/fields/[id])に遷移
http://localhost:3000/fields で「対応表」ボタンを押して確認できます。
2026-02-18 14:24:10 +09:00
Akira
64e7701456 実装サマリー
バックエンド(3ファイル変更)
ファイル	変更内容
views.py	OfficialKyosaiFieldViewSet、OfficialChusankanFieldViewSet(ReadOnly)、紐づけ追加/解除の4つのAPIビューを追加
urls.py	紐づけ管理用の4パス追加
serializers.py	linked_field_namesフィールドを追加(紐づけ先の圃場名を返す)
keinasystem/urls.py	/api/kyosai-fields/、/api/chusankan-fields/ をルーターに登録
新規API一覧
メソッド	エンドポイント	動作確認
GET	/api/kyosai-fields/	31件返却
GET	/api/chusankan-fields/	71件返却
POST	/api/fields/{id}/kyosai-links/	{"added":1}
DELETE	/api/fields/{id}/kyosai-links/{kyosai_id}/	204
POST	/api/fields/{id}/chusankan-links/	同上
DELETE	/api/fields/{id}/chusankan-links/{chusankan_id}/	同上
フロントエンド(3ファイル変更)
ファイル	変更内容
types/index.ts	linked_field_namesプロパティ追加
fields/[id]/page.tsx	紐づけ管理UI全面実装(+追加ボタン、x解除ボタン、検索付きモーダル、面積参考表示)
fields/page.tsx	「共済」「中山間」紐づけ件数列を追加
http://localhost:3000/fields/4 などで圃場詳細画面を開いて動作確認できます。
2026-02-18 14:02:40 +09:00
Akira
d70b5ee551 E-1 完了サマリー
実施内容
#	変更内容	ファイル
1	OfficialChusankanField に 11 フィールド追加(17列化)	models.py
2	中山間インポート: 17 列すべて読み込み対応	views.py
3	共済インポート: 面積カラム名不一致バグ修正 + a→m2 変換(×100)	views.py
4	シリアライザに 11 フィールド追加	serializers.py
5	共済 PDF: A4 縦、表形式、@page 設定、ページ番号、中国語除去	kyosai_template.html
6	中山間 PDF: A4 横、表形式、@page 設定、ページ番号、中国語除去	chusankan_template.html
7	PDF 生成ロジック: フラットテーブル、null 安全、prefetch_related	reports/views.py
8	既存データ再インポート(共済面積修正 + 中山間 17 列埋め)	—
9	Playwright E2E テスト 11 件全 PASS	verify-fixes.spec.ts
追加発見・修正したバグ
共済 ODS の 本地面積 (m2) カラム名にスペースが含まれ、インポート時に面積が全件 0 になっていた
面積の単位がアール(a)であることが判明。m2 への変換 (×100) を追加
PDF は http://localhost:3000/reports からダウンロードして確認できます。
2026-02-17 15:27:14 +09:00
Akira
1b02fd6f13 今回の変更
C-2: 共済マスタ unique 制約修正

models.py: k_num 単独unique → (k_num, s_num) ペアunique に変更
s_num を null=True → default='' に変更(unique_together で null は扱いにくいため)
views.py: インポート時のルックアップを k_num 単独 → (k_num, s_num) ペアに修正
C-4: 面積フィールド m2 統一

models.py: 共済・中山間両方の area を DecimalField(ha) → IntegerField(m2) に変更
payment_amount も DecimalField → IntegerField に統一
views.py: インポート時の area 値を int() で変換
types/index.ts: TypeScript型を string → number に更新
A-8: 圃場詳細に共済/中山間情報表示

fields/[id]/page.tsx: 編集フォームの下に共済情報テーブル・中山間情報テーブルを追加
壊れていたJSX(重複フラグメント)も修正
追加修正

FieldViewSet の AllowAny → IsAuthenticated に変更(D-4 の漏れ)
マイグレーション 0005 を作成
注意事項
Docker起動後に python manage.py migrate が必要です
既存の共済/中山間データがある場合、area の値は DecimalField → IntegerField に変換されます(既にm2で保存されているはずなので小数点以下が切り捨てられるだけ)
2026-02-17 13:57:02 +09:00
Akira
9c21caa017 見直し前の最終 2026-02-16 13:45:16 +09:00
Akira
4486722949 圃場グループ機能 2026-02-15 15:51:51 +09:00
Akira
f4165e2c68 Day 14 完了
作付け計画画面に集計サイドバーを追加しました:
機能:
- PC: 左側に集計サイドバー(開/閉可能)
- スマホ: 「📊 集計を表示」ボタン → モーダル表示
- リアルタイム更新: 作物・品种選択時に自動再計算
- 未設定圃場の警告表示(黄色)
実装:
- useMemo で集計計算を最適化
- 作物別・品种別の面積集計
- 展開可能なツリー表示
http://localhost:3000/allocation で確認できます。
2026-02-15 15:26:03 +09:00
Akira
15a94867fa 修正完了
作付け計画画面のスクロールリセット防止:
1. fetchData に background パラメータ追加:
   - background = false の場合のみローディング表示
   - background = true の場合はバックグラウンド更新(スピナーなし)
2. 保存ハンドラで fetchData(true) を呼び出し:
   - handleCropChange, handleVarietyChange, handleNotesChange の3箇所
これにより、作物・品种保存時に画面がチラついたりスクロールがリセットされたりしなくな
2026-02-15 14:57:26 +09:00
Akira
c78945b44b 修正完了
frontend/src/app/import/page.tsx に中山間マスタ取込セクションを追加しました:
- State追加: chusankanFile, chusankanResult, chusankanInputRef
- アップロード関数: handleChusankanUpload (endpoint: /fields/import/chusankan/)
- UI追加: 「中山間マスタ取込」セクション(黄色)
ビルド成功。http://localhost:3000/import で確認できます。
2026-02-15 14:34:02 +09:00
Akira
592aedb665 Day 11 完了
実装内容:
1. frontend/src/components/Navbar.tsx - データ取込リンク追加
2. frontend/src/app/import/page.tsx - データインポート画面
機能:
- 共済マスタ取込(POST /api/fields/import/kyosai/)
- 実圃場データ取込(POST /api/fields/import/yoshida/)
- ファイル選択 (.ods)
- 結果表示(作成件数、更新件数)
- エラー表示
API動作確認:
- /api/fields/import/kyosai/ → HTTP 400(ファイルなし時)
- /api/fields/import/yoshida/ → HTTP 400(ファイルなし時)
ブラウザで http://localhost:3000/import からデータインポートが可能です。
次の工程に移りますか?
2026-02-15 14:02:46 +09:00
Akira
6334c6deaa Day 10 完了
実装内容:
1. frontend/src/components/Navbar.tsx - 帳票出力リンク追加
2. frontend/src/app/reports/page.tsx - 帳票出力画面(PDFダウンロード)
API動作確認:
- /api/reports/kyosai/2025/ → HTTP 200 (76KB PDF)
- /api/reports/chusankan/2025/ → HTTP 200 (84KB PDF)
ブラウザで http://localhost:3000/reports から帳票ダウンロードが可能です。
次の工程に移りますか?
2026-02-15 13:45:46 +09:00
Akira
923dd5dece Day 9 完了
実装内容:
1. backend/apps/fields/views.py - FieldViewSetをModelViewSetに変更(書き込み可能)
2. frontend/src/components/Navbar.tsx - 圃場管理リンク追加
3. frontend/src/app/fields/page.tsx - 圃場一覧画面
4. frontend/src/app/fields/new/page.tsx - 新規作成画面
5. frontend/src/app/fields/[id]/page.tsx - 編集画面
API CRUDテスト結果:
- POST /api/fields/ → 201 Created
- GET /api/fields/ → 200 OK
- PATCH /api/fields/{id}/ → 200 OK
- DELETE /api/fields/{id}/ → 204 No Content
ブラウザで http://localhost:3000/fields から圃場のCRUD操作が可能です。
次の工程に移りますか?
2026-02-15 13:34:32 +09:00
Akira
afd434cd4c Day 8 完了
実装内容:
1. frontend/src/types/index.ts - 型定義(Field, Crop, Variety, Plan)
2. frontend/src/components/Navbar.tsx - ナビゲーションバー(ログアウトボタン)
3. backend/apps/fields/views.py - FieldViewSet追加
4. backend/apps/fields/serializers.py - 新規作成(Fieldシリアライザー)
5. backend/apps/fields/urls.py - ViewSetルート追加
6. frontend/src/app/allocation/page.tsx - 作付け計画画面(作物・品種選択可能)
7. frontend/src/app/page.tsx - 自動リダイレクト(ログイン状態による)
API動作確認:
- /api/fields/ → HTTP 200(圃場データなし)
- /api/plans/crops/ → HTTP 200(2作物:水稲・大豆)
- /api/plans/?year=2025 → HTTP 200
テスト: http://localhost:3000/ → 自動リダイレクトで /login または /allocation
※ 現在圃場データがないため、画面には「圃場データがありません。インポートを実行してください。」と表示されます。
次の工程に移りますか?
2026-02-15 13:23:40 +09:00
Akira
d7ab48772e 確認と修正が完了しました。
原因: フロントエンドコンテナ内で、新たに追加したライブラリ(axios, lucide-react等)が見つからない状態(Module not found)になっていました。ホスト側でのインストールがコンテナに同期されていなかった可能性があります。

対処: コンテナ内で直接 npm install を実行し、再起動しました。 確認結果: 現在、http://localhost:3000/login は正常に HTTP 200 を返しています。

お手数ですが、もう一度ブラウザでアクセスしてみてください。 もし表示されない場合は、スーパーリロード(Ctrl+F5)もお試しください。

これが確認できれば、Day 7 は完了とし、次の「Day 8: 作付け計画画面の実装」に進みます
2026-02-15 13:12:11 +09:00
Akira
964c34471c Day 7 完了
実装内容:
1. 依存ライブラリ追加: axios, lucide-react, clsx, tailwind-merge
2. APIクライアント作成: frontend/src/lib/api.ts - JWT認証対応
3. ログイン画面作成: frontend/src/app/login/page.tsx - 日本語UI
4. レイアウト更新: frontend/src/app/layout.tsx - Noto Sans JP追加
5. JWTエンドポイント追加: backend/keinasystem/urls.py にJWT URL追加
テスト結果:
- ログインAPI (/api/auth/jwt/create/) → HTTP 200 OK
- テストユーザー: admin / password123
ブラウザで http://localhost:3000/login にアクセスして動作確認できます。
次の工程に移りますか?
2026-02-15 13:04:48 +09:00
Akira
125cb2d981 プロジェクト作成 2026-02-15 11:13:47 +09:00