update PO

This commit is contained in:
Iki
2026-06-16 14:34:58 +09:00
parent d7c95e4cb5
commit dac2ac881e
3 changed files with 201 additions and 89 deletions

View File

@ -55,6 +55,60 @@ function formatSapDate(value) {
return str;
}
function parseSapResponse(body) {
if (!body) return null;
if (typeof body === "object") return body;
let parsed = JSON.parse(body);
if (typeof parsed === "string") parsed = JSON.parse(parsed);
if (parsed?.data && typeof parsed.data === "object" && !Array.isArray(parsed.data)) {
return parsed.data;
}
return parsed;
}
function extractSapPoNumber(resdata) {
if (!resdata || typeof resdata !== "object") return "";
const directKeys = ["NUMBER", "EXPPURCHASEORDER", "exppurchaseorder", "Number"];
for (const key of directKeys) {
if (resdata[key] != null && String(resdata[key]).trim() !== "") {
return String(resdata[key]).trim();
}
}
const matchedKey = Object.keys(resdata).find(
(key) => key.trim().toUpperCase() === "EXPPURCHASEORDER" && resdata[key],
);
if (matchedKey) return String(resdata[matchedKey]).trim();
const returns = resdata.RETURN || resdata.return || [];
if (!Array.isArray(returns)) return "";
const successReturn = returns.find((entry) => entry.TYPE === "S" && entry.MESSAGE_V2);
if (successReturn?.MESSAGE_V2) return String(successReturn.MESSAGE_V2).trim();
return "";
}
function collectSapErrors(resdata) {
const returns = resdata?.RETURN || resdata?.return || [];
if (!Array.isArray(returns)) return { errcode: "", errmsg: "" };
let errcode = "";
let errmsg = "";
returns.forEach((entry) => {
if (entry.TYPE === "E") {
errcode += entry.NUMBER + "\n\n";
errmsg += entry.MESSAGE + "\n\n";
}
});
return {
errcode: errcode.trim(),
errmsg: errmsg.trim(),
};
}
exports.getListVendor = (req, res) => {
try {
poadapter.queryVendorList(req, function (err, data) {
@ -257,46 +311,37 @@ exports.createPOSAPold = (req, res) => {
apireshandler.message = error.toString();
poadapter.sendResponse(400, apireshandler, res);
} else {
// console.log(response.body);
var resdata = JSON.parse(response.body);
var errcode = "";
var errmsg = "";
var resdata = parseSapResponse(response.body);
const poNumber = extractSapPoNumber(resdata);
const { errcode, errmsg } = collectSapErrors(resdata);
resdata["RETURN"].forEach((e) => {
if (e.TYPE == "E") {
errcode += e.NUMBER + "\n\n";
errmsg += e.MESSAGE + "\n\n";
}
});
// Hapus newline terakhir biar rapi
errcode = errcode.trim();
errmsg = errmsg.trim();
if (errmsg.length > 0) {
const savePoResult = (statusCodeOverride) =>
poadapter.queryUpdatePoNumberold(
req,
resdata["NUMBER"] || resdata["EXPPURCHASEORDER"],
poNumber,
errmsg,
function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
data.success = false;
data.meta.message = errmsg;
poadapter.sendResponse(500, data, res);
},
);
} else {
poadapter.queryUpdatePoNumberold(
req,
resdata["NUMBER"] || resdata["EXPPURCHASEORDER"],
errmsg,
function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
let statusCode =
statusCodeOverride ?? (data != null ? data.meta.code : 200);
if (err) statusCode = 500;
if (statusCodeOverride === 500) {
data.success = false;
data.meta.message = errmsg;
}
poadapter.sendResponse(statusCode, data, res);
},
);
if (errmsg.length > 0) {
savePoResult(500);
} else if (!poNumber) {
apireshandler.success = false;
apireshandler.meta.code = 500;
apireshandler.meta.message =
"PO created in SAP but PO number was not returned";
poadapter.sendResponse(500, apireshandler, res);
} else {
savePoResult();
}
// if(errcode.length>0){