diff --git a/controllers/po.js b/controllers/po.js index ec290eb..9b3e393 100644 --- a/controllers/po.js +++ b/controllers/po.js @@ -12,17 +12,45 @@ var fs = require("fs"); const SAPAdapter = require("../adapter/sapadapter.js"); const sapadapter = new SAPAdapter(); +function padSapDateParts(year, month, day) { + const y = String(year); + const m = String(month).padStart(2, "0"); + const d = String(day).padStart(2, "0"); + if (!/^\d{4}$/.test(y) || Number(m) < 1 || Number(m) > 12 || Number(d) < 1 || Number(d) > 31) { + return ""; + } + return `${y}${m}${d}`; +} + +function parseCompactSapDate(str) { + const year = str.slice(0, 4); + const rest = str.slice(4); + if (rest.length === 4) { + return padSapDateParts(year, rest.slice(0, 2), rest.slice(2)); + } + if (rest.length === 3) { + const twoDigitMonth = padSapDateParts(year, rest.slice(0, 2), rest.slice(2)); + if (twoDigitMonth) return twoDigitMonth; + return padSapDateParts(year, rest.slice(0, 1), rest.slice(1)); + } + if (rest.length === 2) { + return padSapDateParts(year, rest.slice(0, 1), rest.slice(1)); + } + return ""; +} + function formatSapDate(value) { if (!value) return ""; const str = String(value).trim(); if (/^\d{8}$/.test(str)) return str; if (/^\d{4}-\d{2}-\d{2}/.test(str)) return str.slice(0, 10).replace(/-/g, ""); + if (/^\d{6,7}$/.test(str)) { + const compact = parseCompactSapDate(str); + if (compact) return compact; + } const d = new Date(str); if (!isNaN(d.getTime())) { - const y = d.getFullYear(); - const m = String(d.getMonth() + 1).padStart(2, "0"); - const day = String(d.getDate()).padStart(2, "0"); - return `${y}${m}${day}`; + return padSapDateParts(d.getFullYear(), d.getMonth() + 1, d.getDate()); } return str; }