From a58d94a62954b286a7fc78a2ebd63a808e830393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?= <你的邮箱> Date: Fri, 5 Sep 2025 16:07:27 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E3=82=BF=E3=82=B0=E7=99=BA=E8=A1=8C?= =?UTF-8?q?=E3=82=AD=E3=83=A5=E3=83=BC=E5=87=A6=E7=90=86=E3=80=81=E5=B1=A5?= =?UTF-8?q?=E6=AD=B4=E8=A1=A8=E7=A4=BA=E3=80=91=E3=83=9C=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E5=8B=95=E4=BD=9C=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/TagissueController.php | 184 ++++++++- .../views/admin/tag_issue/list.blade.php | 365 ++++++++++++------ routes/web.php | 6 +- 3 files changed, 421 insertions(+), 134 deletions(-) diff --git a/app/Http/Controllers/Admin/TagissueController.php b/app/Http/Controllers/Admin/TagissueController.php index 6f1cbca..63d2e9e 100644 --- a/app/Http/Controllers/Admin/TagissueController.php +++ b/app/Http/Controllers/Admin/TagissueController.php @@ -5,37 +5,181 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Barryvdh\DomPDF\Facade\Pdf; class TagissueController extends Controller { + // タグ発送宛名PDF生成 + public function printUnissuedLabels(Request $request) + { + $ids = $request->input('ids', []); + if (empty($ids) || !is_array($ids)) { + return back()->with('error', '1件以上選択してください。'); + } + // 利用者情報取得 + $users = DB::table('user') + ->whereIn('user_id', $ids) + ->select('user_name', 'user_regident_zip', 'user_regident_pre') + ->get(); + + // PDF生成(Laravel-dompdf使用例) + $pdfHtml = view('admin.tag_issue.pdf_labels', ['users' => $users])->render(); + $pdf = \PDF::loadHTML($pdfHtml); + return $pdf->download('tag_labels.pdf'); + } public function list(Request $request) { - // userテーブルから必要なカラムを取得 - $query = DB::table('user') - ->select( - 'user_seq', - 'user_tag_serial', - 'user_tag_serial_64', - 'user_tag_issue', - 'user_name', - 'user_mobile', - 'user_homephone', - 'user_regident_zip', - 'user_regident_pre', - 'user_regident_city', - 'user_regident_add' - ) - ->orderByDesc('user_seq'); + // 絞り込み条件 + $filterType = $request->input('filter_type'); // 'unissued', 'issued', 'all', 'unissued_toggle' + $tagSerial = $request->input('tag_serial'); + $tagSerial64 = $request->input('tag_serial_64'); - // 必要に応じてフィルタ追加 - // if ($request->filled('user_tag_issue')) { - // $query->where('user_tag_issue', $request->input('user_tag_issue')); - // } + // ソートパラメータ取得 + $sort = $request->input('sort'); + $sortType = $request->input('sort_type', 'asc'); + + // userテーブルとoperator_queテーブルをJOIN + $query = DB::table('user') + ->leftJoin('operator_que', 'user.user_id', '=', 'operator_que.user_id') + ->select( + 'user.user_seq', + 'user.user_id', + 'user.user_tag_serial', + 'user.user_tag_serial_64', + 'user.user_tag_issue', + 'user.user_name', + 'user.user_mobile', + 'user.user_homephone', + 'user.user_regident_zip', + 'user.user_regident_pre', + 'user.user_regident_city', + 'user.user_regident_add', + 'operator_que.que_id', + 'operator_que.que_class', + 'operator_que.que_status' + ); + + // ソート項目に応じたorderBy + switch ($sort) { + case 'que_id': + $query->orderBy('operator_que.que_id', $sortType); + break; + case 'user_tag_serial': + $query->orderBy('user.user_tag_serial', $sortType); + break; + case 'user_tag_serial_64': + $query->orderBy('user.user_tag_serial_64', $sortType); + break; + case 'user_tag_issue': + $query->orderBy('user.user_tag_issue', $sortType); + break; + case 'user_name': + $query->orderBy('user.user_name', $sortType); + break; + default: + $query->orderByDesc('user.user_seq'); + } + + // 【種別フィルター】タグ未発送(通常) + if ($filterType === 'unissued') { + $query->where('operator_que.que_class', 3) + ->where('operator_que.que_status', 1); + } + // 【種別フィルター】タグ未発送トグル(que_class=3かつque_status≠3) + if ($filterType === 'unissued_toggle') { + $query->where('operator_que.que_class', 3) + ->where('operator_que.que_status', '<>', 3); + } + // 【種別フィルター】タグ発送済み(通常) + if ($filterType === 'issued') { + $query->where('operator_que.que_class', 3) + ->where('operator_que.que_status', 3); + } + // 【種別フィルター】タグ発送済みトグル(que_class=3 and que_status=3) + if ($filterType === 'issued_toggle') { + $query->where('operator_que.que_class', 3) + ->where('operator_que.que_status', 3); + } + // 【タグシリアル・タグシリアル64進フィルター】 + if (!empty($tagSerial)) { + $query->where('user.user_tag_serial', 'like', "%$tagSerial%"); + } + if (!empty($tagSerial64)) { + $query->where('user.user_tag_serial_64', 'like', "%$tagSerial64%"); + } $users = $query->paginate(20); return view('admin.tag_issue.list', [ 'users' => $users, + 'filterType' => $filterType, + 'tagSerial' => $tagSerial, + 'tagSerial64' => $tagSerial64, + 'sort' => $sort, + 'sortType' => $sortType, ]); } + + // ステータス変更(タグ発送済み/未発送) + public function updateStatus(Request $request) + { + $ids = $request->input('ids', []); // チェックされたuser_id配列 + $action = $request->input('action'); // 'to_issued' or 'to_unissued' + if (empty($ids) || !is_array($ids)) { + return back()->with('error', 'チェックボックスを選択してください。'); + } + $operatorId = auth()->id(); + $now = now(); + // 対象ユーザーのoperator_queを取得 + $ques = DB::table('operator_que')->whereIn('user_id', $ids)->get(); + if ($action === 'to_issued') { + $alreadyIssued = $ques->where('que_status', 3)->pluck('user_id')->toArray(); + if (count($alreadyIssued) > 0) { + return back()->with('error', 'すでにタグ発送済みのユーザーが含まれています。'); + } + // 確認ダイアログはJS側で + DB::table('operator_que')->whereIn('user_id', $ids) + ->update(['que_status' => 3, 'updated_at' => $now, 'operator_id' => $operatorId]); + return back()->with('success', 'ステータスをタグ発送済に変更しました。'); + } + if ($action === 'to_unissued') { + $alreadyUnissued = $ques->where('que_status', 1)->pluck('user_id')->toArray(); + if (count($alreadyUnissued) > 0) { + // 既にタグ未発送のユーザー名を取得 + $names = DB::table('user')->whereIn('user_id', $alreadyUnissued)->pluck('user_name')->toArray(); + return back()->with('error', 'すでにタグ未発送のユーザーが含まれています: ' . implode(', ', $names)); + } + // すべてque_status=1以外なので更新 + DB::table('operator_que')->whereIn('user_id', $ids) + ->update(['que_status' => 1, 'updated_at' => $now, 'operator_id' => $operatorId]); + return back()->with('success', 'ステータスをタグ未発送に変更しました。'); + } + return back()->with('error', '不正な操作です。'); + } + + // Ajax: 選択user_idのque_statusを返す(タグ発送済み/未発送判定) + public function checkStatus(Request $request) + { + $ids = $request->input('ids', []); + $type = $request->input('type'); // 'issued' or 'unissued' + $users = DB::table('user') + ->leftJoin('operator_que', 'user.user_id', '=', 'operator_que.user_id') + ->whereIn('user.user_id', $ids) + ->select('user.user_name', 'operator_que.que_status') + ->get(); + $alreadyIssued = []; + $alreadyUnissued = []; + foreach ($users as $u) { + if ($type === 'issued' && $u->que_status == 3) { + $alreadyIssued[] = $u->user_name; + } + if ($type === 'unissued' && $u->que_status == 1) { + $alreadyUnissued[] = $u->user_name; + } + } + return response()->json([ + 'alreadyIssued' => $alreadyIssued, + 'alreadyUnissued' => $alreadyUnissued + ]); + } } \ No newline at end of file diff --git a/resources/views/admin/tag_issue/list.blade.php b/resources/views/admin/tag_issue/list.blade.php index 3f7f607..985cc4c 100644 --- a/resources/views/admin/tag_issue/list.blade.php +++ b/resources/views/admin/tag_issue/list.blade.php @@ -2,129 +2,268 @@ @section('title', 'タグ発行キュー処理、履歴表示') @section('content') -
-
-

タグ発行キュー処理、履歴表示

- -
+
+
+

タグ発行キュー処理、履歴表示

+ +
- -
-
- -
-
印刷処理
-
-
-
- -
-
-
-
-
- -
-
絞り込みフィルター
-
-
-
- -
-
- + +
+
+ +
+
印刷処理
+
+
+
+ + +
+
-
- -
-
タグシリアルフィルター
-
-
-
タグシリアル
-
- -
-
タグシリアル64進
-
- -
-
- - + +
+
絞り込みフィルター
+
+
+
+
+ @if(request('filter_type') == 'unissued_toggle') + + @else + + + @endif +
+
+
+
+ @if(request('filter_type') == 'issued_toggle') + + @else + + + @endif +
+
-
- -
-
タグ発送ステータス変更
-
-
-
- -
-
- -
-
+ +
+
タグシリアルフィルター
+
+
+
+
タグシリアル
+
+ +
+
タグシリアル64進
+
+ +
+
+ + 全表示 +
+
+
+
+
+ +
+
タグ発送ステータス変更
+
+
+ @csrf + +
+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + @foreach($users as $user) + + + @php + $que = \App\Models\OperatorQue::where('user_id', $user->user_id)->first(); + @endphp + + + + + + + + + + + + + @endforeach + +
+ + キューID + @if(request('sort') === 'que_id') + + @endif + + + + タグシリアル + @if(request('sort') === 'user_tag_serial') + + @endif + + + + タグシリアル64進 + @if(request('sort') === 'user_tag_serial_64') + + @endif + + + + タグ発送ステータス + @if(request('sort') === 'user_tag_issue') + + @endif + + + + 利用者名 + @if(request('sort') === 'user_name') + + @endif + + 携帯電話番号自宅電話番号居住所:郵便番号居住所:都道府県居住所:市区郡居住所:住所
+ + {{ $que ? $que->que_id : '' }}{{ $user->user_tag_serial }}{{ $user->user_tag_serial_64 }}{{ $user->user_tag_issue }} + @if(!empty($user->user_seq)) + + {{ $user->user_name }} + + @else + {{ $user->user_name }} + @endif + {{ $user->user_mobile }}{{ $user->user_homephone }}{{ $user->user_regident_zip }}{{ $user->user_regident_pre }}{{ $user->user_regident_city }}{{ $user->user_regident_add }}
+
+
+ {{ $users->appends(request()->except('page'))->links('pagination') }} +
+
+
+
+
- - -
- - - - - - - - - - - - - - - - - - - @foreach($users as $user) - - - - - - - - - - - - - - - @endforeach - -
キューIDタグシリアルタグシリアル64進タグ発送ステータス利用者名携帯電話番号自宅電話番号居住所:郵便番号居住所:都道府県居住所:市区郡居住所:住所
{{ $user->user_seq }}{{ $user->user_tag_serial }}{{ $user->user_tag_serial_64 }}{{ $user->user_tag_issue }} - {{ $user->user_name }} - {{ $user->user_mobile }}{{ $user->user_homephone }}{{ $user->user_regident_zip }}{{ $user->user_regident_pre }}{{ $user->user_regident_city }}{{ $user->user_regident_add }}
-
-
- {{ $users->appends(request()->except('page'))->links('pagination') }} -
-
-
-
@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index aa6c919..c55b38e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -265,7 +265,11 @@ Route::middleware('auth')->group(function () { Route::get('/information', [InformationController::class, 'list'])->name('information'); // タグ発行キュー処理、履歴表示 - Route::get('/tagissue', [TagissueController::class, 'list'])->name('tagissue'); + Route::get('/tagissue', [App\Http\Controllers\Admin\TagissueController::class, 'list'])->name('tagissue'); + Route::post('/tagissue/status', [App\Http\Controllers\Admin\TagissueController::class, 'updateStatus'])->name('tagissue.status'); + Route::post('/tagissue/check-status', [App\Http\Controllers\Admin\TagissueController::class, 'checkStatus']); + // タグ発行キュー:宛名PDF印刷 + Route::post('/tagissue/print-unissued-labels', [App\Http\Controllers\Admin\TagissueController::class, 'printUnissuedLabels'])->name('tagissue.print_labels'); // シール発行履歴 Route::get('/seals', [SealsController::class, 'list'])->name('seals');