122 lines
5.0 KiB
PHP
122 lines
5.0 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\DB;
|
||
|
||
class ReservationController extends Controller
|
||
{
|
||
/**
|
||
* 予約者一覧表示
|
||
*/
|
||
public function list(Request $request)
|
||
{
|
||
$q = DB::table('reserve as r')
|
||
->select([
|
||
'r.user_id',
|
||
'u.user_name',
|
||
'u.user_phonetic',
|
||
'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_birthdate',
|
||
'u.user_gender',
|
||
'u.user_mobile',
|
||
'u.user_homephone',
|
||
'u.user_school',
|
||
'u.user_graduate',
|
||
'u.user_remarks',
|
||
'r.reserve_id',
|
||
'r.park_id',
|
||
'p.park_name',
|
||
'r.price_parkplaceid',
|
||
'r.psection_id',
|
||
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'),
|
||
'r.reserve_date',
|
||
'r.reserve_reduction as reduction',
|
||
DB::raw('r.`800m_flag` as within_800m_flag'),
|
||
])
|
||
->leftJoin('user as u', 'r.user_id', '=', 'u.user_id')
|
||
->leftJoin('park as p', 'r.park_id', '=', 'p.park_id')
|
||
->leftJoin('psection as ps','r.psection_id','=','ps.psection_id')
|
||
->leftJoin('usertype as ut','u.user_categoryid','=','ut.user_categoryid');
|
||
|
||
// フィルター条件
|
||
if ($request->filled('park_id')) {
|
||
$q->where('r.park_id', $request->input('park_id'));
|
||
}
|
||
if ($request->filled('user_id')) {
|
||
$q->where('r.user_id', $request->input('user_id'));
|
||
}
|
||
// 利用者分類(契約者一覧に合わせ、分類名1の完全一致を優先)
|
||
if ($request->filled('user_category1')) {
|
||
$val = trim(mb_convert_kana($request->input('user_category1'), 'asKV'));
|
||
$q->where('ut.usertype_subject1', $val);
|
||
} elseif ($request->filled('user_categoryid')) {
|
||
// 既存互換:ID指定も残す
|
||
$q->where('u.user_categoryid', $request->input('user_categoryid'));
|
||
}
|
||
if ($request->filled('user_tag_serial')) {
|
||
$q->where('u.user_tag_serial', 'like', '%' . $request->input('user_tag_serial') . '%');
|
||
}
|
||
if ($request->filled('user_tag_serial_64')) {
|
||
$q->where('u.user_tag_serial_64', 'like', '%' . $request->input('user_tag_serial_64') . '%');
|
||
}
|
||
if ($request->filled('user_phonetic')) {
|
||
$q->where('u.user_phonetic', 'like', '%' . $request->input('user_phonetic') . '%');
|
||
}
|
||
if ($request->filled('user_mobile')) {
|
||
$q->where(function($sub) use ($request) {
|
||
$sub->where('u.user_mobile', 'like', '%' . $request->input('user_mobile') . '%')
|
||
->orWhere('u.user_homephone', 'like', '%' . $request->input('user_mobile') . '%');
|
||
});
|
||
}
|
||
if ($request->filled('user_primemail')) {
|
||
$like = '%' . $request->input('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->input('user_workplace') . '%');
|
||
}
|
||
if ($request->filled('user_school')) {
|
||
$q->where('u.user_school', 'like', '%' . $request->input('user_school') . '%');
|
||
}
|
||
|
||
// ソート(契約者一覧に合わせて許可する列を拡張)
|
||
$sort = $request->input('sort', 'reserve_id');
|
||
$sortType = $request->input('sort_type', 'asc');
|
||
$allow = [
|
||
'reserve_id' => 'r.reserve_id',
|
||
'user_id' => 'r.user_id',
|
||
'user_name' => 'u.user_name',
|
||
'park_id' => 'r.park_id',
|
||
'price_parkplaceid' => 'r.price_parkplaceid',
|
||
'psection_id' => 'r.psection_id',
|
||
'reserve_date' => 'r.reserve_date',
|
||
];
|
||
if (!isset($allow[$sort])) $sort = 'reserve_id';
|
||
$sortType = $sortType === 'desc' ? 'desc' : 'asc';
|
||
|
||
$rows = $q->orderBy($allow[$sort], $sortType)
|
||
->paginate(20)->withQueryString();
|
||
|
||
// 駐輪場リスト取得(必要なら)
|
||
$parks = DB::table('park')->select('park_id', 'park_name')->orderBy('park_name')->get();
|
||
|
||
return view('admin.reservation.list', compact('rows', 'sort', 'sortType', 'parks'));
|
||
}
|
||
}
|