BemsWebApplication.Facility2 = function (params, viewInfo) { "use strict"; var facilityClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); facilityClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['ParentFacilityClassId', '=', null] ]); var facilityClassDataSource2 = BemsWebApplication.db.createDataSource('FmsFacilityCodeClass'); var facilityClasses2 = ko.observableArray(); var buildingDataSource = BemsWebApplication.db.createDataSource('CmBuilding', true), floorDataSource = BemsWebApplication.db.createDataSource('CmFloor', true), zoneDataSource = BemsWebApplication.db.createDataSource('CmZone', true), UserDataSource = BemsWebApplication.db.createDataSource('CmUser', true), facilityDataSource = BemsWebApplication.db.createDataSource('CmFacility', true), fuelTypeDataSource = BemsWebApplication.db.createDataSource('BemsFuelType', true), contractTypeDataSource = BemsWebApplication.db.createDataSource('BemsNoticePriceContractType'), floorDataSource2 = BemsWebApplication.db.createDataSource('CmFloor', true), zoneDataSource2 = BemsWebApplication.db.createDataSource('CmZone', true), contractTypeDataSource2 = BemsWebApplication.db.createDataSource('BemsNoticePriceContractType'); var filePath = "/App_Data/files/form/설비등록양식.xlsx"; var isEditModeInPopup = ko.observable(false); // 설비분류 데이터소스 var facilityTypeDataSource = BemsWebApplication.db.createDataSource('BemsFacilityType'); var facilityTypes = ko.observableArray(); var facility = ko.observableArray(); var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; var buildings = ko.observableArray(), floors = ko.observableArray(), zones = ko.observableArray(), floors2 = ko.observableArray(), zones2 = ko.observableArray(), user = ko.observableArray(), contract = ko.observableArray(), fuelTypes = ko.observableArray(), contractTypes = ko.observableArray(); var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()], searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()], searchBuildings = ko.observableArray(), searchFloors = ko.observableArray(), searchFuelTypes = ko.observableArray(), searchBuildingId = ko.observable(), searchFloorId = ko.observable(); var imagefileUrl = ko.observable(), uploadedFileInfo = {}, dropZone = null; var isMainContactor = true, selectedUserData = ko.observable(), selectedFacility = ko.observable(), selectedFacilityDataInSearchParentPopup = ko.observable(); var searchDeferred = new $.Deferred(); var defaultSearchClassArray = $SearchView.createDefaultArray('FacilityClassId'), defaultSearchBuildingArray = $SearchView.createDefaultArray('BuildingId'), defaultSearchFloorArray = $SearchView.createDefaultArray('FloorId'), defaultSearchContractTypeArray = $SearchView.createDefaultArray('ContractType'); var tabsVisible = ko.observable(false); var currentTabIndex = ko.observable(0); selectedFacilityDataInSearchParentPopup.subscribe(function (value) { viewModel.dataModel.ParentFacilityCode(value.FacilityCode); viewModel.dataModel.ParentFacilityName(value.Name); }); selectedUserData.subscribe(function (value) { if (isMainContactor) { viewModel.dataModel.MainContactorUserId(value.UserId); viewModel.dataModel.MainContactorUserName(value.Name); } else { viewModel.dataModel.SubContactorUserId(value.UserId); viewModel.dataModel.SubContactorUserName(value.Name); } }); var handleFirstClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(); return; } BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray); }; var handleSecondClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(true); return; } BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray); }; var handleBuildingInSearchView = function (e) { if (e.value === 0) { searchFloors(defaultSearchFloorArray.slice(0)); searchFloorId(0); return 0; } BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, searchFloors, defaultSearchFloorArray); } function initializeSearchClasses(onlyThird) { if (onlyThird === undefined || onlyThird === false) { searchFacilityClasses[1](defaultSearchClassArray.slice(0)); searchFacilityClassValues[1](0); } searchFacilityClasses[2](defaultSearchClassArray.slice(0)); searchFacilityClassValues[2](0); } function setupDropZone(isEditModeInPopup, dataViewModel) {//2019-11-11 변경 var timer = null; isEditModeInPopup.subscribe(function (value) { if (value) { if (timer) { clearInterval(timer); } timer = setInterval(function () { if ($('#facilityDropZone').length) { if (_.isNull(dropZone)) { dropZone = BWA.DropZone.create({ id: '#facilityDropZone', categoryId: $Code.FileCategory.FACILITY, uploadedFileInfo: uploadedFileInfo, handleRemoveBeforePromise: function () { var keys = BWA.db.extractKeysObject('CmFacility', dataViewModel); return BWA.db.CmFacility.update(keys, { FileId: null }); }, handleSuccess: function (fileInfo) { if (uploadedFileInfo.FileId) { dataViewModel.FileId(uploadedFileInfo.FileId); var keys = BWA.db.extractKeysObject('CmFacility', dataViewModel); if (keys.FacilityCode != null) { return BWA.db.CmFacility.update(keys, { FileId: uploadedFileInfo.FileId }); } } }, handleRemovedFile: function () { dataViewModel.FileId(null); } }); } } }, 100); } else { if (timer) { clearInterval(timer); timer = null; } dropZone = null; } }); } function FacilityDownload() { var url = ""; if (BemsWebApplication.config.mode == "production") { url = BemsWebApplication.config.endpoints.service.production + filePath; } else { url = BemsWebApplication.config.endpoints.service.local + filePath; } window.location.assign(url); } function FacilityImport() { var inputFileControl = document.getElementById("FILE_IMPORT"); $(document).ready(function () { function changeValue(e) { if (e.currentTarget.value == "") { } else if (!checkFileType(e.currentTarget.value)) { utils.toast.show('정해진 양식으로만 올려주세요!', 'error'); return; } else { var files = e.target.files; //input file 객체를 가져온다. var i, f; for (i = 0; i != files.length; ++i) { f = files[i]; var reader = new FileReader(); //FileReader를 생성한다. //성공적으로 읽기 동작이 완료된 경우 실행되는 이벤트 핸들러를 설정한다. reader.onload = function (e) { if (e) { var data = e.target.result; data = new Uint8Array(data); var EXCELarray = []; var tempEXCELarray = []; var workbook = XLSX.read(data, { type: 'array' }); workbook.SheetNames.forEach(function (item, index, array) { EXCELarray.push(XLSX.utils.sheet_to_json(workbook.Sheets[item])); }); for (var i = 0; i < EXCELarray[0].length; i++) { var tempmaterial = { SiteId: BWA.UserInfo.SiteId(), FacilityTypeId: EXCELarray[0][i]['BEMS 유형 (*)'], FacilityCode: null, FirstClassId: EXCELarray[0][i]['시설 대분류(*)'], SecondClassId: EXCELarray[0][i]['시설 중분류'], ThirdClassId: EXCELarray[0][i]['시설 소분류'], DeviceType: EXCELarray[0][i]['종류'], ParentFacilityCode: null, Name: EXCELarray[0][i]['시설명칭(*)'], Nickname: EXCELarray[0][i]['시설별칭(*)'], Rfid: EXCELarray[0][i]['RFID'], Manufacturer: EXCELarray[0][i]['제조업체'], ManufactureDate: EXCELarray[0][i]['제조일자'], ManufactureSerial: EXCELarray[0][i]['제조번호'], ManufactureModel: EXCELarray[0][i]['제조모델'], Supplier: EXCELarray[0][i]['납품업체'], SupplierPhoneNo: EXCELarray[0][i]['업체전화'], BuildingId: EXCELarray[0][i]['설치위치(대)'], FloorId: EXCELarray[0][i]['설치위치(중)'], ZoneId: EXCELarray[0][i]['설치위치(소)'], InstallDate: EXCELarray[0][i]['설치일자'], OperationStartDate: EXCELarray[0][i]['운전시작일'], FacilityCapacity: EXCELarray[0][i]['시설용량'], FacilityCost: EXCELarray[0][i]['시설비용'], FacilityCount: EXCELarray[0][i]['시설수량'], FacilitySeviceLifeYear: null, FacilityUsage: EXCELarray[0][i]['시설용도'], RatedPowerConsumption: EXCELarray[0][i]['정격전력소비량'], RatedCOP: EXCELarray[0][i]['정격COP'], MainContactorUserId: EXCELarray[0][i]['정담당자'], SubContactorUserId: EXCELarray[0][i]['부담당자'], Note: EXCELarray[0][i]['Note'], Reserved1: null, Reserved2: null, IsUse: EXCELarray[0][i]['사용여부(*)[활성화 or 취소]'], FileId: null, IsVirtualFacility: false, FuelTypeId: EXCELarray[0][i]['연료종류'], ContractType: EXCELarray[0][i]['계약종류'], } // BEMS 유형 if (tempmaterial.FacilityTypeId == null) { utils.toast.show('BEMS 유형을 입력해야합니다(' + (i + 1) + '번 행)', 'error'); return; } else { var cnt = 0; for (var j = 0; j < facilityTypes().length; j++) { if (tempmaterial.FacilityTypeId == facilityTypes()[j].Name()) { tempmaterial.FacilityTypeId = facilityTypes()[j].FacilityTypeId(); break; } else { cnt++; if (cnt == facilityTypes().length) { utils.toast.show('잘못된 BEMS 유형 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } // 시설명칭 if (tempmaterial.Name == null) { utils.toast.show('시설명칭을 입력해야합니다(' + (i + 1) + '번 행)', 'error'); return; } else { tempmaterial.Name = tempmaterial.Name.toString(); } if (tempmaterial.Nickname == null) { utils.toast.show('시설별칭을 입력해야합니다(' + (i + 1) + '번 행)', 'error'); return; } else { tempmaterial.Nickname = tempmaterial.Nickname.toString(); } for (var j = 0; j < facility().length; j++) { if (tempmaterial.Name == facility()[j].Name()) { if (tempmaterial.Nickname == facility()[j].Nickname()) { utils.toast.show('동일한 시설명칭과 시설별칭을 입력할수 없습니다(' + (i + 1) + '번 행)', 'error'); return; } } } //사용여부 if (tempmaterial.IsUse == null) { utils.toast.show('사용여부를 입력해야합니다(' + (i + 1) + '번 행)[활성화 or 취소]', 'error'); return; } else { if (tempmaterial.IsUse == "활성화") { tempmaterial.IsUse = true; } else if (tempmaterial.IsUse == "취소") { tempmaterial.IsUse = false; } else { utils.toast.show('사용여부를 정확히 입력해야합니다(' + (i + 1) + '번 행)[활성화 or 취소]', 'error'); return; } } //시설 대분류 if (tempmaterial.FirstClassId == null) { utils.toast.show('시설 대분류를 입력해야합니다(' + (i + 1) + '번 행)', 'error'); return; } else { var cnt = 0; for (var j = 0; j < facilityClasses2().length; j++) { if ((tempmaterial.FirstClassId == facilityClasses2()[j].Name()) && facilityClasses2()[j].Depth() == 0) { tempmaterial.FirstClassId = facilityClasses2()[j].FacilityClassId(); break; } else { cnt++; if (cnt == facilityClasses2().length) { utils.toast.show('잘못된 시설 대분류 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } //시설 중분류 if (tempmaterial.SecondClassId != null) { var cnt = 0; for (var j = 0; j < facilityClasses2().length; j++) { if ((tempmaterial.SecondClassId == facilityClasses2()[j].Name()) && (tempmaterial.FirstClassId == facilityClasses2()[j].ParentFacilityClassId()) && (facilityClasses2()[j].Depth() == 1)) { tempmaterial.SecondClassId = facilityClasses2()[j].FacilityClassId(); break; } else { cnt++; if (cnt == facilityClasses2().length) { utils.toast.show('잘못된 시설 중분류 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } //시설 소분류 if (tempmaterial.ThirdClassId != null) { var cnt = 0; for (var j = 0; j < facilityClasses2().length; j++) { if ((tempmaterial.ThirdClassId == facilityClasses2()[j].Name()) && (tempmaterial.SecondClassId == facilityClasses2()[j].ParentFacilityClassId()) && (facilityClasses2()[j].Depth() == 2)) { tempmaterial.ThirdClassId = facilityClasses2()[j].FacilityClassId(); break; } else { cnt++; if (cnt == facilityClasses2().length) { utils.toast.show('잘못된 시설 소분류 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.BuildingId != null) { var cnt = 0; for (var j = 0; j < buildings().length; j++) { if (tempmaterial.BuildingId == buildings()[j].Name()) { tempmaterial.BuildingId = buildings()[j].BuildingId(); break; } else { cnt++; if (cnt == buildings().length) { utils.toast.show('잘못된 설치위치(대) 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.FloorId != null) { var cnt = 0; for (var j = 0; j < floors2().length; j++) { if (tempmaterial.FloorId == floors2()[j].Name()) { tempmaterial.FloorId = floors2()[j].FloorId(); break; } else { cnt++; if (cnt == floors2().length) { utils.toast.show('잘못된 설치위치(중) 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.ZoneId != null) { var cnt = 0; for (var j = 0; j < zones2().length; j++) { if (tempmaterial.ZoneId == zones2()[j].Name()) { tempmaterial.ZoneId = zones2()[j].ZoneId(); break; } else { cnt++; if (cnt == zones2().length) { utils.toast.show('잘못된 설치위치(소) 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.MainContactorUserId != null) { var cnt = 0; for (var j = 0; j < user().length; j++) { if (tempmaterial.MainContactorUserId == user()[j].Name()) { tempmaterial.MainContactorUserId = user()[j].UserId(); break; } else { cnt++; if (cnt == user().length) { utils.toast.show('잘못된 정담당자 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.SubContactorUserId != null) { var cnt = 0; for (var j = 0; j < user().length; j++) { if (tempmaterial.SubContactorUserId == user()[j].Name()) { tempmaterial.SubContactorUserId = user()[j].UserId(); break; } else { cnt++; if (cnt == user().length) { utils.toast.show('잘못된 부담당자 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.FuelTypeId != null) { var cnt = 0; for (var j = 0; j < fuelTypes().length; j++) { if (tempmaterial.FuelTypeId == fuelTypes()[j].Name()) { tempmaterial.FuelTypeId = fuelTypes()[j].FuelTypeId(); break; } else { cnt++; if (cnt == fuelTypes().length) { utils.toast.show('잘못된 연료종류를 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.ContractType != null) { var cnt = 0; for (var j = 0; j < contract().length; j++) { if (tempmaterial.ContractType == contract()[j].Name()) { tempmaterial.ContractType = contract()[j].ContractType(); break; } else { cnt++; if (cnt == contract().length) { utils.toast.show('잘못된 계약종류를 입력하였습니다(' + (i + 1) + '번 행)', 'error'); return; } } } } if (tempmaterial.DeviceType != null) tempmaterial.DeviceType = tempmaterial.DeviceType.toString(); if (tempmaterial.Rfid != null) { tempmaterial.Rfid = tempmaterial.Rfid.toString(); for (var j = 0; j < facility().length; j++) { if (facility()[j].Rfid() == tempmaterial.Rfid && tempmaterial.Rfid != "" && tempmaterial.Rfid != null) { utils.toast.show('RFID값이 중복되었습니다(' + (i + 1) + '번 행)', 'error'); return; } } } if (tempmaterial.Manufacturer != null) tempmaterial.Manufacturer = tempmaterial.Manufacturer.toString(); if (tempmaterial.ManufactureSerial != null) tempmaterial.ManufactureSerial = tempmaterial.ManufactureSerial.toString(); if (tempmaterial.ManufactureModel != null) tempmaterial.ManufactureModel = tempmaterial.ManufactureModel.toString(); if (tempmaterial.Supplier != null) tempmaterial.Supplier = tempmaterial.Supplier.toString(); if (tempmaterial.SupplierPhoneNo != null) tempmaterial.SupplierPhoneNo = tempmaterial.SupplierPhoneNo.toString(); if (tempmaterial.FacilityUsage != null) tempmaterial.FacilityUsage = tempmaterial.FacilityUsage.toString(); if (tempmaterial.RatedPowerConsumption != null) tempmaterial.RatedPowerConsumption = tempmaterial.RatedPowerConsumption.toString(); if (tempmaterial.Note != null) tempmaterial.Note = tempmaterial.Note.toString(); if (tempmaterial.FacilityCapacity != null) tempmaterial.FacilityCapacity = tempmaterial.FacilityCapacity.toString(); if (tempmaterial.InstallDate != null) { tempmaterial.InstallDate = parse(tempmaterial.InstallDate); } if (tempmaterial.OperationStartDate != null) { tempmaterial.OperationStartDate = parse(tempmaterial.OperationStartDate); } if (tempmaterial.ManufactureDate != null) { tempmaterial.ManufactureDate = parse(tempmaterial.ManufactureDate); } if (tempmaterial.RatedCOP != null) { if (typeof (tempmaterial.RatedCOP) == "string") { utils.toast.show('정격COP은 숫자만 입력가능합니다(' + (i + 1) + '번 행)', 'error'); return; } else { tempmaterial.RatedCOP = parseFloat(tempmaterial.RatedCOP); } } if (tempmaterial.FacilityCost != null) { if (typeof (tempmaterial.FacilityCost) == "string") { utils.toast.show('시설비용은 숫자만 입력가능합니다(' + (i + 1) + '번 행)', 'error'); return; } else { tempmaterial.FacilityCost = parseInt(tempmaterial.FacilityCost); } } if (tempmaterial.FacilityCount != null) { if (typeof (tempmaterial.FacilityCount) == "string") { utils.toast.show('시설수량은 숫자만 입력가능합니다(' + (i + 1) + '번 행)', 'error'); return; } else { tempmaterial.FacilityCount = parseInt(tempmaterial.FacilityCount); } } tempEXCELarray.push(tempmaterial); } for (var k = 0; k < tempEXCELarray.length; k++) { BWA.db.CmFacility.insert(tempEXCELarray[k]).done(function (response, responseKey) { if (k == tempEXCELarray.length) { facilityDataSource.load().done(function (result5) { facility(result5); utils.toast.show($G('successDatabaseInsertionMsg')); $('#gridContainer').dxDataGrid('instance').refresh(); }); } }).fail(function (error) { utils.toast.show(error); }); } } }; //파일객체를 읽는다. 완료되면 원시 이진 데이터가 문자열로 포함됨. reader.readAsArrayBuffer(f); }//end. for } $("#FILE_IMPORT").val(""); } $("#FILE_IMPORT").on("change", changeValue); }); inputFileControl.click(); } function parse(str) { var y = String(str).substr(0, 4); var m = String(str).substr(4, 2); var d = String(str).substr(6, 2); return new Date(y, m - 1, d); } function checkFileType(filePath) { var fileLen = filePath.length; var lastDot = filePath.lastIndexOf('.'); var fileFormat = filePath.substring(lastDot, fileLen).toLowerCase(); if (fileFormat == ".xls" || fileFormat == ".xlsx") { return true; } else { return false; } } var facilityOptions = BemsWebApplication.Factory.Facility; var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmFacility', { dataSourceOptions: facilityOptions.getDataSourceForDataGrid(), columns: facilityOptions.getColumns([ { dataField: 'FacilityCode', width: '7%' }, { dataField: 'FmsFacilityCodeClass/Name', caption: '시설(대)', width: '7%', alignment: 'center', allowFiltering: false }, { dataField: 'FmsFacilityCodeClass1/Name', caption: '시설(중)', width: '10%', alignment: 'center', allowFiltering: false }, { dataField: 'FmsFacilityCodeClass2/Name', caption: '시설(소)', width: '10%', alignment: 'center', allowFiltering: false }, { dataField: 'Name', width: '35%', alignment: 'left' }, { dataField: 'ManufactureModel', width: '20%', alignment: 'left' }, { dataField: 'FacilityCapacity', caption: '시설용량', width: '20%', alignment: 'left' }, { dataField: 'CmFloor/Name', caption: $G('facilityLocation'), width: '10%', alignment: 'center', allowFiltering: false } ]), "export": { enabled: true, fileName: '설비 정보 목록', }, onExporting: function (e) { e.component.columnOption("FacilityCode", "visible", false); }, onExported: function (e) { e.component.columnOption("FacilityCode", "visible", true); }, popupWidth: '760px', wordWrapEnabled: true, cellPrepared: BemsWebApplication.Factory.Facility.cellPrepared, searchViewItems: [ { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView }, { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView }, { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] }, { id: 'BuildingId', ignoreValue: 0, defaultValue: 0, value: searchBuildingId, dataSource: searchBuildings, handleChangedValue: handleBuildingInSearchView }, { id: 'FloorId', ignoreValue: 0, defaultValue: 0, withCheckId: 'BuildingId', value: searchFloorId, dataSource: searchFloors }, { id: 'Name' } ], promiseDataInSearchView: searchDeferred.promise(), handlePopupButtonEdit: function (dataModel) { isEditModeInPopup(true); }, handleCancelInPopup: function () { isEditModeInPopup(false); }, handlePopupButtonClose: function () { isEditModeInPopup(false); }, handleViewShowing: function () { facilityTypeDataSource.filter([ ['FacilityTypeId', '<', 99] ]); floorDataSource2.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); zoneDataSource2.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); contractTypeDataSource2.filter([ ['FuelTypeId', '>=', 1] ]); // 빌딩 데이터 로드 시점 $.when(facilityClassDataSource.load(), buildingDataSource.load(), facilityTypeDataSource.load(), fuelTypeDataSource.load(), facilityDataSource.load(), UserDataSource.load(), floorDataSource2.load(), zoneDataSource2.load(), contractTypeDataSource2.load() ).done(function (result1, result2, result3, result4, result5, UserData, floorData, zoneData, contractData) { facilityClasses[0](result1[0]); searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(result1[0])); initializeSearchClasses(); buildings(result2[0]); user(UserData[0]); floors2(floorData[0]); zones2(zoneData[0]); contract(contractData[0]); searchBuildings(defaultSearchBuildingArray.slice(0).concat(result2[0])); searchFloors(defaultSearchFloorArray.slice(0)); var fuelTypeItemNull = new BemsWebApplication.BemsFuelTypeViewModel({ FuelTypeId: null, Name: '선택' }); result4[0].unshift(fuelTypeItemNull); fuelTypes(result4[0]); facilityTypes(result3[0]); facility(result5[0]); searchDeferred.resolve(); }); facilityClassDataSource2.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); // 빌딩 데이터 로드 시점 $.when(facilityClassDataSource2.load() ).done(function (result1) { facilityClasses2(result1); }); }, handleViewShown: function (dataViewModel, isEditModeInPopup) { setupDropZone(isEditModeInPopup, dataViewModel); $("#gridContainer").dxDataGrid({ paging: { pageSize: 18 } }); }, handlePopupShowing: function (isNewInPopup) { imagefileUrl(undefined); if (_.isNull(dropZone) === false) dropZone.resetUploadedFileInfo(); if (isNewInPopup() == false) { isEditModeInPopup(false); } else { dropZone = null; isEditModeInPopup(true); } }, handlePopupShown: function (isEditMode, isNewInPopup, dataViewModel) { if (isNewInPopup === false) { isEditModeInPopup(false); } else { dataViewModel.IsVirtualFacility(false); isEditModeInPopup(true); } $.when( facilityDataSource.load() ).done(function (result5) { facility(result5); }); viewModel.searchViewPopup.show(); }, handleSaveSuccess: function () { if (_.isNull(dropZone) === false) { dropZone.resetUploadedFileInfo(); } isEditModeInPopup(false); }, handleAfterDelete: function () { facilityDataSource.load().done(function (result5) { facility(result5); }); }, handleAfterInsert: function (db, db2) { if (db2.FacilityTypeId != 1) return; var dataViewModel = new BemsWebApplication['CmFacilityTempSetViewModel'](); dataViewModel.SiteId = db.SiteId; dataViewModel.FacilityCode = db.FacilityCode; var promise = BemsWebApplication.api.post('BemsMonitoringPoint/AddAirTempSet', dataViewModel); promise.done(function () { }); }, handleAfterSaveInPopup: function (responseKey, response) {//2019-11-11 변경 viewModel.dataModel.FacilityCode(responseKey.FacilityCode); }, handleSaveButtonInPopup: function (isInsert) {//2019-11-11 변경 if (isInsert === false) {//추가, 변경 여부 if (_.isNull(dropZone) === false) { if (viewModel.dataModel.FileId() != null) { //변경 - 그림삭제 var temp = { SiteId: BWA.UserInfo.SiteId(), FileId: viewModel.dataModel.FileId() } BWA.db.CmFile.byKey(temp).done(function (data) { dropZone.removeFile(data); dropZone.processQueue(); }); } else { dropZone.processQueue();//변경 - 그림 삭제 필요없음 } } } else { if (_.isNull(dropZone) === false) { //추가 if (viewModel.dataModel.FileId() == null) { dropZone.processQueue(); } } } }, handleBeforeDelete: function (db) {//2019-11-11 변경 var temp = { SiteId: BWA.UserInfo.SiteId(), FileId: viewModel.dataModel.FileId() } BWA.db.CmFile.byKey(temp).done(function (data) { if ($('#facilityDropZone1').length) { if (_.isNull(dropZone)) { dropZone = BWA.DropZone.create({ id: '#facilityDropZone1', categoryId: $Code.FileCategory.FACILITY }); dropZone.removeFile(data); dropZone = null; } } }); var dataViewModel = new BemsWebApplication['CmFacilityTempSetViewModel'](); dataViewModel.SiteId = db.SiteId; dataViewModel.FacilityCode = db.FacilityCode; var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemoveAirTempSet', dataViewModel); promise.done(function () { }); }, handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) { if (isNewInPopup() == false) { BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.FirstClassId(), facilityClasses[1]).done(function () { BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', dataViewModel.SecondClassId(), facilityClasses[2]); }); BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', dataViewModel.BuildingId(), floors).done(function () { BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', dataViewModel.FloorId(), zones); }); if (_.isNull(dataViewModel.FileId()) === false) { imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId())); } else { //imagefileUrl(undefined); imagefileUrl("images/default.png"); //dataViewModel.imagefileUrl("images/default.png"); } selectedFacility(dataViewModel); } }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; if (data.ParentFacilityCode() != null) { for (var i = 0; i < facility().length; i++) { if (data.ParentFacilityCode() == facility()[i].FacilityCode()) { dataModel.ParentFacilityName(facility()[i].Name()); break; } } } else { dataModel.ParentFacilityName(""); } dataModel.ClassName = $KoSet(dataModel.ClassName, BWA.Factory.Facility.formatClassName( data['FmsFacilityCodeClass/Name'] == undefined ? '' : data['FmsFacilityCodeClass/Name'](), data['FmsFacilityCodeClass1/Name'] == undefined ? '' : data['FmsFacilityCodeClass1/Name'](), data['FmsFacilityCodeClass2/Name'] == undefined ? '' : data['FmsFacilityCodeClass2/Name']())); dataModel.BuildingName = $KoSet(dataModel.BuildingName, data['CmBuilding/Name'] == undefined ? '' : data['CmBuilding/Name']()); dataModel.FloorName = $KoSet(dataModel.FloorName, data['CmFloor/Name'] == undefined ? '' : data['CmFloor/Name']()); dataModel.ZoneName = $KoSet(dataModel.ZoneName, data['CmZone/Name'] == undefined ? '' : data['CmZone/Name']()); dataModel.facilitylocation(dataModel.BuildingName() + " - " + dataModel.FloorName() + " - " + dataModel.ZoneName()); //2016 04 21 dataModel.MainContactorUserName = $KoSet(dataModel.MainContactorUserName, data['CmUser/Name'] == undefined ? '' : data['CmUser/Name']()); dataModel.SubContactorUserName = $KoSet(dataModel.SubContactorUserName, data['CmUser1/Name'] == undefined ? '' : data['CmUser1/Name']()); // jhLee 2016 04 22 dataModel.FuelTypeName = $KoSet(dataModel.FuelTypeName, data['BemsFuelType/Name'] == undefined ? '' : data['BemsFuelType/Name']()); dataModel.ContractTypeName = $KoSet(dataModel.ContractTypeName, data['BemsNoticePriceContractType/Name'] == undefined ? '' : data['BemsNoticePriceContractType/Name']); popupVisible(true); }, beforeInsertingDataViewModel: function (dataModel, dbModelId) { var dfd = $.Deferred(); for (var i = 0; i < facility().length; i++) { if (facility()[i].Rfid() == dataModel.Rfid() && dataModel.Rfid() != "" && dataModel.Rfid() != null) { return dfd.resolve(false, 'RFID값이 중복되었습니다.'); } } return dfd.resolve(true); }, beforeUpdateDataViewModel: function () { for (var i = 0; i < facility().length; i++) { if (facility()[i].Rfid() == viewModel.dataModel.Rfid() && viewModel.dataModel.Rfid() != "" && viewModel.dataModel.Rfid() != null) { if (facility()[i].FacilityCode() != viewModel.dataModel.FacilityCode()) { utils.toast.show('RFID값이 중복되었습니다.', 'error'); return 0; } } } return 2; // 2016 01 19 BaseClass 에서 update한다. } }); contractTypeDataSource.filter('FuelTypeId', -1); floorDataSource.filter('BuildingId', -1); zoneDataSource.filter('FloorId', -1); viewModel.handleSelectBoxChangeFirstClass = function (e) { if (viewModel.dataModel.FirstClassId() != null) { facilityClassDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()], "and", ["Depth", "=", 1], "and", ["ParentFacilityClassId", "=", viewModel.dataModel.FirstClassId()] ]); } facilityClassDataSource.load().done(function (result) { facilityClasses[1](result); }); //BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[1]); viewModel.dataModel.SecondClassId(null); viewModel.dataModel.ThirdClassId(null); }; viewModel.handleSelectBoxChangeSecondClass = function (e) { if (viewModel.dataModel.FirstClassId() != null) { facilityClassDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()], "and", ["Depth", "=", 2], "and", ["ParentFacilityClassId", "=", viewModel.dataModel.SecondClassId()] ]); } facilityClassDataSource.load().done(function (result) { facilityClasses[2](result); }); //BWA.DataUtil.setArrayDataSourceFilter(facilityClassDataSource, 'ParentFacilityClassId', e.value, facilityClasses[2]); viewModel.dataModel.ThirdClassId(null); }; viewModel.handleSelectBoxChangeBuilding = function (e) { if (viewModel.dataModel.BuildingId() != null) { floorDataSource2.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], "and", ['BuildingId', '=', viewModel.dataModel.BuildingId()] ]); } floorDataSource2.load().done(function (result) { floors(result); }); //BWA.DataUtil.setArrayDataSourceFilter(floorDataSource, 'BuildingId', e.value, floors); viewModel.dataModel.FloorId(null); viewModel.dataModel.ZoneId(null); }; viewModel.handleSelectBoxChangeFloor = function (e) { if (viewModel.dataModel.BuildingId() != null && viewModel.dataModel.FloorId() != null) { zoneDataSource2.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], "and", ['BuildingId', '=', viewModel.dataModel.BuildingId()], "and", ['FloorId', '=', viewModel.dataModel.FloorId()] ]); } zoneDataSource2.load().done(function (result) { zones(result); }); //BWA.DataUtil.setArrayDataSourceFilter(zoneDataSource, 'FloorId', e.value, zones); viewModel.dataModel.ZoneId(null); }; viewModel.handleSelectBoxChangeFuelType = function (e) { BWA.DataUtil.setArrayDataSourceFilter(contractTypeDataSource, 'FuelTypeId', e.value, contractTypes).done(function () { var contractTypeItemNull = new BemsWebApplication.BemsNoticePriceContractTypeViewModel({ FuelTypeId: e.value, ContractType: null, Name: '선택' }); contractTypes.unshift(contractTypeItemNull); }); viewModel.dataModel.ContractType(null); }; viewModel.buttonSearchFacility = function () { viewModel.facilitySearchPopup.show(); }; viewModel.buttonSearchMainContactorUser = function (e) { isMainContactor = true; viewModel.userSearchPopup.show(); } viewModel.buttonSearchSubContactorUser = function (e) { isMainContactor = false; viewModel.userSearchPopup.show(); } // JD : 아래를 주석처리 하면 팝업 화면이 깨짐 // JD : 일단 tabsVisible = false, currentTabIndex = 0 으로 초기화 되어 있으므로 나둠 viewModel.tabsOptions = { visible: tabsVisible, selectedIndex: currentTabIndex, dataSource: [ { text: '시설정보' }, { text: '작업이력' }, { text: '하위시설' }, { text: '점검항목' }, { text: '법정항목' }, { text: '운전일자항목' } ] }; viewModel.dataModel.MainContactorUserName = $KoSet(viewModel.dataModel.MainContactorUserName, ''); viewModel.dataModel.SubContactorUserName = $KoSet(viewModel.dataModel.SubContactorUserName, ''); viewModel.dataModel.ParentFacilityName = $KoSet(viewModel.dataModel.ParentFacilityName, ''); viewModel.facilityTypes = facilityTypes; viewModel.dataModel.facilitylocation = ko.observable(); viewModel.dataModel.ClassName = ko.observable(); viewModel.facilityClasses = facilityClasses; viewModel.searchFacilityClasses = searchFacilityClasses; viewModel.buildings = buildings; viewModel.floors = floors; viewModel.zones = zones; viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData); viewModel.facilitySearchPopup = BWA.Popup.Facility.create(viewModel, selectedFacilityDataInSearchParentPopup); viewModel.fuelTypes = fuelTypes; viewModel.contractTypes = contractTypes; viewModel.isEditModeInPopup = isEditModeInPopup; viewModel.FacilityDownload = FacilityDownload; viewModel.FacilityImport = FacilityImport; var multiViewDataSource = [{ viewModel: viewModel, imagefileUrl: imagefileUrl, template: 'facility' }]; viewModel.searchViewPopup = BWA.Popup.SearchView.create({ parentPopupId: 'popupDetail', parentPopupVisible: viewModel.popupVisible, handleSearch: function (filter, searchItems) { } }); viewModel.multiViewOptions = { height: '740px', selectedIndex: currentTabIndex, dataSource: multiViewDataSource }; return viewModel; };