リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: LabelRoute
宛先マスタへのCSV一括インポート機能の追加
## 1. 目的
現状、宛先マスタ(customers テーブル)への登録は1件ずつ手入力のみ対応している。既存の取引先リストをExcel/CSVで管理している小規模EC・製造業ユーザーが多いため、CSVで一括登録できる機能を追加し、初期セットアップや定期的なマスタ更新の手間を大幅に削減する。
## 2. 具体的な仕様
### 2-1. 追加ページ
- `pages/master.php`(既存の宛先マスタ管理画面)に「宛先CSVインポート」セクションを追加する。
- または `pages/master_import.php` を新規作成し、masterページからリンクする。
### 2-2. CSVフォーマット
- ヘッダ行必須。列名は以下の通り(既存の shipments インポートと命名規則を統一):
```
customer_code, name, zip, address, tel, contact_name, memo, default_item_name
```
- `name` と `address` は必須。その他は任意(空欄可)。
- `customer_code` が空の場合は自動採番(`CUST-YYYYMMDD-連番` 形式)。
- 最大300行まで受け付ける(マスタの性格上500行より抑制)。
### 2-3. 処理フロー
1. **プレビューステップ**:CSVアップロード後、バリデーション結果を表形式で表示。エラー行は赤背景で理由を表示。
2. **コミットステップ**:プレビュー確認後「インポート実行」ボタンで登録。
3. **重複処理オプション**:`customer_code` が既存レコードと一致した場合の動作を選択できる。
- `スキップ`(デフォルト):既存を変更しない。
- `上書き`:既存レコードをUPDATEする。
4. 登録完了後は `master` ページへリダイレクトし、フラッシュメッセージで「N件登録・M件スキップ」を表示。
### 2-4. サンプルCSVダウンロード
- `?page=master&action=customer_sample` でサンプルCSVをダウンロードできるようにする。
- `lr_csv_download()`(既存関数)を流用。
### 2-5. DB操作
- INSERT: `lr_create_shipment()` と同様のパターンで PDO プリペアドステートメントを使用。
- 上書き時: `ON DUPLICATE KEY UPDATE` または `UPDATE ... WHERE customer_code = ?`。
- `customer_code` のユニーク制約(`uk_customer_code`)は既存スキーマのまま活用。
### 2-6. バリデーション
- `name` 空 → エラー「宛先名が空です」
- `address` 空 → エラー「住所が空です」
- `customer_code` が重複かつモード=スキップ → 警告扱い(黄背景)でスキップ件数をカウント。
- 301行以上 → エラー「300行以内にしてください」
## 3. 既存機能との整合
- 既存の shipments CSVインポート(`pages/import.php`)とは完全に独立したフローで、既存ページを変更しない。
- `lr_csv_download()`、`csrf_check()`、`render_layout()`、`app_db()` など既存の共通関数をそのまま流用する。
- `customers` テーブルのスキーマ変更は不要。
- 既存の宛先マスタ手入力・編集・削除機能は一切変更しない。
現状、宛先マスタ(customers テーブル)への登録は1件ずつ手入力のみ対応している。既存の取引先リストをExcel/CSVで管理している小規模EC・製造業ユーザーが多いため、CSVで一括登録できる機能を追加し、初期セットアップや定期的なマスタ更新の手間を大幅に削減する。
## 2. 具体的な仕様
### 2-1. 追加ページ
- `pages/master.php`(既存の宛先マスタ管理画面)に「宛先CSVインポート」セクションを追加する。
- または `pages/master_import.php` を新規作成し、masterページからリンクする。
### 2-2. CSVフォーマット
- ヘッダ行必須。列名は以下の通り(既存の shipments インポートと命名規則を統一):
```
customer_code, name, zip, address, tel, contact_name, memo, default_item_name
```
- `name` と `address` は必須。その他は任意(空欄可)。
- `customer_code` が空の場合は自動採番(`CUST-YYYYMMDD-連番` 形式)。
- 最大300行まで受け付ける(マスタの性格上500行より抑制)。
### 2-3. 処理フロー
1. **プレビューステップ**:CSVアップロード後、バリデーション結果を表形式で表示。エラー行は赤背景で理由を表示。
2. **コミットステップ**:プレビュー確認後「インポート実行」ボタンで登録。
3. **重複処理オプション**:`customer_code` が既存レコードと一致した場合の動作を選択できる。
- `スキップ`(デフォルト):既存を変更しない。
- `上書き`:既存レコードをUPDATEする。
4. 登録完了後は `master` ページへリダイレクトし、フラッシュメッセージで「N件登録・M件スキップ」を表示。
### 2-4. サンプルCSVダウンロード
- `?page=master&action=customer_sample` でサンプルCSVをダウンロードできるようにする。
- `lr_csv_download()`(既存関数)を流用。
### 2-5. DB操作
- INSERT: `lr_create_shipment()` と同様のパターンで PDO プリペアドステートメントを使用。
- 上書き時: `ON DUPLICATE KEY UPDATE` または `UPDATE ... WHERE customer_code = ?`。
- `customer_code` のユニーク制約(`uk_customer_code`)は既存スキーマのまま活用。
### 2-6. バリデーション
- `name` 空 → エラー「宛先名が空です」
- `address` 空 → エラー「住所が空です」
- `customer_code` が重複かつモード=スキップ → 警告扱い(黄背景)でスキップ件数をカウント。
- 301行以上 → エラー「300行以内にしてください」
## 3. 既存機能との整合
- 既存の shipments CSVインポート(`pages/import.php`)とは完全に独立したフローで、既存ページを変更しない。
- `lr_csv_download()`、`csrf_check()`、`render_layout()`、`app_db()` など既存の共通関数をそのまま流用する。
- `customers` テーブルのスキーマ変更は不要。
- 既存の宛先マスタ手入力・編集・削除機能は一切変更しない。
💬 返信 (3)
🛠 開発を開始しました (機能追加 (label-route))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「LabelRoute」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=label-route
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/label-route/
ご利用ありがとうございます!
ご要望いただいた「LabelRoute」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=label-route
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/label-route/
ご利用ありがとうございます!
Echo
Iris