$(function () { 'use strict'; // TODO : 아래 코드 정리 필요 함 //BemsWebApplication.Popup.WorkExecutionRegister = { BWA.Popup = BWA.Popup || {}; BWA.Popup.WorkExecutionRegister = { create: function (viewInfo, viewModel) { var dataModelResult = new BWA.FmsWorkResultViewModel(); var popupVisible = ko.observable(); var isNew = ko.observable(true), isEditMode = ko.observable(true); var facilities = ko.observableArray(), facilitiesInView = ko.observableArray(), businessFields = ko.observableArray(); var facilitySearchPopup = null, facilityFactory = BWA.Factory.Facility, facilityGridView = ko.observable(undefined), facilityDataGridOptions, modifiableFacilityDataGridOptions = undefined; var facilityDataSource = facilityFactory.getBasicDataSourceRef({ dbModeIId: 'FmsWorkOrderToFacility', primaryKeyDataField: 'WorkRequestId' }); var popupOptions = { position: { offset: '0 -50' }, width: '560px', height: 'auto', //shading: false, shadingColor: 'rgba(0,0,0,0.0)', visible: popupVisible, closeOnOutsideClick: false, animation: utils.popup.createAnimation(), shownAction: function () { } }; var toolbarItems = [ { location: 'before', text: '작업수행 - 상세정보' }, { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', clickAction: handlePopupButtonSave } }, { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', clickAction: handlePopupButtonClose } }, ]; function handlePopupButtonSave() { if (isNew()) { if ($G.date(dataModelResult.StartDate()) > $G.date(dataModelResult.EndDate())) { utils.toast.show('작업종료일을 작업시작일 이후로 설정하시기 바랍니다.', 'error'); return; } //BWA.db.FmsWorkOrder.update(viewModel.dataModel.toJS()).done(function () { BWA.db.FmsWorkResult.insert(dataModelResult.toJS()).done( function () { var array = viewModel.popup.facilities(); var postData; var parameters = { SiteId: dataModelResult.SiteId(), WorkRequestId: dataModelResult.WorkRequestId() }; postData = _.map(array, function (f) { return { SiteId: dataModelResult.SiteId(), WorkRequestId: dataModelResult.WorkRequestId(), FacilityCode: f.FacilityCode() }; }); var promise = BWA.api.post('FmsWorkResultToFacility', postData, parameters); promise.done(function () { viewModel.dataModel.StartWorkDate(dataModelResult.StartDate()); var keys = BWA.db.extractKeysObject('FmsWorkOrder', viewModel.dataModel); BWA.db.FmsWorkOrder.update(keys, viewModel.dataModel.toJS()).done(function (res) { utils.toast.show($G('successDatabaseProcessMsg')); popupVisible(false); viewModel.popupVisible(false); viewModel.gridView().refresh(); }); }); } ); //}); } } function handlePopupButtonClose() { popupVisible(false); } function isValidateWithFunction(errorMessage) { if (_.isEmpty(facilities())) { errorMessage.message = '점검을 위한 시설이 없습니다.'; return false; } return true; } function handleBeforePopupShowingPromise(isNewInPopup, dataViewModel, clickRowData) { var workProgressId; if (isNewInPopup()) { workProgressId = $Code.WorkProgress.WORK_PLAN; } else { workProgressId = clickRowData['FmsWorkRequest/WorkProgressId'](); // clickRowData.WorkProgressId(); dataViewModel.WorkProgressId = ko.observable(); dataViewModel.WorkProgressId(workProgressId); } } function handlePopupShowing(isNewInPopup, dataModel, selectedData) { } function handlePopupShown(isEditMode, isNew, dataViewModel) { } // 점검계획 정보가 저장된 후에 호출 된다. // 등록이면 responseKey가 있고, 수정이면 없다. function handleAfterSave(responseKey) { var array = facilities(); if (_.isEmpty(array)) { return; } var siteId, workRequestId;//, businessFieldId; if (_.isUndefined(responseKey)) { var dataModel = viewModel.dataModel; siteId = dataModel.SiteId(); //businessFieldId = dataModel.BusinessFieldId(); workRequestId = dataModel.WorkRequestId(); } else { siteId = responseKey.SiteId; //businessFieldId = responseKey.BusinessFieldId; workRequestId = responseKey.WorkRequestId; } var postData; var parameters = { SiteId: siteId, //BusinessFieldId: businessFieldId, WorkRequestId: workRequestId }; postData = _.map(array, function (f) { return { SiteId: siteId, //BusinessFieldId: businessFieldId, WorkRequestId: workRequestId, FacilityCode: f.FacilityCode() }; }); BWA.api.post('FmsWorkOrderToFacility', postData, parameters); } function handleAfterLoadingModelByKey(data, dataViewModel, isNewInPopup) { // 작업지시 세부 내용은 수정/삭제 할 수 없음 viewModel.visibleEditButton(false); viewModel.visibleDeleteButton(false); var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; facilityDataSource.filter([ eq('SiteId', dataViewModel.SiteId()), and, eq('WorkRequestId', dataViewModel.WorkRequestId()) ]); facilityDataSource.load().done(function (dbFacilities) { facilitiesInView(dbFacilities); }); } function handleBeforeShowingPopupForEdit(rowData, dataViewModel) { dataViewModel.BusinessFieldName(rowData['FmsWorkRequest/CmBusinessField/Name']()); dataViewModel.WorkTypeName(rowData['FmsWorkRequest/FmsWorkCodeType/Name']()); dataViewModel.RequestUserName(rowData['CmUser/Name']()); dataViewModel.WorkProgressName(rowData['FmsWorkRequest/FmsWorkCodeProgress/Name']()); dataViewModel.RejectUserName($KoValue(rowData['CmUser1/Name'])); } popupVisible.subscribe(function (visible) { if (!visible) { facilitiesInView([]); } else { var userInfo = BWA.UserInfo; dataModelResult.SiteId(viewModel.dataModel.SiteId()); dataModelResult.WorkRequestId(viewModel.dataModel.WorkRequestId()); //dataModelResult.Content(viewModel.dataModel.Content()); dataModelResult.Content(''); // hcLee 2016 03 14 //var now = moment(); var time = viewModel.dataModel.StartWorkDate(); dataModelResult.StartDate(time); //BWA.DataUtil.getDateFromDateTime(time) dataModelResult.EndDate(time); dataModelResult.WorkerUserId(userInfo.UserId()); dataModelResult.IsConfirmed(false); viewModel.dataModelResult = dataModelResult; } }); //isEditModeInPopup.subscribe(function (isEditMode) { // if (isEditMode) { // facilities(facilitiesInView.slice(0)); // } //}); viewModel.dataModel.WorkTypeName = ko.observable(); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.RequestUserName = ko.observable(); viewModel.dataModel.RejectUserName = ko.observable(); viewModel.dataModel.WorkProgressName = ko.observable(); facilityDataGridOptions = BWA.Popup.Facility.getReadOnlyDataGridOptions( facilitiesInView, viewModel.viewModeInPopup); modifiableFacilityDataGridOptions = BWA.Popup.Facility.getModifiableDataGridOptions( facilities, viewModel.isEditModeInPopup, facilityGridView); viewModel.facilitySearchPopup = facilitySearchPopup = BWA.Popup.Facility.create(viewModel, undefined, { isMultipleSelect: true, onSelectedFacilities: function (selectedFacilities) { var workRequestId = viewModel.dataModel.WorkRequestId(); _.each(selectedFacilities, function (sf) { // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다. var found = _.some(facilities(), function (f) { return f.FacilityCode() === sf.FacilityCode(); }); if (found) return; facilities.push({ SiteId: sf.SiteId, WorkRequestId: ko.observable(workRequestId), FacilityCode: sf.FacilityCode, Name: sf.Name, }); }); facilityGridView().refresh(); } }); return { isNew: isNew, isEditMode: isEditMode, toolbarItems: toolbarItems, options: popupOptions, facilitySearchPopup: facilitySearchPopup, popupVisible: popupVisible, facilities: facilitiesInView, businessFields: businessFields, isValidateWithFunction: isValidateWithFunction, facilityDataGridOptions: facilityDataGridOptions, modifiableFacilityDataGridOptions: modifiableFacilityDataGridOptions, handleAfterLoadingModelByKey: handleAfterLoadingModelByKey, handleAfterSave: handleAfterSave, handlePopupShowing: handlePopupShowing, handlePopupShown: handlePopupShown, handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit, handleDeleteSelectedFacilities: BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc(facilityGridView, facilities), handleBeforePopupShowingPromise: handleBeforePopupShowingPromise, }; } } });