From 3ec806682db75321203f6604370fdda1f39260d9 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, 14 Oct 2025 09:44:58 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=8C=87=E6=91=98=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/ContractorController.php | 114 ++- .../Admin/ContractorListController.php | 175 +++- .../Admin/ReservationController.php | 247 ++++-- .../views/admin/contractor/list.blade.php | 768 ++++++++++------- .../admin/contractor_list/list.blade.php | 782 +++++++++++------- .../views/admin/reservation/list.blade.php | 668 ++++++++++----- resources/views/layouts/app.blade.php | 14 +- 7 files changed, 1857 insertions(+), 911 deletions(-) diff --git a/app/Http/Controllers/Admin/ContractorController.php b/app/Http/Controllers/Admin/ContractorController.php index 1365137..70b31f3 100644 --- a/app/Http/Controllers/Admin/ContractorController.php +++ b/app/Http/Controllers/Admin/ContractorController.php @@ -13,6 +13,7 @@ class ContractorController extends Controller */ public function list(Request $request) { + // ベースクエリを構築 $q = DB::table('regular_contract as rc') ->leftJoin('user as u','rc.user_id','=','u.user_id') ->select([ @@ -33,10 +34,12 @@ class ContractorController extends Controller 'rc.contract_permission', 'rc.contract_manual', 'rc.contract_notice', + 'rc.update_flag', 'p.park_name', 'u.user_name', 'u.user_phonetic', 'u.user_mobile', + 'u.user_seq', 'u.user_homephone', 'u.user_primemail', 'u.user_gender', @@ -64,7 +67,7 @@ class ContractorController extends Controller WHEN 12 THEN '年' ELSE CONCAT(rc.enable_months, 'ヶ月') END as ticket_type"), DB::raw('ps.psection_subject as vehicle_type'), - // 利用者分類名(usertype テーブル) + // 利用者分類のラベル(usertype テーブルの subject を取得) DB::raw('ut.usertype_subject1 as user_category1'), DB::raw('ut.usertype_subject2 as user_category2'), DB::raw('ut.usertype_subject3 as user_category3'), @@ -74,63 +77,73 @@ class ContractorController extends Controller ->leftJoin('usertype as ut', 'u.user_categoryid', '=', 'ut.user_categoryid'); // ===== 絞り込み条件 ===== - // 駐輪場 + + // 駐輪場で絞る(完全一致) if ($request->filled('park_id')) { $q->where('rc.park_id', $request->park_id); } - // 利用者ID(完全一致) + + // 利用者IDで絞る(完全一致) if ($request->filled('user_id')) { $q->where('rc.user_id', $request->user_id); } - // 分類名1(完全一致): ut.usertype_subject1 = 入力値 + // 利用者分類で絞る(※ select の value を user_categoryid にしているため、user テーブルのカラムで比較) if ($request->filled('user_category1')) { - $q->where('ut.usertype_subject1', $request->user_category1); + $q->where('u.user_categoryid', $request->user_category1); } - // タグシリアル64進(部分一致) + + // タグシリアル64進で部分一致検索 if ($request->filled('user_tag_serial_64')) { $val = $request->user_tag_serial_64; $q->where('u.user_tag_serial_64','like','%'.$val.'%'); } - // 有効期限(契約有効期間 終了日:指定日以前を抽出) + + // 有効期限で絞る(指定日以前を抽出する= <= を使用) if ($request->filled('contract_periode')) { $raw = trim($request->contract_periode); - $norm = str_replace('/', '-', $raw); // スラッシュ入力許容 + $norm = str_replace('/', '-', $raw); // スラッシュ入力を許容 try { $target = \Carbon\Carbon::parse($norm)->format('Y-m-d'); - // 指定日 “以前” を含む (以前のみなら '<' に変更) - $q->whereDate('rc.contract_periode', '>=', $target); + // 指定日「以前」を含める + $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')) { $q->where('u.user_mobile', 'like', '%' . $request->user_mobile . '%'); } - // メール(部分一致) + + // メールアドレスで部分一致 if ($request->filled('user_primemail')) { $q->where('u.user_primemail', 'like', '%' . $request->user_primemail . '%'); } - // 勤務先(部分一致) + + // 勤務先で部分一致 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 . '%'); } - // タグ・QR(完全一致) + + // タグ・QR フラグで絞る(空文字は無視) if ($request->filled('tag_qr_flag') && $request->tag_qr_flag !== '') { $q->where('rc.tag_qr_flag', $request->tag_qr_flag); } - // ソート処理 - // パラメータが来た時だけ適用。未指定なら主キー昇順 + // ===== ソート処理 ===== + // 指定があればその列でソート、なければデフォルトで契約IDの昇順 $sort = $request->input('sort'); // null 許容 $sortType = $request->input('sort_type','asc'); @@ -145,18 +158,23 @@ class ContractorController extends Controller $sortType = $sortType === 'desc' ? 'desc' : 'asc'; $q->orderBy($sort, $sortType); } else { - // 初期表示は契約ID昇順 (物理順に近い) + // デフォルトソート $sort = null; $sortType = null; $q->orderBy('rc.contract_id','asc'); } + // ページネーション(クエリ文字列を引き継ぐ) $rows = $q->paginate(20)->appends($request->query()); - // 駐輪場セレクト用 + // 駐輪場セレクト用データ取得 $parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get(); - return view('admin.contractor.list', compact('rows', 'sort', 'sortType', 'parks')); + // 利用者分類セレクト用:実際に使用されている分類のみを取得する + $categories = $this->buildCategoryOptions(true); + + // ビューに渡す + return view('admin.contractor.list', compact('rows', 'sort', 'sortType', 'parks', 'categories')); } /** @@ -164,6 +182,7 @@ class ContractorController extends Controller */ public function info($id) { + // 指定契約IDの詳細を取得 $contract = DB::table('regular_contract as rc') ->select([ 'rc.*', @@ -186,4 +205,55 @@ class ContractorController extends Controller return view('admin.contractor.info', compact('contract')); } + + /** + * 利用者分類選択肢を取得 + * + * @param bool $onlyUsed true の場合は regular_contract に出現する分類のみ返す + * @return array [user_categoryid => label, ...] + */ + private function buildCategoryOptions(bool $onlyUsed = false): array + { + if (! $onlyUsed) { + // 全件取得(既存の挙動) + return DB::table('usertype') + ->orderBy('user_categoryid', 'asc') + ->get() + ->mapWithKeys(function ($row) { + $label = collect([ + $row->usertype_subject1 ?? '', + $row->usertype_subject2 ?? '', + $row->usertype_subject3 ?? '', + ])->filter(fn ($v) => $v !== '')->implode('/'); + + return [$row->user_categoryid => $label !== '' ? $label : (string) $row->user_categoryid]; + }) + ->toArray(); + } + + // 実際に使用されている分類のみ取得する(内部結合で user と regular_contract と紐付くもの) + $rows = DB::table('usertype as ut') + ->join('user as u', 'u.user_categoryid', '=', 'ut.user_categoryid') + ->join('regular_contract as rc', 'rc.user_id', '=', 'u.user_id') + ->select( + 'ut.user_categoryid', + 'ut.usertype_subject1', + 'ut.usertype_subject2', + 'ut.usertype_subject3' + ) + ->groupBy('ut.user_categoryid', 'ut.usertype_subject1', 'ut.usertype_subject2', 'ut.usertype_subject3') + ->orderBy('ut.user_categoryid', 'asc') + ->get(); + + // ラベルを組み立てて配列で返す + return $rows->mapWithKeys(function ($row) { + $label = collect([ + $row->usertype_subject1 ?? '', + $row->usertype_subject2 ?? '', + $row->usertype_subject3 ?? '', + ])->filter(fn ($v) => $v !== '')->implode('/'); + + return [$row->user_categoryid => $label !== '' ? $label : (string) $row->user_categoryid]; + })->toArray(); + } } diff --git a/app/Http/Controllers/Admin/ContractorListController.php b/app/Http/Controllers/Admin/ContractorListController.php index ae1ae7c..a787564 100644 --- a/app/Http/Controllers/Admin/ContractorListController.php +++ b/app/Http/Controllers/Admin/ContractorListController.php @@ -9,10 +9,11 @@ use Illuminate\Support\Facades\DB; class ContractorListController extends Controller { /** - * 未更新者一覧 (contract_renewal IS NULL) + * 一覧表示(GET/POST) */ public function list(Request $request) { + // ベースクエリを構築 $q = DB::table('regular_contract as rc') ->leftJoin('user as u','rc.user_id','=','u.user_id') ->select([ @@ -33,10 +34,14 @@ class ContractorListController extends Controller 'rc.contract_permission', 'rc.contract_manual', 'rc.contract_notice', + 'rc.update_flag', + 'rc.user_securitynum', + 'rc.contract_seal_issue', 'p.park_name', 'u.user_name', 'u.user_phonetic', 'u.user_mobile', + 'u.user_seq', 'u.user_homephone', 'u.user_primemail', 'u.user_gender', @@ -64,7 +69,7 @@ class ContractorListController extends Controller WHEN 12 THEN '年' ELSE CONCAT(rc.enable_months, 'ヶ月') END as ticket_type"), DB::raw('ps.psection_subject as vehicle_type'), - // 利用者分類名(usertype テーブル) + // 利用者分類のラベル(usertype テーブルの subject を取得) DB::raw('ut.usertype_subject1 as user_category1'), DB::raw('ut.usertype_subject2 as user_category2'), DB::raw('ut.usertype_subject3 as user_category3'), @@ -74,89 +79,183 @@ class ContractorListController extends Controller ->leftJoin('usertype as ut', 'u.user_categoryid', '=', 'ut.user_categoryid'); // ===== 絞り込み条件 ===== - // 駐輪場 + + // 駐輪場で絞る(完全一致) if ($request->filled('park_id')) { $q->where('rc.park_id', $request->park_id); } - // 利用者ID(完全一致) + + // 利用者IDで絞る(完全一致) if ($request->filled('user_id')) { $q->where('rc.user_id', $request->user_id); } - // 分類名1(完全一致) + + // 利用者分類で絞る(※ select の value を user_categoryid にしているため、user テーブルのカラムで比較) if ($request->filled('user_category1')) { - $q->where('ut.usertype_subject1', $request->user_category1); + $q->where('u.user_categoryid', $request->user_category1); } - // タグシリアル64進(部分一致) + + // タグシリアル64進で部分一致検索 if ($request->filled('user_tag_serial_64')) { $val = $request->user_tag_serial_64; $q->where('u.user_tag_serial_64','like','%'.$val.'%'); } - // 有効期限(契約有効期間 終了日:指定日以前を抽出) + + // 有効期限で絞る(指定日以前を抽出する= <= を使用) if ($request->filled('contract_periode')) { $raw = trim($request->contract_periode); - $norm = str_replace('/', '-', $raw); // スラッシュ入力許容 + $norm = str_replace('/', '-', $raw); // スラッシュ入力を許容 try { $target = \Carbon\Carbon::parse($norm)->format('Y-m-d'); - // 指定日 “以前” を含む (以前のみなら '<' に変更) - $q->whereDate('rc.contract_periode', '>=', $target); + // 指定日「以前」を含める + $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')) { $q->where('u.user_mobile', 'like', '%' . $request->user_mobile . '%'); } - // メール(部分一致) + + // メールアドレスで部分一致 if ($request->filled('user_primemail')) { $q->where('u.user_primemail', 'like', '%' . $request->user_primemail . '%'); } - // 勤務先(部分一致) + + // 勤務先で部分一致 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 . '%'); } - // タグ・QR(完全一致) + + // タグ・QR フラグで絞る(空文字は無視) if ($request->filled('tag_qr_flag') && $request->tag_qr_flag !== '') { $q->where('rc.tag_qr_flag', $request->tag_qr_flag); } - // ---- ソート ---- - $sort = $request->input('sort',''); // 初期は未指定 + // ===== ソート処理 ===== + // 指定があればその列でソート、なければデフォルトで契約IDの昇順 + $sort = $request->input('sort'); // null 許容 $sortType = $request->input('sort_type','asc'); + $allowSorts = [ - 'user_id' => 'rc.user_id', - 'user_name' => 'u.user_name', - 'contract_id' => 'rc.contract_id', - 'tag_qr_flag' => 'rc.tag_qr_flag', - 'park_name' => 'p.park_name', + 'rc.contract_id', + 'rc.user_id', + 'u.user_name', + 'rc.tag_qr_flag', + 'p.park_name', ]; - if($sort !== '' && isset($allowSorts[$sort])){ + if ($sort && in_array($sort, $allowSorts)) { $sortType = $sortType === 'desc' ? 'desc' : 'asc'; - $q->orderBy($allowSorts[$sort], $sortType) - ->orderBy('rc.contract_id','asc'); // セカンダリ安定 + $q->orderBy($sort, $sortType); } else { - // 初期表示: DB登録順の近似(PK昇順) - $sort = ''; // Blade 側で未ソート状態 + // デフォルトソート + $sort = null; + $sortType = null; $q->orderBy('rc.contract_id','asc'); } - // 駐輪場選択 - $parks = DB::table('park') - ->select('park_id','park_name') - ->orderBy('park_name') - ->orderBy('park_id') - ->get(); - + // ページネーション(クエリ文字列を引き継ぐ) $rows = $q->paginate(20)->appends($request->query()); - return view('admin.contractor_list.list', compact('rows','sort','sortType','parks')); + // 駐輪場セレクト用データ取得 + $parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get(); + + // 利用者分類セレクト用:実際に使用されている分類のみを取得する + $categories = $this->buildCategoryOptions(true); + + // ビューに渡す + return view('admin.contractor_List.list', compact('rows', 'sort', 'sortType', 'parks', 'categories')); + } + + /** + * 詳細表示 + */ + public function info($id) + { + // 指定契約IDの詳細を取得 + $contract = DB::table('regular_contract as rc') + ->select([ + 'rc.*', + '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_regident_city', + ]) + ->leftJoin('park as p', 'rc.park_id', '=', 'p.park_id') + ->leftJoin('user as u', 'rc.user_id', '=', 'u.user_id') + ->where('rc.contract_id', $id) + ->first(); + + if (!$contract) { abort(404); } + + return view('admin.contractor_List.info', compact('contract')); + } + + /** + * 利用者分類選択肢を取得 + * + * @param bool $onlyUsed true の場合は regular_contract に出現する分類のみ返す + * @return array [user_categoryid => label, ...] + */ + private function buildCategoryOptions(bool $onlyUsed = false): array + { + if (! $onlyUsed) { + // 全件取得(既存の挙動) + return DB::table('usertype') + ->orderBy('user_categoryid', 'asc') + ->get() + ->mapWithKeys(function ($row) { + $label = collect([ + $row->usertype_subject1 ?? '', + $row->usertype_subject2 ?? '', + $row->usertype_subject3 ?? '', + ])->filter(fn ($v) => $v !== '')->implode('/'); + + return [$row->user_categoryid => $label !== '' ? $label : (string) $row->user_categoryid]; + }) + ->toArray(); + } + + // 実際に使用されている分類のみ取得する(内部結合で user と regular_contract と紐付くもの) + $rows = DB::table('usertype as ut') + ->join('user as u', 'u.user_categoryid', '=', 'ut.user_categoryid') + ->join('regular_contract as rc', 'rc.user_id', '=', 'u.user_id') + ->select( + 'ut.user_categoryid', + 'ut.usertype_subject1', + 'ut.usertype_subject2', + 'ut.usertype_subject3' + ) + ->groupBy('ut.user_categoryid', 'ut.usertype_subject1', 'ut.usertype_subject2', 'ut.usertype_subject3') + ->orderBy('ut.user_categoryid', 'asc') + ->get(); + + // ラベルを組み立てて配列で返す + return $rows->mapWithKeys(function ($row) { + $label = collect([ + $row->usertype_subject1 ?? '', + $row->usertype_subject2 ?? '', + $row->usertype_subject3 ?? '', + ])->filter(fn ($v) => $v !== '')->implode('/'); + + return [$row->user_categoryid => $label !== '' ? $label : (string) $row->user_categoryid]; + })->toArray(); } } diff --git a/app/Http/Controllers/Admin/ReservationController.php b/app/Http/Controllers/Admin/ReservationController.php index d5a3e18..d906293 100644 --- a/app/Http/Controllers/Admin/ReservationController.php +++ b/app/Http/Controllers/Admin/ReservationController.php @@ -9,15 +9,45 @@ use Illuminate\Support\Facades\DB; class ReservationController extends Controller { /** - * 予約者一覧表示 + * 一覧表示(GET/POST) */ public function list(Request $request) { - $q = DB::table('reserve as r') + // ベースクエリを構築 + $q = DB::table('regular_contract as rc') + ->leftJoin('user as u','rc.user_id','=','u.user_id') ->select([ - 'r.user_id', + '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', + 'rc.update_flag', + 'rc.800m_flag', + 'rc.price_parkplaceid', + 'rc.psection_id', + 'rc.reserve_date', + 'p.park_name', 'u.user_name', 'u.user_phonetic', + 'u.user_mobile', + 'u.user_seq', + 'u.user_homephone', + 'u.user_primemail', + 'u.user_gender', + 'u.user_birthdate', 'u.user_regident_zip', 'u.user_regident_pre', 'u.user_regident_city', @@ -26,96 +56,195 @@ class ReservationController extends Controller 'u.user_relate_pre', 'u.user_relate_city', 'u.user_relate_add', - 'u.user_birthdate', - 'u.user_gender', - 'u.user_mobile', - 'u.user_homephone', - 'u.user_school', 'u.user_graduate', + 'u.user_workplace', + 'u.user_school', 'u.user_remarks', - 'r.reserve_id', - 'r.park_id', - 'p.park_name', - 'r.price_parkplaceid', - 'r.psection_id', + 'u.user_tag_serial_64', + 'u.user_reduction', + DB::raw('rc.user_securitynum as crime_prevention'), + DB::raw('rc.contract_seal_issue as seal_issue_count'), + 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"), DB::raw('ps.psection_subject as vehicle_type'), + // 利用者分類のラベル(usertype テーブルの subject を取得) 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', - 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('psection as ps','r.psection_id','=','ps.psection_id') - ->leftJoin('usertype as ut','u.user_categoryid','=','ut.user_categoryid'); + ->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'); - // フィルター条件 + // ===== 絞り込み条件 ===== + + // 駐輪場で絞る(完全一致) if ($request->filled('park_id')) { - $q->where('r.park_id', $request->input('park_id')); + $q->where('rc.park_id', $request->park_id); } + + // 利用者IDで絞る(完全一致) if ($request->filled('user_id')) { - $q->where('r.user_id', $request->input('user_id')); + $q->where('rc.user_id', $request->user_id); } - // 利用者分類(契約者一覧に合わせ、分類名1の完全一致を優先) + + // 利用者分類で絞る(※ select の value を user_categoryid にしているため、user テーブルのカラムで比較) 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')); + $q->where('u.user_categoryid', $request->user_category1); } + + // タグシリアルで部分一致検索 if ($request->filled('user_tag_serial')) { $q->where('u.user_tag_serial', 'like', '%' . $request->input('user_tag_serial') . '%'); } + + // タグシリアル64進で部分一致検索 if ($request->filled('user_tag_serial_64')) { - $q->where('u.user_tag_serial_64', 'like', '%' . $request->input('user_tag_serial_64') . '%'); + $val = $request->user_tag_serial_64; + $q->where('u.user_tag_serial_64','like','%'.$val.'%'); } + + // フリガナで部分一致 if ($request->filled('user_phonetic')) { - $q->where('u.user_phonetic', 'like', '%' . $request->input('user_phonetic') . '%'); + $q->where('u.user_phonetic', 'like', '%' . $request->user_phonetic . '%'); } + + // 携帯電話で部分一致 if ($request->filled('user_mobile')) { - $q->where(function($sub) use ($request) { - $sub->where('u.user_mobile', 'like', '%' . $request->input('user_mobile') . '%') - ->orWhere('u.user_homephone', 'like', '%' . $request->input('user_mobile') . '%'); - }); + $q->where('u.user_mobile', 'like', '%' . $request->user_mobile . '%'); } + + // メールアドレスで部分一致 if ($request->filled('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); - }); + $q->where('u.user_primemail', 'like', '%' . $request->user_primemail . '%'); } + + // 勤務先で部分一致 if ($request->filled('user_workplace')) { - $q->where('u.user_workplace', 'like', '%' . $request->input('user_workplace') . '%'); + $q->where('u.user_workplace', 'like', '%' . $request->user_workplace . '%'); } + + // 学校で部分一致 if ($request->filled('user_school')) { - $q->where('u.user_school', 'like', '%' . $request->input('user_school') . '%'); + $q->where('u.user_school', 'like', '%' . $request->user_school . '%'); } - // ソート(契約者一覧に合わせて許可する列を拡張) - $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', + // ===== ソート処理 ===== + // 指定があればその列でソート、なければデフォルトで契約IDの昇順 + $sort = $request->input('sort'); // null 許容 + $sortType = $request->input('sort_type','asc'); + + $allowSorts = [ + 'rc.contract_id', + 'rc.user_id', + 'u.user_name', + 'rc.tag_qr_flag', + 'p.park_name', ]; - if (!isset($allow[$sort])) $sort = 'reserve_id'; - $sortType = $sortType === 'desc' ? 'desc' : 'asc'; + if ($sort && in_array($sort, $allowSorts)) { + $sortType = $sortType === 'desc' ? 'desc' : 'asc'; + $q->orderBy($sort, $sortType); + } else { + // デフォルトソート + $sort = null; + $sortType = null; + $q->orderBy('rc.contract_id','asc'); + } - $rows = $q->orderBy($allow[$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(); - return view('admin.reservation.list', compact('rows', 'sort', 'sortType', 'parks')); + // 利用者分類セレクト用:実際に使用されている分類のみを取得する + $categories = $this->buildCategoryOptions(true); + + // ビューに渡す + return view('admin.reservation.list', compact('rows', 'sort', 'sortType', 'parks', 'categories')); + } + + /** + * 詳細表示 + */ + public function info($id) + { + // 指定契約IDの詳細を取得 + $contract = DB::table('regular_contract as rc') + ->select([ + 'rc.*', + '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_regident_city', + ]) + ->leftJoin('park as p', 'rc.park_id', '=', 'p.park_id') + ->leftJoin('user as u', 'rc.user_id', '=', 'u.user_id') + ->where('rc.contract_id', $id) + ->first(); + + if (!$contract) { abort(404); } + + return view('admin.reservation.info', compact('contract')); + } + + /** + * 利用者分類選択肢を取得 + * + * @param bool $onlyUsed true の場合は regular_contract に出現する分類のみ返す + * @return array [user_categoryid => label, ...] + */ + private function buildCategoryOptions(bool $onlyUsed = false): array + { + if (! $onlyUsed) { + // 全件取得(既存の挙動) + return DB::table('usertype') + ->orderBy('user_categoryid', 'asc') + ->get() + ->mapWithKeys(function ($row) { + $label = collect([ + $row->usertype_subject1 ?? '', + $row->usertype_subject2 ?? '', + $row->usertype_subject3 ?? '', + ])->filter(fn ($v) => $v !== '')->implode('/'); + + return [$row->user_categoryid => $label !== '' ? $label : (string) $row->user_categoryid]; + }) + ->toArray(); + } + + // 実際に使用されている分類のみ取得する(内部結合で user と regular_contract と紐付くもの) + $rows = DB::table('usertype as ut') + ->join('user as u', 'u.user_categoryid', '=', 'ut.user_categoryid') + ->join('regular_contract as rc', 'rc.user_id', '=', 'u.user_id') + ->select( + 'ut.user_categoryid', + 'ut.usertype_subject1', + 'ut.usertype_subject2', + 'ut.usertype_subject3' + ) + ->groupBy('ut.user_categoryid', 'ut.usertype_subject1', 'ut.usertype_subject2', 'ut.usertype_subject3') + ->orderBy('ut.user_categoryid', 'asc') + ->get(); + + // ラベルを組み立てて配列で返す + return $rows->mapWithKeys(function ($row) { + $label = collect([ + $row->usertype_subject1 ?? '', + $row->usertype_subject2 ?? '', + $row->usertype_subject3 ?? '', + ])->filter(fn ($v) => $v !== '')->implode('/'); + + return [$row->user_categoryid => $label !== '' ? $label : (string) $row->user_categoryid]; + })->toArray(); } } diff --git a/resources/views/admin/contractor/list.blade.php b/resources/views/admin/contractor/list.blade.php index d50052d..08bd0fd 100644 --- a/resources/views/admin/contractor/list.blade.php +++ b/resources/views/admin/contractor/list.blade.php @@ -20,294 +20,362 @@
-
- {{-- 絞り込みフィルター --}} -
- - -
-
絞り込みフィルター
-
- {{-- 左カラム --}} -
-
- -
- @isset($parks) - - @else - - @endisset -
-
+ + + -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
-
- - {{-- 右カラム --}} -
-
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
-
+ {{-- ▼ カード全体 --}} +
+
+ {{-- ▼ 絞り込みフィルター(card-header) --}} +
+ 絞り込みフィルター
-
- - 解除 + {{-- ▼ フィルター条件エリア(card-body) --}} +
+
+ {{-- 左カラム --}} +
+
+ +
+ @isset($parks) + + @else + + @endisset +
+
+ +
+ +
+ +
+
+ + {{-- ===== 利用者分類:input を select に変更 ===== --}} +
+ +
+ @isset($categories) + + @else + + @endisset +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + {{-- 右カラム --}} +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+
+ + {{-- ▼ 絞り込みボタン --}} +
+ + 解除 +
+
+
+ {{-- ページネーションのラッパーを追加 --}} +
+ {{-- ページネーションのビジュアルラッパー --}} +
+
- - {{-- 一覧テーブル --}} -
- - - - @php($activeSort = request('sort')) - @php($activeType = request('sort_type')) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @forelse ($rows as $row) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @empty - - - - @endforelse - -
- 利用者ID - - 氏名 - フリガナ - 定期契約ID - - タグ・QR - - 駐輪場 - 車種区分減免措置利用者分類1利用者分類2利用者分類3携帯電話番号自宅電話番号生年月日性別居住所:郵便番号居住所:都道府県居住所:市区群居住所:住所関連住所:郵便番号関連住所:都道府県関連住所:市区群関連住所:住所契約日利用期間有効期間定期券区分勤務先名学校卒業予定シール発行回数防犯登録備考
{{ $row->user_id }}{{ $row->user_name }}{{ $row->user_phonetic }}{{ $row->contract_id }}{{ $row->tag_qr_flag ? 'QR' : 'タグ' }}{{ $row->park_name }}{{ $row->vehicle_type ?? '' }}{{ $row->user_reduction ?? '' }}{{ $row->user_category1 ?? '' }}{{ $row->user_category2 ?? '' }}{{ $row->user_category3 ?? '' }}{{ $row->user_mobile }}{{ $row->user_homephone }}{{ $row->user_birthdate }}{{ $row->user_gender }}{{ $row->user_regident_zip }}{{ $row->user_regident_pre }}{{ $row->user_regident_city }}{{ $row->user_regident_add }}{{ $row->user_relate_zip }}{{ $row->user_relate_pre }}{{ $row->user_relate_city }}{{ $row->user_relate_add }}{{ $row->contract_created_at }}{{ $row->contract_periods }}{{ $row->contract_periode }}{{ $row->ticket_type ?? '' }}{{ $row->user_workplace }}{{ $row->user_school }}{{ $row->user_graduate }}{{ $row->seal_issue_count ?? '' }}{{ $row->crime_prevention ?? '' }}{{ $row->user_remarks }}
データがありません。
+ {{-- ▼ 一覧テーブル部:スクロール対応 --}} +
+
+ + + + @php($activeSort = request('sort')) + @php($activeType = request('sort_type')) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @forelse ($rows as $row) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @empty + + + + @endforelse + +
+ + 利用者ID + + + + + 氏名 + + + フリガナ + + 定期契約ID + + + + + タグ・QR + + + + + 駐輪場 + + + 車種区分減免措置利用者分類1利用者分類2利用者分類3携帯電話番号自宅電話番号生年月日性別居住所:郵便番号居住所:都道府県居住所:市区群居住所:住所契約日利用期間有効期間定期券区分勤務先名学校備考
+ + {{ $row->user_id }} + + {{ $row->user_name }}{{ $row->user_phonetic }} + + {{ $row->contract_id }} + + {{ $row->tag_qr_flag ? 'QR' : 'タグ' }}{{ $row->park_name }}{{ $row->vehicle_type ?? '' }}{{ $row->user_reduction ?? '' }}{{ $row->user_category1 ?? '' }}{{ $row->user_category2 ?? '' }}{{ $row->user_category3 ?? '' }}{{ $row->user_mobile }}{{ $row->user_homephone }}{{ $row->user_birthdate }}{{ $row->user_gender }}{{ $row->user_regident_zip }}{{ $row->user_regident_pre }}{{ $row->user_regident_city }}{{ $row->user_regident_add }} + {{-- 契約日を「yyyymmdd」形式で表示する --}} + {{ $row->contract_created_at + ? \Illuminate\Support\Carbon::parse($row->contract_created_at)->format('Ymd') + : '' }} + + contract_periode)) { + $today = \Illuminate\Support\Carbon::now()->startOfDay(); + $end = \Illuminate\Support\Carbon::parse($row->contract_periode)->startOfDay(); + + if ($end->lte($today)) { + $months = $end->diffInMonths($today); + if ($months <= 1) { + $label = '直近1ヶ月'; + } elseif ($months <= 3) { + $label = '直近3ヶ月'; + } elseif ($months <= 6) { + $label = '直近6ヶ月'; + } + } + } + } catch (\Throwable $e) { + $label = ''; + } + ?> + {{ $label }} + + {{ \Carbon\Carbon::parse($row->contract_periods)->format('Y-m-d') }} + ~ + {{ \Carbon\Carbon::parse($row->contract_periode)->format('Y-m-d') }} + + @if($row->update_flag == 1) + 継続 + @elseif($row->update_flag == 2) + それ + @else + {{-- それ以外は空白 --}} + @endif + {{ $row->user_workplace }}{{ $row->user_school }}{{ $row->user_remarks }}
データがありません。
+
+
+ -
- {{ $rows->appends(request()->except('page'))->links('pagination::bootstrap-4') }} -
-
-{{-- 画面用スタイル(表頭をグレー、データ部分を白) --}} - @push('scripts') + + + @endpush -@endsection \ No newline at end of file +@endsection diff --git a/resources/views/admin/contractor_list/list.blade.php b/resources/views/admin/contractor_list/list.blade.php index e2001d3..d2719ff 100644 --- a/resources/views/admin/contractor_list/list.blade.php +++ b/resources/views/admin/contractor_list/list.blade.php @@ -20,296 +20,374 @@
-
- {{-- 絞り込みフィルター --}} -
- - -
-
絞り込みフィルター
-
- {{-- 左カラム --}} -
-
- -
- @isset($parks) - - @else - - @endisset -
-
+ + + -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
-
- - {{-- 右カラム --}} -
-
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
-
+ {{-- ▼ カード全体 --}} +
+
+ {{-- ▼ 絞り込みフィルター(card-header) --}} +
+ 絞り込みフィルター
-
- - 解除 + {{-- ▼ フィルター条件エリア(card-body) --}} +
+
+ {{-- 左カラム --}} +
+
+ +
+ @isset($parks) + + @else + + @endisset +
+
+ +
+ +
+ +
+
+ + {{-- ===== 利用者分類:input を select に変更 ===== --}} +
+ +
+ @isset($categories) + + @else + + @endisset +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + {{-- 右カラム --}} +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+
+ + {{-- ▼ 絞り込みボタン --}} +
+ + 解除 +
+
+
+ {{-- ページネーションのラッパーを追加 --}} +
+ {{-- ページネーションのビジュアルラッパー --}} +
+
- - {{-- 一覧テーブル --}} -
- - - - @php($activeSort = request('sort')) - @php($activeType = request('sort_type')) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @forelse ($rows as $row) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @empty - - - - @endforelse - -
- 利用者ID - - 氏名 - フリガナ - 定期契約ID - - タグ・QR - - 駐輪場 - 車種区分減免措置利用者分類1利用者分類2利用者分類3携帯電話番号自宅電話番号生年月日性別居住所:郵便番号居住所:都道府県居住所:市区群居住所:住所関連住所:郵便番号関連住所:都道府県関連住所:市区群関連住所:住所契約日利用期間有効期間定期券区分勤務先名学校卒業予定シール発行回数防犯登録備考
{{ $row->user_id }}{{ $row->user_name }}{{ $row->user_phonetic }}{{ $row->contract_id }}{{ $row->tag_qr_flag ? 'QR' : 'タグ' }}{{ $row->park_name }}{{ $row->vehicle_type ?? '' }}{{ $row->user_reduction ?? '' }}{{ $row->user_category1 ?? '' }}{{ $row->user_category2 ?? '' }}{{ $row->user_category3 ?? '' }}{{ $row->user_mobile }}{{ $row->user_homephone }}{{ $row->user_birthdate }}{{ $row->user_gender }}{{ $row->user_regident_zip }}{{ $row->user_regident_pre }}{{ $row->user_regident_city }}{{ $row->user_regident_add }}{{ $row->user_relate_zip }}{{ $row->user_relate_pre }}{{ $row->user_relate_city }}{{ $row->user_relate_add }}{{ $row->contract_created_at }}{{ $row->contract_periods }}{{ $row->contract_periode }}{{ $row->ticket_type ?? '' }}{{ $row->user_workplace }}{{ $row->user_school }}{{ $row->user_graduate }}{{ $row->seal_issue_count ?? '' }}{{ $row->crime_prevention ?? '' }}{{ $row->user_remarks }}
データがありません。
-
+ {{-- ▼ 一覧テーブル部:スクロール対応 --}} +
+
+ + + + @php($activeSort = request('sort')) + @php($activeType = request('sort_type')) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @forelse ($rows as $row) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
- {{ $rows->appends(request()->except('page'))->links('pagination::bootstrap-4') }} +
+ + + + + + @empty + + + + @endforelse + +
+ + 利用者ID + + + + + 氏名 + + + フリガナ + + 定期契約ID + + + + + タグ・QR + + + + + 駐輪場 + + + 車種区分有効期間減免措置利用者分類1利用者分類2利用者分類3携帯電話番号自宅電話番号生年月日性別居住所:郵便番号居住所:都道府県居住所:市区群居住所:住所関連住所:郵便番号関連住所:都道府県関連住所:市区群関連住所:住所契約日利用期間定期券区分学校卒業予定シール発行回数防犯登録備考
+ + {{ $row->user_id }} + + {{ $row->user_name }}{{ $row->user_phonetic }} + + {{ $row->contract_id }} + + {{ $row->tag_qr_flag ? 'QR' : 'タグ' }}{{ $row->park_name }}{{ $row->vehicle_type ?? '' }} + {{ \Carbon\Carbon::parse($row->contract_periods)->format('Y-m-d') }} + ~ + {{ \Carbon\Carbon::parse($row->contract_periode)->format('Y-m-d') }} + {{ $row->user_reduction ?? '' }}{{ $row->user_category1 ?? '' }}{{ $row->user_category2 ?? '' }}{{ $row->user_category3 ?? '' }}{{ $row->user_mobile }}{{ $row->user_homephone }}{{ $row->user_birthdate }}{{ $row->user_gender }}{{ $row->user_regident_zip }}{{ $row->user_regident_pre }}{{ $row->user_regident_city }}{{ $row->user_regident_add }}{{ $row->user_relate_zip }}{{ $row->user_relate_pre }}{{ $row->user_relate_city }}{{ $row->user_relate_add }} + {{-- 契約日を「yyyymmdd」形式で表示する --}} + {{ $row->contract_created_at + ? \Illuminate\Support\Carbon::parse($row->contract_created_at)->format('Ymd') + : '' }} + + contract_periode)) { + $today = \Illuminate\Support\Carbon::now()->startOfDay(); + $end = \Illuminate\Support\Carbon::parse($row->contract_periode)->startOfDay(); + + if ($end->lte($today)) { + $months = $end->diffInMonths($today); + if ($months <= 1) { + $label = '直近1ヶ月'; + } elseif ($months <= 3) { + $label = '直近3ヶ月'; + } elseif ($months <= 6) { + $label = '直近6ヶ月'; + } + } + } + } catch (\Throwable $e) { + $label = ''; + } + ?> + {{ $label }} + + @if($row->update_flag == 1) + 継続 + @elseif($row->update_flag == 2) + それ + @else + {{-- それ以外は空白 --}} + @endif + {{ $row->user_school }}{{ $row->user_graduate }}{{ $row->contract_seal_issue }}{{ $row->user_securitynum }}{{ $row->user_remarks }}
データがありません。
+
+
-
+ +
-{{-- 画面用スタイル(表頭をグレー、データ部分を白) --}} - @push('scripts') + + + @endpush -@endsection \ No newline at end of file +@endsection diff --git a/resources/views/admin/reservation/list.blade.php b/resources/views/admin/reservation/list.blade.php index 7aee932..fc88b8b 100644 --- a/resources/views/admin/reservation/list.blade.php +++ b/resources/views/admin/reservation/list.blade.php @@ -6,10 +6,10 @@
-
+

予約者一覧

-
+
-
- {{-- 絞り込みフィルター(順序を画像に完全一致) --}} -
-
-
絞り込みフィルター
-
- {{-- 左カラム:駐輪場 → 利用者ID → 利用者分類 → タグシリアル → タグシリアル64進 --}} -
-
- -
- @isset($parks) - - @else - - @endisset + + + + + {{-- ▼ カード全体 --}} +
+
+ {{-- ▼ 絞り込みフィルター(card-header) --}} +
+ 絞り込みフィルター +
+ + {{-- ▼ フィルター条件エリア(card-body) --}} +
+
+ {{-- 左カラム --}} +
+
+ +
+ @isset($parks) + + @else + + @endisset +
+
+ +
+ +
+ +
+
+ + {{-- 利用者分類 --}} +
+ +
+ @isset($categories) + + @else + + @endisset +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
-
- -
- + {{-- 右カラム --}} +
+
+ +
+ +
-
-
- -
- - {{-- 既存互換: IDパラメータが残る可能性があるため hidden で保持 --}} - @if(request()->filled('user_categoryid')) - - @endif +
+ +
+ +
-
-
- -
- +
+ +
+ +
-
-
- -
- +
+ +
+ +
-
-
- {{-- 右カラム:フリガナ → 電話番号 → メールアドレス → 勤務先 → 学校 --}} -
-
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- +
+ +
+ +
-
- - 解除 + {{-- ▼ 絞り込みボタン --}} +
+ + 解除
- +
+ {{-- ページネーションのラッパーを追加 --}} +
+ {{-- ページネーションのビジュアルラッパー --}} +
+ +
+
- {{-- 一覧テーブル(ソート機能付きヘッダー) --}} -
- - - - {{-- ソート可能な項目にはリンクを追加 --}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @forelse ($rows as $row) + {{-- ▼ 一覧テーブル部:スクロール対応 --}} +
+
+
- - 利用者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 - - フリガナ居住所:郵便番号居住所:都道府県居住所:市区群居住所:住所関連住所:郵便番号関連住所:都道府県関連住所:市区群関連住所:住所生年月日性別携帯電話番号自宅電話番号学校卒業予定備考定期予約ID利用者分類1利用者分類2利用者分類3 - - 駐輪場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以内フラグ
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @empty - - @endforelse - -
{{ $row->user_id }}{{ $row->user_name }}{{ $row->user_phonetic }}{{ $row->user_regident_zip }}{{ $row->user_regident_pre }}{{ $row->user_regident_city }}{{ $row->user_regident_add }}{{ $row->user_relate_zip }}{{ $row->user_relate_pre }}{{ $row->user_relate_city }}{{ $row->user_relate_add }}{{ $row->user_birthdate }}{{ $row->user_gender }}{{ $row->user_mobile }}{{ $row->user_homephone }}{{ $row->user_school }}{{ $row->user_graduate }}{{ $row->user_remarks }}{{ $row->reserve_id }}{{ $row->user_category1 ?? '' }}{{ $row->user_category2 ?? '' }}{{ $row->user_category3 ?? '' }}{{ $row->park_id }}{{ $row->price_parkplaceid }}{{ $row->psection_id }}{{ $row->reserve_date }}{{ $row->reduction ?? '' }} - @php $f800 = data_get($row,'within_800m_flag', data_get($row,'flag_800m', null)); @endphp - {{ (string)$f800 === '1' ? '800M以内' : '-' }} -
データがありません。
-
+ @php($activeSort = request('sort')) + @php($activeType = request('sort_type')) + + + 利用者ID + + + -
- {{ $rows->appends(request()->except('page'))->links('pagination::bootstrap-4') }} + + + 氏名 + + + + + フリガナ + 居住所:郵便番号 + 居住所:都道府県 + 居住所:市区群 + 居住所:住所 + 関連住所:郵便番号 + 関連住所:都道府県 + 関連住所:市区群 + 関連住所:住所 + 生年月日 + 性別 + 携帯電話番号 + 自宅電話番号 + 学校 + 卒業予定 + 備考 + + + 定期予約ID + + + + 利用者分類1 + 利用者分類2 + 利用者分類3 + + + 駐輪場 + + + + 駐輪場所ID + 車種区分ID + 予約日時 + 減免措置 + 800M以内フラグ + + + + @forelse ($rows as $row) + + + + {{ $row->user_id }} + + + {{ $row->user_name }} + {{ $row->user_phonetic }} + {{ $row->user_regident_zip }} + {{ $row->user_regident_pre }} + {{ $row->user_regident_city }} + {{ $row->user_regident_add }} + {{ $row->user_relate_zip }} + {{ $row->user_relate_pre }} + {{ $row->user_relate_city }} + {{ $row->user_relate_add }} + {{ $row->user_birthdate }} + {{ $row->user_gender }} + {{ $row->user_mobile }} + {{ $row->user_homephone }} + {{ $row->user_school }} + {{ $row->user_graduate }} + {{ $row->user_remarks }} + + + {{ $row->contract_id }} + + + {{ $row->user_category1 ?? '' }} + {{ $row->user_category2 ?? '' }} + {{ $row->user_category3 ?? '' }} + {{ $row->park_id }} + {{ $row->price_parkplaceid }} + {{ [1 => '自転車', 2 => '原付', 3 => 'その他'][$row->psection_id] ?? '' }} + {{ $row->reserve_date }} + {{ $row->user_reduction ?? '' }} + {{ $row->{'800m_flag'} ?? '' }} + + @empty + + データがありません。 + + @endforelse + + +
-
+
+ +
- -@endsection +@push('scripts') + + + + +@endpush +@endsection \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index b84e228..ae6de51 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -51,11 +51,11 @@ - + @@ -226,7 +226,7 @@ class="nav-link @if(in_array(app('router')->currentRouteName(), $webRoutes)) active @endif">

タグ・シール管理 - +