| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 | 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;};
 |