- 사용자 매뉴얼: league/commonmark 기반 bag/manual(로그인 전용), ManualRenderer + Config\Manual manifest, 콘텐츠 8종, E2E - 번호알기(봉투번호확인): bag/number-lookup, BagNumberLookup, E2E - gov-portal 대시보드 시안(기본/strip)·기본코드관리 화면 - 메뉴 관리: 등록·수정 후 메뉴 화면 유지, 수정 버튼 클릭 시 상단 스크롤 - 수불/분석 리포트(LOT 수불·반품/파기·수급계획·추이) 표시 보강 - .gitignore: docs/ → /docs/ 앵커링(최상위 개발문서만 제외, app/Docs는 추적) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
102 lines
3.3 KiB
PHP
102 lines
3.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Libraries;
|
|
|
|
use App\Models\CodeDetailModel;
|
|
use App\Models\CodeKindModel;
|
|
use Config\Roles;
|
|
|
|
/**
|
|
* 공공 포털형 기본 코드관리 UI 시안 전용 데이터 (/bag/code-kinds 와 별도 URL, 동일 집계)
|
|
*/
|
|
class GovPortalCodeKindsPage
|
|
{
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function buildPageData(?int $lgIdx, int $level, ?int $adminLgIdx, int $selectedCkIdx, array $filters): array
|
|
{
|
|
$kindModel = model(CodeKindModel::class);
|
|
$detailModel = model(CodeDetailModel::class);
|
|
$kinds = [];
|
|
$countMap = [];
|
|
$selectedKind = null;
|
|
$detailList = [];
|
|
$rowCanEdit = [];
|
|
|
|
$qCode = trim((string) ($filters['q_code'] ?? ''));
|
|
$qName = trim((string) ($filters['q_name'] ?? ''));
|
|
$qState = (string) ($filters['q_state'] ?? '');
|
|
|
|
try {
|
|
$builder = $kindModel->orderBy('ck_code', 'ASC');
|
|
if ($qCode !== '') {
|
|
$builder->like('ck_code', $qCode);
|
|
}
|
|
if ($qName !== '') {
|
|
$builder->like('ck_name', $qName);
|
|
}
|
|
if ($qState === '1' || $qState === '0') {
|
|
$builder->where('ck_state', (int) $qState);
|
|
}
|
|
$kinds = $builder->findAll();
|
|
foreach ($kinds as $row) {
|
|
$countMap[$row->ck_idx] = (int) $detailModel->where('cd_ck_idx', $row->ck_idx)
|
|
->filterByTenantScope($lgIdx)
|
|
->countAllResults();
|
|
}
|
|
} catch (\Throwable $e) {
|
|
log_message('error', '[GovPortalCodeKinds] {type} {message}', [
|
|
'type' => $e::class,
|
|
'message' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
$canManageKinds = Roles::canManageCodeKindMaster($level);
|
|
$canManageDetails = Roles::canManageCodeMaster($level);
|
|
|
|
if ($kinds !== []) {
|
|
foreach ($kinds as $row) {
|
|
if ((int) $row->ck_idx === $selectedCkIdx) {
|
|
$selectedKind = $row;
|
|
break;
|
|
}
|
|
}
|
|
if ($selectedKind === null) {
|
|
$selectedKind = $kinds[0];
|
|
}
|
|
}
|
|
|
|
if ($selectedKind !== null) {
|
|
$detailList = $detailModel->where('cd_ck_idx', (int) $selectedKind->ck_idx)
|
|
->filterByTenantScope($lgIdx)
|
|
->orderBy('cd_sort', 'ASC')
|
|
->orderBy('cd_code', 'ASC')
|
|
->orderBy('cd_idx', 'ASC')
|
|
->findAll();
|
|
|
|
foreach ($detailList as $row) {
|
|
$rowCanEdit[$row->cd_idx] = Roles::canEditCodeDetailRow($level, $row, $adminLgIdx);
|
|
}
|
|
}
|
|
|
|
return [
|
|
'codeKinds' => $kinds,
|
|
'countMap' => $countMap,
|
|
'canManageKinds' => $canManageKinds,
|
|
'canManageDetails' => $canManageDetails,
|
|
'selectedKind' => $selectedKind,
|
|
'detailList' => $detailList,
|
|
'rowCanEdit' => $rowCanEdit,
|
|
'totalCount' => count($kinds),
|
|
'filters' => [
|
|
'q_code' => $qCode,
|
|
'q_name' => $qName,
|
|
'q_state' => $qState,
|
|
],
|
|
];
|
|
}
|
|
}
|