Phase 3 발주/입고/재고 관리 구현
- DB: bag_order, bag_order_item, bag_receiving, bag_inventory 테이블
- 발주: UUID v4, SHA-256 해시, LOT번호 자동생성, 봉투별 품목 관리
- 포장단위 연동 (박스→낱장 자동 환산), 단가 연동 (금액 자동 계산)
- 발주 현황 (기간/상태 필터), 상세 조회, 취소/삭제 (상태 변경)
- 입고: 발주건 기반 입고 처리, 박스→낱장 환산, 재고 자동 가산
- 재고: 지자체별 봉투 종류별 현재 재고 조회
- E2E 테스트 7개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:13:01 +09:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Controllers\Admin;
|
|
|
|
|
|
|
|
|
|
use App\Controllers\BaseController;
|
|
|
|
|
use App\Models\BagInventoryModel;
|
|
|
|
|
|
|
|
|
|
class BagInventory extends BaseController
|
|
|
|
|
{
|
|
|
|
|
public function index()
|
|
|
|
|
{
|
|
|
|
|
helper('admin');
|
|
|
|
|
$lgIdx = admin_effective_lg_idx();
|
2026-04-08 00:20:09 +09:00
|
|
|
if (! $lgIdx) {
|
|
|
|
|
return redirect()->to(work_area_home_url())->with('error', '지자체를 선택해 주세요.');
|
|
|
|
|
}
|
Phase 3 발주/입고/재고 관리 구현
- DB: bag_order, bag_order_item, bag_receiving, bag_inventory 테이블
- 발주: UUID v4, SHA-256 해시, LOT번호 자동생성, 봉투별 품목 관리
- 포장단위 연동 (박스→낱장 자동 환산), 단가 연동 (금액 자동 계산)
- 발주 현황 (기간/상태 필터), 상세 조회, 취소/삭제 (상태 변경)
- 입고: 발주건 기반 입고 처리, 박스→낱장 환산, 재고 자동 가산
- 재고: 지자체별 봉투 종류별 현재 재고 조회
- E2E 테스트 7개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:13:01 +09:00
|
|
|
|
2026-03-26 16:40:49 +09:00
|
|
|
$invModel = model(BagInventoryModel::class);
|
2026-04-08 00:20:09 +09:00
|
|
|
$list = $invModel->where('bi_lg_idx', $lgIdx)->orderBy('bi_bag_code', 'ASC')->paginate(20);
|
|
|
|
|
$pager = $invModel->pager;
|
Phase 3 발주/입고/재고 관리 구현
- DB: bag_order, bag_order_item, bag_receiving, bag_inventory 테이블
- 발주: UUID v4, SHA-256 해시, LOT번호 자동생성, 봉투별 품목 관리
- 포장단위 연동 (박스→낱장 자동 환산), 단가 연동 (금액 자동 계산)
- 발주 현황 (기간/상태 필터), 상세 조회, 취소/삭제 (상태 변경)
- 입고: 발주건 기반 입고 처리, 박스→낱장 환산, 재고 자동 가산
- 재고: 지자체별 봉투 종류별 현재 재고 조회
- E2E 테스트 7개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:13:01 +09:00
|
|
|
|
2026-04-08 00:20:09 +09:00
|
|
|
return $this->renderWorkPage('재고 현황', 'admin/bag_inventory/index', ['list' => $list, 'pager' => $pager]);
|
Phase 3 발주/입고/재고 관리 구현
- DB: bag_order, bag_order_item, bag_receiving, bag_inventory 테이블
- 발주: UUID v4, SHA-256 해시, LOT번호 자동생성, 봉투별 품목 관리
- 포장단위 연동 (박스→낱장 자동 환산), 단가 연동 (금액 자동 계산)
- 발주 현황 (기간/상태 필터), 상세 조회, 취소/삭제 (상태 변경)
- 입고: 발주건 기반 입고 처리, 박스→낱장 환산, 재고 자동 가산
- 재고: 지자체별 봉투 종류별 현재 재고 조회
- E2E 테스트 7개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:13:01 +09:00
|
|
|
}
|
2026-03-26 16:40:49 +09:00
|
|
|
|
|
|
|
|
public function export()
|
|
|
|
|
{
|
|
|
|
|
helper(['admin', 'export']);
|
|
|
|
|
$lgIdx = admin_effective_lg_idx();
|
2026-04-08 00:20:09 +09:00
|
|
|
if (! $lgIdx) {
|
|
|
|
|
return redirect()->to(mgmt_url('bag-inventory'))->with('error', '지자체를 선택해 주세요.');
|
2026-03-26 16:40:49 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$list = model(BagInventoryModel::class)->where('bi_lg_idx', $lgIdx)->orderBy('bi_bag_code', 'ASC')->findAll();
|
|
|
|
|
|
|
|
|
|
$rows = [];
|
|
|
|
|
foreach ($list as $row) {
|
|
|
|
|
$rows[] = [
|
|
|
|
|
$row->bi_idx,
|
|
|
|
|
$row->bi_bag_code,
|
|
|
|
|
$row->bi_bag_name,
|
|
|
|
|
(int) $row->bi_qty,
|
|
|
|
|
$row->bi_updated_at,
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export_csv(
|
|
|
|
|
'재고현황_' . date('Ymd') . '.csv',
|
|
|
|
|
['번호', '봉투코드', '봉투명', '현재재고(낱장)', '최종갱신'],
|
|
|
|
|
$rows
|
|
|
|
|
);
|
|
|
|
|
}
|
Phase 3 발주/입고/재고 관리 구현
- DB: bag_order, bag_order_item, bag_receiving, bag_inventory 테이블
- 발주: UUID v4, SHA-256 해시, LOT번호 자동생성, 봉투별 품목 관리
- 포장단위 연동 (박스→낱장 자동 환산), 단가 연동 (금액 자동 계산)
- 발주 현황 (기간/상태 필터), 상세 조회, 취소/삭제 (상태 변경)
- 입고: 발주건 기반 입고 처리, 박스→낱장 환산, 재고 자동 가산
- 재고: 지자체별 봉투 종류별 현재 재고 조회
- E2E 테스트 7개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 18:13:01 +09:00
|
|
|
}
|