'use strict'; // routes/rmOvgSettings.js — admin-managed Item Code/Item Group → Ovg% rows // (see services/rmOvgSettingsStore.js) plus the resolve lookup work-order.html // uses to pre-fill a raw material row's Ovg% and recompute Qty Req./100 ml. const express = require('express'); const router = express.Router(); const { verifyToken, verifyUserAdmin } = require('../middleware/auth'); const { getPool } = require('../services/sqlPool'); const store = () => require('../services/rmOvgSettingsStore'); router.get('/', verifyToken, verifyUserAdmin, async (req, res) => { try { const data = await store().listAll(); res.json({ success: true, data }); } catch (err) { res.status(500).json({ success: false, message: err.message }); } }); router.post('/', verifyToken, verifyUserAdmin, async (req, res) => { try { const { itemCode, itemGroup, ovgPercent } = req.body || {}; const saved = await store().create({ itemCode, itemGroup, ovgPercent, by: req.user.username }); res.json({ success: true, data: saved }); } catch (err) { res.status(400).json({ success: false, message: err.message }); } }); router.put('/:id', verifyToken, verifyUserAdmin, async (req, res) => { try { const { itemCode, itemGroup, ovgPercent } = req.body || {}; const saved = await store().update(req.params.id, { itemCode, itemGroup, ovgPercent, by: req.user.username }); res.json({ success: true, data: saved }); } catch (err) { res.status(400).json({ success: false, message: err.message }); } }); router.delete('/:id', verifyToken, verifyUserAdmin, async (req, res) => { try { await store().remove(req.params.id); res.json({ success: true }); } catch (err) { res.status(400).json({ success: false, message: err.message }); } }); // GET /resolve?codes=RM001,RM002&company=... — { itemCode: ovgPercent } for // every code that resolves a match (item-code-specific row wins over its // item-group row). Any authenticated user may call this (needed by // work-order.html for anyone creating/editing a Work Order, not just admins). router.get('/resolve', verifyToken, async (req, res) => { try { const codes = (req.query.codes || '').split(',').map(s => s.trim().toUpperCase()).filter(Boolean); if (!codes.length) return res.json({ success: true, data: {} }); const pool = await getPool(req.query.company || null); const list = codes.map(c => `'${c.replace(/'/g, "''")}'`).join(','); const result = await pool.request().query(`SELECT "ItemCode","ItmsGrpCod" FROM [dbo]."OITM" WHERE "ItemCode" IN (${list})`); const groupByItemCode = {}; (result.recordset || []).forEach(r => { groupByItemCode[String(r.ItemCode).toUpperCase()] = r.ItmsGrpCod; }); const data = await store().resolveForItems(codes, groupByItemCode); res.json({ success: true, data }); } catch (err) { res.json({ success: true, data: {}, warning: err.message }); } }); module.exports = router;