feat(purchase): 생산소모품 구매 관리 시스템 구현

tkuser: 업체(공급업체) CRUD + 소모품 마스터 CRUD (사진 업로드 포함)
tkfb: 구매신청 → 구매 처리 → 월간 분석/정산 전체 워크플로
설비(equipment) 분류 구매 시 자동 등록 + 실패 시 admin 알림

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-13 21:21:59 +09:00
parent 1abdb92a71
commit 3623551a6b
29 changed files with 2581 additions and 1 deletions

View File

@@ -0,0 +1,18 @@
const express = require('express');
const router = express.Router();
const ctrl = require('../controllers/purchaseRequestController');
const { requireMinLevel } = require('../middlewares/auth');
// 보조 데이터
router.get('/consumable-items', ctrl.getConsumableItems);
router.get('/vendors', ctrl.getVendors);
// 구매신청 CRUD
router.get('/', ctrl.getAll);
router.get('/:id', ctrl.getById);
router.post('/', ctrl.create);
router.put('/:id/hold', requireMinLevel('admin'), ctrl.hold);
router.put('/:id/revert', requireMinLevel('admin'), ctrl.revert);
router.delete('/:id', ctrl.delete);
module.exports = router;

View File

@@ -0,0 +1,10 @@
const express = require('express');
const router = express.Router();
const ctrl = require('../controllers/purchaseController');
const { requireMinLevel } = require('../middlewares/auth');
router.get('/', ctrl.getAll);
router.post('/', requireMinLevel('admin'), ctrl.create);
router.get('/price-history/:itemId', ctrl.getPriceHistory);
module.exports = router;

View File

@@ -0,0 +1,12 @@
const express = require('express');
const router = express.Router();
const ctrl = require('../controllers/settlementController');
const { requireMinLevel } = require('../middlewares/auth');
router.get('/summary', ctrl.getMonthlySummary);
router.get('/purchases', ctrl.getMonthlyPurchases);
router.get('/price-changes', ctrl.getPriceChanges);
router.post('/complete', requireMinLevel('admin'), ctrl.complete);
router.post('/cancel', requireMinLevel('admin'), ctrl.cancel);
module.exports = router;