update PO
This commit is contained in:
@ -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){
|
||||
|
||||
Reference in New Issue
Block a user