| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 | 
							- BemsWebApplication.Point = function (params, viewInfo) {
 
-     "use strict";
 
-     var VIRTUAL_FACILITY_ID = 1,
 
-         FACILITY_ID = 2,
 
-         //FACILITY_DEPTH = 2,
 
-         FACILITY_DEPTH = 3, // hcLee
 
-         BID_INSERT_VIRTUAL_FACILITY = 0,
 
-         BID_EDIT_VIRTUAL_FACILITY = 1,
 
-         BID_GENERATE_POINT = 2,
 
-         BID_DELETE_POINT = 3;
 
-     //권한설정
 
-     var hasnotModificationPermission = ko.observable(true);
 
-     var disabledButtons = [ko.observable(), ko.observable(), ko.observable(), ko.observable()];
 
-     // 2016 06 03 hcLee 추가
 
-     var facilityTypeDataSource = BemsWebApplication.db.createDataSource('BemsFacilityType');
 
-     var BemsMonitoringPointInfo = ko.observableArray();
 
-     var BemsMonitoringPointDataSource = BemsWebApplication.db.createDataSource('BemsMonitoringPoint');
 
-     var RowName;
 
-     var facilityDataSource = BWA.DataUtil.createDataSource({
 
-         dataSourceOptions: {
 
-             select: [
 
-                 'SiteId', 'FacilityCode', 'Name', 'FacilityTypeId', 'BemsFacilityType/Name', 'IsVirtualFacility'
 
-             ],
 
-             expand: ['BemsFacilityType'],
 
-             extendOptions: {
 
-                 forceOriginalField: true
 
-             },
 
-             paginate: false, // 페이징을 하지 않음
 
-         }
 
-     }, 'CmFacility'),
 
-         factory = BemsWebApplication.Factory.PointLocationMapping,
 
-         viewModel,
 
-         popup = null,
 
-         virtualFacilityPopup = null,
 
-         popupVisible = ko.observable(false),
 
-         eq = BWA.DataUtil.constructEqualFilter,
 
-         selectedTreeData = ko.observable(null),
 
-         selectedTreeItem = ko.observable(null);
 
-     var commandButtonOptions = [{
 
-         icon: 'add',
 
-         id: 'create1',
 
-         title: '가상시설등록',
 
-         disabled: disabledButtons[BID_INSERT_VIRTUAL_FACILITY],
 
-         action: handlePopupInsertVirtualFacility
 
-     }, {
 
-         icon: 'edit',
 
-         id: 'create2',
 
-         title: '가상시설수정',
 
-         disabled: disabledButtons[BID_EDIT_VIRTUAL_FACILITY],
 
-         action: handlePopupUpdateVirtualFacility
 
-     }, {
 
-         icon: 'add',
 
-         id: 'create3',
 
-         title: '관제점초기생성',
 
-         disabled: disabledButtons[BID_GENERATE_POINT],
 
-         action: generatePoints
 
-     }, {
 
-         icon: 'remove',
 
-         id: 'delete',
 
-         title: '관제점삭제',
 
-         disabled: disabledButtons[BID_DELETE_POINT],
 
-         action: handleRemoveSelectedPoints
 
-     }];
 
-     function handleClickTreeItem(element, data) {
 
-         var eq = BWA.DataUtil.constructEqualFilter;
 
-         selectedTreeItem(data);
 
-         var filter;
 
-         var depth = data.depth;
 
-         var parentData = data.parentData;
 
-         data = data.data;
 
-         selectedTreeData(data);
 
-         //if (depth !== FACILITY_DEPTH) {
 
-         if (depth == 1) {
 
-             if (data.Id === FACILITY_ID) {
 
-                 filter = getFacilityFilter();
 
-             }
 
-             else {
 
-                 filter = getVirtualFacilityFilter();
 
-             }
 
-         }
 
-         else if (depth == 2) {
 
-             filter = [
 
-                 eq('SiteId', BWA.UserInfo.SiteId()),
 
-                 'and',
 
-                 //eq('FacilityTypeId', data.FacilityCode()),
 
-                 eq('FacilityTypeId', data.FacilityTypeId()),
 
-             ];
 
-         }
 
-         else {
 
-             filter = [
 
-                 eq('SiteId', BWA.UserInfo.SiteId()),
 
-                 'and',
 
-                 eq('FacilityCode', data.FacilityCode()),
 
-             ];
 
-         }
 
-         viewModel.setGridViewFilter(filter);
 
-     }
 
-     function getVirtualFacilityFilter() {
 
-         // FacilityTypeId 99 은 가상설비의 타입 아이디 임 
 
-         return [
 
-             ['SiteId', '=', BWA.UserInfo.SiteId()],
 
-             'and',
 
-             ['FacilityTypeId', '=', 99],
 
-         ];
 
-     }
 
-     function getFacilityFilter() {
 
-         return [
 
-             ['SiteId', '=', BWA.UserInfo.SiteId()],
 
-             'and',
 
-             ['FacilityTypeId', '<', 99]
 
-         ];
 
-     }
 
-     function handleViewShown() {
 
-         hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
 
-         if (hasnotModificationPermission()) {
 
-             for (var i = 0; i < 4; i++) {
 
-                 commandButtonOptions[i].disabled(true);
 
-             }
 
-         } else {
 
-             for (var i = 0; i < 4; i++) {
 
-                 commandButtonOptions[i].disabled(false);
 
-             }
 
-         }
 
-         // start warning : 아래 코드는 화면이 열릴때 마다 확인 함. 성능상 이슈 발생 가능성이 있음
 
-         if (facilityDataSource._items.length != 0) {
 
-             var data = selectedTreeItem();
 
-             if (data != null) $('#facilityTreeView').cwTreeView('reload', selectedTreeItem().parentData);
 
-         }
 
-         // end warning
 
-         var eq = BWA.DataUtil.constructEqualFilter;
 
-         $('#facilityTreeView').cwTreeView({
 
-             width: '30%',
 
-             height: 'auto',
 
-             //maxDepth: 2,
 
-             //height: '480px',
 
-             onClickTreeItem: handleClickTreeItem,
 
-             delegateDataSource: function (data, alterObj) {
 
-                 var id = data.id;
 
-                 var depth = data.depth;
 
-                 var promise = null;
 
-                 switch (depth) {
 
-                     case 0:
 
-                         var typeDeferred = new $.Deferred();
 
-                         promise = typeDeferred.promise();
 
-                         alterObj.IsFunction = false;
 
-                         typeDeferred.resolve([{
 
-                             Id: VIRTUAL_FACILITY_ID,
 
-                             Name: '가상시설'
 
-                         }, {
 
-                             Id: FACILITY_ID,
 
-                             Name: '일반시설'
 
-                         }
 
-                         ])
 
-                         break;
 
-                     case 1:
 
-                         var filter;
 
-                         switch (data.data.Id) {
 
-                             /*
 
-                             case VIRTUAL_FACILITY_ID:
 
-                                 filter = getVirtualFacilityFilter();
 
-                                 break;
 
-                             case FACILITY_ID:
 
-                                 filter = getFacilityFilter();
 
-                                 break;
 
-                                 */
 
-                             case FACILITY_ID: filter = [['FacilityTypeId', '<', 99]]; break;
 
-                             case VIRTUAL_FACILITY_ID: filter = [['FacilityTypeId', '=', 99]]; break;
 
-                         }
 
-                         facilityTypeDataSource.filter(filter);
 
-                         promise = facilityTypeDataSource.load();
 
-                         //facilityDataSource.filter(filter);
 
-                         //promise = facilityDataSource.load();
 
-                         break;
 
-                     case 2:
 
-                         facilityDataSource.filter([
 
-                             eq('SiteId', BWA.UserInfo.SiteId()),
 
-                             'and',
 
-                             eq('FacilityTypeId', data.data.FacilityTypeId())
 
-                         ]);
 
-                         promise = facilityDataSource.load();
 
-                         break;
 
-                 }
 
-                 return promise;
 
-             }
 
-         });
 
-         popup.handleViewShown();
 
-         virtualFacilityPopup.handleViewShown();
 
-     }
 
-     function handleAddPoints(points) {
 
-         if (points.length === 0) return;
 
-         if (selectedTreeData() === null) {
 
-             utils.toast.show('선택된 빌딩/층/존이 없습니다.', 'warning');
 
-             return null;
 
-         }
 
-         var rows = window.utils.datagrid.getItems(gridView);
 
-         points = _.map(points, function (item) {
 
-             var facilityCode = item.FacilityCode;
 
-             var propertyId = item.PropertyId;
 
-             if (_.some(rows, function (x) {
 
-                 return (x.FacilityCode() === facilityCode && x.PropertyId === propertyId);
 
-             })) {
 
-                 return null;
 
-             }
 
-             return item;
 
-         });
 
-         var data = selectedTreeData();
 
-         var parameters = {
 
-             BuildingId: data.BuildingId()
 
-         };
 
-         if (_.isUndefined(data.FloorId) === false) {
 
-             parameters.FloorId = data.FloorId();
 
-             if (_.isUndefined(data.ZoneId) === false) {
 
-                 parameters.ZoneId = data.ZoneId();
 
-             }
 
-             else {
 
-                 parameters.ZoneId = null;
 
-             }
 
-         }
 
-         else {
 
-             parameters.FloorId = null;
 
-             parameters.ZoneId = null;
 
-         }
 
-         var postData = [];
 
-         var itemKeys = ['SiteId', 'FacilityCode', 'PropertyId'];
 
-         var toJS = BWA.DataUtil.convertHybridViewModelToJS;
 
-         //        $.each(points.concat(rows), function(i, item) {
 
-         $.each(points, function (i, item) {
 
-             item = toJS(_.pick(item, itemKeys));
 
-             item = $.extend(item, parameters);
 
-             postData.push(item);
 
-         });
 
-         parameters.SiteId = data.SiteId();
 
-         var promise = BemsWebApplication.api.post(
 
-             'BemsMonitoringPoint/AddLocation', postData, parameters
 
-         );
 
-         promise.done(function () {
 
-             utils.toast.show($G('successDatabaseProcessMsg'));
 
-             gridView.refresh();
 
-         });
 
-         return promise;
 
-     }
 
-     function handlePopupInsertVirtualFacility() {
 
-         virtualFacilityPopup.show();
 
-     }
 
-     function handlePopupUpdateVirtualFacility() {
 
-         var item = selectedTreeItem();
 
-         var isExist = ko.observable(false);
 
-         if (_.isNull(item)) {
 
-             utils.toast.show('가상시설을 선택해 주십시오.', 'warning');
 
-             return;
 
-         }
 
-         if (item.depth !== FACILITY_DEPTH || item.parentData.data.Id === FACILITY_ID) {
 
-             utils.toast.show('가상시설만 수정이 가능합니다.', 'warning');
 
-             return;
 
-         }
 
-         
 
-         if (item != null && item.depth === FACILITY_DEPTH) {
 
-             facilityDataSource.filter([
 
-                 eq('SiteId', BWA.UserInfo.SiteId()),
 
-                 'and',
 
-                 eq('FacilityTypeId', item.data.FacilityTypeId())
 
-             ]);
 
-             facilityDataSource.load().done(function (result) {
 
-                 for (var i = 0; i < result.length; i++) {
 
-                     if (item.data.Name() == result[i].Name()) {
 
-                         isExist(true);
 
-                     }
 
-                 }
 
-                 if (_.isNull(item) || item.depth !== FACILITY_DEPTH || isExist() === false) {
 
-                     utils.toast.show('관제점을 등록할 시설을 선택하여 주십시오.', 'warning');
 
-                 }
 
-                 else {
 
-                     virtualFacilityPopup.show(BWA.DataUtil.convertViewModelToJS(selectedTreeData()), item.data.Name());
 
-                 }
 
-             });
 
-         }
 
-         else {
 
-             utils.toast.show('관제점을 등록할 시설을 선택하여 주십시오.', 'warning');
 
-         }
 
-     }
 
-     function generatePoints() {
 
-         var item = selectedTreeItem();
 
-         if (_.isNull(item) ||
 
-             (item.depth === 1 && item.data.Id !== FACILITY_ID) ||
 
-             //(item.depth === 2 && item.parentData.data.Id !== FACILITY_ID) ||
 
-             (item.depth === 2) ||
 
-             (item.depth === 3 && item.parentData.parentData.data.Id !== FACILITY_ID)
 
-             ) {
 
-             utils.toast.show('모든 시설의 관제점을 재생성하려면 "일반시설"을 선택하시고, 아니면 특정 시설을 선택해 주십시오.', 'warning');
 
-             return;
 
-         }
 
-         DevExpress.ui.dialog.confirm(
 
-             '전체 혹은 선택된 시설의 관제점이 생성됩니다. 기존에 설정된 관제점 정보가 삭제됩니다. \n계속 진행하시겠습니까?',
 
-             '관제점 생성'
 
-         ).then(function (result) {
 
-             if (result) {
 
-                 var data = item.data;
 
-                 var postData = {};
 
-                 switch (item.depth) {
 
-                     case 1: // 전체
 
-                         postData.SiteId = BWA.UserInfo.SiteId();
 
-                         postData.FacilityTypeId = null;
 
-                         postData.FacilityCode = null;
 
-                         break;
 
-                     case 2: // 2016 06 03 hcLee 추가
 
-                         postData.SiteId = BWA.UserInfo.SiteId();
 
-                         postData.FacilityTypeId = data.FacilityTypeId();
 
-                         postData.FacilityCode = null;
 
-                         break;
 
-                     case 3: // 특정 시설 // 2016 06 03 hcLee 수정 기존 2 -> 3으로 변경
 
-                         postData.SiteId = BWA.UserInfo.SiteId();
 
-                         postData.FacilityTypeId = data.FacilityTypeId();
 
-                         postData.FacilityCode = data.FacilityCode();
 
-                         break;
 
-                 }
 
-                 disabledButtons[BID_GENERATE_POINT](true);
 
-                 BWA.api.post('BemsMonitoringPoint/Generation', postData)
 
-                 .always(function () {
 
-                     disabledButtons[BID_GENERATE_POINT](false);
 
-                 }).done(function () {
 
-                     viewModel.refreshList();
 
-                     utils.toast.show('관제점 생성을 성공하였습니다.');
 
-                 });
 
-             }
 
-         });
 
-     }
 
-     function handleRemoveSelectedPoints() {
 
-         var gridView = viewModel.gridView();
 
-         var rows = gridView.getSelectedRowsData();
 
-         if (_.isEmpty(rows)) {
 
-             utils.toast.show('선택된 관제점이 없습니다.', 'warning');
 
-             return;
 
-         }
 
-         // 삭제확인 메세지 박스 추가 hcLee 2016 06 03
 
-         DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {
 
-             if (result) {
 
-                 //handleConfirmDelete();
 
-                 var postData = [];
 
-                 var itemKeys = BWA.db.BemsMonitoringPoint.key();
 
-                 var toJS = BWA.DataUtil.convertHybridViewModelToJS;
 
-                 $.each(rows, function (i, item) {
 
-                     item = toJS(_.pick(item, itemKeys));
 
-                     postData.push(item);
 
-                 });
 
-                 var promise = BemsWebApplication.api.del(
 
-                     'BemsMonitoringPoint', postData
 
-                 );
 
-                 promise.done(function () {
 
-                     utils.toast.show($G('successDatabaseProcessMsg'));
 
-                     gridView.clearSelection();
 
-                     gridView.refresh();
 
-                 });
 
-                 return promise;
 
-             }
 
-         });
 
-     }
 
-     viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'BemsMonitoringPoint', {
 
-         dataSourceOptions: factory.getDataSourceOptions(),
 
-         selection: {
 
-             mode: 'multiple'
 
-         },
 
-         columns: factory.getColumns([
 
-             { dataField: 'CmFacility/Name', width: '40%' },
 
-             { dataField: 'Name', width: '40%' },
 
-             //{ dataField: 'ValueType', width: '20%' },
 
-             { dataField: 'BemsFuelType/Name', caption: '에너지원', width: '30%', alignment: 'center' },
 
-             { dataField: 'BemsServiceType/Name', caption: '용도', width: '30%', alignment: 'center' },
 
-         ]),
 
-         searchViewItems: [
 
-             { id: 'CmFacility/Name' },
 
-             { id: 'Name' }
 
-         ],
 
-         popupWidth: 520,
 
-         insertButtonText: $G('pointInsert'),
 
-         useNumberColumn: false,
 
-         hasnotModificationPermission: hasnotModificationPermission, //권한설정
 
-         handleViewShown: handleViewShown,
 
-         handleInitializeDataModelValue: function (dataModel) {
 
-             popup.handleInitializeDataModelValue(dataModel);
 
-         },
 
-         handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
 
-             popup.handleDataGridRowClick.apply(this, arguments);
 
-             var data = clickRow.data;
 
-             RowName = data.Name;
 
-         },
 
-         // 이름 중복 방지
 
-         handlePopupShowing: function () {
 
-             var item = selectedTreeItem();
 
-             BemsMonitoringPointDataSource.filter([
 
-                 eq('SiteId', BWA.UserInfo.SiteId()),
 
-                 'and',
 
-                 eq('FacilityTypeId', item.data.FacilityTypeId())
 
-             ]);
 
-             BemsMonitoringPointDataSource.load().done(function (result) {
 
-                 BemsMonitoringPointInfo(result);
 
-             });
 
-         },
 
-         beforeInsertingDataViewModel: function (dataModel, dbModelId) {
 
-             var dfd = $.Deferred();
 
-             var param = {
 
-                 SiteId: dataModel.SiteId(),
 
-                 FacilityCode: dataModel.FacilityCode()
 
-             };
 
-             var isDuplicated = false;
 
-             for (var i = 0; i < BemsMonitoringPointInfo().length; i++) {
 
-                 if (dataModel.Name() == BemsMonitoringPointInfo()[i].Name()) {
 
-                     isDuplicated = true;
 
-                     break;
 
-                 }
 
-             }
 
-             if (!BWA.DataUtil.isValidInputValue(dataModel.Name()))
 
-                 return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)');
 
-             else {
 
-                 if (isDuplicated)
 
-                     return dfd.resolve(false, '이미 동일 정보가 존재합니다.');
 
-                 else {
 
-                     $.when(BWA.api.post('BemsMonitoringPoint/GetMaxPropertyId', param))
 
-                     .done(function (newPid) {
 
-                         if (newPid > 0) {
 
-                             dataModel.PropertyId(newPid);
 
-                             dfd.resolve(true); // hcLee OK good, (true, false 또는 객체로 리턴가능함) 2015 11 19
 
-                         }
 
-                         else dfd.resolve(false, 'ProprttyId 자동 생성에 실패하였습니다!'); // hcLee OK good, (true, false 또는 객체로 리턴가능함) 2015 11 19
 
-                     });
 
-                     return dfd.promise();
 
-                 }
 
-             }
 
-         },
 
-         beforeUpdateDataViewModel: function () {
 
-             var isDuplicated = false;
 
-             for (var i = 0; i < BemsMonitoringPointInfo().length; i++) {
 
-                 if (viewModel.dataModel.Name() == BemsMonitoringPointInfo()[i].Name() && RowName() != BemsMonitoringPointInfo()[i].Name()) {
 
-                     isDuplicated = true;
 
-                     break;
 
-                 }
 
-             }
 
-             if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) {
 
-                 utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
 
-                 return 0;
 
-             }
 
-             else {
 
-                 if (isDuplicated) {
 
-                     utils.toast.show('이미 동일 정보가 존재합니다.', 'error');
 
-                     return 0;
 
-                 }
 
-                 else
 
-                     return 2;
 
-             }
 
-         }
 
-             //if (!isNewInPopup()) return true;
 
-     });
 
-     function InsertButtonClickAction() {
 
-         
 
-         var isExist = ko.observable(false);
 
-         var item = selectedTreeItem();
 
-         if (item != null && item.depth === FACILITY_DEPTH) {
 
-             facilityDataSource.filter([
 
-                 eq('SiteId', BWA.UserInfo.SiteId()),
 
-                 'and',
 
-                 eq('FacilityTypeId', item.data.FacilityTypeId())
 
-             ]);
 
-             facilityDataSource.load().done(function (result) {
 
-                 for (var i = 0; i < result.length; i++) {
 
-                     if (item.data.Name() == result[i].Name()) {
 
-                         isExist(true);
 
-                     }
 
-                 }
 
-                 if (_.isNull(item) || item.depth !== FACILITY_DEPTH || isExist() === false) {
 
-                     utils.toast.show('관제점을 등록할 시설을 선택하여 주십시오.', 'warning');
 
-                 }
 
-                 else {
 
-                     viewModel.popupInsertView();
 
-                 }
 
-             });
 
-         }
 
-         else {
 
-                 utils.toast.show('관제점을 등록할 시설을 선택하여 주십시오.', 'warning');
 
-         }
 
-     }
 
-     viewModel.commandButtonOptions = commandButtonOptions;
 
-     viewModel.handleRemoveSelectedPoints = handleRemoveSelectedPoints;
 
-     popup = viewModel.popup = BWA.Popup.Point.create(viewModel, selectedTreeItem);
 
-     virtualFacilityPopup = viewModel.virtualFacilityPopup = BWA.Popup.VirtualFacility.create(viewModel, selectedTreeItem);
 
-     viewModel.popupInsertButtonOptions = {
 
-         icon: 'add',
 
-         id: 'create',
 
-         title: '관제점등록',
 
-         action: InsertButtonClickAction
 
-     };
 
-     return viewModel;
 
- };
 
 
  |