BemsWebApplication.WorkApproval = function (params, viewInfo) { "use strict"; //권한설정 var hasnotModificationPermission = ko.observable(true); var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName); var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true), workTypeDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeType'), progressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress'), businessFields = ko.observableArray(), workTypes = ko.observableArray(), ExdataSource = ko.observableArray(), progresses = ko.observableArray(); var isAddHistoryButton = ko.observable(false); var isWorkDone = ko.observable(true); var isEditHistoryButton = ko.observable(false); var isVisibleExecutionButton = ko.observable(true); var isVisibleApproalButton = ko.observable(true); var popup, addWorkResultCheckItemPopup, confirmDueDatePopup = null; var workResultCheckItemMaterialPopup = null; var WorkResultCheckItemFacilityPopup = null; //var workApprovalMaterialPopup = null; //workExecutionRegisterPopup var FmsMaterialExdataSource = new DevExpress.data.DataSource({ store: BemsWebApplication.odata.FmsMaterialEx, requireTotalCount: true, pageSize: 10000 }); FmsMaterialExdataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()] ]); // hcLee 2018 01 29 --> var imagefileUrl1 = ko.observable(), imagefileUrl2 = ko.observable(), dropZone1 = null, dropZone2 = null, uploadedFileInfo = {}, uploadedFileInfo2 = {}; // <-- hcLee 2018 01 29 var deferredForSearch = new $.Deferred(); var workTypesForSearch = ko.observableArray(), businessFieldsForSearch = ko.observableArray(), progressesForSearch = ko.observableArray(); var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter, noteq = BWA.DataUtil.constructNotEqualFilter; var selectedFacilityData = ko.observable(), selectedUserData = params.selectedUserData || ko.observable(); var dataSourceOptions = { select: [ 'SiteId', 'WorkRequestId', 'StartDate', 'EndDate', 'ConfirmedDate', 'ConfirmedUserId', 'IsConfirmed', 'CauseClassId', 'Content', 'FmsWorkRequest/WorkTypeId', 'FmsWorkOrder/Title', 'FmsWorkOrder/OrderDate', 'FmsWorkRequest/WorkProgressId', 'CmUser/Name', // 작업자 'CmUser1/Name', // 승인자 'FmsWorkRequest/FmsWorkCodeType/Name', 'FmsWorkRequest/CmBusinessField/Name', 'FmsWorkRequest/FmsWorkCodeProgress/Name', 'FmsWorkRequest/BusinessFieldId', 'FmsWorkOrder/Content', 'FmsWorkRequest/Content', 'FmsWorkRequest/StartWorkDate', 'ConfirmDesc', ], expand: [ 'FmsWorkRequest', 'FmsWorkOrder', 'FmsWorkRequest/FmsWorkCodeType', 'FmsWorkRequest/CmBusinessField', 'FmsWorkRequest/FmsWorkCodeProgress', 'FmsWorkOrder/CmBusinessField', 'CmUser', 'CmUser1'], extendOptions: { forceOriginalField: true } }; if (!useBusinessFiltering) { dataSourceOptions.filter = [ eq('SiteId', BWA.UserInfo.SiteId()), and, ['FmsWorkRequest/WorkProgressId', '=', 5], ]; } else { dataSourceOptions.filter = [ eq('SiteId', BWA.UserInfo.SiteId()), and, ['FmsWorkRequest/WorkProgressId', '=', 5], and, [eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]]; } var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsWorkResult', { popupWidth: 890, dataSourceOptions: dataSourceOptions, columns: [ { dataField: 'WorkRequestId', caption: $G('number'), width: '8%', alignment: 'center' }, { dataField: 'FmsWorkRequest/CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center' }, { dataField: 'FmsWorkRequest/FmsWorkCodeType/Name', caption: $G('workTypeName'), width: '10%', alignment: 'center' }, { dataField: 'FmsWorkOrder/OrderDate', caption: $G('orderedDate'), width: '12%', alignment: 'center', sortOrder: 'desc', visible: false, customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'StartDate', caption: $G('startDate'), width: '12%', alignment: 'center', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'EndDate', caption: '종료일', width: '12%', alignment: 'center', customizeText: function (cellInfo) { return $G.date(cellInfo.value); } }, { dataField: 'FmsWorkOrder/Title', caption: '작업명', width: '35%', alignment: 'center' }, { dataField: 'FmsWorkRequest/FmsWorkCodeProgress/Name', caption: $G('workProgressName'), width: '10%', alignment: 'center' }, { dataField: 'CmUser/Name', caption: '작업자', width: '15%', alignment: 'center' }, { dataField: 'CmUser1/Name', caption: '승인자', width: '15%', alignment: 'center', visible: false }, { dataField: 'FmsWorkRequest/Content', caption: '신청내용', width: '0%', alignment: 'center' }, ], promiseDataInSearchView: deferredForSearch.promise(), searchViewItems: _.compact([ { id: 'FmsWorkRequest/BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch }, //{ id: 'WorkTypeId', ignoreValue: 0, defaultValue: 0, dataSource: workTypesForSearch }, { id: 'CmUser/Name' }, { id: 'CmUser1/Name' }, { id: 'FmsWorkOrder/Title' }, //{ id: 'FmsWorkRequest/WorkProgressId', ignoreValue: 0, defaultValue: 0, dataSource: progressesForSearch }, 2016 02 26 { id: 'StartDate', type: 'dateRange', isOnlyDate: true }, { id: 'EndDate', type: 'dateRange', isOnlyDate: true } ]), getAddedToolbarItemsInPopup: function (e) { var isEditModeInPopup = e.isEditModeInPopup; //var isVisibleApproalButton = e.dataViewModel.IsConfirmed; return [ { location: 'after', widget: 'button', options: { text: '승인', icon: 'add', type: 'success', visible: isVisibleApproalButton, clickAction: showConfirmDueDate, disabled: hasnotModificationPermission } }, //{ // location: 'after', widget: 'button', options: { // text: '작업이력수정', icon: 'save', // clickAction: function () { // if (popup && popup.modifyWorkItem) { // popup.modifyWorkItem(); // } // } // } //}, //{ // location: 'after', widget: 'button', options: { // text: $G('facilityInsertion'), icon: 'search', visible: isEditModeInPopup, // clickAction: function () { // popup.facilitySearchPopup.show(); // } // } //}, //{ // location: 'after', widget: 'button', options: { // text: $G('facilityDeletion'), icon: 'remove', type: 'danger', visible: isEditModeInPopup, // clickAction: function () { // if (popup && popup.handleDeleteSelectedFacilities) { // popup.handleDeleteSelectedFacilities(); // } // } // } //} ]; }, beforeInsertingDataViewModel: function (dataModel) { return true; }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; dataModel.WorkTypeId(data['FmsWorkRequest/WorkTypeId']()); viewModel.dataModel.BusinessFieldId = ko.observable(); viewModel.dataModel.BusinessFieldId(data['FmsWorkRequest/BusinessFieldId']()); if (data.IsConfirmed()) { isVisibleApproalButton(false); } else { isVisibleApproalButton(true); } if (popup && popup.handleBeforeShowingPopupForEdit) { //hcLee 2015 12 29 popup.IsConfirmJob(true); popup.handleBeforeShowingPopupForEdit(data, dataModel);//추가 } popupVisible(true); workResultCheckItemMaterialPopup.visible(true); //workApprovalMaterialPopup.visible(true); }, handleBeforePopupShowingPromise: function () { if (popup && popup.handleBeforePopupShowingPromise) { popup.handleBeforePopupShowingPromise.apply(popup, arguments); } }, handleAfterLoadingModelByKey: function () { if (popup && popup.handleAfterLoadingModelByKey) { popup.handleAfterLoadingModelByKey.apply(popup, arguments); } }, handlePopupShowing: function () { if (popup && popup.handlePopupShowing) { popup.handlePopupShowing.apply(this, arguments); } }, handlePopupShown: function (editMode, isNewInPopup, dataModel) { if (popup && popup.handlePopupShown) { popup.handlePopupShown.apply(this, arguments); } }, handleSaveButtonInPopup: function (isInsert) { if (isInsert === false) { if (popup && popup.handleAfterSave) { popup.handleAfterSave(undefined); } } }, handleAfterSaveInPopup: function (responseKey, response) { if (popup && popup.handleAfterSave) { popup.handleAfterSave(responseKey, response); var commonParameters = { SiteId: dataModel.SiteId(), WorkRequestId: dataModel.WorkRequestId() }; BWA.api.post('WorkScheduleRun', null, commonParameters); } }, handleViewShowing: function (dataModel) { //권한설정 hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName)); FmsMaterialExdataSource.load().done(function (result) { if (result != null) { viewModel.dataModel.MaterialExdataSource(result); } }).fail(function (error) { utils.toast.show(error); }); var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName) if (useBusinessFiltering) { dataSourceOptions.filter.push('and'); dataSourceOptions.filter.push([eq('FmsWorkRequest/BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('FmsWorkRequest/BusinessFieldId', 1)]); businessFieldDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)] ]); } $.when( businessFieldDataSource.load(), workTypeDataSource.load(), progressDataSource.load() ).done(function (businessFieldResult, workTypeResult, progressResult) { businessFields(businessFieldResult[0]); workTypes(workTypeResult[0]); progresses(progressResult[0]); businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields())); workTypesForSearch($SearchView.createArrayOfSelectBox('WorkTypeId', workTypes())); progressesForSearch($SearchView.createArrayOfSelectBox('ProgressId', progresses())); deferredForSearch.resolve(); }); }, handleViewShown: function () { setupDropZone(addWorkResultCheckItemPopup.isEditMode, addWorkResultCheckItemPopup.workCheckItemViewModel); }, hasnotModificationPermission: hasnotModificationPermission //권한설정 }); viewModel.isEditHistoryButton = isEditHistoryButton; viewModel.isAddHistoryButton = isAddHistoryButton; viewModel.isWorkDone = isWorkDone; viewModel.dataModel.MaterialExdataSource = ko.observable(); viewModel.businessFields = businessFields; viewModel.workTypes = workTypes; viewModel.dataModel.WorkTypeId = ko.observable(); viewModel.dataModel.ConfirmDueDate = ko.observable(); viewModel.dataModel.IsConfirmDueDate = ko.observable(false); viewModel.isAddPopup = ko.observable(false); viewModel.isApprovalMode = ko.observable(true); viewModel.isWorkHistory = ko.observable(false); // hcLee 2018 01 29 --> viewModel.imagefileUrl1 = imagefileUrl1; viewModel.imagefileUrl2 = imagefileUrl2; // <-- hcLee 2018 01 29 popup = viewModel.popup = BWA.Popup.CurrentWork.create(viewInfo, viewModel); addWorkResultCheckItemPopup = viewModel.addWorkResultCheckItemPopup = BWA.Popup.AddWorkResultCheckItem.create(viewInfo, viewModel, popup.refreshListData); confirmDueDatePopup = viewModel.confirmDueDatePopup = BWA.Popup.ConfirmDueDate.create(viewModel); workResultCheckItemMaterialPopup = viewModel.workResultCheckItemMaterialPopup = BWA.Popup.WorkResultCheckItemMaterial.create(viewInfo, viewModel); WorkResultCheckItemFacilityPopup = viewModel.WorkResultCheckItemFacilityPopup = BWA.Popup.WorkResultCheckItemFacility.create(viewInfo, viewModel); //workApprovalMaterialPopup = viewModel.workApprovalMaterialPopup = BWA.Popup.WorkApprovalMaterial.create(viewInfo, viewModel); //workExecutionRegisterPopup = viewModel.workExecutionRegisterPopup = BWA.Popup.WorkExecutionRegister.create(viewInfo, viewModel); function showConfirmDueDate() { // 정기검사/법정검사 인 경우 작업확정일자 선택 팝업 띄움 if (viewModel.dataModel.WorkTypeId() <= $Code.WorkType.LEGAL_CHECK) { confirmDueDatePopup.show(); } else { // 그 외 작업인 경우 바로 승인 실행 approvalWorkResult(); } } viewModel.popupOptions.position = { offset: '-200 0' }; viewModel.popupOptions.height = '930px'; // 작업확정일자 팝업 Visible Subscription... confirmDueDatePopup.popupVisible.subscribe(function (value) { if (value === true) { confirmDueDatePopup.handlePopupShown(); } else { if (viewModel.dataModel.IsConfirmDueDate()) { approvalWorkResult(); } } }); function approvalWorkResult() { viewModel.dataModel.ConfirmedDate(new Date()); viewModel.dataModel.IsConfirmed(true); viewModel.dataModel.ConfirmedUserId(BWA.UserInfo.UserId()); // hcLee 여기서 작업마감일 업데이트가 필요하다? 일단 여기다 추가 //viewModel.dataModel.EndDate(new Date()); var keys = BWA.db.extractKeysObject('FmsWorkResult', viewModel.dataModel); BWA.db.FmsWorkResult.update(keys, viewModel.dataModel.toJS()).done(function (res) { var OrderContent = viewModel.dataModel.OrderContent(); var RequestContent = viewModel.dataModel.RequestContent(); var FmsWorkOrderkeys = BWA.db.extractKeysObject('FmsWorkOrder', viewModel.dataModel); var FmsWorkRequestkeys = BWA.db.extractKeysObject('FmsWorkRequest', viewModel.dataModel); BWA.db.FmsWorkOrder.update(FmsWorkOrderkeys, { Content: OrderContent }).done(function () { BWA.db.FmsWorkRequest.update(FmsWorkRequestkeys, { Content: RequestContent }).done(function () { var parameters = { SiteId: viewModel.dataModel.SiteId(), WorkRequestId: viewModel.dataModel.WorkRequestId(), WorkProgressId: $Code.WorkProgress.WORK_CONFIRM, IsConfirmDueDate: viewModel.dataModel.IsConfirmDueDate(), ConfirmDueDate: $G.date(viewModel.dataModel.ConfirmDueDate()), UserId: BWA.UserInfo.UserId(), }; // FmsWorkRequest 업데이트: WorkProgressId(6) BWA.api.post('FmsWorkRequest', null, parameters).done(function () { var cP = { SiteId: 1, //WorkRequestId: dataModel.WorkRequestId() }; BWA.api.post('WorkScheduleRun', null, cP).done(function () { // 자재 테이블 업데이트 필요, 작업 승인 , API 에서 처리 완료 utils.toast.show($G('successDatabaseUpdateMsg')); viewModel.popupOptions.visible(false); viewModel.gridView().refresh(); }); }); }); }); }); } ///////////////////////2019-11-25 변경 function setupDropZone(isEditModeInPopup, dataViewModel) { var timer = null; isEditModeInPopup.subscribe(function (value) { if (value) { if (timer) { clearInterval(timer); } timer = setInterval(function () { if ($('#workcheckitemDropZone1').length) { if (_.isNull(dropZone1)) { dropZone1 = BWA.DropZone.create({ id: '#workcheckitemDropZone1', categoryId: $Code.FileCategory.WORK, uploadedFileInfo: uploadedFileInfo, handleRemoveBeforePromise: function () { var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel); return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId1: null }); }, handleSuccess: function (fileInfo) { if (uploadedFileInfo.FileId) { dataViewModel.FileId1(fileInfo.FileId); var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel); if (keys.CheckItemId != null) { return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId1: fileInfo.FileId }) .done(function (res) { popup.refreshListData(); }); } } }, handleRemovedFile: function () { dataViewModel.FileId1(null); }, }); viewModel.dropZone1 = dropZone1; } } if ($('#workcheckitemDropZone2').length) { if (_.isNull(dropZone2)) { dropZone2 = BWA.DropZone.create({ id: '#workcheckitemDropZone2', categoryId: $Code.FileCategory.WORK, uploadedFileInfo: uploadedFileInfo2, handleRemoveBeforePromise: function () { var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel); return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId2: null }); }, handleSuccess: function (fileInfo) { if (uploadedFileInfo.FileId) { dataViewModel.FileId2(fileInfo.FileId); var keys = BWA.db.extractKeysObject('FmsWorkResultCheckItem', dataViewModel); if (keys.CheckItemId != null) { return BWA.db.FmsWorkResultCheckItem.update(keys, { FileId2: fileInfo.FileId }) .done(function (res) { popup.refreshListData(); }); } } }, handleRemovedFile: function () { dataViewModel.FileId2(null); }, }); viewModel.dropZone2 = dropZone2; } } }, 100); } else { if (timer) { clearInterval(timer); timer = null; } dropZone1 = null; dropZone2 = null; } }); } return viewModel; };