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 ================= */
|
/* ================= UPDATE ================= */
|
||||||
async queryUpdate(req, callback) {
|
async queryUpdate(req, callback) {
|
||||||
var apires = this.getApiResultDefined();
|
var apires = this.getApiResultDefined();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const id = req.params.id;
|
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
|
UPDATE tbl_sap_connections
|
||||||
SET sap_id = ?, host = ?, sysnr = ?, client = ?, codepage = ?, ket_sap = ?,
|
SET sap_id = ?, host = ?, sysnr = ?, client = ?, codepage = ?, ket_sap = ?,
|
||||||
sap_user = ?, sap_password = ?, aktivasi = ?,
|
sap_user = ?, sap_password = ?, aktivasi = ?,
|
||||||
@ -148,35 +252,40 @@ class SAPAccountAdapter extends Adapter {
|
|||||||
WHERE id = ? AND deleted_at IS NULL
|
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(
|
/* 4️⃣ Jika sebelumnya Active → activate ulang SAP */
|
||||||
qry,
|
if (currentStatus === "Active") {
|
||||||
[
|
return this.callSapActivateById(id, req.body.nik, callback);
|
||||||
sap_id,
|
}
|
||||||
host,
|
|
||||||
sysnr,
|
/* 5️⃣ Kalau Not_Active → selesai */
|
||||||
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 {
|
|
||||||
apires.success = true;
|
apires.success = true;
|
||||||
apires.data = {affectedRows: result.affectedRows};
|
apires.data = {affectedRows: result.affectedRows};
|
||||||
callback(null, apires);
|
callback(null, apires);
|
||||||
}
|
},
|
||||||
},
|
);
|
||||||
);
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
apires.meta.code = 500;
|
apires.meta.code = 500;
|
||||||
apires.meta.message = err.toString();
|
apires.meta.message = err.toString();
|
||||||
@ -255,93 +364,14 @@ class SAPAccountAdapter extends Adapter {
|
|||||||
|
|
||||||
/* ================= ACTIVATE ================= */
|
/* ================= ACTIVATE ================= */
|
||||||
async queryActivate(req, callback) {
|
async queryActivate(req, callback) {
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
try {
|
||||||
const id = req.params.id;
|
const id = req.params.id;
|
||||||
|
const nik = req.body.nik || "system";
|
||||||
|
|
||||||
/* 1️⃣ Ambil SAP connection dari DB */
|
// reuse logic yang sama
|
||||||
let qry = `
|
return this.callSapActivateById(id, nik, callback);
|
||||||
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);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
const apires = this.getApiResultDefined();
|
||||||
apires.meta.code = 500;
|
apires.meta.code = 500;
|
||||||
apires.meta.message = err.toString();
|
apires.meta.message = err.toString();
|
||||||
callback("error", apires);
|
callback("error", apires);
|
||||||
|
|||||||
Reference in New Issue
Block a user