krgm.so-manager-dev.com/app/Http/Controllers/Admin/ContractorListController.php
你的名字 c7db94973b
All checks were successful
Deploy main / deploy (push) Successful in 23s
[契約者一覧][未更新者一覧]絞り込み条件修正
2025-09-24 10:27:25 +09:00

163 lines
6.5 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 ContractorListController extends Controller
{
/**
* 未更新者一覧 (contract_renewal IS NULL)
*/
public function list(Request $request)
{
$q = DB::table('regular_contract as rc')
->leftJoin('user as u','rc.user_id','=','u.user_id')
->select([
'rc.contract_id',
'rc.contract_qr_id',
'rc.user_id',
'rc.user_categoryid',
'rc.park_id',
'rc.contract_created_at',
'rc.contract_periods',
'rc.contract_periode',
'rc.tag_qr_flag',
'rc.contract_flag',
'rc.contract_cancel_flag',
'rc.contract_payment_day',
'rc.contract_money',
'rc.billing_amount',
'rc.contract_permission',
'rc.contract_manual',
'rc.contract_notice',
'p.park_name',
'u.user_name',
'u.user_phonetic',
'u.user_mobile',
'u.user_homephone',
'u.user_primemail',
'u.user_gender',
'u.user_birthdate',
'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_graduate',
'u.user_workplace',
'u.user_school',
'u.user_remarks',
'u.user_tag_serial_64',
'u.user_reduction',
DB::raw('rc.user_securitynum as crime_prevention'),
DB::raw('rc.contract_seal_issue as seal_issue_count'),
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"),
DB::raw('ps.psection_subject as vehicle_type'),
// 利用者分類名usertype テーブル)
DB::raw('ut.usertype_subject1 as user_category1'),
DB::raw('ut.usertype_subject2 as user_category2'),
DB::raw('ut.usertype_subject3 as user_category3'),
])
->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');
// ===== 絞り込み条件 =====
// 駐輪場
if ($request->filled('park_id')) {
$q->where('rc.park_id', $request->park_id);
}
// 利用者ID完全一致
if ($request->filled('user_id')) {
$q->where('rc.user_id', $request->user_id);
}
// 分類名1完全一致
if ($request->filled('user_category1')) {
$q->where('ut.usertype_subject1', $request->user_category1);
}
// タグシリアル64進部分一致
if ($request->filled('user_tag_serial_64')) {
$val = $request->user_tag_serial_64;
$q->where('u.user_tag_serial_64','like','%'.$val.'%');
}
// 有効期限(契約有効期間 終了日:指定日以前を抽出)
if ($request->filled('contract_periode')) {
$raw = trim($request->contract_periode);
$norm = str_replace('/', '-', $raw); // スラッシュ入力許容
try {
$target = \Carbon\Carbon::parse($norm)->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')) {
$q->where('u.user_mobile', 'like', '%' . $request->user_mobile . '%');
}
// メール(部分一致)
if ($request->filled('user_primemail')) {
$q->where('u.user_primemail', 'like', '%' . $request->user_primemail . '%');
}
// 勤務先(部分一致)
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 . '%');
}
// タグ・QR完全一致
if ($request->filled('tag_qr_flag') && $request->tag_qr_flag !== '') {
$q->where('rc.tag_qr_flag', $request->tag_qr_flag);
}
// ---- ソート ----
$sort = $request->input('sort',''); // 初期は未指定
$sortType = $request->input('sort_type','asc');
$allowSorts = [
'user_id' => 'rc.user_id',
'user_name' => 'u.user_name',
'contract_id' => 'rc.contract_id',
'tag_qr_flag' => 'rc.tag_qr_flag',
'park_name' => 'p.park_name',
];
if($sort !== '' && isset($allowSorts[$sort])){
$sortType = $sortType === 'desc' ? 'desc' : 'asc';
$q->orderBy($allowSorts[$sort], $sortType)
->orderBy('rc.contract_id','asc'); // セカンダリ安定
} else {
// 初期表示: DB登録順の近似PK昇順
$sort = ''; // Blade 側で未ソート状態
$q->orderBy('rc.contract_id','asc');
}
// 駐輪場選択
$parks = DB::table('park')
->select('park_id','park_name')
->orderBy('park_name')
->orderBy('park_id')
->get();
$rows = $q->paginate(20)->appends($request->query());
return view('admin.contractor_list.list', compact('rows','sort','sortType','parks'));
}
}