so-manager-dev.com/app/Http/Controllers/UserWithdrawController.php

140 lines
5.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
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)の該当ユーザーのupdated_atを退会日時で更新
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) {
// 契約なし→退会完了画面
session()->forget('user_id');
return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}
// 有効性判定
if ($contract->contract_cancel_flag == 1 || $contract->contract_cancel_flag == 2) {
session()->forget('user_id');
return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID
'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) {
session()->forget('user_id');
return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID
'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,
]);
session()->forget('user_id');
return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]);
}
// どのifにも該当しない場合は退会完了画面にエラーメッセージを表示
return view('user.withdraw_confirm')->with([
'active_menu' => 'SWC-1-1',
'user_name' => $user ? $user->user_name : '',
'error_message' => '退会処理に失敗しました。申し訳ございませんが、So-Managerコールセンター03-5856-4720にご連絡をお願いいたします。',
]);
}
}