Node-server for unitstock app
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

499 linhas
16 KiB

  1. var oracleFunc = require("../util/db_oracle.js");
  2. const oracledb = require("oracledb");
  3. const fs = require("fs");
  4. var moment = require("moment");
  5. var owner = "TBS";
  6. async function getDataCabangByUser(company, user) {
  7. let conn;
  8. try {
  9. conn = await oracleFunc.getConnection();
  10. var query = `
  11. SELECT NAMA_CABANG AS DISPLAY_VALUE, CABANG_ID AS RETURN_VALUE
  12. FROM ${owner}.CABANG
  13. WHERE COMPANY = :COMPANY
  14. AND ${owner}.User_Per_Cabang_API.Is_User_Available(company, cabang_id, :USERNAME) = 1
  15. ORDER BY NAMA_CABANG
  16. `;
  17. var params = { COMPANY: company, USERNAME: user };
  18. console.log(params);
  19. var result = await oracleFunc.getQueryData(conn, query, params);
  20. await oracleFunc.doRelease(conn);
  21. return { STATUS: 1, DATA: result };
  22. } catch (e) {
  23. await oracleFunc.doRelease(conn);
  24. return { STATUS: 0, DATA: e };
  25. }
  26. }
  27. async function getDataUser(user = "", pass = "") {
  28. let conn;
  29. try {
  30. conn = await oracleFunc.getConnection();
  31. var checkView2 = `
  32. select ${owner}.UTILS_API.Is_View_Available('STOCK_TAKING_UNIT_MOB_APP', :USERNAME) LOGIN_STATUS from dual
  33. `;
  34. var paramView = { USERNAME: user };
  35. var resultView = await oracleFunc.getQueryData(
  36. conn,
  37. checkView2,
  38. paramView
  39. );
  40. if (resultView[0]["LOGIN_STATUS"] == "FALSE")
  41. throw "Username or password incorrect !";
  42. var checkQuery = `
  43. select ${owner}.Mobile_APP_Utils_API.Sales_Mobile_Auth(:USERNAME, :PASSWORD) data from dual
  44. `;
  45. var params = { USERNAME: user, PASSWORD: pass };
  46. var result = await oracleFunc.getQueryData(conn, checkQuery, params);
  47. var dataUser = JSON.parse(result[0]["DATA"]);
  48. if (dataUser["status"] == "ERR") throw dataUser["info"];
  49. await oracleFunc.doRelease(conn);
  50. return {
  51. STATUS: 1,
  52. DATA: {
  53. COMPANY: dataUser["company"],
  54. USER: dataUser["login_db_user"],
  55. },
  56. };
  57. } catch (e) {
  58. await oracleFunc.doRelease(conn);
  59. return { STATUS: 0, DATA: e };
  60. }
  61. }
  62. async function getDataCabang(company = "%", cabangId = "%") {
  63. var query = `select
  64. company,
  65. cabang_id,
  66. nama_cabang,
  67. latitude,
  68. longitude
  69. from ${owner}.cabang
  70. where company like :COMPANY
  71. and cabang_id like :CABANG_ID`;
  72. var params = { COMPANY: company, CABANG_ID: cabangId };
  73. var result = await oracleFunc.getData(query, params);
  74. return result;
  75. }
  76. async function getStateStockTaking(company, stockTakingId) {
  77. let conn;
  78. try {
  79. conn = await oracleFunc.getConnection();
  80. var query = `
  81. select ${owner}.Stock_Taking_Unit_API.Get_Status_Stock_Taking(
  82. company_ => :COMPANY,
  83. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID) state from dual
  84. `;
  85. var params = { COMPANY: company, STOCK_TAKING_UNIT_ID: stockTakingId };
  86. var result = await oracleFunc.getQueryData(conn, query, params);
  87. await oracleFunc.doRelease(conn);
  88. return { STATUS: 1, DATA: result[0] };
  89. } catch (e) {
  90. await oracleFunc.doRelease(conn);
  91. return { STATUS: 0, DATA: e };
  92. }
  93. }
  94. async function getActiveStockTakingByCabang(company, cabangId) {
  95. let conn;
  96. try {
  97. conn = await oracleFunc.getConnection();
  98. var query = `
  99. SELECT *
  100. FROM (
  101. SELECT
  102. stock_taking_unit_id,
  103. state
  104. from ${owner}.stock_taking_unit
  105. where company = :COMPANY
  106. and cabang_id = :CABANG_ID
  107. and state IN ('Open','Submitted')
  108. order by tgl_start desc
  109. )
  110. WHERE rownum = 1
  111. `;
  112. var paramsQuery = { COMPANY: company, CABANG_ID: cabangId };
  113. var result = await oracleFunc.getQueryData(conn, query, paramsQuery);
  114. var a = result[0];
  115. await oracleFunc.doRelease(conn);
  116. return a;
  117. } catch (e) {
  118. await oracleFunc.doRelease(conn);
  119. throw e;
  120. }
  121. }
  122. async function getDataUnit(conn, company, cabangId) {
  123. var query = `SELECT
  124. company,
  125. cabang_id,
  126. mesin,
  127. kode,
  128. rangka,
  129. tipe,
  130. warna,
  131. tahun,
  132. state
  133. FROM ${owner}.unit_baru
  134. WHERE company = :COMPANY
  135. AND cabang_id = :CABANG_ID
  136. AND state IN ('Ready','OnChannel')
  137. ORDER BY tipe
  138. `;
  139. var params = { COMPANY: company, CABANG_ID: cabangId };
  140. var result = await oracleFunc.getQueryData(conn, query, params);
  141. return result;
  142. }
  143. async function submitStockTaking(company, stockTakingId) {
  144. let conn;
  145. try {
  146. conn = await oracleFunc.getConnection();
  147. var query = `
  148. BEGIN
  149. ${owner}.STOCK_TAKING_UNIT_API.Call_Submit(
  150. company_ => :COMPANY,
  151. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID);
  152. END;
  153. `;
  154. var params = { COMPANY: company, STOCK_TAKING_UNIT_ID: stockTakingId };
  155. console.log(params);
  156. await oracleFunc.runQueryData(conn, query, params);
  157. await oracleFunc.doCommit(conn);
  158. await oracleFunc.doRelease(conn);
  159. return { STATUS: 1, DATA: "Stock Taking Submit Completed " };
  160. } catch (e) {
  161. await oracleFunc.doRelease(conn);
  162. return { STATUS: 0, DATA: e };
  163. }
  164. }
  165. async function prepareStockCollection(company = "", cabangId = "") {
  166. let conn;
  167. try {
  168. conn = await oracleFunc.getConnection();
  169. var queryStockUnit = `
  170. BEGIN
  171. ${owner}.Stock_Taking_Unit_API.Create_Update_Record(
  172. company_ => :COMPANY,
  173. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  174. tgl_stock_taking_ => TO_DATE(:TGL_STOCK_TAKING,'DD-MM-YYYY'),
  175. tgl_start_ => TO_DATE(:TGL_START,'DD-MM-YYYY HH24:MI:SS'),
  176. tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS'),
  177. cabang_id_ => :CABANG_ID);
  178. END;`;
  179. var paramStockUnit = {
  180. COMPANY: company,
  181. STOCK_TAKING_UNIT_ID: { dir: oracledb.BIND_OUT },
  182. TGL_STOCK_TAKING: moment().format("DD-MM-YYYY"),
  183. TGL_START: moment().format("DD-MM-YYYY HH:mm:ss"),
  184. TGL_SELESAI: null,
  185. CABANG_ID: cabangId,
  186. };
  187. var resultStockUnit = await oracleFunc.runQueryData(
  188. conn,
  189. queryStockUnit,
  190. paramStockUnit
  191. );
  192. var stockTakingUnitId =
  193. resultStockUnit["outBinds"]["STOCK_TAKING_UNIT_ID"];
  194. var jenisFoto = [
  195. { NO_URUT: 1, JENIS: "NOMOR RANGKA" },
  196. { NO_URUT: 2, JENIS: "TAMPAK SAMPING" },
  197. ];
  198. var paramsUnitDet = [];
  199. var paramsUnitDetPic = [];
  200. var dataUnitCabang = await getDataUnit(conn, company, cabangId);
  201. for (var i = 0; i < dataUnitCabang.length; i++) {
  202. var temp = {
  203. COMPANY: company,
  204. STOCK_TAKING_ID: stockTakingUnitId,
  205. MESIN: dataUnitCabang[i]["MESIN"],
  206. FLAG_REJECT: "FALSE",
  207. KETERANGAN: null,
  208. };
  209. paramsUnitDet.push(temp);
  210. for (var j = 0; j < jenisFoto.length; j++) {
  211. var tempPic = {
  212. COMPANY: company,
  213. STOCK_TAKING_ID: stockTakingUnitId,
  214. MESIN: dataUnitCabang[i]["MESIN"],
  215. NO_URUT: jenisFoto[j]["NO_URUT"],
  216. JENIS: jenisFoto[j]["JENIS"],
  217. LATITUDE: null,
  218. LONGITUDE: null,
  219. LOB_ID: null,
  220. };
  221. paramsUnitDetPic.push(tempPic);
  222. }
  223. }
  224. var queryStockUnitDet = `
  225. BEGIN
  226. ${owner}.STOCK_TAKING_UNIT_DET_API.Create_Update_Record(
  227. company_ => :COMPANY,
  228. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  229. mesin_ => :MESIN,
  230. flag_reject_ => :FLAG_REJECT,
  231. keterangan_ => :KETERANGAN);
  232. END;
  233. `;
  234. await oracleFunc.runQueryMany(conn, queryStockUnitDet, paramsUnitDet);
  235. var queryStockUnitPic = `
  236. BEGIN
  237. ${owner}.STOCK_TAKING_UNIT_DET_PIC_API.Create_Update_Record(
  238. company_ => :COMPANY,
  239. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  240. mesin_ => :MESIN,
  241. no_urut_ => :NO_URUT,
  242. jenis_ => :JENIS,
  243. latitude_ => :LATITUDE,
  244. longitude_ => :LONGITUDE,
  245. lob_id_ => :LOB_ID
  246. );
  247. END;
  248. `;
  249. await oracleFunc.runQueryMany(
  250. conn,
  251. queryStockUnitPic,
  252. paramsUnitDetPic
  253. );
  254. await oracleFunc.doCommit(conn);
  255. await oracleFunc.doRelease(conn);
  256. return {
  257. stockTakingUnitId: stockTakingUnitId,
  258. dataUnitCabang: dataUnitCabang,
  259. dataUnitPic: paramsUnitDetPic,
  260. jenisFoto: jenisFoto,
  261. };
  262. } catch (e) {
  263. oracleFunc.doRollBack(conn);
  264. throw e;
  265. }
  266. }
  267. async function getActiveStockCollection(
  268. company = "",
  269. cabangId = "",
  270. stockTakingUnitId = ""
  271. ) {
  272. let conn;
  273. try {
  274. conn = await oracleFunc.getConnection();
  275. var queryDataUnit = `
  276. select
  277. a.company,
  278. a.stock_taking_unit_id,
  279. a.mesin,
  280. b.kode,
  281. b.rangka,
  282. b.tipe,
  283. b.warna,
  284. b.tahun,
  285. b.state
  286. from ${owner}.stock_taking_unit_det a LEFT JOIN ${owner}.unit_baru b
  287. ON a.company = b.company
  288. and a.mesin = b.mesin
  289. and b.cabang_id = :CABANG_ID
  290. where a.company = :COMPANY
  291. and a.stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  292. and a.mesin NOT IN (select mesin from ${owner}.stock_taking_unit_det_pic c
  293. where c.COMPANY = :COMPANY
  294. AND c.stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  295. AND lob_id IS NOT NULL
  296. )
  297. ORDER by tipe
  298. `;
  299. var paramsDataUnit = {
  300. COMPANY: company,
  301. CABANG_ID: cabangId,
  302. STOCK_TAKING_UNIT_ID: stockTakingUnitId,
  303. };
  304. var dataUnit = await oracleFunc.getQueryData(
  305. conn,
  306. queryDataUnit,
  307. paramsDataUnit
  308. );
  309. var queryDataUnitPic = `
  310. SELECT
  311. Company,
  312. stock_taking_unit_id,
  313. mesin,
  314. no_urut,
  315. jenis,
  316. latitude,
  317. longitude,
  318. lob_id
  319. from ${owner}.stock_taking_unit_det_pic
  320. where company = :COMPANY
  321. and stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  322. and lob_id IS NULL
  323. `;
  324. var paramsDataUnitPic = {
  325. COMPANY: company,
  326. STOCK_TAKING_UNIT_ID: stockTakingUnitId,
  327. };
  328. var dataUnitPic = await oracleFunc.getQueryData(
  329. conn,
  330. queryDataUnitPic,
  331. paramsDataUnitPic
  332. );
  333. var jenisFoto = [
  334. { NO_URUT: 1, JENIS: "NOMOR RANGKA" },
  335. { NO_URUT: 2, JENIS: "TAMPAK SAMPING" },
  336. ];
  337. await oracleFunc.doRelease(conn);
  338. return {
  339. stockTakingUnitId: stockTakingUnitId,
  340. dataUnitCabang: dataUnit,
  341. dataUnitPic: dataUnitPic,
  342. jenisFoto: jenisFoto,
  343. };
  344. } catch (e) {
  345. await oracleFunc.doRelease(conn);
  346. throw e;
  347. }
  348. }
  349. async function insertStockUnitData(stockTakingData, dataUnit, dataFoto) {
  350. let conn;
  351. try {
  352. conn = await oracleFunc.getConnection();
  353. var queryUpdateTglSelesai = `
  354. BEGIN
  355. ${owner}.STOCK_TAKING_UNIT_API.Update_Tgl_Selesai(
  356. company_ => :COMPANY,
  357. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  358. tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS'));
  359. END;
  360. `;
  361. var paramsUpdateTglSelesai = {
  362. COMPANY: stockTakingData["company"],
  363. STOCK_TAKING_UNIT_ID: stockTakingData["stockTakingUnitId"],
  364. TGL_SELESAI: moment().format("DD-MM-YYYY HH:mm:ss"),
  365. };
  366. await oracleFunc.runQueryData(
  367. conn,
  368. queryUpdateTglSelesai,
  369. paramsUpdateTglSelesai
  370. );
  371. if (dataUnit.length > 0) {
  372. var queryUpdateKeteranganDet = `
  373. BEGIN
  374. ${owner}.STOCK_TAKING_UNIT_DET_API.Update_Keterangan(
  375. company_ => :COMPANY,
  376. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  377. mesin_ => :MESIN,
  378. keterangan_ => :KETERANGAN);
  379. END;
  380. `;
  381. var paramsUpdateKeteranganDet = [];
  382. for (var i = 0; i < dataUnit.length; i++) {
  383. var temp = {
  384. COMPANY: stockTakingData["company"],
  385. STOCK_TAKING_UNIT_ID: stockTakingData["stockTakingUnitId"],
  386. MESIN: dataUnit[i]["MESIN"],
  387. KETERANGAN: dataUnit[i]["TIMESTAMP"],
  388. };
  389. paramsUpdateKeteranganDet.push(temp);
  390. }
  391. await oracleFunc.runQueryMany(
  392. conn,
  393. queryUpdateKeteranganDet,
  394. paramsUpdateKeteranganDet
  395. );
  396. }
  397. if (dataFoto.length > 0) {
  398. var queryStockUnitPic = `
  399. BEGIN
  400. ${owner}.STOCK_TAKING_UNIT_UTILS_API.Create_Stock_Taking_Blob(
  401. company_ => :COMPANY,
  402. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  403. mesin_ => :MESIN,
  404. no_urut_ => :NO_URUT,
  405. jenis_ => :JENIS,
  406. latitude_ => :LATITUDE,
  407. longitude_ => :LONGITUDE,
  408. blob_file_ => :BLOB_FILE
  409. );
  410. END;
  411. `;
  412. var paramsUnitDetPic = [];
  413. for (var j = 0; j < dataFoto.length; j++) {
  414. var temp = {
  415. COMPANY: stockTakingData["company"],
  416. STOCK_TAKING_ID: stockTakingData["stockTakingUnitId"],
  417. MESIN: dataFoto[j]["MESIN"],
  418. NO_URUT: dataFoto[j]["NO_URUT"],
  419. JENIS: dataFoto[j]["JENIS"],
  420. LATITUDE: dataFoto[j]["LATITUDE"],
  421. LONGITUDE: dataFoto[j]["LONGITUDE"],
  422. BLOB_FILE: dataFoto[j]["BLOB_FILE"],
  423. };
  424. paramsUnitDetPic.push(temp);
  425. }
  426. await oracleFunc.runQueryMany(
  427. conn,
  428. queryStockUnitPic,
  429. paramsUnitDetPic
  430. );
  431. }
  432. await oracleFunc.doCommit(conn);
  433. await oracleFunc.doRelease(conn);
  434. return "Data has been processed";
  435. } catch (e) {
  436. oracleFunc.doRollBack(conn);
  437. throw e;
  438. }
  439. }
  440. module.exports = {
  441. getDataCabang: getDataCabang,
  442. getDataUnit: getDataUnit,
  443. getDataUser: getDataUser,
  444. prepareStockCollection: prepareStockCollection,
  445. insertStockUnitData: insertStockUnitData,
  446. getActiveStockTakingByCabang: getActiveStockTakingByCabang,
  447. getActiveStockCollection: getActiveStockCollection,
  448. getDataCabangByUser: getDataCabangByUser,
  449. submitStockTaking: submitStockTaking,
  450. getStateStockTaking: getStateStockTaking,
  451. };