From b74d8fd4a85fddb42e175729a9f10416196a47fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?= <你的邮箱> Date: Thu, 9 Oct 2025 18:04:27 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=A7=90=E8=BC=AA=E5=A0=B4=E3=83=9E?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=80=91=E7=94=BB=E9=9D=A2=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/ParkController.php | 196 +++++++++--------- resources/views/admin/parks/_form.blade.php | 24 +-- resources/views/admin/parks/add.blade.php | 85 +++++--- resources/views/admin/parks/edit.blade.php | 134 ++++++------ resources/views/admin/parks/list.blade.php | 64 ++++-- 5 files changed, 273 insertions(+), 230 deletions(-) diff --git a/app/Http/Controllers/Admin/ParkController.php b/app/Http/Controllers/Admin/ParkController.php index f1a4fca..a21405e 100644 --- a/app/Http/Controllers/Admin/ParkController.php +++ b/app/Http/Controllers/Admin/ParkController.php @@ -11,39 +11,30 @@ use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; use Response; +use Symfony\Component\HttpFoundation\StreamedResponse; class ParkController extends Controller { - public function list(Request $request) - { - $query = \DB::table('park as p') - ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') - ->select([ - 'p.park_id', - 'c.city_name', - 'p.park_name', - 'p.park_ruby', - 'p.park_syllabary', - 'p.park_adrs', - 'p.park_close_flag', - 'p.park_day', - 'p.alert_flag', - 'p.print_number', - 'p.keep_alive', - 'p.operator_id', - ]); +public function list(Request $request) +{ + $query = \DB::table('park as p') + ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') + ->select([ + 'p.*', + 'c.city_name', + ]); - if ($request->filled('park_name')) { - $query->where('p.park_name', 'like', '%' . $request->input('park_name') . '%'); - } - if ($request->filled('city_id')) { - $query->where('p.city_id', $request->input('city_id')); - } - if ($request->filled('sort')) { - $query->orderBy($request->input('sort'), $request->input('sort_type', 'asc')); - } else { - $query->orderBy('p.park_id', 'asc'); - } + if ($request->filled('park_name')) { + $query->where('p.park_name', 'like', '%' . $request->input('park_name') . '%'); + } + if ($request->filled('city_id')) { + $query->where('p.city_id', $request->input('city_id')); + } + if ($request->filled('sort')) { + $query->orderBy($request->input('sort'), $request->input('sort_type', 'asc')); + } else { + $query->orderBy('p.park_id', 'asc'); + } $parks = $query->paginate(20); $cities = \DB::table('city')->orderBy('city_id')->get(); @@ -51,7 +42,7 @@ class ParkController extends Controller $sort = $request->input('sort', 'p.park_id'); $sort_type = $request->input('sort_type', 'asc'); return view('admin.parks.list', compact('parks', 'cities', 'sort', 'sort_type')); - } +} public function add(Request $request) { @@ -68,6 +59,7 @@ class ParkController extends Controller // 保存処理 $park = new \App\Models\Park(); $park->fill($validated); + $park->operator_id = auth()->user()->ope_id ?? 1; $park->save(); return redirect()->route('parks')->with('success', '新規登録に完了しました。'); @@ -137,83 +129,81 @@ class ParkController extends Controller return $data; } - public function export(Request $request) - { - $headers = array( - "Content-type" => "text/csv;charset=UTF-8", - 'Content-Encoding: UTF-8', - "Content-Disposition" => "attachment; filename=file.csv", - "Pragma" => "no-cache", - "Cache-Control" => "must-revalidate, post-check=0, pre-check=0", - "Expires" => "0" - ); - $inputs = [ - 'isMethodPost' => 0, - 'isExport' => 1, - 'sort' => $request->input('sort', ''), - 'sort_type' => $request->input('sort_type', ''), - ]; +public function export(Request $request) +{ + $columns = [ + '駐輪場ID', '市区', '駐輪場名', '駐輪場ふりがな', '駐輪場五十音', '住所', + '閉設フラグ', '閉設日', '残警告チェックフラグ', '印字数', '最新キープアライブ', + '更新オペレータID', '更新期間開始日', '更新期間開始時', '更新期間終了日', '更新期間終了時', + '駐輪開始期間', 'リマインダー種別', 'リマインダー時間', '契約後即利用許可', + '項目表示設定:性別', '項目表示設定:生年月日', '項目表示設定:防犯登録番号', + '二点間距離', '駐車場座標(緯度)', '駐車場座標(経度)', '電話番号', + '駐輪場契約形態(定期)', '駐輪場契約形態(一時利用)', '車種制限', '手続方法', '支払方法', + '利用可能時間制限フラグ', '利用可能時間(開始)', '利用可能時間(終了)', + '常駐管理人フラグ', '常駐時間(開始)', '常駐時間(終了)', + '屋根フラグ', 'シール発行機フラグ', '駐輪場利用方法', '定期更新期間', + '空き待ち予約', '特記事項', '学生証確認種別', + '減免案内表示フラグ', '減免対象年齢', '減免案内表示開始月数', '年跨ぎ' + ]; - $dataExport = \DB::table('park as p') - ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') - ->select([ - 'p.park_id', - 'c.city_name', - 'p.park_name', - 'p.park_ruby', - 'p.park_syllabary', - 'p.park_adrs', - 'p.park_close_flag', - 'p.park_day', - 'p.alert_flag', - 'p.print_number', - 'p.keep_alive', - ]) - ->orderBy('p.park_id', 'asc') - ->get(); - $columns = array( - __('駐輪場ID '),// 0 - __('市区ID'),// 1 - __('市区'),// 2 - __('駐輪場名'),// 3 - __('駐輪場ふりがな'),// 4 - __('駐輪場五十音'),// 5 - __('住所'),// 6 - __('閉設フラグ'),// 7 - __('閉設フラグ'),// 8 - __('閉設日'),// 9 - __('残警告チェックフラグ'),// 10 - __('印字数'),// 11 - __('最新キープアライブ')// 12 - ); - $filename = "駐輪場マスタ.csv"; - $file = fopen($filename, 'w+'); - fputcsv($file, $columns); - foreach ($dataExport as $items) { - fputcsv( - $file, - array( - $items->park_id,// 0 - null, // city_id(selectで取得していないので空欄) - $items->city_name ?? '',// 2 - $items->park_name, // 3 - $items->park_ruby, // 4 - $items->park_syllabary, // 5 - $items->park_adrs, // 6 - $items->park_close_flag,// 7 - ($items->park_close_flag == 1 ? '閉設' : '開設'),// 8 - $items->park_day,// 9 - $items->alert_flag,// 10 - $items->print_number,// 11 - $items->keep_alive// 12 - ) - ); + $dataExport = DB::table('park as p') + ->select([ + 'p.park_id', 'p.city_id', 'p.park_name', 'p.park_ruby', 'p.park_syllabary', 'p.park_adrs', + 'p.park_close_flag', 'p.park_day', 'p.alert_flag', 'p.print_number', 'p.keep_alive', + 'p.operator_id', 'p.update_grace_period_start_date', 'p.update_grace_period_start_time', + 'p.update_grace_period_end_date', 'p.update_grace_period_end_time', + 'p.parking_start_grace_period', 'p.reminder_type', 'p.reminder_time', 'p.immediate_use_permit', + 'p.gender_display_flag', 'p.bd_display_flag', 'p.securityreg_display_flag', + 'p.distance_twopoints', 'p.park_latitude', 'p.park_longitude', 'p.park_tel', + 'p.park_fixed_contract', 'p.park_temporary_contract', 'p.park_restriction', + 'p.park_procedure', 'p.park_payment', + 'p.park_available_time_flag', 'p.park_available_time_from', 'p.park_available_time_to', + 'p.park_manager_flag', 'p.park_manager_resident_from', 'p.park_manager_resident_to', + 'p.park_roof_flag', 'p.park_issuing_machine_flag', 'p.park_using_method', + 'p.park_contract_renewal_term', 'p.park_reservation', 'p.park_reference', + 'p.student_id_confirm_type', 'p.reduction_guide_display_flag', 'p.reduction_age', + 'p.reduction_guide_display_start_month', 'p.overyear_flag' + ]) + ->orderBy('p.park_id', 'asc') + ->get(); + + $response = new StreamedResponse(function () use ($dataExport, $columns) { + $stream = fopen('php://output', 'w'); + // Excel兼容 BOM + fwrite($stream, chr(0xEF) . chr(0xBB) . chr(0xBF)); + fputcsv($stream, $columns); + + foreach ($dataExport as $item) { + fputcsv($stream, [ + $item->park_id, $item->city_id, $item->park_name, $item->park_ruby, $item->park_syllabary, $item->park_adrs, + $item->park_close_flag, $item->park_day, $item->alert_flag, $item->print_number, $item->keep_alive, + $item->operator_id, $item->update_grace_period_start_date, $item->update_grace_period_start_time, + $item->update_grace_period_end_date, $item->update_grace_period_end_time, + $item->parking_start_grace_period, $item->reminder_type, $item->reminder_time, $item->immediate_use_permit, + $item->gender_display_flag, $item->bd_display_flag, $item->securityreg_display_flag, + $item->distance_twopoints, $item->park_latitude, $item->park_longitude, $item->park_tel, + $item->park_fixed_contract, $item->park_temporary_contract, $item->park_restriction, + $item->park_procedure, $item->park_payment, + $item->park_available_time_flag, $item->park_available_time_from, $item->park_available_time_to, + $item->park_manager_flag, $item->park_manager_resident_from, $item->park_manager_resident_to, + $item->park_roof_flag, $item->park_issuing_machine_flag, $item->park_using_method, + $item->park_contract_renewal_term, $item->park_reservation, $item->park_reference, + $item->student_id_confirm_type, $item->reduction_guide_display_flag, $item->reduction_age, + $item->reduction_guide_display_start_month, $item->overyear_flag + ]); } - fclose($file); - return Response::download($filename, $filename, $headers); - } + + fclose($stream); + }); + + $response->headers->set('Content-Type', 'text/csv; charset=UTF-8'); + $response->headers->set('Content-Disposition', 'attachment; filename="駐輪場マスタ.csv"'); + $response->headers->set('Cache-Control', 'no-store, no-cache'); + + return $response; +} public function import(Request $request) { diff --git a/resources/views/admin/parks/_form.blade.php b/resources/views/admin/parks/_form.blade.php index 1a6c3db..cd4d236 100644 --- a/resources/views/admin/parks/_form.blade.php +++ b/resources/views/admin/parks/_form.blade.php @@ -5,14 +5,6 @@ $p = $park ?? null; @endphp - -