upd
This commit is contained in:
@ -90,6 +90,26 @@ function extractSapPoNumber(resdata) {
|
||||
return "";
|
||||
}
|
||||
|
||||
function extractSapMigoNumber(resdata) {
|
||||
if (!resdata || typeof resdata !== "object") return "";
|
||||
|
||||
const headret = resdata.GOODSMVT_HEADRET || resdata.goodsmvt_headret;
|
||||
if (headret?.MAT_DOC) return String(headret.MAT_DOC).trim();
|
||||
if (headret?.mat_doc) return String(headret.mat_doc).trim();
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function extractSapMigoDocYear(resdata) {
|
||||
if (!resdata || typeof resdata !== "object") return "";
|
||||
|
||||
const headret = resdata.GOODSMVT_HEADRET || resdata.goodsmvt_headret;
|
||||
if (headret?.DOC_YEAR) return String(headret.DOC_YEAR).trim();
|
||||
if (headret?.doc_year) return String(headret.doc_year).trim();
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function collectSapErrors(resdata) {
|
||||
const returns = resdata?.RETURN || resdata?.return || [];
|
||||
if (!Array.isArray(returns)) return { errcode: "", errmsg: "" };
|
||||
@ -382,165 +402,150 @@ exports.createPOSAPold = (req, res) => {
|
||||
};
|
||||
|
||||
exports.createMIGOPOSAP = (req, res) => {
|
||||
try {
|
||||
poadapter.queryUpdateMigoNumber(req, function (err, data) {
|
||||
let statusCode = data != null ? data.meta.code : 200;
|
||||
if (err) statusCode = 500;
|
||||
// data.success = false;
|
||||
// data.meta.message = errmsg;
|
||||
poadapter.sendResponse(statusCode, data, res);
|
||||
});
|
||||
} catch (err) {
|
||||
apireshandler.meta.code = 502;
|
||||
apireshandler.meta.message = " [123] : PO controller, " + err.toString();
|
||||
poadapter.sendResponse(502, apireshandler, res);
|
||||
}
|
||||
exports.createMIGOPOSAPold(req, res);
|
||||
};
|
||||
|
||||
exports.createMIGOPOSAPold = (req, res) => {
|
||||
try {
|
||||
poadapter.queryPoManagementListDetail(req, function (err, resdata) {
|
||||
let statusCode = resdata != null ? resdata.meta.code : 200;
|
||||
poadapter.queryPoManagementListDetail(req, function (err, poDetail) {
|
||||
let statusCode = poDetail != null ? poDetail.meta.code : 200;
|
||||
if (err) statusCode = 500;
|
||||
// console.log(resdata.data.length);
|
||||
// poadapter.sendResponse(statusCode,resdata, res);
|
||||
if (resdata.data.length > 0) {
|
||||
const idxpr = resdata.data[0]["idxpr"] ?? 0;
|
||||
|
||||
let gm_code = "01";
|
||||
let pstng_date = resdata.data[0]["podate"].toString().trim();
|
||||
let doc_date = pstng_date;
|
||||
let header_txt = resdata.data[0]["podescription"].toString().trim();
|
||||
// let quantity="1";
|
||||
let quantity = resdata.data[0]["totalqty"].toString().trim();
|
||||
// let po_unit="PKT";
|
||||
let po_unit = resdata.data[0]["units"].toString().trim();
|
||||
let po_number = resdata.data[0]["ponumber"].toString().trim();
|
||||
let po_item = "00010";
|
||||
let item_text = resdata.data[0]["podescription"].toString().trim();
|
||||
let gr_rcpt = "GRreceipt";
|
||||
let unload_pt = "unloadpoint";
|
||||
let movement_ind = "B";
|
||||
let reason = "0001";
|
||||
let location = "160301";
|
||||
let goodsmvt_item =
|
||||
"1603|101|" +
|
||||
quantity +
|
||||
"|" +
|
||||
po_unit +
|
||||
"|" +
|
||||
po_number +
|
||||
"|" +
|
||||
po_item +
|
||||
"|" +
|
||||
item_text +
|
||||
"|";
|
||||
// let goodsmvt_item="1603|101|"+quantity+"|"+po_number+"|"+po_item+"|"+item_text+"|";
|
||||
goodsmvt_item +=
|
||||
gr_rcpt + "|" + unload_pt + "|" + movement_ind + "|" + reason + "|" + location + "|";
|
||||
// let zzctrnum = (resdata.data[0]['identifyprojectnumber']).toString().trim();//req.body.podescription;
|
||||
const url =
|
||||
baseurlsap +
|
||||
"/migo?gm_code=" +
|
||||
gm_code +
|
||||
"&pstng_date=" +
|
||||
pstng_date +
|
||||
"&doc_date=" +
|
||||
doc_date +
|
||||
"&header_txt=" +
|
||||
header_txt +
|
||||
"&goodsmvt_item[]=" +
|
||||
goodsmvt_item;
|
||||
|
||||
let resuri = {
|
||||
"method": "POST",
|
||||
// 'url': baseurlsap+'/createPo',
|
||||
"url": url,
|
||||
"headers": {
|
||||
"Content-Type": "application/json",
|
||||
"x-api-key": apikeysap,
|
||||
},
|
||||
// form: formjson,
|
||||
};
|
||||
|
||||
const logData = {
|
||||
ref_code: resdata.data[0]["ponumber"].toString().trim(),
|
||||
request: JSON.stringify(resuri),
|
||||
request_at: new Date(),
|
||||
request_by: "999999",
|
||||
response: "",
|
||||
response_at: "",
|
||||
url,
|
||||
};
|
||||
|
||||
// http://172.20.25.27/sapapi/index.php/api/migo?gm_code=01&pstng_date=20140404&doc_date=20210404&hea
|
||||
// der_txt=test header&goodsmvt_item[]=1603|101|1|BH|4110000019|00010|line itemtext|GRreceipt|unloadp
|
||||
// oint|B|0001|160301|
|
||||
console.log(resuri);
|
||||
request(resuri, function (error, response) {
|
||||
logData.response_at = new Date();
|
||||
logData.response = error ? JSON.stringify(error) : response.body;
|
||||
sapadapter.queryInsertSapLog(idxpr, logData, "CREATE_PO_MIGO");
|
||||
|
||||
if (error) {
|
||||
// console.log(error);
|
||||
apireshandler.message = error.toString();
|
||||
poadapter.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);
|
||||
// console.log(errmsg);
|
||||
|
||||
if (errmsg.length > 0) {
|
||||
poadapter.queryUpdateMigoNumber(
|
||||
req,
|
||||
resdata["GOODSMVT_HEADRET"]["MAT_DOC"] || "",
|
||||
errmsg,
|
||||
function (err, data) {
|
||||
let statusCode = data != null ? data.meta.code : 200;
|
||||
if (err) statusCode = 500;
|
||||
data.success = false;
|
||||
data.meta.message = errmsg;
|
||||
poadapter.sendResponse(500, data, res);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
poadapter.queryUpdateMigoNumber(
|
||||
req,
|
||||
resdata["GOODSMVT_HEADRET"]["MAT_DOC"],
|
||||
errmsg,
|
||||
function (err, data) {
|
||||
let statusCode = data != null ? data.meta.code : 200;
|
||||
if (err) statusCode = 500;
|
||||
poadapter.sendResponse(statusCode, data, res);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// if(errcode.length>0){
|
||||
// apireshandler.meta.code = errcode;
|
||||
// apireshandler.meta.message = errmsg;
|
||||
// poadapter.sendResponse(200, apireshandler, res);
|
||||
// }
|
||||
// else{
|
||||
|
||||
// // apireshandler.success = true;
|
||||
// }
|
||||
}
|
||||
});
|
||||
} else {
|
||||
poadapter.sendResponse(statusCode, resdata, res);
|
||||
if (!poDetail?.data?.length) {
|
||||
apireshandler.success = false;
|
||||
apireshandler.meta.code = statusCode === 200 ? 404 : statusCode;
|
||||
apireshandler.meta.message = poDetail?.meta?.message || "PO record not found";
|
||||
poadapter.sendResponse(apireshandler.meta.code, apireshandler, res);
|
||||
return;
|
||||
}
|
||||
|
||||
const row = poDetail.data[0];
|
||||
const idxpr = row.idxpr ?? 0;
|
||||
|
||||
const gm_code = "01";
|
||||
const pstng_date = formatSapDate(row.podate) || String(row.podate || "").trim();
|
||||
const doc_date = pstng_date;
|
||||
const header_txt = String(row.podescription || "").trim();
|
||||
const quantity = String(row.totalqty || "").trim();
|
||||
const po_unit = String(row.units || "PKT").trim();
|
||||
const po_number = String(row.ponumber || "").trim();
|
||||
const po_item = "00010";
|
||||
const item_text = header_txt;
|
||||
const gr_rcpt = "GRreceipt";
|
||||
const unload_pt = "unloadpoint";
|
||||
const movement_ind = "B";
|
||||
const reason = "0001";
|
||||
const location = "160301";
|
||||
|
||||
let goodsmvt_item =
|
||||
"1603|101|" +
|
||||
quantity +
|
||||
"|" +
|
||||
po_unit +
|
||||
"|" +
|
||||
po_number +
|
||||
"|" +
|
||||
po_item +
|
||||
"|" +
|
||||
item_text +
|
||||
"|";
|
||||
goodsmvt_item +=
|
||||
gr_rcpt + "|" + unload_pt + "|" + movement_ind + "|" + reason + "|" + location + "|";
|
||||
|
||||
const url =
|
||||
baseurlsap +
|
||||
"/migo?gm_code=" +
|
||||
gm_code +
|
||||
"&pstng_date=" +
|
||||
pstng_date +
|
||||
"&doc_date=" +
|
||||
doc_date +
|
||||
"&header_txt=" +
|
||||
encodeURIComponent(header_txt) +
|
||||
"&goodsmvt_item[]=" +
|
||||
encodeURIComponent(goodsmvt_item);
|
||||
|
||||
const resuri = {
|
||||
method: "POST",
|
||||
url,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"x-api-key": apikeysap,
|
||||
},
|
||||
};
|
||||
|
||||
const logData = {
|
||||
ref_code: po_number,
|
||||
request: JSON.stringify(resuri),
|
||||
request_at: new Date(),
|
||||
request_by: req.nik || req.body.nik || "999999",
|
||||
response: "",
|
||||
response_at: "",
|
||||
url,
|
||||
};
|
||||
|
||||
request(resuri, function (error, response) {
|
||||
logData.response_at = new Date();
|
||||
logData.response = error ? JSON.stringify(error) : response.body;
|
||||
sapadapter.queryInsertSapLog(idxpr, logData, "CREATE_PO_MIGO");
|
||||
|
||||
if (error) {
|
||||
apireshandler.success = false;
|
||||
apireshandler.meta.code = 400;
|
||||
apireshandler.meta.message = error.toString();
|
||||
poadapter.sendResponse(400, apireshandler, res);
|
||||
return;
|
||||
}
|
||||
|
||||
let sapResult;
|
||||
try {
|
||||
sapResult = parseSapResponse(response.body);
|
||||
} catch (parseErr) {
|
||||
apireshandler.success = false;
|
||||
apireshandler.meta.code = 500;
|
||||
apireshandler.meta.message = "Invalid SAP response: " + parseErr.toString();
|
||||
poadapter.sendResponse(500, apireshandler, res);
|
||||
return;
|
||||
}
|
||||
|
||||
const { errmsg } = collectSapErrors(sapResult);
|
||||
const migoNumber = extractSapMigoNumber(sapResult);
|
||||
const docYear = extractSapMigoDocYear(sapResult);
|
||||
|
||||
if (errmsg.length > 0) {
|
||||
apireshandler.success = false;
|
||||
apireshandler.meta.code = 500;
|
||||
apireshandler.meta.message = errmsg;
|
||||
poadapter.sendResponse(500, apireshandler, res);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!migoNumber) {
|
||||
apireshandler.success = false;
|
||||
apireshandler.meta.code = 500;
|
||||
apireshandler.meta.message =
|
||||
"MIGO created in SAP but document number was not returned";
|
||||
poadapter.sendResponse(500, apireshandler, res);
|
||||
return;
|
||||
}
|
||||
|
||||
req.body.migo = migoNumber;
|
||||
req.body.migosapmessage = docYear
|
||||
? `MIGO ${migoNumber} / DOC_YEAR ${docYear}`
|
||||
: `MIGO ${migoNumber}`;
|
||||
req.body.nik = req.nik || req.body.nik || "999999";
|
||||
|
||||
poadapter.queryUpdateMigoNumber(req, function (updateErr, data) {
|
||||
let saveStatusCode = data != null ? data.meta.code : 200;
|
||||
if (updateErr) saveStatusCode = 500;
|
||||
|
||||
if (data) {
|
||||
data.meta.message = `MIGO ${migoNumber} created successfully`;
|
||||
}
|
||||
|
||||
poadapter.sendResponse(saveStatusCode, data, res);
|
||||
});
|
||||
});
|
||||
});
|
||||
} catch (err) {
|
||||
apireshandler.meta.code = 502;
|
||||
|
||||
Reference in New Issue
Block a user