prod_v1.0 #1
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
|||||||
.env
|
.env
|
||||||
|
assets/
|
||||||
node_modules/
|
node_modules/
|
||||||
|
services/
|
||||||
|
services/r.json
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
const db=require('../config/dbproc.js');
|
const db=require('../config/dbproc.js');
|
||||||
const Adapter=require('./dbadapter.js');
|
const Adapter=require('./dbadapter.js');
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const baseUrl = process.env.URLPDFFILE;
|
|
||||||
|
|
||||||
class BastAdapter extends Adapter{
|
class BastAdapter extends Adapter{
|
||||||
constructor(){
|
constructor(){
|
||||||
@ -274,20 +274,10 @@ class BastAdapter extends Adapter{
|
|||||||
callback('err',apires);
|
callback('err',apires);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let qryHistory = "insert into tbl_bastfilehistory set statusdescription='Upload Handover', bastdateshandover='"+bastdates+"',descriptionhandover='"+description+"', filehandoversign='"+filehandoversign+"',iby='"+nik+"',idt=now(), idxbast='"+idxbast+"'"
|
apires.success = true;
|
||||||
|
apires.meta.code = 200;
|
||||||
db.query(qryHistory, [], function(err, result, fields) {
|
callback(null, apires);
|
||||||
if(err){
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback('err',apires);
|
|
||||||
} else {
|
|
||||||
apires.success = true;
|
|
||||||
apires.meta.code = 200;
|
|
||||||
callback(null, apires);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -379,22 +369,10 @@ class BastAdapter extends Adapter{
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let qryHistory = `select statusdescription, bastdateshandover, descriptionhandover, CONCAT('${baseUrl}?route=bast&name=', filehandoversign) AS filehandoversign, iby, idt from tbl_bastfilehistory where idxbast = ${result[0]._idx} order by _idx desc`
|
apires.data.push({
|
||||||
db.query(qryHistory, [], function(err, resultHistory, fields) {
|
"results": JSON.parse(JSON.stringify(result))
|
||||||
console.log(err)
|
});
|
||||||
console.log(resultHistory)
|
callback(null, apires);
|
||||||
if (err) {
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback('err',apires);
|
|
||||||
} else {
|
|
||||||
result[0].history_handover = resultHistory
|
|
||||||
apires.data.push({
|
|
||||||
"results": JSON.parse(JSON.stringify(result))
|
|
||||||
});
|
|
||||||
callback(null, apires);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,864 +0,0 @@
|
|||||||
const db=require('../config/dbproc.js');
|
|
||||||
// const slashes = require('slashes');
|
|
||||||
const QRCode = require('qrcode');
|
|
||||||
const Adapter=require('./dbadapter.js');
|
|
||||||
const fs = require("fs");
|
|
||||||
const { callbackPromise } = require('nodemailer/lib/shared/index.js');
|
|
||||||
|
|
||||||
const path = require('path');
|
|
||||||
// const { fs } = require('fs').promises;
|
|
||||||
|
|
||||||
const libre = require('libreoffice-convert');
|
|
||||||
libre.convertAsync = require('util').promisify(libre.convert);
|
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function ConvertToPdf(inputPath, outputPath) {
|
|
||||||
// const ext = '.pdf'
|
|
||||||
// const inputPath = path.join(__dirname, '/resources/example.docx');
|
|
||||||
// const outputPath = path.join(__dirname, `/resources/example${ext}`);
|
|
||||||
|
|
||||||
// Read file
|
|
||||||
const docxBuf = await fs.readFile(inputPath);
|
|
||||||
|
|
||||||
// Convert it to pdf format with undefined filter (see Libreoffice docs about filter)
|
|
||||||
let pdfBuf = await libre.convertAsync(docxBuf, '.pdf', undefined);
|
|
||||||
|
|
||||||
// Here in done you have pdf file which you can save or transfer in another stream
|
|
||||||
await fs.writeFile(outputPath, pdfBuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
class JustificationAdapter extends Adapter{
|
|
||||||
constructor(){
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async queryJustificationBudgetRequestList(req,callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
|
|
||||||
let id = req.query.id;
|
|
||||||
// console.log(req);
|
|
||||||
let qry = "select * from vw_requestbudget 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 queryNewJustification(filename, req, callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
// console.log(req.body);
|
|
||||||
let idxrequestbudget= req.body.idxrequestbudget;
|
|
||||||
let trxid = req.body.trxid;
|
|
||||||
let justificationnumber = req.body.nomorjustifikasi;
|
|
||||||
let title = req.body.judul;
|
|
||||||
let division = req.body.divisi;
|
|
||||||
let glacc = req.body.acccode;
|
|
||||||
let description = req.body.deskripsi;
|
|
||||||
let budgettype = req.body.jenisbudget;
|
|
||||||
let amount = req.body.nilai;
|
|
||||||
let useddate = req.body.tanggalpelaksanaan;
|
|
||||||
let textpurpose = "";//req.body.maksudtujuan;
|
|
||||||
let textintroduce = "";//req.body.latarbelakang;
|
|
||||||
let textstrategic = "";//req.body.strategis;
|
|
||||||
let textbussiness = "";//req.body.bisnis;
|
|
||||||
let textrisk = "";//req.body.risiko;
|
|
||||||
let textfund = "";//req.body.pembiayaan;
|
|
||||||
let textrecomendation = "";//req.body.rekomendasi;
|
|
||||||
let textschedule = "";//req.body.penjadwalan;
|
|
||||||
let filedoc = filename;
|
|
||||||
let nik = req.body.nik;
|
|
||||||
let boq = JSON.parse(req.body.boq);
|
|
||||||
let ttd = JSON.parse(req.body.ttd);
|
|
||||||
let status = -1;
|
|
||||||
let statusdescription = "draft";
|
|
||||||
|
|
||||||
let qry = "insert into tbl_justification ";
|
|
||||||
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
|
|
||||||
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',textpurpose='"+textpurpose+"',textintroduce='"+textintroduce+"',";
|
|
||||||
qry = qry +"textstrategic='"+textstrategic+"',textbussiness='"+textbussiness+"',textrisk='"+textrisk+"',textfund='"+textfund+"',textrecomendation='"+textrecomendation+"',";
|
|
||||||
qry = qry +"textschedule='"+textschedule+"',status='"+status+"',statusdescription='"+statusdescription+"',filedoc='"+filedoc+"',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 idjustification = res.insertId;
|
|
||||||
// ==== Add boq
|
|
||||||
// console.log(boq);
|
|
||||||
qry="";
|
|
||||||
Object.keys(boq).forEach(function(key){
|
|
||||||
var items = boq[key]['items'];
|
|
||||||
var qty = boq[key]['qty'];
|
|
||||||
var unitprice = boq[key]['unitprice'];
|
|
||||||
var units = boq[key]['units']||"";
|
|
||||||
var total = boq[key]['total'];
|
|
||||||
qry = "insert into tbl_justificationboq set idxjustification='"+idjustification+"',";
|
|
||||||
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',iby='"+nik+"',idt=now()";
|
|
||||||
db.query(qry,[],function(err2,result2,fields2){return result2;});
|
|
||||||
// console.log(r);
|
|
||||||
});
|
|
||||||
|
|
||||||
// ==== add ttd
|
|
||||||
var created = ttd.dibuatoleh;
|
|
||||||
var approval = ttd.disetujuioleh;
|
|
||||||
|
|
||||||
Object.keys(created).forEach(function(key){
|
|
||||||
var token =getToken();
|
|
||||||
var idemployee = created[key]['idemployee'];
|
|
||||||
var nikapproval = created[key]['nik'];
|
|
||||||
|
|
||||||
qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
qry = qry + "nik='"+nikapproval+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
|
|
||||||
db.query(qry,[],function(err3,result3,fields3){return result3;});
|
|
||||||
// QRCode.toDataURL(token, function (err, code) {
|
|
||||||
// if(err) return console.log("error occurred")
|
|
||||||
// qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
// qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='"+code+"',iby='"+nik+"',idt=now()";
|
|
||||||
// db.query(qry,[],function(err3,result3,fields3){return result3;});
|
|
||||||
// // Printing the code
|
|
||||||
// // console.log(code)
|
|
||||||
// })
|
|
||||||
|
|
||||||
|
|
||||||
// console.log(r);
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.keys(approval).forEach(function(key){
|
|
||||||
var token =getToken();
|
|
||||||
var idemployee = approval[key]['idemployee'];
|
|
||||||
var nik = approval[key]['nik'];
|
|
||||||
|
|
||||||
// if(err) return console.log("error occurred")
|
|
||||||
qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
|
|
||||||
db.query(qry,[],function(err3,result3,fields3){return result3;});
|
|
||||||
// QRCode.toDataURL(token, function (err, code) {
|
|
||||||
// if(err) return console.log("error occurred")
|
|
||||||
// qry = "insert into tbl_justificationttd set idxjustification='"+idjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
// qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='"+code+"',iby='"+nik+"',idt=now()";
|
|
||||||
// db.query(qry,[],function(err3,result3,fields3){return result3;});
|
|
||||||
|
|
||||||
// // Printing the code
|
|
||||||
// // console.log(code)
|
|
||||||
// })
|
|
||||||
|
|
||||||
// console.log(r);
|
|
||||||
});
|
|
||||||
|
|
||||||
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 queryUpdateJustification(filename, req, callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
// console.log(req.body);
|
|
||||||
let idxjustification= req.body.idxjustification;
|
|
||||||
let idxrequestbudget= req.body.idxrequestbudget;
|
|
||||||
let trxid = req.body.trxid;
|
|
||||||
let justificationnumber = req.body.nomorjustifikasi;
|
|
||||||
let title = req.body.judul;
|
|
||||||
let division = req.body.divisi;
|
|
||||||
let glacc = req.body.acccode;
|
|
||||||
let description = req.body.deskripsi;
|
|
||||||
let budgettype = req.body.jenisbudget;
|
|
||||||
let amount = req.body.nilai;
|
|
||||||
let useddate = req.body.tanggalpelaksanaan;
|
|
||||||
let textpurpose = "";//req.body.maksudtujuan;
|
|
||||||
let textintroduce = "";//req.body.latarbelakang;
|
|
||||||
let textstrategic = "";//req.body.strategis;
|
|
||||||
let textbussiness = "";//req.body.bisnis;
|
|
||||||
let textrisk = "";//req.body.risiko;
|
|
||||||
let textfund = "";//req.body.pembiayaan;
|
|
||||||
let textrecomendation = "";//req.body.rekomendasi;
|
|
||||||
let textschedule = "";//req.body.penjadwalan;
|
|
||||||
let filedoc = filename;
|
|
||||||
let nik = req.body.nik;
|
|
||||||
let boq = JSON.parse(req.body.boq);
|
|
||||||
let ttd = JSON.parse(req.body.ttd);
|
|
||||||
|
|
||||||
let filedocqry = "filedoc='"+filedoc+"',";
|
|
||||||
if(filename==""){filedocqry="";}
|
|
||||||
|
|
||||||
// console.log(filedocqry);
|
|
||||||
let qry = "update tbl_justification ";
|
|
||||||
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
|
|
||||||
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',textpurpose='"+textpurpose+"',textintroduce='"+textintroduce+"',";
|
|
||||||
qry = qry +"textstrategic='"+textstrategic+"',textbussiness='"+textbussiness+"',textrisk='"+textrisk+"',textfund='"+textfund+"',textrecomendation='"+textrecomendation+"',";
|
|
||||||
qry = qry +"textschedule='"+textschedule+"',"+filedocqry+"uby='"+nik+"',udt=now() ";
|
|
||||||
qry = qry +"where _idx='"+idxjustification+"'";
|
|
||||||
|
|
||||||
// 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
|
|
||||||
{
|
|
||||||
Object.keys(boq).forEach(function(key){
|
|
||||||
var idboq = boq[key]['id'];
|
|
||||||
var items = boq[key]['items'];
|
|
||||||
var qty = boq[key]['qty'];
|
|
||||||
var unitprice = boq[key]['unitprice'];
|
|
||||||
var units = boq[key]['units'];
|
|
||||||
var total = boq[key]['total'];
|
|
||||||
var action = boq[key]['action'];
|
|
||||||
qry = "insert into tbl_justificationboq set idxjustification='"+idxjustification+"',";
|
|
||||||
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',iby='"+nik+"',idt=now()";
|
|
||||||
if(action=='update'){
|
|
||||||
qry = "update tbl_justificationboq set idxjustification='"+idxjustification+"',";
|
|
||||||
qry = qry + "items='"+items+"',qty='"+qty+"',units='"+units+"',unitprice='"+unitprice+"',total='"+total+"',uby='"+nik+"',udt=now() ";
|
|
||||||
qry = qry + "where _idx='"+idboq+"'";
|
|
||||||
}
|
|
||||||
if(action=='delete'){
|
|
||||||
qry = "update tbl_justificationboq set isdeleted=1,dby='"+nik+"',ddt=now() ";
|
|
||||||
qry = qry + "where _idx='"+idboq+"'";
|
|
||||||
}
|
|
||||||
db.query(qry,[],function(err2,result2,fields2){return result2;});
|
|
||||||
// console.log(r);
|
|
||||||
});
|
|
||||||
|
|
||||||
var created = ttd.dibuatoleh;
|
|
||||||
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_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
|
|
||||||
if(action=='update'){
|
|
||||||
qry = "update tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
qry = qry + "nik='"+nik+"',category='CRE',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
|
|
||||||
qry = qry + "where _idx='"+id+"' and issigned=0";
|
|
||||||
}
|
|
||||||
if(action=='delete'){
|
|
||||||
qry = "update tbl_justificationttd 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_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',iby='"+nik+"',idt=now()";
|
|
||||||
if(action=='update'){
|
|
||||||
qry = "update tbl_justificationttd set idxjustification='"+idxjustification+"',idemployee='"+idemployee+"',";
|
|
||||||
qry = qry + "nik='"+nik+"',category='APR',token='"+token+"',imgqr='',uby='"+nik+"',udt=now() ";
|
|
||||||
qry = qry + "where _idx='"+id+"' and issigned=0";
|
|
||||||
}
|
|
||||||
if(action=='delete'){
|
|
||||||
qry = "update tbl_justificationttd set isdeleted=1,dby='"+nik+"',ddt=now() ";
|
|
||||||
qry = qry+ "where _idx='"+id+"'";
|
|
||||||
}
|
|
||||||
db.query(qry,[],function(err3,result3,fields3){return result3;});
|
|
||||||
});
|
|
||||||
apires.success = true;
|
|
||||||
apires.meta.message = "Updated Success";
|
|
||||||
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 queryUpdateStatusJustification(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_justification 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async queryConvertdocxtoPdf(req, callback) {
|
|
||||||
try {
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
var idxjustification = req.body.idxjustification;
|
|
||||||
|
|
||||||
var qry = "select * from vw_justification where id='" + idxjustification +"'";
|
|
||||||
// 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){
|
|
||||||
const inputPath = "/home/nodejs/wsproc/assets/words/justifikasitemplate.docx";
|
|
||||||
const outputPath = "/home/nodejs/wsproc/assets/pdf/justifikasitemplate.pdf";
|
|
||||||
// console.log(__dirname);
|
|
||||||
ConvertToPdf(inputPath, outputPath).catch(function (err) {
|
|
||||||
if(err){
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback('err',apires);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
apires.success = true;
|
|
||||||
callback(null,apires);
|
|
||||||
}
|
|
||||||
// console.log(`Error converting file: ${err}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
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 querySignedJustification(filename, req, callback) {
|
|
||||||
try {
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
let idxjustification= req.body.idxjustification;
|
|
||||||
let idxrequestbudget= req.body.idxrequestbudget;
|
|
||||||
let trxid = req.body.trxid;
|
|
||||||
let justificationnumber = req.body.nomorjustifikasi;
|
|
||||||
let title = req.body.judul;
|
|
||||||
let division = req.body.divisi;
|
|
||||||
let glacc = req.body.acccode;
|
|
||||||
let description = req.body.deskripsi;
|
|
||||||
let budgettype = req.body.jenisbudget;
|
|
||||||
let amount = req.body.nilai;
|
|
||||||
let useddate = req.body.tanggalpelaksanaan;
|
|
||||||
let filedoc = filename;
|
|
||||||
var idxapproval = req.body.idxapproval;
|
|
||||||
var nikapproval = req.body.nikapproval;
|
|
||||||
var datesigned = req.body.datesigned;
|
|
||||||
// console.log(datesigned);
|
|
||||||
var nik = req.body.nik;
|
|
||||||
var token = this.getToken();
|
|
||||||
var filepng = token+".png";
|
|
||||||
// token =getToken();
|
|
||||||
token = token +","+nikapproval;
|
|
||||||
|
|
||||||
let filedocqry = "filedoc='"+filedoc+"',";
|
|
||||||
if(filename=="")
|
|
||||||
{
|
|
||||||
filedocqry="";
|
|
||||||
// apires.meta['message'] = "File tidak ditemukan";
|
|
||||||
// apires.meta['code'] = 500;
|
|
||||||
// callback(null, apires);
|
|
||||||
}
|
|
||||||
|
|
||||||
let qry = "update tbl_justification ";
|
|
||||||
qry = qry +"set idxrequestbudget='"+idxrequestbudget+"', trxid='"+trxid+"',justificationnumber='"+justificationnumber+"',title='"+title+"',division='"+division+"',";
|
|
||||||
qry = qry +"glacc='"+glacc+"',description='"+description+"',budgettype='"+budgettype+"',amount='"+amount+"',useddate='"+useddate+"',";
|
|
||||||
qry = qry +filedocqry+"uby='"+nik+"',udt=now() ";
|
|
||||||
qry = qry +"where _idx='"+idxjustification+"'";
|
|
||||||
|
|
||||||
db.query(qry,[],function(err,result,fields){
|
|
||||||
if(err){
|
|
||||||
console.log('d');
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback('err',apires);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QRCode.toDataURL(token, function (err, code) {
|
|
||||||
// console.log(code);`
|
|
||||||
if(err) {
|
|
||||||
console.log('ddf');
|
|
||||||
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){
|
|
||||||
console.log('eee');
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback(err.toString(), apires);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
var qry = "update tbl_justificationttd set token=md5('"+token+"'),imgqr='"+filepng+"',issigned='1',signeddate='"+datesigned+"',uby='"+nik+"',udt=now() ";
|
|
||||||
qry = qry +"where _idx='" + idxapproval +"'";
|
|
||||||
// console.log(qry);
|
|
||||||
db.query(qry,[],function(err,result,fields){
|
|
||||||
if(err){
|
|
||||||
console.log('ttetete');
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback('err',apires);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
apires.success = true;
|
|
||||||
// ===
|
|
||||||
qry = "select status from tbl_justification where _idx='"+idxjustification+"'";
|
|
||||||
db.query(qry,[],function(err,result2,fields){
|
|
||||||
if(err){
|
|
||||||
console.log('bbbb');
|
|
||||||
apires.meta['message'] = err.toString();
|
|
||||||
apires.meta['code'] = 500;
|
|
||||||
callback('error',apires);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var status = result2[0]['status'];
|
|
||||||
var isapproved=0;
|
|
||||||
if(status==2){isapproved = 1;}
|
|
||||||
apires.data = {
|
|
||||||
"isapproved":isapproved,
|
|
||||||
"token":token,
|
|
||||||
"urltoken": process.env.BASEURL+"/main/getimageinfo?route=png&name="+filepng
|
|
||||||
};
|
|
||||||
callback(null, apires);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// else{
|
|
||||||
|
|
||||||
// }
|
|
||||||
} catch (err) {
|
|
||||||
apires.meta.code = 500;
|
|
||||||
apires.meta.message = err.toString();
|
|
||||||
callback('error',apires);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async queryDeleteJustification(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_justification ";
|
|
||||||
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 queryListCreatedBy(req,callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
|
|
||||||
let qry = "select * from vw_createdby 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 queryListCheckedBy(req,callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
|
|
||||||
let qry = "select * from vw_checkedby 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 queryListApprovedBy(req,callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
|
|
||||||
let qry = "select * from vw_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 queryJustificationDetail(req,callback){
|
|
||||||
var apires = this.getApiResultDefined();
|
|
||||||
try {
|
|
||||||
|
|
||||||
let _idx= req.query.id;
|
|
||||||
|
|
||||||
let qry = "select * from vw_justificationdetail 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_justificationboq where idxjustification='"+_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]['boq'] = [];
|
|
||||||
result[key]['ttd']= [];
|
|
||||||
if(result2.length>0){
|
|
||||||
result[key]['boq'] = JSON.parse(JSON.stringify(result2));
|
|
||||||
}
|
|
||||||
// === Get Ttd
|
|
||||||
qry = "select * from vw_justificationttd where idxjustification='"+_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 disetujuioleh = [];
|
|
||||||
Object.keys(result3).forEach(function(key2){
|
|
||||||
if(result3[key2]['category']=='CRE'){
|
|
||||||
dibuatoleh.push(JSON.parse(JSON.stringify(result3[key2])));
|
|
||||||
}else{
|
|
||||||
disetujuioleh.push(JSON.parse(JSON.stringify(result3[key2])));
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
result[key]['ttd'] = {
|
|
||||||
"dibuatoleh" : dibuatoleh,
|
|
||||||
"disetujuioleh" : disetujuioleh
|
|
||||||
}
|
|
||||||
// result[key]['ttd'] = JSON.parse(JSON.stringify(result3));
|
|
||||||
}
|
|
||||||
if(0 === --dataRows){
|
|
||||||
let resultJson = JSON.stringify(result);
|
|
||||||
console.log(resultJson);
|
|
||||||
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 queryJustificationList(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_justification ";
|
|
||||||
// qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) like '%"+ keyword +"%') ";
|
|
||||||
// qry = qry +"and iby='"+nik+"' and status in("+status+") order by id asc";
|
|
||||||
let qry = "select * from vw_justification ";
|
|
||||||
qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) 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_justification ";
|
|
||||||
qry = qry +"where (trim(acccode) like '%"+ keyword +"%' or trim(nomorjustifikasi) 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = JustificationAdapter;
|
|
||||||
BIN
assets/bast/basthandoversign_00001_1764923325927.pdf
Normal file
BIN
assets/bast/basthandoversign_999999_1764923182300.pdf
Normal file
BIN
assets/bast/pdf/bast_999999_1764923095076.pdf
Normal file
BIN
assets/bast/pdf/bast_999999_1764923252437.pdf
Normal file
BIN
assets/finance/fin_00001_1764924220881.pdf
Normal file
BIN
assets/justification/justifikasi_999999_1764845585113.docx
Normal file
BIN
assets/justification/justifikasi_999999_1767760613420.docx
Normal file
BIN
assets/justification/merge/justifikasi_999999_1764824271258.docx
Normal file
BIN
assets/justification/merge/justifikasi_999999_1767760851379.docx
Normal file
BIN
assets/justification/pdf/justifikasi_999999_1764824271258.pdf
Normal file
BIN
assets/justification/pdf/justifikasi_999999_1767760851379.pdf
Normal file
BIN
assets/png/047172pr.png
Normal file
|
After Width: | Height: | Size: 806 B |
BIN
assets/png/313188.png
Normal file
|
After Width: | Height: | Size: 764 B |
BIN
assets/png/317762.png
Normal file
|
After Width: | Height: | Size: 762 B |
BIN
assets/png/332642pr.png
Normal file
|
After Width: | Height: | Size: 741 B |
BIN
assets/png/370718.png
Normal file
|
After Width: | Height: | Size: 803 B |
BIN
assets/png/508702.png
Normal file
|
After Width: | Height: | Size: 756 B |
BIN
assets/png/561705.png
Normal file
|
After Width: | Height: | Size: 777 B |
BIN
assets/png/762507.png
Normal file
|
After Width: | Height: | Size: 741 B |
BIN
assets/pngproc/054238.png
Normal file
|
After Width: | Height: | Size: 792 B |
BIN
assets/pngproc/365454.png
Normal file
|
After Width: | Height: | Size: 756 B |
BIN
assets/pngproc/613760.png
Normal file
|
After Width: | Height: | Size: 795 B |
2
assets/po/boq/00001_boq.csv
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
idxpo,sp3_number,items,idxpoboq,vendorid_sap,description,po_number,start_date,end_date,curr,unit_price,qty,po_amount,rate_po,migo
|
||||||
|
1,,transmisi radio,1,TL10000002,transmisi,123,,,USD,100,12,1200,0,
|
||||||
|
BIN
assets/procjustification/bakn_00001_1764921843909.pdf
Normal file
BIN
assets/procjustification/justifikasi_00001_1764921722073.docx
Normal file
BIN
assets/procjustification/procjustifikasi_00001.docx
Normal file
BIN
assets/procjustification/sph_00001_1764921838088.pdf
Normal file
BIN
assets/procjustification/spph_00001_1764921828853.pdf
Normal file
@ -3,7 +3,7 @@ const mysql = require('mysql');
|
|||||||
const dbcon = mysql.createConnection({
|
const dbcon = mysql.createConnection({
|
||||||
host : process.env.HOSTDB,
|
host : process.env.HOSTDB,
|
||||||
user : process.env.USERDB,
|
user : process.env.USERDB,
|
||||||
password : process.env.PASSDB,
|
password : "ssotcel#20i7",
|
||||||
database : process.env.DBHOST,
|
database : process.env.DBHOST,
|
||||||
acquireTimeout: 30000,
|
acquireTimeout: 30000,
|
||||||
insecureAuth: true,
|
insecureAuth: true,
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
Starting Time : Thu Dec 4 11:19:31 JST 2025
|
Starting Time : Wed Jan 7 13:40:51 JST 2026
|
||||||
{"metadata":{"code":200,"message":"OK"},"response":{"filepdf":["justifikasi_00001_1764814771305.pdf"]}}
|
{"metadata":{"code":200,"message":"OK"},"response":{"filepdf":["justifikasi_999999_1767760851379.pdf"]}}
|
||||||
End Time : Thu Dec 4 11:19:44 JST 2025
|
End Time : Wed Jan 7 13:40:54 JST 2026
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
Starting Time : Wed Jul 3 13:39:21 JST 2024
|
Starting Time : Wed Jan 7 15:46:51 JST 2026
|
||||||
{"metadata":{"code":200,"message":"OK"},"response":{"filepdf":["procjustifikasi_999999_1719981561245.pdf"]}}
|
{"metadata":{"code":200,"message":"OK"},"response":{"filepdf":["procjustifikasi_999999_1767768411944.pdf"]}}
|
||||||
End Time : Wed Jul 3 13:39:23 JST 2024
|
End Time : Wed Jan 7 15:46:54 JST 2026
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
{"metadata":{"code":200,"message":""},"response":{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJpdG5zcjA5QGdtYWlsLmNvbSIsImF1ZCI6WyJwcm9jIiwicHIwYzIwMjIjdGMzbCJdLCJpc3MiOiJ0ZWxrb21jZWwudGwiLCJleHAiOjE3NjQ4NTk4NjEsImlhdCI6MTc2NDg1NjI2MSwianRpIjoiYjBmMGEyYzUtMTc0NS00OTAyLWE0YTQtMzYxYTI2OGY4N2E3In0.ROj8NlWd4-2VuNQvfTdK9v1ct597mxoWLAP-QU_8KTM"}}
|
{"metadata":{"code":200,"message":""},"response":{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJpdG5zcjA5QGdtYWlsLmNvbSIsImF1ZCI6WyJwcm9jIiwicHIwYzIwMjIjdGMzbCJdLCJpc3MiOiJ0ZWxrb21jZWwudGwiLCJleHAiOjE3Njc4MDUyMzEsImlhdCI6MTc2NzgwMTYzMSwianRpIjoiNTJkMDdkZDMtYzBmMC00OTcwLTg0MWItNWJiNjMwNjY0N2NmIn0.KyO5ThcHupHy-qlTVsdivxaIudQKu3U95WSXMiqEX3s"}}
|
||||||