krgm.so-manager-dev.com/app/Http/Controllers/Admin/PplaceController.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

189 lines
5.7 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\Pplace;
use App\Models\Ope;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Response;
class PplaceController extends Controller
{
public function list(Request $request)
{
$inputs = [
'isExport' => 0,
'sort' => $request->input('sort', ''),
'sort_type' => $request->input('sort_type', ''),
'page' => $request->get('page', 1),
];
$inputs['list'] = Pplace::search($inputs);
if ($inputs['list']->total() > 0 && $inputs['page'] > $inputs['list']->lastPage()) {
return redirect()->route('pplaces');
}
return view('admin.pplace.list', $inputs);
}
public function add(Request $request)
{
$inputs = [
'pplace_number' => $request->input('pplace_number'),
'pplace_remarks' => $request->input('pplace_remarks'),
'operator_id' => $request->input('operator_id'),
];
$inputs['operators'] = Ope::getList(); //
if ($request->isMethod('POST')) {
$validator = Validator::make($inputs, [
'pplace_number' => 'required|string|max:255',
'pplace_remarks' => 'nullable|string|max:255',
'operator_id' => 'nullable|integer',
]);
if (!$validator->fails()) {
DB::transaction(function () use ($inputs) {
$pplace = new Pplace();
$pplace->fill($inputs);
$pplace->save();
});
return redirect()->route('pplaces')->with('success', '登録しました。');
} else {
$inputs['errorMsg'] = $this->__buildErrorMessasges($validator);
}
}
return view('admin.pplace.add', $inputs);
}
public function edit(Request $request, $id, $view = '')
{
$record = Pplace::find($id);
if (!$record) abort(404);
$data = $record->toArray();
$data['operators'] = Ope::getList();
if ($request->isMethod('POST')) {
$inputs = $request->all();
$validator = Validator::make($inputs, [
'pplace_number' => 'required|string|max:255',
'pplace_remarks' => 'nullable|string|max:255',
'operator_id' => 'nullable|integer',
]);
$data = array_merge($data, $inputs);
if (!$validator->fails()) {
DB::transaction(function () use ($record, $inputs) {
$record->fill($inputs);
$record->save();
});
return redirect()->route('pplaces')->with('success', '更新成功');
} else {
$data['errorMsg'] = $this->__buildErrorMessasges($validator);
}
}
return view($view ?: 'admin.pplace.edit', $data);
}
public function info(Request $request, $id)
{
return $this->edit($request, $id, 'admin.pplace.info');
}
public function delete(Request $request)
{
$arr_pk = $request->get('pk');
if ($arr_pk) {
$ids = is_array($arr_pk) ? $arr_pk : [$arr_pk];
if (Pplace::deleteByPk($ids)) {
return redirect()->route('pplaces')->with('success', __("削除成功しました。"));
} else {
return redirect()->route('pplaces')->with('error', __('削除に失敗しました。'));
}
}
return redirect()->route('pplaces')->with('error', __('削除するデータを選択してください。'));
}
public function export()
{
$filename = '駐輪車室マスタ' . now()->format('YmdHis') . '.csv';
$file = fopen($filename, 'w+');
fwrite($file, "\xEF\xBB\xBF"); // BOM追加UTF-8
$columns = ['駐輪車室ID', '番号', '備考', 'オペレータID'];
fputcsv($file, $columns);
$data = Pplace::all();
foreach ($data as $item) {
fputcsv($file, [
$item->pplace_id,
$item->pplace_number,
$item->pplace_remarks,
$item->operator_id,
]);
}
fclose($file);
$headers = [
"Content-Type" => "text/csv; charset=UTF-8",
"Content-Disposition" => "attachment; filename={$filename}",
];
return response()->download($filename, $filename, $headers)->deleteFileAfterSend(true);
}
public function import(Request $request)
{
$file = $request->file('file');
if (!$file) {
return redirect()->route('pplaces')->with('error', 'CSVファイルを選択してください');
}
$data = \App\Utils::csvToArray($file);
$record = 0;
DB::beginTransaction();
try {
foreach ($data as $key => $row) {
$record = $key + 2;
if (count($row) < 3) throw new \Exception('列数が不正です');
Pplace::create([
'pplace_number' => $row[0],
'pplace_remarks' => $row[1],
'operator_id' => $row[2],
]);
}
DB::commit();
return redirect()->route('pplaces')->with('success', 'インポート成功');
} catch (\Exception $e) {
DB::rollBack();
return redirect()->route('pplaces')->with('error', "{$record} : " . $e->getMessage());
}
}
private function __buildErrorMessasges($validator)
{
return implode("\n", $validator->errors()->all());
}
}