空き待ち状況確認 > キャンセル
+キャンセルしますか?
+-
+
- キャンセル確定を押されますと確認ページは表示されません。即キャンセルになりますのでご注意ください。 +
- 一度キャンセルされると再度予約しても順番は最後になります。予めご了承ください。 +
- 再度予約を希望の場合は、空き待ち申込からお手続きください。 +
diff --git a/app/Http/Controllers/ParkWaitlistController.php b/app/Http/Controllers/ParkWaitlistController.php
new file mode 100644
index 0000000..51389b9
--- /dev/null
+++ b/app/Http/Controllers/ParkWaitlistController.php
@@ -0,0 +1,184 @@
+where('user_id', $user_id)->first();
+
+ // 空き待ち予約状況データ取得
+ $waitlists = DB::table('reserve')
+ ->where('reserve.user_id', $user_id)
+ ->where('reserve.valid_flag', 1)
+ ->leftJoin('park', 'reserve.park_id', '=', 'park.park_id')
+ ->leftJoin('station', 'park.park_id', '=', 'station.park_id')
+ ->leftJoin('ptype', 'reserve.ptype_id', '=', 'ptype.ptype_id')
+ ->leftJoin('psection', 'reserve.psection_id', '=', 'psection.psection_id')
+ ->select(
+ 'reserve.reserve_id',
+ 'reserve.reserve_date',
+ 'park.park_name',
+ 'station.station_neighbor_station',
+ 'ptype.ptype_subject',
+ 'psection.psection_subject'
+ )
+ ->orderBy('reserve.reserve_date', 'desc')
+ ->get();
+
+ \Log::info('空き待ち状況確認画面にアクセス', [
+ 'user_id' => $user_id,
+ ]);
+
+ return view('park_waitlist.index', [
+ 'active_menu' => 'SWC-11-1', // この画面のID
+ 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
+ 'waitlists' => $waitlists,
+ ]);
+ }
+
+ public function check(Request $request)
+ {
+ $user_id = session('user_id');
+ if (!$user_id) {
+ return redirect('/login');
+ }
+
+ $park_id = $request->input('park_id');
+ $psection_id = $request->input('psection_id');
+ $ptype_id = $request->input('ptype_id');
+
+ $existingReservation = DB::table('reserve')
+ ->where('user_id', $user_id)
+ ->where('park_id', $park_id)
+ ->where('psection_id', $psection_id)
+ ->where('ptype_id', $ptype_id)
+ ->where('valid_flag', 1)
+ ->first();
+
+ if ($existingReservation) {
+ return response()->json(['status' => 'exists']);
+ } else {
+ return response()->json(['status' => 'ok']);
+ }
+ }
+
+ public function create(Request $request)
+ {
+ $user_id = session('user_id');
+ if (!$user_id) {
+ return redirect('/login');
+ }
+ $user = DB::table('user')->where('user_id', $user_id)->first();
+
+ $park_id = $request->input('park_id');
+ $psection_id = $request->input('psection_id');
+ $ptype_id = $request->input('ptype_id');
+
+ // 予約順を決定
+ $reserve_order = DB::table('reserve')
+ ->where('park_id', $park_id)
+ ->where('psection_id', $psection_id)
+ ->where('ptype_id', $ptype_id)
+ ->where('valid_flag', 1)
+ ->count() + 1;
+
+ // 予約情報を追加
+ DB::table('reserve')->insert([
+ 'created_at' => now(),
+ 'updated_at' => now(),
+ 'user_categoryid' => $user->user_categoryid,
+ 'user_id' => $user_id,
+ 'park_id' => $park_id,
+ 'psection_id' => $psection_id,
+ 'reserve_date' => now(),
+ 'valid_flag' => 1,
+ 'ptype_id' => $ptype_id,
+ 'reserve_order' => $reserve_order
+ ]);
+
+ return redirect()->route('park_waitlist.index');
+ }
+
+ public function cancelConfirm($reserve_id)
+ {
+ $user_id = session('user_id');
+ if (!$user_id) {
+ return redirect('/login');
+ }
+ $user_name = DB::table('user')->where('user_id', $user_id)->value('user_name');
+
+ \Log::info('空き待ち状況確認 - キャンセル確認画面にアクセス', [
+ 'user_id' => $user_id,
+ ]);
+
+ return view('park_waitlist.cancel', [
+ 'active_menu' => 'SWC-11-1', // この画面のID
+ 'user_name' => $user_name, // ユーザー名(ヘッダー用)
+ 'reserve_id' => $reserve_id,
+ ]);
+ }
+
+ public function cancel($reserve_id)
+ {
+ $user_id = session('user_id');
+ if (!$user_id) {
+ return redirect('/login');
+ }
+ $user = DB::table('user')->where('user_id', $user_id)->first();
+
+ // 定期予約をキャンセル
+ DB::table('reserve')->where('reserve_id', $reserve_id)->update([
+ 'valid_flag' => 0,
+ 'updated_at' => now(),
+ 'reserve_cancelday' => date('Y-m-d'),
+ ]);
+
+ // メール送信用データ取得
+ $reserve = DB::table('reserve')
+ ->leftJoin('park', 'reserve.park_id', '=', 'park.park_id')
+ ->leftJoin('psection', 'reserve.psection_id', '=', 'psection.psection_id')
+ ->leftJoin('ptype', 'reserve.ptype_id', '=', 'ptype.ptype_id')
+ ->select(
+ 'park.park_name',
+ 'psection.psection_subject',
+ 'ptype.ptype_subject'
+ )
+ ->where('reserve.reserve_id', $reserve_id)
+ ->first();
+
+ // メール送信処理
+ try {
+ Mail::to($user->user_primemail)->send(
+ new ReservationCancelledMail(
+ $user->user_name,
+ $reserve
+ )
+ );
+ } catch (\Exception $e) {
+ Log::error('予約キャンセルメール送信エラー: ' . $e->getMessage());
+ }
+
+ \Log::info('空き待ち状況確認 - キャンセル完了画面にアクセス', [
+ 'user_id' => $user_id,
+ ]);
+
+ return view('park_waitlist.cancel_complete', [
+ 'reserve' => $reserve,
+ 'active_menu' => 'SWC-11-1', // この画面のID
+ 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
+ ]);
+ }
+}
diff --git a/app/Mail/ReservationCancelledMail.php b/app/Mail/ReservationCancelledMail.php
new file mode 100644
index 0000000..79409d7
--- /dev/null
+++ b/app/Mail/ReservationCancelledMail.php
@@ -0,0 +1,31 @@
+user_name = $user_name;
+ $this->reserve = $reserve;
+ }
+
+ public function build()
+ {
+ return $this->subject('So-Manager:空き待ちのキャンセルが完了しました')
+ ->view('emails.reservation_cancelled')
+ ->with([
+ 'user_name' => $this->user_name,
+ 'reserve' => $this->reserve,
+ ]);
+ }
+}
diff --git a/resources/views/emails/reservation_cancelled.blade.php b/resources/views/emails/reservation_cancelled.blade.php
new file mode 100644
index 0000000..87e3cf3
--- /dev/null
+++ b/resources/views/emails/reservation_cancelled.blade.php
@@ -0,0 +1,22 @@
+{!! nl2br(e(
+$user_name . ' 様
+
+So-Manager自動応答システムです。
+
+下記駐輪場の空き待ちのキャンセルを受け付けました。
+
+空き駐輪場: ' . $reserve->park_name . '
+車種区分 : ' . $reserve->psection_subject . '
+駐輪分類 : ' . $reserve->ptype_subject . '
+
+So-Manager.comのユーザー登録は解約されておりません。別の駐輪場でのご契約や空き待ちをご希望の際には、マイページをご活用ください。
+
+
+■お問合せ先■
+So-Managerコールセンター(ソーマネージャーコールセンター)
+●電話:03-5856-4720
+●メールでのお問合せ(専用フォームよりお問合わせください)
+
+※本メールアドレスは送信専用です。ご返信には回答致しかねますのでご了承ください。
+※本メールにお心あたりのない場合には、コールセンターまでご連絡くださいますようお願い致します。'
+)) !!}
\ No newline at end of file
diff --git a/resources/views/park_waitlist/cancel.blade.php b/resources/views/park_waitlist/cancel.blade.php
new file mode 100644
index 0000000..0efb498
--- /dev/null
+++ b/resources/views/park_waitlist/cancel.blade.php
@@ -0,0 +1,29 @@
+@extends('layouts.app')
+@section('content')
+ 上記の空き待ちキャンセルが完了しました。確認のメールを会員情報のメールアドレスに送信しました。空き待ち状況確認 > キャンセル
+ キャンセルしますか?
+
+
+ 空き待ち状況確認 > キャンセル完了
+ 駐輪場名:{{ $reserve->park_name }}
+ 空き待ち状況確認 > 予約状況
+
+
+
+
+
+
+
+ @foreach($waitlists as $row)
+ 予約日
+ 駐輪場名
+ 駅名
+ 駐輪分類
+ 車種区分
+
+
+ @endforeach
+
+ {{ \Carbon\Carbon::parse($row->reserve_date)->format('Y/m/d') }}
+
+ {{ $row->park_name }}
+
+ {{ $row->station_neighbor_station }}
+ {{ $row->ptype_subject }}
+ {{ $row->psection_subject }}
+