$(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;
}
}
});
});