BemsWebApplication.ConstructionPlan = function (params, viewInfo) { "use strict"; var imagefileUrl1 = ko.observable(), imagefileUrl2 = ko.observable(), uploadedFileInfo = {}, //hcLee 2016 03 23 uploadedFileInfo2 = {}, dropZone1 = null, dropZone2 = null; var FmsConstructionDataSource = BemsWebApplication.db.createDataSource('FmsConstruction'); var ConstructionInfo = ko.observableArray(); var RowName; var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter; var isEditModeInPopup = ko.observable(false); // 공사업체 데이터 소스... var partnerDataSource = BemsWebApplication.db.createDataSource('CmPartner', true, false, true), constructionTypeDataSource = BemsWebApplication.db.createDataSource('FmsConstructionCodeType', true, false, true), progressDataSource = BemsWebApplication.db.createDataSource('FmsConstructionCodeProgress'); var partners = ko.observableArray(), constructionTypes = ko.observableArray(), dbProgresses = ko.observableArray(); var constructionTypesForSearch = ko.observableArray(), partnerTypesForSearch = ko.observableArray(); var deferredForSearch = new $.Deferred(); var dataSourceOptions = { select: [ 'SiteId', 'ConstructionId', 'ConstructionTypeId', 'Name', 'StartDate', 'EndDate', 'PartnerId', 'ConstructLocation', 'OwnerShipName', 'CommitmentMan', 'OwnerShipPhoneNo', 'WeldWorkStartTime', 'WeldWorkEndTime', 'GasWorkStartTime', 'GasWorkEndTime', 'PaintWorkStartTime', 'PaintWorkEndTime', 'Comment', 'ProgressId', 'AddDate', 'UpdateDate', 'FmsConstructionCodeProgress/Name', 'CmPartner/Name', 'CmPartner/PhoneNo', 'FmsConstructionCodeType/Name', 'ConstructionDetail', 'InOutStockName', 'FileId1', 'FileId2', 'FileId3', 'CmFile/Name', 'CmFile1/Name', 'CmFile2/Name' ], expand: [ 'FmsConstructionCodeProgress', 'CmPartner', 'FmsConstructionEstimation', 'FmsConstructionCodeType', 'CmFile', 'CmFile1', 'CmFile2' ], extendOptions: { forceOriginalField: true }, filter: [ eq('SiteId', BWA.UserInfo.SiteId()), 'and', ['ProgressId', '<', 3] // 공사진행단계 항목 까지만 가져옴 ] }; function setupDropZone(isEditModeInPopup, dataViewModel) {//2019-11-18 변경 var timer = null; isEditModeInPopup.subscribe(function (value) { if (value) { if (timer) { clearInterval(timer); } timer = setInterval(function () { if ($('#constructionDropZone1').length) { if (_.isNull(dropZone1)) { dropZone1 = BWA.DropZone.create({ id: '#constructionDropZone1', categoryId: $Code.FileCategory.CONSTRUCTION, uploadedFileInfo: uploadedFileInfo, handleRemoveBeforePromise: function () { var keys = BWA.db.extractKeysObject('FmsConstruction', dataViewModel); return BWA.db.FmsConstruction.update(keys, { FileId1: null }); }, handleSuccess: function (fileInfo) { if (uploadedFileInfo.FileId) { dataViewModel.FileId1(fileInfo.FileId); var keys = BWA.db.extractKeysObject('FmsConstruction', dataViewModel); if (keys.ConstructionId != null) { return BWA.db.FmsConstruction.update(keys, { FileId1: fileInfo.FileId }) .done(function (res) { $('#gridContainer').dxDataGrid('instance').refresh(); }); } } }, handleRemovedFile: function () { dataViewModel.FileId1(null); }, }); } } if ($('#constructionDropZone2').length) { if (_.isNull(dropZone2)) { dropZone2 = BWA.DropZone.create({ id: '#constructionDropZone2', categoryId: $Code.FileCategory.CONSTRUCTION, uploadedFileInfo: uploadedFileInfo2, handleRemoveBeforePromise: function () { var keys = BWA.db.extractKeysObject('FmsConstruction', dataViewModel); return BWA.db.FmsConstruction.update(keys, { FileId2: null }); }, handleSuccess: function (fileInfo) { if (uploadedFileInfo2.FileId) { dataViewModel.FileId2(fileInfo.FileId); var keys = BWA.db.extractKeysObject('FmsConstruction', dataViewModel); if (keys.ConstructionId != null) { return BWA.db.FmsConstruction.update(keys, { FileId2: fileInfo.FileId }) .done(function (res) { $('#gridContainer').dxDataGrid('instance').refresh(); }); } } }, handleRemovedFile: function () { dataViewModel.FileId2(null); }, }); } } }, 100); } else { if (timer) { clearInterval(timer); timer = null; } dropZone1 = null; dropZone2 = null; } }); } var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsConstruction', { dataSourceOptions: dataSourceOptions, columns: [ { dataField: 'Number', caption: $G('number'), width: '10%', alignment: 'center' }, { dataField: 'FmsConstructionCodeType/Name', caption: '공사구분', width: '20%', alignment: 'center' }, { dataField: 'Name', caption: '공사명', width: '80%', alignment: 'center' }, { dataField: 'ConstructLocation', caption: '공사위치', width: '30%', alignment: 'center' }, { dataField: 'CmPartner/Name', caption: '공사업체', width: '20%', alignment: 'center' }, { dataField: 'OwnerShipName', caption: '공사책임자', width: '20%', alignment: 'center' }, { dataField: 'StartDate', caption: '시작일', width: '20%', alignment: 'center', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'EndDate', caption: '종료일', width: '20%', alignment: 'center', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, ], popupWidth: '900px', // jks-2015-12-30 팝업넓이조절 //popupWidth: '740px', promiseDataInSearchView: deferredForSearch.promise(), searchViewItems: [ { id: 'Name' }, { id: 'ConstructionTypeId', ignoreValue: 0, defaultValue: 0, dataSource: constructionTypesForSearch }, { id: 'PartnerId', ignoreValue: 0, defaultValue: 0, dataSource: partnerTypesForSearch }, { id: 'StartDate', type: 'dateRange', isOnlyDate: true }, { id: 'EndDate', type: 'dateRange', isOnlyDate: true } ], beforeInsertingDataViewModel: function (dataModel, dbModelId) { var dfd = $.Deferred(); if (dataModel.StartDate() > dataModel.EndDate()) { return dfd.resolve(false, '시작일은 종료일 이전으로 선택해야 합니다.'); } if (dataModel.WeldWorkStartTime() > dataModel.WeldWorkEndTime()) { return dfd.resolve(false, '용접작업시작시간은 용접작업종료시간 이전으로 선택해야 합니다.'); } if (dataModel.GasWorkStartTime() > dataModel.GasWorkEndTime()) { return dfd.resolve(false, '가스공사시작시간은 가스공사종료시간 이전으로 선택해야 합니다.'); } if (dataModel.PaintWorkStartTime() > dataModel.PaintWorkEndTime()) { return dfd.resolve(false, '도장작업시작시간은 도장작업종료시간 이전으로 선택해야 합니다.'); } else { var isDuplicated = false; for (var i = 0; i < ConstructionInfo().length; i++) { if (dataModel.Name() == ConstructionInfo()[i].Name()) { isDuplicated = true; } } if (isDuplicated) return dfd.resolve(false, '이미 동일 이름이 존재합니다.'); else return dfd.resolve(true); } }, beforeUpdateDataViewModel: function () { var dataModel = viewModel.dataModel; if (dataModel.StartDate() > dataModel.EndDate()) { utils.toast.show('시작일은 종료일 이전으로 선택해야 합니다.', 'error'); return 0; } if (dataModel.WeldWorkStartTime() > dataModel.WeldWorkEndTime()) { utils.toast.show('용접작업시작시간은 용접작업종료시간 이전으로 선택해야 합니다.', 'error'); return 0; } if (dataModel.GasWorkStartTime() > dataModel.GasWorkEndTime()) { utils.toast.show('가스공사시작시간은 가스공사종료시간 이전으로 선택해야 합니다.', 'error'); return 0; } if (dataModel.PaintWorkStartTime() > dataModel.PaintWorkEndTime()) { utils.toast.show('도장작업시작시간은 도장작업종료시간 이전으로 선택해야 합니다.', 'error'); return 0; } else { if (dataModel.WeldWorkStartTime() != null) { dataModel.WeldWorkStartTime().setSeconds(0); } if (dataModel.WeldWorkEndTime() != null) { dataModel.WeldWorkEndTime().setSeconds(0); } if (dataModel.GasWorkStartTime() != null) { dataModel.GasWorkStartTime().setSeconds(0); } if (dataModel.GasWorkEndTime() != null) { dataModel.GasWorkEndTime().setSeconds(0); } if (dataModel.PaintWorkStartTime() != null) { dataModel.PaintWorkStartTime().setSeconds(0); } if (dataModel.PaintWorkEndTime() != null) { dataModel.PaintWorkEndTime().setSeconds(0); } } var isDuplicated = false; for (var i = 0; i < ConstructionInfo().length; i++) { if (viewModel.dataModel.Name() == ConstructionInfo()[i].Name() && RowName() != ConstructionInfo()[i].Name()) { isDuplicated = true; } } 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; } }, handleAfterSaveInPopup: function (responseKey, response) {//2019-11-18 변경 viewModel.dataModel.ConstructionId(responseKey.ConstructionId); }, handleSaveButtonInPopup: function (isInsert) {//2019-11-18 변경 if (isInsert === false) {//추가, 변경 여부 if (_.isNull(dropZone1) === false) { if (viewModel.dataModel.FileId1() != null) { //변경 - 그림삭제 var temp1 = { SiteId: BWA.UserInfo.SiteId(), FileId: viewModel.dataModel.FileId1() } BWA.db.CmFile.byKey(temp1).done(function (data) { dropZone1.removeFile(data); dropZone1.processQueue(); }); } else { dropZone1.processQueue();//변경 - 그림 삭제 필요없음 } } } else { if (_.isNull(dropZone1) === false) { //추가 if (viewModel.dataModel.FileId1() == null) { dropZone1.processQueue(); } } } if (isInsert === false) {//추가, 변경 여부 if (_.isNull(dropZone2) === false) { if (viewModel.dataModel.FileId2() != null) { //변경 - 그림삭제 var temp2 = { SiteId: BWA.UserInfo.SiteId(), FileId: viewModel.dataModel.FileId2() } BWA.db.CmFile.byKey(temp2).done(function (data) { dropZone2.removeFile(data); dropZone2.processQueue(); }); } else { dropZone2.processQueue();//변경 - 그림 삭제 필요없음 } } } else { if (_.isNull(dropZone2) === false) { //추가 if (viewModel.dataModel.FileId2() == null) { dropZone2.processQueue(); } } } }, handleBeforeDelete: function () {//2019-11-18 변경 var temp1 = { SiteId: BWA.UserInfo.SiteId(), FileId: viewModel.dataModel.FileId1() } if (temp1.FileId != null) { BWA.db.CmFile.byKey(temp1).done(function (data) { if ($('#constructionDropZone3').length) { if (_.isNull(dropZone1)) { dropZone1 = BWA.DropZone.create({ id: '#constructionDropZone3', categoryId: $Code.FileCategory.CONSTRUCTION }); dropZone1.removeFile(data); dropZone1 = null; } } }); } var temp2 = { SiteId: BWA.UserInfo.SiteId(), FileId: viewModel.dataModel.FileId2() } if (temp2.FileId != null) { BWA.db.CmFile.byKey(temp2).done(function (data) { if ($('#constructionDropZone4').length) { if (_.isNull(dropZone2)) { dropZone2 = BWA.DropZone.create({ id: '#constructionDropZone4', categoryId: $Code.FileCategory.CONSTRUCTION }); dropZone2.removeFile(data); dropZone2 = null; } } }); } }, handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) { if (isNewInPopup() == false) { if (_.isNull(dataViewModel.FileId1()) === false) { imagefileUrl1('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId1())); } else { imagefileUrl1(undefined); } if (_.isNull(dataViewModel.FileId2()) === false) { imagefileUrl2('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.FileId2())); } else { imagefileUrl2(undefined); } //var keys = BWA.db.extractKeysObject('FmsConstruction', dataViewModel); //BWA.db.FmsConstruction.update(keys, dataViewModel.toJS()); } }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; RowName = data.Name; //dataModel.PartnerName = data['CmPartner/Name'](); //dataModel.PartnerPhoneNo = data['CmPartner/PhoneNo'](); dataModel.PartnerName = $KoSet(dataModel.PartnerName, data['CmPartner/Name']()); //dataModel.PartnerPhoneNo = $KoSet(dataModel.PartnerPhoneNo, data['CmPartner/PhoneNo']()); dataModel.ConstructionTypeName = $KoSet(dataModel.ConstructionTypeName, data['FmsConstructionCodeType/Name']()); dataModel.ProgressName = $KoSet(dataModel.ProgressName, data['FmsConstructionCodeProgress/Name']()); if (data['FileId1']() != null) dataModel.AttachmentFileName1(data['CmFile/Name']()); else dataModel.AttachmentFileName1(''); if (data['FileId2']() != null) dataModel.AttachmentFileName2(data['CmFile1/Name']()); else dataModel.AttachmentFileName2(''); popupVisible(true); }, // hcLee 2016 02 01 handlePopupButtonEdit: function (dataModel) { isEditModeInPopup(true); }, handleViewShowing: function (dataModel) { partnerDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), // 공사업체 유형 필터링 'and', eq('PartnerTypeId', 1)]); constructionTypeDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()) // 공사업체 유형 필터링 ]); progressDataSource.filter([ eq('ProgressId', 2), 'or', eq('ProgressId', 3), ]); $.when( partnerDataSource.load(), constructionTypeDataSource.load(), progressDataSource.load() ) .done(function (dbPartners, dbConstructions, dbProgress) { partners(dbPartners[0]); constructionTypes(dbConstructions[0]); dbProgresses(dbProgress[0]); constructionTypesForSearch($SearchView.createArrayOfSelectBox('ConstructionTypeId', constructionTypes())); partnerTypesForSearch($SearchView.createArrayOfSelectBox('PartnerId', partners())); deferredForSearch.resolve(); }); }, handleViewShown: function (dataViewModel, isEditModeInPopup) { setupDropZone(isEditModeInPopup, dataViewModel); }, handleCancelInPopup: function () { isEditModeInPopup(false); }, handlePopupButtonClose: function () { isEditModeInPopup(false); }, handleSaveSuccess: function () { if (_.isNull(dropZone1) === false) { dropZone1.resetUploadedFileInfo(); } if (_.isNull(dropZone2) === false) { dropZone2.resetUploadedFileInfo(); } isEditModeInPopup(false); }, // hcLee 2016 03 23 handlePopupShowing: function (isEditMode, isNew, dataViewModel) { imagefileUrl1(undefined); imagefileUrl2(undefined); if (_.isNull(dropZone1) === false) dropZone1.resetUploadedFileInfo(); if (_.isNull(dropZone2) === false) dropZone2.resetUploadedFileInfo(); if (isNew) { // 신규등록인 경우 dropZone1 = null; dropZone2 = null; } // 이름 중복 방지 FmsConstructionDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', [ 'ProgressId', '<', 3] ]); FmsConstructionDataSource.load().done(function (result) { ConstructionInfo(result); }); }, handlePopupShown: function (isEditMode, isNew, dataViewModel) { //handlePopupShowing: function (isEditMode, isNew, dataViewModel) { var partners = viewModel.partners(); var constructionTypes = viewModel.constructionTypes(); /* imagefileUrl1(undefined); imagefileUrl2(undefined); if (_.isNull(dropZone1) === false) dropZone1.resetUploadedFileInfo(); if (_.isNull(dropZone2) === false) dropZone2.resetUploadedFileInfo(); */ isEditModeInPopup(false); if (isNew) { // 신규등록인 경우 isEditModeInPopup(true); dataViewModel.ProgressId(2); // 공사계획 상태를 '진행' 단계로 초기화 dataViewModel.AddDate($G.date(new Date())); dataViewModel.UpdateDate($G.date(new Date())); if (!_.isEmpty(partners)) { dataViewModel.PartnerId(partners[0].PartnerId()); } if (!_.isEmpty(constructionTypes)) { dataViewModel.ConstructionTypeId(constructionTypes[0].ConstructionTypeId()); } } } }); viewModel.imagefileUrl1 = imagefileUrl1; viewModel.imagefileUrl2 = imagefileUrl2; viewModel.isEditModeInPopup = isEditModeInPopup; viewModel.constructionTypes = constructionTypes; viewModel.partners = partners; viewModel.dbProgresses = dbProgresses; viewModel.dataModel.ConstructionTypeName = ko.observable(); viewModel.dataModel.PartnerName = ko.observable(); //viewModel.dataModel.PartnerPhoneNo = ko.observable(); viewModel.dataModel.ProgressName = ko.observable(); viewModel.dataModel.AttachmentFileName1 = ko.observable(); viewModel.dataModel.AttachmentFileName2 = ko.observable(); viewModel.dataModel.AttachmentFileName3 = ko.observable(); viewModel.dataModel.ProgressId.subscribe(function () { if (viewModel.dataModel.ProgressId() == 3) { viewModel.dataModel.EndDate(new Date()); } }); return viewModel; };