リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: PurchaseFlow
購買依頼一覧のカテゴリ絞り込みフィルター追加
## 1. 目的
現在の購買依頼一覧(pages/list.php)には「キーワード」「ステータス」「部門」の3つの検索フィルターがあるが、「カテゴリ」による絞り込みができない。消耗品・原材料・備品など品目カテゴリは購買担当者が頻繁に使う軸であり、追加することで目的の依頼を素早く見つけられるようになる。
## 2. 具体的な仕様
### 画面・操作
- `pages/list.php` の検索フォーム(`.grid.grid-4`)に「カテゴリ」セレクトボックスを追加する
- 現在 `grid-4` の4列目が「検索ボタン」であるため、列を5列に増やすか(`grid-5` クラスを追加)、「部門」と「カテゴリ」を同じ列にまとめるレイアウト調整を行う
- 推奨: `grid-4` を維持しつつ、3列目に部門・カテゴリをまとめた `<div>` を2段で配置するか、フォームを2行に分割する(スマホ対応を優先し2行分割が簡潔)
- セレクトボックスのラベルは「カテゴリ」、デフォルト選択肢は `<option value="">すべて</option>`
- GETパラメータ名は `category_id`
### データ処理(pages/list.php)
```php
// 既存の絞り込み条件に追加
if (($_GET['category_id'] ?? '') !== '') {
$where[] = 'pr.category_id = ?';
$params[] = (int)$_GET['category_id'];
}
```
- `fetch_categories()` は lib.php に既存のため、`$categories = fetch_categories();` をページ先頭で取得し、`render_layout` の `use` に渡す
### フォーム出力
```php
<div>
<label>カテゴリ</label>
<select name="category_id">
<option value="">すべて</option>
<?php foreach ($categories as $c): ?>
<option value="<?= (int)$c['id'] ?>" <?= (string)($_GET['category_id'] ?? '') === (string)$c['id'] ? 'selected' : '' ?>><?= h($c['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
```
### フィルター解除
- 既存の「解除」リンク(`href="index.php?page=list"`)はそのまま維持。GETパラメータをすべてクリアするため、`category_id` も自動的にリセットされる
## 3. 既存機能との整合
- SQLの `SELECT` 文は既に `c.name AS category_name` を取得しており、JOINも存在するため、WHERE句の追加のみで対応可能
- `fetch_categories()` は lib.php に実装済みで再利用する
- 他ページ(budgets.php, edit.php 等)には一切変更を加えない
- スマホ表示は既存の `.grid` CSS がレスポンシブ対応済みのため、`grid-4` から列数を変更しない2行レイアウト(フォームを2つの `.grid` divに分割)が最もリスクが低い
現在の購買依頼一覧(pages/list.php)には「キーワード」「ステータス」「部門」の3つの検索フィルターがあるが、「カテゴリ」による絞り込みができない。消耗品・原材料・備品など品目カテゴリは購買担当者が頻繁に使う軸であり、追加することで目的の依頼を素早く見つけられるようになる。
## 2. 具体的な仕様
### 画面・操作
- `pages/list.php` の検索フォーム(`.grid.grid-4`)に「カテゴリ」セレクトボックスを追加する
- 現在 `grid-4` の4列目が「検索ボタン」であるため、列を5列に増やすか(`grid-5` クラスを追加)、「部門」と「カテゴリ」を同じ列にまとめるレイアウト調整を行う
- 推奨: `grid-4` を維持しつつ、3列目に部門・カテゴリをまとめた `<div>` を2段で配置するか、フォームを2行に分割する(スマホ対応を優先し2行分割が簡潔)
- セレクトボックスのラベルは「カテゴリ」、デフォルト選択肢は `<option value="">すべて</option>`
- GETパラメータ名は `category_id`
### データ処理(pages/list.php)
```php
// 既存の絞り込み条件に追加
if (($_GET['category_id'] ?? '') !== '') {
$where[] = 'pr.category_id = ?';
$params[] = (int)$_GET['category_id'];
}
```
- `fetch_categories()` は lib.php に既存のため、`$categories = fetch_categories();` をページ先頭で取得し、`render_layout` の `use` に渡す
### フォーム出力
```php
<div>
<label>カテゴリ</label>
<select name="category_id">
<option value="">すべて</option>
<?php foreach ($categories as $c): ?>
<option value="<?= (int)$c['id'] ?>" <?= (string)($_GET['category_id'] ?? '') === (string)$c['id'] ? 'selected' : '' ?>><?= h($c['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
```
### フィルター解除
- 既存の「解除」リンク(`href="index.php?page=list"`)はそのまま維持。GETパラメータをすべてクリアするため、`category_id` も自動的にリセットされる
## 3. 既存機能との整合
- SQLの `SELECT` 文は既に `c.name AS category_name` を取得しており、JOINも存在するため、WHERE句の追加のみで対応可能
- `fetch_categories()` は lib.php に実装済みで再利用する
- 他ページ(budgets.php, edit.php 等)には一切変更を加えない
- スマホ表示は既存の `.grid` CSS がレスポンシブ対応済みのため、`grid-4` から列数を変更しない2行レイアウト(フォームを2つの `.grid` divに分割)が最もリスクが低い
💬 返信 (3)
🛠 開発を開始しました (機能追加 (purchase-flow))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「PurchaseFlow」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=purchase-flow
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/purchase-flow/
ご利用ありがとうございます!
ご要望いただいた「PurchaseFlow」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=purchase-flow
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/purchase-flow/
ご利用ありがとうございます!
Echo
Iris