114 lines
3.5 KiB
PHP
114 lines
3.5 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Http\Request;
|
||
use App\Models\PrintArea;
|
||
use App\Models\Park;
|
||
use Illuminate\Support\Facades\DB;
|
||
|
||
class PrintAreaController extends Controller
|
||
{
|
||
// 一覧
|
||
public function list(Request $request)
|
||
{
|
||
$sort = $request->input('sort', 'print_area_id');
|
||
$sort_type = $request->input('sort_type', 'asc');
|
||
|
||
$list = PrintArea::orderBy($sort, $sort_type)->paginate(20);
|
||
|
||
return view('admin.print_areas.list', [
|
||
'list' => $list,
|
||
'sort' => $sort,
|
||
'sort_type' => $sort_type,
|
||
]);
|
||
}
|
||
|
||
// 新規登録
|
||
public function add(Request $request)
|
||
{
|
||
if ($request->isMethod('post')) {
|
||
$validated = $request->validate([
|
||
'print_area_name' => 'required|string|max:32',
|
||
'park_id' => 'required|integer',
|
||
]);
|
||
|
||
$validated['operator_id'] = auth()->id(); // 現在のログインユーザーを記録
|
||
PrintArea::create($validated);
|
||
|
||
return redirect()->route('print_areas')->with('success', '登録しました');
|
||
}
|
||
|
||
$parks = Park::pluck('park_name', 'park_id');
|
||
return view('admin.print_areas.add', compact('parks'));
|
||
}
|
||
|
||
// 編集
|
||
public function edit(Request $request, $print_area_id)
|
||
{
|
||
$record = PrintArea::findOrFail($print_area_id);
|
||
|
||
if ($request->isMethod('post')) {
|
||
$validated = $request->validate([
|
||
'print_area_name' => 'required|string|max:32',
|
||
'park_id' => 'required|integer',
|
||
]);
|
||
|
||
$validated['operator_id'] = auth()->id(); // 更新者を記録
|
||
$record->update($validated);
|
||
|
||
return redirect()->route('print_areas')->with('success', '更新しました');
|
||
}
|
||
|
||
$parks = Park::pluck('park_name', 'park_id');
|
||
return view('admin.print_areas.edit', compact('record', 'parks'));
|
||
}
|
||
|
||
// 詳細
|
||
public function info(Request $request, $print_area_id)
|
||
{
|
||
$record = PrintArea::with('park')->findOrFail($print_area_id);
|
||
return view('admin.print_areas.info', compact('record'));
|
||
}
|
||
|
||
// 削除(複数可)
|
||
public function delete(Request $request)
|
||
{
|
||
if ($request->has('pk')) {
|
||
PrintArea::destroy($request->input('pk'));
|
||
return redirect()->route('print_areas')->with('success', '削除しました');
|
||
}
|
||
|
||
return redirect()->route('print_areas')->with('error', '削除対象が見つかりません');
|
||
}
|
||
|
||
// CSVエクスポート
|
||
public function export(Request $request)
|
||
{
|
||
$filename = 'print_areas_' . now()->format('Ymd_His') . '.csv';
|
||
$data = PrintArea::with('park')->get();
|
||
|
||
$csv = implode(",", ['印刷範囲ID', '印刷範囲名', '駐輪場ID', '駐輪場名']) . "\n";
|
||
foreach ($data as $item) {
|
||
$csv .= implode(",", [
|
||
$item->print_area_id,
|
||
$item->print_area_name,
|
||
$item->park_id,
|
||
optional($item->park)->park_name,
|
||
]) . "\n";
|
||
}
|
||
|
||
return response($csv)
|
||
->header('Content-Type', 'text/csv')
|
||
->header('Content-Disposition', "attachment; filename=$filename");
|
||
}
|
||
|
||
// CSVインポート(仮)
|
||
public function import(Request $request)
|
||
{
|
||
// 実装未
|
||
return redirect()->route('print_areas')->with('success', 'CSVインポート処理(未実装)');
|
||
}
|
||
}
|