Files
backend-Eprocurement/controllers/pr.js
Rizki 7e3f6dd426 upd
2026-01-09 14:45:01 +07:00

699 lines
22 KiB
JavaScript

const PrAdapter = require("../adapter/pradapter.js");
const pradapter = new PrAdapter();
const Controllers = require("./controller.js");
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
const baseurlsap = "http://" + process.env.HOSTSAP + "/sapapi/index.php/api";
const apikeysap = "befea63a-7c47-4323-afea-968a3168fe0a";
const request = require("request");
function buildPipeString(length, mapping = {}) {
const arr = Array(length).fill("");
Object.keys(mapping).forEach((index) => {
arr[index] = mapping[index];
});
return arr.join("|");
}
function buildPrAccount({prNo, qtyAcc, prDate, budget, costCenter, profitCenter}) {
return buildPipeString(40, {
0: prNo,
1: qtyAcc,
3: prDate,
7: budget,
8: "TIL1",
9: costCenter,
17: profitCenter,
});
}
function buildPrItem({prNo, shortText, qty, unit, price, prDate}) {
return buildPipeString(80, {
0: prNo,
3: "120",
4: "Putra",
5: shortText,
13: "1603",
15: "TrackNo1",
16: "ZSRV",
18: qty,
19: unit,
21: prDate,
23: prDate,
25: price,
26: "1",
28: "J",
36: "1603",
79: "D",
});
}
exports.getListJustification = (req, res) => {
try {
pradapter.queryPrJustificationList(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [18] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.getListPR = (req, res) => {
try {
pradapter.queryPrPRList(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [18] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.gettrxid = (req, res) => {
try {
pradapter.queryGetTrxIdPr(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [18] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.getListPr = (req, res) => {
try {
pradapter.queryPrList(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [167] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.setNewPr = (req, res) => {
try {
pradapter.queryNewPr(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [167] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.getDetailPr = (req, res) => {
try {
pradapter.queryPrDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [93] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.setUpdatePr = (req, res) => {
try {
pradapter.queryUpdatePr(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [167] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.setUpdateStatusPr = (req, res) => {
try {
let status = req.body.status;
let idxpr = req.body.idxpr;
if (status == 0) {
// if(0==1){
req.query.id = idxpr;
pradapter.queryUpdateStatusPr(req, req.body.prnumber, "", function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} else {
pradapter.queryUpdateStatusPr(req, "00000", "", function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
}
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [123] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.setUpdateStatusProld = (req, res) => {
try {
let status = req.body.status;
let idxpr = req.body.idxpr;
if (status == 0) {
// if(0==1){
req.query.id = idxpr;
pradapter.queryPrDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) {
statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
} else {
// Normalize response data
const rsdata = JSON.parse(JSON.stringify(data));
const row = rsdata.data[0];
/* ================= PR CONSTANT ================= */
const PR_TYPE = "PRTL";
const X_PR_TYPE = "X";
const PR_NO = "00010";
const PR_QTY_ACC = "01";
/* ================= BUILD PR ACCOUNT ================= */
const prAccount = buildPrAccount({
prNo: PR_NO,
qtyAcc: PR_QTY_ACC,
prDate: row.prdateYmd, // YYYYMMDD
budget: `00${row.glaccount}`,
costCenter: row.costcenter,
profitCenter: "TIL1A01",
});
/* ================= BUILD PR ITEM ================= */
const prItem = buildPrItem({
prNo: PR_NO,
shortText: row.description,
qty: row.qty,
unit: row.unit,
price: row.netprice,
prDate: row.prdateYmd,
});
/* ================= BUILD SAP API URL ================= */
const sapPrUrl =
`${process.env.SAP_API_BASE_URL}/createPr` +
`?pr_type=${PR_TYPE}` +
`&x_pr_type=${X_PR_TYPE}` +
`&praccount[]=${prAccount}` +
`&pritem[]=${prItem}`;
/* ================= REQUEST OPTIONS ================= */
const options = {
method: "POST",
url: sapPrUrl,
timeout: 10000,
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.SAP_API_KEY,
},
};
console.log(options);
request(options, function (error, response) {
// console.log('response.body', response.body)
if (error) {
apireshandler.message = error.toString();
pradapter.sendResponse(400, apireshandler, res);
} else {
var resdata = JSON.parse(response.body);
var errcode = "";
var errmsg = "";
resdata["RETURN"].forEach((e) => {
if (e.TYPE == "E") {
errcode += e.NUMBER + ", ";
errmsg += e.MESSAGE + " & ";
}
});
errcode = errcode.substring(0, errcode.length - 2);
errmsg = errmsg.substring(0, errmsg.length - 3);
if (errcode.length > 0) {
pradapter.queryUpdateSapMessage(req, errmsg, function(err, data) {
apireshandler.meta.code = errcode;
apireshandler.meta.message = "Failed to Create PR SAP";
pradapter.sendResponse(200, apireshandler, res);
})
} else {
pradapter.queryUpdateStatusPr(req, resdata["NUMBER"], errmsg, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
// apireshandler.success = true;
}
}
});
//pradapter.sendResponse(statusCode,data, res);
}
});
} else {
pradapter.queryUpdateStatusPr(req, "00000", "", function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
}
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [123] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.deletePR = (req, res) => {
try {
pradapter.queryDeletePr(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [138] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.approvedPR = (req, res) => {
try {
pradapter.queryApprovedPR(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [153] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.getprmanagementlist = (req, res) => {
try {
pradapter.queryPrManagementList(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [260] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.getprmanagementlistdetail = (req, res) => {
try {
pradapter.queryPrManagementListDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [275] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.releasePRSAP = (req, res) => {
try {
let idxpr = req.body.idxpr;
req.query.id = idxpr;
pradapter.queryPrDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) {
statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
} else {
var rsdata = JSON.parse(JSON.stringify(data));
let prnumber = rsdata.data[0]["prnumber"]; //Ymd
let resuri = {
"method": "POST",
// 'url': baseurl+'signon',
"url": baseurlsap + "/releasePr?number=" + prnumber + "&rel_code=A1",
"headers": {
"Content-Type": "application/json",
"x-api-key": apikeysap,
},
// form: formjson,
};
// console.log(resuri);
request(resuri, function (error, response) {
if (error) {
// console.log(error);
apireshandler.message = error.toString();
pradapter.sendResponse(400, apireshandler, res);
} else {
console.log(response.body);
var resdata = JSON.parse(response.body);
var errcode = "";
var errmsg = "";
resdata["RETURN"].forEach((e) => {
if (e.TYPE == "E") {
errcode += e.NUMBER + ", ";
errmsg += e.MESSAGE + " & ";
}
});
errcode = errcode.substring(0, errcode.length - 2);
errmsg = errmsg.substring(0, errmsg.length - 3);
if (errcode.length > 0) {
apireshandler.meta.code = errcode;
apireshandler.meta.message = errmsg;
// pradapter.sendResponse(200, apireshandler, res);
} else {
apireshandler.success = true;
}
pradapter.queryUpdateStatusPr(req, "", errmsg, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
//data.data = resdata;
apireshandler.meta.code = statusCode;
apireshandler.data = data.data;
pradapter.sendResponse(statusCode, apireshandler, res);
});
}
});
}
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [348] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.unreleasePRSAP = (req, res) => {
try {
let idxpr = req.body.idxpr;
req.query.id = idxpr;
pradapter.queryPrDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) {
statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
} else {
var rsdata = JSON.parse(JSON.stringify(data));
let prnumber = rsdata.data[0]["prnumber"]; //Ymd
let resuri = {
"method": "POST",
// 'url': baseurl+'signon',
"url": baseurlsap + "/unreleasePr?number=" + prnumber + "&rel_code=A1",
"headers": {
"Content-Type": "application/json",
"x-api-key": apikeysap,
},
// form: formjson,
};
// console.log(resuri);
request(resuri, function (error, response) {
if (error) {
// console.log(error);
apireshandler.message = error.toString();
pradapter.sendResponse(400, apireshandler, res);
} else {
console.log(response.body);
var resdata = JSON.parse(response.body);
var errcode = "";
var errmsg = "";
resdata["RETURN"].forEach((e) => {
if (e.TYPE == "E") {
errcode += e.NUMBER + ", ";
errmsg += e.MESSAGE + " & ";
}
});
errcode = errcode.substring(0, errcode.length - 2);
errmsg = errmsg.substring(0, errmsg.length - 3);
if (errcode.length > 0) {
apireshandler.meta.code = errcode;
apireshandler.meta.message = errmsg;
// pradapter.sendResponse(200, apireshandler, res);
} else {
apireshandler.success = true;
}
// else{
// pradapter.queryUpdateStatusPr(req,prnumber, errmsg, function(err,data){
// let statusCode = data!=null ? data.meta.code : 200 ;
// if(err) statusCode = 500;
// pradapter.sendResponse(statusCode,data, res);
// });
// }
pradapter.queryUpdateStatusPr(req, "", errmsg, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
//data.data = resdata;
apireshandler.meta.code = statusCode;
apireshandler.data = data.data;
pradapter.sendResponse(statusCode, apireshandler, res);
});
}
});
}
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [413] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.changePRSAP = (req, res) => {
try {
pradapter.queryUpdateStatusPr(req, "", "", function (err, data) {
console.log(data);
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [522] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.changePRSAPold = (req, res) => {
try {
let idxpr = req.body.idxpr;
req.query.id = idxpr;
pradapter.queryPrDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) {
statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
} else {
var rsdata = JSON.parse(JSON.stringify(data));
// console.log(rsdata["data"]);
let pr_no = "00010";
let pr_qtyacc = "01";
let pr_number = rsdata.data[0]["prnumber"]; //Ymd
let pr_date = rsdata.data[0]["prdateYmd"]; //Ymd
let pr_budget = "00" + rsdata.data[0]["glaccount"];
let pr_costcenter = rsdata.data[0]["costcenter"];
let pr_profitcenter = "TIL1A01"; //rsdata.data[0]['profitcenter'];
let pr_shorttext = rsdata.data[0]["description"];
let pr_qtyitem = rsdata.data[0]["qty"];
let pr_unititem = rsdata.data[0]["unit"];
let pr_priceitem = rsdata.data[0]["netprice"];
// let pr_account="00010|01||20130727||||0051331006|TIL1|TIL1A01|||||||||||TIL1A01||||||||||||||||||||||";
let pr_account =
pr_no +
"|" +
pr_qtyacc +
"||" +
pr_date +
"||||" +
pr_budget +
"|TIL1|" +
pr_costcenter +
"|||||||||||" +
pr_profitcenter +
"||||||||||||||||||||||";
// 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|" +
pr_shorttext +
"|||||||||1603||TrackNo1|ZSRV||" +
pr_qtyitem +
"|" +
pr_unititem +
"||" +
pr_date +
"||" +
pr_date +
"|||" +
pr_priceitem +
"|1||J||||||||1603||||||||||||||||||||||||||||||||||||||||USD|||||||||||||||||||D|";
let resuri = {
"method": "POST",
// 'url': baseurl+'signon',
"url":
baseurlsap +
"/changePR?number=" +
pr_number +
"&praccount[]=" +
pr_account +
"&pritem[]=" +
pr_item,
"headers": {
"Content-Type": "application/json",
"x-api-key": apikeysap,
},
// form: formjson,
};
// console.log(resuri);
request(resuri, function (error, response) {
if (error) {
console.log(error);
apireshandler.message = error.toString();
pradapter.sendResponse(400, apireshandler, res);
} else {
// console.log("Change pR : "+response.body);
var resdata = JSON.parse(response.body);
var errcode = "";
var errmsg = "";
resdata["RETURN"].forEach((e) => {
// console.log(e);
if (e.TYPE == "E") {
errcode += e.NUMBER + ", ";
errmsg += e.MESSAGE + " & ";
}
});
errcode = errcode.substring(0, errcode.length - 2);
errmsg = errmsg.substring(0, errmsg.length - 3);
if (errcode.length > 0) {
apireshandler.meta.code = errcode;
apireshandler.meta.message = errmsg;
// pradapter.sendResponse(200, apireshandler, res);
} else {
apireshandler.success = true;
}
pradapter.queryUpdateStatusPr(req, "", errmsg, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
//data.data = resdata;
apireshandler.meta.code = statusCode;
apireshandler.data = data.data;
pradapter.sendResponse(statusCode, apireshandler, res);
});
}
});
//pradapter.sendResponse(statusCode,data, res);
}
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [522] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};
exports.deletePRSAP = (req, res) => {
try {
let idxpr = req.body.idxpr;
req.query.id = idxpr;
pradapter.queryPrDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) {
statusCode = 500;
pradapter.sendResponse(statusCode, data, res);
} else {
var rsdata = JSON.parse(JSON.stringify(data));
let prnumber = rsdata.data[0]["prnumber"]; //Ymd
let resuri = {
"method": "POST",
// 'url': baseurl+'signon',
"url": baseurlsap + "/deletePr?number=" + prnumber,
"headers": {
"Content-Type": "application/json",
"x-api-key": apikeysap,
},
// form: formjson,
};
// console.log(resuri);
request(resuri, function (error, response) {
if (error) {
// console.log(error);
apireshandler.message = error.toString();
pradapter.sendResponse(400, apireshandler, res);
} else {
// console.log(response.body);
var resdata = JSON.parse(response.body);
var errcode = "";
var errmsg = "";
resdata["RETURN"].forEach((e) => {
if (e.TYPE == "E") {
errcode += e.NUMBER + ", ";
errmsg += e.MESSAGE + " & ";
}
});
errcode = errcode.substring(0, errcode.length - 2);
errmsg = errmsg.substring(0, errmsg.length - 3);
if (errcode.length > 0) {
apireshandler.meta.code = errcode;
apireshandler.meta.message = errmsg;
// pradapter.sendResponse(200, apireshandler, res);
} else {
apireshandler.success = true;
}
// else{
// pradapter.queryUpdateStatusPr(req,prnumber, errmsg, function(err,data){
// let statusCode = data!=null ? data.meta.code : 200 ;
// if(err) statusCode = 500;
// pradapter.sendResponse(statusCode,data, res);
// });
// }
pradapter.queryUpdateStatusPr(req, "", errmsg, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
//data.data = resdata;
apireshandler.meta.code = statusCode;
apireshandler.data = data.data;
pradapter.sendResponse(statusCode, apireshandler, res);
});
}
});
}
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [413] : PR controller, " + err.toString();
pradapter.sendResponse(502, apireshandler, res);
}
};