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;