46 lines
2.0 KiB
JavaScript
46 lines
2.0 KiB
JavaScript
'use strict';
|
|
// routes/itemGroupClassification.js — admin-configurable Item Group → Work
|
|
// Order table (Raw Material / Packing Material / Component) mapping.
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const { verifyToken, verifyUserAdmin } = require('../middleware/auth');
|
|
const { getPool } = require('../services/sqlPool');
|
|
|
|
const store = () => require('../services/itemGroupClassStore');
|
|
|
|
async function fetchItemGroups() {
|
|
const pool = await getPool();
|
|
const result = await pool.request().query(`SELECT "ItmsGrpCod","ItmsGrpNam" FROM [dbo]."OITB" ORDER BY "ItmsGrpNam"`);
|
|
return result.recordset || [];
|
|
}
|
|
|
|
// List every real SAP item group, merged with its saved classification (if any)
|
|
router.get('/', verifyToken, async (req, res) => {
|
|
try {
|
|
const [groups, saved] = await Promise.all([fetchItemGroups(), store().getAll()]);
|
|
const data = groups.map(g => ({
|
|
code: g.ItmsGrpCod,
|
|
name: g.ItmsGrpNam || String(g.ItmsGrpCod),
|
|
classification: saved[g.ItmsGrpCod] || '',
|
|
}));
|
|
res.json({ success: true, data });
|
|
} catch (err) { res.status(500).json({ success: false, message: err.message }); }
|
|
});
|
|
|
|
// Save one group's classification — admin only
|
|
router.put('/:code', verifyToken, verifyUserAdmin, async (req, res) => {
|
|
try {
|
|
const code = parseInt(req.params.code, 10);
|
|
if (isNaN(code)) return res.status(400).json({ success: false, message: 'Invalid item group code' });
|
|
const { name, classification } = req.body || {};
|
|
const tokens = String(classification || '').split(',').map(s => s.trim().toUpperCase()).filter(Boolean);
|
|
const validTokens = [...store().VALID_TOKENS];
|
|
if (tokens.some(t => !validTokens.includes(t)))
|
|
return res.status(400).json({ success: false, message: `classification tokens must be ${validTokens.join(', ')}` });
|
|
await store().setClassification(code, name || '', classification || '', req.user.username);
|
|
res.json({ success: true });
|
|
} catch (err) { res.status(500).json({ success: false, message: err.message }); }
|
|
});
|
|
|
|
module.exports = router;
|