From eb4b84e8f9fce5ab92fcc3db89cea31849765f2a Mon Sep 17 00:00:00 2001 From: Iki Date: Tue, 16 Jun 2026 14:58:57 +0900 Subject: [PATCH] upd --- adapter/poadapter.js | 179 +++++++++++++++++++++++++++---------------- 1 file changed, 113 insertions(+), 66 deletions(-) diff --git a/adapter/poadapter.js b/adapter/poadapter.js index 58fc936..3336bf2 100644 --- a/adapter/poadapter.js +++ b/adapter/poadapter.js @@ -1414,6 +1414,13 @@ class PoAdapter extends Adapter { } } + parseBoqIds(idxpoboq) { + return String(idxpoboq || "") + .split(",") + .map((id) => id.trim()) + .filter((id) => id && id !== "0"); + } + async queryUpdatePoNumberold(req, posapnumber, sapmessage, callback) { try { var apires = this.getApiResultDefined(); @@ -1421,8 +1428,10 @@ class PoAdapter extends Adapter { var idxpoboq = req.body.idxpoboq; var nik = req.nik || req.body.nik || ""; const poNumber = String(posapnumber || "").trim(); - const finalStatus = 0; - const finalStatusDescription = "Submitted"; + // status 1 = Create PO SAP — required for approval-po list (filters status 1-6) + const finalStatus = req.body.status ?? 1; + const finalStatusDescription = + req.body.statusdescription || "Create PO SAP"; const safeSapMessage = String(sapmessage || "").replace(/'/g, "''"); const safePoNumber = poNumber.replace(/'/g, "''"); @@ -1433,95 +1442,133 @@ class PoAdapter extends Adapter { return; } - const boqIds = String(idxpoboq || "") - .split(",") - .map((id) => id.trim()) - .filter((id) => id && id !== "0"); + const self = this; + let boqIds = self.parseBoqIds(idxpoboq); - const qryPo = - "update tbl_po set ponumber='" + - safePoNumber + - "',status='" + - finalStatus + - "',statusdescription='" + - finalStatusDescription + - "',sapmessages='" + - safeSapMessage + - "',uby='" + - nik + - "',udt=now() where _idx='" + - idxpo + - "' and isdeleted=0"; - - db.query(qryPo, [], function (err, result) { - if (err) { - apires.meta.message = err.toString(); - apires.meta.code = 500; - callback("err", apires); - return; - } - - if (!result || result.affectedRows === 0) { - apires.meta.code = 500; - apires.meta.message = "PO header not found for update"; - callback("err", apires); - return; - } - - let qryBoq = - "update tbl_poboq set ponumber='" + + const persistPoNumber = (resolvedBoqIds) => { + const qryPo = + "update tbl_po set ponumber='" + safePoNumber + "',status='" + finalStatus + "',statusdescription='" + finalStatusDescription + + "',sapmessages='" + + safeSapMessage + "',uby='" + nik + - "',udt=now() where idxheader='" + + "',udt=now() where _idx='" + idxpo + "' and isdeleted=0"; - if (boqIds.length > 0) { - qryBoq += " and _idx in (" + boqIds.join(",") + ")"; - } - db.query(qryBoq, [], function (errBoq) { - if (errBoq) { - apires.meta.message = errBoq.toString(); + db.query(qryPo, [], function (err, result) { + if (err) { + apires.meta.message = err.toString(); apires.meta.code = 500; callback("err", apires); return; } - let qrySelect = - boqIds.length > 0 - ? "select idxpoboq,ponumber from vw_poboq where idxpoboq in(" + - boqIds.join(",") + - ")" - : "select _idx as idxpoboq, ponumber from tbl_poboq where idxheader='" + - idxpo + - "' and isdeleted=0"; + if (!result || result.affectedRows === 0) { + apires.meta.code = 500; + apires.meta.message = "PO header not found for update"; + callback("err", apires); + return; + } - db.query(qrySelect, [], function (errSelect, result1) { - if (errSelect) { - apires.meta.message = errSelect.toString(); + let qryBoq = + "update tbl_poboq set ponumber='" + + safePoNumber + + "',status='" + + finalStatus + + "',statusdescription='" + + finalStatusDescription + + "',uby='" + + nik + + "',udt=now() where idxheader='" + + idxpo + + "' and isdeleted=0"; + if (resolvedBoqIds.length > 0) { + qryBoq += " and _idx in (" + resolvedBoqIds.join(",") + ")"; + } + + db.query(qryBoq, [], function (errBoq, boqResult) { + if (errBoq) { + apires.meta.message = errBoq.toString(); apires.meta.code = 500; callback("err", apires); return; } - apires.success = true; - apires.data = JSON.parse(JSON.stringify(result1)); - if (apires.data.length === 0) { - apires.data = [{ idxpoboq: boqIds[0] || idxpo, ponumber: poNumber }]; - } else { - apires.data.forEach((row) => { - row.ponumber = poNumber; - }); + if (!boqResult || boqResult.affectedRows === 0) { + apires.meta.code = 500; + apires.meta.message = + "BOQ line not found for update. Save vendor PO line before creating SAP PO number."; + callback("err", apires); + return; } - callback(null, apires); + + let qrySelect = + resolvedBoqIds.length > 0 + ? "select idxpoboq,ponumber from vw_poboq where idxpoboq in(" + + resolvedBoqIds.join(",") + + ")" + : "select _idx as idxpoboq, ponumber from tbl_poboq where idxheader='" + + idxpo + + "' and isdeleted=0"; + + db.query(qrySelect, [], function (errSelect, result1) { + if (errSelect) { + apires.meta.message = errSelect.toString(); + apires.meta.code = 500; + callback("err", apires); + return; + } + + apires.success = true; + apires.data = JSON.parse(JSON.stringify(result1)); + if (apires.data.length === 0) { + apires.data = [ + { + idxpoboq: resolvedBoqIds[0] || idxpo, + ponumber: poNumber, + }, + ]; + } else { + apires.data.forEach((row) => { + row.ponumber = poNumber; + }); + } + callback(null, apires); + }); }); }); - }); + }; + + if (boqIds.length > 0) { + persistPoNumber(boqIds); + return; + } + + db.query( + "select idxpoboq from tbl_po where _idx='" + + idxpo + + "' and isdeleted=0 limit 1", + [], + function (errLookup, rows) { + if (errLookup) { + apires.meta.message = errLookup.toString(); + apires.meta.code = 500; + callback("err", apires); + return; + } + + if (rows && rows.length > 0 && rows[0].idxpoboq) { + boqIds = self.parseBoqIds(rows[0].idxpoboq); + } + persistPoNumber(boqIds); + }, + ); } catch (err) { apires.meta.code = 500; apires.meta.message = err.toString();