feat: 기본코드 bag 목록과 관리자 CRUD 분리
- /bag/code-kinds, /bag/code-details/{ck_idx} 조회 (LoginAuthFilter, Roles::canManageCodeMaster)
- admin에서는 종류·세부 목록 제거, 등록·수정·삭제만 유지 후 bag으로 리다이렉트
- 사이트 메뉴·기본코드 링크 SQL, CSV 동기화 스크립트·README 보강
- 관리자 대시보드: 발주·판매 테이블 미존재 시 통계 비활성화
- 회원 로그인 잠금(mb_login_fail_count, mb_locked_until) 및 관리자 잠금 해제
Made-with: Cursor
This commit is contained in:
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use CodeIgniter\Database\Exceptions\DatabaseException;
|
||||
use App\Models\BagInventoryModel;
|
||||
use App\Models\BagIssueModel;
|
||||
use App\Models\BagOrderModel;
|
||||
@@ -18,6 +19,7 @@ use App\Models\PackagingUnitModel;
|
||||
use App\Models\SalesAgencyModel;
|
||||
use App\Models\ShopOrderModel;
|
||||
use App\Models\DesignatedShopModel;
|
||||
use Config\Roles;
|
||||
|
||||
class Bag extends BaseController
|
||||
{
|
||||
@@ -44,17 +46,74 @@ class Bag extends BaseController
|
||||
public function basicInfo(): string
|
||||
{
|
||||
$lgIdx = $this->lgIdx();
|
||||
$data = [];
|
||||
$data = [
|
||||
'bagPrices' => [],
|
||||
'packagingUnits' => [],
|
||||
];
|
||||
|
||||
if ($lgIdx) {
|
||||
$data['codeKinds'] = model(CodeKindModel::class)->orderBy('ck_code', 'ASC')->findAll();
|
||||
$data['bagPrices'] = model(BagPriceModel::class)->where('bp_lg_idx', $lgIdx)->orderBy('bp_bag_code', 'ASC')->findAll();
|
||||
$data['packagingUnits'] = model(PackagingUnitModel::class)->where('pu_lg_idx', $lgIdx)->orderBy('pu_bag_code', 'ASC')->findAll();
|
||||
try {
|
||||
$data['bagPrices'] = model(BagPriceModel::class)->where('bp_lg_idx', $lgIdx)->orderBy('bp_bag_code', 'ASC')->findAll();
|
||||
} catch (DatabaseException $e) {
|
||||
log_message('error', '[basicInfo] bag_price 조회 실패(테이블 미생성 등): ' . $e->getMessage());
|
||||
}
|
||||
try {
|
||||
$data['packagingUnits'] = model(PackagingUnitModel::class)->where('pu_lg_idx', $lgIdx)->orderBy('pu_bag_code', 'ASC')->findAll();
|
||||
} catch (DatabaseException $e) {
|
||||
log_message('error', '[basicInfo] packaging_unit 조회 실패: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render('기본정보관리', 'bag/basic_info', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 기본코드 종류·세부코드 조회 전용 (사이트 메뉴 기본코드관리)
|
||||
*/
|
||||
public function codeKinds(): string
|
||||
{
|
||||
$kindModel = model(CodeKindModel::class);
|
||||
$detailModel = model(CodeDetailModel::class);
|
||||
$kinds = $kindModel->orderBy('ck_code', 'ASC')->findAll();
|
||||
$countMap = [];
|
||||
foreach ($kinds as $row) {
|
||||
// countAllResults() 기본값(true)으로 매번 빌더 초기화 — false 시 where 누적되어 2번째부터 0건으로 보임
|
||||
$countMap[$row->ck_idx] = (int) $detailModel->where('cd_ck_idx', $row->ck_idx)->countAllResults();
|
||||
}
|
||||
|
||||
return $this->render('기본코드관리', 'bag/code_kinds', [
|
||||
'codeKinds' => $kinds,
|
||||
'countMap' => $countMap,
|
||||
'canManage' => Roles::canManageCodeMaster((int) session()->get('mb_level')),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 기본코드 세부 목록 (사이트 레이아웃). 등록·수정·삭제 폼은 /admin/code-details/* 유지.
|
||||
*/
|
||||
public function codeDetails(int $ckIdx)
|
||||
{
|
||||
$kindModel = model(CodeKindModel::class);
|
||||
$detailModel = model(CodeDetailModel::class);
|
||||
$kind = $kindModel->find($ckIdx);
|
||||
if ($kind === null) {
|
||||
return redirect()->to(site_url('bag/code-kinds'))->with('error', '코드 종류를 찾을 수 없습니다.');
|
||||
}
|
||||
|
||||
$list = $detailModel->where('cd_ck_idx', $ckIdx)->orderBy('cd_sort', 'ASC')->orderBy('cd_idx', 'ASC')->paginate(20);
|
||||
$pager = $detailModel->pager;
|
||||
|
||||
$canManage = Roles::canManageCodeMaster((int) session()->get('mb_level'));
|
||||
$title = ($canManage ? '세부코드 관리' : '세부코드 조회') . ' — ' . $kind->ck_name . ' (' . $kind->ck_code . ')';
|
||||
|
||||
return $this->render($title, 'bag/code_details', [
|
||||
'kind' => $kind,
|
||||
'list' => $list,
|
||||
'pager' => $pager,
|
||||
'canManage' => $canManage,
|
||||
]);
|
||||
}
|
||||
|
||||
// ──────────────────────────────────────────────
|
||||
// 발주 입고 관리
|
||||
// ──────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user