25 Commits

Author SHA1 Message Date
c39d79feec update to prev version 2026-01-20 10:51:49 +07:00
638ff55bff upd 2026-01-09 15:40:05 +07:00
7e3f6dd426 upd 2026-01-09 14:45:01 +07:00
a01efd2812 update 2026-01-09 14:41:28 +07:00
c777373817 test create PR 2026-01-09 14:26:24 +07:00
367bb5d29c upd 2026-01-09 13:36:41 +07:00
9c199e2413 update 2026-01-09 13:34:57 +07:00
2dc85891e2 upd 2026-01-09 10:54:08 +07:00
23f1026b3e upd 2026-01-09 10:52:27 +07:00
e139924302 upd 2026-01-09 10:50:08 +07:00
128d47e786 upd 2026-01-09 10:46:31 +07:00
76ac4d4341 upd 2026-01-09 10:44:29 +07:00
2a5363c835 upd 2026-01-09 10:41:47 +07:00
758fc65db3 udp 2026-01-08 17:25:53 +07:00
c00dc40f43 update 2026-01-08 17:20:26 +07:00
0221a6fb04 update 2026-01-08 17:12:08 +07:00
cc1102c444 API SAP Account 2026-01-08 16:54:56 +07:00
73ac2987a0 update 2026-01-07 15:25:14 +07:00
0476c18c43 updd 2026-01-07 15:22:42 +07:00
63db38c0fc try 2026-01-07 15:20:24 +07:00
ee58229803 upd 2026-01-07 15:09:30 +07:00
71b30d0a33 upd 2026-01-07 14:50:48 +07:00
221e81aff3 upd 2026-01-07 14:45:33 +07:00
b0c95b12e1 upd 2026-01-07 14:33:49 +07:00
9b1d94348e upd 2026-01-07 14:08:01 +07:00
8 changed files with 1667 additions and 1008 deletions

View File

@ -1,419 +1,474 @@
const db=require('../config/dbproc.js'); const db = require("../config/dbproc.js");
const Adapter=require('./dbadapter.js'); const Adapter = require("./dbadapter.js");
const fs = require("fs"); const fs = require("fs");
const baseUrl = process.env.URLPDFFILE;
class BastAdapter extends Adapter {
constructor() {
super();
}
class BastAdapter extends Adapter{ async queryBastActivityList(req, callback) {
constructor(){ var apires = this.getApiResultDefined();
super(); try {
} let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
async queryBastActivityList(req,callback){ let qry = "select * from vw_bastactivitylist ";
var apires = this.getApiResultDefined(); qry = qry + "where activityname like '%" + keyword + "%' ";
try { qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
let limit = req.query.limit; // let qry = "select * from vw_basthandoverlist ";
let offset = req.query.offset; // qry = qry + "where bastnumber like '%" + keyword + "%' ";
let keyword = req.query.keyword; // qry = qry + "order by _idx asc limit " + offset + ", " + limit;
let qry = "select * from vw_bastactivitylist "; // console.log(qry);
qry = qry + "where activityname like '%" + keyword + "%' "; db.query(qry, [], function (err, result, fields) {
qry = qry + "order by idxbudget asc limit " + offset + ", " + limit; if (err) {
// let qry = "select * from vw_basthandoverlist "; apires.meta["message"] = err.toString();
// qry = qry + "where bastnumber like '%" + keyword + "%' "; apires.meta["code"] = 500;
// qry = qry + "order by _idx asc limit " + offset + ", " + limit; callback("err", apires);
} else {
if (result.length > 0) {
let pagination = result.length / limit;
if (!Number.isInteger(pagination)) {
pagination = Math.floor(result.length / limit) + 1;
}
// let pagination = Adapter.getPagination(result.length, limit);
apires.success = true;
apires.data.push({
"totalpage": pagination,
"totalrows": result.length,
});
qry = "select * from vw_bastactivitylist ";
qry = qry + "where activityname like '%" + keyword + "%' ";
qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
// qry = "select * from vw_basthandoverlist ";
// qry = qry + "where bastnumber like '%" + keyword + "%' ";
// qry = qry + "order by _idx asc limit " + offset + ", " + limit;
db.query(qry, [], function (err, result, fields) {
if (err) {
apires.meta["message"] = err.toString();
apires.meta["code"] = 500;
callback("err", apires);
} else {
apires.data.push({
"results": JSON.parse(JSON.stringify(result)),
});
callback(null, apires);
}
});
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
// console.log(qry); async queryBastHandoverList(req, callback) {
db.query(qry,[],function(err,result,fields){ var apires = this.getApiResultDefined();
if(err){ try {
apires.meta['message'] = err.toString(); let limit = req.query.limit;
apires.meta['code'] = 500; let offset = req.query.offset;
callback('err',apires); let keyword = req.query.keyword;
}
else
{
if(result.length>0){
let pagination = result.length / limit;
if(!Number.isInteger(pagination)){
pagination=(Math.floor(result.length / limit))+1;
}
// let pagination = Adapter.getPagination(result.length, limit);
apires.success = true;
apires.data.push({
"totalpage": pagination,
"totalrows": result.length
});
qry = "select * from vw_bastactivitylist ";
qry = qry + "where activityname like '%" + keyword + "%' ";
qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
// qry = "select * from vw_basthandoverlist ";
// qry = qry + "where bastnumber like '%" + keyword + "%' ";
// qry = qry + "order by _idx asc limit " + offset + ", " + limit;
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.data.push({
"results": JSON.parse(JSON.stringify(result))
});
callback(null, apires);
}
});
}
else{
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryBastHandoverList(req,callback){ // let qry = "select * from vw_bastactivitylist ";
var apires = this.getApiResultDefined(); // qry = qry + "where activityname like '%" + keyword + "%' ";
try { // qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
let limit = req.query.limit; let qry = "select * from vw_basthandoverlist ";
let offset = req.query.offset; qry = qry + "where bastnumber like '%" + keyword + "%' ";
let keyword = req.query.keyword; qry = qry + "order by _idx asc";
// let qry = "select * from vw_bastactivitylist "; // console.log(qry);
// qry = qry + "where activityname like '%" + keyword + "%' "; db.query(qry, [], function (err, result, fields) {
// qry = qry + "order by idxbudget asc limit " + offset + ", " + limit; if (err) {
let qry = "select * from vw_basthandoverlist "; apires.meta["message"] = err.toString();
qry = qry + "where bastnumber like '%" + keyword + "%' "; apires.meta["code"] = 500;
qry = qry + "order by _idx asc"; callback("err", apires);
} else {
if (result.length > 0) {
let pagination = result.length / limit;
if (!Number.isInteger(pagination)) {
pagination = Math.floor(result.length / limit) + 1;
}
// let pagination = Adapter.getPagination(result.length, limit);
apires.success = true;
apires.data.push({
"totalpage": pagination,
"totalrows": result.length,
});
// console.log(qry); // qry = "select * from vw_bastactivitylist ";
db.query(qry,[],function(err,result,fields){ // qry = qry + "where activityname like '%" + keyword + "%' ";
if(err){ // qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
apires.meta['message'] = err.toString(); qry = "select * from vw_basthandoverlist ";
apires.meta['code'] = 500; qry = qry + "where bastnumber like '%" + keyword + "%' ";
callback('err',apires); qry = qry + "order by _idx asc limit " + offset + ", " + limit;
} db.query(qry, [], function (err, result, fields) {
else if (err) {
{ apires.meta["message"] = err.toString();
if(result.length>0){ apires.meta["code"] = 500;
let pagination = result.length / limit; callback("err", apires);
if(!Number.isInteger(pagination)){ } else {
pagination=(Math.floor(result.length / limit))+1; apires.data.push({
} "results": JSON.parse(JSON.stringify(result)),
// let pagination = Adapter.getPagination(result.length, limit); });
apires.success = true; callback(null, apires);
apires.data.push({ }
"totalpage": pagination, });
"totalrows": result.length } else {
}); apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
// qry = "select * from vw_bastactivitylist "; async queryBastActivityListDetail(req, callback) {
// qry = qry + "where activityname like '%" + keyword + "%' "; var apires = this.getApiResultDefined();
// qry = qry + "order by idxbudget asc limit " + offset + ", " + limit; try {
qry = "select * from vw_basthandoverlist "; let idxpr = req.query.idxpr;
qry = qry + "where bastnumber like '%" + keyword + "%' ";
qry = qry + "order by _idx asc limit " + offset + ", " + limit;
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.data.push({
"results": JSON.parse(JSON.stringify(result))
});
callback(null, apires);
}
});
}
else{
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryBastActivityListDetail(req,callback){ let qry = "select * from vw_bastactivitylistdetail ";
var apires = this.getApiResultDefined(); qry = qry + "where idxpr='" + idxpr + "'";
try {
let idxpr = req.query.idxpr;
let qry = "select * from vw_bastactivitylistdetail "; // console.log(qry);
qry = qry + "where idxpr='"+idxpr+"'"; db.query(qry, [], function (err, result, fields) {
if (err) {
apires.meta["message"] = err.toString();
apires.meta["code"] = 500;
callback("err", apires);
} else {
if (result.length > 0) {
apires.success = true;
apires.data = JSON.parse(JSON.stringify(result));
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
}
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
// console.log(qry); async queryCreateBAST(filedoctemplate, req, callback) {
db.query(qry,[],function(err,result,fields){ var apires = this.getApiResultDefined();
if(err){ try {
apires.meta['message'] = err.toString(); let idxpoboq = req.body.idxpoboq;
apires.meta['code'] = 500; let idxpo = req.body.idxpo;
callback('err',apires); let totalpo = req.body.totalpo;
} let bastnumber = req.body.bastnumber;
else let bastdates = req.body.bastdates;
{ let description = req.body.description;
if(result.length>0){ let idxvendor = req.body.idxvendor;
apires.success = true; let vendorcode = req.body.vendorcode;
apires.data = JSON.parse(JSON.stringify(result)); let vendorname = req.body.vendorname;
} let povendornumber = req.body.povendornumber;
else{ let status = 0;
apires.meta.code = 200; let statusdescription = "Submitted";
apires.meta.message = "Record Not Found"; let nik = req.body.nik;
}
callback(null, apires);
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryCreateBAST(filedoctemplate, req,callback){ // let qry = "insert into tbl_bast set idxpo='"+idxpo+"',bastnumber='"+bastnumber+"',bastdates='"+bastdates+"',";
var apires = this.getApiResultDefined(); // qry = qry + "description='"+description+"',idxvendor='"+idxvendor+"',vendorcode='"+vendorcode+"',vendorname='"+vendorname+"',";
try { // qry = qry + "totalpo='"+totalpo+"',povendornumber='"+povendornumber+"',filedoctemplate='"+filedoctemplate+"',status='"+status+"',";
let idxpoboq = req.body.idxpoboq; // qry = qry + "statusdescription='"+statusdescription+"',laststatusupdate=now(),iby='"+nik+"',idt=now()";
let idxpo = req.body.idxpo; let qry =
let totalpo = req.body.totalpo; "insert into tbl_bast set idxpo='" +
let bastnumber = req.body.bastnumber; idxpo +
let bastdates = req.body.bastdates; "',bastnumber='" +
let description = req.body.description; bastnumber +
let idxvendor = req.body.idxvendor; "',bastdates='" +
let vendorcode = req.body.vendorcode; bastdates +
let vendorname = req.body.vendorname; "',";
let povendornumber = req.body.povendornumber; qry =
let status = 0; qry +
let statusdescription = "Submitted"; "description='" +
let nik = req.body.nik; description +
"',idxvendor='" +
idxvendor +
"',vendorcode='" +
vendorcode +
"',vendorname='" +
vendorname +
"',";
qry =
qry +
"totalpo='" +
totalpo +
"',povendornumber='" +
povendornumber +
"',filepdf='" +
filedoctemplate +
"',ismergedoc=1,status='" +
status +
"',";
qry =
qry +
"statusdescription='" +
statusdescription +
"',laststatusupdate=now(),iby='" +
nik +
"',idt=now()";
// let qry = "insert into tbl_bast set idxpo='"+idxpo+"',bastnumber='"+bastnumber+"',bastdates='"+bastdates+"',"; // console.log(qry);
// qry = qry + "description='"+description+"',idxvendor='"+idxvendor+"',vendorcode='"+vendorcode+"',vendorname='"+vendorname+"',"; db.query(qry, [], function (err, result, fields) {
// qry = qry + "totalpo='"+totalpo+"',povendornumber='"+povendornumber+"',filedoctemplate='"+filedoctemplate+"',status='"+status+"',"; if (err) {
// qry = qry + "statusdescription='"+statusdescription+"',laststatusupdate=now(),iby='"+nik+"',idt=now()"; apires.meta["message"] = err.toString();
let qry = "insert into tbl_bast set idxpo='"+idxpo+"',bastnumber='"+bastnumber+"',bastdates='"+bastdates+"',"; apires.meta["code"] = 500;
qry = qry + "description='"+description+"',idxvendor='"+idxvendor+"',vendorcode='"+vendorcode+"',vendorname='"+vendorname+"',"; callback("err", apires);
qry = qry + "totalpo='"+totalpo+"',povendornumber='"+povendornumber+"',filepdf='"+filedoctemplate+"',ismergedoc=1,status='"+status+"',"; } else {
qry = qry + "statusdescription='"+statusdescription+"',laststatusupdate=now(),iby='"+nik+"',idt=now()"; var idxheader = result.insertId;
// qry ="insert into tbl_bastdetail(idxheader,idxpoboq,description,qty,units,poamount,iby,idt) ";
// qry = qry + "select '"+idxheader+"', _idx , description, qty, units, poamount, '"+nik+"',now() ";
// qry = qry + "from tbl_poboq where _idx in("+idxpoboq+")";
qry =
"insert into tbl_bastdetail(idxheader,idxpoboq,description,qty,units,poamount,iby,idt) ";
qry =
qry +
"select '" +
idxheader +
"', _idx , description, qty, units, poamount, '" +
nik +
"',now() ";
qry = qry + "from tbl_poboq where _idx in(" + idxpoboq + ")";
// console.log(qry); db.query(qry, [], function (err, result, fields) {
db.query(qry,[],function(err,result,fields){ if (err) {
if(err){ apires.meta["message"] = err.toString();
apires.meta['message'] = err.toString(); apires.meta["code"] = 500;
apires.meta['code'] = 500; callback("err", apires);
callback('err',apires); } else {
} apires.success = true;
else apires.data = JSON.parse(JSON.stringify(result));
{ apires.meta.code = 200;
var idxheader = result.insertId; callback(null, apires);
// qry ="insert into tbl_bastdetail(idxheader,idxpoboq,description,qty,units,poamount,iby,idt) "; }
// qry = qry + "select '"+idxheader+"', _idx , description, qty, units, poamount, '"+nik+"',now() "; });
// qry = qry + "from tbl_poboq where _idx in("+idxpoboq+")"; }
qry ="insert into tbl_bastdetail(idxheader,idxpoboq,description,qty,units,poamount,iby,idt) "; });
qry = qry + "select '"+idxheader+"', _idx , description, qty, units, poamount, '"+nik+"',now() "; } catch (err) {
qry = qry + "from tbl_poboq where _idx in("+idxpoboq+")"; apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
db.query(qry,[],function(err,result,fields){ async queryUploadHandoverSign(filehandoversign, req, callback) {
if(err){ var apires = this.getApiResultDefined();
apires.meta['message'] = err.toString(); try {
apires.meta['code'] = 500; let idxbast = req.body.idxbast;
callback('err',apires); let nik = req.body.nik;
} let bastdates = req.body.bastdates;
else let description = req.body.description;
{
apires.success = true;
apires.data = JSON.parse(JSON.stringify(result));
apires.meta.code = 200;
callback(null, apires);
}
});
} let qry =
}); "update tbl_bast set status=1,statusdescription='Upload Handover',bastdateshandover='" +
} bastdates +
catch(err) { "',descriptionhandover='" +
apires.meta.code = 500; description +
apires.meta.message = err.toString(); "',";
callback('error',apires); qry +=
} "filehandoversign='" +
} filehandoversign +
"',uby='" +
nik +
"',udt=now() where _idx='" +
idxbast +
"'";
// let qry = "update tbl_bast set filehandoversign='"+filehandoversign+"',uby='"+nik+"',udt=now() where _idx='"+idxbast+"'";
async queryUploadHandoverSign(filehandoversign, req,callback){ // console.log(qry);
var apires = this.getApiResultDefined(); db.query(qry, [], function (err, result, fields) {
try { if (err) {
let idxbast = req.body.idxbast; apires.meta["message"] = err.toString();
let nik = req.body.nik; apires.meta["code"] = 500;
let bastdates=req.body.bastdates; callback("err", apires);
let description=req.body.description; } else {
let qryHistory =
"insert into tbl_bastfilehistory set statusdescription='Upload Handover', bastdateshandover='" +
bastdates +
"',descriptionhandover='" +
description +
"', filehandoversign='" +
filehandoversign +
"',iby='" +
nik +
"',idt=now(), idxbast='" +
idxbast +
"'";
db.query(qryHistory, [], function (err, result, fields) {
if (err) {
apires.meta["message"] = err.toString();
apires.meta["code"] = 500;
callback("err", apires);
} else {
apires.success = true;
apires.meta.code = 200;
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
let qry = "update tbl_bast set status=1,statusdescription='Upload Handover',bastdateshandover='"+bastdates+"',descriptionhandover='"+description+"',"; async queryBastList(req, callback) {
qry +="filehandoversign='"+filehandoversign+"',uby='"+nik+"',udt=now() where _idx='"+idxbast+"'"; var apires = this.getApiResultDefined();
// let qry = "update tbl_bast set filehandoversign='"+filehandoversign+"',uby='"+nik+"',udt=now() where _idx='"+idxbast+"'"; try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
// console.log(qry); let qry = "select * from vw_bast ";
db.query(qry,[],function(err,result,fields){ qry = qry + "where description like '%" + keyword + "%' and status=0 ";
if(err){ qry = qry + "order by _idx asc limit " + offset + ", " + limit;
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.success = true;
apires.meta.code = 200;
callback(null, apires);
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryBastList(req,callback){ // console.log(qry);
var apires = this.getApiResultDefined(); db.query(qry, [], function (err, result, fields) {
try { if (err) {
let limit = req.query.limit; apires.meta["message"] = err.toString();
let offset = req.query.offset; apires.meta["code"] = 500;
let keyword = req.query.keyword; callback("err", apires);
} else {
if (result.length > 0) {
let pagination = result.length / limit;
if (!Number.isInteger(pagination)) {
pagination = Math.floor(result.length / limit) + 1;
}
// let pagination = Adapter.getPagination(result.length, limit);
apires.success = true;
apires.data.push({
"totalpage": pagination,
"totalrows": result.length,
});
qry = "select * from vw_bast ";
qry = qry + "where description like '%" + keyword + "%' ";
qry = qry + "order by _idx asc limit " + offset + ", " + limit;
db.query(qry, [], function (err, result, fields) {
if (err) {
apires.meta["message"] = err.toString();
apires.meta["code"] = 500;
callback("err", apires);
} else {
apires.data.push({
"results": JSON.parse(JSON.stringify(result)),
});
callback(null, apires);
}
});
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
let qry = "select * from vw_bast "; async queryBastDetailList(req, callback) {
qry = qry + "where description like '%" + keyword + "%' and status=0 "; var apires = this.getApiResultDefined();
qry = qry + "order by _idx asc limit " + offset + ", " + limit; try {
let idxbast = req.query.idxbast;
// console.log(qry); let qry = "select * from vw_bast ";
db.query(qry,[],function(err,result,fields){ qry = qry + "where _idx='" + idxbast + "'";
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
if(result.length>0){
let pagination = result.length / limit;
if(!Number.isInteger(pagination)){
pagination=(Math.floor(result.length / limit))+1;
}
// let pagination = Adapter.getPagination(result.length, limit);
apires.success = true;
apires.data.push({
"totalpage": pagination,
"totalrows": result.length
});
qry = "select * from vw_bast ";
qry = qry + "where description like '%" + keyword + "%' ";
qry = qry + "order by _idx asc limit " + offset + ", " + limit;
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.data.push({
"results": JSON.parse(JSON.stringify(result))
});
callback(null, apires);
}
});
}
else{
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryBastDetailList(req,callback){ // console.log(qry);
var apires = this.getApiResultDefined(); db.query(qry, [], function (err, result, fields) {
try { if (err) {
let idxbast = req.query.idxbast; apires.meta["message"] = err.toString();
apires.meta["code"] = 500;
callback("err", apires);
} else {
let qryHistory = `select statusdescription, bastdateshandover, descriptionhandover, CONCAT('${baseUrl}?route=bast&name=', filehandoversign) AS filehandoversign, iby, idt from tbl_bastfilehistory where idxbast = ${result[0]._idx} order by _idx desc`;
db.query(qryHistory, [], function (err, resultHistory, fields) {
console.log(err);
console.log(resultHistory);
if (err) {
apires.meta["message"] = err.toString();
apires.meta["code"] = 500;
callback("err", apires);
} else {
result[0].history_handover = resultHistory;
apires.data.push({
"results": JSON.parse(JSON.stringify(result)),
});
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
let qry = "select * from vw_bast "; async queryUpdateHandover(req, filehandover, callback) {
qry = qry + "where _idx='"+idxbast+"'"; try {
var apires = this.getApiResultDefined();
var idxbast = req.body.idxbast;
var status = req.body.status;
var statusdescription = req.body.statusdescription;
var nik = req.body.nik;
// console.log(qry); var qry =
db.query(qry,[],function(err,result,fields){ "update tbl_bast set filehandover='" +
if(err){ filehandover +
apires.meta['message'] = err.toString(); "',status='" +
apires.meta['code'] = 500; status +
callback('err',apires); "',statusdescription='" +
} statusdescription +
else "',uby='" +
{ nik +
apires.data.push({ "',udt=now() ";
"results": JSON.parse(JSON.stringify(result)) qry = qry + "where _idx='" + idxbast + "'";
}); db.query(qry, [], function (err, result, fields) {
callback(null, apires); if (err) {
} apires.meta["message"] = err.toString();
}); apires.meta["code"] = 500;
} callback("err", apires);
catch(err) { } else {
apires.meta.code = 500; apires.success = true;
apires.meta.message = err.toString(); apires.data = JSON.parse(JSON.stringify(result));
callback('error',apires); callback(null, apires);
} }
} });
} catch (err) {
async queryUpdateHandover(req,filehandover, callback) { apires.meta.code = 500;
try { apires.meta.message = err.toString();
var apires = this.getApiResultDefined(); callback("error", apires);
var idxbast = req.body.idxbast; }
var status = req.body.status; }
var statusdescription = req.body.statusdescription;
var nik = req.body.nik;
var qry = "update tbl_bast set filehandover='"+filehandover+"',status='" + status +"',statusdescription='" + statusdescription +"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxbast +"'";
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.success = true;
apires.data = JSON.parse(JSON.stringify(result));
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
} }
module.exports = BastAdapter; module.exports = BastAdapter;

View File

@ -586,6 +586,38 @@ class PrAdapter extends Adapter{
} }
} }
async queryUpdateSapMessage(req, sapmessage, callback) {
try {
var apires = this.getApiResultDefined();
var idxpr = req.body.idxpr;
var nik = req.body.nik;
// console.log(setdescription);
var qry = "update tbl_pr set sapmessage='"+sapmessage+"', uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxpr +"'";
console.log('qry', qry)
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.success = true;
apires.data = JSON.parse(JSON.stringify(result));
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
} }

View File

@ -0,0 +1,412 @@
const db = require("../config/dbproc.js");
const Adapter = require("./dbadapter.js");
const request = require("request");
class SAPAccountAdapter extends Adapter {
constructor() {
super();
}
/* ================= LIST + PAGINATION ================= */
async queryList(req, callback) {
var apires = this.getApiResultDefined();
try {
let limit = parseInt(req.query.limit) || 10;
let offset = parseInt(req.query.offset) || 0;
let keyword = req.query.keyword || "";
/* ===== QUERY TOTAL ROW ===== */
let qry = `
SELECT *
FROM tbl_sap_connections
WHERE deleted_at IS NULL
AND (
host LIKE '%${keyword}%'
OR sap_user LIKE '%${keyword}%'
OR ket_sap LIKE '%${keyword}%'
)
`;
db.query(qry, [], function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
if (result.length > 0) {
let pagination = result.length / limit;
if (!Number.isInteger(pagination)) {
pagination = Math.floor(result.length / limit) + 1;
}
apires.success = true;
apires.data.push({
totalpage: pagination,
totalrows: result.length,
});
/* ===== QUERY DATA WITH LIMIT ===== */
let qryData = `
SELECT *
FROM tbl_sap_connections
WHERE deleted_at IS NULL
AND (
host LIKE '%${keyword}%'
OR sap_user LIKE '%${keyword}%'
OR ket_sap LIKE '%${keyword}%'
)
ORDER BY id ASC
LIMIT ${offset}, ${limit}
`;
db.query(qryData, [], function (err, resultData) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.data.push({
results: JSON.parse(JSON.stringify(resultData)),
});
callback(null, apires);
}
});
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
callback(null, apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= CREATE ================= */
async queryCreate(req, callback) {
var apires = this.getApiResultDefined();
try {
const {sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi} =
req.body;
let qry = `
INSERT INTO tbl_sap_connections
(sap_id, host, sysnr, client, codepage, ket_sap, sap_user, sap_password, aktivasi, created_at, created_by, status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, 'Not_Active')
`;
const password = Buffer.from(sap_password, "utf8").toString("base64");
db.query(
qry,
[
sap_id,
host,
sysnr,
client,
codepage,
ket_sap,
sap_user,
password,
aktivasi,
req.body.nik || "system",
],
function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.success = true;
apires.data = {insertId: result.insertId};
callback(null, apires);
}
},
);
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
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;
/* 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 = ?,
updated_at = NOW(), updated_by = ?
WHERE id = ? AND deleted_at IS NULL
`;
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);
}
/* 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();
callback("error", apires);
}
}
/* ================= DELETE (SOFT) ================= */
async queryDelete(req, callback) {
var apires = this.getApiResultDefined();
try {
const id = req.params.id;
let qry = `
UPDATE tbl_sap_connections
SET deleted_at = NOW(), deleted_by = ?
WHERE id = ? AND deleted_at IS NULL
`;
db.query(qry, [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.data = {affectedRows: result.affectedRows};
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= DETAIL ================= */
async queryDetail(req, callback) {
var apires = this.getApiResultDefined();
try {
const id = req.params.id;
let qry = `
SELECT *
FROM tbl_sap_connections
WHERE id = ?
AND deleted_at IS NULL
LIMIT 1
`;
db.query(qry, [id], function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
if (result.length > 0) {
const password = Buffer.from(result[0].sap_password, "base64").toString("utf8");
apires.success = true;
apires.data = {...result[0], sap_password: password};
} else {
apires.meta.code = 200;
apires.meta.message = "Record Not Found";
apires.data = null;
}
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
/* ================= ACTIVATE ================= */
async queryActivate(req, callback) {
try {
const id = req.params.id;
const nik = req.body.nik || "system";
// 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);
}
}
/* ================= CURRENT ================= */
async queryCurrent(req, callback) {
var apires = this.getApiResultDefined();
try {
let qry = `
SELECT *
FROM tbl_sap_connections
WHERE status='Active'
AND deleted_at IS NULL
LIMIT 1
`;
db.query(qry, [], function (err, result) {
if (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("err", apires);
} else {
apires.success = true;
apires.data = result.length > 0 ? result[0] : null;
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback("error", apires);
}
}
}
module.exports = SAPAccountAdapter;

View File

@ -88,6 +88,7 @@ exports.createPOSAP = ( req, res ) => {
try{ try{
let status = req.body.status; let status = req.body.status;
poadapter.queryUpdatePoHeader(req,function(err,resdata){ poadapter.queryUpdatePoHeader(req,function(err,resdata){
console.log("err createpo =>", err)
let statusCode = resdata!=null ? resdata.meta.code : 200 ; let statusCode = resdata!=null ? resdata.meta.code : 200 ;
if(err){ if(err){
statusCode = 500; statusCode = 500;
@ -95,6 +96,8 @@ exports.createPOSAP = ( req, res ) => {
} }
else{ else{
poadapter.queryUpdatePoNumber(req,function(err,data){ poadapter.queryUpdatePoNumber(req,function(err,data){
console.log("err queryUpdatePoNumber =>", err)
let statusCode = data!=null ? data.meta.code : 200 ; let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500; if(err) statusCode = 500;
poadapter.sendResponse(statusCode,data, res); poadapter.sendResponse(statusCode,data, res);
@ -160,6 +163,7 @@ exports.createPOSAPold = ( req, res ) => {
// console.log(resuri); // console.log(resuri);
request(resuri, function (error, response) { request(resuri, function (error, response) {
console.log('response createPoSAP =>', response)
if (error) { if (error) {
// console.log(error); // console.log(error);
apireshandler.message = error.toString(); apireshandler.message = error.toString();
@ -683,13 +687,19 @@ exports.createHeaderPOSAP = ( req, res ) => {
// console.log(resuri); // console.log(resuri);
request(resuri, function (error, response) { request(resuri, function (error, response) {
if (error) { if (error) {
// console.log(error); console.log(error);
apireshandler.message = error.toString(); apireshandler.message = error.toString();
poadapter.sendResponse(400, apireshandler, res); apireshandler.meta.message = "Header Created Successfuly"
poadapter.queryUpdatePoNumber(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
poadapter.sendResponse(statusCode,data, res);
});
// poadapter.sendResponse(400, apireshandler, res);
} }
else else
{ {
// console.log("response : " +response.body); console.log("response : " +response.body);
var resdata = JSON.parse(response.body); var resdata = JSON.parse(response.body);
var errcode = ""; var errcode = "";
var errmsg =""; var errmsg ="";

File diff suppressed because it is too large Load Diff

110
controllers/sap_account.js Normal file
View File

@ -0,0 +1,110 @@
const SAPAccountAdapter = require("../adapter/sapaccountadapter.js");
const sapaccountadapter = new SAPAccountAdapter();
const Controllers = require("./controller.js");
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
/* ================= LIST ================= */
exports.list = (req, res) => {
try {
sapaccountadapter.queryList(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : SAP Account controller, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};
/* ================= CREATE ================= */
exports.create = (req, res) => {
try {
sapaccountadapter.queryCreate(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [21] : SAP Account create, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};
/* ================= UPDATE ================= */
exports.update = (req, res) => {
try {
sapaccountadapter.queryUpdate(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [22] : SAP Account update, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};
/* ================= DELETE (SOFT DELETE) ================= */
exports.delete = (req, res) => {
try {
sapaccountadapter.queryDelete(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [23] : SAP Account delete, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};
/* ================= DETAIL ================= */
exports.detail = (req, res) => {
try {
sapaccountadapter.queryDetail(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [24] : SAP Account detail, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};
/* ================= ACTIVATE SAP ================= */
exports.activate = (req, res) => {
try {
sapaccountadapter.queryActivate(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [25] : SAP Account activate, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};
/* ================= CURRENT SAP ================= */
exports.current = (req, res) => {
try {
sapaccountadapter.queryCurrent(req, function (err, data) {
let statusCode = data != null ? data.meta.code : 200;
if (err) statusCode = 500;
sapaccountadapter.sendResponse(statusCode, data, res);
});
} catch (err) {
apireshandler.meta.code = 502;
apireshandler.meta.message = " [26] : SAP Account current, " + err.toString();
sapaccountadapter.sendResponse(502, apireshandler, res);
}
};

View File

@ -14,7 +14,7 @@ router.post('/prlist',[jwtauth], prcontroller.getListPr);
router.post('/setnewpr',[jwtauth], prcontroller.setNewPr); router.post('/setnewpr',[jwtauth], prcontroller.setNewPr);
router.post('/updatepr',[jwtauth], prcontroller.setUpdatePr); router.post('/updatepr',[jwtauth], prcontroller.setUpdatePr);
router.post('/approvedpr',[jwtauth], prcontroller.approvedPR); router.post('/approvedpr',[jwtauth], prcontroller.approvedPR);
router.post('/updatestatuspr',[jwtauth], prcontroller.setUpdateStatusPr); router.post('/updatestatuspr',[jwtauth], prcontroller.setUpdateStatusProld);
router.post('/deletepr',[jwtauth], prcontroller.deletePR); router.post('/deletepr',[jwtauth], prcontroller.deletePR);
// ==== SAP Part // ==== SAP Part
router.post('/releaseprsap',[jwtauth], prcontroller.releasePRSAP); router.post('/releaseprsap',[jwtauth], prcontroller.releasePRSAP);

14
routes/sap.js Normal file
View File

@ -0,0 +1,14 @@
const express = require("express");
const sapcontroller = require("../controllers/sap_account.js");
const jwtauth = require("../middlewares/auth.js");
const router = express.Router();
router.get("/list", [jwtauth], sapcontroller.list);
router.post("/create", [jwtauth], sapcontroller.create);
router.post("/update/:id", [jwtauth], sapcontroller.update);
router.delete("/delete/:id", [jwtauth], sapcontroller.delete);
router.get("/detail/:id", [jwtauth], sapcontroller.detail);
router.post("/activate/:id", [jwtauth], sapcontroller.activate);
router.get("/current", [jwtauth], sapcontroller.current);
module.exports = router;