From 0d5bf4623c588f2dc04f42fb4edd7604dc99198e Mon Sep 17 00:00:00 2001 From: Iki Date: Thu, 11 Jun 2026 16:10:50 +0900 Subject: [PATCH] fixing PO --- controllers/po.js | 28 ++++++++++++++++++++++++---- controllers/pr.js | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/controllers/po.js b/controllers/po.js index 69925b7..ec290eb 100644 --- a/controllers/po.js +++ b/controllers/po.js @@ -12,6 +12,21 @@ var fs = require("fs"); const SAPAdapter = require("../adapter/sapadapter.js"); const sapadapter = new SAPAdapter(); +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, ""); + 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 str; +} + exports.getListVendor = (req, res) => { try { poadapter.queryVendorList(req, function (err, data) { @@ -133,12 +148,15 @@ exports.createPOSAPold = (req, res) => { identifyprojectnumber = "", } = data; + const createdBy = req.nik || req.body.createdby; + const creatDate = formatSapDate(req.body.createdate) || podate; + // ===== HEADER PARAM ===== const headerParams = { comp_code: "1603", doc_type: "POTL", - creat_date: req.body.createdate, - created_by: req.body.createdby, + creat_date: creatDate, + created_by: createdBy, vendor: vendorid, purch_org: "1603", pur_group: "TIL", @@ -156,6 +174,7 @@ exports.createPOSAPold = (req, res) => { const net_price = req.body.totalpo; const final_inv = "X"; const gr_basediv = "X"; + const sloc = "TIL1"; const poitem = [ preq_item, @@ -167,9 +186,10 @@ exports.createPOSAPold = (req, res) => { gr_basediv, prnumber, preq_item, + sloc, ].join("|"); - const poschedule = [preq_item, vper_end].join("|"); + const poschedule = [preq_item, podate].join("|"); // ===== BUILD QUERY ===== const params = new URLSearchParams({ @@ -193,7 +213,7 @@ exports.createPOSAPold = (req, res) => { ref_code: prnumber, request: JSON.stringify(resuri), request_at: new Date(), - request_by: req.body.createdby, + request_by: createdBy, response: "", response_at: "", url, diff --git a/controllers/pr.js b/controllers/pr.js index e9d9a26..494ac79 100644 --- a/controllers/pr.js +++ b/controllers/pr.js @@ -9,6 +9,25 @@ const request = require("request"); const SAPAdapter = require("../adapter/sapadapter.js"); const sapadapter = new SAPAdapter(); +const db = require("../config/dbproc.js"); + +function getEmployeeFullname(nik, callback) { + if (!nik) { + callback(null, ""); + return; + } + const qry = + "select fullname from dbssotcel.tbl_employee where nik='" + + nik + + "' and isdeleted=0 limit 1"; + db.query(qry, [], function (err, results) { + if (err || !results || results.length === 0) { + callback(null, nik); + } else { + callback(null, results[0].fullname); + } + }); +} function buildPipeString(length, mapping = {}) { const arr = Array(length).fill(""); @@ -30,11 +49,11 @@ function buildPrAccount({prNo, qtyAcc, prDate, budget, costCenter, profitCenter} }); } -function buildPrItem({prNo, shortText, qty, unit, price, prDate}) { +function buildPrItem({prNo, shortText, qty, unit, price, prDate, requesterName}) { return buildPipeString(80, { 0: prNo, 3: "TIL", - 4: "Putra", + 4: requesterName || "", 5: shortText, 13: "1603", 14: "TIL1", @@ -207,6 +226,8 @@ exports.setUpdateStatusProld = (req, res) => { pradapter.sendResponse(statusCode, data, res); } else { var rsdata = JSON.parse(JSON.stringify(data)); + const creatorNik = req.nik || rsdata.data[0]["iby"]; + getEmployeeFullname(creatorNik, function (err, requesterName) { // console.log(rsdata["data"]); let pr_type = "PRTL"; let x_pr_type = "X"; @@ -237,7 +258,9 @@ exports.setUpdateStatusProld = (req, res) => { // let pr_item="00010|||120|Putra|testcreatePR|||||||||1603||TrackNo1|ZSRV||1|BH||20130727||20130727|||1000|1||J||||||||1603|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||D|"; let pr_item = pr_no + - "|||TIL|Putra|" + + "|||TIL|" + + requesterName + + "|" + pr_shorttext + "|||||||||1603|TIL1|TrackNo1|ZSRV||" + pr_qtyitem + @@ -272,7 +295,7 @@ exports.setUpdateStatusProld = (req, res) => { ref_code: rsdata.data[0]["justificationnumber"] ?? idxpr, request: JSON.stringify(resuri), request_at: new Date(), - request_by: "999999", + request_by: creatorNik, response: "", response_at: "", url: @@ -325,6 +348,7 @@ exports.setUpdateStatusProld = (req, res) => { }); //pradapter.sendResponse(statusCode,data, res); + }); } }); } else { @@ -595,6 +619,8 @@ exports.changePRSAPold = (req, res) => { pradapter.sendResponse(statusCode, data, res); } else { var rsdata = JSON.parse(JSON.stringify(data)); + const creatorNik = req.nik || rsdata.data[0]["iby"]; + getEmployeeFullname(creatorNik, function (err, requesterName) { // console.log(rsdata["data"]); let pr_no = "00010"; let pr_qtyacc = "01"; @@ -624,7 +650,9 @@ exports.changePRSAPold = (req, res) => { // let pr_item="00010|||120|Putra|testcreatePR|||||||||1603||TrackNo1|ZSRV||1|BH||20130727||20130727|||1000|1||J||||||||1603|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||D|"; let pr_item = pr_no + - "|||120|Putra|" + + "|||120|" + + requesterName + + "|" + pr_shorttext + "|||||||||1603||TrackNo1|ZSRV||" + pr_qtyitem + @@ -659,7 +687,7 @@ exports.changePRSAPold = (req, res) => { ref_code: pr_number, request: JSON.stringify(resuri), request_at: new Date(), - request_by: "999999", + request_by: creatorNik, response: "", response_at: "", url: @@ -715,6 +743,7 @@ exports.changePRSAPold = (req, res) => { }); //pradapter.sendResponse(statusCode,data, res); + }); } }); } catch (err) {