ITP_STOCKMNG01010.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. /********************************************************
  2. --------------------------------------------------------
  3. - Object 목록 -
  4. --------------------------------------------------------
  5. * const gridColModel = {} : 화면 Grid Object *
  6. * let pageObj = {} : 화면공통 Object *
  7. * let listObj = {} : 목록화면 Object *
  8. *******************************************************/
  9. /*화면 변수*/
  10. const STOCKMNG01010_GRID_ID = '#ITP_STOCKMNG01010_jqGrid';
  11. const STOCKMNG01010_GRID_LIST = '#ITP_STOCKMNG01010_jqGrid_list';
  12. const STOCKMNG01010_GRID_PAGER = '#ITP_STOCKMNG01010_jqGridPager';
  13. const STOCKMNG01010_GRID_EMPTY = '#ITP_STOCKMNG01010_jqGridEmpty';
  14. let ITP_FORM_STOCKMNG01010_DETAIL_IS_DUPLICATE = false;
  15. let ITP_FORM_STOCKMNG01010_DETAIL_IS_WRITING = false;
  16. let STOCKMNG01010_DETAIL_GRID_LAST_ROW_ID;
  17. /*API URL*/
  18. let STOCK_MNG_DETAIL_GRID_LIST = '/api/stock/mng/detail-grid-list';
  19. let WHS_MNG_DETAIL_GRID_LIST = '/api/whs/mng/detail-grid-list';
  20. let WHS_MNG_LOCATION_GRID_LIST = '/api/whs/mng/location-grid-list';
  21. let API_ITEM_CLASS_LEVEL = '/api/item/class-level-list'; //품목분류 level 검색
  22. /*화면 Grid ColModel*/
  23. const gridColModel = {
  24. list: [
  25. {
  26. index: 'BRAND_ID', name: 'brandId',
  27. label: "브랜드ID",
  28. width: '0', fixed: false, align: 'center',
  29. sortable: false, hidden: true
  30. },
  31. {
  32. index: 'LOCATION', name: 'location',
  33. label: "로케이션",
  34. width: '0', fixed: false, align: 'center',
  35. sortable: false, hidden: true
  36. },
  37. {
  38. index: 'BRAND_NM', name: 'brandNm',
  39. label: ITP_MSG_LOCALE.label.brandNm, //브랜드
  40. width: '10', fixed: false, align: 'center',
  41. sortable: false, hidden: false
  42. },
  43. {
  44. index: 'STORE_NM', name: 'storeNm',
  45. label: "매장명",
  46. width: '10', fixed: false, align: 'center',
  47. sortable: false, hidden: false
  48. },
  49. {
  50. index: 'WHS_ID', name: 'whsId',
  51. label: "창고번호",
  52. width: '8', fixed: false, align: 'center',
  53. sortable: false, hidden: false
  54. },
  55. {
  56. index: 'WHS_NM', name: 'whsNm',
  57. label: "창고명",
  58. width: '13', fixed: false, align: 'center',
  59. sortable: false, hidden: false
  60. },
  61. {
  62. index: 'LOCATION_NM', name: 'locationNm',
  63. label: "Location명",
  64. width: '10', fixed: false, align: 'center',
  65. sortable: false, hidden: false
  66. },
  67. {
  68. index: 'ITEM_ID', name: 'itemId',
  69. label: "품목번호",
  70. width: '11', fixed: false, align: 'center',
  71. sortable: false, hidden: false
  72. },
  73. {
  74. index: 'ITEM_NM', name: 'itemNm',
  75. label: "품목명",
  76. width: '10', fixed: false, align: 'center',
  77. sortable: false, hidden: false
  78. },
  79. {
  80. index: 'UNIT', name: 'unit',
  81. label: "단위",
  82. width: '7', fixed: false, align: 'center',
  83. sortable: false, hidden: false
  84. },
  85. {
  86. index: 'STCK_QTY', name: 'stckQty',
  87. label: "현재고수량",
  88. width: '8', fixed: false, align: 'center',
  89. sortable: false, hidden: false
  90. },
  91. {
  92. index: 'PRP_STCK_QTY', name: 'prpStckQty',
  93. label: "적정재고수량",
  94. width: '8', fixed: false, align: 'center',
  95. sortable: false, hidden: false
  96. },
  97. {
  98. index: 'SFT_STCK_RT', name: 'sftStckRt',
  99. label: "안전재고비율(%)",
  100. width: '10', fixed: false, align: 'center',
  101. sortable: false, hidden: false
  102. },
  103. {
  104. index: 'CUR_STCK_RT', name: 'curStckRt',
  105. label: "현재고비율(%)",
  106. width: '10', fixed: false, align: 'center',
  107. sortable: false, hidden: false
  108. }
  109. ]
  110. };
  111. require(['config'], function() {
  112. require([
  113. ], function($) {
  114. pageObj.init();
  115. });
  116. });
  117. /*화면공통 Object*/
  118. let pageObj = {
  119. init: function () {
  120. this.brandInfo = JSON.parse(sessionStorage.getItem('itp_manage_brand_info'));
  121. this.ui.init();
  122. this.event.init();
  123. },
  124. brandInfo: {},
  125. ui: {
  126. init: function () {
  127. this.view();
  128. this.grid();
  129. this.ready();
  130. },
  131. view: function() {
  132. // 버튼 권한설정
  133. fn_proc_btn_auth('STOCKMNG01010');
  134. // 브랜드ID 지정
  135. var data = JSON.parse(sessionStorage.getItem('itp_manage_brand_info'));
  136. $('#ITP_FORM_STOCKMNG01010_SEARCH_BRAND_ID').val(data.brandId);
  137. pageObj.fnWhsList(function() {
  138. pageObj.fnLocationList();
  139. }); // 창고리스트
  140. // 공통코드 표시
  141. // fn_make_select(CODE_LIST, 'WHS_DVSN', 'ITP_FORM_STOCKMNG01010_WHS_DVSN');
  142. // 조회일자 지정
  143. $('#ITP_TAB_STOCKMNG01010 .input-group.date').datepicker(ITP_DATE_LANGUAGE);
  144. // 분류
  145. itemClassLevel.list(1, true);
  146. },
  147. grid: function() {
  148. itp_fn_jqgrid_resize(STOCKMNG01010_GRID_ID, STOCKMNG01010_GRID_LIST, 'lg');
  149. listObj.empty.init();
  150. itp_fn_fire_window_resize();
  151. },
  152. ready: function() {
  153. listObj.init();
  154. }
  155. },
  156. event: {
  157. init: function () {
  158. this.button();
  159. this.change();
  160. },
  161. button: function () {
  162. // 버튼 클릭 이벤트
  163. $('button').each(function() {
  164. var id = $(this).attr('id');
  165. $(this).on('click', function() {
  166. switch (id) {
  167. case 'ITP_BTN_STOCKMNG01010_SRH' : listObj.button.search(); break; // 조회 버튼
  168. case 'ITP_BTN_STOCKMNG01010_ADDROW' : listObj.button.clickStockProc(); break; // 재고처리 버튼
  169. case 'ITP_BTN_STOCKMNG01010_DELROW' : listObj.button.clickStockHist(); break; // 재고이력 버튼
  170. }
  171. });
  172. });
  173. $('body').on('click', function(e) {
  174. });
  175. },
  176. change: function () {
  177. // 창고 변경
  178. $('#ITP_FORM_STOCKMNG01010_SEARCH_WHS_ID').on('change', function() {
  179. pageObj.fnLocationList(function() {
  180. listObj.button.search(); // 조회
  181. }); // 로케이션 리스트
  182. });
  183. $('#ITP_FORM_STOCKMNG01010_SEARCH_LOCATION').on('change', function() {
  184. listObj.button.search(); // 조회
  185. });
  186. }
  187. },
  188. switchScreen: function(mode) {
  189. if(mode == 'LIST') { // 목록
  190. fn_show_btn_auth('#ITP_BTN_STOCKMNG01010_SRH');
  191. $('#ITP_AJAX_STOCKMNG01010_LIST_CONTAINER').show();
  192. }
  193. },
  194. fnWhsList: function(fnCall) {
  195. const brandIdVal = $('#ITP_FORM_STOCKMNG01010_SEARCH_BRAND_ID').val();
  196. const param = {sbrandId: brandIdVal, pagingYn: false};
  197. fn_ajax_call(WHS_MNG_DETAIL_GRID_LIST, JSON.stringify(param), function(result) {
  198. fn_make_select_whs(result.gridRows, 'ITP_FORM_STOCKMNG01010_SEARCH_WHS_ID');
  199. if (fnCall !== undefined || typeof fnCall !== 'undefined') fnCall();
  200. }, 'POST');
  201. },
  202. fnLocationList: function(fnCall) {
  203. const brandIdVal = $('#ITP_FORM_STOCKMNG01010_SEARCH_BRAND_ID').val();
  204. const whsIdVal = $('#ITP_FORM_STOCKMNG01010_SEARCH_WHS_ID').val();
  205. const param = {brandId: brandIdVal, whsId: whsIdVal, pagingYn: false};
  206. fn_ajax_call(WHS_MNG_LOCATION_GRID_LIST, JSON.stringify(param), function(result) {
  207. fn_make_select_location(result.gridRows, 'ITP_FORM_STOCKMNG01010_SEARCH_LOCATION');
  208. if (fnCall !== undefined || typeof fnCall !== 'undefined') fnCall();
  209. }, 'POST');
  210. }
  211. };
  212. /*목록화면 Object*/
  213. let listObj = {
  214. init: function () {
  215. this.form();
  216. this.grid.init();
  217. },
  218. itp_STOCKMNG01010_search: false,
  219. button: {
  220. search: function() {
  221. listObj.itp_STOCKMNG01010_search = true;
  222. let param = $('#ITP_FORM_STOCKMNG01010_SEARCH').serializeObject();
  223. param.gridSize = $.jgrid.defaults.rowNum;
  224. param.gridPage = $.jgrid.defaults.page;
  225. $(STOCKMNG01010_GRID_ID).setGridParam({'postData': JSON.stringify(param)}).trigger('reloadGrid');
  226. },
  227. clickStockProc: function() {
  228. // 그리드에서 최소1개는 선택해야 함
  229. const rowKey = $(STOCKMNG01010_GRID_ID).getGridParam('selrow');
  230. if (!rowKey) {
  231. itp_fn_modal_alert_ajax(ITP_MSG_LOCALE.message.ajax.noData);
  232. return;
  233. }
  234. var selectedIds = $(STOCKMNG01010_GRID_ID).getGridParam('selarrrow');
  235. if (selectedIds.length > 1) {
  236. itp_fn_modal_alert_ajax(ITP_MSG_LOCALE.message.ajax.noSingleData);
  237. return;
  238. }
  239. var brandId = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).brandId;
  240. var whsId = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).whsId;
  241. var location = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).location;
  242. var itemId = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).itemId;
  243. var args = {'brandId': brandId, 'whsId': whsId, 'location': location, 'itemId': itemId};
  244. fn_call_popup('biz', 'BIZPOP_PO_STOCK_PROC', '#ITP_ASIDE', function() {
  245. listObj.button.search(); // 조회
  246. }, args, 'S');
  247. },
  248. clickStockHist: function() {
  249. // 그리드에서 최소1개는 선택해야 함
  250. const rowKey = $(STOCKMNG01010_GRID_ID).getGridParam('selrow');
  251. if (!rowKey) {
  252. itp_fn_modal_alert_ajax(ITP_MSG_LOCALE.message.ajax.noData);
  253. return;
  254. }
  255. var selectedIds = $(STOCKMNG01010_GRID_ID).getGridParam('selarrrow');
  256. if (selectedIds.length > 1) {
  257. itp_fn_modal_alert_ajax(ITP_MSG_LOCALE.message.ajax.noSingleData);
  258. return;
  259. }
  260. var brandId = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).brandId;
  261. var whsId = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).whsId;
  262. var location = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).location;
  263. var itemId = $(STOCKMNG01010_GRID_ID).jqGrid('getRowData', selectedIds[0]).itemId;
  264. var args = {'brandId': brandId, 'whsId': whsId, 'location': location, 'itemId': itemId};
  265. fn_call_popup('biz', 'BIZPOP_PO_STOCK_HIST', '#ITP_ASIDE', null, args, 'S');
  266. }
  267. },
  268. form: function() {
  269. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS1').on('change', function() {
  270. ($(this).val() === '') ? itemClassLevel.clear(2, true): itemClassLevel.list(2, true);
  271. });
  272. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS2').on('change', function() {
  273. ($(this).val() === '') ? itemClassLevel.clear(3, true): itemClassLevel.list(3, true);
  274. });
  275. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS3').on('change', function() {
  276. ($(this).val() === '') ? itemClassLevel.clear(4, true): itemClassLevel.list(4, true);
  277. });
  278. },
  279. empty: {
  280. init: function() {
  281. var _this = this;
  282. this.push();
  283. $(STOCKMNG01010_GRID_EMPTY).on('click', function() {
  284. _this.back();
  285. _this.itp_STOCKMNG01010_param.gridSize = $.jgrid.defaults.rowNum;
  286. $(STOCKMNG01010_GRID_ID).setGridParam({'postData': JSON.stringify(_this.itp_STOCKMNG01010_param)}).trigger('reloadGrid');
  287. });
  288. },
  289. itp_STOCKMNG01010_param: {},
  290. push: function() {
  291. let param = $('#ITP_FORM_STOCKMNG01010_SEARCH').serializeObject();
  292. listObj.itp_STOCKMNG01010_param = param;
  293. },
  294. back: function() {
  295. $('#ITP_FORM_STOCKMNG01010_SEARCH_WHS_ID').val(listObj.itp_STOCKMNG01010_param.swhsId);
  296. $('#ITP_FORM_STOCKMNG01010_SEARCH_LOCATION').val(listObj.itp_STOCKMNG01010_param.slocation);
  297. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS1').val(listObj.itp_STOCKMNG01010_param.sitemClass1);
  298. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS2').val(listObj.itp_STOCKMNG01010_param.sitemClass2);
  299. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS3').val(listObj.itp_STOCKMNG01010_param.sitemClass3);
  300. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS4').val(listObj.itp_STOCKMNG01010_param.sitemClass4);
  301. $('#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_NM').val(listObj.itp_STOCKMNG01010_param.sitemNm);
  302. }
  303. },
  304. grid: {
  305. init: function () {
  306. // 데이터 없을때
  307. listObj.empty.push();
  308. this.search();
  309. },
  310. colModel: gridColModel.list,
  311. search: function() {
  312. pageObj.switchScreen('LIST');
  313. this.unload();
  314. this.load();
  315. },
  316. load: function() {
  317. var data = JSON.parse(sessionStorage.getItem('itp_manage_brand_info'));
  318. $('#ITP_FORM_STOCKMNG01010_SEARCH_BRAND_ID').val(data.brandId);
  319. let param = $('#ITP_FORM_STOCKMNG01010_SEARCH').serializeObject();
  320. param.gridSize = $.jgrid.defaults.rowNum;
  321. var option = {
  322. gridId: STOCKMNG01010_GRID_ID,
  323. colModel: gridColModel.list,
  324. param: JSON.stringify(param),
  325. url: DOMAIN + STOCK_MNG_DETAIL_GRID_LIST,
  326. pager: STOCKMNG01010_GRID_PAGER,
  327. multiselect: true,
  328. onCellSelect: function(rowId, cellIdx, cellValue) {
  329. var cm = $(this).jqGrid('getGridParam', 'colModel');
  330. var colNm = cm[cellIdx].name;
  331. if (colNm == 'whsNm') {
  332. }
  333. },
  334. loadComplete: function(data) {
  335. console.log(data);
  336. itp_fn_grid_load_complete(data, STOCKMNG01010_GRID_ID, true, 'number', 'STOCKMNG01010', listObj.itp_STOCKMNG01010_search, listObj.empty, true, data.gridRecords, true);
  337. var ids = $(STOCKMNG01010_GRID_ID).getDataIDs();
  338. $.each(ids, function(idx, rowId) {
  339. // $(STOCKMNG01010_GRID_ID).jqGrid('setCell', rowId, 'whsNm', '', ITP_GRID_COL_STYLE.link);
  340. });
  341. },
  342. onPaging: function(action) {
  343. itp_fn_grid_paging(STOCKMNG01010_GRID_ID, action, param);
  344. }
  345. };
  346. itp_fn_grid_make_remote(option);
  347. },
  348. clearData : function() {
  349. $(STOCKMNG01010_GRID_ID).jqGrid('clearGridData', true);
  350. $(STOCKMNG01010_GRID_LIST).find('.ui-jqgrid-bdiv').css('min-height', '100px');
  351. $(STOCKMNG01010_GRID_EMPTY).html(ITP_MSG_LOCALE.message.grid.noData);
  352. $(STOCKMNG01010_GRID_EMPTY).show();
  353. },
  354. unload : function() {
  355. $.jgrid.gridUnload(STOCKMNG01010_GRID_ID);
  356. }
  357. }
  358. };
  359. var itemClassLevel = {
  360. isList: true,
  361. level: 1,
  362. keys: function() {
  363. var keys = {sBrandId:pageObj.brandInfo.brandId, sItemLevel: this.level};
  364. for(var i=1; i<this.level; i++) {
  365. var key = 'sItemClass' + i;
  366. var id = (this.isList ? '#ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS' : '#ITP_FORM_STOCKMNG01010_DETAIL_ITEM_CLASS') + i;
  367. keys[key] = $(id + ' option:selected').val();
  368. }
  369. return keys;
  370. },
  371. list: function(level, isList) {
  372. this.level = level;
  373. this.isList = isList;
  374. this.clear(level, isList);
  375. this.call( $.param(this.keys()));
  376. },
  377. detail: {
  378. data: [],
  379. make: function() {
  380. itemClassLevel.isList = false;
  381. itemClassLevel.call( $.param(itemClassLevel.keys()));
  382. }
  383. },
  384. call: function(param) {
  385. fn_ajax_call(API_ITEM_CLASS_LEVEL, param, this.callback, 'GET');
  386. },
  387. callback: function(result) {
  388. var id = 'ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS' + itemClassLevel.level;
  389. fn_make_select_item_class(result.searchList, id, true, '선택');
  390. if(!itemClassLevel.isList) {
  391. $('#' + id).val(itemClassLevel.detail.data[ itemClassLevel.level - 1]);
  392. if(itemClassLevel.level < itemClassLevel.detail.data.length) {
  393. if(itemClassLevel.detail.data[itemClassLevel.level] !== '') {
  394. itemClassLevel.level++;
  395. itemClassLevel.call( $.param(itemClassLevel.keys()));
  396. }
  397. }
  398. }
  399. },
  400. clear: function(level, isList) {
  401. for(var i=level; i<5; i++) {
  402. var id = 'ITP_FORM_STOCKMNG01010_SEARCH_ITEM_CLASS' + i;
  403. $('#' + id).find('option').remove();
  404. }
  405. }
  406. };