Files
tk-factory-services/system1-factory/api/controllers/settlementController.js
Hyungi Ahn 3623551a6b feat(purchase): 생산소모품 구매 관리 시스템 구현
tkuser: 업체(공급업체) CRUD + 소모품 마스터 CRUD (사진 업로드 포함)
tkfb: 구매신청 → 구매 처리 → 월간 분석/정산 전체 워크플로
설비(equipment) 분류 구매 시 자동 등록 + 실패 시 admin 알림

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 21:21:59 +09:00

77 lines
3.1 KiB
JavaScript

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;