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 qryBase = "select v.*, b.currency_id, b.rate_snapshot, c.currency AS currency_code, c.symbol AS currency_symbol "; qryBase += "from vw_budgetcapexinfo v "; qryBase += "left join tbl_budgetcapexinfo b on b._idx = v.id "; qryBase += "left join tbl_currency c on c._idx = b.currency_id "; qryBase += "where (trim(v.budgetid) like '%"+ keyword +"%' or trim(v.activityname) like '%"+ keyword +"%') "; let qry = qryBase + "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){ 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 + "order by v.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 v.*, b.currency_id, b.rate_snapshot, c.currency AS currency_code, c.symbol AS currency_symbol "; qry += "from vw_budgetcapexinfo v "; qry += "left join tbl_budgetcapexinfo b on b._idx = v.id "; qry += "left join tbl_currency c on c._idx = b.currency_id "; qry += "where v.id='"+id+"' order by v.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 currency_id = req.body.currency_id ?? null; let currencyFields = 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_budgetcapexinfo "; qry = qry +"set idxbudgettype='"+idxbudgettype+"', budgetid='"+budgetid+"',activityname='"+activityname+"',amount='"+amount+"',months='"+months+"',"; qry = qry +"targetrfs='"+targetrfs+"',years='"+years+"'"+currencyFields+", 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 currency_id = req.body.currency_id ?? null; let currencyFields = 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 = "update tbl_budgetcapexinfo "; qry = qry +"set idxbudgettype='"+idxbudgettype+"', budgetid='"+budgetid+"',activityname='"+activityname+"',amount='"+amount+"',months='"+months+"',"; qry = qry +"targetrfs='"+targetrfs+"',years='"+years+"'"+currencyFields+", 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 currency_id = req.body.currency_id ?? null; let currencyFieldsReq = 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_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+"'"+currencyFieldsReq+",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 currency_id_upd = req.body.currency_id ?? null; let currencyFieldsUpd = 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_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+"'"+currencyFieldsUpd+",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 qryBaseRb = "select v.*, r.currency_id, r.rate_snapshot, c.currency AS currency_code, c.symbol AS currency_symbol "; qryBaseRb += "from vw_requestbudget v "; qryBaseRb += "left join tbl_requestbudget r on r._idx = v.id "; qryBaseRb += "left join tbl_currency c on c._idx = r.currency_id "; qryBaseRb += "where (trim(v.budgetid) like '%"+ keyword +"%' or trim(v.activityname) like '%"+ keyword +"%') "; qryBaseRb += "and v.iby='"+nik+"' "; let qry = qryBaseRb + "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){ 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 = qryBaseRb + "order by v.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 v.*, r.currency_id, r.rate_snapshot, c.currency AS currency_code, c.symbol AS currency_symbol "; qry += "from vw_requestbudget v "; qry += "left join tbl_requestbudget r on r._idx = v.id "; qry += "left join tbl_currency c on c._idx = r.currency_id "; qry += "where v.id='"+id+"' order by v.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 v.*, b.currency_id, COALESCE(c.rate, 1) AS currency_rate, c.currency AS currency_code, c.symbol AS currency_symbol, (v.amount - COALESCE(( SELECT SUM(rb.amount * COALESCE(rb.rate_snapshot, COALESCE(rc.rate, 1)) / NULLIF(COALESCE(c.rate, 1), 0)) FROM tbl_requestbudget rb LEFT JOIN tbl_currency rc ON rc._idx = rb.currency_id WHERE rb.idxbudgetid = v._idx AND rb.crdb = 'K' AND rb.isdeleted = 0 ), 0) + COALESCE(( SELECT SUM(rb.amount * COALESCE(rb.rate_snapshot, COALESCE(rc.rate, 1)) / NULLIF(COALESCE(c.rate, 1), 0)) FROM tbl_requestbudget rb LEFT JOIN tbl_currency rc ON rc._idx = rb.currency_id WHERE rb.idxbudgetid = v._idx AND rb.crdb = 'D' AND rb.isdeleted = 0 ), 0) ) AS due_converted FROM vw_budgetlistbyrequest v LEFT JOIN tbl_budgetcapexinfo b ON b._idx = v._idx LEFT JOIN tbl_currency c ON c._idx = b.currency_id ORDER BY v._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;