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