61 lines
2.9 KiB
JavaScript
61 lines
2.9 KiB
JavaScript
'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;
|