123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- $(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 = $('<div>').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 = $('<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;
- }
- }
- });
- });
|