- 상태 추가: cancelled(구매취소), returned(반품) - API: PUT /:id/cancel, /:id/return, /:id/revert-cancel - 데스크탑: 구매완료→취소 버튼, 입고완료→반품 버튼, 취소→되돌리기 - 분석 페이지: 구매일/입고일 기준 전환 토글, 입고일 기준 월간 분류 집계 + 입고 목록 - Settlement API: GET /received-summary, /received-list (입고일 기준) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
103 lines
4.3 KiB
JavaScript
103 lines
4.3 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: '서버 오류가 발생했습니다.' });
|
|
}
|
|
},
|
|
|
|
// 입고일 기준 월간 요약
|
|
getMonthlyReceivedSummary: async (req, res) => {
|
|
try {
|
|
const { year_month } = req.query;
|
|
if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
|
|
const categorySummary = await SettlementModel.getCategorySummaryByReceived(year_month);
|
|
res.json({ success: true, data: { categorySummary } });
|
|
} catch (err) {
|
|
logger.error('Settlement received summary error:', err);
|
|
res.status(500).json({ success: false, message: '서버 오류가 발생했습니다.' });
|
|
}
|
|
},
|
|
|
|
// 입고일 기준 월간 상세 목록
|
|
getMonthlyReceivedList: async (req, res) => {
|
|
try {
|
|
const { year_month } = req.query;
|
|
if (!year_month) return res.status(400).json({ success: false, message: '년월을 선택해주세요.' });
|
|
const rows = await SettlementModel.getMonthlyReceived(year_month);
|
|
res.json({ success: true, data: rows });
|
|
} catch (err) {
|
|
logger.error('Settlement received list 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;
|