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 @@