From 638ff55bffd9ab7020af33a738a44e32a023045a Mon Sep 17 00:00:00 2001 From: Rizki Date: Fri, 9 Jan 2026 15:40:05 +0700 Subject: [PATCH] upd --- adapter/sapaccountadapter.js | 250 ++++++++++++++++++++--------------- 1 file changed, 140 insertions(+), 110 deletions(-) diff --git a/adapter/sapaccountadapter.js b/adapter/sapaccountadapter.js index 963c5d5..4535ec1 100644 --- a/adapter/sapaccountadapter.js +++ b/adapter/sapaccountadapter.js @@ -133,14 +133,118 @@ class SAPAccountAdapter extends Adapter { } } + async callSapActivateById(id, nik, callback) { + var apires = this.getApiResultDefined(); + + let qry = ` + SELECT * + FROM tbl_sap_connections + WHERE id = ? + AND deleted_at IS NULL + LIMIT 1 + `; + + db.query(qry, [id], (err, result) => { + if (err || result.length === 0) { + apires.meta.code = 404; + apires.meta.message = "SAP Connection not found"; + return callback("err", apires); + } + + const sap = result[0]; + + // decode password sebelum kirim ke SAP + const decodedPassword = Buffer.from(sap.sap_password, "base64").toString("utf8"); + + const sapUrl = + process.env.SAP_API_BASE_URL + + "/sapConnection" + + `?user=${sap.sap_user}` + + `&password=${decodedPassword}` + + `&sysnr=${sap.sysnr}` + + `&client=${sap.client}` + + `&codepage=${sap.codepage}` + + `&ket_sap=${sap.ket_sap}` + + `&host=${encodeURIComponent(sap.host)}`; + + const options = { + method: "POST", + url: sapUrl, + timeout: 10000, + headers: { + "x-api-key": process.env.SAP_API_KEY, + }, + }; + + request(options, (error, response, body) => { + if (error || response.statusCode !== 200) { + apires.meta.code = 500; + apires.meta.message = "SAP API activate failed"; + apires.data = body; + return callback("err", apires); + } + + // set semua Not_Active + db.query(`UPDATE tbl_sap_connections SET status='Not_Active'`, [], () => { + // set Active untuk ID ini + db.query( + `UPDATE tbl_sap_connections + SET status='Active', + updated_at=NOW(), + updated_by=? + WHERE id=?`, + [nik || "system", id], + (err2) => { + if (err2) { + apires.meta.code = 500; + apires.meta.message = err2.toString(); + return callback("err", apires); + } + + apires.success = true; + apires.data = {sap_id: sap.sap_id}; + callback(null, apires); + }, + ); + }); + }); + }); + } + /* ================= UPDATE ================= */ async queryUpdate(req, callback) { var apires = this.getApiResultDefined(); + try { const id = req.params.id; - const {sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi} = req.body; + const {sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi} = + req.body; - let qry = ` + /* 1️⃣ Ambil data existing (untuk cek status) */ + const detailQry = ` + SELECT status, sap_password + FROM tbl_sap_connections + WHERE id = ? + AND deleted_at IS NULL + LIMIT 1 + `; + + db.query(detailQry, [id], (err, rows) => { + if (err || rows.length === 0) { + apires.meta.code = 404; + apires.meta.message = "SAP Connection not found"; + return callback("err", apires); + } + + const currentStatus = rows[0].status; + + /* 2️⃣ Handle password (jangan overwrite kalau kosong) */ + const encodedPassword = sap_password + ? Buffer.from(sap_password, "utf8").toString("base64") + : rows[0].sap_password; + + /* 3️⃣ Update data */ + const updateQry = ` UPDATE tbl_sap_connections SET sap_id = ?, host = ?, sysnr = ?, client = ?, codepage = ?, ket_sap = ?, sap_user = ?, sap_password = ?, aktivasi = ?, @@ -148,35 +252,40 @@ class SAPAccountAdapter extends Adapter { WHERE id = ? AND deleted_at IS NULL `; - const password = Buffer.from(sap_password, "utf8").toString("base64"); + db.query( + updateQry, + [ + sap_id, + host, + sysnr, + client, + codepage, + ket_sap, + sap_user, + encodedPassword, + aktivasi, + req.body.nik || "system", + id, + ], + (err2, result) => { + if (err2) { + apires.meta.code = 500; + apires.meta.message = err2.toString(); + return callback("err", apires); + } - db.query( - qry, - [ - sap_id, - host, - sysnr, - client, - codepage, - ket_sap, - sap_user, - password, - aktivasi, - req.body.nik || "system", - id, - ], - function (err, result) { - if (err) { - apires.meta.code = 500; - apires.meta.message = err.toString(); - callback("err", apires); - } else { + /* 4️⃣ Jika sebelumnya Active → activate ulang SAP */ + if (currentStatus === "Active") { + return this.callSapActivateById(id, req.body.nik, callback); + } + + /* 5️⃣ Kalau Not_Active → selesai */ apires.success = true; apires.data = {affectedRows: result.affectedRows}; callback(null, apires); - } - }, - ); + }, + ); + }); } catch (err) { apires.meta.code = 500; apires.meta.message = err.toString(); @@ -255,93 +364,14 @@ class SAPAccountAdapter extends Adapter { /* ================= ACTIVATE ================= */ async queryActivate(req, callback) { - var apires = this.getApiResultDefined(); try { const id = req.params.id; + const nik = req.body.nik || "system"; - /* 1️⃣ Ambil SAP connection dari DB */ - let qry = ` - SELECT * - FROM tbl_sap_connections - WHERE id = ? - AND deleted_at IS NULL - LIMIT 1 - `; - - db.query(qry, [id], (err, result) => { - if (err || result.length === 0) { - apires.meta.code = 404; - apires.meta.message = "SAP Connection not found"; - return callback("err", apires); - } - - const sap = result[0]; - - /* 2️⃣ Build SAP API URL (host + query) */ - const sapUrl = - process.env.SAP_API_BASE_URL + - "/sapConnection" + - `?user=${sap.sap_user}` + - `&password=${sap.sap_password}` + - `&sysnr=${sap.sysnr}` + - `&client=${sap.client}` + - `&codepage=${sap.codepage}` + - `&ket_sap=${sap.ket_sap}` + - `&host=${encodeURIComponent(sap.host)}`; - - const options = { - method: "POST", - url: sapUrl, - timeout: 10000, // 10 detik - headers: { - "x-api-key": process.env.SAP_API_KEY, - }, - }; - - /* 3️⃣ Call SAP API */ - request(options, (error, response, body) => { - if (error) { - apires.meta.code = 500; - apires.meta.message = error.toString(); - return callback("err", apires); - } - - if (response.statusCode !== 200) { - apires.meta.code = response.statusCode; - apires.meta.message = "SAP API failed"; - apires.data = body; - return callback("err", apires); - } - - /* 4️⃣ Set semua Not_Active */ - db.query("UPDATE tbl_sap_connections SET status='Not_Active'", [], () => { - /* 5️⃣ Set Active untuk ID terpilih */ - db.query( - `UPDATE tbl_sap_connections - SET status='Active', - updated_at=NOW(), - updated_by=? - WHERE id=?`, - [req.body.nik || "system", id], - (err2) => { - if (err2) { - apires.meta.code = 500; - apires.meta.message = err2.toString(); - return callback("err", apires); - } - - apires.success = true; - apires.data = { - message: "SAP Connection Activated", - sap_id: sap.sap_id, - }; - callback(null, apires); - }, - ); - }); - }); - }); + // reuse logic yang sama + return this.callSapActivateById(id, nik, callback); } catch (err) { + const apires = this.getApiResultDefined(); apires.meta.code = 500; apires.meta.message = err.toString(); callback("error", apires);