From 870b944009aede73a5eeb31f33504b6e065876b8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?= <你的邮箱>
Date: Tue, 7 Oct 2025 16:41:19 +0900
Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=88=A9=E7=94=A8=E8=80=85=E5=88=86?=
=?UTF-8?q?=E9=A1=9E=E3=83=9E=E3=82=B9=E3=82=BF=E3=80=91=E6=96=B0=E8=A6=8F?=
=?UTF-8?q?=E3=80=81=E7=B7=A8=E9=9B=86=E7=94=BB=E9=9D=A2=E3=80=81CSV?=
=?UTF-8?q?=E5=87=BA=E5=8A=9B=E3=83=9C=E3=83=80=E3=83=B3=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/Admin/UsertypeController.php | 87 +++--
app/Models/Usertype.php | 47 ++-
.../views/admin/usertypes/_form.blade.php | 270 +++++++++-----
resources/views/admin/usertypes/add.blade.php | 64 +++-
.../views/admin/usertypes/list.blade.php | 345 +++++++++++++-----
routes/web.php | 2 +-
6 files changed, 570 insertions(+), 245 deletions(-)
diff --git a/app/Http/Controllers/Admin/UsertypeController.php b/app/Http/Controllers/Admin/UsertypeController.php
index 424b3a1..0b53e66 100644
--- a/app/Http/Controllers/Admin/UsertypeController.php
+++ b/app/Http/Controllers/Admin/UsertypeController.php
@@ -15,20 +15,35 @@ class UsertypeController extends Controller
{
public function list(Request $request)
{
+ $sortable = ['user_categoryid', 'sort_order', 'usertype_subject1', 'usertype_subject2', 'usertype_subject3', 'print_name', 'usertype_remarks'];
+ $sort = $request->input('sort', 'user_categoryid');
+ if (!in_array($sort, $sortable, true)) {
+ $sort = 'user_categoryid';
+ }
+ $sortType = strtolower($request->input('sort_type', 'asc'));
+ if (!in_array($sortType, ['asc', 'desc'], true)) {
+ $sortType = 'asc';
+ }
$inputs = [
- 'isMethodPost' => 0,
+ 'isMethodPost' => $request->isMethod('post') ? 1 : 0,
'isExport' => 0,
- 'sort' => $request->input('sort', ''),
- 'sort_type' => $request->input('sort_type', ''),
- 'page' => $request->get('page', 1),
-
+ 'sort' => $sort,
+ 'sort_type' => $sortType,
+ 'page' => (int) $request->get('page', 1),
];
- $inputs['isMethodPost'] = $request->isMethod('post');
- $inputs['list'] = Usertype::search($inputs);
- if ($inputs['list']->total() > 0 && $inputs['page'] > $inputs['list']->lastPage()) {
+ $filters = [
+ 'filter_sort_order' => $request->input('filter_sort_order', ''),
+ 'filter_category_name1' => $request->input('filter_category_name1', ''),
+ 'filter_category_name2' => $request->input('filter_category_name2', ''),
+ 'filter_category_name3' => $request->input('filter_category_name3', ''),
+ ];
+ $searchParams = array_merge($inputs, $filters);
+ $viewData = $searchParams;
+ $viewData['list'] = Usertype::search($searchParams);
+ if ($viewData['list']->total() > 0 && $viewData['page'] > $viewData['list']->lastPage()) {
return redirect()->route('usertypes');
}
- return view('admin.usertypes.list', $inputs);
+ return view('admin.usertypes.list', $viewData);
}
public function add(Request $request)
@@ -36,9 +51,9 @@ class UsertypeController extends Controller
// 画面に戻すための初期値
$viewData = [
'sort_order' => old('sort_order', ''),
- 'category_name1' => old('category_name1', ''),
- 'category_name2' => old('category_name2', ''),
- 'category_name3' => old('category_name3', ''),
+ 'usertype_subject1' => old('usertype_subject1', ''),
+ 'usertype_subject2' => old('usertype_subject2', ''),
+ 'usertype_subject3' => old('usertype_subject3', ''),
'print_name' => old('print_name', ''),
'usertype_money' => old('usertype_money', ''),
'usertype_remarks' => old('usertype_remarks', ''),
@@ -50,9 +65,9 @@ class UsertypeController extends Controller
// 入力値をまとめる
$inputs = [
'sort_order' => $request->input('sort_order'),
- 'category_name1' => $request->input('category_name1'),
- 'category_name2' => $request->input('category_name2'),
- 'category_name3' => $request->input('category_name3'),
+ 'usertype_subject1' => $request->input('usertype_subject1'),
+ 'usertype_subject2' => $request->input('usertype_subject2'),
+ 'usertype_subject3' => $request->input('usertype_subject3'),
'print_name' => $request->input('print_name'),
'usertype_money' => $request->input('usertype_money'),
'usertype_remarks' => $request->input('usertype_remarks'),
@@ -61,9 +76,9 @@ class UsertypeController extends Controller
// バリデーションルール(最小限)
$rules = [
'sort_order' => 'nullable|integer',
- 'category_name1' => 'nullable|string|max:255',
- 'category_name2' => 'nullable|string|max:255',
- 'category_name3' => 'nullable|string|max:255',
+ 'usertype_subject1' => 'nullable|string|max:255',
+ 'usertype_subject2' => 'nullable|string|max:255',
+ 'usertype_subject3' => 'nullable|string|max:255',
'print_name' => 'required|string|max:255',
'usertype_money' => 'nullable|string|max:255',
'usertype_remarks' => 'nullable|string|max:255',
@@ -115,9 +130,9 @@ class UsertypeController extends Controller
// ▼ 内蔵バリデーション(FormRequest を使わない)
$rules = [
'sort_order' => 'nullable|integer',
- 'category_name1' => 'nullable|string|max:255',
- 'category_name2' => 'nullable|string|max:255',
- 'category_name3' => 'nullable|string|max:255',
+ 'usertype_subject1' => 'nullable|string|max:255',
+ 'usertype_subject2' => 'nullable|string|max:255',
+ 'usertype_subject3' => 'nullable|string|max:255',
'print_name' => 'required|string|max:255',
'usertype_money' => 'nullable|string|max:255',
'usertype_remarks' => 'nullable|string|max:255',
@@ -141,9 +156,9 @@ class UsertypeController extends Controller
// fill するフィールドだけを明示したい場合は only(...) で絞ってもOK
$usertype->fill([
'sort_order' => $data['sort_order'] ?? null,
- 'category_name1' => $data['category_name1'] ?? null,
- 'category_name2' => $data['category_name2'] ?? null,
- 'category_name3' => $data['category_name3'] ?? null,
+ 'usertype_subject1' => $data['usertype_subject1'] ?? null,
+ 'usertype_subject2' => $data['usertype_subject2'] ?? null,
+ 'usertype_subject3' => $data['usertype_subject3'] ?? null,
'print_name' => $data['print_name'] ?? null,
'usertype_money' => $data['usertype_money'] ?? null,
'usertype_remarks' => $data['usertype_remarks'] ?? null,
@@ -197,15 +212,16 @@ class UsertypeController extends Controller
public function export(Request $request)
{
-
- $headers = array(
- "Content-type" => "text/csv;charset=UTF-8",
- 'Content-Encoding: UTF-8',
- "Content-Disposition" => "attachment; filename=file.csv",
- "Pragma" => "no-cache",
- "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
- "Expires" => "0"
- );
+ $timestamp = now()->format('YmdHis');
+ $filename = "利用者分類マスタ{$timestamp}.csv";
+ $filePath = storage_path("app/{$filename}");
+ $headers = [
+ 'Content-Type' => 'text/csv; charset=UTF-8',
+ 'Content-Encoding' => 'UTF-8',
+ 'Pragma' => 'no-cache',
+ 'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
+ 'Expires' => '0',
+ ];
$inputs = [
'isMethodPost' => 0,
'isExport' => 1,
@@ -221,8 +237,7 @@ class UsertypeController extends Controller
__('適用料率'),// 2
__('備考'),// 3
);
- $filename = "利用者分類マスタ.csv";
- $file = fopen($filename, 'w+');
+ $file = fopen($filePath, 'w+');
fputcsv($file, $columns);
foreach ($dataExport as $items) {
fputcsv(
@@ -236,7 +251,7 @@ class UsertypeController extends Controller
);
}
fclose($file);
- return Response::download($filename, $filename, $headers);
+ return Response::download($filePath, $filename, $headers)->deleteFileAfterSend(true);
}
public function import(Request $request)
diff --git a/app/Models/Usertype.php b/app/Models/Usertype.php
index ac73bd2..b2b28ae 100644
--- a/app/Models/Usertype.php
+++ b/app/Models/Usertype.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use App\Utils;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
@@ -15,9 +16,14 @@ class Usertype extends Model
protected $primaryKey = 'user_categoryid';
protected $fillable = [
+ 'sort_order',
+ 'usertype_subject1',
+ 'usertype_subject2',
+ 'usertype_subject3',
'print_name',
'usertype_money',
- 'usertype_remarks'
+ 'usertype_remarks',
+ 'operator_id',
];
public static function boot()
@@ -30,20 +36,37 @@ class Usertype extends Model
public static function search($inputs)
{
- $list = self::query();
- if ($inputs['isMethodPost']) {
-
+ $query = self::query();
+
+ if (!empty($inputs['filter_sort_order'])) {
+ $query->where('sort_order', $inputs['filter_sort_order']);
}
- // Sort
- if ($inputs['sort']) {
- $list->orderBy($inputs['sort'], $inputs['sort_type']);
+ if (!empty($inputs['filter_category_name1'])) {
+ $query->where('usertype_subject1', 'like', '%' . $inputs['filter_category_name1'] . '%');
}
- if ($inputs['isExport']){
- $list = $list->get();
- }else{
- $list = $list->paginate(Utils::item_per_page);
+ if (!empty($inputs['filter_category_name2'])) {
+ $query->where('usertype_subject2', 'like', '%' . $inputs['filter_category_name2'] . '%');
}
- return $list;
+ if (!empty($inputs['filter_category_name3'])) {
+ $query->where('usertype_subject3', 'like', '%' . $inputs['filter_category_name3'] . '%');
+ }
+
+ $sortable = ['user_categoryid', 'sort_order', 'usertype_subject1', 'usertype_subject2', 'usertype_subject3', 'print_name', 'usertype_remarks'];
+ $sortColumn = $inputs['sort'] ?? 'user_categoryid';
+ if (!in_array($sortColumn, $sortable, true)) {
+ $sortColumn = 'user_categoryid';
+ }
+
+ $direction = strtolower($inputs['sort_type'] ?? 'asc');
+ if (!in_array($direction, ['asc', 'desc'], true)) {
+ $direction = 'asc';
+ }
+
+ $query->orderBy($sortColumn, $direction);
+
+ return !empty($inputs['isExport'])
+ ? $query->get()
+ : $query->paginate(Utils::item_per_page);
}
public static function getByPk($pk)
diff --git a/resources/views/admin/usertypes/_form.blade.php b/resources/views/admin/usertypes/_form.blade.php
index 0591f4f..0a03880 100644
--- a/resources/views/admin/usertypes/_form.blade.php
+++ b/resources/views/admin/usertypes/_form.blade.php
@@ -1,105 +1,179 @@
-