This commit is contained in:
Rizki
2026-01-09 15:40:05 +07:00
parent 7e3f6dd426
commit 638ff55bff

View File

@ -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,10 +252,8 @@ class SAPAccountAdapter extends Adapter {
WHERE id = ? AND deleted_at IS NULL
`;
const password = Buffer.from(sap_password, "utf8").toString("base64");
db.query(
qry,
updateQry,
[
sap_id,
host,
@ -160,23 +262,30 @@ class SAPAccountAdapter extends Adapter {
codepage,
ket_sap,
sap_user,
password,
encodedPassword,
aktivasi,
req.body.nik || "system",
id,
],
function (err, result) {
if (err) {
(err2, result) => {
if (err2) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.meta.message = err2.toString();
return callback("err", apires);
}
/* 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);