Node-server for unitstock app
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

505 rader
17 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. u.company,
  125. u.cabang_id,
  126. u.mesin,
  127. u.kode,
  128. u.rangka,
  129. u.tipe,
  130. u.warna,
  131. u.tahun,
  132. u.state,
  133. c.channel_name channel
  134. FROM ${owner}.unit_baru u
  135. left join ${owner}.CHANNEL c on
  136. u.channel_id = c.channel_id
  137. WHERE u.company = :COMPANY
  138. AND u.cabang_id = :CABANG_ID
  139. AND u.state IN ('OnTheWay','Ready','OnChannel','InRepair')
  140. ORDER BY u.tipe
  141. `;
  142. var params = { COMPANY: company, CABANG_ID: cabangId };
  143. var result = await oracleFunc.getQueryData(conn, query, params);
  144. return result;
  145. }
  146. async function submitStockTaking(company, stockTakingId) {
  147. let conn;
  148. try {
  149. conn = await oracleFunc.getConnection();
  150. var query = `
  151. BEGIN
  152. ${owner}.STOCK_TAKING_UNIT_API.Call_Submit(
  153. company_ => :COMPANY,
  154. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID);
  155. END;
  156. `;
  157. var params = { COMPANY: company, STOCK_TAKING_UNIT_ID: stockTakingId };
  158. console.log(params);
  159. await oracleFunc.runQueryData(conn, query, params);
  160. await oracleFunc.doCommit(conn);
  161. await oracleFunc.doRelease(conn);
  162. return { STATUS: 1, DATA: "Stock Taking Submit Completed " };
  163. } catch (e) {
  164. await oracleFunc.doRelease(conn);
  165. return { STATUS: 0, DATA: e };
  166. }
  167. }
  168. async function prepareStockCollection(company = "", cabangId = "") {
  169. let conn;
  170. try {
  171. conn = await oracleFunc.getConnection();
  172. var queryStockUnit = `
  173. BEGIN
  174. ${owner}.Stock_Taking_Unit_API.Create_Update_Record(
  175. company_ => :COMPANY,
  176. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  177. tgl_stock_taking_ => TO_DATE(:TGL_STOCK_TAKING,'DD-MM-YYYY'),
  178. tgl_start_ => TO_DATE(:TGL_START,'DD-MM-YYYY HH24:MI:SS'),
  179. tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS'),
  180. cabang_id_ => :CABANG_ID);
  181. END;`;
  182. var paramStockUnit = {
  183. COMPANY: company,
  184. STOCK_TAKING_UNIT_ID: { dir: oracledb.BIND_OUT },
  185. TGL_STOCK_TAKING: moment().format("DD-MM-YYYY"),
  186. TGL_START: moment().format("DD-MM-YYYY HH:mm:ss"),
  187. TGL_SELESAI: null,
  188. CABANG_ID: cabangId,
  189. };
  190. var resultStockUnit = await oracleFunc.runQueryData(
  191. conn,
  192. queryStockUnit,
  193. paramStockUnit
  194. );
  195. var stockTakingUnitId =
  196. resultStockUnit["outBinds"]["STOCK_TAKING_UNIT_ID"];
  197. var jenisFoto = [
  198. { NO_URUT: 1, JENIS: "NOMOR RANGKA" },
  199. { NO_URUT: 2, JENIS: "TAMPAK SAMPING" },
  200. ];
  201. var paramsUnitDet = [];
  202. var paramsUnitDetPic = [];
  203. var dataUnitCabang = await getDataUnit(conn, company, cabangId);
  204. for (var i = 0; i < dataUnitCabang.length; i++) {
  205. var temp = {
  206. COMPANY: company,
  207. STOCK_TAKING_ID: stockTakingUnitId,
  208. MESIN: dataUnitCabang[i]["MESIN"],
  209. FLAG_REJECT: "FALSE",
  210. KETERANGAN: null,
  211. };
  212. paramsUnitDet.push(temp);
  213. for (var j = 0; j < jenisFoto.length; j++) {
  214. var tempPic = {
  215. COMPANY: company,
  216. STOCK_TAKING_ID: stockTakingUnitId,
  217. MESIN: dataUnitCabang[i]["MESIN"],
  218. NO_URUT: jenisFoto[j]["NO_URUT"],
  219. JENIS: jenisFoto[j]["JENIS"],
  220. LATITUDE: null,
  221. LONGITUDE: null,
  222. LOB_ID: null,
  223. };
  224. paramsUnitDetPic.push(tempPic);
  225. }
  226. }
  227. var queryStockUnitDet = `
  228. BEGIN
  229. ${owner}.STOCK_TAKING_UNIT_DET_API.Create_Update_Record(
  230. company_ => :COMPANY,
  231. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  232. mesin_ => :MESIN,
  233. flag_reject_ => :FLAG_REJECT,
  234. keterangan_ => :KETERANGAN);
  235. END;
  236. `;
  237. await oracleFunc.runQueryMany(conn, queryStockUnitDet, paramsUnitDet);
  238. var queryStockUnitPic = `
  239. BEGIN
  240. ${owner}.STOCK_TAKING_UNIT_DET_PIC_API.Create_Update_Record(
  241. company_ => :COMPANY,
  242. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  243. mesin_ => :MESIN,
  244. no_urut_ => :NO_URUT,
  245. jenis_ => :JENIS,
  246. latitude_ => :LATITUDE,
  247. longitude_ => :LONGITUDE,
  248. lob_id_ => :LOB_ID
  249. );
  250. END;
  251. `;
  252. await oracleFunc.runQueryMany(
  253. conn,
  254. queryStockUnitPic,
  255. paramsUnitDetPic
  256. );
  257. await oracleFunc.doCommit(conn);
  258. await oracleFunc.doRelease(conn);
  259. return {
  260. stockTakingUnitId: stockTakingUnitId,
  261. dataUnitCabang: dataUnitCabang,
  262. dataUnitPic: paramsUnitDetPic,
  263. jenisFoto: jenisFoto,
  264. };
  265. } catch (e) {
  266. oracleFunc.doRollBack(conn);
  267. throw e;
  268. }
  269. }
  270. async function getActiveStockCollection(
  271. company = "",
  272. cabangId = "",
  273. stockTakingUnitId = ""
  274. ) {
  275. let conn;
  276. try {
  277. conn = await oracleFunc.getConnection();
  278. var queryDataUnit = `
  279. select
  280. a.company,
  281. a.stock_taking_unit_id,
  282. a.mesin,
  283. b.kode,
  284. b.rangka,
  285. b.tipe,
  286. b.warna,
  287. b.tahun,
  288. b.state,
  289. c.channel_name channel
  290. from ${owner}.stock_taking_unit_det a LEFT JOIN ${owner}.unit_baru b
  291. ON a.company = b.company
  292. and a.mesin = b.mesin
  293. and b.cabang_id = :CABANG_ID
  294. left join ${owner}.CHANNEL c on
  295. b.channel_id = c.channel_id
  296. where a.company = :COMPANY
  297. and a.stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  298. and a.mesin NOT IN (select mesin from ${owner}.stock_taking_unit_det_pic c
  299. where c.COMPANY = :COMPANY
  300. AND c.stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  301. AND lob_id IS NOT NULL
  302. )
  303. ORDER by tipe
  304. `;
  305. var paramsDataUnit = {
  306. COMPANY: company,
  307. CABANG_ID: cabangId,
  308. STOCK_TAKING_UNIT_ID: stockTakingUnitId,
  309. };
  310. var dataUnit = await oracleFunc.getQueryData(
  311. conn,
  312. queryDataUnit,
  313. paramsDataUnit
  314. );
  315. var queryDataUnitPic = `
  316. SELECT
  317. Company,
  318. stock_taking_unit_id,
  319. mesin,
  320. no_urut,
  321. jenis,
  322. latitude,
  323. longitude,
  324. lob_id
  325. from ${owner}.stock_taking_unit_det_pic
  326. where company = :COMPANY
  327. and stock_taking_unit_id = :STOCK_TAKING_UNIT_ID
  328. and lob_id IS NULL
  329. `;
  330. var paramsDataUnitPic = {
  331. COMPANY: company,
  332. STOCK_TAKING_UNIT_ID: stockTakingUnitId,
  333. };
  334. var dataUnitPic = await oracleFunc.getQueryData(
  335. conn,
  336. queryDataUnitPic,
  337. paramsDataUnitPic
  338. );
  339. var jenisFoto = [
  340. { NO_URUT: 1, JENIS: "NOMOR RANGKA" },
  341. { NO_URUT: 2, JENIS: "TAMPAK SAMPING" },
  342. ];
  343. await oracleFunc.doRelease(conn);
  344. return {
  345. stockTakingUnitId: stockTakingUnitId,
  346. dataUnitCabang: dataUnit,
  347. dataUnitPic: dataUnitPic,
  348. jenisFoto: jenisFoto,
  349. };
  350. } catch (e) {
  351. await oracleFunc.doRelease(conn);
  352. throw e;
  353. }
  354. }
  355. async function insertStockUnitData(stockTakingData, dataUnit, dataFoto,userId) {
  356. let conn;
  357. try {
  358. conn = await oracleFunc.getConnection();
  359. var queryUpdateTglSelesai = `
  360. BEGIN
  361. ${owner}.STOCK_TAKING_UNIT_API.Update_Tgl_Selesai(
  362. company_ => :COMPANY,
  363. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  364. tgl_selesai_ => TO_DATE(:TGL_SELESAI,'DD-MM-YYYY HH24:MI:SS'));
  365. END;
  366. `;
  367. var paramsUpdateTglSelesai = {
  368. COMPANY: stockTakingData["company"],
  369. STOCK_TAKING_UNIT_ID: stockTakingData["stockTakingUnitId"],
  370. TGL_SELESAI: moment().format("DD-MM-YYYY HH:mm:ss"),
  371. };
  372. await oracleFunc.runQueryData(
  373. conn,
  374. queryUpdateTglSelesai,
  375. paramsUpdateTglSelesai
  376. );
  377. if (dataUnit.length > 0) {
  378. var queryUpdateKeteranganDet = `
  379. BEGIN
  380. ${owner}.STOCK_TAKING_UNIT_DET_API.Update_Keterangan(
  381. company_ => :COMPANY,
  382. stock_taking_unit_id_ => :STOCK_TAKING_UNIT_ID,
  383. mesin_ => :MESIN,
  384. keterangan_ => :KETERANGAN);
  385. END;
  386. `;
  387. var paramsUpdateKeteranganDet = [];
  388. for (var i = 0; i < dataUnit.length; i++) {
  389. var temp = {
  390. COMPANY: stockTakingData["company"],
  391. STOCK_TAKING_UNIT_ID: stockTakingData["stockTakingUnitId"],
  392. MESIN: dataUnit[i]["MESIN"],
  393. KETERANGAN: `${dataUnit[i]["TIMESTAMP"]}${(userId!= null || userId=='')?' by '+ userId:''}`,
  394. };
  395. paramsUpdateKeteranganDet.push(temp);
  396. }
  397. await oracleFunc.runQueryMany(
  398. conn,
  399. queryUpdateKeteranganDet,
  400. paramsUpdateKeteranganDet
  401. );
  402. }
  403. if (dataFoto.length > 0) {
  404. var queryStockUnitPic = `
  405. BEGIN
  406. ${owner}.STOCK_TAKING_UNIT_UTILS_API.Create_Stock_Taking_Blob(
  407. company_ => :COMPANY,
  408. stock_taking_unit_id_ => :STOCK_TAKING_ID,
  409. mesin_ => :MESIN,
  410. no_urut_ => :NO_URUT,
  411. jenis_ => :JENIS,
  412. latitude_ => :LATITUDE,
  413. longitude_ => :LONGITUDE,
  414. blob_file_ => :BLOB_FILE
  415. );
  416. END;
  417. `;
  418. var paramsUnitDetPic = [];
  419. for (var j = 0; j < dataFoto.length; j++) {
  420. var temp = {
  421. COMPANY: stockTakingData["company"],
  422. STOCK_TAKING_ID: stockTakingData["stockTakingUnitId"],
  423. MESIN: dataFoto[j]["MESIN"],
  424. NO_URUT: dataFoto[j]["NO_URUT"],
  425. JENIS: dataFoto[j]["JENIS"],
  426. LATITUDE: dataFoto[j]["LATITUDE"],
  427. LONGITUDE: dataFoto[j]["LONGITUDE"],
  428. BLOB_FILE: dataFoto[j]["BLOB_FILE"],
  429. };
  430. paramsUnitDetPic.push(temp);
  431. }
  432. await oracleFunc.runQueryMany(
  433. conn,
  434. queryStockUnitPic,
  435. paramsUnitDetPic
  436. );
  437. }
  438. await oracleFunc.doCommit(conn);
  439. await oracleFunc.doRelease(conn);
  440. return "Data has been processed";
  441. } catch (e) {
  442. oracleFunc.doRollBack(conn);
  443. throw e;
  444. }
  445. }
  446. module.exports = {
  447. getDataCabang: getDataCabang,
  448. getDataUnit: getDataUnit,
  449. getDataUser: getDataUser,
  450. prepareStockCollection: prepareStockCollection,
  451. insertStockUnitData: insertStockUnitData,
  452. getActiveStockTakingByCabang: getActiveStockTakingByCabang,
  453. getActiveStockCollection: getActiveStockCollection,
  454. getDataCabangByUser: getDataCabangByUser,
  455. submitStockTaking: submitStockTaking,
  456. getStateStockTaking: getStateStockTaking,
  457. };