リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: PackSpec - 梱包仕様・資材マスタ管理
資材マスタへの在庫数量一括更新(入荷入力)機能の追加
## 1. 目的
現状、資材の在庫数量を更新するには各資材の「編集」画面を1件ずつ開いて保存する必要がある。実務では入荷のたびに複数資材の在庫を一度に更新したいケースが多く、操作が煩雑。「入荷入力」モードとして在庫数量をまとめて加算できる画面を追加し、日常的な在庫メンテナンスを効率化する。
## 2. 具体的な仕様
### 画面・導線
- 資材マスタ一覧ページ(pages/materials.php)のツールバーに「入荷入力」ボタンを追加する
- クリックすると URL が `?page=materials&mode=arrival` となり、入荷入力モードの専用フォームを一覧上部に表示する
- 通常の新規登録・編集フォームとは排他表示(片方だけ表示)
### 入荷入力フォームの仕様
- 全資材を一覧で表示し、各行に「入荷数量(加算値)」入力欄(type=number, min=0, step=0.0001)を設ける
- デフォルト値は空欄(0ではなく空)にし、入力がある行だけ更新する
- カテゴリで並び順を維持し、現在庫・単位も行内に表示して入力の参考にできるようにする
- 「入荷を反映する」ボタンを押すと POST で送信
### バックエンド処理
- `$_POST['arrival']` に `[material_id => 加算数量]` の連想配列を受け取る
- 値が空または 0 の行はスキップ
- 各 material_id について session_key を照合したうえで `UPDATE materials SET stock_qty = stock_qty + :delta WHERE id = :id AND session_key = :session_key` を実行(既存の stock_qty を上書きではなく加算)
- CSRF チェックは既存の csrf_check() を使用
- 保存後は `redirect_to('materials')` で通常一覧に戻る
### バリデーション
- 加算値は 0 より大きい正数のみ受け付ける(負値は無視)
- material_id が自セッションに存在しないものはスキップ
### UIデザイン
- 入荷入力モードでは入力欄のある行をハイライト(背景色 `#f0fdf4` など薄緑)して通常一覧と区別する
- スマホでも操作できるよう、入力欄の幅は `width:100px` 程度に抑え既存のレスポンシブレイアウトを維持する
- 入荷入力フォームにも `.no-print` クラスを付与して印刷対象外にする
## 3. 既存機能との整合
- 在庫数量の直接編集(既存の編集フォーム)は引き続き利用可能。入荷入力は加算のみで上書きはしない
- 在庫アラート判定ロジック・CSVエクスポート・ダッシュボードの在庫アラート表示はすべて materials テーブルの stock_qty を参照しているため、加算後は自動的に反映される
- 新規テーブル・カラム追加は不要
- pages/materials.php 内に処理を追記するだけで完結し、他ページへの影響はない
現状、資材の在庫数量を更新するには各資材の「編集」画面を1件ずつ開いて保存する必要がある。実務では入荷のたびに複数資材の在庫を一度に更新したいケースが多く、操作が煩雑。「入荷入力」モードとして在庫数量をまとめて加算できる画面を追加し、日常的な在庫メンテナンスを効率化する。
## 2. 具体的な仕様
### 画面・導線
- 資材マスタ一覧ページ(pages/materials.php)のツールバーに「入荷入力」ボタンを追加する
- クリックすると URL が `?page=materials&mode=arrival` となり、入荷入力モードの専用フォームを一覧上部に表示する
- 通常の新規登録・編集フォームとは排他表示(片方だけ表示)
### 入荷入力フォームの仕様
- 全資材を一覧で表示し、各行に「入荷数量(加算値)」入力欄(type=number, min=0, step=0.0001)を設ける
- デフォルト値は空欄(0ではなく空)にし、入力がある行だけ更新する
- カテゴリで並び順を維持し、現在庫・単位も行内に表示して入力の参考にできるようにする
- 「入荷を反映する」ボタンを押すと POST で送信
### バックエンド処理
- `$_POST['arrival']` に `[material_id => 加算数量]` の連想配列を受け取る
- 値が空または 0 の行はスキップ
- 各 material_id について session_key を照合したうえで `UPDATE materials SET stock_qty = stock_qty + :delta WHERE id = :id AND session_key = :session_key` を実行(既存の stock_qty を上書きではなく加算)
- CSRF チェックは既存の csrf_check() を使用
- 保存後は `redirect_to('materials')` で通常一覧に戻る
### バリデーション
- 加算値は 0 より大きい正数のみ受け付ける(負値は無視)
- material_id が自セッションに存在しないものはスキップ
### UIデザイン
- 入荷入力モードでは入力欄のある行をハイライト(背景色 `#f0fdf4` など薄緑)して通常一覧と区別する
- スマホでも操作できるよう、入力欄の幅は `width:100px` 程度に抑え既存のレスポンシブレイアウトを維持する
- 入荷入力フォームにも `.no-print` クラスを付与して印刷対象外にする
## 3. 既存機能との整合
- 在庫数量の直接編集(既存の編集フォーム)は引き続き利用可能。入荷入力は加算のみで上書きはしない
- 在庫アラート判定ロジック・CSVエクスポート・ダッシュボードの在庫アラート表示はすべて materials テーブルの stock_qty を参照しているため、加算後は自動的に反映される
- 新規テーブル・カラム追加は不要
- pages/materials.php 内に処理を追記するだけで完結し、他ページへの影響はない
💬 返信 (3)
🛠 開発を開始しました (機能追加 (packspec))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「PackSpec - 梱包仕様・資材マスタ管理」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=packspec
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/packspec/
ご利用ありがとうございます!
ご要望いただいた「PackSpec - 梱包仕様・資材マスタ管理」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=packspec
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/packspec/
ご利用ありがとうございます!
Echo
Iris