| @@ -1,88 +1,87 @@ | |||
| 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"]}', | |||
| 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"]}', | |||
| } 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){ | |||
| 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"]}'),`); | |||
| 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){ | |||
| 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) { | |||
| 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{ | |||
| } 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){ | |||
| var insertBlobQuery = await sqliteFunc.runQuery( | |||
| db, | |||
| insertJenisBlobQuery | |||
| ); | |||
| if (insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"]; | |||
| } catch (e) { | |||
| throw e; | |||
| } | |||
| } | |||
| async function getValueTableByName(db,name){ | |||
| async function getValueTableByName(db, name) { | |||
| var query = ` | |||
| select VALUE from | |||
| valueTable | |||
| @@ -90,15 +89,15 @@ async function getValueTableByName(db,name){ | |||
| LIMIT 1 | |||
| `; | |||
| var selectInsertTable = await sqliteFunc.selectQuery(db,query); | |||
| if(selectInsertTable["STATUS"] == 0) throw Error(selectInsertTable["DATA"]); | |||
| 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{ | |||
| async function getInsertedData(db) { | |||
| try { | |||
| var query = ` | |||
| select | |||
| MESIN, | |||
| @@ -107,17 +106,17 @@ async function getInsertedData(db){ | |||
| where flag_insert = 'TRUE' | |||
| `; | |||
| var selectTimestampInsert = await sqliteFunc.selectQuery(db,query); | |||
| if(selectTimestampInsert["STATUS"] == 0) throw selectTimestampInsert["DATA"]; | |||
| var selectTimestampInsert = await sqliteFunc.selectQuery(db, query); | |||
| if (selectTimestampInsert["STATUS"] == 0) | |||
| throw selectTimestampInsert["DATA"]; | |||
| return selectTimestampInsert["DATA"]; | |||
| } | |||
| catch(e){ | |||
| } catch (e) { | |||
| throw e; | |||
| } | |||
| } | |||
| async function getInsertedPic(db){ | |||
| try{ | |||
| async function getInsertedPic(db) { | |||
| try { | |||
| var query = ` | |||
| select | |||
| BLOB_FILE, | |||
| @@ -129,102 +128,119 @@ async function getInsertedPic(db){ | |||
| from blobTable where | |||
| blob_file IS NOT NULL | |||
| `; | |||
| var selectBlobTable = await sqliteFunc.selectQuery(db,query); | |||
| if(selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"]; | |||
| var selectBlobTable = await sqliteFunc.selectQuery(db, query); | |||
| if (selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"]; | |||
| return selectBlobTable["DATA"]; | |||
| } | |||
| catch(e){ | |||
| } catch (e) { | |||
| throw e; | |||
| } | |||
| } | |||
| async function unpackAndInsert(dbPath = null, company , cabangId){ | |||
| async function unpackAndInsert(dbPath = null, company, cabangId) { | |||
| let db; | |||
| try{ | |||
| try { | |||
| //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`); | |||
| if(!dbPath || !fs.existsSync( dbPath )) throw "Database Not Exist. Kirim Ulang Data"; | |||
| db = new sqlite3.Database(dbPath, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE); | |||
| var stockTakingUnitId = await getValueTableByName(db,'STOCK_TAKING_UNIT_ID'); | |||
| if (!dbPath || !fs.existsSync(dbPath)) | |||
| throw "Database Not Exist. Kirim Ulang Data"; | |||
| 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){ | |||
| 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{ | |||
| resolve({ STATUS: 1, DATA: result }); | |||
| }); | |||
| }); | |||
| } else { | |||
| fs.unlinkSync(dbPath); | |||
| return {"STATUS" : 1 ,"DATA" : result}; | |||
| return { STATUS: 1, DATA: result }; | |||
| } | |||
| } | |||
| catch(e){ | |||
| } catch (e) { | |||
| console.log(e); | |||
| if(db.open){ | |||
| return new Promise(function(resolve,reject){ | |||
| db.close(function(data){ | |||
| resolve({"STATUS" : 0 ,"DATA" : e.message||e}); | |||
| }) | |||
| }) | |||
| if (db && db.open) { | |||
| return new Promise(function (resolve, reject) { | |||
| db.close(function (data) { | |||
| resolve({ STATUS: 0, DATA: e.message || e }); | |||
| }); | |||
| }); | |||
| // db.close(function(data){ | |||
| // return {"STATUS" : 0 ,"DATA" : e}; | |||
| // }) | |||
| } else { | |||
| return { STATUS: 0, DATA: e }; | |||
| } | |||
| else{ | |||
| return {"STATUS" : 0 ,"DATA" : e}; | |||
| } | |||
| } | |||
| } | |||
| // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`); | |||
| // unpackAndInsert(dbPath,'TBS','02'); | |||
| // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`); | |||
| // unpackAndInsert(dbPath,'TBS','02'); | |||
| async function CreateDataCollection(company = '' , cabangId = ''){ | |||
| async function CreateDataCollection(company = "", cabangId = "") { | |||
| var dbPath; | |||
| let db; | |||
| try { | |||
| var checkStockTaking = await oracleModel.getActiveStockTakingByCabang(company,cabangId); | |||
| var checkStockTaking = await oracleModel.getActiveStockTakingByCabang( | |||
| company, | |||
| cabangId | |||
| ); | |||
| var oracleData; | |||
| if(checkStockTaking == undefined){ | |||
| oracleData = await oracleModel.prepareStockCollection(company,cabangId); | |||
| } | |||
| else { | |||
| 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.'; | |||
| 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"]); | |||
| 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 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); | |||
| dbPath = path.join(dirPath, dbName); | |||
| db = new sqlite3.Database( | |||
| dbPath, | |||
| sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE | |||
| ); | |||
| // Create Table Reference | |||
| // Create Table Reference | |||
| var refTableQuery = `CREATE TABLE refTable( | |||
| ID INTEGER PRIMARY KEY AUTOINCREMENT, | |||
| MESIN TEXT, | |||
| @@ -237,8 +253,8 @@ async function CreateDataCollection(company = '' , cabangId = ''){ | |||
| TIMESTAMP TEXT DEFAULT NULL, | |||
| FLAG_INSERT TEXT DEFAULT 'FALSE' | |||
| )`; | |||
| var createRefTable = await sqliteFunc.runQuery(db,refTableQuery); | |||
| if(createRefTable["STATUS"] == 0) throw createRefTable; | |||
| var createRefTable = await sqliteFunc.runQuery(db, refTableQuery); | |||
| if (createRefTable["STATUS"] == 0) throw createRefTable; | |||
| // var insertTableQuery = `CREATE TABLE insertTable( | |||
| // ID INTEGER PRIMARY KEY AUTOINCREMENT, | |||
| @@ -259,10 +275,8 @@ async function CreateDataCollection(company = '' , cabangId = ''){ | |||
| LONGITUDE TEXT | |||
| )`; | |||
| var createBlobTable = await sqliteFunc.runQuery(db,insertTableBlob); | |||
| if(createBlobTable["STATUS"] == 0) throw createInsertTable; | |||
| var createBlobTable = await sqliteFunc.runQuery(db, insertTableBlob); | |||
| if (createBlobTable["STATUS"] == 0) throw createInsertTable; | |||
| var valueTableQuery = ` | |||
| CREATE TABLE valueTable( | |||
| @@ -270,14 +284,16 @@ async function CreateDataCollection(company = '' , cabangId = ''){ | |||
| 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 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( | |||
| @@ -285,65 +301,61 @@ async function CreateDataCollection(company = '' , cabangId = ''){ | |||
| VALUE TEXT | |||
| ) | |||
| `; | |||
| var createJenisBlobTable = await sqliteFunc.runQuery(db,jenisBlobQuery); | |||
| if(createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable; | |||
| var createJenisBlobTable = await sqliteFunc.runQuery( | |||
| db, | |||
| jenisBlobQuery | |||
| ); | |||
| if (createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable; | |||
| //----------- JENIS FOTO---------------------------------------------- | |||
| await insertJenisFoto(db,jenisFoto); | |||
| await insertJenisFoto(db, jenisFoto); | |||
| if(dataUnitCabang.length > 0){ | |||
| //----------- REF TABLE---------------------------------------------- | |||
| await insertRefTable(db,dataUnitCabang); | |||
| if (dataUnitCabang.length > 0) { | |||
| //----------- REF TABLE---------------------------------------------- | |||
| await insertRefTable(db, dataUnitCabang); | |||
| //----------- UNIT DET PIC---------------------------------------------- | |||
| await insertUnitDetPic(db,dataUnitPic); | |||
| //----------- 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}); | |||
| }) | |||
| 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){ | |||
| }); | |||
| // 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}); | |||
| }) | |||
| resolve({ STATUS: 0, DATA: e }); | |||
| }); | |||
| }); | |||
| // db.close(function(data){ | |||
| // fs.unlinkSync(dbPath); | |||
| // return {"STATUS" : 0 , "DATA": e}; | |||
| // }); | |||
| } | |||
| } | |||
| else{ | |||
| if(dbPath){ | |||
| } else { | |||
| if (dbPath) { | |||
| fs.unlinkSync(dbPath); | |||
| } | |||
| console.log(e); | |||
| return {"STATUS" : 0 , "DATA": e}; | |||
| } | |||
| console.log(e); | |||
| return { STATUS: 0, DATA: e }; | |||
| } | |||
| } | |||
| } | |||
| //CreateDataCollection("TBS",'02'); | |||
| module.exports = { | |||
| CreateDataCollection : CreateDataCollection, | |||
| unpackAndInsert : unpackAndInsert | |||
| }; | |||
| CreateDataCollection: CreateDataCollection, | |||
| unpackAndInsert: unpackAndInsert, | |||
| }; | |||