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;