Files
sap-erp/routes/rmOvgSettings.js
John 69b4e68baf
SAP-ERP Portal CI/CD / build (push) Failing after 5m20s
first commit
2026-09-23 17:31:02 +05:30

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;