Files
backend-Eprocurement/adapter/budgetadapter.js
2026-03-24 09:35:23 +07:00

607 lines
26 KiB
JavaScript

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
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;