47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
const taxService = require('../../services/tax/taxService');
|
|
|
|
function resolveActorUserId(req) {
|
|
const raw = req.user?.id ?? req.user?.user_id ?? req.body?.userId ?? req.body?.user_id;
|
|
if (raw == null) return null;
|
|
const num = Number(raw);
|
|
return Number.isNaN(num) ? null : num;
|
|
}
|
|
|
|
module.exports = {
|
|
async getAllVatRates(req, res) {
|
|
try {
|
|
const data = await taxService.listCurrentRates();
|
|
return res.json({ success: true, data });
|
|
} catch (err) {
|
|
console.error('[GET VAT RATES]', err);
|
|
return res.status(500).json({ success: false, message: err.message });
|
|
}
|
|
},
|
|
|
|
async importVatRatesCsv(req, res) {
|
|
try {
|
|
if (!req.file || !req.file.buffer) {
|
|
return res.status(400).json({ success: false, message: 'CSV file required' });
|
|
}
|
|
const entries = taxService.parseCsv(req.file.buffer);
|
|
const actorUserId = resolveActorUserId(req);
|
|
const summary = await taxService.importRates(entries, actorUserId);
|
|
return res.json({ success: true, summary });
|
|
} catch (err) {
|
|
console.error('[IMPORT VAT RATES]', err);
|
|
return res.status(400).json({ success: false, message: err.message });
|
|
}
|
|
},
|
|
|
|
async getVatHistory(req, res) {
|
|
try {
|
|
const countryCode = req.params.countryCode.toUpperCase();
|
|
const result = await taxService.getHistory(countryCode);
|
|
return res.json({ success: true, data: result });
|
|
} catch (err) {
|
|
console.error('[GET VAT HISTORY]', err);
|
|
return res.status(400).json({ success: false, message: err.message });
|
|
}
|
|
}
|
|
};
|