service = $service; } /** * 一覧画面 */ public function list(Request $request) { $allowed = [ 'management_id', 't_number', 't_name', 'zipcode', 'adrs', 'bldg', 'tel_num', 'fax_num' ]; $sort = in_array($request->sort, $allowed, true) ? $request->sort : 'management_id'; $sortType = in_array($request->sort_type, ['asc', 'desc'], true) ? $request->sort_type : 'asc'; $list = InvSetting::orderBy($sort, $sortType) ->paginate(20) ->appends($request->query()); //return view('admin.invsettings.list', compact('list', 'sort', 'sortType')); return view('admin.invsettings.list', [ 'list' => $list, 'sort' => $sort, 'sort_type' => $sortType, ]); } /** * 新規登録 */ public function add(Request $request) { if ($request->isMethod('post')) { $validated = app(InvSettingRequest::class)->validated(); $this->service->create($request); return redirect() ->route('inv_settings') ->with('success', 'インボイス設定を登録しました。'); } $managementList = Management::pluck('management_name', 'management_id'); return view('admin.invsettings.add', compact('managementList')); } /** * 編集 */ public function edit(Request $request, $id) { $record = InvSetting::findOrFail($id); if ($request->isMethod('post')) { $validated = app(InvSettingRequest::class)->validated(); $this->service->update($request, $record); return redirect() ->route('inv_settings') ->with('success', 'インボイス設定を更新しました。'); } [$zip1, $zip2] = explode('-', $record->zipcode ?? '-'); [$tel1, $tel2, $tel3] = array_pad(explode('-', $record->tel_num ?? ''), 3, ''); [$fax1, $fax2, $fax3] = array_pad(explode('-', $record->fax_num ?? ''), 3, ''); $managementList = Management::pluck('management_name', 'management_id'); return view('admin.invsettings.edit', compact( 'record', 'zip1', 'zip2', 'tel1', 'tel2', 'tel3', 'fax1', 'fax2', 'fax3', 'managementList' )); } /** * 削除 */ public function delete(Request $request) { $this->service->delete((array) $request->id); return redirect() ->route('inv_settings') ->with('success', '削除しました。'); } /** * 社判画像アップロード(AJAX) * * ・ファイル選択ダイアログで選択された画像をアップロード * ・物理ファイルを storage に保存 * ・DB には保存せず、画像パスのみを返却する */ public function upload(Request $request) { // バリデーション $request->validate([ 'company_image_file' => [ 'required', 'file', 'mimes:jpg,jpeg,png,gif', 'max:2048', // 2MB ], ], [ 'company_image_file.required' => '画像ファイルを選択してください。', 'company_image_file.mimes' => 'jpg / png / gif 形式の画像を選択してください。', 'company_image_file.max' => '画像サイズは2MB以内にしてください。', ]); // ファイル取得 $file = $request->file('company_image_file'); // storage/app/public/inv に保存 $path = $file->store('inv', 'public'); // AJAX 用レスポンス return response()->json([ 'path' => $path, // DB保存用パス 'file_name' => $file->getClientOriginalName(), // 表示用ファイル名 ]); } }