$(function() { 'use strict'; window.utils = window.utils || {}; $.extend(window.utils, { datagrid: { // dxNumberBox와 span으로 연결해 뒀다가, // cellClick 이벤트 클릭이 발생하면 dxNumberBox를 보여준다. // 그러므로 cellClick 이벤트에서 cellClickEventForDataGridTemplate 함수를 반드시 호출해야 한다. // purchase-request-popup.js 참조 getNumberBoxDataGridTemplateFunc: function(options) { options = options || {}; var min = options.min || 0, max = options.max, step = options.step || 1, showSpinButtons = options.showSpinButtons || true, alignment = options.alignment || 'left', convertValueWhenValueChanged = options.convertValueWhenValueChanged || _.identity; return function(cellElement, cellInfo) { var data = cellInfo.data; var dataField = cellInfo.column.dataField, $dxNumberBox, $span; $dxNumberBox = $('
').dxNumberBox({ min: min, max: max, step: step, showSpinButtons: showSpinButtons, visible: false, alignment: alignment, value: cellInfo.value, focusOutAction: function(e) { e.component.option('visible', false); cellElement.css('padding', ''); $span.css('display', ''); $span.text($NumberFormat(data[dataField]())); }, valueChangeAction: function (e) { if (data.MaxMaterialCount !== undefined) { if (e.value > (typeof (data.MaxMaterialCount) == "function" ? data.MaxMaterialCount() : data.MaxMaterialCount)) { e.value = (typeof (data.MaxMaterialCount) == "function" ? data.MaxMaterialCount() : data.MaxMaterialCount); utils.toast.show('입력 가능 수량이 초과되었습니다.', 'warning'); } } // 예산편성 화면 관련 자동 계산 수식 if (dataField === 'YearlyBudget') { data[dataField](e.value); data[dataField](convertValueWhenValueChanged(data, e.value)); } else if (dataField === 'MonthlyBudget'){ data[dataField](e.value); data[dataField](convertValueWhenValueChanged(data, e.value)); } else if (dataField === 'MonthlyExecution') { data[dataField](e.value); data[dataField](convertValueWhenValueChanged(data, e.value)); } else if (dataField === 'YearlyExecution') { data[dataField](e.value); data[dataField](convertValueWhenValueChanged(data, e.value)); } else { data[dataField](convertValueWhenValueChanged(e.value)); } //data[dataField](convertValueWhenValueChanged(e.value)); } }); $dxNumberBox.appendTo(cellElement); $span = $('') .text($NumberFormat(cellInfo.value)) .appendTo(cellElement); data[dataField + 'NumberBox'] = $dxNumberBox.dxNumberBox('instance'); data['$span' + dataField] = $span; }; }, cellClickEventForDataGridTemplate: function(e, dataField) { if (e.column.dataField === dataField) { var numberBoxName = [dataField, 'NumberBox'].join(''); if (e.data[numberBoxName] !== undefined) { e.data[numberBoxName].option('visible', true); e.data[numberBoxName].focus(); e.data['$span' + dataField].css('display', 'none'); e.cellElement.css('padding', '0px'); } return true; } return false; }, getItems: function(datagrid) { return datagrid._controllers.data._dataSource._items; }, dataSource: function(dataSource) { var dataSourceOptions = { store: dataSource._store, map: dataSource._mapFunc }; var options = dataSource._storeLoadOptions; $.each(options, function(name, value) { var that = value; if (that === undefined) return true; dataSourceOptions[name] = value; }); return dataSourceOptions; }, getSelectedRowsData: function(id) { var dataGrid = $('#' + id).dxDataGrid('instance'); return dataGrid.getSelectedRowsData(); }, getSelectedRowsDataWithFormatObject: function(id, objectFormat) { var dataGrid = $('#' + id).dxDataGrid('instance'); var items = dataGrid.getSelectedRowsData(); var array = []; $.each(items, function(i, item) { var obj = {}; $.each(objectFormat, function(name, value) { obj[name] = value || $KoValue(item[name]); }); array.push(obj); }); return array; }, columnIsUse: function(width) { return { dataField: 'IsUse', caption: $G("isUse"), alignment: 'center', width: width || '20%', customizeText: function(cellInfo) { return $G.isUse(cellInfo.value); } } }, navigateView: function(data, view, tableNameOrIdsArray) { if (typeof tableNameOrIdsArray === 'string') { tableNameOrIdsArray = BemsWebApplication.db[tableNameOrIdsArray].key(); } // var data = selectedItems.selectedRowsData[0]; var getter = DevExpress.data.utils.compileGetter(tableNameOrIdsArray); var idsObject = getter(data); //var ids = DevExpress.framework.Route.prototype.formatSegment(values); BemsWebApplication.app.navigate({ view: view, id: idsObject }, { target: "back" }); //BemsWebApplication.app.navigate( [ view , '/' , keys ].join('') , { target: "back" }); }, customizeTextForDateTimeFunc: function(cellInfo) { return $G.dateTime(cellInfo.value); }, setSelectedId: function(data, view, tableNameOrIdsArray, options) { if (options.selectedId === undefined) return; if (typeof tableNameOrIdsArray === 'string') { tableNameOrIdsArray = BemsWebApplication.db[tableNameOrIdsArray].key(); } // var data = selectedItems.selectedRowsData[0]; var getter = DevExpress.data.utils.compileGetter(tableNameOrIdsArray); var idsObject = getter(data); if (_.isArray(tableNameOrIdsArray)) { $.each(idsObject, function(name, value) { options.selectedId[name] = value; }); } else { options.selectedId[tableNameOrIdsArray] = idsObject; } }, popupView: function(data, view, tableNameOrIdsArray, options) { options.popupVisible(true); }, defaultOptions: function(options) { options = $.extend(options, { hoverStateEnabled: true }); if (_.has(options, 'pager') === false) { options.paging = { pageSize: 20 }; options.pager = { visible: true, showPageSizeSelector: false, allowedPageSizes: [15, 20] }; } if (_.has(options, 'selection') === false) { options.selection = { mode: 'single' }; } if (typeof options.dxDataSource === "object") { options.dataSource = utils.datagrid.dataSource(options.dxDataSource); //delete options.dxDataSource; } if (typeof options.searchPanelPlaceHolder === 'string') { options.searchPanel = { visible: true, width: 250, placeholder: options.searchPanelPlaceHolder }; //delete options.searchPanelPlaceHolder; } var numberCellPrepared = null; if (options.useNumberColumn === true) { if (typeof options.datagridId !== 'string') { throw Error("need the Id of datagrid"); } var datagrid = null; // useNumberColumn 옵션이 true이면, 무조건 순서 번호로 보여준다. // multple로 설정되어 있으면 체크박스 컬럼이 생기기 때문에 numberIndex를 1로 설정한다. // 컬럼 선택에 의한 소팅이 되려면 실제 테이블의 필드 ID로 dataField를 설정하는 것이 좋다. numberCellPrepared = function(cellElement, cellInfo) { var numberIndex = 0; if (options.selection && options.selection.mode === 'multiple') { numberIndex = 1; } //if (cellInfo.columnIndex === numberIndex) { // 2015 07 18 hcLee V14.1-V15.1 if (cellInfo.columnIndex === numberIndex && cellInfo.rowType == 'data') { // // 2015 07 18 hcLee V14.1-V15.1 var isAsc = cellInfo.column.sortOrder === 'asc'; if (datagrid === null) { datagrid = $('#' + options.datagridId).dxDataGrid('instance'); } var number; if (cellInfo.column.sortOrder === 'asc') { number = cellInfo.row.dataIndex + 1 + (datagrid.pageIndex() * datagrid.pageSize()); } else { // 2015 07 18 V15.1에서는 cellInfo.rowType == 'data'인 경우에만 row.dataIndex가 의미를 가짐 number = datagrid.totalCount() - (datagrid.pageIndex() * datagrid.pageSize()) - cellInfo.row.dataIndex; } //cellInfo.value = cellInfo.displayValue = cellInfo.rowIndex + 1; //cellInfo.text = number; $(cellElement).text(number); } }; } if (typeof options.cellPrepared === 'function') { var cellPrepared = options.cellPrepared; options.cellPrepared = function(cellElement, cellInfo) { if (numberCellPrepared != null) numberCellPrepared(cellElement, cellInfo); cellPrepared(cellElement, cellInfo); }; } else if (numberCellPrepared != null) { options.cellPrepared = numberCellPrepared; } if (typeof options.datagridId === "string") { var self = this; options.rowClick = function(clickRow) { if (_.isFunction(options.selectedData)) { options.selectedData(clickRow.data); } self.setSelectedId(clickRow.data, options.viewId, options.dbId, options); var dataGridInstance = $(['#', options.datagridId].join('')).dxDataGrid('instance'); if (typeof options.handleDataGridRowClick == 'function') { // handleShowPopup으로 팝업을 띄우도록 수정했는데, // showPopup 라는 대행함수를 연결함 var showPopup = function(show) { if (show) { options.handleShowPopup(clickRow.data); } else { options.popupVisible(false); } } options.handleDataGridRowClick(options.datagridId, dataGridInstance, clickRow, showPopup); } else { //hcLee 2016 02 19 추가 if (_.isFunction(options.handleShowPopup)) { //var dataGrid = $('#gridContainer').dxDataGrid('instance'); dataGridInstance.clearSelection(); options.handleShowPopup(clickRow.data); } //options.selectedSourceItem.fromJS(clickRow.data); //utils.datagrid.popupView(clickRow.data, options.viewId, options.dbId, options); //utils.datagrid.navigateView(clickRow.data, options.viewId, options.dbId); } }; } return options; } } }); });