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