diff --git a/app/Http/Controllers/Admin/RegularTypeController.php b/app/Http/Controllers/Admin/RegularTypeController.php index c610a15..e4a6db4 100644 --- a/app/Http/Controllers/Admin/RegularTypeController.php +++ b/app/Http/Controllers/Admin/RegularTypeController.php @@ -15,106 +15,118 @@ use Response; class RegularTypeController extends Controller { - public function list(Request $request) - { - $inputs = [ - 'isMethodPost' => 0, - 'isExport' => 0, - 'sort' => $request->input('sort', ''), - 'sort_type' => $request->input('sort_type', ''), - 'page' => $request->get('page', 1), - - ]; - $inputs['isMethodPost'] = $request->isMethod('post'); - $inputs['list'] = RegularType::search($inputs); - if ($inputs['list']->total() > 0 && $inputs['page'] > $inputs['list']->lastPage()) { - return redirect()->route('regular_types'); - } - return view('admin.regular_types.list', $inputs); - } - + public function add(Request $request) { - $inputs = [ - 'regular_type_id' => $request->input('regular_type_id'), // 定期種別ID - 'city_id' => $request->input('city_name', ''), // 市区名 - 'regular_class_1' => $request->input('regular_class_1'), // 定期種別1 - 'regular_class_2' => $request->input('regular_class_2'), // 定期種別2 - 'regular_class_3' => $request->input('regular_class_3'), // 定期種別3 - 'regular_class_6' => $request->input('regular_class_6'), // 定期種別6 - 'regular_class_12' => $request->input('regular_class_12'), // 定期種別12 - 'memo' => $request->input('memo'), // 備考 - ]; + // 画面用データ $dataList = $this->getDataDropList(); - $inputs = array_merge($inputs, $dataList); - if ($request->isMethod('POST')) { - $type = false; - $validation = new RegularTypeRequest(); - $rules = $validation->rules(); - $validator = Validator::make($request->all(), $rules, $validation->messages()); - if (!$validator->fails()) { - \DB::transaction(function () use ($inputs, &$type) { - $new = new RegularType(); - $new->fill($inputs); - if ($new->save()) { - $type = true; - } - }); - if ($type) { - $request->session()->flash('success', __('新しい成功を創造する。')); - return redirect()->route('regular_types'); - } else { - $request->session()->flash('error', __('新しい作成に失敗しました')); - } - } else { - $inputs['errorMsg'] = $this->__buildErrorMessasges($validator); + // フォーム入力(画面初期表示用) + $inputs = [ + 'city_id' => $request->input('city_id'), + 'regular_class_1' => $request->input('regular_class_1'), + 'regular_class_2' => $request->input('regular_class_2'), + 'regular_class_3' => $request->input('regular_class_3'), + 'regular_class_6' => $request->input('regular_class_6'), + 'regular_class_12' => $request->input('regular_class_12'), + 'memo' => $request->input('memo'), + ]; + $viewData = array_merge($inputs, $dataList); + + if ($request->isMethod('POST')) { + $validation = new RegularTypeRequest(); + $rules = $validation->rules(); + $validator = Validator::make($request->all(), $rules, $validation->messages()); + + if ($validator->fails()) { + $viewData['errorMsg'] = $this->buildErrorMessages($validator); + return view('admin.regular_types.add', array_merge($viewData, $request->all())); } + + // 仅允许写入的字段(白名单) + $payload = array_intersect_key($request->all(), array_flip([ + 'city_id', + 'regular_class_1', + 'regular_class_2', + 'regular_class_3', + 'regular_class_6', + 'regular_class_12', + 'memo', + ])); + + DB::transaction(function () use ($payload) { + $new = new RegularType(); + $new->fill($payload); + $new->operator_id = \Auth::user()->ope_id; + $new->save(); + }); + + $request->session()->flash('success', __('新しい成功を創造する。')); + return redirect()->route('regular_types'); } - return view('admin.regular_types.add', $inputs); + return view('admin.regular_types.add', $viewData); } - public function edit(Request $request, $pk, $view = '') + public function edit(Request $request, $id, $view = '') { - $regular_type = RegularType::getByPk($pk); - if (empty($pk) || empty($regular_type)) { - abort('404'); + $regular_type = RegularType::getById($id); + if (empty($id) || empty($regular_type)) { + abort(404); } - $data = $regular_type->getAttributes(); - $dataList = $this->getDataDropList(); - $data = array_merge($data, $dataList); - if ($request->isMethod('POST')) { - $type = false; - $validation = new RegularTypeRequest(); - $rules = $validation->rules(); - $validator = Validator::make($request->all(), $rules, $validation->messages()); - $requestAll = $request->all(); - $requestAll['city_id'] = $request->input('city_name'); - $data = array_merge($data, $requestAll); - if (!$validator->fails()) { - \DB::transaction(function () use ($data, &$type, $regular_type) { - $regular_type->fill($data); - $regular_type->save(); - $type = true; - }); - if ($type) { - $request->session()->flash('success', __('更新に成功しました')); - return redirect()->route('regular_types'); - } else { - $request->session()->flash('error', __('更新に失敗しました')); - } - } else { - $data['errorMsg'] = $this->__buildErrorMessasges($validator); + $data = array_merge($regular_type->getAttributes(), $this->getDataDropList()); + + if ($request->isMethod('POST')) { + + $validation = new RegularTypeRequest(); + $rules = $validation->rules(); + $validator = Validator::make($request->all(), $rules, $validation->messages()); + + $requestAll = $request->all(); + if (isset($requestAll['city_name']) && !isset($requestAll['city_id'])) { + $requestAll['city_id'] = $requestAll['city_name']; } + + $payload = array_intersect_key($requestAll, array_flip([ + 'city_id', + 'regular_class_1', + 'regular_class_2', + 'regular_class_3', + 'regular_class_6', + 'regular_class_12', + 'memo', + ])); + + if ($validator->fails()) { + $data['errorMsg'] = $this->buildErrorMessages($validator); + + $data = array_merge($data, $payload); + if ($view !== '') return view($view, $data); + return view('admin.regular_types.edit', $data); + } + + DB::transaction(function () use (&$regular_type, $payload) { + $regular_type->fill($payload); + $regular_type->save(); + }); + + $request->session()->flash('success', __('更新に成功しました')); + return redirect()->route('regular_types'); } - if ($view != '') { + + if ($view !== '') { return view($view, $data); } return view('admin.regular_types.edit', $data); } + /** バリデーションエラーをまとめる */ + protected function buildErrorMessages(\Illuminate\Contracts\Validation\Validator $validator): string + { + return implode("\n", $validator->errors()->all()); + } + public function delete(Request $request) { $arr_pk = $request->get('pk'); @@ -128,6 +140,7 @@ class RegularTypeController extends Controller return redirect()->route('regular_types')->with('error', __('削除するユーザーを選択してください。')); } + public function export(Request $request) { @@ -168,5 +181,20 @@ class RegularTypeController extends Controller $data['cities'] = City::getList(); return $data; } + public function list(Request $request) + { + $sort = $request->input('sort', 'regular_type_id'); + $sort_type = $request->input('sort_type', 'asc'); + + $list = \App\Models\RegularType::orderBy($sort, $sort_type)->paginate(20); + + return view('admin.regular_types.list', [ + 'list' => $list, + 'sort' => $sort, + 'sort_type' => $sort_type, + ]); + } + + } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/ZoneController.php b/app/Http/Controllers/Admin/ZoneController.php index 1834da8..7228767 100644 --- a/app/Http/Controllers/Admin/ZoneController.php +++ b/app/Http/Controllers/Admin/ZoneController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Zone; +use Illuminate\Support\Facades\DB; class ZoneController extends Controller { @@ -47,11 +48,18 @@ class ZoneController extends Controller // ページネーション $zones = $query->orderBy($sort, $sort_type)->paginate(20); + // === 下拉选单用の一覧データ === + $parkList = DB::table('park')->pluck('park_name', 'park_id'); + $ptypeList = DB::table('ptype')->pluck('ptype_id', 'ptype_id'); // 暂时显示 ID + $psectionList = DB::table('psection')->pluck('psection_id', 'psection_id'); // 暂时显示 ID + return view('admin.zones.list', compact( - 'zones', 'sort', 'sort_type' + 'zones', 'sort', 'sort_type', + 'parkList', 'ptypeList', 'psectionList' )); } + /** * 新規登録 */ diff --git a/app/Http/Requests/RegularTypeRequest.php b/app/Http/Requests/RegularTypeRequest.php new file mode 100644 index 0000000..de24ff7 --- /dev/null +++ b/app/Http/Requests/RegularTypeRequest.php @@ -0,0 +1,27 @@ + 'required|string|max:255', + ]; + } + + public function messages() + { + return [ + 'name.required' => '市区名は必須です。', + ]; + } +} diff --git a/app/Models/RegularType.php b/app/Models/RegularType.php index d8fd0d6..ae7de57 100644 --- a/app/Models/RegularType.php +++ b/app/Models/RegularType.php @@ -29,6 +29,7 @@ class RegularType extends Model 'regular_class_6', 'regular_class_12', 'memo', + 'operator_id', ]; public static function boot() @@ -60,14 +61,14 @@ class RegularType extends Model return $list; } - public static function getByPk($pk) + public static function getById($id) { - return self::find($pk); + return self::find($id); } - public static function deleteByPk($arr) + public static function deleteById($id) { - return self::whereIn('regular_type_id', $arr)->delete(); + return self::where('regular_type_id', $id)->delete(); } public function getCity() diff --git a/resources/views/admin/contract_allowable_cities/add.blade.php b/resources/views/admin/contract_allowable_cities/add.blade.php index a42a3e4..f2fe216 100644 --- a/resources/views/admin/contract_allowable_cities/add.blade.php +++ b/resources/views/admin/contract_allowable_cities/add.blade.php @@ -6,13 +6,13 @@