125 lines
3.9 KiB
PHP
125 lines
3.9 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)
|
||
{
|
||
// バリデーション:'pk'は必須、配列の場合は各要素が整数
|
||
$request->validate([
|
||
'pk' => 'required',
|
||
'pk.*' => 'integer',
|
||
]);
|
||
|
||
// pkを配列化(単一でも配列でも対応)
|
||
$ids = (array)$request->input('pk');
|
||
|
||
// 削除処理
|
||
$deleted = PrintArea::destroy($ids);
|
||
|
||
// 削除結果によってメッセージを分岐
|
||
if ($deleted > 0) {
|
||
return redirect()->route('print_areas')->with('success', '削除しました。');
|
||
} else {
|
||
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インポート処理(未実装)');
|
||
}
|
||
}
|