BemsWebApplication.RegisterCheckSchedule = function(params, viewInfo) { "use strict"; 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, true); var checkScheduleManager = utils.checkSchedule.createScheduleManager(); var cycleTypes = ko.observableArray(), cycleUnits = ko.observableArray(), holidayTypes = ko.observableArray(), orders = ko.observableArray(), businessFields = ko.observableArray(); var searchCycleTypes = ko.observableArray(), searchBusinessFields = ko.observableArray(); var deferredForSearch = new $.Deferred(); var scheduleMultiViewVisible = ko.observable(false), isRegularlyCycleType = ko.observable(false); var selectedScheduleId; var selectedScheduleName = ko.observable(); var scheduleCalendar = null; var exceptionDays = []; var removedDays = []; var scheduleCalendarOptions = { selectable: false, //select: function( start, end ) { // var selectedDate = $G.date( start ); // if( loadedExceptionDays.indexOf( selectedDate ) < 0 ) { // var index = exceptionDays.indexOf( selectedDate ); // if( index < 0 ) { // return; // } // exceptionDays.splice( index, 1 ); // } // removedDays.push( selectedDate ); // scheduleCalendar.pushEvent( selectedScheduleName(), start, true ); //}, editable: true, changedMonth: function(view) { if (scheduleCalendar === null) return; var date = view.calendar.getDate(); var events = checkScheduleManager.generateScheduleEvents(date, viewModel.dataModel); scheduleCalendar.updateEvents(events); }, eventClick: function(event) { if (viewModel.isEditModeInPopup() == false) return; var formattedDate = $G.date(event.start); scheduleCalendar.removeEvent(event.start, undefined, true); var index; if (event.isException) { removedDays.push(formattedDate); index = exceptionDays.indexOf(formattedDate); if (index >= 0) { exceptionDays.splice(index, 1); } scheduleCalendar.pushEvent(selectedScheduleName(), event.start, true); } else { exceptionDays.push(formattedDate); index = removedDays.indexOf(formattedDate); if (index >= 0) { removedDays.splice(index, 1); } scheduleCalendar.pushExceptionEvent(event.start, true); } }, }; var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsFacilitySchedule', { dataSourceOptions: { select: ['SiteId', 'ScheduleId', 'BusinessFieldId', 'CycleTypeId', 'Name', 'ConfirmedUserId', 'IsUse', 'CycleSize', 'StartDate', 'CmBusinessField/Name', 'FmsFacilityCodeCycleType/Name', 'FmsFacilityCodeCycleUnit/Name', 'FmsFacilityCodeHoliday/Name', 'FmsFacilityCodeOrder/Name'], expand: ['CmBusinessField', 'FmsFacilityCodeCycleType', 'FmsFacilityCodeCycleUnit', 'FmsFacilityCodeHoliday', 'FmsFacilityCodeOrder'] }, columns: [ { dataField: 'Number', caption: $G('number'), width: '8%', alignment: 'center', allowFiltering: false }, { dataField: 'CmBusinessField_Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center', allowFiltering: false }, { dataField: 'Name', caption: $G('facilityCheckScheduleName'), width: '18%', 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: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: searchBusinessFields }, { id: 'Name' }], popupWidth: '740px', wordWrapEnabled: true, cellPrepared: function(cellElement, cellInfo) { switch (cellInfo.columnIndex) { case 4: { if (cellInfo.data.CycleTypeId() === $Code.CycleType.Regularly) { $(cellElement).text(cellInfo.data.CycleSize() + ' ' + cellInfo.data.FmsFacilityCodeCycleUnit_Name()); } else { $(cellElement).text('-'); } break; } } }, handleViewShowing: function() { $.when(cycleTypeClassDataSource.load(), businessFieldDataSource.load()).done(function(result1, result2) { cycleTypes(result1[0]); searchCycleTypes($SearchView.createArrayOfSelectBox('CycleTypeId', cycleTypes())); businessFields(result2[0]); searchBusinessFields($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields())); deferredForSearch.resolve(); }); }, 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) { //var dataGrid = $( '#gridCheckGroupContainer' ).dxDataGrid( 'instance' ); //var items = dataGrid.getSelectedRowsData(); //var postData = []; //$.each( items, function( i, item ) { // postData.push( { // SiteId: $KoValue( item.SiteId ), // ScheduleId: selectedScheduleId, // CheckGroupId: $KoValue( item.CheckGroupId ) // } ); //} ); //promises.push( BemsWebApplication.api.post( 'FmsFacilityScheduleToCheckGroup', postData ) ); var promises = []; promises.push(BemsWebApplication.api.postWithDataGrid('FmsFacilityScheduleToCheckGroup', 'gridCheckGroupContainer', { SiteId: BWA.UserInfo.SiteId(), ScheduleId: selectedScheduleId, CheckGroupId: null })); if (exceptionDays.length > 0) { var exceptionViewModel = new BemsWebApplication.FmsFacilityScheduleCheckExceptionDateViewModel(); exceptionViewModel.SiteId(BWA.UserInfo.SiteId()); exceptionViewModel.ScheduleId(selectedScheduleId); $.each(exceptionDays, function(i, formattedDate) { // if( loadedExceptionDays.indexOf( formattedDate ) >= 0 ) return true; exceptionViewModel.ExceptionDate(moment(formattedDate).toDate()); promises.push(BemsWebApplication.db.FmsFacilityScheduleCheckExceptionDate.insert(exceptionViewModel.toJS())); }); } if (removedDays.length > 0) { var removeItem = { SiteId: BWA.UserInfo.SiteId(), ScheduleId: selectedScheduleId }; $.each(removedDays, function(i, formattedDate) { removeItem.ExceptionDate = formattedDate; promises.push(BemsWebApplication.db.FmsFacilityScheduleCheckExceptionDate.remove(removeItem)); }); } return $.when.apply($, promises); //.done( function() { // utils.toast.show( '일정 저장을 성공하였습니다.' ); //} ); }, handlePopupShowing: function(that) { cycleUnitClassDataSource.load().done(function(result) { cycleUnits(result); }); holidayClassDataSource.load().done(function(result) { holidayTypes(result); }); orderClassDataSource.load().done(function(result) { orders(result); }); selectedCheckGroupDataSource.load().done(function(result) { var dataGrid = $('#gridSelectedCheckGroupContainer').dxDataGrid('instance'); dataGrid.refresh(); }); viewModel.currentTabIndex(0); }, handlePopupShown: function(editMode, isNewInPopup, dataModel) { if (scheduleCalendar === null) { scheduleCalendar = utils.fullCalendar.create('scheduleCalendar', scheduleCalendarOptions); //scheduleCalendar = $( '#scheduleCalendar' ); //scheduleCalendar.fullCalendar( calendarOption ); } var checkGroupDataGrid = $('#gridCheckGroupContainer').dxDataGrid('instance'); var selectedCheckGroupdDataGrid = $('#gridSelectedCheckGroupContainer').dxDataGrid('instance'); checkGroupDataGrid.clearSelection(); if (isNewInPopup === false) { var items = utils.datagrid.getItems(selectedCheckGroupdDataGrid); var keys = []; $.each(items, function(i, item) { keys.push({ CheckGroupId: item.CheckGroupId(), SiteId: item.SiteId() }); }); checkGroupDataGrid.selectRows(keys); checkScheduleManager.load(scheduleCalendar.getDate(), dataModel).done(function(events) { scheduleCalendar.updateEvents(events); }); scheduleMultiViewVisible(true); } else { scheduleMultiViewVisible(false); } } }); viewModel.isEditModeInPopup.subscribe(function(value) { if (scheduleCalendar) { scheduleCalendar.setReadOnly(!value); } }); viewModel.dataModel.CycleSizeText = ko.observable(); viewModel.cycleTypes = cycleTypes; viewModel.cycleUnits = cycleUnits; viewModel.holidayTypes = holidayTypes; viewModel.orders = orders; viewModel.businessFields = businessFields; viewModel.dataModel.CycleTypeId.subscribe(function(cycleTypeId) { isRegularlyCycleType(cycleTypeId === $Code.CycleType.Regularly); }); var checkGroupDataSource = $DataSource({ dataSourceOptions: { store: BemsWebApplication.db.FmsFacilityScheduleCheckGroup, select: ['SiteId', 'CheckGroupId', 'Name', 'CmBusinessField/Name'], expand: ['CmBusinessField'], filer: [['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['IsUse', '=', true]] } }); var selectedCheckGroupDataSource = $DataSource({ dataSourceOptions: { store: BemsWebApplication.db.FmsFacilityScheduleToCheckGroup, select: ['SiteId', 'ScheduleId', 'CheckGroupId', 'FmsFacilityScheduleCheckGroup/Name'], expand: ['FmsFacilityScheduleCheckGroup'] } }); var Factory = { dxDataSource: checkGroupDataSource, columns: [ { dataField: 'CmBusinessField_Name', caption: $G('businessFieldName'), width: '25%', alignment: 'center' }, { dataField: 'Name', caption: $G('facilityCheckScheduleName'), width: '45%', alignment: 'center', allowFiltering: false } ], height: 360 }; var selectedFactory = { dxDataSource: selectedCheckGroupDataSource, columns: [ { dataField: 'FmsFacilityScheduleCheckGroup_Name', caption: $G('facilityCheckScheduleCheckGroupName'), width: '45%', alignment: 'center', allowFiltering: false } ], height: 360 }; viewModel.tabsItems = [ { text: '기본 정보' }, { text: '점검 그룹' }, { text: '계획 일정', visible: scheduleMultiViewVisible, } ]; viewModel.currentTabIndex = ko.observable(0); var dataModel = viewModel.dataModel; viewModel.multiViewItems = [ { dataModel: dataModel, viewModel: viewModel, template: 'generalInfo' }, { dataModel: dataModel, viewModel: viewModel, checkGroupFactory: utils.datagrid.defaultOptions($.extend({}, Factory, { visible: viewModel.isEditModeInPopup, dxDataSource: checkGroupDataSource, selection: { mode: 'multiple', allowSelectAll: true }, })), selectedCheckGroupFactory: utils.datagrid.defaultOptions($.extend({}, selectedFactory, { visible: viewModel.viewModeInPopup, dxDataSource: selectedCheckGroupDataSource, })), template: 'checkGroup' }, { dataModel: dataModel, viewModel: viewModel, visible: scheduleMultiViewVisible, template: 'schedule' } ]; //var events = utils.fullCalendar.generateScheduleEvents( '2014-09-10', '2014-09-02', 'test', 1, 1 ); //console.log( events ); viewModel.isRegularlyCycleType = isRegularlyCycleType; return viewModel; };