Commit Graph

65 Commits

Author SHA1 Message Date
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