krgm.so-manager-dev.com/app/Http/Controllers/Admin/PrintAreaController.php
kin.rinzen 9a0f8a8846
All checks were successful
Deploy main / deploy (push) Successful in 22s
「指摘対応」SWA-95/SWA-62/SWA-78
2025-10-10 23:30:56 +09:00

159 lines
4.8 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 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, $id = null)
{
// 一覧画面checkboxで複数削除
$ids = $request->input('pk');
// 編集画面(単体削除)
if ($id) {
$ids = [$id];
}
// 削除対象が空
if (empty($ids)) {
return redirect()
->route('print_areas')
->with('error', '削除対象が選択されていません。');
}
// バリデーション:配列 or 単一でも整数確認
$request->validate([
'pk' => 'nullable',
'pk.*' => 'integer',
]);
try {
// 削除処理
$deleted = PrintArea::destroy($ids);
if ($deleted > 0) {
return redirect()
->route('print_areas')
->with('success', '削除しました。');
} else {
return redirect()
->route('print_areas')
->with('error', '削除に失敗しました。');
}
} catch (\Exception $e) {
\Log::error('印刷範囲削除エラー: ' . $e->getMessage());
return redirect()
->route('print_areas')
->with('error', '削除中にエラーが発生しました。');
}
}
public function export(Request $request)
{
// ファイル名を日本語付きで指定Excelで問題なく開けるようにUTF-8にBOMも付加
$filename = 'シール印刷範囲マスタ' . now()->format('YmdHis') . '.csv';
$data = PrintArea::with('park')->get();
// UTF-8 BOM (Excel用)
$bom = "\xEF\xBB\xBF";
// CSVヘッダー
$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($bom . $csv)
->header('Content-Type', 'text/csv; charset=UTF-8')
// filename* にすれば日本語名も安全に動作
->header('Content-Disposition', "attachment; filename*=UTF-8''" . rawurlencode($filename));
}
// CSVインポート
public function import(Request $request)
{
// 実装未
return redirect()->route('print_areas')->with('success', 'CSVインポート処理未実装');
}
}