退会、契約情報確認修正 #7

Merged
y.higashide merged 3 commits from main_higashide into main 2025-09-03 15:56:04 +09:00
5 changed files with 253 additions and 171 deletions

View File

@ -19,6 +19,10 @@ class ReceiptController extends Controller
} }
$user = DB::table('user')->where('user_id', $user_id)->first(); $user = DB::table('user')->where('user_id', $user_id)->first();
\Log::info('領収書宛名入力画面にアクセス', [
'user_id' => $user_id,
]);
return view('receipt.input', [ return view('receipt.input', [
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
'contract_id' => $contract_id 'contract_id' => $contract_id
@ -43,6 +47,21 @@ class ReceiptController extends Controller
return redirect()->back()->withInput()->withErrors(['contract_id' => 'この契約の領収書は既に発行されています。契約履歴から再発行を行ってください。']); return redirect()->back()->withInput()->withErrors(['contract_id' => 'この契約の領収書は既に発行されています。契約履歴から再発行を行ってください。']);
} }
// 4バイト文字絵文字等チェック
if (preg_match('/[\xF0-\xF7][\x80-\xBF]{3}/', $receipt_name)) {
return redirect()->back()->withInput()->withErrors(['contract_id' => '宛名に絵文字などの特殊文字は使用できません。']);
}
// 文字数チェック
if (mb_strlen($receipt_name) > 30) {
return redirect()->back()->withInput()->withErrors(['contract_id' => '宛名は30文字以内で入力してください。']);
}
// 敬称選択チェック
if (empty($keisho)) {
return redirect()->back()->withInput()->withErrors(['contract_id' => '敬称を選択してください。']);
}
// inv_publishテーブルに新規登録insert // inv_publishテーブルに新規登録insert
$inv_name = $receipt_name . $keisho; $inv_name = $receipt_name . $keisho;
$now = date('Y-m-d H:i:s'); $now = date('Y-m-d H:i:s');
@ -65,8 +84,6 @@ class ReceiptController extends Controller
return $this->download($contract_id, $is_reissue); return $this->download($contract_id, $is_reissue);
} }
public function download($contract_id, $is_reissue = true) public function download($contract_id, $is_reissue = true)
{ {
// 必要なデータを取得 // 必要なデータを取得
@ -106,7 +123,6 @@ class ReceiptController extends Controller
'default_font' => 'noto_sans_jp', 'default_font' => 'noto_sans_jp',
]); ]);
$mpdf->WriteHTML($html); $mpdf->WriteHTML($html);
// PDFダウンロード // PDFダウンロード

View File

@ -52,6 +52,11 @@ class RegularContractController extends Controller
) )
->get(); ->get();
\Log::info('契約情報表示画面にアクセス', [
'user_id' => $user_id,
]);
return view('regular_contract.info', [ return view('regular_contract.info', [
'active_menu' => 'SWC-3-1', // マイページメニューの選択状態用 'active_menu' => 'SWC-3-1', // マイページメニューの選択状態用
'user_name' => $user_name, // ユーザー名(ヘッダー用) 'user_name' => $user_name, // ユーザー名(ヘッダー用)
@ -126,7 +131,6 @@ class RegularContractController extends Controller
]); ]);
} }
/** /**
* 契約区分確認画面の「確認して進む」ボタン押下時の分岐処理 * 契約区分確認画面の「確認して進む」ボタン押下時の分岐処理
* 本人確認書類アップロード画面 or 利用期間選択画面へ遷移 * 本人確認書類アップロード画面 or 利用期間選択画面へ遷移

View File

@ -42,8 +42,6 @@ class UserEditConfirmController extends Controller
]); ]);
} }
// 入力内容確認画面から「変更を確定する」ボタン押下時 // 入力内容確認画面から「変更を確定する」ボタン押下時
public function submit(Request $request) public function submit(Request $request)
{ {
@ -59,6 +57,7 @@ class UserEditConfirmController extends Controller
$token = Str::random(64); $token = Str::random(64);
$changeData = $request->except(['_token']); $changeData = $request->except(['_token']);
$changeData['user_id'] = $user_id; $changeData['user_id'] = $user_id;
$changeData['user_seq'] = $user->user_seq;
// 本人確認書類画像アップロード処理 // 本人確認書類画像アップロード処理
if ($request->hasFile('photo_filename1') && $request->file('photo_filename1')->isValid()) { if ($request->hasFile('photo_filename1') && $request->file('photo_filename1')->isValid()) {
@ -134,7 +133,7 @@ class UserEditConfirmController extends Controller
$updateData['photo_filename2'] = $changeData['photo_filename2']; $updateData['photo_filename2'] = $changeData['photo_filename2'];
} }
if (!empty($changeData['user_pass'])) { if (!empty($changeData['user_pass'])) {
$updateData['user_pass'] = self::customPasswordHash($changeData['user_pass'], $changeData['user_id']); $updateData['user_pass'] = self::customPasswordHash($changeData['user_pass'], $changeData['user_seq']);
} }
DB::table('user') DB::table('user')
->where('user_id', $changeData['user_id']) ->where('user_id', $changeData['user_id'])
@ -160,9 +159,9 @@ class UserEditConfirmController extends Controller
/** /**
* パスワードをSHA256→SALT連結→25回ストレッチでハッシュ化 * パスワードをSHA256→SALT連結→25回ストレッチでハッシュ化
*/ */
private static function customPasswordHash($password, $user_id) private static function customPasswordHash($password, $user_seq)
{ {
$salt = $user_id . 'SOMSALT'; $salt = $user_seq . 'SOMSALT';
$hash = hash('sha256', $password); $hash = hash('sha256', $password);
$hash .= $salt; $hash .= $salt;
for ($i = 0; $i < 25; $i++) { for ($i = 0; $i < 25; $i++) {

View File

@ -20,10 +20,14 @@ class UserWithdrawController extends Controller
} }
$user_name = DB::table('user')->where('user_id', $user_id)->value('user_name'); $user_name = DB::table('user')->where('user_id', $user_id)->value('user_name');
\Log::info('退会確認画面にアクセス', [
'user_id' => $user_id,
]);
return view('user.withdraw_confirm') return view('user.withdraw_confirm')
->with([ ->with([
'active_menu' => 'SWC-1-1', 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user_name ?: '', 'user_name' => $user_name ?: '', // ユーザー名(ヘッダー用)
]); ]);
} }
@ -38,6 +42,8 @@ class UserWithdrawController extends Controller
$user = DB::table('user')->where('user_id', $user_id)->first(); $user = DB::table('user')->where('user_id', $user_id)->first();
$now = now(); $now = now();
// 利用者マスタの退会フラグを立てる
DB::table('user') DB::table('user')
->where('user_id', $user_id) ->where('user_id', $user_id)
->update([ ->update([
@ -46,7 +52,7 @@ class UserWithdrawController extends Controller
'updated_at' => $now, 'updated_at' => $now,
]); ]);
// 定期空き予約マスタ(reserve)の該当ユーザーのupdated_atを退会日時で更新 // 定期空き予約マスタ(reserve)の予約を無効に更新
DB::table('reserve') DB::table('reserve')
->where('user_id', $user_id) ->where('user_id', $user_id)
->update([ ->update([
@ -76,18 +82,24 @@ class UserWithdrawController extends Controller
if (!$contract) { if (!$contract) {
// 契約なし→退会完了画面 // 契約なし→退会完了画面
\Log::info('退会完了画面にアクセス', [
'user_id' => $user_id,
]);
session()->forget('user_id'); session()->forget('user_id');
return view('user.withdraw_complete')->with([ return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]); ]);
} }
// 有効性判定 // 有効性判定
if ($contract->contract_cancel_flag == 1 || $contract->contract_cancel_flag == 2) { if ($contract->contract_cancel_flag == 1 || $contract->contract_cancel_flag == 2) {
\Log::info('退会完了画面にアクセス', [
'user_id' => $user_id,
]);
session()->forget('user_id'); session()->forget('user_id');
return view('user.withdraw_complete')->with([ return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]); ]);
} }
@ -100,9 +112,12 @@ class UserWithdrawController extends Controller
// 今月までなら退会完了 // 今月までなら退会完了
if ($contract_year == $today_year && $contract_month == $today_month) { if ($contract_year == $today_year && $contract_month == $today_month) {
\Log::info('退会完了画面にアクセス', [
'user_id' => $user_id,
]);
session()->forget('user_id'); session()->forget('user_id');
return view('user.withdraw_complete')->with([ return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]); ]);
} }
@ -122,18 +137,23 @@ class UserWithdrawController extends Controller
'updated_at' => $now, 'updated_at' => $now,
'operator_id' => null, 'operator_id' => null,
]); ]);
\Log::info('退会完了画面にアクセス', [
'user_id' => $user_id,
]);
session()->forget('user_id'); session()->forget('user_id');
return view('user.withdraw_complete')->with([ return view('user.withdraw_complete')->with([
'active_menu' => 'SWC-1-1', // この画面のID 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
]); ]);
} }
// どのifにも該当しない場合は退会完了画面にエラーメッセージを表示 // どのifにも該当しない場合は退会完了画面にエラーメッセージを表示
\Log::info('退会完了画面にアクセス(エラーにつき退会失敗表示)', [
'user_id' => $user_id,
]);
return view('user.withdraw_confirm')->with([ return view('user.withdraw_confirm')->with([
'active_menu' => 'SWC-1-1', 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用
'user_name' => $user ? $user->user_name : '', 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用)
'error_message' => '退会処理に失敗しました。申し訳ございませんが、So-Managerコールセンター03-5856-4720にご連絡をお願いいたします。', 'error_message' => '退会処理に失敗しました。申し訳ございませんが、So-Managerコールセンター03-5856-4720にご連絡をお願いいたします。',
]); ]);
} }
} }

View File

@ -39,13 +39,60 @@ return null;
$btn_text = '更新する'; $btn_text = '更新する';
$btn_active = true; $btn_active = true;
// 契約終了月以外は「ご契約中」 // 契約終了月より前は「ご契約中」
if ($periode_month && $periode_year && ($now->month != $periode_month || $now->year != $periode_year)) { if ($now->lt($contract_end_dt)) {
$bg = 'bg-white'; $bg = 'bg-white';
$btn_text = 'ご契約中'; $btn_text = 'ご契約中';
$btn_active = false; $btn_active = false;
} else { } else {
// 猶予期間のCarbon生成 // 契約終了月より後は猶予期間判定
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)) { 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_date = $contract_end_dt->format('Y-m-') . str_pad($start_dd, 2, '0', STR_PAD_LEFT);
@ -53,12 +100,10 @@ return null;
$start_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $start_date . ' ' . $start_time . ':00'); $start_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $start_date . ' ' . $start_time . ':00');
// 終了日 // 終了日
if ($start_dd < $end_dd) { if ($start_dd < $end_dd) {
// 終了月も契約終了月
$end_date=$contract_end_dt->format('Y-m-') . str_pad($end_dd, 2, '0', STR_PAD_LEFT); $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_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'); $end_dt = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $end_date . ' ' . $end_time . ':00');
} else { } else {
// 終了日は契約終了月の翌月
$next_month_dt = $contract_end_dt->copy()->addMonth(); $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_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_time = ($end_hm && preg_match('/^\d{2}:\d{2}$/', $end_hm)) ? $end_hm : '23:59';
@ -112,8 +157,6 @@ return null;
$btn_active = true; $btn_active = true;
} }
} }
}
@endphp
@endphp @endphp
@if($bg == 'bg-white') @if($bg == 'bg-white')
<div class="card border-success"> <div class="card border-success">