const sqlite3 = require('sqlite3').verbose(); var sqliteFunc = require('../util/db_sqlite.js'); var oracleModel = require('./oracleModel.js'); const oracledb = require('oracledb'); const path = require('path'); const fs = require('fs'); async function insertRefTable(db,dataUnitCabang){ try{ var runQuery = 'insert into refTable(mesin,tipe,rangka,warna,kode,tahun,state) VALUES '; for(var i = 0 ; i < dataUnitCabang.length ; i ++){ if(i == dataUnitCabang.length -1){ runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}', '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}')`); } else { runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}', '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}'), `); } } var insertTable = await sqliteFunc.runQuery(db,runQuery); if(insertTable["STATUS"] == 0) throw insertTable["DATA"] } catch(e){ throw e; } } async function insertJenisFoto(db,jenisFoto){ try{ var valBlobTable = ''; for(var i = 0 ; i < jenisFoto.length ; i++){ if(i == jenisFoto.length -1) { valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}')`); } else{ valBlobTable = valBlobTable.concat(`('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}'),`); } } var insertJenisBlobQuery = ` Insert Into jenisBlobTable Values ${valBlobTable} `; var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery); if(insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"] } catch(e){ throw e; } } async function insertUnitDetPic(db,dataUnitPic){ try{ var valDetPic = ''; for(var i = 0 ; i < dataUnitPic.length ; i++){ if(i == dataUnitPic.length -1) { valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}', null,'${dataUnitPic[i]["JENIS"]}',null,null)`); } else{ valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}', null,'${dataUnitPic[i]["JENIS"]}',null,null),`); } } var insertJenisBlobQuery = ` Insert Into blobTable(MESIN,NO_URUT,BLOB_FILE,JENIS,LATITUDE,LONGITUDE) Values ${valDetPic}; `; var insertBlobQuery = await sqliteFunc.runQuery(db,insertJenisBlobQuery); if(insertBlobQuery["STATUS"] == 0 ) throw insertBlobQuery["DATA"] } catch(e){ throw e; } } async function getValueTableByName(db,name){ var query = ` select VALUE from valueTable where name = '${name}' LIMIT 1 `; var selectInsertTable = await sqliteFunc.selectQuery(db,query); if(selectInsertTable["STATUS"] == 0) throw Error(selectInsertTable["DATA"]); var data = selectInsertTable["DATA"]; var value = data[0]["VALUE"]; return value; } async function getInsertedData(db){ try{ var query = ` select MESIN, TIMESTAMP from refTable where flag_insert = 'TRUE' `; var selectTimestampInsert = await sqliteFunc.selectQuery(db,query); if(selectTimestampInsert["STATUS"] == 0) throw selectTimestampInsert["DATA"]; return selectTimestampInsert["DATA"]; } catch(e){ throw e; } } async function getInsertedPic(db){ try{ var query = ` select BLOB_FILE, jenis, latitude, LONGITUDE, MESIN, NO_URUT from blobTable where blob_file IS NOT NULL `; var selectBlobTable = await sqliteFunc.selectQuery(db,query); if(selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"]; return selectBlobTable["DATA"]; } catch(e){ throw e; } } async function unpackAndInsert(dbPath = null, company , cabangId){ let db; try{ //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`); db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); var stockTakingUnitId = await getValueTableByName(db,'STOCK_TAKING_UNIT_ID'); var insertedData = await getInsertedData(db); var insertedPic = await getInsertedPic(db); var stockTakingData = {"company" : company , "cabangId" : cabangId, "stockTakingUnitId" : stockTakingUnitId}; var result = await oracleModel.insertStockUnitData(stockTakingData,insertedData,insertedPic); if(db.open){ return new Promise(function(resolve,reject){ db.close(function(data){ fs.unlinkSync(dbPath); resolve({"STATUS" : 1 ,"DATA" : result}); }) }) } else{ fs.unlinkSync(dbPath); return {"STATUS" : 1 ,"DATA" : result}; } } catch(e){ console.log(e); if(db.open){ return new Promise(function(resolve,reject){ db.close(function(data){ resolve({"STATUS" : 0 ,"DATA" : e}); }) }) // db.close(function(data){ // return {"STATUS" : 0 ,"DATA" : e}; // }) } else{ return {"STATUS" : 0 ,"DATA" : e}; } } } // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`); // unpackAndInsert(dbPath,'TBS','02'); async function CreateDataCollection(company = '' , cabangId = ''){ var dbPath; let db; try { var checkStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId); var oracleData; if(checkStockTaking == undefined){ oracleData = await oracleModel.prepareStockCollection(company,cabangId); } else { let state = checkStockTaking["STATE"]; if(state == 'Submitted'){ throw 'Gagal dalam mengambil data, mohon menunggu review data yang disubmit sebelumnya.'; } oracleData = await oracleModel.getActiveStockCollection(company,cabangId,checkStockTaking["STOCK_TAKING_UNIT_ID"]); } var stockTakingUnitId = oracleData["stockTakingUnitId"]; var dataUnitCabang = oracleData["dataUnitCabang"]; var dataUnitPic = oracleData["dataUnitPic"]; var jenisFoto = oracleData["jenisFoto"]; var dirPath = path.join(__dirname , `../public/sqlite/db/${company}/${cabangId}`); var resultDirPath = fs.mkdirSync(dirPath, { recursive: true }); var d = new Date(); var n = d.getTime(); var dbName = `${n}.db`; dbPath = path.join(dirPath ,dbName); db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); // Create Table Reference var refTableQuery = `CREATE TABLE refTable( ID INTEGER PRIMARY KEY AUTOINCREMENT, MESIN TEXT, TIPE TEXT, RANGKA TEXT, WARNA TEXT, KODE TEXT, TAHUN TEXT, STATE TEXT, TIMESTAMP TEXT DEFAULT NULL, FLAG_INSERT TEXT DEFAULT 'FALSE' )`; var createRefTable = await sqliteFunc.runQuery(db,refTableQuery); if(createRefTable["STATUS"] == 0) throw createRefTable; // var insertTableQuery = `CREATE TABLE insertTable( // ID INTEGER PRIMARY KEY AUTOINCREMENT, // MESIN TEXT, // TIMESTAMP TEXT // )`; // var createInsertTable = await sqliteFunc.runQuery(db,insertTableQuery); // if(createInsertTable["STATUS"] == 0) throw createInsertTable; var insertTableBlob = `CREATE TABLE blobTable( BLOB_ID INTEGER PRIMARY KEY AUTOINCREMENT, MESIN TEXT, NO_URUT TEXT, BLOB_FILE BLOB, JENIS TEXT, LATITUDE TEXT, LONGITUDE TEXT )`; var createBlobTable = await sqliteFunc.runQuery(db,insertTableBlob); if(createBlobTable["STATUS"] == 0) throw createInsertTable; var valueTableQuery = ` CREATE TABLE valueTable( NAME TEXT, VALUE TEXT ) `; var createValueTable = await sqliteFunc.runQuery(db,valueTableQuery); if(createValueTable["STATUS"] == 0) throw createValueTable; var queryValueTableInsert = `insert into valueTable(name,value) VALUES ('STOCK_TAKING_UNIT_ID',${stockTakingUnitId})`; var insertValueTableInsert = await sqliteFunc.runQuery(db,queryValueTableInsert); if(insertValueTableInsert["STATUS"] == 0) throw insertValueTableInsert; var jenisBlobQuery = ` CREATE TABLE jenisBlobTable( NO_URUT TEXT, VALUE TEXT ) `; var createJenisBlobTable = await sqliteFunc.runQuery(db,jenisBlobQuery); if(createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable; //----------- JENIS FOTO---------------------------------------------- await insertJenisFoto(db,jenisFoto); if(dataUnitCabang.length > 0){ //----------- REF TABLE---------------------------------------------- await insertRefTable(db,dataUnitCabang); //----------- UNIT DET PIC---------------------------------------------- await insertUnitDetPic(db,dataUnitPic); } if(db.open){ return new Promise(function(resolve,reject){ db.close(function(data){ resolve({"STATUS" : 1 ,"DATA" : dbPath}); }) }); // db.close(function(data){ // return {"STATUS" : 1, "DATA" : dbPath}; // }) } else{ return {"STATUS" : 1, "DATA" : dbPath}; } } catch(e){ if(db){ if(db.open){ return new Promise(function(resolve,reject){ db.close(function(data){ fs.unlinkSync(dbPath); resolve({"STATUS" : 0 ,"DATA" : e}); }) }); // db.close(function(data){ // fs.unlinkSync(dbPath); // return {"STATUS" : 0 , "DATA": e}; // }); } } else{ if(dbPath){ fs.unlinkSync(dbPath); } console.log(e); return {"STATUS" : 0 , "DATA": e}; } } } //CreateDataCollection("TBS",'02'); module.exports = { CreateDataCollection : CreateDataCollection, unpackAndInsert : unpackAndInsert };