Node-server for unitstock app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

362 lines
12 KiB

  1. const sqlite3 = require("sqlite3").verbose();
  2. var sqliteFunc = require("../util/db_sqlite.js");
  3. var oracleModel = require("./oracleModel.js");
  4. const oracledb = require("oracledb");
  5. const path = require("path");
  6. const fs = require("fs");
  7. async function insertRefTable(db, dataUnitCabang) {
  8. try {
  9. var runQuery =
  10. "insert into refTable(mesin,tipe,rangka,warna,kode,tahun,state) VALUES ";
  11. for (var i = 0; i < dataUnitCabang.length; i++) {
  12. if (i == dataUnitCabang.length - 1) {
  13. runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}',
  14. '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}')`);
  15. } else {
  16. runQuery = runQuery.concat(`('${dataUnitCabang[i]["MESIN"]}','${dataUnitCabang[i]["TIPE"]}','${dataUnitCabang[i]["RANGKA"]}','${dataUnitCabang[i]["WARNA"]}',
  17. '${dataUnitCabang[i]["KODE"]}','${dataUnitCabang[i]["TAHUN"]}','${dataUnitCabang[i]["STATE"]}'), `);
  18. }
  19. }
  20. var insertTable = await sqliteFunc.runQuery(db, runQuery);
  21. if (insertTable["STATUS"] == 0) throw insertTable["DATA"];
  22. } catch (e) {
  23. throw e;
  24. }
  25. }
  26. async function insertJenisFoto(db, jenisFoto) {
  27. try {
  28. var valBlobTable = "";
  29. for (var i = 0; i < jenisFoto.length; i++) {
  30. if (i == jenisFoto.length - 1) {
  31. valBlobTable = valBlobTable.concat(
  32. `('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}')`
  33. );
  34. } else {
  35. valBlobTable = valBlobTable.concat(
  36. `('${jenisFoto[i]["NO_URUT"]}','${jenisFoto[i]["JENIS"]}'),`
  37. );
  38. }
  39. }
  40. var insertJenisBlobQuery = `
  41. Insert Into jenisBlobTable Values ${valBlobTable}
  42. `;
  43. var insertBlobQuery = await sqliteFunc.runQuery(
  44. db,
  45. insertJenisBlobQuery
  46. );
  47. if (insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"];
  48. } catch (e) {
  49. throw e;
  50. }
  51. }
  52. async function insertUnitDetPic(db, dataUnitPic) {
  53. try {
  54. var valDetPic = "";
  55. for (var i = 0; i < dataUnitPic.length; i++) {
  56. if (i == dataUnitPic.length - 1) {
  57. valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}',
  58. null,'${dataUnitPic[i]["JENIS"]}',null,null)`);
  59. } else {
  60. valDetPic = valDetPic.concat(`('${dataUnitPic[i]["MESIN"]}','${dataUnitPic[i]["NO_URUT"]}',
  61. null,'${dataUnitPic[i]["JENIS"]}',null,null),`);
  62. }
  63. }
  64. var insertJenisBlobQuery = `
  65. Insert Into blobTable(MESIN,NO_URUT,BLOB_FILE,JENIS,LATITUDE,LONGITUDE) Values ${valDetPic};
  66. `;
  67. var insertBlobQuery = await sqliteFunc.runQuery(
  68. db,
  69. insertJenisBlobQuery
  70. );
  71. if (insertBlobQuery["STATUS"] == 0) throw insertBlobQuery["DATA"];
  72. } catch (e) {
  73. throw e;
  74. }
  75. }
  76. async function getValueTableByName(db, name) {
  77. var query = `
  78. select VALUE from
  79. valueTable
  80. where name = '${name}'
  81. LIMIT 1
  82. `;
  83. var selectInsertTable = await sqliteFunc.selectQuery(db, query);
  84. if (selectInsertTable["STATUS"] == 0)
  85. throw Error(selectInsertTable["DATA"]);
  86. var data = selectInsertTable["DATA"];
  87. var value = data[0]["VALUE"];
  88. return value;
  89. }
  90. async function getInsertedData(db) {
  91. try {
  92. var query = `
  93. select
  94. MESIN,
  95. TIMESTAMP
  96. from refTable
  97. where flag_insert = 'TRUE'
  98. `;
  99. var selectTimestampInsert = await sqliteFunc.selectQuery(db, query);
  100. if (selectTimestampInsert["STATUS"] == 0)
  101. throw selectTimestampInsert["DATA"];
  102. return selectTimestampInsert["DATA"];
  103. } catch (e) {
  104. throw e;
  105. }
  106. }
  107. async function getInsertedPic(db) {
  108. try {
  109. var query = `
  110. select
  111. BLOB_FILE,
  112. jenis,
  113. latitude,
  114. LONGITUDE,
  115. MESIN,
  116. NO_URUT
  117. from blobTable where
  118. blob_file IS NOT NULL
  119. `;
  120. var selectBlobTable = await sqliteFunc.selectQuery(db, query);
  121. if (selectBlobTable["STATUS"] == 0) throw selectBlobTable["DATA"];
  122. return selectBlobTable["DATA"];
  123. } catch (e) {
  124. throw e;
  125. }
  126. }
  127. async function unpackAndInsert(dbPath = null, company, cabangId) {
  128. let db;
  129. try {
  130. //var dbPath = path.join(__dirname , `../public/sqlite/upload/uploadDB.db`);
  131. if (!dbPath || !fs.existsSync(dbPath))
  132. throw "Database Not Exist. Kirim Ulang Data";
  133. db = new sqlite3.Database(
  134. dbPath,
  135. sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE
  136. );
  137. var stockTakingUnitId = await getValueTableByName(
  138. db,
  139. "STOCK_TAKING_UNIT_ID"
  140. );
  141. var insertedData = await getInsertedData(db);
  142. var insertedPic = await getInsertedPic(db);
  143. var stockTakingData = {
  144. company: company,
  145. cabangId: cabangId,
  146. stockTakingUnitId: stockTakingUnitId,
  147. };
  148. var result = await oracleModel.insertStockUnitData(
  149. stockTakingData,
  150. insertedData,
  151. insertedPic
  152. );
  153. if (db.open) {
  154. return new Promise(function (resolve, reject) {
  155. db.close(function (data) {
  156. fs.unlinkSync(dbPath);
  157. resolve({ STATUS: 1, DATA: result });
  158. });
  159. });
  160. } else {
  161. fs.unlinkSync(dbPath);
  162. return { STATUS: 1, DATA: result };
  163. }
  164. } catch (e) {
  165. console.log(e);
  166. if (db && db.open) {
  167. return new Promise(function (resolve, reject) {
  168. db.close(function (data) {
  169. resolve({ STATUS: 0, DATA: e.message || e });
  170. });
  171. });
  172. // db.close(function(data){
  173. // return {"STATUS" : 0 ,"DATA" : e};
  174. // })
  175. } else {
  176. return { STATUS: 0, DATA: e };
  177. }
  178. }
  179. }
  180. // var dbPath = path.join(__dirname , `../public/sqlite/testaplod3.db`);
  181. // unpackAndInsert(dbPath,'TBS','02');
  182. async function CreateDataCollection(company = "", cabangId = "") {
  183. var dbPath;
  184. let db;
  185. try {
  186. var checkStockTaking = await oracleModel.getActiveStockTakingByCabang(
  187. company,
  188. cabangId
  189. );
  190. var oracleData;
  191. if (checkStockTaking == undefined) {
  192. oracleData = await oracleModel.prepareStockCollection(
  193. company,
  194. cabangId
  195. );
  196. } else {
  197. let state = checkStockTaking["STATE"];
  198. if (state == "Submitted") {
  199. throw "Gagal dalam mengambil data, mohon menunggu review data yang disubmit sebelumnya.";
  200. }
  201. oracleData = await oracleModel.getActiveStockCollection(
  202. company,
  203. cabangId,
  204. checkStockTaking["STOCK_TAKING_UNIT_ID"]
  205. );
  206. }
  207. var stockTakingUnitId = oracleData["stockTakingUnitId"];
  208. var dataUnitCabang = oracleData["dataUnitCabang"];
  209. var dataUnitPic = oracleData["dataUnitPic"];
  210. var jenisFoto = oracleData["jenisFoto"];
  211. var dirPath = path.join(
  212. __dirname,
  213. `../public/sqlite/db/${company}/${cabangId}`
  214. );
  215. var resultDirPath = fs.mkdirSync(dirPath, { recursive: true });
  216. var d = new Date();
  217. var n = d.getTime();
  218. var dbName = `${n}.db`;
  219. dbPath = path.join(dirPath, dbName);
  220. db = new sqlite3.Database(
  221. dbPath,
  222. sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE
  223. );
  224. // Create Table Reference
  225. var refTableQuery = `CREATE TABLE refTable(
  226. ID INTEGER PRIMARY KEY AUTOINCREMENT,
  227. MESIN TEXT,
  228. TIPE TEXT,
  229. RANGKA TEXT,
  230. WARNA TEXT,
  231. KODE TEXT,
  232. TAHUN TEXT,
  233. STATE TEXT,
  234. TIMESTAMP TEXT DEFAULT NULL,
  235. FLAG_INSERT TEXT DEFAULT 'FALSE'
  236. )`;
  237. var createRefTable = await sqliteFunc.runQuery(db, refTableQuery);
  238. if (createRefTable["STATUS"] == 0) throw createRefTable;
  239. // var insertTableQuery = `CREATE TABLE insertTable(
  240. // ID INTEGER PRIMARY KEY AUTOINCREMENT,
  241. // MESIN TEXT,
  242. // TIMESTAMP TEXT
  243. // )`;
  244. // var createInsertTable = await sqliteFunc.runQuery(db,insertTableQuery);
  245. // if(createInsertTable["STATUS"] == 0) throw createInsertTable;
  246. var insertTableBlob = `CREATE TABLE blobTable(
  247. BLOB_ID INTEGER PRIMARY KEY AUTOINCREMENT,
  248. MESIN TEXT,
  249. NO_URUT TEXT,
  250. BLOB_FILE BLOB,
  251. JENIS TEXT,
  252. LATITUDE TEXT,
  253. LONGITUDE TEXT
  254. )`;
  255. var createBlobTable = await sqliteFunc.runQuery(db, insertTableBlob);
  256. if (createBlobTable["STATUS"] == 0) throw createInsertTable;
  257. var valueTableQuery = `
  258. CREATE TABLE valueTable(
  259. NAME TEXT,
  260. VALUE TEXT
  261. )
  262. `;
  263. var createValueTable = await sqliteFunc.runQuery(db, valueTableQuery);
  264. if (createValueTable["STATUS"] == 0) throw createValueTable;
  265. var queryValueTableInsert = `insert into valueTable(name,value) VALUES ('STOCK_TAKING_UNIT_ID',${stockTakingUnitId})`;
  266. var insertValueTableInsert = await sqliteFunc.runQuery(
  267. db,
  268. queryValueTableInsert
  269. );
  270. if (insertValueTableInsert["STATUS"] == 0) throw insertValueTableInsert;
  271. var jenisBlobQuery = `
  272. CREATE TABLE jenisBlobTable(
  273. NO_URUT TEXT,
  274. VALUE TEXT
  275. )
  276. `;
  277. var createJenisBlobTable = await sqliteFunc.runQuery(
  278. db,
  279. jenisBlobQuery
  280. );
  281. if (createJenisBlobTable["STATUS"] == 0) throw createJenisBlobTable;
  282. //----------- JENIS FOTO----------------------------------------------
  283. await insertJenisFoto(db, jenisFoto);
  284. if (dataUnitCabang.length > 0) {
  285. //----------- REF TABLE----------------------------------------------
  286. await insertRefTable(db, dataUnitCabang);
  287. //----------- UNIT DET PIC----------------------------------------------
  288. await insertUnitDetPic(db, dataUnitPic);
  289. }
  290. if (db.open) {
  291. return new Promise(function (resolve, reject) {
  292. db.close(function (data) {
  293. resolve({ STATUS: 1, DATA: dbPath });
  294. });
  295. });
  296. // db.close(function(data){
  297. // return {"STATUS" : 1, "DATA" : dbPath};
  298. // })
  299. } else {
  300. return { STATUS: 1, DATA: dbPath };
  301. }
  302. } catch (e) {
  303. if (db) {
  304. if (db.open) {
  305. return new Promise(function (resolve, reject) {
  306. db.close(function (data) {
  307. fs.unlinkSync(dbPath);
  308. resolve({ STATUS: 0, DATA: e });
  309. });
  310. });
  311. // db.close(function(data){
  312. // fs.unlinkSync(dbPath);
  313. // return {"STATUS" : 0 , "DATA": e};
  314. // });
  315. }
  316. } else {
  317. if (dbPath) {
  318. fs.unlinkSync(dbPath);
  319. }
  320. console.log(e);
  321. return { STATUS: 0, DATA: e };
  322. }
  323. }
  324. }
  325. //CreateDataCollection("TBS",'02');
  326. module.exports = {
  327. CreateDataCollection: CreateDataCollection,
  328. unpackAndInsert: unpackAndInsert,
  329. };