Node-server for unitstock app
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

498 lines
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. `;
  298. var paramsDataUnit = {
  299. COMPANY: company,
  300. CABANG_ID: cabangId,
  301. STOCK_TAKING_UNIT_ID: stockTakingUnitId,
  302. };
  303. var dataUnit = await oracleFunc.getQueryData(
  304. conn,
  305. queryDataUnit,
  306. paramsDataUnit
  307. );
  308. var queryDataUnitPic = `
  309. SELECT
  310. Company,
  311. stock_taking_unit_id,
  312. mesin,
  313. no_urut,
  314. jenis,
  315. latitude,
  316. longitude,
  317. lob_id
  318. from ${owner}.stock_taking_unit_det_pic
  319. where company = :COMPANY
  320. and stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  321. and lob_id IS NULL
  322. `;
  323. var paramsDataUnitPic = {
  324. COMPANY: company,
  325. STOCK_TAKING_UNIT_ID: stockTakingUnitId,
  326. };
  327. var dataUnitPic = await oracleFunc.getQueryData(
  328. conn,
  329. queryDataUnitPic,
  330. paramsDataUnitPic
  331. );
  332. var jenisFoto = [
  333. { NO_URUT: 1, JENIS: "NOMOR RANGKA" },
  334. { NO_URUT: 2, JENIS: "TAMPAK SAMPING" },
  335. ];
  336. await oracleFunc.doRelease(conn);
  337. return {
  338. stockTakingUnitId: stockTakingUnitId,
  339. dataUnitCabang: dataUnit,
  340. dataUnitPic: dataUnitPic,
  341. jenisFoto: jenisFoto,
  342. };
  343. } catch (e) {
  344. await oracleFunc.doRelease(conn);
  345. throw e;
  346. }
  347. }
  348. async function insertStockUnitData(stockTakingData, dataUnit, dataFoto) {
  349. let conn;
  350. try {
  351. conn = await oracleFunc.getConnection();
  352. var queryUpdateTglSelesai = `
  353. BEGIN
  354. ${owner}.STOCK_TAKING_UNIT_API.Update_Tgl_Selesai(
  355. company_ => :COMPANY,
  356. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  357. tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS'));
  358. END;
  359. `;
  360. var paramsUpdateTglSelesai = {
  361. COMPANY: stockTakingData["company"],
  362. STOCK_TAKING_UNIT_ID: stockTakingData["stockTakingUnitId"],
  363. TGL_SELESAI: moment().format("DD-MM-YYYY HH:mm:ss"),
  364. };
  365. await oracleFunc.runQueryData(
  366. conn,
  367. queryUpdateTglSelesai,
  368. paramsUpdateTglSelesai
  369. );
  370. if (dataUnit.length > 0) {
  371. var queryUpdateKeteranganDet = `
  372. BEGIN
  373. ${owner}.STOCK_TAKING_UNIT_DET_API.Update_Keterangan(
  374. company_ => :COMPANY,
  375. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  376. mesin_ => :MESIN,
  377. keterangan_ => :KETERANGAN);
  378. END;
  379. `;
  380. var paramsUpdateKeteranganDet = [];
  381. for (var i = 0; i < dataUnit.length; i++) {
  382. var temp = {
  383. COMPANY: stockTakingData["company"],
  384. STOCK_TAKING_UNIT_ID: stockTakingData["stockTakingUnitId"],
  385. MESIN: dataUnit[i]["MESIN"],
  386. KETERANGAN: dataUnit[i]["TIMESTAMP"],
  387. };
  388. paramsUpdateKeteranganDet.push(temp);
  389. }
  390. await oracleFunc.runQueryMany(
  391. conn,
  392. queryUpdateKeteranganDet,
  393. paramsUpdateKeteranganDet
  394. );
  395. }
  396. if (dataFoto.length > 0) {
  397. var queryStockUnitPic = `
  398. BEGIN
  399. ${owner}.STOCK_TAKING_UNIT_UTILS_API.Create_Stock_Taking_Blob(
  400. company_ => :COMPANY,
  401. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  402. mesin_ => :MESIN,
  403. no_urut_ => :NO_URUT,
  404. jenis_ => :JENIS,
  405. latitude_ => :LATITUDE,
  406. longitude_ => :LONGITUDE,
  407. blob_file_ => :BLOB_FILE
  408. );
  409. END;
  410. `;
  411. var paramsUnitDetPic = [];
  412. for (var j = 0; j < dataFoto.length; j++) {
  413. var temp = {
  414. COMPANY: stockTakingData["company"],
  415. STOCK_TAKING_ID: stockTakingData["stockTakingUnitId"],
  416. MESIN: dataFoto[j]["MESIN"],
  417. NO_URUT: dataFoto[j]["NO_URUT"],
  418. JENIS: dataFoto[j]["JENIS"],
  419. LATITUDE: dataFoto[j]["LATITUDE"],
  420. LONGITUDE: dataFoto[j]["LONGITUDE"],
  421. BLOB_FILE: dataFoto[j]["BLOB_FILE"],
  422. };
  423. paramsUnitDetPic.push(temp);
  424. }
  425. await oracleFunc.runQueryMany(
  426. conn,
  427. queryStockUnitPic,
  428. paramsUnitDetPic
  429. );
  430. }
  431. await oracleFunc.doCommit(conn);
  432. await oracleFunc.doRelease(conn);
  433. return "Data has been processed";
  434. } catch (e) {
  435. oracleFunc.doRollBack(conn);
  436. throw e;
  437. }
  438. }
  439. module.exports = {
  440. getDataCabang: getDataCabang,
  441. getDataUnit: getDataUnit,
  442. getDataUser: getDataUser,
  443. prepareStockCollection: prepareStockCollection,
  444. insertStockUnitData: insertStockUnitData,
  445. getActiveStockTakingByCabang: getActiveStockTakingByCabang,
  446. getActiveStockCollection: getActiveStockCollection,
  447. getDataCabangByUser: getDataCabangByUser,
  448. submitStockTaking: submitStockTaking,
  449. getStateStockTaking: getStateStockTaking,
  450. };