From 3337d6abac97dedc39ae9d9e3f9743ec7b11cb97 Mon Sep 17 00:00:00 2001 From: Yuka Higashide Date: Wed, 24 Sep 2025 16:52:21 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=83=9E=E3=82=A4=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/MypageController.php | 100 +++++++++ resources/views/layouts/app.blade.php | 1 - resources/views/mypage/index.blade.php | 255 ++++++++++++++++++++++ routes/web.php | 11 +- 4 files changed, 357 insertions(+), 10 deletions(-) create mode 100644 app/Http/Controllers/MypageController.php create mode 100644 resources/views/mypage/index.blade.php diff --git a/app/Http/Controllers/MypageController.php b/app/Http/Controllers/MypageController.php new file mode 100644 index 0000000..2fb59c6 --- /dev/null +++ b/app/Http/Controllers/MypageController.php @@ -0,0 +1,100 @@ +where('user_id', $user_id)->first(); + + $today = date('Y-m-d'); + // 定期契約情報を取得(park/usertype/psection/ptypeテーブルもJOIN) + $contracts = DB::table('regular_contract') + ->join('park', 'regular_contract.park_id', '=', 'park.park_id') + ->join('usertype', 'regular_contract.user_categoryid', '=', 'usertype.user_categoryid') + ->leftJoin('city', 'park.city_id', '=', 'city.city_id') + ->leftJoin('psection', 'regular_contract.psection_id', '=', 'psection.psection_id') + ->leftJoin('ptype', 'regular_contract.ptype_id', '=', 'ptype.ptype_id') + ->where('regular_contract.user_id', $user_id) + ->where('regular_contract.contract_flag', 1) + ->where('regular_contract.contract_cancel_flag', 0) + ->where(function ($query) use ($today) { + $query->where('regular_contract.contract_periode', '>', $today) + ->orWhere(function ($q) use ($today) { + $q->where('regular_contract.contract_periode', '<=', $today) + ->whereRaw('DATEDIFF(?, regular_contract.contract_periode) <= 5', [$today]); + }); + }) + ->select( + 'regular_contract.contract_id', + 'park.park_name', + 'usertype.usertype_subject1', + 'regular_contract.contract_periods', + 'regular_contract.contract_periode', + 'regular_contract.enable_months', + 'regular_contract.contract_renewal', + 'regular_contract.park_id', + 'city.update_grace_period_start_date', + 'city.update_grace_period_start_time', + 'city.update_grace_period_end_date', + 'city.update_grace_period_end_time', + 'psection.psection_subject', + 'ptype.ptype_subject', + 'regular_contract.pplace_no' + ) + ->get(); + + // シール情報を取得 + $seals = DB::table('regular_contract') + ->join('usertype', 'regular_contract.user_categoryid', '=', 'usertype.user_categoryid') + ->leftJoin('psection', 'regular_contract.psection_id', '=', 'psection.psection_id') + ->leftJoin('ptype', 'regular_contract.ptype_id', '=', 'ptype.ptype_id') + ->where('regular_contract.user_id', $user_id) + ->where('regular_contract.contract_flag', 1) + ->where('regular_contract.contract_cancel_flag', 0) + ->where('regular_contract.contract_periode', '>=', $today) + ->where('regular_contract.contract_permission', 1) + ->select( + 'regular_contract.contract_id', + 'regular_contract.contract_qr_id', + 'usertype.usertype_subject1', + 'regular_contract.contract_periods', + 'regular_contract.contract_periode', + 'regular_contract.enable_months', + 'regular_contract.contract_renewal', + 'regular_contract.park_id', + 'psection.psection_subject', + 'ptype.ptype_subject', + 'regular_contract.pplace_no' + ) + ->get(); + + // お知らせ情報を取得 + $informations= DB::table('user_information_history') + ->where('user_id', $user_id) + ->orderBy('user_information_history_id', 'desc') + ->limit(3) + ->get(); + + \Log::info('マイページにアクセス', [ + 'user_id' => $user_id, + ]); + + return view('mypage.index', [ + 'active_menu' => 'SWO-4-1', // マイページメニューの選択状態用 + 'user_name' => $user->user_name, // ユーザー名(ヘッダー用) + 'contracts' => $contracts, + 'seals' => $seals, + 'informations' => $informations + ]); + } +} diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 7a4c2a0..8d2fd2c 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -12,7 +12,6 @@ - diff --git a/resources/views/mypage/index.blade.php b/resources/views/mypage/index.blade.php new file mode 100644 index 0000000..2269f75 --- /dev/null +++ b/resources/views/mypage/index.blade.php @@ -0,0 +1,255 @@ +@extends('layouts.app') +@section('content') +
+
+
+
+
+
+
定期契約情報
+
+
+
+ @forelse($contracts as $contract) + @php + $now = \Carbon\Carbon::now(); + $update_flag = $contract->contract_renewal; + $start_dd = $contract->update_grace_period_start_date; + $start_hm = $contract->update_grace_period_start_time; + $end_dd = $contract->update_grace_period_end_date; + $end_hm = $contract->update_grace_period_end_time; + $contract_end_dt = $contract->contract_periode ? \Carbon\Carbon::parse($contract->contract_periode) : null; + $periode_month = $contract_end_dt ? $contract_end_dt->month : null; + $periode_year = $contract_end_dt ? $contract_end_dt->year : null; + $bg = 'alert-warning'; + $btn_text = '更新する'; + $btn_active = true; + + // 契約終了月より前は「ご契約中」 + if ($now->lt($contract_end_dt)) { + $bg = 'bg-white'; + $btn_text = 'ご契約中'; + $btn_active = false; + } else { + // 契約終了月より後は猶予期間判定 + if (is_numeric($start_dd) && is_numeric($end_dd)) { + // 開始日 + $start_date = $contract_end_dt->format('Y-m-') . str_pad($start_dd, 2, '0', STR_PAD_LEFT); + $start_time = ($start_hm && preg_match('/^\d{2}:\d{2}$/', $start_hm)) ? $start_hm : '00:00'; + $start_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $start_date . ' ' . $start_time . ':00'); + // 終了日 + if ($start_dd < $end_dd) { + $end_date=$contract_end_dt->format('Y-m-') . str_pad($end_dd, 2, '0', STR_PAD_LEFT); + $end_time = ($end_hm && preg_match('/^\d{2}:\d{2}$/', $end_hm)) ? $end_hm : '23:59'; + $end_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $end_date . ' ' . $end_time . ':00'); + } else { + $next_month_dt = $contract_end_dt->copy()->addMonth(); + $end_date = $next_month_dt->format('Y-m-') . str_pad($end_dd, 2, '0', STR_PAD_LEFT); + $end_time = ($end_hm && preg_match('/^\d{2}:\d{2}$/', $end_hm)) ? $end_hm : '23:59'; + $end_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $end_date . ' ' . $end_time . ':00'); + } + } else { + $start_dt = null; + $end_dt = null; + } + // 猶予期間判定 + if ($update_flag === 0) { + $bg = 'bg-white'; + $btn_text = '手続き中'; + $btn_active = false; + } elseif ($update_flag === 1) { + $bg = 'bg-white'; + $btn_text = '更新済'; + $btn_active = false; + } elseif ($start_dt && $end_dt && $now->between($start_dt, $end_dt)) { + // 猶予期間内 + if ($contract_end_dt && $now->gt($contract_end_dt)) { + $bg = 'alert-danger'; + $btn_text = '更新する'; + $btn_active = true; + } else { + $bg = 'alert-warning'; + $btn_text = '更新する'; + $btn_active = true; + } + } else { + $bg = 'bg-white'; + $btn_text = 'ご契約中'; + $btn_active = false; + } + } + // 契約終了月の場合(既存ロジック) + if (is_numeric($start_dd) && is_numeric($end_dd)) { + // 開始日 + $start_date = $contract_end_dt->format('Y-m-') . str_pad($start_dd, 2, '0', STR_PAD_LEFT); + $start_time = ($start_hm && preg_match('/^\d{2}:\d{2}$/', $start_hm)) ? $start_hm : '00:00'; + $start_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $start_date . ' ' . $start_time . ':00'); + // 終了日 + if ($start_dd < $end_dd) { + $end_date=$contract_end_dt->format('Y-m-') . str_pad($end_dd, 2, '0', STR_PAD_LEFT); + $end_time = ($end_hm && preg_match('/^\d{2}:\d{2}$/', $end_hm)) ? $end_hm : '23:59'; + $end_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $end_date . ' ' . $end_time . ':00'); + } else { + $next_month_dt = $contract_end_dt->copy()->addMonth(); + $end_date = $next_month_dt->format('Y-m-') . str_pad($end_dd, 2, '0', STR_PAD_LEFT); + $end_time = ($end_hm && preg_match('/^\d{2}:\d{2}$/', $end_hm)) ? $end_hm : '23:59'; + $end_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $end_date . ' ' . $end_time . ':00'); + } + } else { + $start_dt = null; + $end_dt = null; + } + // 以降は既存のボタン・背景色判定ロジック + if ($update_flag===0) { + $bg='bg-white'; + $btn_text='手続き中'; + $btn_active=false; + } + elseif ($update_flag===1) { + $bg='bg-white'; + $btn_text='更新済'; + $btn_active=false; + } + elseif (!is_null($end_dt) && $end_dt->gt($start_dt)) { + if ($start_dt && $now->lt($start_dt)) { + $bg = 'bg-white'; + $btn_text = 'ご契約中'; + $btn_active = false; + } else { + // 契約終了日を過ぎていて、更新可能期間内は赤背景 + if ($contract_end_dt && $now->gt($contract_end_dt) && $start_dt && $end_dt && $now->between($start_dt, $end_dt)) { + $bg = 'alert-danger'; + $btn_text = '更新する'; + $btn_active = true; + } else { + $bg = 'alert-warning'; + $btn_text = '更新する'; + $btn_active = true; + } + } + } + elseif ($start_dt && $start_dt->gt($end_dt)) { + if ($now->lt($start_dt)) { + $bg = 'bg-white'; + $btn_text = 'ご契約中'; + $btn_active = false; + } elseif ($now->gte($start_dt) && $now->lte($contract_end_dt->copy()->endOfMonth())) { + $bg = 'alert-warning'; + $btn_text = '更新する'; + $btn_active = true; + } else { + $bg = 'alert-danger'; + $btn_text = '更新する'; + $btn_active = true; + } + } + @endphp +
+
+
{{ $contract->park_name }}
+ + + + + + + + + + + + + + + + + + + + + + + +
{{ $contract->psection_subject ?? '' }}{{ $contract->usertype_subject1 ?? '' }}
{{ $contract->ptype_subject ?? '' }}{{ $contract->pplace_no ?? '' }}
定期契約ID{{ $contract->contract_id }}
期間{{ \Carbon\Carbon::parse($contract->contract_periods)->format('Y-m-d') }}から
{{ $contract->enable_months }}ヶ月
+ @if($btn_active) + + {{ $btn_text }} + + @else + + @endif +
+
+
+ @empty +

定期契約情報はありません
+ 新規定期契約 +

+ @endforelse +
+
+
+
+
+
+
+
シール発行
+
+
+ @forelse($seals as $seal) +
+
+
+ @if(!empty($seal->contract_qr_id)) + {!! QrCode::size(120)->generate($seal->contract_qr_id) !!} + @else +
QRコード
未発行
+ @endif +
+
+
+
+ + + + + + + + + + + + + + + + +
{{ $seal->psection_subject ?? '' }}{{ $seal->usertype_subject1 ?? '' }}
{{ $seal->ptype_subject ?? '' }}{{ $seal->pplace_no ?? '' }}
定期契約ID{{ $seal->contract_id }}
+ {{ $seal->enable_months }}ヶ月 +
+
+
+ @empty +
シール発行対象の契約はありません。
+ @endforelse +
+
+
+
+
{{ $user_name }}さんへのお知らせ + お知らせ一覧を見る +
+
+
    + @foreach($informations as $information) +
  • {{ $information->entry_date }}{{ $information->user_information_history }}
  • + @endforeach +
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index d069fb9..9db15c6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -73,15 +73,8 @@ Route::get('/login', function () { return redirect()->route('swo8_1'); })->name('login'); -// マイページ画面へのリダイレクト -Route::get('/mypage', function () { - return ' -
-

マイページ(仮)

- ユーザー情報を確認する -
- '; -})->name('mypage'); +// マイページ +Route::get('/mypage', [MypageController::class, 'index'])->name('mypage.index'); // ユーザー情報確認・編集 Route::get('/user/info', [UserInfoController::class, 'show'])->name('user.info'); -- 2.47.3 From 814b85cdbbe8842b0e8b3f88bcb9514b90f87c60 Mon Sep 17 00:00:00 2001 From: "y.higashide" Date: Wed, 24 Sep 2025 16:53:22 +0900 Subject: [PATCH 2/2] =?UTF-8?q?public/assets/css/mypage/all.css=20?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/css/mypage/all.css | 61 -------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 public/assets/css/mypage/all.css diff --git a/public/assets/css/mypage/all.css b/public/assets/css/mypage/all.css deleted file mode 100644 index 6439b74..0000000 --- a/public/assets/css/mypage/all.css +++ /dev/null @@ -1,61 +0,0 @@ -/* iCheck plugin skins ------------------------------------ */ -@import url("minimal/_all.css"); -/* -@import url("minimal/minimal.css"); -@import url("minimal/red.css"); -@import url("minimal/green.css"); -@import url("minimal/blue.css"); -@import url("minimal/aero.css"); -@import url("minimal/grey.css"); -@import url("minimal/orange.css"); -@import url("minimal/yellow.css"); -@import url("minimal/pink.css"); -@import url("minimal/purple.css"); -*/ - -@import url("square/_all.css"); -/* -@import url("square/square.css"); -@import url("square/red.css"); -@import url("square/green.css"); -@import url("square/blue.css"); -@import url("square/aero.css"); -@import url("square/grey.css"); -@import url("square/orange.css"); -@import url("square/yellow.css"); -@import url("square/pink.css"); -@import url("square/purple.css"); -*/ - -@import url("flat/_all.css"); -/* -@import url("flat/flat.css"); -@import url("flat/red.css"); -@import url("flat/green.css"); -@import url("flat/blue.css"); -@import url("flat/aero.css"); -@import url("flat/grey.css"); -@import url("flat/orange.css"); -@import url("flat/yellow.css"); -@import url("flat/pink.css"); -@import url("flat/purple.css"); -*/ - -@import url("line/_all.css"); -/* -@import url("line/line.css"); -@import url("line/red.css"); -@import url("line/green.css"); -@import url("line/blue.css"); -@import url("line/aero.css"); -@import url("line/grey.css"); -@import url("line/orange.css"); -@import url("line/yellow.css"); -@import url("line/pink.css"); -@import url("line/purple.css"); -*/ - -@import url("polaris/polaris.css"); - -@import url("futurico/futurico.css"); \ No newline at end of file -- 2.47.3