'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;