All checks were successful
Deploy preview (main_higashide) / deploy (push) Successful in 14s
160 lines
6.2 KiB
PHP
160 lines
6.2 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\Auth;
|
||
use App\Models\User;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Mail;
|
||
use App\Mail\WithdrawCompleteMail;
|
||
|
||
class UserWithdrawController extends Controller
|
||
{
|
||
// 退会確認画面表示
|
||
public function showConfirm(Request $request)
|
||
{
|
||
$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('user.withdraw_confirm')
|
||
->with([
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user_name ?: '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
|
||
// 退会処理
|
||
public function withdraw(Request $request)
|
||
{
|
||
$user_id = session('user_id');
|
||
if (!$user_id) {
|
||
return redirect('/login');
|
||
}
|
||
|
||
$user = DB::table('user')->where('user_id', $user_id)->first();
|
||
|
||
$now = now();
|
||
|
||
// 利用者マスタの退会フラグを立てる
|
||
DB::table('user')
|
||
->where('user_id', $user_id)
|
||
->update([
|
||
'user_quit_flag' => 1,
|
||
'user_quitday' => $now->format('Y-m-d'),
|
||
'updated_at' => $now,
|
||
]);
|
||
|
||
// 定期空き予約マスタ(reserve)の予約を無効に更新
|
||
DB::table('reserve')
|
||
->where('user_id', $user_id)
|
||
->update([
|
||
'updated_at' => $now,
|
||
'reserve_cancelday' => $now->format('Y-m-d'),
|
||
'valid_flag' => 0,
|
||
]);
|
||
|
||
// 退会完了メール送信
|
||
try {
|
||
Mail::to($user->user_primemail)->send(
|
||
new WithdrawCompleteMail(
|
||
$user->user_name,
|
||
$user->user_primemail,
|
||
$now->format('Y-m-d')
|
||
)
|
||
);
|
||
} catch (\Exception $e) {
|
||
\Log::error('退会完了メール送信失敗: ' . $e->getMessage());
|
||
}
|
||
|
||
// 退会契約チェック
|
||
$contract = DB::table('regular_contract')
|
||
->where('user_id', $user_id)
|
||
->orderByDesc('contract_id')
|
||
->first();
|
||
|
||
if (!$contract) {
|
||
// 契約なし→退会完了画面
|
||
\Log::info('退会完了画面にアクセス', [
|
||
'user_id' => $user_id,
|
||
]);
|
||
session()->forget('user_id');
|
||
return view('user.withdraw_complete')->with([
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
|
||
// 有効性判定
|
||
if ($contract->contract_cancel_flag == 1 || $contract->contract_cancel_flag == 2) {
|
||
\Log::info('退会完了画面にアクセス', [
|
||
'user_id' => $user_id,
|
||
]);
|
||
session()->forget('user_id');
|
||
return view('user.withdraw_complete')->with([
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
|
||
// 契約期間のyear/month取得
|
||
$contract_year = date('Y', strtotime($contract->contract_periode));
|
||
$contract_month = date('m', strtotime($contract->contract_periode));
|
||
$today_year = $now->year;
|
||
$today_month = $now->month;
|
||
|
||
// 今月までなら退会完了
|
||
if ($contract_year == $today_year && $contract_month == $today_month) {
|
||
\Log::info('退会完了画面にアクセス', [
|
||
'user_id' => $user_id,
|
||
]);
|
||
session()->forget('user_id');
|
||
return view('user.withdraw_complete')->with([
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
|
||
// 翌月以降なら返金処理キュー登録
|
||
if ($contract_year > $today_year || ($contract_year == $today_year && $contract_month > $today_month)) {
|
||
DB::table('operator_que')->insert([
|
||
'que_class' => 13,
|
||
'user_id' => $user_id,
|
||
'contract_id' => $contract->contract_id,
|
||
'park_id' => $contract->park_id,
|
||
'que_comment' => null,
|
||
'que_status' => 1,
|
||
'que_status_comment' => '返金処理が必要な契約があります',
|
||
'work_instructions' => 'お客様にの契約を確認し、退会後の返金処理をおこなってください。',
|
||
'created_at' => $now,
|
||
'updated_at' => $now,
|
||
'operator_id' => null,
|
||
]);
|
||
\Log::info('退会完了画面にアクセス', [
|
||
'user_id' => $user_id,
|
||
]);
|
||
session()->forget('user_id');
|
||
return view('user.withdraw_complete')->with([
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
]);
|
||
}
|
||
// どのifにも該当しない場合は退会完了画面にエラーメッセージを表示
|
||
return view('user.withdraw_confirm')->with([
|
||
\Log::info('退会完了画面にアクセス(エラーにつき退会失敗表示)', [
|
||
'user_id' => $user_id,
|
||
]);
|
||
'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
|
||
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
|
||
'error_message' => '退会処理に失敗しました。申し訳ございませんが、So-Managerコールセンター(03-5856-4720)にご連絡をお願いいたします。',
|
||
]);
|
||
}
|
||
}
|