BemsWebApplication.ConfirmCheckSchedule = function( params, viewInfo ) { "use strict"; var selectedScheduleId; var selectedScheduleName = ko.observable(); var scheduleCalendar = null; var checkScheduleManager = utils.checkSchedule.createScheduleManager(); var confirmButtonVisible = ko.observable( true ); var cancelConfirmButtonVisible = ko.observable( false ); var cycleTypeClassDataSource = BemsWebApplication.db.createDataSource( 'FmsFacilityCodeCycleType', true, true ), cycleUnitClassDataSource = BemsWebApplication.db.createDataSource( 'FmsFacilityCodeCycleUnit', true, true ), holidayClassDataSource = BemsWebApplication.db.createDataSource( 'FmsFacilityCodeHoliday', true, true ), orderClassDataSource = BemsWebApplication.db.createDataSource( 'FmsFacilityCodeOrder', true, true ), businessFieldDataSource = BemsWebApplication.db.createDataSource( 'CmBusinessField', true, true ); var searchCycleTypes = ko.observableArray(), searchCycleUnits = ko.observableArray(), searchBusinessFields = ko.observableArray(), searchHolidayClasses = ko.observableArray(), searchOrderClasses = ko.observableArray(), searchConfirmStrings = ko.observableArray( [ $G( 'selectAll' ), $G( 'confirm' ), $G( 'notConfirm' ) ] ); var deferredForSearch = new $.Deferred(); confirmButtonVisible.subscribe( function( value ) { cancelConfirmButtonVisible( !value ); } ); var scheduleCalendarOptions = { selectable: false, editable: false, changedMonth: function( view ) { if( scheduleCalendar === null ) return; var date = view.calendar.getDate(); var events = checkScheduleManager.generateScheduleEvents( date, viewModel.dataModel ); scheduleCalendar.updateEvents( events ); } }; var viewModel = null; viewModel = BWA.DataGrid.createViewWithDataGrid( params, viewInfo, 'FmsFacilitySchedule', { dataSourceOptions: { select: [ 'SiteId', 'ScheduleId', 'BusinessFieldId', 'Name', 'ConfirmedUserId', 'IsUse', 'CycleSize', 'StartDate', 'CmBusinessField/Name', 'FmsFacilityCodeCycleType/Name', 'FmsFacilityCodeCycleUnit/Name', 'FmsFacilityCodeHoliday/Name', 'FmsFacilityCodeOrder/Name' ], expand: [ 'CmBusinessField', 'FmsFacilityCodeCycleType', 'FmsFacilityCodeCycleUnit', 'FmsFacilityCodeHoliday', 'FmsFacilityCodeOrder' ] }, columns: [ { dataField: 'Name', caption: $G( 'facilityCheckScheduleName' ), width: '18%', alignment: 'center', allowFiltering: false }, { dataField: 'CmBusinessField_Name', caption: $G( 'businessFieldName' ), width: '10%', alignment: 'center', allowFiltering: false }, { dataField: 'FmsFacilityCodeCycleType_Name', caption: $G( 'facilityCheckScheduleCycleTypeName' ), width: '10%', alignment: 'center' }, { dataField: 'FmsFacilityCodeCycleUnit_Name', caption: $G( 'facilityCheckScheduleCycleUnitName' ), width: '10%', alignment: 'center' }, { dataField: 'FmsFacilityCodeHoliday_Name', caption: $G( 'facilityCheckScheduleHolidayName' ), width: '10%', alignment: 'center' }, { dataField: 'FmsFacilityCodeOrder_Name', caption: $G( 'facilityCheckScheduleOrderName' ), width: '12%', alignment: 'center' }, { dataField: 'StartDate', caption: $G( 'facilityCheckScheduleStartDate' ), width: '10%', alignment: 'center', allowFiltering: false, customizeText: function( cellInfo ) { return $G.date( cellInfo.value ); } }, { dataField: 'ConfirmedUserId', caption: $G( 'facilityCheckScheduleIsConfirm' ), width: '10%', alignment: 'center', allowFiltering: false, customizeText: function( cellInfo ) { return $G.isConfirm( cellInfo.value ); } }, utils.datagrid.columnIsUse( '10%' ) ], promiseDataInSearchView: deferredForSearch.promise(), searchViewItems: [ { id: 'CycleTypeId', ignoreValue: 0, defaultValue: 0, dataSource: searchCycleTypes }, { id: 'CycleUnitId', ignoreValue: 0, defaultValue: 0, dataSource: searchCycleUnits }, { id: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: searchBusinessFields }, { id: 'HolidayId', ignoreValue: 0, defaultValue: 0, dataSource: searchHolidayClasses }, { id: 'OrderId', ignoreValue: 0, defaultValue: 0, dataSource: searchOrderClasses }, { id: 'StartDate', type: 'dateRange', isOnlyDate: true }, { id: 'ConfirmedUserId', ignoreValue: 0, defaultValue: 0, dataSource: searchConfirmStrings, type: 'checkNull' }, { id: 'Name' } ], useNumberColumn: false, popupWidth: '740px', wordWrapEnabled: true, cellPrepared: function( cellElement, cellInfo ) { switch( cellInfo.columnIndex ) { case 4: { $( cellElement ).text( cellInfo.data.CycleSize() + ' ' + cellInfo.data.FmsFacilityCodeCycleUnit_Name() ); break; } } }, selection: { mode: 'multiple', allowSelectAll: true }, handleViewShowing: function() { $.when( cycleTypeClassDataSource.load(), cycleUnitClassDataSource.load(), businessFieldDataSource.load(), holidayClassDataSource.load(), orderClassDataSource.load() ) .done( function( result1, result2, result3, result4, result5 ) { searchCycleTypes( $SearchView.createArrayOfSelectBox( 'CycleTypeId', result1[0] ) ); searchCycleUnits( $SearchView.createArrayOfSelectBox( 'CycleUnitId', result2[0] ) ); searchBusinessFields( $SearchView.createArrayOfSelectBox( 'BusinessFieldId', result3[0] ) ); searchHolidayClasses( $SearchView.createArrayOfSelectBox( 'HolidayId', result4[0] ) ); searchOrderClasses( $SearchView.createArrayOfSelectBox( 'OrderId', result5[0] ) ); deferredForSearch.resolve(); } ); }, handlePopupShowing: function( that ) { selectedCheckGroupDataSource.load().done( function( result ) { var dataGrid = $( '#gridSelectedCheckGroupContainer' ).dxDataGrid( 'instance' ); dataGrid.refresh(); } ); }, handleAfterLoadingModelByKey: function( data ) { var dataModel = viewModel.dataModel; dataModel.CycleSizeText( data.CycleSize + ' ' + dataModel.CycleUnitName() ); }, handleDataGridRowClick: function( id, dataGrid, clickRow, popupVisible ) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; dataModel.CycleTypeName = $KoSet( dataModel.CycleTypeName, data.FmsFacilityCodeCycleType_Name ); dataModel.CycleUnitName = $KoSet( dataModel.CycleUnitName, data.FmsFacilityCodeCycleUnit_Name ); dataModel.HolidayName = $KoSet( dataModel.HolidayName, data.FmsFacilityCodeHoliday_Name ); dataModel.OrderName = $KoSet( dataModel.OrderName, data.FmsFacilityCodeOrder_Name ); dataModel.BusinessFieldName = $KoSet( dataModel.OrderName, data.CmBusinessField_Name ); selectedScheduleId = data.ScheduleId(); selectedScheduleName = $KoSet( selectedScheduleName, data.Name() ); selectedCheckGroupDataSource.filter( [ [ 'SiteId', '=', BWA.UserInfo.SiteId() ], 'and', [ 'ScheduleId', '=', selectedScheduleId ] ] ); popupVisible( true ); }, handleSaveButtonInPopup: function( isInsert ) { }, handlePopupShown: function() { if( scheduleCalendar === null ) { scheduleCalendar = utils.fullCalendar.create( 'scheduleCalendar', scheduleCalendarOptions ); //scheduleCalendar = $( '#scheduleCalendar' ); //scheduleCalendar.fullCalendar( calendarOption ); } confirmButtonVisible( dataModel.ConfirmedUserId() === undefined || dataModel.ConfirmedUserId() === null ); checkScheduleManager.load( scheduleCalendar.getDate(), dataModel ).done( function( events ) { scheduleCalendar.updateEvents( events ); } ); }, toolbarItemsInPopup: [ { location: 'before', text: $G('checkScheduleConfirm') }, { location: 'after', widget: 'button', options: { text: $G( 'confirm' ), icon: 'save', visible: confirmButtonVisible, clickAction: handlePopupButtonConfirm } }, { location: 'after', widget: 'button', options: { text: $G( 'cancelConfirm' ), icon: 'save', visible: cancelConfirmButtonVisible, clickAction: handlePopupButtonCancelConfirm } } ] } ); function handlePopupButtonConfirm() { postConfirm( [ getPostData( dataModel.SiteId(), dataModel.ScheduleId() ) ] ); viewModel.popupVisible( false ); } function handlePopupButtonCancelConfirm() { postCancelConfirm( [ getPostData( dataModel.SiteId(), dataModel.ScheduleId() ) ] ); viewModel.popupVisible( false ); } viewModel.dataModel.CycleSizeText = ko.observable(); var selectedCheckGroupDataSource = $DataSource( { dataSourceOptions: { store: BemsWebApplication.db.FmsFacilityScheduleToCheckGroup, select: [ 'SiteId', 'ScheduleId', 'CheckGroupId', 'FmsFacilityScheduleCheckGroup/Name' ], expand: [ 'FmsFacilityScheduleCheckGroup' ] } }); var selectedFactory = { dxDataSource: selectedCheckGroupDataSource, columns: [ { dataField: 'FmsFacilityScheduleCheckGroup_Name',caption: $G('facilityCheckScheduleCheckGroupName'),width: '45%',alignment: 'center',allowFiltering: false } ], }; viewModel.tabsItems = [ { text: '기본 정보' }, { text: '점검 그룹' }, { text: '계획 일정' } ]; viewModel.currentTabIndex = ko.observable( 0 ); var dataModel = viewModel.dataModel; viewModel.multiViewItems = [ { dataModel: dataModel, viewModel: viewModel, template: 'generalInfo' }, { dataModel: dataModel, viewModel: viewModel, selectedCheckGroupFactory: utils.datagrid.defaultOptions($.extend({},selectedFactory,{ visible: viewModel.viewModeInPopup, dxDataSource: selectedCheckGroupDataSource, })), template: 'checkGroup' }, { dataModel: dataModel, viewModel: viewModel, template: 'schedule' } ]; function getPostDataFromSelectedItem() { var items = viewModel.gridView().getSelectedRowsData(); var postData = []; $.each( items, function( i, item ) { postData.push( getPostData( $KoValue( item.SiteId ), $KoValue( item.ScheduleId ) ) ); } ); console.log( postData ); return postData; } function getPostData(siteId, scheduleId) { return { SiteId: siteId, ScheduleId: scheduleId, UserId: BWA.UserInfo.UserId(), }; } function postConfirm(postData) { BemsWebApplication.api.post( 'FmsFacilitySchedule/Confirm', postData ).done( function() { utils.toast.show( '확정 작업이 성공하였습니다.' ); viewModel.refreshList(); }); } function postCancelConfirm(postData) { BemsWebApplication.api.post( 'FmsFacilitySchedule/CancelConfirmed', postData ).done( function() { utils.toast.show( '확정 취소 작업이 성공하였습니다.' ); viewModel.refreshList(); }); } viewModel.buttonConfirmSelection = function() { var postData = getPostDataFromSelectedItem(); postConfirm( postData ); }; viewModel.buttonCancelSelection = function() { var postData = getPostDataFromSelectedItem(); postCancelConfirm( postData ); }; return viewModel; };