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.
 
 

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