feat(purchase): 생산소모품 구매 관리 시스템 구현
tkuser: 업체(공급업체) CRUD + 소모품 마스터 CRUD (사진 업로드 포함) tkfb: 구매신청 → 구매 처리 → 월간 분석/정산 전체 워크플로 설비(equipment) 분류 구매 시 자동 등록 + 실패 시 admin 알림 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
76
system1-factory/api/controllers/settlementController.js
Normal file
76
system1-factory/api/controllers/settlementController.js
Normal file
@@ -0,0 +1,76 @@
|
||||
const SettlementModel = require('../models/settlementModel');
|
||||
const logger = require('../utils/logger');
|
||||
|
||||
const SettlementController = {
|
||||
// 월간 요약 (분류별 + 업체별)
|
||||
getMonthlySummary: async (req, res) => {
|
||||
try {
|
||||
const { year_month } = req.query;
|
||||
if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
|
||||
|
||||
const [categorySummary, vendorSummary] = await Promise.all([
|
||||
SettlementModel.getCategorySummary(year_month),
|
||||
SettlementModel.getVendorSummary(year_month)
|
||||
]);
|
||||
|
||||
res.json({ success: true, data: { categorySummary, vendorSummary } });
|
||||
} catch (err) {
|
||||
logger.error('Settlement summary error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
// 월간 상세 구매 목록
|
||||
getMonthlyPurchases: async (req, res) => {
|
||||
try {
|
||||
const { year_month } = req.query;
|
||||
if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
|
||||
const rows = await SettlementModel.getMonthlyPurchases(year_month);
|
||||
res.json({ success: true, data: rows });
|
||||
} catch (err) {
|
||||
logger.error('Settlement purchases error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
// 가격 변동 목록
|
||||
getPriceChanges: async (req, res) => {
|
||||
try {
|
||||
const { year_month } = req.query;
|
||||
if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
|
||||
const rows = await SettlementModel.getPriceChanges(year_month);
|
||||
res.json({ success: true, data: rows });
|
||||
} catch (err) {
|
||||
logger.error('Settlement priceChanges error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
// 정산 완료
|
||||
complete: async (req, res) => {
|
||||
try {
|
||||
const { year_month, vendor_id, notes } = req.body;
|
||||
if (!year_month || !vendor_id) return res.status(400).json({ success: false, message: '년월과 업체를 선택해주세요.' });
|
||||
const result = await SettlementModel.completeSettlement(year_month, vendor_id, req.user.id, notes);
|
||||
res.json({ success: true, data: result, message: '정산 완료 처리되었습니다.' });
|
||||
} catch (err) {
|
||||
logger.error('Settlement complete error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
},
|
||||
|
||||
// 정산 취소
|
||||
cancel: async (req, res) => {
|
||||
try {
|
||||
const { year_month, vendor_id } = req.body;
|
||||
if (!year_month || !vendor_id) return res.status(400).json({ success: false, message: '년월과 업체를 선택해주세요.' });
|
||||
const result = await SettlementModel.cancelSettlement(year_month, vendor_id);
|
||||
res.json({ success: true, data: result, message: '정산이 취소되었습니다.' });
|
||||
} catch (err) {
|
||||
logger.error('Settlement cancel error:', err);
|
||||
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = SettlementController;
|
||||
Reference in New Issue
Block a user