All checks were successful
Deploy preview (main_kin) / deploy (push) Successful in 13s
131 lines
3.6 KiB
PHP
131 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Zone;
|
|
|
|
class ZoneController extends Controller
|
|
{
|
|
/**
|
|
* 一覧表示(絞り込み対応)
|
|
*/
|
|
public function list(Request $request)
|
|
{
|
|
if ($request->input('action') === 'reset') {
|
|
return redirect()->route('zones');
|
|
}
|
|
|
|
// ソート設定
|
|
$sort = $request->input('sort', 'zone_id');
|
|
$sort_type = $request->input('sort_type', 'desc');
|
|
|
|
// ベースクエリ
|
|
$query = Zone::query();
|
|
|
|
// === 絞り込み条件 ===
|
|
if ($request->filled('zone_id')) {
|
|
$query->where('zone_id', $request->zone_id);
|
|
}
|
|
if ($request->filled('zone_name')) {
|
|
$query->where('zone_name', 'LIKE', "%{$request->zone_name}%");
|
|
}
|
|
if ($request->filled('park_id')) {
|
|
$query->where('park_id', $request->park_id);
|
|
}
|
|
if ($request->filled('ptype_id')) {
|
|
$query->where('ptype_id', $request->ptype_id);
|
|
}
|
|
if ($request->filled('psection_id')) {
|
|
$query->where('psection_id', $request->psection_id);
|
|
}
|
|
if ($request->has('use_flag') && $request->use_flag !== '') {
|
|
$query->where('use_flag', $request->use_flag);
|
|
}
|
|
|
|
// ページネーション
|
|
$zones = $query->orderBy($sort, $sort_type)->paginate(20);
|
|
|
|
return view('admin.zones.list', compact(
|
|
'zones', 'sort', 'sort_type'
|
|
));
|
|
}
|
|
|
|
/**
|
|
* 新規登録
|
|
*/
|
|
public function add(Request $request)
|
|
{
|
|
if ($request->isMethod('post')) {
|
|
$data = $this->validateZone($request);
|
|
Zone::create($data);
|
|
|
|
return redirect()->route('zones')
|
|
->with('success', 'ゾーンを登録しました');
|
|
}
|
|
|
|
$zone = new Zone();
|
|
return view('admin.zones.add', compact('zone'));
|
|
}
|
|
|
|
/**
|
|
* 編集
|
|
*/
|
|
public function edit($id, Request $request)
|
|
{
|
|
$zone = Zone::findOrFail($id);
|
|
|
|
if ($request->isMethod('post')) {
|
|
$data = $this->validateZone($request);
|
|
$zone->update($data);
|
|
|
|
return redirect()->route('zones')
|
|
->with('success', 'ゾーンを更新しました');
|
|
}
|
|
|
|
return view('admin.zones.edit', compact('zone'));
|
|
}
|
|
|
|
/**
|
|
* 詳細表示
|
|
*/
|
|
public function info($id)
|
|
{
|
|
$zone = Zone::findOrFail($id);
|
|
|
|
return view('admin.zones.info', compact('zone'));
|
|
}
|
|
|
|
/**
|
|
* 削除
|
|
*/
|
|
public function delete(Request $request)
|
|
{
|
|
$id = $request->input('id');
|
|
if ($id) {
|
|
Zone::destroy($id);
|
|
return redirect()->route('zones')->with('success', 'ゾーンを削除しました');
|
|
}
|
|
return redirect()->route('zones')->with('error', '削除対象が指定されていません');
|
|
}
|
|
|
|
/**
|
|
* バリデーション共通化
|
|
*/
|
|
private function validateZone(Request $request)
|
|
{
|
|
return $request->validate([
|
|
'zone_name' => 'required|string|max:50',
|
|
'park_id' => 'required|integer',
|
|
'ptype_id' => 'nullable|integer',
|
|
'psection_id' => 'nullable|integer',
|
|
'zone_number' => 'nullable|integer|min:0',
|
|
'zone_standard' => 'nullable|integer|min:0',
|
|
'zone_tolerance' => 'nullable|integer|min:0',
|
|
'use_flag' => 'nullable|boolean',
|
|
'memo' => 'nullable|string|max:255',
|
|
]);
|
|
}
|
|
}
|