first commit

This commit is contained in:
2025-12-05 06:21:42 +07:00
commit a3c945a60a
119 changed files with 21757 additions and 0 deletions

419
adapter/bastadapter.js Normal file
View File

@ -0,0 +1,419 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
const fs = require("fs");
class BastAdapter extends Adapter{
constructor(){
super();
}
async queryBastActivityList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let qry = "select * from vw_bastactivitylist ";
qry = qry + "where activityname like '%" + keyword + "%' ";
qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
// let qry = "select * from vw_basthandoverlist ";
// qry = qry + "where bastnumber like '%" + keyword + "%' ";
// qry = qry + "order by _idx asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
// let qry = "select * from vw_bastactivitylist ";
// qry = qry + "where activityname like '%" + keyword + "%' ";
// qry = qry + "order by idxbudget asc limit " + offset + ", " + limit;
let qry = "select * from vw_basthandoverlist ";
qry = qry + "where bastnumber like '%" + keyword + "%' ";
qry = qry + "order by _idx asc";
// console.log(qry);
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){
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 queryBastActivityListDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpr = req.query.idxpr;
let qry = "select * from vw_bastactivitylistdetail ";
qry = qry + "where idxpr='"+idxpr+"'";
// console.log(qry);
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);
}
}
async queryCreateBAST(filedoctemplate, req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq = req.body.idxpoboq;
let idxpo = req.body.idxpo;
let totalpo = req.body.totalpo;
let bastnumber = req.body.bastnumber;
let bastdates = req.body.bastdates;
let description = req.body.description;
let idxvendor = req.body.idxvendor;
let vendorcode = req.body.vendorcode;
let vendorname = req.body.vendorname;
let povendornumber = req.body.povendornumber;
let status = 0;
let statusdescription = "Submitted";
let nik = req.body.nik;
// let qry = "insert into tbl_bast set idxpo='"+idxpo+"',bastnumber='"+bastnumber+"',bastdates='"+bastdates+"',";
// qry = qry + "description='"+description+"',idxvendor='"+idxvendor+"',vendorcode='"+vendorcode+"',vendorname='"+vendorname+"',";
// qry = qry + "totalpo='"+totalpo+"',povendornumber='"+povendornumber+"',filedoctemplate='"+filedoctemplate+"',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+"',";
qry = qry + "description='"+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()";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
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+")";
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));
apires.meta.code = 200;
callback(null, apires);
}
});
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUploadHandoverSign(filehandoversign, req,callback){
var apires = this.getApiResultDefined();
try {
let idxbast = req.body.idxbast;
let nik = req.body.nik;
let bastdates=req.body.bastdates;
let description=req.body.description;
let qry = "update tbl_bast set status=1,statusdescription='Upload Handover',bastdateshandover='"+bastdates+"',descriptionhandover='"+description+"',";
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+"'";
// console.log(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.meta.code = 200;
callback(null, apires);
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryBastList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let qry = "select * from vw_bast ";
qry = qry + "where description like '%" + keyword + "%' and status=0 ";
qry = qry + "order by _idx asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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){
var apires = this.getApiResultDefined();
try {
let idxbast = req.query.idxbast;
let qry = "select * from vw_bast ";
qry = qry + "where _idx='"+idxbast+"'";
// console.log(qry);
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);
}
});
}
catch(err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateHandover(req,filehandover, callback) {
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;
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;

570
adapter/budgetadapter.js Normal file
View File

@ -0,0 +1,570 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
class BudgetAdapter extends Adapter{
constructor(){
super();
}
async queryBudgetList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let qry = "select * from vw_budgetcapexinfo ";
qry = qry +"where (trim(budgetid) like '%"+ keyword +"%' or trim(activityname) like '%"+ keyword +"%') order by id asc";
// console.log(qry);
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){
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_budgetcapexinfo ";
qry = qry +"where (trim(budgetid) like '%"+ keyword +"%' or trim(activityname) like '%"+ keyword +"%') order by id 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 queryBudgetDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let id = req.query.id;
// console.log(req);
let qry = "select * from vw_budgetcapexinfo ";
qry = qry +"where id='"+id+"' order by id asc limit 1";
// console.log(qry);
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);
}
}
async queryDeleteBudget(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_budgetcapexinfo ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryBudgetType(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select _idx id,budgettype from tbl_budgettype ";
qry = qry +"where isdeleted=0 order by _idx asc";
// console.log(qry);
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);
}
}
async queryNewBudget(req,callback){
var apires = this.getApiResultDefined();
try {
let idxbudgettype= req.body.idbudgettype;
let budgetid = req.body.budgetid;
let activityname = req.body.activityname;
let amount = req.body.amount;
let targetrfs = req.body.targetrfs;
let months = req.body.months;
let years = req.body.years;
let nik = req.body.nik;
let qry = "insert into tbl_budgetcapexinfo ";
qry = qry +"set idxbudgettype='"+idxbudgettype+"', budgetid='"+budgetid+"',activityname='"+activityname+"',amount='"+amount+"',months='"+months+"',";
qry = qry +"targetrfs='"+targetrfs+"',years='"+years+"', iby='"+nik+"',idt=now()";
// console.log(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);
}
}
async queryUpdateBudget(req,callback){
var apires = this.getApiResultDefined();
try {
let idxbudgettype= req.body.idbudgettype;
let budgetid = req.body.budgetid;
let activityname = req.body.activityname;
let amount = req.body.amount;
let targetrfs = req.body.targetrfs;
let months = req.body.months;
let years = req.body.years;
let nik = req.body.nik;
let id = req.body.id;
let qry = "update tbl_budgetcapexinfo ";
qry = qry +"set idxbudgettype='"+idxbudgettype+"', budgetid='"+budgetid+"',activityname='"+activityname+"',amount='"+amount+"',months='"+months+"',";
qry = qry +"targetrfs='"+targetrfs+"',years='"+years+"', uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+id+"'";
// console.log(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.meta.message = "Updated Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
// === Request budget
async queryReqBudget(req,callback){
var apires = this.getApiResultDefined();
try {
let trxid= req.body.trxid;
let justificationnumber= req.body.justificationnumber;
let yearstgt= req.body.years;
let transactiondate = req.body.transactiondate;
let idxbudgettype= req.body.idbudgettype;
let budgettype = req.body.budgettype;
let idxbudgetid = req.body.idxbudgetid;
let budgetid = req.body.budgetid;
let activityname = req.body.activityname;
let idcoa = req.body.idcoa;
let glacc = req.body.coacode;
let amount = req.body.amount;
let targetrfs = req.body.targetrfs;
let crdb = "K";
let nik = req.body.nik;
let qry = "insert into tbl_requestbudget ";
qry = qry +"set trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',yearstgt='"+yearstgt+"',transactiondate='"+transactiondate+"',idxbudgettype='"+idxbudgettype+"',budgettype='"+budgettype+"',";
qry = qry +"idxbudgetid='"+idxbudgetid+"',budgetid='"+budgetid+"',activityname='"+activityname+"',idcoa='"+idcoa+"',glacc='"+glacc+"',targetrfs='"+targetrfs+"',";
qry = qry +"amount='"+amount+"',crdb='"+crdb+"',months=month(now()),years=year(now()), iby='"+nik+"',idt=now()";
// console.log(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);
}
}
async queryGetTrxIdReqBudget(req, callback){
var apires = this.getApiResultDefined();
try {
let nik = req.query.nik;
let qry = "select count(_idx) totalrows,date_format(now(),'%Y%m%d') dates from tbl_requestbudget where iby='"+nik+"' and year(idt)=year(now())";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var resp = JSON.parse(JSON.stringify(result));
// console.log(resp[0]['dates']);
var ymd = resp[0]['dates'];
ymd = ymd.toString().trim().replace("-","");
var counter = resp[0]['totalrows']+1;
var counterstr = ("0000000000"+counter);
counterstr = counterstr.substring(counterstr.length-4, counterstr.length);
var trxid = "TRX/"+ymd+"/"+nik+"/"+counterstr;
apires.success = true;
apires.data = trxid
callback(null, apires);
}
});
} catch (error) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateReqBudget(req,callback){
var apires = this.getApiResultDefined();
try {
let trxid= req.body.trxid;
let yearstgt= req.body.years;
let transactiondate = req.body.transactiondate;
let idxbudgettype= req.body.idbudgettype;
let budgettype = req.body.budgettype;
let idxbudgetid = req.body.idxbudgetid;
let budgetid = req.body.budgetid;
let activityname = req.body.activityname;
let idcoa = req.body.idcoa;
let glacc = req.body.coacode;
let amount = req.body.amount;
let targetrfs = req.body.targetrfs;
let crdb = "K";
let nik = req.body.nik;
let idreqbudget = req.body.idreqbudget;
let qry = "update tbl_requestbudget ";
qry = qry +"set trxid='"+trxid+"',yearstgt='"+yearstgt+"',transactiondate='"+transactiondate+"',idxbudgettype='"+idxbudgettype+"',budgettype='"+budgettype+"',";
qry = qry +"idxbudgetid='"+idxbudgetid+"',budgetid='"+budgetid+"',activityname='"+activityname+"',idcoa='"+idcoa+"',glacc='"+glacc+"',targetrfs='"+targetrfs+"',";
qry = qry +"amount='"+amount+"',crdb='"+crdb+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idreqbudget+"'";
// console.log(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.meta.message = "Data has been updated";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryDeleteReqBudget(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_requestbudget ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryReqBudgetList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let nik = req.body.nik;
let qry = "select * from vw_requestbudget ";
qry = qry +"where (trim(budgetid) like '%"+ keyword +"%' or trim(activityname) like '%"+ keyword +"%') ";
qry = qry +"and iby='"+nik+"' order by id asc";
// console.log(qry);
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){
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_requestbudget ";
qry = qry +"where (trim(budgetid) like '%"+ keyword +"%' or trim(activityname) like '%"+ keyword +"%') ";
qry = qry +"and iby='"+nik+"' order by id 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 queryReqBudgetDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let id = req.query.id;
// console.log(req);
let qry = "select * from vw_requestbudget ";
qry = qry +"where id='"+id+"' order by id asc limit 1";
// console.log(qry);
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);
}
}
async queryBudgetListbyRequest(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_budgetlistbyrequest order by _idx asc";
// console.log(qry);
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);
}
}
}
module.exports = BudgetAdapter;

345
adapter/coaadapter.js Normal file
View File

@ -0,0 +1,345 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
class CoaAdapter extends Adapter{
constructor(){
super();
}
async queryCoaList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let qry = "select * from vw_coa ";
qry = qry +"where (trim(coacode) like '%"+ keyword +"%' or trim(coaname) like '%"+ keyword +"%') order by id asc";
// console.log(qry);
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){
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
});
qry = "select * from vw_coa ";
qry = qry +"where (trim(coacode) like '%"+ keyword +"%' or trim(coaname) like '%"+ keyword +"%') order by id 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 queryGetCostCenter(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let qry = "select * from vw_costcenter ";
qry = qry +"where (trim(costcentercode) like '%"+ keyword +"%' or trim(costcentername) like '%"+ keyword +"%') order by id asc";
// console.log(qry);
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){
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
});
qry = "select * from vw_costcenter ";
qry = qry +"where (trim(costcentercode) like '%"+ keyword +"%' or trim(costcentername) like '%"+ keyword +"%') order by id 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 queryGetProfitCenter(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let qry = "select * from vw_profitcenter ";
qry = qry +"where (trim(profitcode) like '%"+ keyword +"%' or trim(profitname) like '%"+ keyword +"%') order by id asc";
// console.log(qry);
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){
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
});
qry = "select * from vw_profitcenter ";
qry = qry +"where (trim(profitcode) like '%"+ keyword +"%' or trim(profitname) like '%"+ keyword +"%') order by id 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 queryCoaDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let id = req.query.id;
// console.log(req);
let qry = "select * from vw_coa ";
qry = qry +"where id='"+id+"' order by id asc limit 1";
// console.log(qry);
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);
}
}
async queryDeleteCoa(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_coa ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryNewCoa(req,callback){
var apires = this.getApiResultDefined();
try {
let glacc = req.body.coacode;
let glaccname = req.body.coaname;
let nik = req.body.nik;
let qry = "insert into tbl_coa ";
qry = qry +"set glacc='"+glacc+"',glaccname='"+glaccname+"',iby='"+nik+"',idt=now()";
// console.log(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);
}
}
async queryUpdateCoa(req,callback){
var apires = this.getApiResultDefined();
try {
let glacc = req.body.coacode;
let glaccname = req.body.coaname;
let nik = req.body.nik;
let id = req.body.id;
let qry = "update tbl_coa ";
qry = qry +"set glacc='"+glacc+"',glaccname='"+glaccname+"',uby='"+nik+"',udt=now()";
qry = qry +"where _idx='"+id+"'";
// console.log(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.meta.message = "Updated Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
}
module.exports = CoaAdapter;

68
adapter/dbadapter.js Normal file
View File

@ -0,0 +1,68 @@
const e = require('express');
const db=require('../config/dbproc.js');
const Controller = require('../controllers/controller.js');
class DbAdapter extends Controller {
constructor(){
super();
}
async queryDynamictable(columninfo,tablename,callback) {
db.query('SELECT '+columninfo+' from ?? where isdeleted=0 order by id asc', [tablename], function (error, results, fields) {
var apiResult = {};
if (error) {
apiResult.meta = {
table: tablename,
type: "collection",
total: 0
}
apiResult.data = [];
callback(error,apiResult);
}
//make results
var resultJson = JSON.stringify(results);
resultJson = JSON.parse(resultJson);
apiResult.meta = {
table: tablename,
type: "collection",
total: resultJson.length,
total_entries: 0
}
//add our JSON results to the data table
apiResult.data = resultJson;
callback(null, apiResult);
});
}
static async queryExistsTransactionHeader(fakturnumber,callback){
var qry="select h.id idheader,d.id iddetail from tbl_salesheader h inner join tbl_salesdetail d on h.id=d.idheader";
qry= qry +" where h.fakturnumber='"+fakturnumber+"' and h.isdeleted=0 and d.isdeleted=0";
db.query(qry, [], function (error, results) {
var res={"res":false,"id":0};
if(error){throw error;}
if(results.length>0)
{
var iddetail=[];
results.forEach(function(e){
iddetail.push(e.iddetail);
});
res={
"res":true,
"id" :results[0].idheader,
"iddetail" : iddetail
}
}
callback(res);
});
}
}
module.exports = DbAdapter;

414
adapter/employeeadapter.js Normal file
View File

@ -0,0 +1,414 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
const MainAdapter = require('./mainadapter.js');
const mainadapter = new MainAdapter();
const jwt = require('jsonwebtoken');
const request = require('request');
const baseldap="https://mw.telkomcel.tl/tcel/v1/portal/";
const basetokenldap="https://mw.telkomcel.tl/tcel/v1/portal/tokenLDAP/";
// const Controller = require('../../WebServicesWakepo/controllers/controller.js');
class EmployeeAdapter extends Adapter{
constructor(){
super();
}
async queryEmployeeAuth(req,callback){
try {
var apires = this.getApiResultDefined();
let resuri={
'method': 'post',
'url': baseldap+'loginLDAP',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer isadjoijoij87y123jkj912839u1201932'
},
form: {
"nik":req.body.nik,
"pass":req.body.pass,
"app":"e-Procurement"
},
};
//console.log(resuri);
request(resuri, function (error, response) {
if (error) {
apires.meta.code = 500;
apires.meta.message = error.toString();
callback('error',apires);
}
else
{
var res = JSON.parse(response.body);
var token = res['data']['data']['token'];
// console.log(token);
// console.log(res['data']['status']);
if(res['data']['status']=='success'){
// if(200==200){
resuri={
'method': 'post',
'url': basetokenldap,
'headers': {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer isadjoijoij87y123jkj912839u1201932'
},
form: {
"nik":req.body.nik,
"token":token,
"otp":1
}
}
// console.log(resuri);
request(resuri, function (error, resp1) {
if (error) {
apires.meta.code = 500;
apires.meta.message = error.toString();
callback('error',apires);
}
else
{
var res=JSON.parse(resp1.body);
console.log(res);
if(res['data']['status']=='error'){
apires.meta.code = 500;
apires.meta.message = res['data']['message'].toString();
callback('error',apires);
}
else{
mainadapter.queryGetToken(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
let message = data.meta.message;
let success = true;
// console.log(data);
if(err) {
statusCode = 500;
success = false;
}
apires.meta.code = statusCode;
apires.meta.message = message;
apires.success = success;
apires.data = data.data;
// console.log(apires);
callback(null,apires);
});
}
}
});
}
else{
apires.meta.code = 201;
apires.meta.message = "Get token failed or LDAP authentication not authorize";
callback(null, apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryEmployeeWithoutAuth(req,callback){
try {
var apires = this.getApiResultDefined();
let resuri={
'method': 'post',
'url': baseldap+'loginLDAP',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer isadjoijoij87y123jkj912839u1201932'
},
form: {
"nik":req.body.nik,
"pass":req.body.pass,
"app":"e-Procurement"
},
};
// console.log(resuri);
// request(resuri, function (error, response) {
// if (error) {
// apires.meta.code = 500;
// apires.meta.message = error.toString();
// callback('error',apires);
// }
// else
// {
// console.log(response.body);
// var res = JSON.parse(response.body);
// console.log(res);
// console.log(res['data']['res']);
// if(res['data']['res']==200){
if(200==200){
mainadapter.queryGetToken(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
let message = data.meta.message;
let success = true;
// console.log(data);
if(err) {
statusCode = 500;
success = false;
}
apires.meta.code = statusCode;
apires.meta.message = message;
apires.success = success;
apires.data = data.data;
// console.log(apires);
callback(null,apires);
});
}
else{
apires.meta.code = 201;
apires.meta.message = "Get token failed or LDAP authentication not authorize";
callback(null, apires);
}
// }
// });
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryEmployeeAccessibility(req, callback){
try {
var apires = this.getApiResultDefined();
var nik = req.body.nik;
// let qry = "select * from vw_menusaccessibility where nik='"+nik+"'";
let qry = "select ifnull(t._idx,n._idx) _idx,ifnull(t.menutext,n.menutext) menutext,";
qry = qry +"ifnull(t.sort, n.sort) sort,ifnull(t.idemployee,0) idemployee,ifnull(t.nik,'') nik,ifnull(t.isactivated,0) isactivated from ";
qry = qry +"tbl_menus n left join (select * from vw_menusaccessibility where nik='"+nik+"') t on n._idx=t._idx or t._idx is null";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
let resultJson = JSON.stringify(result);
resultJson = JSON.parse(resultJson);
apires.success = true;
apires.data = resultJson;
callback(null,apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryEmployeeSetMenuAccessibility(req, callback){
try {
var apires = this.getApiResultDefined();
var idemployee = req.body.idemployee;
var nik = req.body.nik;
var datamenu = JSON.parse(req.body.datamenu);
var userby = req.body.userby;
// console.log(datamenu);return false;
var dataRows = datamenu.length;
Object.keys(datamenu).forEach(function(key){
var idxmenu =datamenu[key]['idxmenu'];
var isactivated = datamenu[key]['isactivated'];
let qrym="insert into tbl_employee_accessibility ";
qrym=qrym+"set idemployee='"+idemployee+"',nik='"+nik+"',idxmenu='"+idxmenu+"',isactivated='"+isactivated+"',";
qrym=qrym+"iby='"+userby+"',idt=now()";
let qry="select _idx from tbl_employee_accessibility where nik='"+nik+"' and idxmenu='"+idxmenu+"' and isdeleted=0 order by _idx asc limit 1";
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){
qrym="update tbl_employee_accessibility ";
qrym=qrym+"set isactivated='"+isactivated+"',uby='"+userby+"',udt=now()";
qrym=qrym+"where _idx='"+result[0]['_idx']+"'";
}
// console.log(qrym);
db.query(qrym,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
if(0 === --dataRows){
apires.success = true;
apires.data = "Data Has been Saved";
callback(null,apires);
}
}
});
}
});
});
// console.log(qry);
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryListEmployee(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_employee order by id asc";
// console.log(qry);
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);
}
}
async queryEmployeeMenus(req,callback){
try {
let apires = this.getApiResultDefined();
let nik = req.body.nik;
let qry = "select * from vw_emp_accessibility where nik='" + nik + "' and menutype<>'D' order by sort,name asc";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
let menusRows = result.length;
if(menusRows>0){
Object.keys(result).forEach(function(key){
qry = "select * from vw_emp_accessibility where menuheader='"+result[key]['_idx']+"' and nik='" + nik + "' and menutype='D' order by _idx asc";
db.query(qry,[],function(err,resultsubmenus,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback(apires,null);
}
else{
// result[key]['submenus'] = [];
if(resultsubmenus.length>0){
// result[key]['countSubmenus'] = resultsubmenus.length;
Object.keys(resultsubmenus).forEach(function(key){
delete resultsubmenus[key]['_idx'];
delete resultsubmenus[key]['menuid'];
delete resultsubmenus[key]['menuheader'];
delete resultsubmenus[key]['isactivated'];
delete resultsubmenus[key]['nik'];
delete resultsubmenus[key]['menutype'];
delete resultsubmenus[key]['class'];
delete resultsubmenus[key]['icon'];
})
result[key]['submenu'] = JSON.parse(JSON.stringify(resultsubmenus));
}
if(result[key]['menutype']=='H'){
delete result[key]['_idx'];
delete result[key]['menuid'];
delete result[key]['menuheader'];
delete result[key]['isactivated'];
delete result[key]['nik'];
delete result[key]['menutype'];
}
if(result[key]['menutype']=='H1'){
result[key]['navheader']=result[key]['name'];
delete result[key]['_idx'];
delete result[key]['menuid'];
delete result[key]['menuheader'];
delete result[key]['isactivated'];
delete result[key]['nik'];
delete result[key]['menutype'];
delete result[key]['i18n'];
delete result[key]['class'];
delete result[key]['url'];
delete result[key]['slug'];
delete result[key]['name'];
}
if(result[key]['menutype']=='S'){
delete result[key]['_idx'];
delete result[key]['menuid'];
delete result[key]['menuheader'];
delete result[key]['isactivated'];
delete result[key]['nik'];
delete result[key]['menutype'];
}
if(0 === --menusRows){
let resultJson = JSON.stringify(result);
resultJson = JSON.parse(resultJson);
apires.success = true;
apires.data = resultJson;
callback(null,apires);
}
}
});
});
}
else{
apires.meta['message'] = "Menu not found for nik "+nik;
apires.meta['code'] = 201;
callback('err',apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error', apires);
}
}
}
module.exports = EmployeeAdapter;

533
adapter/financeadapter.js Normal file
View File

@ -0,0 +1,533 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
const fs = require("fs");
class FinanceAdapter extends Adapter{
constructor(){
super();
}
async queryPoPayList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let qry = "select * from vw_popaylist ";
qry = qry + "where podescription like '%" + keyword + "%' ";
// qry = qry + "order by idxpo asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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_popaylist ";
qry = qry + "where podescription like '%" + keyword + "%' ";
qry = qry + "order by idxpo 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 queryPoPayListDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpo = req.query.idxpo;
let qry = "select * from vw_popaylist ";
qry = qry + "where idxpo='" + idxpo + "' ";
qry = qry + "order by idxpo asc";
// console.log(qry);
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){
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 queryPayChecklist(req,callback){
var apires = this.getApiResultDefined();
try {
// let limit = req.query.limit;
// let offset = req.query.offset;
// let keyword = req.query.keyword;
let qry = "select _idx, checklistname from tbl_financechecklist where isdeleted=0";
// console.log(qry);
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){
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 queryCurrencyList(req,callback){
var apires = this.getApiResultDefined();
try {
// let limit = req.query.limit;
// let offset = req.query.offset;
// let keyword = req.query.keyword;
let qry = "select _idx, currency from tbl_currency where isdeleted=0";
// console.log(qry);
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){
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 querySubmitPayPo(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpo = req.body.idxpo;
let ponumber = req.body.ponumber;
let idxvendor = req.body.idxvendor;
let vendorname = req.body.vendorname;
let totalpo = req.body.totalpo;
let contractnumber = req.body.contractnumber;
let percentpay = req.body.percentpay;
let totalinvoice = req.body.totalinvoice;
let payto = req.body.payto;
let paymentdate = req.body.paymentdate;
let payperiod = req.body.payperiod;
let whtvalue = req.body.whtvalue;
let costcenter = req.body.costcenter;
let description = req.body.description;
let status = req.body.status;
let statusdescription = req.body.statusdescription;
let nikpreparedby = req.body.nikpreparedby;
let prepareddate = req.body.prepareddate;
let nikreviewby = req.body.nikreviewby;
let reviewdate = req.body.reviewdate;
let nikreviewdirby = req.body.nikreviewdirby;
let reviewdirdate = req.body.reviewdirdate;
let reviewdescription = req.body.reviewdescription;
let nik = req.body.nik;
let checklistdata = req.body.checklistdata;
// console.log(checklistdata)
let qry = "insert into tbl_finance set idxpo='"+idxpo+"',ponumber='"+ponumber+"',idxvendor='"+idxvendor+"',";
qry = qry + "vendorname='"+vendorname+"',totalpo='"+totalpo+"',contractnumber='"+contractnumber+"',";
qry = qry + "percentpay='"+percentpay+"',totalinvoice='"+totalinvoice+"',payto='"+payto+"',paymentdate='"+paymentdate+"',";
qry = qry + "payperiod='"+payperiod+"',whtvalue='"+whtvalue+"',costcenter='"+costcenter+"',";
qry = qry + "description='"+description+"',status='"+status+"',statusdescription='"+statusdescription+"',";
qry = qry + "laststatusupdate=now(),nikpreparedby='"+nikpreparedby+"',prepareddate='"+prepareddate+"',";
qry = qry + "nikreviewby='"+nikreviewby+"',reviewdate='"+reviewdate+"',nikreviewdirby='"+nikreviewdirby+"',";
qry = qry + "reviewdirdate='"+reviewdirdate+"',reviewdescription='"+reviewdescription+"',iby='"+nik+"',idt=now()";
console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var idxheader = result.insertId;
Object.keys(checklistdata).forEach(function(key){
var idxchecklist = checklistdata[key]['idxchecklist'];
var checklistname = checklistdata[key]['checklistname'];
var iscomplete = checklistdata[key]['iscomplete'];
var isvalid = checklistdata[key]['isvalid'];
qry = "insert into tbl_financedetailchecklist set idxheader='"+idxheader+"',";
qry = qry + "idxchecklist='"+idxchecklist+"',checklistname='"+checklistname+"',";
qry = qry + "iscomplete='"+iscomplete+"',isvalid='"+isvalid+"',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err2,result2,fields2){return result2;});
});
apires.success = true;
apires.data={
"idxfinance":idxheader,
"status" : "Data Has Been Submitted"
};
callback(null, apires);
// if(result.length>0){
// 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 queryFinanceList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
// let qry = "select * from vw_financelist ";
// qry = qry + "where podescription like '%" + keyword + "%' ";
// qry = qry + "order by idxpo asc limit " + offset + ", " + limit;
let qry = "select * from vw_financelist ";
qry = qry + "where podescription like '%" + keyword + "%' ";
qry = qry + "order by idxpo asc";
// console.log(qry);
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){
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_financelist ";
qry = qry + "where podescription like '%" + keyword + "%' ";
qry = qry + "order by idxpo 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 queryFinanceListDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let idxpo = req.query.idxpo;
let qry = "select * from vw_financelistdetail ";
qry = qry + "where idxpo='"+idxpo+"'";
// console.log(qry);
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){
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_financelistdetail ";
qry = qry + "where idxpo='"+idxpo+"' ";
qry = qry + "order by idxfinance 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 queryFinanceDetailUpload(req,callback){
var apires = this.getApiResultDefined();
try {
let idxfinance = req.query.idxfinance;
let qry = "select * from vw_financelistdetail ";
qry = qry + "where idxfinance='"+idxfinance+"'";
// console.log(qry);
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.data = JSON.parse(JSON.stringify(result));
qry = "select _idx,idxchecklist,checklistname,iscomplete,isvalid ";
qry = qry +"from tbl_financedetailchecklist where idxheader='"+idxfinance+"' and isdeleted=0 ";
qry = qry +"order by _idx asc";
db.query(qry,[],function(err1,result1,fields1){
if(err1){
apires.meta['message'] = err1.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.success = true;
apires.data[0]['checklistinfo'] = JSON.parse(JSON.stringify(result1));
callback(null,apires);
}
});
// apires.success = true;
// apires.data = 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 queryUploadDocFin(req,filedoc, callback) {
try {
var apires = this.getApiResultDefined();
var idxfinance = req.body.idxfinance;
var paymentdate = req.body.paymentdate;
var nik = req.body.nik;
var qry = "update tbl_finance set status=2,statusdescription='Verify By Fin',filedoc='"+filedoc+"',paymentdate='"+paymentdate+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxfinance +"'";
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 = FinanceAdapter;

221
adapter/invadapter.js Normal file
View File

@ -0,0 +1,221 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
class InventoryAdapter extends Adapter{
constructor(){
super();
}
async queryNewInventory(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq= req.body.idxpoboq;
let description= req.body.description;
let nik = req.body.nik;
let qry = "insert into tbl_poboqdetail ";
qry = qry +"set description='"+description+"',iby='"+nik+"',idt=now()";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var qry = "select * from vw_poboqdetail where idxpoboq='"+idxpoboq+"'";
db.query(qry,[],function(err,result1,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(result1));
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdInventory(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq= req.body.idxpoboq;
let idxpoboqdetail= req.body.idxpoboqdetail;
let description= req.body.description;
let nik = req.body.nik;
let qry = "update tbl_poboqdetail ";
qry = qry +"set description='"+description+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxpoboqdetail+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var qry = "select * from vw_poboqdetail where idxpoboq='"+idxpoboq+"'";
db.query(qry,[],function(err,result1,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(result1));
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryDelInventory(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq= req.body.idxpoboq;
let idxpoboqdetail= req.body.idxpoboqdetail;
let remarkdeleted=req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_poboqdetail ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now() ";
qry = qry +"where _idx='"+idxpoboqdetail+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var qry = "select * from vw_poboqdetail where idxpoboq='"+idxpoboq+"'";
db.query(qry,[],function(err,result1,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(result1));
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryInventoryList(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq = req.query.idxpoboq;
let limit = req.query.limit;
let offset = req.query.offset;
// let keyword = req.query.keyword;
// let nik = req.body.nik;
let qry = "select * from vw_poboqdetail ";
qry = qry +"where idxpoboq='"+ idxpoboq +"' ";
qry = qry +"order by _idx asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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_poboqdetail ";
qry = qry +"where idxpoboq='"+ idxpoboq +"' ";
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);
}
}
}
module.exports = InventoryAdapter;

358
adapter/inventoryadapter.js Normal file
View File

@ -0,0 +1,358 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
class InventoryAdapter extends Adapter{
constructor(){
super();
}
async queryNewInventory(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq= req.body.idxpoboq;
let description= req.body.description;
let nik = req.body.nik;
let qty = req.body.qty;
let isbulk = req.body.isbulk;
let qry = "insert into tbl_poboqdetail ";
qry = qry +"set idxpoboq='"+idxpoboq+"',description='"+description+"',qty='"+qty+"',isbulk='"+isbulk+"',iby='"+nik+"',idt=now()";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var qry = "select * from vw_poboqdetail where idxpoboq='"+idxpoboq+"'";
db.query(qry,[],function(err,result1,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(result1));
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdInventory(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq= req.body.idxpoboq;
let idxpoboqdetail= req.body.idxpoboqdetail;
let description= req.body.description;
let nik = req.body.nik;
let qry = "update tbl_poboqdetail ";
qry = qry +"set description='"+description+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxpoboqdetail+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var qry = "select * from vw_poboqdetail where idxpoboq='"+idxpoboq+"'";
db.query(qry,[],function(err,result1,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(result1));
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryDelInventory(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq= req.body.idxpoboq;
let idxpoboqdetail= req.body.idxpoboqdetail;
let remarkdeleted=req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_poboqdetail ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now() ";
qry = qry +"where _idx='"+idxpoboqdetail+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var qry = "select * from vw_poboqdetail where idxpoboq='"+idxpoboq+"'";
db.query(qry,[],function(err,result1,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(result1));
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryInventoryList(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpoboq = req.query.idxpoboq;
let limit = req.query.limit;
let offset = req.query.offset;
// let keyword = req.query.keyword;
// let nik = req.body.nik;
let qry = "select * from vw_poboqdetail ";
qry = qry +"where idxpoboq='"+ idxpoboq +"' ";
qry = qry +"order by _idx asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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_poboqdetail ";
qry = qry +"where idxpoboq='"+ idxpoboq +"' ";
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 queryInventoryHeaderList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let nik = req.body.nik;
let qry = "select * from vw_poinventoryheader ";
qry = qry +"where identifyprojectnumber like '%"+ keyword +"%' ";
qry = qry +"order by _idx asc";// limit " + offset + ", " + limit;
// console.log(qry);
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){
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_poinventoryheader ";
qry = qry +"where identifyprojectnumber 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 queryInventoryDetailList(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpo = req.query.idxpo;
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let nik = req.body.nik;
let qry = "select * from vw_poinventorydetail ";
qry = qry +"where idxheader='"+idxpo+"' and items like '%"+ keyword +"%' ";
qry = qry +"order by _idx asc";// limit " + offset + ", " + limit;
// console.log(qry);
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){
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_poinventorydetail ";
qry = qry +"where idxheader='"+idxpo+"' and items 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);
}
}
}
module.exports = InventoryAdapter;

View File

@ -0,0 +1,864 @@
const db=require('../config/dbproc.js');
// const slashes = require('slashes');
const QRCode = require('qrcode');
const Adapter=require('./dbadapter.js');
const fs = require("fs");
const { callbackPromise } = require('nodemailer/lib/shared/index.js');
const path = require('path');
// const { fs } = require('fs').promises;
const libre = require('libreoffice-convert');
libre.convertAsync = require('util').promisify(libre.convert);
function getToken(){
try {
var n1=Math.floor(Math.random() * 9) + 0;
var n2=Math.floor(Math.random() * 9) + 0;
var n3=Math.floor(Math.random() * 9) + 0;
var n4=Math.floor(Math.random() * 9) + 0;
var n5=Math.floor(Math.random() * 9) + 0;
var n6=Math.floor(Math.random() * 9) + 0;
var otp=n1.toString()+n2.toString()+n3.toString()+n4.toString()+n5.toString()+n6.toString();
// console.log(otp);
return otp;
} catch (error) {
return error;
}
}
async function ConvertToPdf(inputPath, outputPath) {
// const ext = '.pdf'
// const inputPath = path.join(__dirname, '/resources/example.docx');
// const outputPath = path.join(__dirname, `/resources/example${ext}`);
// Read file
const docxBuf = await fs.readFile(inputPath);
// Convert it to pdf format with undefined filter (see Libreoffice docs about filter)
let pdfBuf = await libre.convertAsync(docxBuf, '.pdf', undefined);
// Here in done you have pdf file which you can save or transfer in another stream
await fs.writeFile(outputPath, pdfBuf);
}
class JustificationAdapter extends Adapter{
constructor(){
super();
}
async queryJustificationBudgetRequestList(req,callback){
var apires = this.getApiResultDefined();
try {
let id = req.query.id;
// console.log(req);
let qry = "select * from vw_requestbudget order by id asc";
// console.log(qry);
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);
}
}
async queryNewJustification(filename, req, callback){
var apires = this.getApiResultDefined();
try {
// console.log(req.body);
let idxrequestbudget= req.body.idxrequestbudget;
let trxid = req.body.trxid;
let justificationnumber = req.body.nomorjustifikasi;
let title = req.body.judul;
let division = req.body.divisi;
let glacc = req.body.acccode;
let description = req.body.deskripsi;
let budgettype = req.body.jenisbudget;
let amount = req.body.nilai;
let useddate = req.body.tanggalpelaksanaan;
let textpurpose = "";//req.body.maksudtujuan;
let textintroduce = "";//req.body.latarbelakang;
let textstrategic = "";//req.body.strategis;
let textbussiness = "";//req.body.bisnis;
let textrisk = "";//req.body.risiko;
let textfund = "";//req.body.pembiayaan;
let textrecomendation = "";//req.body.rekomendasi;
let textschedule = "";//req.body.penjadwalan;
let filedoc = filename;
let nik = req.body.nik;
let boq = JSON.parse(req.body.boq);
let ttd = JSON.parse(req.body.ttd);
let status = -1;
let statusdescription = "draft";
let qry = "insert into tbl_justification ";
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',textpurpose='"+textpurpose+"',textintroduce='"+textintroduce+"',";
qry = qry +"textstrategic='"+textstrategic+"',textbussiness='"+textbussiness+"',textrisk='"+textrisk+"',textfund='"+textfund+"',textrecomendation='"+textrecomendation+"',";
qry = qry +"textschedule='"+textschedule+"',status='"+status+"',statusdescription='"+statusdescription+"',filedoc='"+filedoc+"',iby='"+nik+"',idt=now()";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var res = JSON.parse(JSON.stringify(result));
var idjustification = res.insertId;
// ==== Add boq
// console.log(boq);
qry="";
Object.keys(boq).forEach(function(key){
var items = boq[key]['items'];
var qty = boq[key]['qty'];
var unitprice = boq[key]['unitprice'];
var units = boq[key]['units']||"";
var total = boq[key]['total'];
qry = "insert into tbl_justificationboq set idxjustification='"+idjustification+"',";
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err2,result2,fields2){return result2;});
// console.log(r);
});
// ==== add ttd
var created = ttd.dibuatoleh;
var approval = ttd.disetujuioleh;
Object.keys(created).forEach(function(key){
var token =getToken();
var idemployee = created[key]['idemployee'];
var nikapproval = created[key]['nik'];
qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nikapproval+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
// QRCode.toDataURL(token, function (err, code) {
// if(err) return console.log("error occurred")
// qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
// qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='"+code+"',iby='"+nik+"',idt=now()";
// db.query(qry,[],function(err3,result3,fields3){return result3;});
// // Printing the code
// // console.log(code)
// })
// console.log(r);
});
Object.keys(approval).forEach(function(key){
var token =getToken();
var idemployee = approval[key]['idemployee'];
var nik = approval[key]['nik'];
// if(err) return console.log("error occurred")
qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
// QRCode.toDataURL(token, function (err, code) {
// if(err) return console.log("error occurred")
// qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
// qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='"+code+"',iby='"+nik+"',idt=now()";
// db.query(qry,[],function(err3,result3,fields3){return result3;});
// // Printing the code
// // console.log(code)
// })
// console.log(r);
});
apires.success = true;
apires.meta.message = "Saved Success";
apires.data = res;
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateJustification(filename, req, callback){
var apires = this.getApiResultDefined();
try {
// console.log(req.body);
let idxjustification= req.body.idxjustification;
let idxrequestbudget= req.body.idxrequestbudget;
let trxid = req.body.trxid;
let justificationnumber = req.body.nomorjustifikasi;
let title = req.body.judul;
let division = req.body.divisi;
let glacc = req.body.acccode;
let description = req.body.deskripsi;
let budgettype = req.body.jenisbudget;
let amount = req.body.nilai;
let useddate = req.body.tanggalpelaksanaan;
let textpurpose = "";//req.body.maksudtujuan;
let textintroduce = "";//req.body.latarbelakang;
let textstrategic = "";//req.body.strategis;
let textbussiness = "";//req.body.bisnis;
let textrisk = "";//req.body.risiko;
let textfund = "";//req.body.pembiayaan;
let textrecomendation = "";//req.body.rekomendasi;
let textschedule = "";//req.body.penjadwalan;
let filedoc = filename;
let nik = req.body.nik;
let boq = JSON.parse(req.body.boq);
let ttd = JSON.parse(req.body.ttd);
let filedocqry = "filedoc='"+filedoc+"',";
if(filename==""){filedocqry="";}
// console.log(filedocqry);
let qry = "update tbl_justification ";
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',textpurpose='"+textpurpose+"',textintroduce='"+textintroduce+"',";
qry = qry +"textstrategic='"+textstrategic+"',textbussiness='"+textbussiness+"',textrisk='"+textrisk+"',textfund='"+textfund+"',textrecomendation='"+textrecomendation+"',";
qry = qry +"textschedule='"+textschedule+"',"+filedocqry+"uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxjustification+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
Object.keys(boq).forEach(function(key){
var idboq = boq[key]['id'];
var items = boq[key]['items'];
var qty = boq[key]['qty'];
var unitprice = boq[key]['unitprice'];
var units = boq[key]['units'];
var total = boq[key]['total'];
var action = boq[key]['action'];
qry = "insert into tbl_justificationboq set idxjustification='"+idxjustification+"',";
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_justificationboq set idxjustification='"+idxjustification+"',";
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+idboq+"'";
}
if(action=='delete'){
qry = "update tbl_justificationboq set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry + "where _idx='"+idboq+"'";
}
db.query(qry,[],function(err2,result2,fields2){return result2;});
// console.log(r);
});
var created = ttd.dibuatoleh;
var approval = ttd.disetujuioleh;
Object.keys(created).forEach(function(key){
var token =getToken();
var id = created[key]['id'];
var idemployee = created[key]['idemployee'];
var nik = created[key]['nik'];
var action = created[key]['action'];
qry = "insert into tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"' and issigned=0";
}
if(action=='delete'){
qry = "update tbl_justificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
Object.keys(approval).forEach(function(key){
var token =getToken();
var id = approval[key]['id'];
var idemployee = approval[key]['idemployee'];
var nik = approval[key]['nik'];
var action = approval[key]['action'];
qry = "insert into tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"' and issigned=0";
}
if(action=='delete'){
qry = "update tbl_justificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
apires.success = true;
apires.meta.message = "Updated Success";
apires.data = JSON.parse(JSON.stringify(result));
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateStatusJustification(req, callback) {
try {
var apires = this.getApiResultDefined();
var idxjustification = req.body.idxjustification;
var status = req.body.status;
var statusdescription = req.body.statusdescription;
var nik = req.body.nik;
var qry = "update tbl_justification set status='" + status +"',statusdescription='" + statusdescription +"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxjustification +"'";
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);
}
}
async queryConvertdocxtoPdf(req, callback) {
try {
var apires = this.getApiResultDefined();
var idxjustification = req.body.idxjustification;
var qry = "select * from vw_justification where id='" + idxjustification +"'";
// console.log(qry);
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){
const inputPath = "/home/nodejs/wsproc/assets/words/justifikasitemplate.docx";
const outputPath = "/home/nodejs/wsproc/assets/pdf/justifikasitemplate.pdf";
// console.log(__dirname);
ConvertToPdf(inputPath, outputPath).catch(function (err) {
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else{
apires.success = true;
callback(null,apires);
}
// console.log(`Error converting file: ${err}`);
});
}
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 querySignedJustification(filename, req, callback) {
try {
var apires = this.getApiResultDefined();
let idxjustification= req.body.idxjustification;
let idxrequestbudget= req.body.idxrequestbudget;
let trxid = req.body.trxid;
let justificationnumber = req.body.nomorjustifikasi;
let title = req.body.judul;
let division = req.body.divisi;
let glacc = req.body.acccode;
let description = req.body.deskripsi;
let budgettype = req.body.jenisbudget;
let amount = req.body.nilai;
let useddate = req.body.tanggalpelaksanaan;
let filedoc = filename;
var idxapproval = req.body.idxapproval;
var nikapproval = req.body.nikapproval;
var datesigned = req.body.datesigned;
// console.log(datesigned);
var nik = req.body.nik;
var token = this.getToken();
var filepng = token+".png";
// token =getToken();
token = token +","+nikapproval;
let filedocqry = "filedoc='"+filedoc+"',";
if(filename=="")
{
filedocqry="";
// apires.meta['message'] = "File tidak ditemukan";
// apires.meta['code'] = 500;
// callback(null, apires);
}
let qry = "update tbl_justification ";
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',";
qry = qry +filedocqry+"uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxjustification+"'";
db.query(qry,[],function(err,result,fields){
if(err){
console.log('d');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
QRCode.toDataURL(token, function (err, code) {
// console.log(code);`
if(err) {
console.log('ddf');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var imageBuffer = Adapter.decodeBase64Image(code);
fs.writeFile('./assets/png/'+filepng, imageBuffer.data, function(err) {
// console.log(err);
if(err){
console.log('eee');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback(err.toString(), apires);
}
else{
var qry = "update tbl_justificationttd set token=md5('"+token+"'),imgqr='"+filepng+"',issigned='1',signeddate='"+datesigned+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxapproval +"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
console.log('ttetete');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.success = true;
// ===
qry = "select status from tbl_justification where _idx='"+idxjustification+"'";
db.query(qry,[],function(err,result2,fields){
if(err){
console.log('bbbb');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else
{
var status = result2[0]['status'];
var isapproved=0;
if(status==2){isapproved = 1;}
apires.data = {
"isapproved":isapproved,
"token":token,
"urltoken": process.env.BASEURL+"/main/getimageinfo?route=png&name="+filepng
};
callback(null, apires);
}
});
}
});
}
});
}
});
}
});
// else{
// }
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryDeleteJustification(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_justification ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryListCreatedBy(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_createdby order by id asc";
// console.log(qry);
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);
}
}
async queryListCheckedBy(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_checkedby order by id asc";
// console.log(qry);
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);
}
}
async queryListApprovedBy(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_approvedby order by id asc";
// console.log(qry);
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);
}
}
async queryJustificationDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let _idx= req.query.id;
let qry = "select * from vw_justificationdetail where id='"+_idx+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
let dataRows = result.length;
if(result.length<=0){
apires.meta.message = "Record not found";
callback('',apires);
}
else{
Object.keys(result).forEach(function(key){
qry = "select * from vw_justificationboq where idxjustification='"+_idx+"' order by id asc";
// console.log(qry);
db.query(qry,[],function(err,result2,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else{
result[key]['boq'] = [];
result[key]['ttd']= [];
if(result2.length>0){
result[key]['boq'] = JSON.parse(JSON.stringify(result2));
}
// === Get Ttd
qry = "select * from vw_justificationttd where idxjustification='"+_idx+"' order by id asc";
// console.log(qry);
db.query(qry,[],function(err,result3,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else{
if(result3.length>0){
var dibuatoleh = [];
var disetujuioleh = [];
Object.keys(result3).forEach(function(key2){
if(result3[key2]['category']=='CRE'){
dibuatoleh.push(JSON.parse(JSON.stringify(result3[key2])));
}else{
disetujuioleh.push(JSON.parse(JSON.stringify(result3[key2])));
}
});
result[key]['ttd'] = {
"dibuatoleh" : dibuatoleh,
"disetujuioleh" : disetujuioleh
}
// result[key]['ttd'] = JSON.parse(JSON.stringify(result3));
}
if(0 === --dataRows){
let resultJson = JSON.stringify(result);
console.log(resultJson);
resultJson = JSON.parse(resultJson);
apires.success = true;
apires.data = resultJson;
callback(null,apires);
}
}
});
}
});
});
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryJustificationList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let nik = req.body.nik;
let status = req.body.status;
let swherenik="";
if(nik){
swherenik="iby='"+nik+"' and ";
}
// let qry = "select * from vw_justification ";
// qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
// qry = qry +"and iby='"+nik+"' and status in("+status+") order by id asc";
let qry = "select * from vw_justification ";
qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc";
// console.log(qry);
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){
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_justification ";
qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc limit " + offset + ", " + limit;
// console.log(qry);
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);
}
}
}
module.exports = JustificationAdapter;

View File

@ -0,0 +1,864 @@
const db=require('../config/dbproc.js');
// const slashes = require('slashes');
const QRCode = require('qrcode');
const Adapter=require('./dbadapter.js');
const fs = require("fs");
const { callbackPromise } = require('nodemailer/lib/shared/index.js');
const path = require('path');
// const { fs } = require('fs').promises;
const libre = require('libreoffice-convert');
libre.convertAsync = require('util').promisify(libre.convert);
function getToken(){
try {
var n1=Math.floor(Math.random() * 9) + 0;
var n2=Math.floor(Math.random() * 9) + 0;
var n3=Math.floor(Math.random() * 9) + 0;
var n4=Math.floor(Math.random() * 9) + 0;
var n5=Math.floor(Math.random() * 9) + 0;
var n6=Math.floor(Math.random() * 9) + 0;
var otp=n1.toString()+n2.toString()+n3.toString()+n4.toString()+n5.toString()+n6.toString();
// console.log(otp);
return otp;
} catch (error) {
return error;
}
}
async function ConvertToPdf(inputPath, outputPath) {
// const ext = '.pdf'
// const inputPath = path.join(__dirname, '/resources/example.docx');
// const outputPath = path.join(__dirname, `/resources/example${ext}`);
// Read file
const docxBuf = await fs.readFile(inputPath);
// Convert it to pdf format with undefined filter (see Libreoffice docs about filter)
let pdfBuf = await libre.convertAsync(docxBuf, '.pdf', undefined);
// Here in done you have pdf file which you can save or transfer in another stream
await fs.writeFile(outputPath, pdfBuf);
}
class JustificationAdapter extends Adapter{
constructor(){
super();
}
async queryJustificationBudgetRequestList(req,callback){
var apires = this.getApiResultDefined();
try {
let id = req.query.id;
// console.log(req);
let qry = "select * from vw_requestbudget order by id asc";
// console.log(qry);
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);
}
}
async queryNewJustification(filename, req, callback){
var apires = this.getApiResultDefined();
try {
// console.log(req.body);
let idxrequestbudget= req.body.idxrequestbudget;
let trxid = req.body.trxid;
let justificationnumber = req.body.nomorjustifikasi;
let title = req.body.judul;
let division = req.body.divisi;
let glacc = req.body.acccode;
let description = req.body.deskripsi;
let budgettype = req.body.jenisbudget;
let amount = req.body.nilai;
let useddate = req.body.tanggalpelaksanaan;
let textpurpose = "";//req.body.maksudtujuan;
let textintroduce = "";//req.body.latarbelakang;
let textstrategic = "";//req.body.strategis;
let textbussiness = "";//req.body.bisnis;
let textrisk = "";//req.body.risiko;
let textfund = "";//req.body.pembiayaan;
let textrecomendation = "";//req.body.rekomendasi;
let textschedule = "";//req.body.penjadwalan;
let filedoc = filename;
let nik = req.body.nik;
let boq = JSON.parse(req.body.boq);
let ttd = JSON.parse(req.body.ttd);
let status = -1;
let statusdescription = "draft";
let qry = "insert into tbl_justification ";
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',textpurpose='"+textpurpose+"',textintroduce='"+textintroduce+"',";
qry = qry +"textstrategic='"+textstrategic+"',textbussiness='"+textbussiness+"',textrisk='"+textrisk+"',textfund='"+textfund+"',textrecomendation='"+textrecomendation+"',";
qry = qry +"textschedule='"+textschedule+"',status='"+status+"',statusdescription='"+statusdescription+"',filedoc='"+filedoc+"',iby='"+nik+"',idt=now()";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var res = JSON.parse(JSON.stringify(result));
var idjustification = res.insertId;
// ==== Add boq
// console.log(boq);
qry="";
Object.keys(boq).forEach(function(key){
var items = boq[key]['items'];
var qty = boq[key]['qty'];
var unitprice = boq[key]['unitprice'];
var units = boq[key]['units']||"";
var total = boq[key]['total'];
qry = "insert into tbl_justificationboq set idxjustification='"+idjustification+"',";
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err2,result2,fields2){return result2;});
// console.log(r);
});
// ==== add ttd
var created = ttd.dibuatoleh;
var approval = ttd.disetujuioleh;
Object.keys(created).forEach(function(key){
var token =getToken();
var idemployee = created[key]['idemployee'];
var nikapproval = created[key]['nik'];
qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nikapproval+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
// QRCode.toDataURL(token, function (err, code) {
// if(err) return console.log("error occurred")
// qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
// qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='"+code+"',iby='"+nik+"',idt=now()";
// db.query(qry,[],function(err3,result3,fields3){return result3;});
// // Printing the code
// // console.log(code)
// })
// console.log(r);
});
Object.keys(approval).forEach(function(key){
var token =getToken();
var idemployee = approval[key]['idemployee'];
var nik = approval[key]['nik'];
// if(err) return console.log("error occurred")
qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
// QRCode.toDataURL(token, function (err, code) {
// if(err) return console.log("error occurred")
// qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
// qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='"+code+"',iby='"+nik+"',idt=now()";
// db.query(qry,[],function(err3,result3,fields3){return result3;});
// // Printing the code
// // console.log(code)
// })
// console.log(r);
});
apires.success = true;
apires.meta.message = "Saved Success";
apires.data = res;
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateJustification(filename, req, callback){
var apires = this.getApiResultDefined();
try {
// console.log(req.body);
let idxjustification= req.body.idxjustification;
let idxrequestbudget= req.body.idxrequestbudget;
let trxid = req.body.trxid;
let justificationnumber = req.body.nomorjustifikasi;
let title = req.body.judul;
let division = req.body.divisi;
let glacc = req.body.acccode;
let description = req.body.deskripsi;
let budgettype = req.body.jenisbudget;
let amount = req.body.nilai;
let useddate = req.body.tanggalpelaksanaan;
let textpurpose = "";//req.body.maksudtujuan;
let textintroduce = "";//req.body.latarbelakang;
let textstrategic = "";//req.body.strategis;
let textbussiness = "";//req.body.bisnis;
let textrisk = "";//req.body.risiko;
let textfund = "";//req.body.pembiayaan;
let textrecomendation = "";//req.body.rekomendasi;
let textschedule = "";//req.body.penjadwalan;
let filedoc = filename;
let nik = req.body.nik;
let boq = JSON.parse(req.body.boq);
let ttd = JSON.parse(req.body.ttd);
let filedocqry = "filedoc='"+filedoc+"',";
if(filename==""){filedocqry="";}
// console.log(filedocqry);
let qry = "update tbl_justification ";
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',textpurpose='"+textpurpose+"',textintroduce='"+textintroduce+"',";
qry = qry +"textstrategic='"+textstrategic+"',textbussiness='"+textbussiness+"',textrisk='"+textrisk+"',textfund='"+textfund+"',textrecomendation='"+textrecomendation+"',";
qry = qry +"textschedule='"+textschedule+"',"+filedocqry+"uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxjustification+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
Object.keys(boq).forEach(function(key){
var idboq = boq[key]['id'];
var items = boq[key]['items'];
var qty = boq[key]['qty'];
var unitprice = boq[key]['unitprice'];
var units = boq[key]['units'];
var total = boq[key]['total'];
var action = boq[key]['action'];
qry = "insert into tbl_justificationboq set idxjustification='"+idxjustification+"',";
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_justificationboq set idxjustification='"+idxjustification+"',";
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+idboq+"'";
}
if(action=='delete'){
qry = "update tbl_justificationboq set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry + "where _idx='"+idboq+"'";
}
db.query(qry,[],function(err2,result2,fields2){return result2;});
// console.log(r);
});
var created = ttd.dibuatoleh;
var approval = ttd.disetujuioleh;
Object.keys(created).forEach(function(key){
var token =getToken();
var id = created[key]['id'];
var idemployee = created[key]['idemployee'];
var nik = created[key]['nik'];
var action = created[key]['action'];
qry = "insert into tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"' and issigned=0";
}
if(action=='delete'){
qry = "update tbl_justificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
Object.keys(approval).forEach(function(key){
var token =getToken();
var id = approval[key]['id'];
var idemployee = approval[key]['idemployee'];
var nik = approval[key]['nik'];
var action = approval[key]['action'];
qry = "insert into tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"' and issigned=0";
}
if(action=='delete'){
qry = "update tbl_justificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
apires.success = true;
apires.meta.message = "Updated Success";
apires.data = JSON.parse(JSON.stringify(result));
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateStatusJustification(req, callback) {
try {
var apires = this.getApiResultDefined();
var idxjustification = req.body.idxjustification;
var status = req.body.status;
var statusdescription = req.body.statusdescription;
var nik = req.body.nik;
var qry = "update tbl_justification set status='" + status +"',statusdescription='" + statusdescription +"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxjustification +"'";
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);
}
}
async queryConvertdocxtoPdf(req, callback) {
try {
var apires = this.getApiResultDefined();
var idxjustification = req.body.idxjustification;
var qry = "select * from vw_justification where id='" + idxjustification +"'";
// console.log(qry);
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){
const inputPath = "/home/nodejs/wsproc/assets/words/justifikasitemplate.docx";
const outputPath = "/home/nodejs/wsproc/assets/pdf/justifikasitemplate.pdf";
// console.log(__dirname);
ConvertToPdf(inputPath, outputPath).catch(function (err) {
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else{
apires.success = true;
callback(null,apires);
}
// console.log(`Error converting file: ${err}`);
});
}
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 querySignedJustification(filename, req, callback) {
try {
var apires = this.getApiResultDefined();
let idxjustification= req.body.idxjustification;
let idxrequestbudget= req.body.idxrequestbudget;
let trxid = req.body.trxid;
let justificationnumber = req.body.nomorjustifikasi;
let title = req.body.judul;
let division = req.body.divisi;
let glacc = req.body.acccode;
let description = req.body.deskripsi;
let budgettype = req.body.jenisbudget;
let amount = req.body.nilai;
let useddate = req.body.tanggalpelaksanaan;
let filedoc = filename;
var idxapproval = req.body.idxapproval;
var nikapproval = req.body.nikapproval;
var datesigned = req.body.datesigned;
// console.log(datesigned);
var nik = req.body.nik;
var token = this.getToken();
var filepng = token+".png";
// token =getToken();
token = token +","+nikapproval;
let filedocqry = "filedoc='"+filedoc+"',";
if(filename=="")
{
filedocqry="";
// apires.meta['message'] = "File tidak ditemukan";
// apires.meta['code'] = 500;
// callback(null, apires);
}
let qry = "update tbl_justification ";
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',";
qry = qry +filedocqry+"uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxjustification+"'";
db.query(qry,[],function(err,result,fields){
if(err){
console.log('d');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
QRCode.toDataURL(token, function (err, code) {
// console.log(code);`
if(err) {
console.log('ddf');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var imageBuffer = Adapter.decodeBase64Image(code);
fs.writeFile('./assets/png/'+filepng, imageBuffer.data, function(err) {
// console.log(err);
if(err){
console.log('eee');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback(err.toString(), apires);
}
else{
var qry = "update tbl_justificationttd set token=md5('"+token+"'),imgqr='"+filepng+"',issigned='1',signeddate='"+datesigned+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxapproval +"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
console.log('ttetete');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.success = true;
// ===
qry = "select status from tbl_justification where _idx='"+idxjustification+"'";
db.query(qry,[],function(err,result2,fields){
if(err){
console.log('bbbb');
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else
{
var status = result2[0]['status'];
var isapproved=0;
if(status==2){isapproved = 1;}
apires.data = {
"isapproved":isapproved,
"token":token,
"urltoken": process.env.BASEURL+"/main/getimageinfo?route=png&name="+filepng
};
callback(null, apires);
}
});
}
});
}
});
}
});
}
});
// else{
// }
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryDeleteJustification(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_justification ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryListCreatedBy(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_createdby order by id asc";
// console.log(qry);
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);
}
}
async queryListCheckedBy(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_checkedby order by id asc";
// console.log(qry);
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);
}
}
async queryListApprovedBy(req,callback){
var apires = this.getApiResultDefined();
try {
let qry = "select * from vw_approvedby order by id asc";
// console.log(qry);
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);
}
}
async queryJustificationDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let _idx= req.query.id;
let qry = "select * from vw_justificationdetail where id='"+_idx+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
let dataRows = result.length;
if(result.length<=0){
apires.meta.message = "Record not found";
callback('',apires);
}
else{
Object.keys(result).forEach(function(key){
qry = "select * from vw_justificationboq where idxjustification='"+_idx+"' order by id asc";
// console.log(qry);
db.query(qry,[],function(err,result2,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else{
result[key]['boq'] = [];
result[key]['ttd']= [];
if(result2.length>0){
result[key]['boq'] = JSON.parse(JSON.stringify(result2));
}
// === Get Ttd
qry = "select * from vw_justificationttd where idxjustification='"+_idx+"' order by id asc";
// console.log(qry);
db.query(qry,[],function(err,result3,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else{
if(result3.length>0){
var dibuatoleh = [];
var disetujuioleh = [];
Object.keys(result3).forEach(function(key2){
if(result3[key2]['category']=='CRE'){
dibuatoleh.push(JSON.parse(JSON.stringify(result3[key2])));
}else{
disetujuioleh.push(JSON.parse(JSON.stringify(result3[key2])));
}
});
result[key]['ttd'] = {
"dibuatoleh" : dibuatoleh,
"disetujuioleh" : disetujuioleh
}
// result[key]['ttd'] = JSON.parse(JSON.stringify(result3));
}
if(0 === --dataRows){
let resultJson = JSON.stringify(result);
console.log(resultJson);
resultJson = JSON.parse(resultJson);
apires.success = true;
apires.data = resultJson;
callback(null,apires);
}
}
});
}
});
});
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryJustificationList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let nik = req.body.nik;
let status = req.body.status;
let swherenik="";
if(nik){
swherenik="iby='"+nik+"' and ";
}
// let qry = "select * from vw_justification ";
// qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
// qry = qry +"and iby='"+nik+"' and status in("+status+") order by id asc";
let qry = "select * from vw_justification ";
qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc";
// console.log(qry);
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){
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_justification ";
qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc limit " + offset + ", " + limit;
// console.log(qry);
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);
}
}
}
module.exports = JustificationAdapter;

89
adapter/mainadapter.js Normal file
View File

@ -0,0 +1,89 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
const jwt = require('jsonwebtoken');
class MainAdapter extends Adapter{
constructor(){
super();
}
async queryGetToken(req,callback){
let nik = req.body.nik;
let password = req.body.pass;
let secretkey = req.body.secretkey;
console.log(req.body);
// console.log("secret key :"+process.env.SECRET_KEY);
const token = jwt.sign({
nik : nik,
password : password
}, "Pr0C#2022oct", {expiresIn: process.env.EXPIRED} );
var apires = this.getApiResultDefined();
// if(secretkey!=process.env.SECRET_KEY){
if(secretkey!="Pr0C#2022oct"){
apires.meta.code = 500;
apires.meta.message = "You don't have authorize or wrong password!";
}
else
{
apires.success=true;
apires.data = token;
}
// console.log(apires);
callback(null,apires);
}
async querySendOTPClient(req,callback){
let nik = req.body.nik;
let qry="SELECT id,token,email,hpnumber from tbl_employee where nik='"+nik+"' and isdeleted=0 order by id asc limit 1";
let apires = this.getApiResultDefined("obj_employee","table");
db.query(qry, [], function (error, results, fields) {
try {
if (error) {
apires.message=error;
callback(error,apires);
return;
}
//make results
var resultJson = JSON.stringify(results);
resultJson = JSON.parse(resultJson);
// console.log(resultJson);
if(resultJson.length>0){
var token = resultJson[0]['token'];
var emailmsg = "Your Security Code : "+token+", \nuser code : "+nik;
apires.meta['total']= resultJson.length,
apires.success=true;
apires.data = resultJson;
apires.message = emailmsg;
// Adapter.sentMail(resultJson[0]['email'],"Kode Verifikasi",emailmsg,function(err,result){
// if(err) {console.log(err); return callback(err,null);}
// })
callback(null, apires);
}
else
{
apires.message="NIK Not not found";
callback(null, apires);
}
} catch (error) {
//console.log(error);
apires.message = error.message;
callback(error,apires);
}
});
}
async queryGetMenus(req, callback){
try {
} catch (err) {
}
}
}
module.exports = MainAdapter;

2135
adapter/poadapter.js Normal file

File diff suppressed because it is too large Load Diff

592
adapter/pradapter.js Normal file
View File

@ -0,0 +1,592 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
const QRCode = require('qrcode');
const fs = require("fs");
class PrAdapter extends Adapter{
constructor(){
super();
}
async queryPrJustificationList(req,callback){
var apires = this.getApiResultDefined();
try {
// console.log(req);
let nik = req.query.nik;
let qry = "select * from vw_justification where iscreatepr=0 and status=2 and iby='"+nik+"' order by id asc";
// console.log(qry);
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);
}
}
async queryGetTrxIdPr(req, callback){
var apires = this.getApiResultDefined();
try {
let nik = req.query.nik;
let qry = "select count(_idx) totalrows,date_format(now(),'%Y%m%d') dates from tbl_pr where iby='"+nik+"' and year(idt)=year(now())";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var resp = JSON.parse(JSON.stringify(result));
// console.log(resp[0]['dates']);
var ymd = resp[0]['dates'];
ymd = ymd.toString().trim().replace("-","");
var counter = resp[0]['totalrows']+1;
var counterstr = ("0000000000"+counter);
counterstr = counterstr.substring(counterstr.length-4, counterstr.length);
var trxid = "TCEL-PR/"+ymd+"/"+nik+"/"+counterstr;
apires.success = true;
apires.data = trxid
callback(null, apires);
}
});
} catch (error) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryNewPr(req, callback){
var apires = this.getApiResultDefined();
try {
// console.log(req.body);
let idxjustification= req.body.idxjustification;
let justificationnumber= req.body.justificationnumber;
let trxidpr = req.body.trxidpr;
let prnumber = req.body.prnumber;
let costcenter = req.body.costcenter;
let profitcenter = req.body.profitcenter;
let description = req.body.description;
let qty = req.body.qty;
let unit = req.body.unit;
let netprice = req.body.netprice;
let totalvalue = req.body.totalvalue;
let curr = req.body.curr;
let prdate = req.body.prdate;
let idxapproval = req.body.idxapproval;
let nikapproval = req.body.nikapproval;
let nik = req.body.nik;
let status = -1;
let statusdescription = "draft";
let qry = "insert into tbl_pr ";
qry = qry +"set trxidpr='"+trxidpr+"',prnumber='"+prnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',costcenter='"+costcenter+"',";
qry = qry +"profitcenter='"+profitcenter+"',description='"+description+"',qty='"+qty+"',unit='"+unit+"',netprice='"+netprice+"',totalvalue='"+totalvalue+"',";
qry = qry +"curr='"+curr+"',prdate='"+prdate+"',status='"+status+"',statusdescription='"+statusdescription+"',";
qry = qry +"idxapproval='"+idxapproval+"',nikapproval='"+nikapproval+"',iby='"+nik+"',idt=now()";
console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var res = JSON.parse(JSON.stringify(result));
apires.success = true;
apires.meta.message = "Saved Success";
apires.data = res;
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdatePr(req, callback){
var apires = this.getApiResultDefined();
try {
// console.log(req.body);
let idxpr= req.body.idxpr;
let idxjustification= req.body.idxjustification;
let justificationnumber= req.body.justificationnumber;
let trxidpr = req.body.trxidpr;
let prnumber = req.body.prnumber;
let costcenter = req.body.costcenter;
let profitcenter = req.body.profitcenter;
let description = req.body.description;
let qty = req.body.qty;
let unit = req.body.unit;
let netprice = req.body.netprice;
let totalvalue = req.body.totalvalue;
let curr = req.body.curr;
let prdate = req.body.prdate;
let idxapproval = req.body.idxapproval;
let nikapproval = req.body.nikapproval;
let nik = req.body.nik;
let status = -1;
let statusdescription = "draft";
let qry = "update tbl_pr ";
qry = qry +"set trxidpr='"+trxidpr+"',prnumber='"+prnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',costcenter='"+costcenter+"',";
qry = qry +"profitcenter='"+profitcenter+"',description='"+description+"',qty='"+qty+"',unit='"+unit+"',netprice='"+netprice+"',totalvalue='"+totalvalue+"',";
qry = qry +"idxapproval='"+idxapproval+"',nikapproval='"+nikapproval+"',curr='"+curr+"',prdate='"+prdate+"',status='"+status+"',statusdescription='"+statusdescription+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxpr+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var res = JSON.parse(JSON.stringify(result));
apires.success = true;
apires.meta.message = "Updated Success";
apires.data = res;
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateStatusPr(req,prsapnumber, sapmessage, callback) {
try {
var apires = this.getApiResultDefined();
var idxpr = req.body.idxpr;
var status = req.body.status;
var statusdescription = req.body.statusdescription;
var description = req.body.description;
var curr = req.body.curr;
var nik = req.body.nik;
var swherestatus="status='" + status +"',statusdescription='" + statusdescription +"',";
if(sapmessage){
swherestatus="";
}
var setprnumber="prnumber='"+prsapnumber+"',";
if(!prsapnumber){setprnumber="";}
var setdescription="";
if(description){
setdescription="description='"+description+"',";
}
if(curr){
setdescription+="curr='"+curr+"',";
}
// console.log(setdescription);
var qry = "update tbl_pr set "+setprnumber+setdescription+"sapmessage='"+sapmessage+"',"+swherestatus+"uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxpr +"'";
console.log(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);
}
}
async queryDeletePr(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_pr ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryPrDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let _idx= req.query.id;
let qry = "select * from vw_pr where id='"+_idx+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
let dataRows = result.length;
if(dataRows<=0){
apires.meta.message = "Record not found";
callback('',apires);
}
else{
let resultJson = JSON.stringify(result);
resultJson = JSON.parse(resultJson);
apires.success = true;
apires.data = resultJson;
callback(null,apires);
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryPrList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let nik = req.body.nik;
let status = req.body.status;
// let qry = "select * from vw_pr ";
// qry = qry +"where (trim(trxidpr) like '%"+ keyword +"%' or trim(prnumber) like '%"+ keyword +"%') ";
// qry = qry +"and iby='"+nik+"' and status in("+status+") order by id asc limit " + offset + ", " + limit;
let swherenik="";
if(nik){
swherenik="iby='"+nik+"' and ";
}
let qry = "select * from vw_pr ";
qry = qry +"where (trim(trxidpr) like '%"+ keyword +"%' or trim(prnumber) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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_pr ";
qry = qry +"where (trim(trxidpr) like '%"+ keyword +"%' or trim(prnumber) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc limit " + offset + ", " + limit;
// console.log(qry);
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 queryApprovedPR(req, callback) {
try {
var apires = this.getApiResultDefined();
let idxpr= req.body.idxpr;
let idxjustification= req.body.idxjustification;
let justificationnumber= req.body.justificationnumber;
let trxidpr = req.body.trxidpr;
let prnumber = req.body.prnumber;
let costcenter = req.body.costcenter;
let profitcenter = req.body.profitcenter;
let description = req.body.description;
let qty = req.body.qty;
let unit = req.body.unit;
let netprice = req.body.netprice;
let totalvalue = req.body.totalvalue;
let curr = req.body.curr;
let prdate = req.body.prdate;
let idxapproval = req.body.idxapproval;
let nikapproval = req.body.nikapproval;
let nik = req.body.nik;
let status = 2;
let statusdescription = "Approval";
let approveddate = req.body.approveddate;
var token =this.getToken();
var filepng = token+"pr.png";
// token =getToken();
token = token +","+nikapproval;
let qry = "update tbl_pr ";
qry = qry +"set trxidpr='"+trxidpr+"',prnumber='"+prnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',costcenter='"+costcenter+"',";
qry = qry +"profitcenter='"+profitcenter+"',description='"+description+"',qty='"+qty+"',unit='"+unit+"',netprice='"+netprice+"',totalvalue='"+totalvalue+"',";
qry = qry +"idxapproval='"+idxapproval+"',nikapproval='"+nikapproval+"',approveddate='"+approveddate+"',curr='"+curr+"',prdate='"+prdate+"',status='"+status+"',statusdescription='"+statusdescription+"',";
qry = qry +"token=md5('"+token+"'),filepng='"+filepng+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxpr+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
QRCode.toDataURL(token, function (err, code) {
// console.log(code);
if(err) {
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var imageBuffer = Adapter.decodeBase64Image(code);
fs.writeFile('./assets/png/'+filepng, imageBuffer.data, function(err) {
// console.log(err);
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback(err.toString(), apires);
}
else{
apires.success = true;
apires.data = {
"isapproved":1,
"token":token,
"urltoken": process.env.BASEURL+"/main/getimageinfo?route=png&name="+filepng
};
callback(null, apires);
}
});
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryPrManagementList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.query.limit;
let offset = req.query.offset;
let keyword = req.query.keyword;
let nik = req.query.nik;
let swherenik="and iby='"+nik+"'";
if(nik=='999999'){
swherenik="";
}
// let qry = "select * from vw_prmanagement ";
// qry = qry +"where (trim(trxidpr) like '%"+ keyword +"%' or trim(prnumber) like '%"+ keyword +"%') ";
// qry = qry +swherenik+" order by id asc limit " + offset + ", " + limit;
let qry = "select * from vw_prmanagement ";
qry = qry +"where (trim(trxidpr) like '%"+ keyword +"%' or trim(prnumber) like '%"+ keyword +"%') ";
// qry = qry +swherenik+" order by id asc limit " + offset + ", " + limit;
// console.log(qry);
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){
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_prmanagement ";
qry = qry +"where (trim(trxidpr) like '%"+ keyword +"%' or trim(prnumber) like '%"+ keyword +"%') ";
qry = qry + swherenik +" order by id 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 queryPrManagementListDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let idxpr = req.query.idxpr;
let qry = "select * from vw_prmanagement ";
qry = qry +"where id='"+idxpr+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
apires.meta.code = 200;
if(result.length>0){
apires.success = true;
apires.data=JSON.parse(JSON.stringify(result));
}
else{
apires.meta.message = "Record Not Found";
}
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
}
module.exports = PrAdapter;

View File

@ -0,0 +1,731 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
const QRCode = require('qrcode');
const fs = require("fs");
function getToken(){
try {
var n1=Math.floor(Math.random() * 9) + 0;
var n2=Math.floor(Math.random() * 9) + 0;
var n3=Math.floor(Math.random() * 9) + 0;
var n4=Math.floor(Math.random() * 9) + 0;
var n5=Math.floor(Math.random() * 9) + 0;
var n6=Math.floor(Math.random() * 9) + 0;
var otp=n1.toString()+n2.toString()+n3.toString()+n4.toString()+n5.toString()+n6.toString();
// console.log(otp);
return otp;
} catch (error) {
return error;
}
}
class ProcJustificationAdapter extends Adapter{
constructor(){
super();
}
async queryPrList(req,callback){
var apires = this.getApiResultDefined();
try {
let nik = req.query.nik;
let isused = req.query.isused;
let swherenik="";
if(nik){
swherenik="iby='"+nik+"' and ";
}
// let qry = "select * from vw_pr where status in(2,6) and isused="+isused+" and iby='"+nik+"' order by id asc";
let qry = "select * from vw_pr where status in(2,6) and "+swherenik+" isused="+isused+" order by id asc";
// console.log(qry);
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);
}
}
async queryNewProcJustification(req, callback){
var apires = this.getApiResultDefined();
try {
let idxpr= req.body.idxpr;
let prnumber= req.body.prnumber;
let procjustificationnumber = req.body.procjustificationnumber;
let idxjustification = req.body.idxjustification;
let justificationnumber = req.body.justificationnumber;
// let idxcreated = req.body.idxcreated;
// let nikcreated = req.body.nikcreated;
// let idxverified = req.body.idxverified;
// let nikverified = req.body.nikverified;
// let idxapproval = req.body.idxapproval;
// let nikapproval = req.body.nikapproval;
let nik = req.body.nik;
let ttd = JSON.parse(req.body.ttd);
let status = -1;
let statusdescription = "draft";
// let qry = "insert into tbl_procjustification ";
// qry = qry +"set idxpr='"+idxpr+"',prnumber='"+prnumber+"',procjustificationnumber='"+procjustificationnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',";
// qry = qry +"status='"+status+"',statusdescription='"+statusdescription+"',idxcreated='"+idxcreated+"',nikcreated='"+nikcreated+"',idxverified='"+idxverified+"',nikverified='"+nikverified+"',";
// qry = qry +"idxapproval='"+idxapproval+"',nikapproval='"+nikapproval+"',iby='"+nik+"',idt=now()";
let qry = "insert into tbl_procjustification ";
qry = qry +"set idxpr='"+idxpr+"',prnumber='"+prnumber+"',procjustificationnumber='"+procjustificationnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',";
qry = qry +"status='"+status+"',statusdescription='"+statusdescription+"',iby='"+nik+"',idt=now()";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var res = JSON.parse(JSON.stringify(result));
var idxprocjustification = res.insertId;
var created = ttd.dibuatoleh;
var verify = ttd.diverifikasioleh;
var approval = ttd.disetujuioleh;
Object.keys(created).forEach(function(key){
var token =getToken();
var idemployee = created[key]['idemployee'];
var nikcreated = created[key]['nik'];
qry = "insert into tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nikcreated+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
Object.keys(verify).forEach(function(key){
var token =getToken();
var idemployee = verify[key]['idemployee'];
var nikverify = verify[key]['nik'];
// if(err) return console.log("error occurred")
qry = "insert into tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nikverify+"',category='VRF',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
Object.keys(approval).forEach(function(key){
var token =getToken();
var idemployee = approval[key]['idemployee'];
var nikapproval = approval[key]['nik'];
// if(err) return console.log("error occurred")
qry = "insert into tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nikapproval+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
apires.success = true;
apires.meta.message = "Saved Success";
apires.data = res;
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryUpdateProcJustification(req, filename, callback){
var apires = this.getApiResultDefined();
try {
//console.log(filename);
let idxprocjustification = req.body.idxprocjustification;
let idxpr= req.body.idxpr;
let prnumber= req.body.prnumber;
let procjustificationnumber = req.body.procjustificationnumber;
let idxjustification = req.body.idxjustification;
let justificationnumber = req.body.justificationnumber;
let filecategory = req.body.filecategory;
let descriptionfile = req.body.descriptionfile;
let numberoffile = req.body.numberoffile;
let ttd = JSON.parse(req.body.ttd);
let nik = req.body.nik;
let status = req.body.status;
let statusdescription = req.body.statusdescription;
// let qry = "update tbl_procjustification ";
// qry = qry +"set idxpr='"+idxpr+"',prnumber='"+prnumber+"',procjustificationnumber='"+procjustificationnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',";
// qry = qry +"status='"+status+"',statusdescription='"+statusdescription+"',idxcreated='"+idxcreated+"',nikcreated='"+nikcreated+"',idxverified='"+idxverified+"',nikverified='"+nikverified+"',";
// qry = qry +"idxapproval='"+idxapproval+"',nikapproval='"+nikapproval+"',uby='"+nik+"',udt=now() ";
// qry = qry +"where _idx='"+idxprocjustification+"'";
let qry = "update tbl_procjustification ";
qry = qry +"set idxpr='"+idxpr+"',prnumber='"+prnumber+"',procjustificationnumber='"+procjustificationnumber+"',idxjustification='"+idxjustification+"',justificationnumber='"+justificationnumber+"',";
qry = qry +"status='"+status+"',statusdescription='"+statusdescription+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxprocjustification+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
qry ="select _idx from tbl_procjustificationdoc ";
qry = qry +"where idxheader='"+idxprocjustification+"' and numberoffile='"+numberoffile+"' and filecategory='"+filecategory+"' and isdeleted=0 order by _idx desc limit 1";
// console.log(qry);
db.query(qry,[], function(err2, results2){
if(err2){
apires.meta['message'] = err2.toString();
apires.meta['code'] = 500;
callback('err',apires);
}else{
qry ="insert into tbl_procjustificationdoc ";
qry = qry + "set idxheader='"+idxprocjustification+"',numberoffile='"+numberoffile+"',filecategory='"+filecategory+"',";
qry = qry + "filename='"+filename+"',descriptionfile='"+descriptionfile+"',iby='"+nik+"',idt=now()";
if(results2.length>=1){
qry ="update tbl_procjustificationdoc ";
qry = qry + "set idxheader='"+idxprocjustification+"',numberoffile='"+numberoffile+"',filecategory='"+filecategory+"',";
qry = qry + "filename='"+filename+"',descriptionfile='"+descriptionfile+"',uby='"+nik+"',udt=now() ";
qry = qry +"where idxheader='"+idxprocjustification+"' and numberoffile='"+numberoffile+"' and filecategory='"+filecategory+"' and isdeleted=0";
}
db.query(qry,[],function(err3,results3){
if(err3){
apires.meta['message'] = err3.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else{
// === Update ttd
var created = ttd.dibuatoleh;
var verify = ttd.diverifikasioleh;
var approval = ttd.disetujuioleh;
Object.keys(created).forEach(function(key){
var token =getToken();
var id = created[key]['id'];
var idemployee = created[key]['idemployee'];
var nik = created[key]['nik'];
var action = created[key]['action'];
qry = "insert into tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"'";
}
if(action=='delete'){
qry = "update tbl_procjustificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
Object.keys(verify).forEach(function(key){
var token =getToken();
var id = verify[key]['id'];
var idemployee = verify[key]['idemployee'];
var nik = verify[key]['nik'];
var action = verify[key]['action'];
qry = "insert into tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='VRF',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='VRF',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"'";
}
if(action=='delete'){
qry = "update tbl_procjustificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
Object.keys(approval).forEach(function(key){
var token =getToken();
var id = approval[key]['id'];
var idemployee = approval[key]['idemployee'];
var nik = approval[key]['nik'];
var action = approval[key]['action'];
qry = "insert into tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
if(action=='update'){
qry = "update tbl_procjustificationttd set idxjustification='"+idxprocjustification+"',idemployee='"+idemployee+"',";
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
qry = qry + "where _idx='"+id+"'";
}
if(action=='delete'){
qry = "update tbl_procjustificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
qry = qry+ "where _idx='"+id+"'";
}
db.query(qry,[],function(err3,result3,fields3){return result3;});
});
var res = JSON.parse(JSON.stringify(results3));
apires.success = true;
apires.meta.message = "Updated Success";
apires.data = res;
callback(null, apires);
}
});
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryInquiryProcJustification(req, filename, callback){
var apires = this.getApiResultDefined();
try {
let idxprocjustification = req.body.idxprocjustification;
let filecategory = req.body.filecategory;
let numberoffile = req.body.numberoffile;
let descriptionfile = req.body.descriptionfile;
let nik = req.body.nik;
let qry ="select _idx from tbl_procjustificationdoc ";
qry = qry +"where idxheader='"+idxprocjustification+"' and numberoffile='"+numberoffile+"' and filecategory='"+filecategory+"' and isdeleted=0 order by _idx desc limit 1";
// console.log(qry);
db.query(qry,[], function(err2, results2){
if(err2){
apires.meta['message'] = err2.toString();
apires.meta['code'] = 500;
callback('err',apires);
}else{
qry ="insert into tbl_procjustificationdoc ";
qry = qry + "set idxheader='"+idxprocjustification+"',numberoffile='"+numberoffile+"',filecategory='"+filecategory+"',";
qry = qry + "descriptionfile='"+descriptionfile+"',filename='"+filename+"',iby='"+nik+"',idt=now()";
if(results2.length>=1){
qry ="update tbl_procjustificationdoc ";
qry = qry + "set idxheader='"+idxprocjustification+"',numberoffile='"+numberoffile+"',filecategory='"+filecategory+"',";
qry = qry + "descriptionfile='"+descriptionfile+"',filename='"+filename+"',uby='"+nik+"',udt=now() ";
qry = qry +"where idxheader='"+idxprocjustification+"' and numberoffile='"+numberoffile+"' and filecategory='"+filecategory+"' and isdeleted=0";
}
console.log(qry);
db.query(qry,[],function(err3,results3){
if(err3){
apires.meta['message'] = err3.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else{
var res = JSON.parse(JSON.stringify(results3));
apires.success = true;
apires.meta.message = "Updated Success";
apires.data = res;
callback(null, apires);
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async querySignedProcJustification(req, callback){
var apires = this.getApiResultDefined();
try {
let idxprocjustification = req.body.idxprocjustification;
let nik = req.body.nik;
let idxsigned = req.body.idxsigned;
let idemployeesigned = req.body.idemployeesigned;
let niksigned = req.body.niksigned;
let datesigned = req.body.datesigned;
let idxsignedvrf = req.body.idxsignedvrf ?? 0;
let idemployeevrf = req.body.idemployeevrf ?? 0;
let niksignedvrf = req.body.niksignedvrf ?? 0;
let idxsignedapr = req.body.idxsignedapr ?? 0;
let idemployeeapr = req.body.idemployeeapr ?? 0;
let niksignedapr = req.body.niksignedapr ?? 0;
let status = req.body.status;
let statusdescription = req.body.statusdescription;//"Verified";
var token = this.getToken();
var filepng = token+".png";
// token =getToken();
token = token +","+niksigned;
// console.log(req.body);
let qry = "update tbl_procjustification ";
qry = qry +"set status='"+status+"',statusdescription='"+statusdescription+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+idxprocjustification+"'";
// console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
if(status==0){
var qry = "update tbl_procjustificationttd set idemployee='"+idemployeevrf+"',nik='"+niksignedvrf+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxsignedvrf +"'";
db.query(qry,[],function(err,result,fields){});
var qry = "update tbl_procjustificationttd set idemployee='"+idemployeeapr+"',nik='"+niksignedapr+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxsignedapr +"'";
db.query(qry,[],function(err,result,fields){});
}
QRCode.toDataURL(token, function (err, code) {
if(err) {
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var imageBuffer = Adapter.decodeBase64Image(code);
fs.writeFile('./assets/pngproc/'+filepng, imageBuffer.data, function(err) {
// console.log(err);
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback(err.toString(), apires);
}
else{
// var qry = "update tbl_procjustificationttd set token=md5('"+token+"'),imgqr='"+filepng+"',issigned='1',signeddate='"+datesigned+"',uby='"+nik+"',udt=now() ";
var qry = "update tbl_procjustificationttd set idemployee='"+idemployeesigned+"',nik='"+niksigned+"',token='"+token+"',imgqr='"+filepng+"',issigned='1',signeddate='"+datesigned+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxsigned +"'";
// console.log(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;
// ===
qry = "select status from tbl_procjustification where _idx='"+idxprocjustification+"'";
db.query(qry,[],function(err,result2,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
var status = result2[0]['status'];
var isverified=0;
if(status==1){isverified = 1;}
apires.data = {
"isverified":isverified,
"token":token,
"urltoken": process.env.BASEURL+"/main/getimageinfo?route=pngproc&name="+filepng
};
callback(null, apires);
}
});
}
});
}
});
}
});
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryDeleteProcJustification(req, callback){
var apires = this.getApiResultDefined();
try {
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_procjustification ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryProcJustificationDetail(req,callback){
var apires = this.getApiResultDefined();
try {
let _idx= req.query.id;
let qry = "select * from vw_procjustification where id='"+_idx+"'";
console.log(qry);
db.query(qry,[],function(err,result,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('err',apires);
}
else
{
let dataRows = result.length;
if(result.length<=0){
apires.meta.message = "Record not found";
callback('',apires);
}
else{
Object.keys(result).forEach(function(key){
qry = "select * from vw_procjustificationdoc where idxheader='"+_idx+"' order by id asc";
// console.log(qry);
db.query(qry,[],function(err,result2,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else{
result[key]['filedoc'] = JSON.parse(JSON.stringify(result2));
qry = "select * from vw_procjustificationttd where idxheader='"+_idx+"' order by id asc";
// console.log(qry);
db.query(qry,[],function(err,result3,fields){
if(err){
apires.meta['message'] = err.toString();
apires.meta['code'] = 500;
callback('error',apires);
}
else{
if(result3.length>0){
var dibuatoleh = [];
var diverifikasioleh = [];
var disetujuioleh = [];
Object.keys(result3).forEach(function(key2){
if(result3[key2]['category']=='CRE'){
dibuatoleh.push(JSON.parse(JSON.stringify(result3[key2])));
}
else if(result3[key2]['category']=='VRF'){
diverifikasioleh.push(JSON.parse(JSON.stringify(result3[key2])));
}else{
disetujuioleh.push(JSON.parse(JSON.stringify(result3[key2])));
}
});
result[key]['ttd'] = {
"dibuatoleh" : dibuatoleh,
"diverifikasioleh" : diverifikasioleh,
"disetujuioleh" : disetujuioleh
}
// result[key]['ttd'] = JSON.parse(JSON.stringify(result3));
}
if(0 === --dataRows){
let resultJson = JSON.stringify(result);
resultJson = JSON.parse(resultJson);
apires.success = true;
apires.data = resultJson;
callback(null,apires);
}
}
});
// if(0 === --dataRows){
// let resultJson = JSON.stringify(result);
// resultJson = JSON.parse(resultJson);
// apires.success = true;
// apires.data = resultJson;
// callback(null,apires);
// }
}
});
});
}
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryProcJustificationList(req,callback){
var apires = this.getApiResultDefined();
try {
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let nik = req.body.nik;
let status = req.body.status;
let swherenik="";
if(nik){
swherenik="iby='"+nik+"' and ";
}
// let qry = "select * from vw_procjustification ";
// qry = qry +"where (trim(prnumber) like '%"+ keyword +"%' or trim(justificationnumber) like '%"+ keyword +"%') ";
// qry = qry +"and iby='"+nik+"' and status in("+status+") order by id asc";
let qry = "select * from vw_procjustification ";
qry = qry +"where (trim(prnumber) like '%"+ keyword +"%' or trim(justificationnumber) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id asc";
// console.log(qry);
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){
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_procjustification ";
qry = qry +"where (trim(prnumber) like '%"+ keyword +"%' or trim(justificationnumber) like '%"+ keyword +"%') ";
qry = qry +"and "+swherenik+" status in("+status+") order by id 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 queryUpdateStatusProcJustification(req, callback) {
try {
var apires = this.getApiResultDefined();
var idxjustification = req.body.idxjustification;
var status = req.body.status;
var statusdescription = req.body.statusdescription;
var nik = req.body.nik;
var qry = "update tbl_procjustification set status='" + status +"',statusdescription='" + statusdescription +"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='" + idxjustification +"'";
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);
}
}
}
module.exports = ProcJustificationAdapter;

239
adapter/vendoradapter.js Normal file
View File

@ -0,0 +1,239 @@
const db=require('../config/dbproc.js');
const Adapter=require('./dbadapter.js');
class VendorAdapter extends Adapter{
constructor(){
super();
}
async queryVendorList(req,callback){
try {
let apires = this.getApiResultDefined();
let limit = req.body.limit;
let offset = req.body.offset;
let keyword = req.body.keyword;
let status = req.body.status;
let swhereactivate="";
if(status==0||status==1){
swhereactivate=" and isactivated='"+status+"'";
}
let qry = "select * from vw_vendorinfo ";
qry = qry +"where (trim(vendorid) like '%"+ keyword +"%' or trim(vendorname) like '%"+ keyword +"%') "+swhereactivate+" order by id asc";
// console.log(qry);
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){
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
});
qry = "select * from vw_vendorinfo ";
qry = qry +"where (trim(vendorid) like '%"+ keyword +"%' or trim(vendorname) like '%"+ keyword +"%') order by id 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 queryVendorDetail(req,callback){
try {
let apires = this.getApiResultDefined();
let id = req.query.id;
// console.log(req);
let qry = "select * from vw_vendorinfo ";
qry = qry +"where id='"+id+"' order by id asc limit 1";
console.log(qry);
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);
}
}
async queryDeleteVendor(req, callback){
try {
let apires = this.getApiResultDefined();
let id = req.body.id;
let remarkdeleted = req.body.remarkdeleted;
let nik = req.body.nik;
let qry = "update tbl_vendorinfo ";
qry = qry +"set isdeleted=1,remarkdeleted='"+remarkdeleted+"',dby='"+nik+"',ddt=now()";
qry = qry +" where _idx='"+id+"'";
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.meta.message = "Deleted Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
async queryNewVendor(req,callback){
try {
let apires = this.getApiResultDefined();
let vendorid = req.body.vendorid;
let vendorname = req.body.vendorname;
let picname = req.body.picname;
let address = req.body.address;
let telp = req.body.telp;
let location = req.body.location;
let bussinessgroup = req.body.bussinessgroup;
let isactivated = req.body.isactivated;
let nik = req.body.nik;
let qry = "insert into tbl_vendorinfo ";
qry = qry +"set vendorid='"+vendorid+"',vendorname='"+vendorname+"',picname='"+picname+"',telp='"+telp+"',";
qry = qry +"address='"+address+"',location='"+location+"',bussinessgroup='"+bussinessgroup+"',isactivated='"+isactivated+"',iby='"+nik+"',idt=now()";
// console.log(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);
}
}
async queryUpdateVendor(req,callback){
try {
let apires = this.getApiResultDefined();
let vendorid = req.body.vendorid;
let vendorname = req.body.vendorname;
let picname = req.body.picname;
let address = req.body.address;
let telp = req.body.telp;
let location = req.body.location;
let bussinessgroup = req.body.bussinessgroup;
let isactivated = req.body.isactivated;
let nik = req.body.nik;
let id = req.body.id;
let qry = "update tbl_vendorinfo ";
qry = qry +"set vendorid='"+vendorid+"',vendorname='"+vendorname+"',picname='"+picname+"',telp='"+telp+"',";
qry = qry +"address='"+address+"',location='"+location+"',bussinessgroup='"+bussinessgroup+"',isactivated='"+isactivated+"',uby='"+nik+"',udt=now() ";
qry = qry +"where _idx='"+id+"'";
// console.log(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.meta.message = "Updated Success";
callback(null, apires);
}
});
} catch (err) {
apires.meta.code = 500;
apires.meta.message = err.toString();
callback('error',apires);
}
}
}
module.exports = VendorAdapter;

81
app.js Normal file
View File

@ -0,0 +1,81 @@
const express = require('express');
const bodyparser = require('body-parser');
const fs = require('fs');
const app = express();
const cors = require('cors');
const dotenv = require('dotenv');
dotenv.config({path: __dirname + '/.env'});
const port = process.env.PORT || 9000;
const Controllers = require('./controllers/controller.js');
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
app.use(bodyparser.urlencoded({ extended: false })); //for x-www-urlencoded <form>
app.use(express.urlencoded({ limit: '100mb', extended: true, parameterLimit: 50000 })); //===>for application json
// app.use(bodyparser.json('application/json'));
app.use(bodyparser.json({ limit: '100mb' }));
app.use(cors());
// app.use((req, res, next) => {
// // res.setHeader('Access-Allow-Control-Origin','https://cdpn.io'); hiii
// res.setHeader('Access-Control-Allow-Origin', '*'); //== Allow all request client
// res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE');
// res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
// // res.setHeader('Access-Control-Allow-Credentials', true);
// next();
// });
app.set('trust proxy', false);
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
// === DYNAMICALLY INCLUDE ROUTES ( CONTROLLER )
fs.readdirSync('./routes').forEach(function (file) {
var rf = false;
if (file.substr(-3) == '.js') {
var fl = (file.substr(0, file.length - 3));
var router = require('./routes/' + fl);
// console.log('./routes/' + fl);
app.use('/' + fl, router);
rf = true;
}
if (!rf) { res.send("File not found."); }
});
//app.use('/users', userRoutes);
app.use(function (error, req, res, next) {
//console.log(error.statusCode);
// res.status(401).send('401: '+error);
// if(error.statusCode==401){
// }
// console.log(error);
res.append("responseData","{statusCode : "+error.statusCode+",message : "+error.message+"}");
apireshandler.meta.code = error.statusCode;
apireshandler.meta.message = error.message;
res.status(error.statusCode).json(apireshandler);
//next();
});
// // // Handle 404
// app.use(function (req, res) {
// res.status(404).send('404: Route not Found, please contact your administrator');
// });
// // // Handle 500
// app.use(function (error, req, res, next) {
// console.log(error);
// res.status(200).send('500: Internal Server Error, err : '+error);
// });
// // Handle 502
// app.use(function (error, req, res, next) {
// res.status(502).send('502: Bad gateway');
// });
app.listen(port,function(){
console.log("Starting "+process.env.APPNAME+" running on 8080");
});

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/images/user.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Binary file not shown.

BIN
assets/png/020184.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 802 B

BIN
assets/png/060658.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

BIN
assets/png/067125.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 B

BIN
assets/png/280361.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

BIN
assets/png/337056.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

BIN
assets/png/408467.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 739 B

BIN
assets/png/508846.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

BIN
assets/png/522516.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

BIN
assets/png/538778.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

BIN
assets/png/667586pr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

BIN
assets/png/776335.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 B

BIN
assets/pngproc/670728.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

BIN
assets/pngproc/753115.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

BIN
assets/pngproc/776618.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

Binary file not shown.

BIN
assets/words/basttemplate.docx Executable file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,15 @@
const mongoose = require('mongoose');
// const dburl='mongodb://root:s4lasan2016@150.242.110.114:27017/dbmidtpay?authSource=admin';
const dburl='mongodb://root:s4lasan2016@103.84.192.250:27017/dbkebengkel?authSource=admin';
mongoose.Promise = global.Promise;
mongoose.connect(dburl,{ useNewUrlParser: true, useUnifiedTopology: true },function(err) {
if (err) {
console.error('Error connecting: ' + err.stack);
return;
}
console.log('Collection established');
//db.close();
});
module.exports = mongoose;

20
config/dbproc.js Normal file
View File

@ -0,0 +1,20 @@
// console.log(libinit.gethost);
const mysql = require('mysql');
const dbcon = mysql.createConnection({
host : process.env.HOSTDB,
user : process.env.USERDB,
password : "ssotcel#20i7",
database : process.env.DBHOST,
acquireTimeout: 30000,
insecureAuth: true,
timezone: 'utc'
});
dbcon.connect(function(err) {
if (err) {
console.error('Error connecting: '+process.env.PASSDB+' ' + err.stack);
return;
}
console.log('WS Ver 1.0.0 Proc connected');
});
module.exports = dbcon;

226
controllers/bast.js Normal file
View File

@ -0,0 +1,226 @@
const BastAdapter=require('../adapter/bastadapter.js');
const bastadapter = new BastAdapter();
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');
exports.getBastActivityList = ( req, res ) => {
try{
bastadapter.queryBastActivityList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBastHandoverList = ( req, res ) => {
try{
bastadapter.queryBastHandoverList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBastActivityListDetail = ( req, res ) => {
try{
bastadapter.queryBastActivityListDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [35] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}
exports.createBastold = ( req, res, next ) => {
try{
let filedoctemplate='';
if(req.body.filename === undefined){
filedoctemplate="";//req.file.originalname;
bastadapter.queryCreateBAST(filedoctemplate, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
else{
// filedoctemplate=req.file.originalname;
let ext=req.body.filename.split(".")[1];
let filename = 'BAST_'+req.nik+'_' + Date.now() + "."+ ext;
filedoctemplate=req.body.filename;
fs.rename(process.env.BASEPATH+'/assets/procjustification/'+req.body.filename, process.env.BASEPATH+'/assets/procjustification/'+filename, function(err) {
if ( err ) {
bastadapter.sendResponse(500,err, res);
}
else{
bastadapter.queryCreateBAST(filedoctemplate, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
});
}
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [182] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.createBast = ( req, res, next ) => {
try{
let filedoctemplate='';
if(req.file === undefined){
filedoctemplate="";//req.file.originalname;
}
else{
// filedoctemplate=req.file.originalname;
filedoctemplate=req.body.filename;
}
bastadapter.queryCreateBAST(filedoctemplate, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [182] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.uploadHandOverSign = ( req, res, next ) => {
try{
let filehandoversign='';
if(req.file === undefined){
filehandoversign="";//req.file.originalname;
}
else{
// filedoctemplate=req.file.originalname;
filehandoversign=req.body.filename;
}
bastadapter.queryUploadHandoverSign(filehandoversign, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [138] : bast controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBastList = ( req, res ) => {
try{
bastadapter.queryBastList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [74] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBastDetailList = ( req, res ) => {
try{
bastadapter.queryBastDetailList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [74] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}
exports.setUpdateHandOverold = ( req, res ) => {
try{
let ext=req.body.filename.split(".")[1];
let filename = 'basthandover_'+req.nik+'_' + Date.now() + "."+ ext;
filedoctemplate=req.body.filename;
fs.rename(process.env.BASEPATH+'/assets/bast/'+req.body.filename, process.env.BASEPATH+'/assets/bast/'+filename, function(err) {
if ( err ) {
bastadapter.sendResponse(500,err, res);
}
else{
bastadapter.queryCreateBAST(filedoctemplate, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
});
bastadapter.queryUpdateHandover(req, filename, function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [112] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}
exports.setUpdateHandOver = ( req, res ) => {
try{
let filename='';
if(req.file === undefined){
filename="";//req.file.originalname;
}
else{
filename=req.body.filename;//req.file.originalname;
}
bastadapter.queryUpdateHandover(req, filename, function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
bastadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [112] : Bast controller, " + err.toString();
bastadapter.sendResponse(502, apireshandler, res);
}
}

199
controllers/budget.js Normal file
View File

@ -0,0 +1,199 @@
const BudgetAdapter=require('../adapter/budgetadapter.js');
const budgetadapter = new BudgetAdapter();
exports.getListBudget = ( req, res ) => {
try{
budgetadapter.queryBudgetList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [16] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBudgetType = ( req, res ) => {
try{
budgetadapter.queryBudgetType(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [31] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBudgetDetail = ( req, res ) => {
try{
budgetadapter.queryBudgetDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [46] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteBudget = ( req, res ) => {
try{
budgetadapter.queryDeleteBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [46] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.setNewBudget = ( req, res ) => {
try{
budgetadapter.queryNewBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [76] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateBudget = ( req, res ) => {
try{
budgetadapter.queryUpdateBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [90] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
// ==== Request budget
exports.getListReqBudget = ( req, res ) => {
try{
budgetadapter.queryReqBudgetList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [16] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.getReqBudgetDetail = ( req, res ) => {
try{
budgetadapter.queryReqBudgetDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [120] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.setReqBudget = ( req, res ) => {
try{
budgetadapter.queryReqBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [105] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.getTrxIdReqBudget = ( req, res ) => {
try{
budgetadapter.queryGetTrxIdReqBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [120] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateReqBudget = ( req, res ) => {
try{
budgetadapter.queryUpdateReqBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [135] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteReqBudget = ( req, res ) => {
try{
budgetadapter.queryDeleteReqBudget(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [150] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}
exports.getBudgetListByRequest = ( req, res ) => {
try{
budgetadapter.queryBudgetListbyRequest(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
budgetadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [16] : Budget controller, " + err.toString();
budgetadapter.sendResponse(502, apireshandler, res);
}
}

110
controllers/coa.js Normal file
View File

@ -0,0 +1,110 @@
const CoaAdapter=require('../adapter/coaadapter.js');
const coaAdapter = new CoaAdapter();
exports.getListCoa = ( req, res ) => {
try{
coaAdapter.queryCoaList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [15] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}
exports.getCoaDetail = ( req, res ) => {
try{
coaAdapter.queryCoaDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [30] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteCoa = ( req, res ) => {
try{
coaAdapter.queryDeleteCoa(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [45] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}
exports.setNewCoa = ( req, res ) => {
try{
coaAdapter.queryNewCoa(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [60] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}
exports.updateCoa = ( req, res ) => {
try{
coaAdapter.queryUpdateCoa(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [74] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}
exports.getCostCenter = ( req, res ) => {
try{
coaAdapter.queryGetCostCenter(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [74] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}
exports.getProfitCenter = ( req, res ) => {
try{
coaAdapter.queryGetProfitCenter(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
coaAdapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [74] : COA controller, " + err.toString();
coaAdapter.sendResponse(502, apireshandler, res);
}
}

195
controllers/controller.js Normal file
View File

@ -0,0 +1,195 @@
const nodemailer = require('nodemailer');
const request = require('request');
var baseurlsms="https://mw.telkomcel.tl/tcel/v1/portal/sms/";
class Controller{
constructor(){
}
getApiResultDefined(){
return {
success: false,
meta :{
code: 200,
message: "",
},
// meta:{
// table: objectname,
// type: typeobject,
// total: 0
// },
data:[]
};
}
getPagination(datalength, limit){
let pagination = datalength / limit;
if(!Number.isInteger(pagination)){
pagination=(Math.floor(datalength / limit))+1;
}
return pagination;
}
getErrorDefined(errcode, msg){
if(errcode=='404'){
return {
code : 404,
message : msg!='' ? msg : "Record Not Found"
}
}
}
static getResultJson(results){
let resultJson = JSON.stringify(results);
resultJson = JSON.parse(resultJson);
return resultJson;
}
sendResponse(statusCode, data, res){
// res.append("responseData", JSON.stringify(data));
// res.status(statusCode).json(data);
res.status(statusCode).json(data);
}
static decodeBase64Image(dataString) {
var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
response = {};
if (matches.length !== 3) {
return new Error('Invalid input string');
}
response.type = matches[1];
response.data = new Buffer.from(matches[2], 'base64');
return response;
}
getToken(){
try {
var n1=Math.floor(Math.random() * 9) + 0;
var n2=Math.floor(Math.random() * 9) + 0;
var n3=Math.floor(Math.random() * 9) + 0;
var n4=Math.floor(Math.random() * 9) + 0;
var n5=Math.floor(Math.random() * 9) + 0;
var n6=Math.floor(Math.random() * 9) + 0;
var otp=n1.toString()+n2.toString()+n3.toString()+n4.toString()+n5.toString()+n6.toString();
// console.log(otp);
return otp;
} catch (error) {
return error;
}
}
static sentMail(emailto,subject,msg,callback){
console.log(process.env.EMAIL_KEY);
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'mitrasejatipangan2021@gmail.com',
pass: process.env.EMAIL_KEY
}
});
var mailOptions = {
from: 'MSP <mitrasejatipangan2021@gmail.com>',
to: emailto,
subject: subject,
text: msg
};
transporter.sendMail(mailOptions, function(error, info){
console.log(error);
if (error) {
console.log(error);
callback(error,null);
} else {
callback(null,info);
}
});
}
static sendSMS(header,msisdn,msg,callback){
try {
var msisdnnew = msisdn.length==8 ? '670'+msisdn : msisdn;
let resuri={
'method': 'GET',
// 'url': baseurl+'signon',
'url': baseurlsms+'?msisdn='+msisdnnew+'&content='+msg+'&header='+header,
'headers': {
'Content-Type': 'application/json',
},
// form: formjson,
};
// console.log(resuri);
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
request(resuri, function (error, response) {
if (error) {
// console.log(error);
callback(error,null);
}
else
{
// console.log(response);
callback(null,response);
}
});
} catch (error) {
callback(error,null);
}
}
static sendSMSold(header,msisdn,msg,callback)
{
request.post(
'http://150.242.111.251:81/tlstream/index/api',
{
json: {
views:'vwsentsms',
task:'sentmessage',
header: header,
msisdn: msisdn,
msg : msg
}
},
(error, res, body) => {
if (error) {
console.error(error)
callback(null,error);
return
}
// console.log(`statusCode: ${res.statusCode}`)
// console.log(body);
callback(null,body);
}
)
}
static getYmD(){
var dates= new Date();
var today=dates.getFullYear()+"-"+dates.getMonth()+"-"+dates.getDate()+" "+dates.getHours()+":"+dates.getMinutes()+":"+dates.getSeconds();
//console.log(today);
return today;
}
static getmonth(){
var dates= new Date();
//console.log(dates.getMonth());
return dates.getMonth()+1;
}
static getyears(){
var dates= new Date();
return dates.getFullYear();
}
static getday(){
var dates= new Date();
return dates.getDate();
}
}
module.exports = Controller;

98
controllers/employee.js Normal file
View File

@ -0,0 +1,98 @@
const EmployeeAdapter=require('../adapter/employeeadapter.js');
const employeeadapter = new EmployeeAdapter();
const Controllers = require('../controllers/controller.js');
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
exports.getEmployeeAuth = ( req, res ) => {
try{
employeeadapter.queryEmployeeAuth(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
employeeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [17] : Employee controller, " + err.toString();
employeeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getEmployeeWithoutAuth = ( req, res ) => {
try{
employeeadapter.queryEmployeeWithoutAuth(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
employeeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [17] : Employee controller, " + err.toString();
employeeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getEmployeeMenus = ( req, res ) => {
try{
employeeadapter.queryEmployeeMenus(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
employeeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [33] : Employee controller, " + err.toString();
employeeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getEmployeeMenusAccessibility = ( req, res ) => {
try{
employeeadapter.queryEmployeeAccessibility(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
employeeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [48] : Employee controller, " + err.toString();
employeeadapter.sendResponse(502, apireshandler, res);
}
}
exports.setEmployeeMenusAccessibility = ( req, res ) => {
try{
employeeadapter.queryEmployeeSetMenuAccessibility(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
employeeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [63] : Employee controller, " + err.toString();
employeeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getListEmployee = ( req, res ) => {
try{
employeeadapter.queryListEmployee(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
employeeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [63] : Employee controller, " + err.toString();
employeeadapter.sendResponse(502, apireshandler, res);
}
}

149
controllers/finance.js Normal file
View File

@ -0,0 +1,149 @@
const FinanceAdapter=require('../adapter/financeadapter.js');
const financeadapter = new FinanceAdapter();
const Controllers = require('./controller.js');
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
exports.getPoPayList = ( req, res ) => {
try{
financeadapter.queryPoPayList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getPoPayListDetail = ( req, res ) => {
try{
financeadapter.queryPoPayListDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [32] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getPayCheckList = ( req, res ) => {
try{
financeadapter.queryPayChecklist(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [47] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.submitPayPo = ( req, res ) => {
try{
// console.log(req);
financeadapter.querySubmitPayPo(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [62] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getFinanceList = ( req, res ) => {
try{
financeadapter.queryFinanceList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getFinanceListDetail = ( req, res ) => {
try{
financeadapter.queryFinanceListDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getFinanceDetailUpload = ( req, res ) => {
try{
financeadapter.queryFinanceDetailUpload(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [20] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.UploadDocFin = ( req, res ) => {
try{
let filename='';
if(req.file === undefined){
filename="";//req.file.originalname;
}
else{
filename=req.body.filename;
}
financeadapter.queryUploadDocFin(req, filename, function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [112] : Finance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}
exports.getCurrencyList = ( req, res ) => {
try{
financeadapter.queryCurrencyList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
financeadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [146] : FInance controller, " + err.toString();
financeadapter.sendResponse(502, apireshandler, res);
}
}

93
controllers/inventory.js Normal file
View File

@ -0,0 +1,93 @@
const InventoryAdapter=require('../adapter/inventoryadapter.js');
const inventoryadapter = new InventoryAdapter();
exports.newInventory = ( req, res ) => {
try{
inventoryadapter.queryNewInventory(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
inventoryadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [15] : Inventory controller, " + err.toString();
inventoryadapter.sendResponse(502, apireshandler, res);
}
}
exports.updInventory = ( req, res ) => {
try{
inventoryadapter.queryUpdInventory(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
inventoryadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [30] : Budget controller, " + err.toString();
inventoryadapter.sendResponse(502, apireshandler, res);
}
}
exports.delInventory = ( req, res ) => {
try{
inventoryadapter.queryDelInventory(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
inventoryadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [46] : Budget controller, " + err.toString();
inventoryadapter.sendResponse(502, apireshandler, res);
}
}
exports.getListInventory = ( req, res ) => {
try{
inventoryadapter.queryInventoryList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
inventoryadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [60] : Budget controller, " + err.toString();
inventoryadapter.sendResponse(502, apireshandler, res);
}
}
exports.getHeaderListPO = ( req, res ) => {
try{
inventoryadapter.queryInventoryHeaderList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
inventoryadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [60] : Budget controller, " + err.toString();
inventoryadapter.sendResponse(502, apireshandler, res);
}
}
exports.getDetailListPO = ( req, res ) => {
try{
inventoryadapter.queryInventoryDetailList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
inventoryadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [60] : Budget controller, " + err.toString();
inventoryadapter.sendResponse(502, apireshandler, res);
}
}

View File

@ -0,0 +1,277 @@
const JustificationAdapter=require('../adapter/justificationadapter.js');
const justificationadapter = new JustificationAdapter();
const Controllers = require('../controllers/controller.js');
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
// var docxConverter = require('docx-pdf');
exports.getListBudgetRequest = ( req, res ) => {
try{
justificationadapter.queryJustificationBudgetRequestList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [30] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.newJustification = ( req, res ) => {
try{
console.log('new file justification');
// let filename=req.file.originalname;
let filename=req.body.filename;
justificationadapter.queryNewJustification(filename, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [34] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateJustification = ( req, res ) => {
try{
let filename='';
if(req.file === undefined){
filename="";//req.file.originalname;
}
else{
// filename=req.file.originalname;
filename=req.body.filename;
}
// console.log('filename '+filename);
justificationadapter.queryUpdateJustification(filename, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [57] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateStatusJustification = ( req, res ) => {
try{
justificationadapter.queryUpdateStatusJustification(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [60] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.getListCreatedBy = ( req, res ) => {
try{
justificationadapter.queryListCreatedBy(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [45] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.getListCheckedBy = ( req, res ) => {
try{
justificationadapter.queryListCheckedBy(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [60] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.getListApprovedBy = ( req, res ) => {
try{
justificationadapter.queryListApprovedBy(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [75] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteJustification = ( req, res ) => {
try{
justificationadapter.queryDeleteJustification(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [90] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.detailJustification = ( req, res ) => {
try{
justificationadapter.queryJustificationDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
console.log(data);
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [120] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.getListJustification = ( req, res ) => {
try{
justificationadapter.queryJustificationList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [167] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.setSignedJustification = ( req, res ) => {
try{
let filename='';
if(req.file === undefined){
filename="";//req.file.originalname;
}
else{
// filename=req.file.originalname;
filename=req.body.filename;
}
justificationadapter.querySignedJustification(filename, req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [182] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.convertDocxToPdf = ( req, res ) => {
try{
justificationadapter.queryConvertdocxtoPdf(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
justificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [204] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.mergedocx = ( req, res ) => {
try {
let resuri={
'method': 'POST',
// 'url': baseurl+'signon',
'url': 'http://172.17.12.82:8083/PoiWord/authentification/sync.sh',
'headers': {
'Content-Type': 'application/json',
'x-username' : 'proc',
'x-password' : 'pr0c2022#tc3l'
},
// 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);
apireshandler.success = true;
apireshandler.meta.code = statusCode;
apireshandler.data = resdata;
justificationadapter.sendResponse(200, apireshandler, res);
}
});
} catch (error) {
}
}
exports.convertDocxToPdfold = ( req, res ) => {
try{
docxConverter("./assets/words/justifikasitemplate.docx","./assets/pdf/justifikasitemplate.pdf",function(err,result){
var statusCode =200;
if(err){
console.log(err);
statusCode = 500;
}
// let statusCode = data!=null ? data.meta.code : 200 ;
// if(err) statusCode = 500;
console.log('result'+result);
justificationadapter.sendResponse(statusCode,{}, res);
});
// justificationadapter.querySignedJustification(filename, req,function(err,data){
// let statusCode = data!=null ? data.meta.code : 200 ;
// if(err) statusCode = 500;
// justificationadapter.sendResponse(statusCode,data, res);
// });
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [204] : Justification controller, " + err.toString();
justificationadapter.sendResponse(502, apireshandler, res);
}
}

250
controllers/main.js Normal file
View File

@ -0,0 +1,250 @@
// const dbadapter=require('../adapter/agentadapter.js');
//const ProductAdapter = require('../adapter/productadapter.js');
//const productadapter = new ProductAdapter();
const MainAdapter=require('../adapter/mainadapter.js');
const mainadapter = new MainAdapter();
const Controllers = require('../controllers/controller.js');
const controllers = new Controllers();
var apireshandler = controllers.getApiResultDefined();
var baseurlsms="https://mw.telkomcel.tl/tcel/v1/portal/sms/";
exports.getappInfo = (req, res) => {
try {
// console.log("fdfd");
// var apiResult = {};
let appinfo = {
"appver" : "1.0.0",
"appname" : "eProc",
"appdescription" : "eProc",
"appurlandroid" : "",
"appurlios" : ""
};
// apiResult.success=true;
// apiResult.meta = {
// }
// apiResult.message="";
// apiResult.data = appinfo;
// console.log(apiResult);
apireshandler.success = true;
apireshandler.message = "";
apireshandler.data = appinfo;
mainadapter.sendResponse(200,apireshandler, res);
//res.status(200).json(apiResult);
} catch (err) {
apireshandler.message = err.toString();
apireshandler.errline = "[35] : main controller";
mainadapter.sendResponse(502, apireshandler, res);
// res.status(502).json({
// error: error,
// message: "502 : Bad Gateway"
// });
}
};
exports.getTokenauth = ( req, res ) => {
try{
mainadapter.queryGetToken(req,function(err,data){
// console.log("logs "+data);
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
mainadapter.sendResponse(statusCode,data,res);
});
}
catch(err){
apireshandler.message = err.toString();
apireshandler.errline = "[20] : Main controller";
mainadapter.sendResponse(502, apireshandler, res);
}
}
exports.sendOTPClient = ( req, res ) => {
try{
mainadapter.querySendOTPClient(req,function(err,data){
let statusCode = 200;
if(err) statusCode = 500;
console.log(data);
let resuri={
'method': 'GET',
// 'url': baseurl+'signon',
'url': baseurlsms+'?msisdn='+data[0]['hpnumber']+'&content='+data['message']+'&header=TELIN.TL',
'headers': {
'Content-Type': 'application/json',
},
// form: formjson,
};
console.log(resuri);
request(resuri, function (error, response) {
if (error) {
apires.message = error.toString();
apires.errline = "[79] : main controller";
mainadapter.sendResponse(502,apires, res);
}
else
{
mainadapter.sendResponse(statusCode,data, res);
}
});
});
}
catch(err){
apireshandler.message = err.toString();
apireshandler.errline = "[93] : Main controller";
mainadapter.sendResponse(502, apireshandler, res);
}
}
exports.getHomeEmployeeInfo = ( req, res ) => {
try{
//console.log("here");
mainadapter.queryGetHomeEmployeeInfo(req,function(err,data){
let statusCode = 200;
if(err) statusCode = 500;
// console.log(data);
mainadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.message = err.toString();
apireshandler.errline = "[84] : Main controller";
mainadapter.sendResponse(502, apireshandler, res);
}
}
exports.getEmployeeOfficeInfo = ( req, res ) => {
try{
mainadapter.queryGetEmployeeOfficeInfo(req,function(err,data){
let statusCode = 200;
if(err) statusCode = 500;
mainadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.message = err.toString();
apireshandler.errline = "[100] : Main controller";
mainadapter.sendResponse(502, apireshandler, res);
}
}
exports.getimageinfo = ( req, res ) => {
try{
let routepath = req.query.route;
let filename = req.query.name;
// if(routepath&&regionname){
// filename = routepath+'/'+filename;
// }
let filepath = process.env.BASEPATH +'/assets/'+routepath+'/'+filename;
// console.log(filepath);
// res.sendFile(filepath);
res.download(filepath, filename);
}
catch (err) {
res.status(502).json({
error: "502" ,
message: err
});
}
}
exports.filejustification = ( req, res ) => {
try{
let routepath = req.query.route;
let filename = req.query.name;
// console.log(routepath);
let sproute = routepath.split(":");
if(sproute.length>1){
routepath=sproute[0]+"/"+sproute[1];
}
let filepath = process.env.BASEPATH +'/assets/'+routepath+'/'+filename;
// console.log(filepath);
// res.sendFile(filepath);
res.download(filepath, filename);
}
catch (err) {
res.status(502).json({
error: "502" ,
message: err
});
}
}
exports.getfilejustification = ( req, res ) => {
try{
let routepath = req.query.route;
let filename = req.query.name;
let filepath = process.env.BASEPATH +'/assets/'+routepath+'/'+filename;
// console.log(filepath);
res.sendFile(filepath);
}
catch (err) {
res.status(502).json({
error: "502" ,
message: err
});
}
}
exports.getjustifikasitemplate = ( req, res ) => {
try{
let routepath = req.query.route;
let filename = req.query.name;
// if(routepath&&regionname){
// filename = routepath+'/'+filename;
// }
let filepath = process.env.BASEPATH +'/assets/'+routepath+'/'+filename;
// console.log(filepath);
res.sendFile(filepath);
}
catch (err) {
res.status(502).json({
error: "502" ,
message: err
});
}
}
exports.getbasttemplate = ( req, res ) => {
try{
let routepath = req.query.route;
let filename = req.query.name;
let filepath = process.env.BASEPATH +'/assets/'+routepath+'/'+filename;
res.sendFile(filepath);
}
catch (err) {
res.status(502).json({
error: "502" ,
message: err
});
}
}
exports.getbastfile = ( req, res ) => {
try{
let routepath = req.query.route;
let filename = req.query.name;
let sproute = routepath.split(":");
if(sproute.length>1){
routepath=sproute[0]+"/"+sproute[1];
}
let filepath = process.env.BASEPATH +'/assets/'+routepath+'/'+filename;
res.sendFile(filepath);
}
catch (err) {
res.status(502).json({
error: "502" ,
message: err
});
}
}

1099
controllers/po.js Normal file

File diff suppressed because it is too large Load Diff

653
controllers/pr.js Normal file
View File

@ -0,0 +1,653 @@
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');
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{
var rsdata = JSON.parse(JSON.stringify(data));
// console.log(rsdata["data"]);
let pr_type="PRTL";
let x_pr_type="X";
let pr_no = "00010";
let pr_qtyacc ="01";
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|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||D|";
let resuri={
'method': 'POST',
// 'url': baseurl+'signon',
'url': baseurlsap+'/createPr?pr_type='+pr_type+'&x_pr_type=X&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(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{
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);
}
}

View File

@ -0,0 +1,174 @@
const ProcJustificationAdapter=require('../adapter/procjustificationadapter.js');
const procjustificationadapter = new ProcJustificationAdapter();
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');
var fs = require('fs');
exports.getListPr = ( req, res ) => {
try{
procjustificationadapter.queryPrList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [21] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.setNewProcJustification = ( req, res ) => {
try{
procjustificationadapter.queryNewProcJustification(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [21] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateProcJustification = ( req, res ) => {
try{
let ext=req.body.filename.split(".")[1];
let filename = req.body.filecategory+'_'+req.nik+'_' + Date.now() + "."+ ext;
fs.rename(process.env.BASEPATH+'/assets/procjustification/'+req.body.filename, process.env.BASEPATH+'/assets/procjustification/'+filename, function(err) {
if ( err ) {
procjustificationadapter.sendResponse(500,err, res);
}
else{
procjustificationadapter.queryUpdateProcJustification(req, filename, function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [66] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.InquiryProcJustification = ( req, res ) => {
try{
let ext=req.body.filename.split(".")[1];
let filename = req.body.filecategory+'_'+req.nik+'_' + Date.now() + "."+ ext;
fs.rename(process.env.BASEPATH+'/assets/procjustification/'+req.body.filename, process.env.BASEPATH+'/assets/procjustification/'+filename, function(err) {
if ( err ) {
procjustificationadapter.sendResponse(statusCode,err, res);
}
else{
procjustificationadapter.queryInquiryProcJustification(req, filename, function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [66] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteProcJustification = ( req, res ) => {
try{
procjustificationadapter.queryDeleteProcJustification(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [82] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.SignedProcJustification = ( req, res ) => {
try{
procjustificationadapter.querySignedProcJustification(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [96] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.detailProcJustification = ( req, res ) => {
try{
procjustificationadapter.queryProcJustificationDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [82] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.procJustificationList = ( req, res ) => {
try{
procjustificationadapter.queryProcJustificationList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [82] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}
exports.updateStatusProcJustification = ( req, res ) => {
try{
procjustificationadapter.queryUpdateStatusProcJustification(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
procjustificationadapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [82] : ProcJustification controller, " + err.toString();
procjustificationadapter.sendResponse(502, apireshandler, res);
}
}

81
controllers/vendor.js Normal file
View File

@ -0,0 +1,81 @@
const VendorAdapter=require('../adapter/vendoradapter.js');
const vendoradapter = new VendorAdapter();
exports.getListVendor = ( req, res ) => {
try{
vendoradapter.queryVendorList(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
vendoradapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [15] : Vendor controller, " + err.toString();
vendoradapter.sendResponse(502, apireshandler, res);
}
}
exports.getVendorDetail = ( req, res ) => {
try{
vendoradapter.queryVendorDetail(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
vendoradapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [46] : VEndor controller, " + err.toString();
vendoradapter.sendResponse(502, apireshandler, res);
}
}
exports.deleteVendor = ( req, res ) => {
try{
vendoradapter.queryDeleteVendor(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
vendoradapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [46] : Budget controller, " + err.toString();
vendoradapter.sendResponse(502, apireshandler, res);
}
}
exports.setNewVendor = ( req, res ) => {
try{
vendoradapter.queryNewVendor(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
vendoradapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [76] : Budget controller, " + err.toString();
vendoradapter.sendResponse(502, apireshandler, res);
}
}
exports.updateVendor = ( req, res ) => {
try{
vendoradapter.queryUpdateVendor(req,function(err,data){
let statusCode = data!=null ? data.meta.code : 200 ;
if(err) statusCode = 500;
vendoradapter.sendResponse(statusCode,data, res);
});
}
catch(err){
apireshandler.meta.code = 502;
apireshandler.meta.message = " [90] : Budget controller, " + err.toString();
vendoradapter.sendResponse(502, apireshandler, res);
}
}

4295
dbproc.sql Normal file

File diff suppressed because one or more lines are too long

36
middlewares/auth.js Normal file
View File

@ -0,0 +1,36 @@
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
// console.log(req);
const authheader = req.get("Authorization");
// console.log(authheader);
if(!authheader){
const error = new Error("Not Authenticated");
error.statusCode = 401;
throw error;
}
const token = authheader.split(" ")[1];
// console.log(token);
let decodedtoken;
try {
// decodedtoken = jwt.verify(token, process.env.SECRET_KEY);
decodedtoken = jwt.verify(token, "Pr0C#2022oct");
req.nik = decodedtoken.nik;
// console.log(decodedtoken);
} catch (error) {
// console.log("fdfdf "+error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
if(!decodedtoken){
const error = new Error("Not Authenticated");
error.statusCode = 401;
throw error;
}
next();
}

96
middlewares/logging.js Normal file
View File

@ -0,0 +1,96 @@
const colllogging = require('../models/colllogging');
// const getLoggerForStatusCode = (statusCode) => {
// // console.log(statusCode);
// if (statusCode >= 500) {
// return console.error.bind(console)
// }
// if (statusCode >= 400) {
// return console.warn.bind(console)
// }
// return console.log.bind(console)
// }
module.exports = (req, res, next) => {
// console.info(`${req.method} ${req.originalUrl}`)
const cleanup = () => {
res.removeListener('finish', logFn)
res.removeListener('close', abortFn)
res.removeListener('error', errorFn)
}
const logFn = () => {
try {
cleanup()
// console.log(req['headers']['content-type'])
let nz_date_string = new Date().toLocaleString("en-US", { timeZone: "Asia/Jakarta" });
// console.log(nz_date_string);
// const secretkey = req.body.secretkey
const iprequest = req.headers['x-forwarded-for']
const timestamp = nz_date_string//new Date().toISOString()
const useragent = req.headers['user-agent']
const contenttype = req.headers['content-type']==undefined ? "none" : req.headers['content-type']
const originalurl = req.originalUrl
const requestbody = JSON.stringify(req.body)
const requestheader = JSON.stringify(req.headers)
const statuscode = res.statusCode
const response = res.get('responseData')
var savelogging = new colllogging(
{
// secretkey : secretkey,
iprequest : iprequest,
timestamp : timestamp,
useragent : useragent,
contenttype : contenttype,
originalurl : originalurl,
requestbody : requestbody,
requestheader : requestheader,
statuscode : statuscode,
response : response
}
);
savelogging.save(function(err,data){
if(err)
{
const error = new Error("Logging failed");
error.statusCode = 401;
error.message = err.toString();
throw error;
}
else{
//console.log(data);
}
});
} catch (err) {
const error = new Error("Logging failed");
error.statusCode = 401;
error.message = err.toString();
throw error;
}
}
const abortFn = () => {
cleanup()
console.warn('Request aborted by the client')
}
const errorFn = err => {
cleanup()
console.error(`Request pipeline error: ${err}`)
}
// successful pipeline (regardless of its response)
res.on('finish', logFn) // successful pipeline (regardless of its response)
res.on('close', abortFn) // aborted pipeline
res.on('error', errorFn) // pipeline internal error
next()
}

61
middlewares/multer.js Normal file
View File

@ -0,0 +1,61 @@
const multer = require('multer');
const path = require('path');
const imageStorage = multer.diskStorage({
// Destination to store image
destination: 'assets/images',
filename: (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
// cb(null, filename + '_' + Date.now() + path.extname(file.originalname))
cb(null, file.originalname)
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
const imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: 1500000 // 1000000 Bytes = 1 MB
},
fileFilter(req, file, cb) {
if (!file.originalname.match(/\.(png|jpg)$/)) {
// upload only png and jpg format
return cb(new Error('Please upload a Image'))
}
// cb(undefined, true)
cb(null, true)
}
}).single("attendancefile");
module.exports = (req, res, next) => {
try {
// console.log(req);
imageUpload(req,res,next, function(err){
try {
if (err){
console.log(err);
res.status(400).send({
"success":false,
"message" : JSON.stringify(err),
"data" :[]
});
} else {
console.log('The filename is ' + res.req.file.filename);
// req.append("filename",res.req.file.filename);
// req.body.attendancefile=res.req.file.filename;
}
next();
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log(error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,79 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/po/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
// console.log("body :"+req.body);
let nik = req.nik;
// let category = req.body.filecategory;
// let filedoc = category+'_'+nik+'_' + Date.now() + path.extname(file.originalname);
let filedoc = nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
// console.log(filedoc);
req.body.filename = filedoc;
cb(null, filedoc)
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
// console.log(file.originalname.match);
if (!file.originalname.match(/\.(docx|pdf|PDF)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx / pdf ) max 5 mb";
cb(new Error('Please upload a word document in ( docx / pdf ) max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,79 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/po/boq")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
// console.log("body :"+req.body);
let nik = req.nik;
// let category = req.body.filecategory;
// let filedoc = category+'_'+nik+'_' + Date.now() + path.extname(file.originalname);
let filedoc = nik+'_boq' + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
// console.log(filedoc);
req.body.filename = filedoc;
cb(null, filedoc)
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
// console.log(file.originalname.match);
if (!file.originalname.match(/\.(csv)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( csv ) max 5 mb";
cb(new Error('Please upload a csv file format max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,77 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/procjustification/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
// console.log("body :"+req.body);
let nik = req.nik;
// let category = req.body.filecategory;
// let filedoc = category+'_'+nik+'_' + Date.now() + path.extname(file.originalname);
let filedoc = nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc)
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
if (!file.originalname.match(/\.(docx|pdf)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx / pdf ) max 5 mb";
cb(new Error('Please upload a word document in ( docx / pdf ) max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,74 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/words/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
let nik = req.nik;
let filedoc = 'justifikasi_'+nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc)
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
if (!file.originalname.match(/\.(docx)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx ) max 5 mb";
cb(new Error('Please upload a word document in ( docx ) max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,75 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/bast/pdf/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
let nik = req.nik;
let filedoc = 'bast_'+nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc);
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
// if (!file.originalname.match(/\.(docx|pdf)$/)) {
if (!file.originalname.match(/\.(pdf)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx ) max 5 mb";
cb(new Error('Please upload a word document in ( docx ) max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,74 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/finance/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
let nik = req.nik;
let filedoc = 'fin_'+nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc);
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
if (!file.originalname.match(/\.(docx|pdf)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx / pdf ) max 5 mb";
cb(new Error('Please upload a word document in ( docx / pdf ) max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,74 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/bast/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
let nik = req.nik;
let filedoc = 'basthandover_'+nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc);
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
if (!file.originalname.match(/\.(docx|pdf|PDF)$/)) {
// if (!file.originalname.match(/\.(docx)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx ) / pdf file max 5 mb";
cb(new Error('Please upload a word document in ( docx ) / pdf file max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,74 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/bast/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
let nik = req.nik;
let filedoc = 'basthandoversign_'+nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc);
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
if (!file.originalname.match(/\.(docx|pdf|PDF)$/)) {
// if (!file.originalname.match(/\.(docx)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx ) / pdf file max 5 mb";
cb(new Error('Please upload a word document in ( docx ) / pdf file max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

View File

@ -0,0 +1,76 @@
const multer = require('multer');
const path = require('path');
var imageStorage = multer.diskStorage({
// Destination to store image
// destination: 'assets/images/'+pathDir,
destination: (req, file, cb) => {
console.log('d');
// console.log(req.get("path"));
// let pathdir = req.get("path");
cb(null, "assets/justification/")
// cb(null, "assets/words/" + pathdir + "/")
},
filename : (req, file, cb) => {
// let filename=file.originalname.split(".")[0];
console.log('filed');
let nik = req.nik;
let filedoc = 'justifikasi_'+nik+'_' + Date.now() + path.extname(file.originalname);
// req.body.filedoc = filedoc;
// cb(null, filedoc);
req.body.filename = filedoc;
cb(null, filedoc)
// file.fieldname is name of the field (image)
// path.extname get the uploaded file extension
}
});
var imageUpload = multer({
storage: imageStorage,
limits: {
fileSize: '5mb' // 1000000 Bytes = 5 MB
},
fileFilter(req, file, cb) {
// if (!file.originalname.match(/\.(png|jpg|pdf)$/)) {
if (!file.originalname.match(/\.(docx)$/)) {
// upload only png and jpg format
req.fileValidationError = "Please upload a word document in ( docx ) max 5 mb";
cb(new Error('Please upload a word document in ( docx ) max 5 mb'), false);
}
else{
cb(null, true);
}
}
}).single("file-doc");
module.exports = (req, res, next) => {
try {
imageUpload(req,res, function(err){
try {
// if (err || err instanceof multer.MulterError){
if (err){
res.status(500).send({
"meta":{
"auth": false,
"code" : 500,
"message" : req.fileValidationError || err.toString(),
},
"data" :[]
});
} else {
next();
// console.log('The filename is ' + res.req.file.filename);
}
} catch (error) {
console.log("error "+error);
}
});
} catch (error) {
console.log("error " + error);
error.message = error.message;
error.statusCode = 500;
throw error;
}
}

50
models/colllogging.js Normal file
View File

@ -0,0 +1,50 @@
const dbkebengkel=require('../config/collections/dbkebengkel');
const Schema = dbkebengkel.Schema;
const moment = require('moment-timezone');
const OTLtime = moment.tz(Date.now(), "Asia/Tokyo");
// console.log(OTLtime);
const collschema = Schema({
iprequest : {
type : String,
required : true
},
timestamp : {
type : String,
required : true
},
useragent : {
type : String,
required : true
},
contenttype : {
type : String,
required : true
},
originalurl :{
type : String,
required : true
},
requestbody :{
type : String,
required : true,
},
requestheader :{
type : String,
required : true,
},
statuscode : {
type : String,
required : true
},
response : {
type : String,
required : true,
}
// },{collection:"colllogging", timestamps : true});
},{collection:"colllogging", timestamps : {
currentTime : () => OTLtime
}});
module.exports = dbkebengkel.model('colllogging', collschema);

3871
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

32
package.json Normal file
View File

@ -0,0 +1,32 @@
{
"name": "wsproc",
"version": "1.0.0",
"description": "Procurement Web Services",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "itnsr09@gmail.com",
"license": "ISC",
"dependencies": {
"body-parser": "^1.20.1",
"cors": "^2.8.5",
"csv": "^6.3.8",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"express-validator": "^6.14.2",
"jsonwebtoken": "^9.0.2",
"libreoffice-convert": "^1.4.1",
"moment-timezone": "^0.5.39",
"mongoose": "^6.8.0",
"multer": "^1.4.5-lts.1",
"mysql": "^2.18.1",
"nodemailer": "^6.8.0",
"nodemon": "^3.1.0",
"path": "^0.12.7",
"qrcode": "^1.5.1",
"request": "^2.88.2",
"slashes": "^3.0.10",
"util": "^0.12.5"
}
}

19
routes/bast.js Normal file
View File

@ -0,0 +1,19 @@
const express = require('express');
const { body } = require('express-validator');
const bastcontroller = require('../controllers/bast');
const jwtauth = require('../middlewares/auth.js');
const uploadfile = require('../middlewares/multer/singlebast.js');
const uploadfilehandover = require('../middlewares/multer/singlehandover.js');
const uploadfilehandoversign = require('../middlewares/multer/singlehandoversign.js');
const router=express.Router();
router.get('/getbastactivitylist',[jwtauth], bastcontroller.getBastActivityList);
router.get('/getbasthandoverlist',[jwtauth], bastcontroller.getBastHandoverList);
router.get('/getbastactivitylistdetail',[jwtauth], bastcontroller.getBastActivityListDetail);
router.post('/createbast',[jwtauth, uploadfile], bastcontroller.createBast);
router.post('/updatehandover',[jwtauth, uploadfilehandover], bastcontroller.setUpdateHandOver);
router.post('/updatehandoversign',[jwtauth, uploadfilehandoversign], bastcontroller.uploadHandOverSign);
router.get('/getbastlist',[jwtauth], bastcontroller.getBastList);
router.get('/getbastdetaillist',[jwtauth], bastcontroller.getBastDetailList);
module.exports = router;

23
routes/budget.js Normal file
View File

@ -0,0 +1,23 @@
const express = require('express');
// const { body } = require('express-validator');
const budgetcontroller = require('../controllers/budget');
const jwtauth = require('../middlewares/auth.js');
const router=express.Router();
//=== POST METHOD
router.post('/getbudgetlist',[jwtauth], budgetcontroller.getListBudget);
router.post('/setnewbudget',[jwtauth], budgetcontroller.setNewBudget);
router.get('/getbudgettype',[jwtauth], budgetcontroller.getBudgetType);
router.get('/getbudgetdetail',[jwtauth], budgetcontroller.getBudgetDetail);
router.post('/deletebudget',[jwtauth], budgetcontroller.deleteBudget);
router.post('/updatebudget',[jwtauth], budgetcontroller.updateBudget);
// ==== REquest budget
router.post('/reqbudget',[jwtauth], budgetcontroller.setReqBudget);
router.post('/updatereqbudget',[jwtauth], budgetcontroller.updateReqBudget);
router.post('/deletereqbudget',[jwtauth], budgetcontroller.deleteReqBudget);
router.post('/getreqbudgetlist',[jwtauth], budgetcontroller.getListReqBudget);
router.get('/getbudgetlistbyreq',[jwtauth], budgetcontroller.getBudgetListByRequest);
router.get('/getreqbudgetdetail',[jwtauth], budgetcontroller.getReqBudgetDetail);
router.get('/gettrxidreqbudget',[jwtauth], budgetcontroller.getTrxIdReqBudget);
module.exports = router;

Some files were not shown because too many files have changed in this diff Show More