kindModel = model(CodeKindModel::class); $this->detailModel = model(CodeDetailModel::class); } private function redirectIfCannotManageCodeMaster(): ?RedirectResponse { if (! Roles::canManageCodeMaster((int) session()->get('mb_level'))) { return redirect()->to(site_url('bag/code-kinds'))->with('error', '코드 관리 권한이 없습니다.'); } return null; } /** @deprecated 사이트 URL 유지용 — 세부 목록은 /bag/code-details/{ck_idx} */ public function index(int $ckIdx): RedirectResponse { return redirect()->to(site_url('bag/code-details/' . $ckIdx)); } public function create(int $ckIdx) { if ($r = $this->redirectIfCannotManageCodeMaster()) { return $r; } $kind = $this->kindModel->find($ckIdx); if ($kind === null) { return redirect()->to(site_url('bag/code-kinds'))->with('error', '코드 종류를 찾을 수 없습니다.'); } return view('admin/layout', [ 'title' => '세부코드 등록 — ' . $kind->ck_name, 'content' => view('admin/code_detail/create', ['kind' => $kind]), ]); } public function store() { if ($r = $this->redirectIfCannotManageCodeMaster()) { return $r; } $rules = [ 'cd_ck_idx' => 'required|is_natural_no_zero', 'cd_code' => 'required|max_length[50]', 'cd_name' => 'required|max_length[100]', 'cd_sort' => 'permit_empty|is_natural', ]; if (! $this->validate($rules)) { return redirect()->back()->withInput()->with('errors', $this->validator->getErrors()); } $ckIdx = (int) $this->request->getPost('cd_ck_idx'); $this->detailModel->insert([ 'cd_ck_idx' => $ckIdx, 'cd_code' => $this->request->getPost('cd_code'), 'cd_name' => $this->request->getPost('cd_name'), 'cd_sort' => (int) ($this->request->getPost('cd_sort') ?: 0), 'cd_state' => 1, 'cd_regdate' => date('Y-m-d H:i:s'), ]); return redirect()->to(site_url('bag/code-details/' . $ckIdx))->with('success', '세부코드가 등록되었습니다.'); } public function edit(int $id) { if ($r = $this->redirectIfCannotManageCodeMaster()) { return $r; } $item = $this->detailModel->find($id); if ($item === null) { return redirect()->to(site_url('bag/code-kinds'))->with('error', '세부코드를 찾을 수 없습니다.'); } $kind = $this->kindModel->find($item->cd_ck_idx); return view('admin/layout', [ 'title' => '세부코드 수정 — ' . ($kind->ck_name ?? ''), 'content' => view('admin/code_detail/edit', [ 'item' => $item, 'kind' => $kind, ]), ]); } public function update(int $id) { if ($r = $this->redirectIfCannotManageCodeMaster()) { return $r; } $item = $this->detailModel->find($id); if ($item === null) { return redirect()->to(site_url('bag/code-kinds'))->with('error', '세부코드를 찾을 수 없습니다.'); } $rules = [ 'cd_name' => 'required|max_length[100]', 'cd_sort' => 'permit_empty|is_natural', 'cd_state' => 'required|in_list[0,1]', ]; if (! $this->validate($rules)) { return redirect()->back()->withInput()->with('errors', $this->validator->getErrors()); } $this->detailModel->update($id, [ 'cd_name' => $this->request->getPost('cd_name'), 'cd_sort' => (int) ($this->request->getPost('cd_sort') ?: 0), 'cd_state' => (int) $this->request->getPost('cd_state'), ]); return redirect()->to(site_url('bag/code-details/' . $item->cd_ck_idx))->with('success', '세부코드가 수정되었습니다.'); } public function delete(int $id) { if ($r = $this->redirectIfCannotManageCodeMaster()) { return $r; } $item = $this->detailModel->find($id); if ($item === null) { return redirect()->to(site_url('bag/code-kinds'))->with('error', '세부코드를 찾을 수 없습니다.'); } $ckIdx = $item->cd_ck_idx; $this->detailModel->delete($id); return redirect()->to(site_url('bag/code-details/' . $ckIdx))->with('success', '세부코드가 삭제되었습니다.'); } }