diff --git a/app/Http/Controllers/Admin/ReservationController.php b/app/Http/Controllers/Admin/ReservationController.php index 99510ff..d5a3e18 100644 --- a/app/Http/Controllers/Admin/ReservationController.php +++ b/app/Http/Controllers/Admin/ReservationController.php @@ -38,12 +38,18 @@ class ReservationController extends Controller 'p.park_name', 'r.price_parkplaceid', 'r.psection_id', + DB::raw('ps.psection_subject as vehicle_type'), + DB::raw('ut.usertype_subject1 as user_category1'), + DB::raw('ut.usertype_subject2 as user_category2'), + DB::raw('ut.usertype_subject3 as user_category3'), 'r.reserve_date', 'r.reserve_reduction as reduction', - 'r.800m_flag as within_800m_flag', + DB::raw('r.`800m_flag` as within_800m_flag'), ]) ->leftJoin('user as u', 'r.user_id', '=', 'u.user_id') - ->leftJoin('park as p', 'r.park_id', '=', 'p.park_id'); // 追加 + ->leftJoin('park as p', 'r.park_id', '=', 'p.park_id') + ->leftJoin('psection as ps','r.psection_id','=','ps.psection_id') + ->leftJoin('usertype as ut','u.user_categoryid','=','ut.user_categoryid'); // フィルター条件 if ($request->filled('park_id')) { @@ -52,8 +58,13 @@ class ReservationController extends Controller if ($request->filled('user_id')) { $q->where('r.user_id', $request->input('user_id')); } - if ($request->filled('user_categoryid')) { - $q->where('r.user_categoryid', $request->input('user_categoryid')); + // 利用者分類(契約者一覧に合わせ、分類名1の完全一致を優先) + if ($request->filled('user_category1')) { + $val = trim(mb_convert_kana($request->input('user_category1'), 'asKV')); + $q->where('ut.usertype_subject1', $val); + } elseif ($request->filled('user_categoryid')) { + // 既存互換:ID指定も残す + $q->where('u.user_categoryid', $request->input('user_categoryid')); } if ($request->filled('user_tag_serial')) { $q->where('u.user_tag_serial', 'like', '%' . $request->input('user_tag_serial') . '%'); @@ -71,7 +82,11 @@ class ReservationController extends Controller }); } if ($request->filled('user_primemail')) { - $q->where('u.user_primemail', 'like', '%' . $request->input('user_primemail') . '%'); + $like = '%' . $request->input('user_primemail') . '%'; + $q->where(function($w) use ($like){ + $w->where('u.user_primemail','like',$like) + ->orWhere('u.user_submail','like',$like); + }); } if ($request->filled('user_workplace')) { $q->where('u.user_workplace', 'like', '%' . $request->input('user_workplace') . '%'); @@ -80,19 +95,26 @@ class ReservationController extends Controller $q->where('u.user_school', 'like', '%' . $request->input('user_school') . '%'); } - // ソート - $sort = $request->input('sort', 'r.reserve_id'); - $sortType = $request->input('sort_type', 'desc'); - $allowSorts = ['r.reserve_id', 'r.reserve_date', 'r.reserve_start', 'r.reserve_end']; - if (!in_array($sort, $allowSorts)) { - $sort = 'r.reserve_id'; - } - $sortType = ($sortType === 'asc') ? 'asc' : 'desc'; + // ソート(契約者一覧に合わせて許可する列を拡張) + $sort = $request->input('sort', 'reserve_id'); + $sortType = $request->input('sort_type', 'asc'); + $allow = [ + 'reserve_id' => 'r.reserve_id', + 'user_id' => 'r.user_id', + 'user_name' => 'u.user_name', + 'park_id' => 'r.park_id', + 'price_parkplaceid' => 'r.price_parkplaceid', + 'psection_id' => 'r.psection_id', + 'reserve_date' => 'r.reserve_date', + ]; + if (!isset($allow[$sort])) $sort = 'reserve_id'; + $sortType = $sortType === 'desc' ? 'desc' : 'asc'; - $rows = $q->orderBy($sort, $sortType)->paginate(20)->withQueryString(); + $rows = $q->orderBy($allow[$sort], $sortType) + ->paginate(20)->withQueryString(); // 駐輪場リスト取得(必要なら) - $parks = DB::table('park')->select('park_id', 'park_name')->get(); + $parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get(); return view('admin.reservation.list', compact('rows', 'sort', 'sortType', 'parks')); } diff --git a/app/Http/Controllers/Admin/UpdateCandidateController.php b/app/Http/Controllers/Admin/UpdateCandidateController.php index b24ed1d..b1b684b 100644 --- a/app/Http/Controllers/Admin/UpdateCandidateController.php +++ b/app/Http/Controllers/Admin/UpdateCandidateController.php @@ -14,32 +14,26 @@ class UpdateCandidateController extends Controller public function list(Request $request) { $q = DB::table('regular_contract as rc') + ->leftJoin('user as u','rc.user_id','=','u.user_id') + ->leftJoin('park as p','rc.park_id','=','p.park_id') + ->leftJoin('psection as ps','rc.psection_id','=','ps.psection_id') + ->leftJoin('usertype as ut','u.user_categoryid','=','ut.user_categoryid') ->select([ 'rc.contract_id', - 'rc.contract_qr_id', 'rc.user_id', - 'rc.user_categoryid', 'rc.park_id', 'rc.contract_created_at', 'rc.contract_periods', 'rc.contract_periode', 'rc.tag_qr_flag', - 'rc.contract_flag', 'rc.contract_cancel_flag', - 'rc.contract_payment_day', - 'rc.contract_money', - 'rc.billing_amount', 'rc.contract_permission', - 'rc.contract_manual', - 'rc.contract_notice', - 'p.park_name', 'u.user_name', 'u.user_phonetic', 'u.user_mobile', 'u.user_homephone', - 'u.user_primemail', - 'u.user_gender', 'u.user_birthdate', + 'u.user_gender', 'u.user_regident_zip', 'u.user_regident_pre', 'u.user_regident_city', @@ -48,57 +42,116 @@ class UpdateCandidateController extends Controller 'u.user_relate_pre', 'u.user_relate_city', 'u.user_relate_add', - 'u.user_graduate', 'u.user_workplace', 'u.user_school', + 'u.user_graduate', + 'u.user_reduction', 'u.user_remarks', + 'p.park_name', + DB::raw('ps.psection_subject as vehicle_type'), + DB::raw('ut.usertype_subject1 as user_category1'), + DB::raw('ut.usertype_subject2 as user_category2'), + DB::raw('ut.usertype_subject3 as user_category3'), + DB::raw('rc.contract_seal_issue as seal_issue_count'), + DB::raw('rc.user_securitynum as crime_prevention'), + DB::raw("CASE rc.enable_months + WHEN 1 THEN '月極(1ヶ月)' + WHEN 3 THEN '3ヶ月' + WHEN 6 THEN '6ヶ月' + WHEN 12 THEN '年' + ELSE CONCAT(rc.enable_months,'ヶ月') END as ticket_type"), ]) - ->leftJoin('park as p', 'rc.park_id', '=', 'p.park_id') - ->leftJoin('user as u', 'rc.user_id', '=', 'u.user_id') - ->whereNull('rc.update_flag'); // 未更新のみ + ->where('rc.contract_cancel_flag',0) + ->where('rc.contract_permission',1) + // 追加: 本日以降が有効期限のレコードのみ + ->whereDate('rc.contract_periode','>=', now()->toDateString()); - // 対象月による有効期限の絞り込み - if ($request->filled('target_month')) { - $now = now(); - switch ($request->input('target_month')) { - case 'last': - $start = $now->copy()->subMonth()->startOfMonth(); - $end = $now->copy()->subMonth()->endOfMonth(); - break; - case 'this': - $start = $now->copy()->startOfMonth(); - $end = $now->copy()->endOfMonth(); - break; - case 'next': - $start = $now->copy()->addMonth()->startOfMonth(); - $end = $now->copy()->addMonth()->endOfMonth(); - break; - case 'after2': - $start = $now->copy()->addMonths(2)->startOfMonth(); - $end = $now->copy()->addMonths(2)->endOfMonth(); - break; - default: - $start = null; - $end = null; - } - if ($start && $end) { - $q->whereBetween('rc.contract_periode', [$start->toDateString(), $end->toDateString()]); + // 絞り込み + if ($request->filled('park_id')) { + $q->where('rc.park_id', $request->park_id); + } + if ($request->filled('user_id')) { + $q->where('rc.user_id', trim($request->user_id)); + } + // 分類名1 完全一致 + if ($request->filled('user_category1')) { + $val = trim(mb_convert_kana($request->user_category1,'asKV')); + $q->where('ut.usertype_subject1', $val); + } + // タグシリアル64進 部分一致 (SELECT 不要) + if ($request->filled('user_tag_serial_64')) { + $q->where('u.user_tag_serial_64','like','%'.$request->user_tag_serial_64.'%'); + } + // 有効期限:指定日以前 + if ($request->filled('contract_periode')) { + $raw = str_replace('/','-',$request->contract_periode); + try { + $target = \Carbon\Carbon::parse($raw)->format('Y-m-d'); + $q->whereDate('rc.contract_periode','<=',$target); + } catch (\Exception $e) {} + } + if ($request->filled('user_phonetic')) { + $q->where('u.user_phonetic','like','%'.$request->user_phonetic.'%'); + } + if ($request->filled('user_mobile')) { + $like = '%'.$request->user_mobile.'%'; + $q->where(function($w) use ($like){ + $w->where('u.user_mobile','like',$like) + ->orWhere('u.user_homephone','like',$like); + }); + } + if ($request->filled('user_primemail')) { + $like = '%'.$request->user_primemail.'%'; + $q->where(function($w) use ($like){ + $w->where('u.user_primemail','like',$like) + ->orWhere('u.user_submail','like',$like); + }); + } + if ($request->filled('user_workplace')) { + $q->where('u.user_workplace','like','%'.$request->user_workplace.'%'); + } + if ($request->filled('user_school')) { + $q->where('u.user_school','like','%'.$request->user_school.'%'); + } + if ($request->filled('tag_qr_flag') && $request->tag_qr_flag!=='') { + $q->where('rc.tag_qr_flag',$request->tag_qr_flag); + } + + // 対象月 + $target = $request->input('target_month'); + if (in_array($target,['last','this','next','after2'],true)) { + $base = now()->startOfMonth(); + $offset = ['last'=>-1,'this'=>0,'next'=>1,'after2'=>2][$target]; + $m = $base->copy()->addMonths($offset); + if ($target === 'after2') { + // 2か月後「以降」を抽出(該当月の月初以降) + $q->whereDate('rc.contract_periode', '>=', $m->toDateString()); + } else { + $q->whereYear('rc.contract_periode',$m->year) + ->whereMonth('rc.contract_periode',$m->month); } } - $sort = $request->input('sort', 'rc.contract_id'); - $sortType = $request->input('sort_type', 'desc'); - $allowSorts = ['rc.contract_id']; - if (!in_array($sort, $allowSorts)) { - $sort = 'rc.contract_id'; - } - $sortType = ($sortType === 'asc') ? 'asc' : 'desc'; + // ソート(regular_contract の表示順に合わせて contract_id の降順を既定に) + $sort = $request->input('sort','contract_id'); + $sortType = $request->input('sort_type','dac'); + $allow = [ + 'contract_id' => 'rc.contract_id', + 'user_id' => 'rc.user_id', + 'contract_periode' => 'rc.contract_periode', + ]; + if (!isset($allow[$sort])) $sort = 'contract_id'; + $sortType = $sortType==='desc' ? 'desc' : 'asc'; + $q->orderBy($allow[$sort], $sortType); - $rows = $q->orderBy($sort, $sortType)->paginate(20)->withQueryString(); + $rows = $q->paginate(20)->appends($request->query()); - // 駐輪場リスト(プルダウン用) - $parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get(); + $parks = DB::table('park') + ->select('park_id','park_name') + ->orderBy('park_name') + ->get(); - return view('admin.update_candidate.list', compact('rows', 'sort', 'sortType', 'parks')); + return view('admin.update_candidate.list', + compact('rows','parks')); } } diff --git a/resources/views/admin/reservation/list.blade.php b/resources/views/admin/reservation/list.blade.php index e924859..7aee932 100644 --- a/resources/views/admin/reservation/list.blade.php +++ b/resources/views/admin/reservation/list.blade.php @@ -42,7 +42,7 @@ @endforeach @else - + @endisset @@ -50,28 +50,32 @@
- +
- + + {{-- 既存互換: IDパラメータが残る可能性があるため hidden で保持 --}} + @if(request()->filled('user_categoryid')) + + @endif
- +
- +
@@ -81,35 +85,35 @@
- +
- +
- +
- +
- +
@@ -122,13 +126,36 @@ - {{-- 一覧テーブル(そのまま) --}} + {{-- 一覧テーブル(ソート機能付きヘッダー) --}}
- - + {{-- ソート可能な項目にはリンクを追加 --}} + + @@ -149,13 +176,45 @@ - - - - + + + - + @@ -179,20 +238,22 @@ - + + + + - - + @empty - + @endforelse
利用者ID氏名 + + 利用者ID + @if(request('sort') === 'user_id' && request('sort_type') === 'asc') + ↑ + @elseif(request('sort') === 'user_id' && request('sort_type') === 'desc') + ↓ + @else + ↑↓ + @endif + + + + 氏名 + @if(request('sort') === 'user_name' && request('sort_type') === 'asc') + ↑ + @elseif(request('sort') === 'user_name' && request('sort_type') === 'desc') + ↓ + @else + ↑↓ + @endif + + フリガナ 居住所:郵便番号 居住所:都道府県利用者分類1 利用者分類2 利用者分類3駐輪場ID駐輪場名 駐輪場所ID車種区分ID + + 駐輪場ID + @if(request('sort') === 'park_id' && request('sort_type') === 'asc') + ↑ + @elseif(request('sort') === 'park_id' && request('sort_type') === 'desc') + ↓ + @else + ↑↓ + @endif + + + + 駐輪場所ID + @if(request('sort') === 'price_parkplaceid' && request('sort_type') === 'asc') + ↑ + @elseif(request('sort') === 'price_parkplaceid' && request('sort_type') === 'desc') + ↓ + @else + ↑↓ + @endif + + + + 車種区分ID + @if(request('sort') === 'psection_id' && request('sort_type') === 'asc') + ↑ + @elseif(request('sort') === 'psection_id' && request('sort_type') === 'desc') + ↓ + @else + ↑↓ + @endif + + 予約日時 減免措置800M以内フラグ800M以内フラグ
{{ $row->user_school }} {{ $row->user_graduate }} {{ $row->user_remarks }}{{ data_get($row,'reserve_id', data_get($row,'contract_id','')) }}{{ $row->reserve_id }}{{ $row->user_category1 ?? '' }}{{ $row->user_category2 ?? '' }}{{ $row->user_category3 ?? '' }} {{ $row->park_id }}{{ $row->park_name }} {{ $row->price_parkplaceid }} {{ $row->psection_id }} {{ $row->reserve_date }}{{ data_get($row,'reduction', data_get($row,'reserve_reduction','')) }}{{ $row->reduction ?? '' }} @php $f800 = data_get($row,'within_800m_flag', data_get($row,'flag_800m', null)); @endphp - {{ (string)$f800 === '1' ? '800M以内' : '-' }} + {{ (string)$f800 === '1' ? '800M以内' : '-' }}
データがありません。
データがありません。
diff --git a/resources/views/admin/update_candidate/list.blade.php b/resources/views/admin/update_candidate/list.blade.php index 7ee4e5f..ca6bd39 100644 --- a/resources/views/admin/update_candidate/list.blade.php +++ b/resources/views/admin/update_candidate/list.blade.php @@ -57,7 +57,7 @@
- +
@@ -79,8 +79,13 @@
@php - $target_month = request('target_month', 'this'); + // 既定選択なし(送信時だけ適用) + $target_month = request('target_month'); @endphp +
+ + +
@@ -166,17 +171,7 @@ 利用者ID 氏名 フリガナ - - - 定期契約ID - @if(request('sort') === 'contract_id') - @if(request('sort_type') === 'asc') ▲ @else ▼ @endif - @endif - - + 定期契約ID タグ・QR 駐輪場 車種区分