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

190 lines
7.1 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 ContractorController extends Controller
{
/**
* 一覧表示GET/POST
*/
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完全一致: ut.usertype_subject1 = 入力値
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'); // null 許容
$sortType = $request->input('sort_type','asc');
$allowSorts = [
'rc.contract_id',
'rc.user_id',
'u.user_name',
'rc.tag_qr_flag',
'p.park_name',
];
if ($sort && in_array($sort, $allowSorts)) {
$sortType = $sortType === 'desc' ? 'desc' : 'asc';
$q->orderBy($sort, $sortType);
} else {
// 初期表示は契約ID昇順 (物理順に近い)
$sort = null;
$sortType = null;
$q->orderBy('rc.contract_id','asc');
}
$rows = $q->paginate(20)->appends($request->query());
// 駐輪場セレクト用
$parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get();
return view('admin.contractor.list', compact('rows', 'sort', 'sortType', 'parks'));
}
/**
* 詳細表示
*/
public function info($id)
{
$contract = DB::table('regular_contract as rc')
->select([
'rc.*',
'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_city',
])
->leftJoin('park as p', 'rc.park_id', '=', 'p.park_id')
->leftJoin('user as u', 'rc.user_id', '=', 'u.user_id')
->where('rc.contract_id', $id)
->first();
if (!$contract) { abort(404); }
return view('admin.contractor.info', compact('contract'));
}
}