|
- 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`);
- 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) {
- fs.unlinkSync(dbPath);
- resolve({ STATUS: 1, DATA: result });
- });
- });
- } else {
- fs.unlinkSync(dbPath);
- return { STATUS: 1, DATA: result };
- }
- } catch (e) {
- console.log(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 };
- }
- }
- }
-
- // 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,
- };
|