krgm.so-manager-dev.com/app/Http/Controllers/Admin/UpdateCandidateController.php
你的名字 c171a26f42
All checks were successful
Deploy main / deploy (push) Successful in 23s
【予約者一覧】【更新予定者一覧】絞り込みボダン修正
2025-09-26 18:33:13 +09:00

158 lines
6.3 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\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UpdateCandidateController extends Controller
{
/**
* 更新予定者一覧表示
*/
public function list(Request $request)
{
$q = DB::table('regular_contract as rc')
->leftJoin('user as u','rc.user_id','=','u.user_id')
->leftJoin('park as p','rc.park_id','=','p.park_id')
->leftJoin('psection as ps','rc.psection_id','=','ps.psection_id')
->leftJoin('usertype as ut','u.user_categoryid','=','ut.user_categoryid')
->select([
'rc.contract_id',
'rc.user_id',
'rc.park_id',
'rc.contract_created_at',
'rc.contract_periods',
'rc.contract_periode',
'rc.tag_qr_flag',
'rc.contract_cancel_flag',
'rc.contract_permission',
'u.user_name',
'u.user_phonetic',
'u.user_mobile',
'u.user_homephone',
'u.user_birthdate',
'u.user_gender',
'u.user_regident_zip',
'u.user_regident_pre',
'u.user_regident_city',
'u.user_regident_add',
'u.user_relate_zip',
'u.user_relate_pre',
'u.user_relate_city',
'u.user_relate_add',
'u.user_workplace',
'u.user_school',
'u.user_graduate',
'u.user_reduction',
'u.user_remarks',
'p.park_name',
DB::raw('ps.psection_subject as vehicle_type'),
DB::raw('ut.usertype_subject1 as user_category1'),
DB::raw('ut.usertype_subject2 as user_category2'),
DB::raw('ut.usertype_subject3 as user_category3'),
DB::raw('rc.contract_seal_issue as seal_issue_count'),
DB::raw('rc.user_securitynum as crime_prevention'),
DB::raw("CASE rc.enable_months
WHEN 1 THEN '月極(1ヶ月)'
WHEN 3 THEN '3ヶ月'
WHEN 6 THEN '6ヶ月'
WHEN 12 THEN '年'
ELSE CONCAT(rc.enable_months,'ヶ月') END as ticket_type"),
])
->where('rc.contract_cancel_flag',0)
->where('rc.contract_permission',1)
// 追加: 本日以降が有効期限のレコードのみ
->whereDate('rc.contract_periode','>=', now()->toDateString());
// 絞り込み
if ($request->filled('park_id')) {
$q->where('rc.park_id', $request->park_id);
}
if ($request->filled('user_id')) {
$q->where('rc.user_id', trim($request->user_id));
}
// 分類名1 完全一致
if ($request->filled('user_category1')) {
$val = trim(mb_convert_kana($request->user_category1,'asKV'));
$q->where('ut.usertype_subject1', $val);
}
// タグシリアル64進 部分一致 (SELECT 不要)
if ($request->filled('user_tag_serial_64')) {
$q->where('u.user_tag_serial_64','like','%'.$request->user_tag_serial_64.'%');
}
// 有効期限:指定日以前
if ($request->filled('contract_periode')) {
$raw = str_replace('/','-',$request->contract_periode);
try {
$target = \Carbon\Carbon::parse($raw)->format('Y-m-d');
$q->whereDate('rc.contract_periode','<=',$target);
} catch (\Exception $e) {}
}
if ($request->filled('user_phonetic')) {
$q->where('u.user_phonetic','like','%'.$request->user_phonetic.'%');
}
if ($request->filled('user_mobile')) {
$like = '%'.$request->user_mobile.'%';
$q->where(function($w) use ($like){
$w->where('u.user_mobile','like',$like)
->orWhere('u.user_homephone','like',$like);
});
}
if ($request->filled('user_primemail')) {
$like = '%'.$request->user_primemail.'%';
$q->where(function($w) use ($like){
$w->where('u.user_primemail','like',$like)
->orWhere('u.user_submail','like',$like);
});
}
if ($request->filled('user_workplace')) {
$q->where('u.user_workplace','like','%'.$request->user_workplace.'%');
}
if ($request->filled('user_school')) {
$q->where('u.user_school','like','%'.$request->user_school.'%');
}
if ($request->filled('tag_qr_flag') && $request->tag_qr_flag!=='') {
$q->where('rc.tag_qr_flag',$request->tag_qr_flag);
}
// 対象月
$target = $request->input('target_month');
if (in_array($target,['last','this','next','after2'],true)) {
$base = now()->startOfMonth();
$offset = ['last'=>-1,'this'=>0,'next'=>1,'after2'=>2][$target];
$m = $base->copy()->addMonths($offset);
if ($target === 'after2') {
// 2か月後「以降」を抽出該当月の月初以降
$q->whereDate('rc.contract_periode', '>=', $m->toDateString());
} else {
$q->whereYear('rc.contract_periode',$m->year)
->whereMonth('rc.contract_periode',$m->month);
}
}
// ソートregular_contract の表示順に合わせて contract_id の降順を既定に)
$sort = $request->input('sort','contract_id');
$sortType = $request->input('sort_type','dac');
$allow = [
'contract_id' => 'rc.contract_id',
'user_id' => 'rc.user_id',
'contract_periode' => 'rc.contract_periode',
];
if (!isset($allow[$sort])) $sort = 'contract_id';
$sortType = $sortType==='desc' ? 'desc' : 'asc';
$q->orderBy($allow[$sort], $sortType);
$rows = $q->paginate(20)->appends($request->query());
$parks = DB::table('park')
->select('park_id','park_name')
->orderBy('park_name')
->get();
return view('admin.update_candidate.list',
compact('rows','parks'));
}
}