tkuser: 업체(공급업체) CRUD + 소모품 마스터 CRUD (사진 업로드 포함) tkfb: 구매신청 → 구매 처리 → 월간 분석/정산 전체 워크플로 설비(equipment) 분류 구매 시 자동 등록 + 실패 시 admin 알림 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
77 lines
3.1 KiB
JavaScript
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;
|