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 v.*, r.currency_id, COALESCE(c.rate, 1) AS currency_rate, " + "c.currency AS currency_code, c.symbol AS currency_symbol " + "FROM vw_justification v " + "LEFT JOIN tbl_requestbudget r ON r._idx = v.idxrequestbudget " + "LEFT JOIN tbl_currency c ON c._idx = r.currency_id " + "WHERE v.iscreatepr=0 AND v.status=2 AND v.iby='" + nik + "' " + "ORDER BY v.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 currency_id = req.body.currency_id ?? null; let currencyFieldsPr = currency_id ? ",currency_id='"+currency_id+"',rate_snapshot=(select rate from tbl_currency where _idx='"+currency_id+"' and isdeleted=0 limit 1)" : ",currency_id=NULL,rate_snapshot=NULL"; 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 + "'" + currencyFieldsPr + ",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 currency_id_upd = req.body.currency_id ?? null; let currencyFieldsPrUpd = currency_id_upd ? ",currency_id='"+currency_id_upd+"',rate_snapshot=(select rate from tbl_currency where _idx='"+currency_id_upd+"' and isdeleted=0 limit 1)" : ",currency_id=NULL,rate_snapshot=NULL"; 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 + "'" + currencyFieldsPrUpd + ",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 v.*, p.currency_id, p.rate_snapshot, c.currency AS currency_code, c.symbol AS currency_symbol "; qry += "from vw_pr v "; qry += "left join tbl_pr p on p._idx = v.id "; qry += "left join tbl_currency c on c._idx = p.currency_id "; qry += "where v.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 { const proc_nik = process.env.PROC_USER_NIK ?? ""; const proc_users = proc_nik.split(","); 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) { if (!proc_users.includes(nik)) { swherenik = '(iby="' + nik + '" or nikapproval="' + nik + '") and '; } } let qryBase = "select v.*, p.currency_id, p.rate_snapshot, c.currency AS currency_code, c.symbol AS currency_symbol "; qryBase += "from vw_pr v "; qryBase += "left join tbl_pr p on p._idx = v.id "; qryBase += "left join tbl_currency c on c._idx = p.currency_id "; let qry = qryBase; qry += "where (trim(v.trxidpr) like '%" + keyword + "%' or trim(v.prnumber) like '%" + keyword + "%') "; qry += "and " + swherenik + "v.status in(" + status + ") "; // qry += "order by id asc limit " + offset + ", " + limit; // console.log("qry paging => ", 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 = qryBase; qry = qry + "where (trim(v.trxidpr) like '%" + keyword + "%' or trim(v.prnumber) like '%" + keyword + "%') "; if (nik) { if (!proc_users.includes(nik)) { qry += 'and (iby="' + nik + '" or nikapproval="' + nik + '")'; } } qry = qry + "and " + swherenik + " v.status in(" + status + ") order by id asc limit " + offset + ", " + limit; // console.log("qry => ", qry); db.query(qry, [], function (err, result, fields) { if (err) { apires.meta["message"] = err.toString(); apires.meta["code"] = 500; callback("err", apires); } else { apires.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 queryListApprovedBy(req, callback) { var apires = this.getApiResultDefined(); try { let qry = "select * from vw_pr_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 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 { const proc_nik = process.env.PROC_USER_NIK ?? ""; const proc_users = proc_nik.split(","); 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 (!proc_users.includes(nik)) { 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 status >= 2 and (trim(trxidpr) like '%" + keyword + "%' or trim(prnumber) like '%" + keyword + "%') "; qry = qry + swherenik + " order by id asc limit " + offset + ", " + limit; console.log('qry', qry) db.query(qry, [], function (err, result, fields) { if (err) { apires.meta["message"] = err.toString(); apires.meta["code"] = 500; callback("err", apires); } else { apires.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); } } async queryUpdateSapMessage(req, sapmessage, callback) { try { var apires = this.getApiResultDefined(); var idxpr = req.body.idxpr; var nik = req.body.nik; // console.log(setdescription); var qry = "update tbl_pr set sapmessage='" + sapmessage + "', uby='" + nik + "',udt=now() "; qry = qry + "where _idx='" + idxpr + "'"; console.log("qry", qry); db.query(qry, [], function (err, result, fields) { if (err) { apires.meta["message"] = err.toString(); apires.meta["code"] = 500; callback("err", apires); } else { apires.success = true; apires.data = JSON.parse(JSON.stringify(result)); callback(null, apires); } }); } catch (err) { apires.meta.code = 500; apires.meta.message = err.toString(); callback("error", apires); } } } module.exports = PrAdapter;