1 /** 2 * Object gridUtil() Grid 관련 Util을 제공 합니다.<br> 3 * grid related util 4 * @constructor 5 * @extends Object 6 */ 7 var gridUtil = function(){}; 8 9 /** 10 * 그리드에서 체크박스 선택된 행번호를 배열로 반환<br> 11 * ex) gridSelectedRowIndex(grid, 'SELECTED').length 하면 선택된 행의 갯수를 알 수 있음. 12 * get selected index as array 13 * @memberOf gridUtil 14 * @param {Object} 15 * grid WiseGrid Object - [WiseGrid Object] 16 * @param {String} 17 * checkBoxId 체크박스 컬럼 키 18 * @returns {Array}<br> 19 * 선택 된 행번호 배열 20 */ 21 gridUtil.selectedRowIndexes = function(grid, checkBoxId) { 22 var selectedRowIndexes = []; 23 for ( var i = 0; i < grid.getRowCount(); i++) { 24 if (grid.getCellValue(checkBoxId, i) === '1') { 25 selectedRowIndexes[selectedRowIndexes.length] = i; 26 } 27 } 28 return selectedRowIndexes; 29 }; 30 31 /** 32 * 그리드에서 행 번호를 인자로 받아 두 로우를 swap (swap grid row)<br> 33 * swap grid row with row num 34 * @memberOf gridUtil 35 * @param {Object} 36 * grid WiseGrid Object - [WiseGrid Object] 37 * @param {Number} 38 * sourceRow 39 * @param {Number} 40 * targetRow 41 */ 42 gridUtil.swapRow = function(grid, sourceRow, targetRow) { 43 var datas = grid.datas.getJSONData(); 44 var source = datas[sourceRow]; 45 var temp = datas[targetRow]; 46 datas[targetRow] = source; 47 datas[sourceRow] = temp; 48 grid.datas.setData(datas); 49 }; 50 51 /** 52 * WiseGrid 자동선택 - 그리드의 Cell의 값이 변했을 때 선택 Box를 자동으로 체크.<br> 53 * auto select check box when change cell value 54 * @memberOf gridUtil 55 * @param {Object} 56 * grid WiseGrid Object - [WiseGrid Object] 57 * @param {String} 58 * checkBoxId 체크박스 컬럼 키 59 * @param {String} 60 * strColumnKey 체크 할 컬럼의 ID 61 * @param {Number} 62 * nRow Event가 발생한 Row Index 63 * @param {String} 64 * oVal 65 * @param {String} 66 * nVal 67 */ 68 gridUtil.autoSelect = function(grid, checkBoxId, strColumnKey, nRow, oVal, nVal) { 69 if (oVal != nVal) { 70 grid.setCellValue(checkBoxId, nRow, "1"); 71 } 72 if (checkBoxId == strColumnKey) { 73 grid.setCellValue(checkBoxId, nRow, (nVal == "1") ? "1" : "0"); 74 } 75 76 }; 77 78 /** 79 * check box가 선택된 갯수를 반환<br> 80 * get selected count 81 * @param {Object} 82 * grid WiseGrid Object - [WiseGrid Object] 83 * @param {String} 84 * checkBoxId 체크박스 컬럼 키 85 * @returns {Number} 86 */ 87 gridUtil.selectedRowCount = function(grid, checkBoxId) { 88 return gridUtil.selectedRowIndexes(grid, checkBoxId).length; 89 }; 90 91 /** 92 * 그리드에 선택된 행이 있는지 확인(Is grid check box selected?)<br> 93 * chech selected row exist 94 * @memberOf Popup 95 * @param {Object} 96 * grid WiseGrid Object - [WiseGrid Object] 97 * @param {String} 98 * checkBoxId 체크박스 컬럼 키 99 * @returns {Boolean} 100 */ 101 gridUtil.isSelected = function(grid, checkBoxId) { 102 return gridUtil.selectedRowIndexes(grid, checkBoxId).length != 0; 103 }; 104 105 /** 106 * 그리드의 선택된 행수가 하나이면 true else false 107 * checked selected one 108 * @param {Object} 109 * grid WiseGrid Object - [WiseGrid Object] 110 * @param {String} 111 * checkBoxId 체크박스 컬럼 키 112 * @returns {Boolean} 113 */ 114 gridUtil.isSelectOne = function(grid, checkBoxId) { 115 return gridUtil.selectedRowCount(grid, checkBoxId) == 1; 116 }; 117 118 /** 119 * 그리드의 선택된 행수가 하나보다 많으면 true else false<br> 120 * check selected item is more than 0 121 * @param {Object} 122 * grid WiseGrid Object - [WiseGrid Object] 123 * @param {String} 124 * checkBoxId 체크박스 컬럼 키 125 * @returns {Boolean} 126 */ 127 gridUtil.isSelectMoreThan1 = function(grid, checkBoxId) { 128 return gridUtil.selectedRowCount(grid, checkBoxId) > 1; 129 }; 130 131 /** 132 * 선택 되어진 값 중 해당 컬럼에 값을 확인 확인 할 값과 Message 쌍을 넘겨서 해당 값이 있으면 그에 맞는 메시지를 출력 합니다.<br> 133 * validate selected row column whith given value, if it's different alert given message. 134 * @param {Object} 135 * grid WiseGrid Object - [WiseGrid Object] 136 * @param {String} 137 * checkBoxId 체크박스 컬럼 키 138 * @param {String} 139 * strColumnKey 체크 할 컬럼의 ID 140 * @param {Array} 141 * givenValues 142 * @param {Array} 143 * messages 144 * @returns {Boolean} 145 */ 146 gridUtil.isContainGivenValue = function(grid, checkBoxId, strColumnKey, givenValues, messages) { 147 var gridData = grid.datas.getJSONData(); 148 var selectedIndexes = gridUtil.selectedRowIndexes(grid, checkBoxId); 149 for (var x in selectedIndexes) { 150 for (var y in givenValues) 151 if (gridData[selectedIndexes[x]][strColumnKey] === givenValues[y]) { 152 alert(messages[y]); 153 return true; 154 } 155 } 156 return false; 157 }; 158 159 /** 160 * WiseUX에서 제공하는 transactionalStatus 컬럼의 값을 제어하기 위한 function<br> 161 * transactionalStatus의 값을 Selected Column의 값과 맞춘다. 162 * 163 * @param {Object} 164 * grid WiseGrid Object - [WiseGrid Object] 165 * @param {String} 166 * strColumnKey - "SELECTED" Column Key 167 */ 168 gridUtil.removeTransactionalStatus = function(grid, strColumnKey) { 169 for(var i = 0; i < grid.getRowCount(); i++) { 170 if(grid.getCellValue(strColumnKey, i) != "1") { 171 grid.cancelCRUDRow(i); 172 } 173 } 174 }; 175 176 /** 177 * 선택 되어진 값 중 해당 컬럼에 주어진 값의 Count 를 반환 합니다.<br> 178 * return selected count with given value 179 * @param {Object} 180 * grid WiseGrid Object - [WiseGrid Object] 181 * @param {String} 182 * checkBoxId 체크박스 컬럼 키 183 * @param {String} 184 * strColumnKey 체크 할 컬럼의 ID 185 * @param {String} 186 * givenValue 187 * @returns {Number} 188 */ 189 gridUtil.containGivenValueCount = function(grid, checkBoxId, strColumnKey, givenValue) { 190 var gridData = grid.datas.getJSONData(); 191 var selectedIndexes = gridUtil.selectedRowIndexes(grid, checkBoxId); 192 var count = 0; 193 for (var x in selectedIndexes) { 194 if (gridData[selectedIndexes[x]][strColumnKey] === givenValue) { 195 count++; 196 } 197 } 198 return count; 199 }; 200 201 /** 202 * 컬럼과 행번호를 넘겨 해당 위치에 값이 존재하는지 확인 값이 null 이거나 빈값이면 false를 return<br> 203 * check isEmpty selected row with given column 204 * @param {Object} 205 * grid WiseGrid Object - [WiseGrid Object] 206 * @param {String} 207 * checkBoxId 체크박스 컬럼 키 208 * @param {String} 209 * strColumnKey 체크 할 컬럼의 ID 210 * @param {Number} 211 * nRow RowIndex 212 * @returns {Boolean} 213 */ 214 215 gridUtil.validateRowReruiredValue = function(grid, checkBoxId, strColumnKey, nRow) { 216 for (x in strColumnKeys) { 217 var strColumnKey = strColumnKeys[x]; 218 var hiddenValue = grid.getCellHiddenValue(strColumnKey, nRow); 219 var cellValue = grid.getCellValue(strColumnKey, nRow); 220 var value = grid.getColType(strColumnKeys[x]) === 't_combo' ? hiddenValue : cellValue; 221 if (value === null || value === '') { 222 return false; 223 } 224 } 225 return true; 226 }; 227 228 /** 229 * 컬럼과 행번호를 넘겨 해당 위치에 값이 존재하는지 확인 230 * 값이 null 이거나 빈값이면 message를 출력하고 false를 return 231 * check isEmpty selected row with given column, message 232 * @param {Object} 233 * grid WiseGrid Object - [WiseGrid Object] 234 * @param {String} 235 * checkBoxId 체크박스 컬럼 키 236 * @param {String} 237 * strColumnKey 체크 할 컬럼의 ID 238 * @param {Number} 239 * nRow RowIndex 240 * @param {String} 241 * message 242 * @returns {Boolean} 243 */ 244 gridUtil.validateRowReruiredValueWithMessage = function(grid, checkBoxId, strColumnKey, nRow, message) { 245 if (gridUtil.validateRowReruiredValue(grid, checkBoxId, strColumnKey, nRow) === false) { 246 alert(message); 247 grid.setCellFocus(strColumnKey, nRow, true); 248 return false; 249 } 250 return true; 251 }; 252 253 /** 254 * 체크박스가 선택된 모든 로우와 Array로 받은 컬럼 키에 해당하는 곳에 모두 데이터가 들어 있는지 확인<br> 255 * 널이거나 빈값이 있다면 메시지를 출력하고 false return 256 * check isEmpty givenRow row with given column, message 257 * @param {Object} 258 * grid WiseGrid Object - [WiseGrid Object] 259 * @param {String} 260 * checkBoxId 체크박스 컬럼 키 261 * @param {String} 262 * strColumnKey 체크 할 컬럼의 ID 263 * @param {Number} 264 * nRow RowIndex 265 * @param {String} 266 * message 267 * @returns {Boolean} 268 */ 269 gridUtil.validateSelectedRowRequiredValueWithMessage = function(grid, strColumnKeys, checkBoxId, message) { 270 var rowIndexes = gridUtil.selectedRowIndexes(grid, checkBoxId); 271 for ( var x in rowIndexes){ 272 for ( var y in strColumnKeys) { 273 if (gridUtil.validateRowReruiredValue(grid, checkBoxId, strColumnKey[y], rowIndexes[x]) === false) { 274 alert(message); 275 grid.setCellFocus(strColumnKey[y], rowIndexes[x], true); 276 return false; 277 } 278 } 279 } 280 return true; 281 }; 282 283 /** 284 * WiseGrid 필수값 체크 : Grid가 자동으로 생성될 때 DB에 지정한 필수컬럼을 자동으로 array로 만든다.<br> 285 * check grid mandatory value 286 * @param grid 287 * WiseGrid Object - [WiseGrid Object] 288 * @param selColID 289 * grid의 데이터 중 선택된 행만 체크하기 위한 '선택' 컬럼의 컬럼키명. - [String] 290 * @param message 291 * 컬럼값이 null일 때 표시 할 메세지 - [String] 292 * @returns {Boolean} 293 */ 294 gridUtil.gridRequired = function(grid, selColID, message){ 295 296 var gridRow = grid.getRowCount(); 297 var args = eval(grid.getId()+"Element").validationColumns; 298 299 if(args != null && args != "") { 300 for(var i = 0; i < gridRow; i++){ 301 if(grid.getCellValue(selColID, i) == "1"){ 302 for(var j = 0; j < args.length; j++){ 303 if(grid.getColType(args[j]) == 't_combo'){ 304 if(grid.getCellHiddenValue(args[j], i) == null || grid.getCellHiddenValue(args[j], i) == ""){ 305 alert(message); 306 grid.setCellFocus(args[j], i, true); 307 return false; 308 } 309 } else { 310 if(grid.getCellValue(args[j], i) == null || grid.getCellValue(args[j], i) == ""){ 311 alert(message); 312 grid.setCellFocus(args[j], i, true); 313 return false; 314 } 315 } 316 } 317 } 318 } 319 } 320 return true; 321 }; 322 323 /** 324 * WiseGrid 필수값 체크 : 사용자가 체크 할 Column을 array로 만들어 넘긴다.<br> 325 * check grid mandatory value with given grid column 326 * @param grid 327 * WiseGrid Object - [WiseGrid Object] 328 * @param args 329 * 체크 할 컬럼명 ex) args = ["HOUSE_CODE","USER_ID"]; - [Array] 330 * @param selColID 331 * grid의 데이터 중 선택된 행만 체크하기 위한 '선택' 컬럼의 컬럼키명. - [String] 332 * @param message 333 * 컬럼값이 null일 때 표시 할 메세지 - [String] 334 * @returns {Boolean} 335 */ 336 gridUtil.gridRequiredCustom = function(grid, args, selColID, message){ 337 338 var gridRow = grid.getRowCount(); 339 340 if(args != null && args != "") { 341 for(var i = 0; i < gridRow; i++){ 342 if(grid.getCellValue(selColID, i) == "1"){ 343 for(var j = 0; j < args.length; j++){ 344 if(grid.getColType(args[j]) == 't_combo'){ 345 if(grid.getCellHiddenValue(args[j], i) == null || grid.getCellHiddenValue(args[j], i) == ""){ 346 alert(message); 347 grid.setCellFocus(args[j], i, true); 348 return false; 349 } 350 } else { 351 if(grid.getCellValue(args[j], i) == null || grid.getCellValue(args[j], i) == ""){ 352 alert(message); 353 grid.setCellFocus(args[j], i, true); 354 return false; 355 } 356 } 357 } 358 } 359 } 360 } 361 return true; 362 }; 363 /** 364 * 365 */ 366 /** 367 * WiseGrid 필수값 체크 : 전체 데이터 중 특정 컬럼의 특정 값을 가진 Row만 체크.<br> 368 * check grid mandatory value with given grid column and given value 369 * @param grid 370 * WiseGrid Object - [WiseGrid Object] 371 * @param args 372 * 체크 할 컬럼명 ex) args = ["HOUSE_CODE","USER_ID"]; - [Array] 373 * @param selColID 374 * grid의 데이터 중 선택된 행만 체크하기 위한 '선택' 컬럼의 컬럼키명. - [String] 375 * @param checkColID 376 * 체크해야 할 컬럼의 컬럼 ID - [String] 377 * @param checkVal 378 * 체크해야 할 값 - [String] 379 * @param message 380 * 컬럼값이 null일 때 표시 할 메세지 - [String] 381 * @returns {Boolean} 382 */ 383 gridUtil.gridCaseRequired = function(grid, args, selColID, checkColID, checkVal, message){ 384 385 var gridRow = grid.getRowCount(); 386 var checkColVal = ""; 387 var gridVal = ""; 388 389 for(var i = 0; i < gridRow; i++){ 390 391 if(grid.getCellValue(selColID, i) == "1"){ 392 393 checkColVal = grid.getColType(checkColID) == "t_combo" ? grid.getCellHiddenValue(checkColID, i) : grid.getCellValue(checkColID, i); 394 395 if(checkColVal == checkVal){ 396 397 for(var j = 0; j < args.length; j++){ 398 399 gridVal = grid.getColType(args[j]) == "t_combo" ? grid.getCellHiddenValue(args[j], i) : grid.getCellValue(args[j], i); 400 401 if(gridVal == null || gridVal == ""){ 402 alert(message); 403 grid.setCellFocus(args[j], i, true); 404 return false; 405 } 406 } 407 } 408 } 409 } 410 return true; 411 }; 412 413 /** 414 * 선택한 행들을 삭제. transactional stauts 가 C인 건만 삭제<br> 415 * delete selected row when transactional stauts is C 416 * @param grid 417 * @param checkBoxId 418 */ 419 gridUtil.deleteRows = function(grid, checkBoxId) { 420 var rowIndexes = gridUtil.selectedRowIndexes(grid, checkBoxId); 421 rowIndexes.reverse(); 422 423 for (x in rowIndexes) { 424 var rowIndex = rowIndexes[x]; 425 grid.deleteRow(rowIndex); 426 } 427 }; 428 429 /** 430 * 선택한 행들을 삭제. transactional stauts 무시하고 삭제<br> 431 * delete selected row ignore transactional stauts 432 * 433 * @param {Object} 434 * grid WiseGrid Object - [WiseGrid Object] 435 * @param {String} 436 * checkBoxId 체크박스 컬럼 키 437 */ 438 gridUtil.deleteRowsIgnoreTransactionalStatus = function(grid, checkBoxId) { 439 var rowIndexes = gridUtil.selectedRowIndexes(grid, checkBoxId); 440 rowIndexes.reverse(); 441 442 for (x in rowIndexes) { 443 var rowIndex = rowIndexes[x]; 444 if(grid.getCellValue('transactionalStatus', rowIndex) === ''){ 445 grid.deleteRow(rowIndex); 446 } else { 447 grid.deleteRow(rowIndex, false); 448 } 449 } 450 }; 451 452 453 /** 454 * transactionStatus가 'C'인 행만 삭제 (행추가한 행만 삭제) 다른 status가 있는지 여부를 반환 455 * delete selected row when transactional stauts is C reutrn other status exist 456 * @param grid 457 * @param checkBoxId 458 * @return isExistOtherStatus 선택한 행 중 상태가 'C'가 아닌 다른 상태의 행이 존재하면 true 리턴 459 */ 460 gridUtil.deleteAddedRows = function(grid, checkBoxId) { 461 462 var rowIndexes = gridUtil.selectedRowIndexes(grid, checkBoxId); 463 rowIndexes.reverse(); 464 465 var isExistOtherStatus = false; 466 for (x in rowIndexes) { 467 var gridStatus = grid.getCellValue('transactionalStatus', rowIndexes[x]); 468 if(gridStatus == 'C') { 469 grid.deleteRow(rowIndexes[x]); 470 } else { 471 isExistOtherStatus = true; 472 } 473 } 474 return isExistOtherStatus; 475 }; 476 477 /** 478 * Grid Data를 Excel File로 Import<br> 479 * import grid data from excel file 480 * @param {Object} 481 * grid WiseGrid Object - [WiseGrid Object] 482 */ 483 gridUtil.excelUpload = function(grid) { 484 grid.excelImport('','importall','row',true,true); 485 }; 486 487 /** 488 * Grid Data를 Excel File로 Export<br> 489 * export grid data to excel file 490 * @param {Object} 491 * grid WiseGrid Object - [WiseGrid Object] 492 */ 493 gridUtil.excelDown = function(grid) { 494 grid.excelExport('','',true,true); 495 }; 496