$(function () { 'use strict'; var FfacilityClassForSearch = ko.observableArray(); var FfacilityCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); var FfacilityClass = ko.observableArray(); BWA.Popup.Facility = BWA.Popup.Facility || {}; BWA.Popup.Facility.create = window.$FacilitySearchPopup = function (viewModel, selectedFacilityData, options) { options = options || {}; options.datagridId = options.datagridId || 'facilityDataGridForSearch'; var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'), buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true), floorDataSource = BemsWebApplication.db.createDataSource('CmFloor'), zoneDataSource = BemsWebApplication.db.createDataSource('CmZone'), defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId'), defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'), defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId'), deferredForSearch = new $.Deferred(); var onSelectedFacilities = options.onSelectedFacilities, isMultipleSelect = options.isMultipleSelect; var facilityClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()], facilityClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()], buildingsForSearch = ko.observableArray(), floorsForSearch = ko.observableArray(), buildingIdForSearch = ko.observable(), floorIdForSearch = ko.observable(); var dataViewModel = new BemsWebApplication.CmFacilityViewModel(), initialized = false, gridView, popupVisible = ko.observable(false), facilityOptions = BemsWebApplication.Factory.Facility, dataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: facilityOptions.getDataSourceForDataGrid() }, 'CmFacility'); var dataGridOptions = utils.datagrid.defaultOptions({ dxDataSource: dataSource, selectedSourceItem: dataViewModel, datagridId: options.datagridId, dbId: 'CmFacility', handleDataGridRowClick: function () { }, columns: facilityOptions.getColumns([ /* hcLee 2016 03 14 { dataField: 'ClassName', width: '25%' }, { dataField: 'Name', width: '30%' }, { dataField: 'ManufactureModel', width: '15%' }, { dataField: 'Location', width: '30%' } */ { dataField: 'FirstClassId', width: '12%', caption: '시설(대)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'SecondClassId', width: '12%', caption: '시설(중)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'ThirdClassId', width: '12%', caption: '시설(소)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'Name', width: '55%' }, { dataField: 'ManufactureModel', width: '15%', visible: false }, { dataField: 'CmFloor/Name', width: '9%' } ]), wordWrapEnabled: true, cellPrepared: BemsWebApplication.Factory.Facility.cellPrepared, //searchPanelPlaceHolder: '시설 검색', }); if (isMultipleSelect) { dataGridOptions.selection = { mode: 'multiple', allowSelectAll: true }; dataGridOptions.handleDataGridRowClick = function () { }; } else { dataGridOptions.handleDataGridRowClick = function (id, dataGrid, clickRow) { var data = clickRow.data; if (!_.isUndefined(selectedFacilityData)) { selectedFacilityData({ SiteId: data.SiteId(), FacilityCode: data.FacilityCode(), Name: data.Name(), FirstClassId: data.FirstClassId(), SecondClassId: data.SecondClassId(), ThirdClassId: data.ThirdClassId(), }); } if (!_.isUndefined(onSelectedFacilities)) { onSelectedFacilities([BWA.DataUtil.convertViewModelToJS(data)]); } popupVisible(false); } } function initializeSearchClasses(onlyThird) { if (onlyThird === undefined || onlyThird === false) { facilityClassesForSearch[1](defaultSearchClassArray.slice(0)); facilityClassValuesForSearch[1](0); } facilityClassesForSearch[2](defaultSearchClassArray.slice(0)); facilityClassValuesForSearch[2](0); } var handleFirstClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(); return; } BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClassesForSearch[1], defaultSearchClassArray); }; var handleSecondClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(true); return; } BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClassesForSearch[2], defaultSearchClassArray); }; var handleBuildingInSearchView = function (e) { if (e.value === 0) { floorsForSearch(defaultSearchFloorArray.slice(0)); floorIdForSearch(0); return 0; } BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floorsForSearch, defaultSearchFloorArray); } function handlePopupShowing() { FfacilityCodeClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); $.when( FfacilityCodeClassDataSource.load() ).done(function (Result) { FfacilityClass = ko.observableArray(); var cnt = 0; for (var i = 0; i < Result.length; i++) { FfacilityClass.push(Result[i]); } FfacilityClassForSearch($SearchView.createArrayOfSelectBox('FacilityClassId', FfacilityClass())); }); facilityClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['ParentFacilityClassId', '=', null] ]); $.when(facilityClassDataSource.load(), buildingDataSource.load()).done(function (result1, result2) { // hcLee 2016 02 01 //facilityClassValuesForSearch[0](0); //facilityClassValuesForSearch[1](0); //facilityClassValuesForSearch[2](0); // hcLee 2016 02 01 //if (initialized === false) { facilityClassesForSearch[0]($SearchView.createArrayOfSelectBox('FacilityClassId', result1[0])); initializeSearchClasses(); buildingsForSearch($SearchView.createArrayOfSelectBox('BuildingId', result2[0])); floorsForSearch($SearchView.createArrayOfSelectBox('FloorId', undefined)); // } deferredForSearch.resolve(); }); } function handlePopupShown() { if (initialized === false) { gridView = $('#facilityDataGridForSearch').dxDataGrid('instance'); $("#facilityDataGridForSearch").dxDataGrid({ paging: { pageSize: 14 } }); initialized = true; } searchView.show(); gridView.clearSelection(); } function handlePopupButtonSelect() { var array = utils.datagrid.getSelectedRowsData(options.datagridId); if (!_.isUndefined(onSelectedFacilities)) { onSelectedFacilities(array); } if (!_.isUndefined(selectedFacilityData)) { selectedFacilityData(array); } popupVisible(false); } function handlePopupButtonClose() { popupVisible(false); } var toolbarItems = [ { location: 'before', text: '찾기' }, { location: 'after', widget: 'button', options: { text: $G('select'), icon: 'save', visible: isMultipleSelect, clickAction: handlePopupButtonSelect } }, { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } } ]; var popupOptions = { width: '950px', height: '600px', visible: popupVisible, closeOnOutsideClick: true, showingAction: handlePopupShowing, shownAction: handlePopupShown, animation: window.utils.popup.createAnimation(), paging: { pageSize: 14 } }; var searchView = BWA.Popup.SearchView.create({ parentPopupId: 'popupSearchFacility', parentPopupVisible: popupVisible, promiseDataForSearch: deferredForSearch, searchItems: [ { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: facilityClassValuesForSearch[0], dataSource: facilityClassesForSearch[0], handleChangedValue: handleFirstClassChangedValueInSearchView }, { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: facilityClassValuesForSearch[1], dataSource: facilityClassesForSearch[1], handleChangedValue: handleSecondClassChangedValueInSearchView }, { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: facilityClassValuesForSearch[2], dataSource: facilityClassesForSearch[2] }, { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: buildingIdForSearch, dataSource: buildingsForSearch, handleChangedValue: handleBuildingInSearchView }, { id: 'FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'BuildingId', value: floorIdForSearch, dataSource: floorsForSearch }, { id: 'Name' } ], handleInitializeUpdate: function () { }, handleSearch: function (filter, searchItems) { var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; filter = [ eq('SiteId', BWA.UserInfo.SiteId()) ].concat(filter) gridView.filter(filter); // console.log(filter); } }); return { dataModel: dataViewModel, dataSource: dataSource, popupOptions: popupOptions, searchView: searchView, toolbarItems: toolbarItems, dataGridOptions: dataGridOptions, show: function (callbackOnSelectedFacilities) { if (_.isFunction(callbackOnSelectedFacilities)) { onSelectedFacilities = callbackOnSelectedFacilities; } popupVisible(true); } }; }; // 팝업에서 사용될 때, 선택된 시설 목록을 삭제하는 기능 BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc = function (koGridView, koDataArray) { return function handleDeleteSelectedFacilities() { var rows = koGridView().getSelectedRowsData(); if (_.isEmpty(rows)) { utils.toast.show('선택된 시설이 없습니다.', 'error'); return; } _.each(rows, function (row) { var array = koDataArray(); var length = array.length; var id = row.FacilityCode(); for (var i = 0 ; i < length ; i++) { if (id === array[i].FacilityCode()) { array.splice(i, 1); break; } } }); koGridView().refresh(); } }; BWA.Popup.Facility.getReadOnlyDataGridOptions = function (dataSource, koVisible) { FfacilityCodeClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); $.when( FfacilityCodeClassDataSource.load() ).done(function (Result) { FfacilityClass = ko.observableArray(); var cnt = 0; for (var i = 0; i < Result.length; i++) { FfacilityClass.push(Result[i]); } FfacilityClassForSearch($SearchView.createArrayOfSelectBox('FacilityClassId', FfacilityClass())); }); var facilityColumns = BWA.Factory.Facility.getColumns([ { dataField: 'FirstClassId', width: '15%', caption: '시설(대)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'SecondClassId', width: '15%', caption: '시설(중)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'ThirdClassId', width: '15%', caption: '시설(소)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'FacilityCode', width: '30%', visible: false }, { dataField: 'Name', width: '55%' } ]); return utils.datagrid.defaultOptions({ width: 675, visible: koVisible, pager: { showPageSizeSelector: false, allowedPageSizes: [], visible: true }, dataSource: dataSource, columns: facilityColumns }) }; BWA.Popup.Facility.getModifiableDataGridOptions = function (dataSource, koVisible, koGridView) { var facilityColumns = BWA.Factory.Facility.getColumns([ { dataField: 'FirstClassId', width: '15%', caption: '시설(대)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'SecondClassId', width: '15%', caption: '시설(중)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'ThirdClassId', width: '15%', caption: '시설(소)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < FfacilityClassForSearch().length; i++) { if (FfacilityClassForSearch()[i].FacilityClassId() == cellInfo.value) { return FfacilityClassForSearch()[i].Name(); } } } }, { dataField: 'FacilityCode', width: '30%', visible: false }, { dataField: 'Name', width: '55%' } ]); return utils.datagrid.defaultOptions({ width: 675, visible: koVisible, pager: { showPageSizeSelector: false, allowedPageSizes: [], visible: true }, dataSource: dataSource, selection: { mode: 'multiple', allowSelectAll: true }, columns: facilityColumns, contentReadyAction: function (e) { koGridView(e.component); }, }) }; });