BemsWebApplication.PatrolCourse = function (params, viewInfo) { "use strict"; // Permission Index var PI_SEARCH = 0, PI_MODIFICATION = 1, PI_BUSINESS_FIELD = 2; var CmPatrolCourseDataSource = BemsWebApplication.db.createDataSource('CmPatrolCourse'); var PatrolCourseInfo = ko.observableArray(); var RowName; /* var commandButtonOptions = [ { icon: 'edit', id: 'create1', title: '순찰코스 순서저장', disabled: disableOrderUpdate, action: handleOrderUpdate }];*/ /* var selectedPatrolPosData = ko.observable(); selectedPatrolPosData.subscribe(function (value) { if (isMainContactor) { viewModel.dataModel.MainContactorlPosId(value.UserId); viewModel.dataModel.MainContactorUserName(value.Name); } else { viewModel.dataModel.SubContactorUserId(value.UserId); viewModel.dataModel.SubContactorUserName(value.Name); } });*/ var PatrolCourseDataSource = BWA.db.createDataSource('CmPatrolCourse'), // PatrolCoursePosDataSource = BWA.db.createDataSource('CmPatrolCoursePos'), PatrolCoursePosDataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: { select: ['SiteId', 'PatrolCourseId', 'PosId', 'CourseOrder', 'CmPatrolCourse/Name', 'CmPatrolPos/Name', 'CmPatrolPos/CmBuilding/Name', 'CmPatrolPos/CmFloor/Name'], //select: ['SiteId', 'PatrolCourseId', 'PosId', 'CourseOrder', 'CmPatroPos/Name', 'CmPatroPos/CmBuilding/Name', 'CmPatroPos/CmFloor/Name'], expand: ['CmPatrolCourse', 'CmPatrolPos', 'CmPatrolPos/CmBuilding', 'CmPatrolPos/CmFloor'], extendOptions: { forceOriginalField: true }, filter: [ ['SiteId', '=', BWA.UserInfo.SiteId()] // 4 //eq('SiteId', 0), // 초기화를 위해서 0 // eq('SiteId', BWA.UserInfo.SiteId()), // and, // ['FmsWorkRequest/WorkProgressId', '=', $Code.WorkProgress.WORKING] // 4 // //, and, ['FmsWorkRequest/WorkProgressId', '<=', 5] ] } }, 'CmPatrolCoursePos'), possInView = ko.observableArray(), //PatrolCoursePermissionDataArray = ko.observableArray(), deleteDisabled = ko.observable(true), popupVisible = ko.observable(false), upDisabled = ko.observable(true), downDisabled = ko.observable(true), reSelectRow = ko.observable(false), disableOrderUpdate = ko.observable(true), selectedPatrolCourse = ko.observable(null), selectedCoursePos = ko.observable(null), rowIndex, viewModel, //gridView, sidemenuHashSet; //var datagrid = $('#EnergySavingControlDataGridViewInSearchView').dxDataGrid('instance'); //var gridView = $('#gridContainer2').dxDataGrid('instance'); //var headerCheckBoxValues = [ko.observable(false), ko.observable(false), ko.observable(false)]; //gridView = $('#gridContainer2').dxDataGrid('instance'); // var dataGrid = $('#gridContainer').dxDataGrid('instance'); // menuDataGridOptions -> PatrolCoursePos var menuDataGridOptions = utils.datagrid.defaultOptions({ //dataSource: PatrolCoursePosDataSource, dataSource: possInView, width: '100%', //height: 706, height: 685, datagridId: 'gridContainer2', dbId: 'CmPatrolCoursePos', //useNumberColumn: true, columns: [ { dataField: 'CourseOrder', caption: '순서', width: '15%', alignment: 'center', sortOrder: 'asc' }, // { dataField: 'PosId', caption: '순찰지점', width: '35%', }, // { dataField: 'CmPatrolCourse/Name', caption: '순찰코스명', width: '35%', }, { dataField: 'CmPatrolPos/Name', caption: '순찰지점명', width: '35%', }, { dataField: 'CmPatrolPos/CmBuilding/Name', caption: '빌딩', width: '25%',}, { dataField: 'CmPatrolPos/CmFloor/Name', caption: '층', width: '25%'}, // { dataField: 'CourseOrder', caption: '순서', width: '25%' }, ], paging: { enabled: true, pageSize: 19 }, pager: { }, selection: { mode: 'multiple', allowSelectAll: true, }, /* handleShowPopup:function(clickdata){ },*/ rowPrepared: function (rowElement, rowInfo) { if (rowInfo.rowType == 'data' && reSelectRow()) { var dataGrid = $('#gridContainer2').dxDataGrid('instance'); if (dataGrid.totalCount() - 1 == rowInfo.dataIndex) { dataGrid.selectRowsByIndexes(rowIndex); upDisabled(rowIndex == 0 ? true : false); downDisabled(rowIndex == dataGrid.totalCount() - 1 ? true : false); reSelectRow(false); } } }, //byKey(key) //getKeyByRowIndex(rowIndex) selectionChanged: function (clickRow) { var array = utils.datagrid.getSelectedRowsData('gridContainer2'); deleteDisabled(!(array.length > 0)); if (array.length == 1) { selectedCoursePos(array[0]); var dataGrid = $('#gridContainer2').dxDataGrid('instance'); //var index = dataGrid.getRowIndexByKey(dataGrid.getSelectedRowKeys()); rowIndex = dataGrid.getRowIndexByKey(clickRow.currentSelectedRowKeys[0]); //dataGrid.selectRowsByIndexes(rowIndexes); upDisabled(rowIndex == 0 ? true : false); downDisabled(rowIndex == dataGrid.totalCount() - 1 ? true : false); } else { if (reSelectRow() == false) { upDisabled(true); downDisabled(true); } } //$('#gridContainer2').dxDataGrid('instance').selectRowsByIndexes(0); /* if (reSelectRow()) { $('#gridContainer2').dxDataGrid('instance').selectRowsByIndexes(rowIndex); reSelectRow(false); }*/ }, /* contentReadyAction: function(e) { //gridView = e.component; //datagrid.filter(null); },*/ }); var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolCourse', { dataSourceOptions: { select: ['SiteId', 'PatrolCourseId', 'Name',], extendOptions: { forceOriginalField: true }, filter: [ ['SiteId', '=', BWA.UserInfo.SiteId()] ] }, height: 685, popupWidth: 480, columns: [ { dataField: 'Number', caption: $G('number'), width: '20%', allowSorting: false }, { dataField: 'Name', caption: '순찰코스명', width: '80%' } ], paging: { enabled: true, pageSize: 19 }, pager: { }, NoSearchView: true, // 2019.07.25 kgpark 검색버튼 삭제 handleViewShown: function () { sidemenuHashSet = $SideMenu.getSidemenuHashSet(); //$SearchView.setPopupVisibleObservable(null); $SearchView.visibleObservable(false); }, handlePopupShowing2: function (selectedId) { var data = selectedPatrolCourse(); selectedId.SiteId = data.SiteId(); selectedId.PatrolCourseId = data.PatrolCourseId(); selectedId.Name = data.Name(); }, /* handleAfterLoadingModelByKey: function(data, dataViewModel, isNewInPopup) { },*/ handlePopupShowing: function (that) { CmPatrolCourseDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()] ]); CmPatrolCourseDataSource.load().done(function (result) { PatrolCourseInfo(result); }); }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { var data = clickRow.data; selectedPatrolCourse(data); LoadCoursePos(); RowName = data.Name; //$('#gridContainer2').dxDataGrid('instance').selectRowsByIndexes(1); }, beforeInsertingDataViewModel: function (dataModel, dbModelId) { var dfd = $.Deferred(); var isDuplicated = false; for (var i = 0; i < PatrolCourseInfo().length; i++) { if (dataModel.Name() == PatrolCourseInfo()[i].Name()) { isDuplicated = true; } } if (!BWA.DataUtil.isValidInputValue(dataModel.Name())) return dfd.resolve(false, '저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)'); else { if (isDuplicated) return dfd.resolve(false, '이미 동일 정보가 존재합니다.'); else return dfd.resolve(true); } }, beforeUpdateDataViewModel: function () { var isDuplicated = false; for (var i = 0; i < PatrolCourseInfo().length; i++) { if (viewModel.dataModel.Name() == PatrolCourseInfo()[i].Name() && (RowName() != PatrolCourseInfo()[i].Name())) { isDuplicated = true; } } if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.Name())) { utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보(*)를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error'); return 0; } else { if (isDuplicated) { utils.toast.show('이미 동일 이름이 존재합니다.', 'error'); return 0; } else return 2; } }, }); function handleOrderUp() { disableOrderUpdate(false); var dataGrid = $('#gridContainer2').dxDataGrid('instance'); //rowIndex--; //dataGrid.selectRowsByIndexes(rowIndex); //return; var data = selectedCoursePos(); var oldOrder = data.CourseOrder(); rowIndex--; //dataGrid.selectRowsByIndexes(rowIndex); //var data2 = dataGrid.byKey(dataGrid.getKeyByRowIndex(rowIndex)) dataGrid.byKey(dataGrid.getKeyByRowIndex(rowIndex)).done(function (dataObject) { data.CourseOrder(dataObject.CourseOrder()); //data.CourseOrder(100); dataObject.CourseOrder(oldOrder); reSelectRow(true); $('#gridContainer2').dxDataGrid('instance').refresh(); }); //dataGrid.selectRowsByIndexes(rowIndex); //var data2 = dataGrid.getSelectedRowsData(); // data.CourseOrder(data2[0].CourseOrder()); //data.CourseOrder(100); // data2[0].CourseOrder(oldOrder); //dataGrid.selectRowsByIndexes(rowIndex); //dataGrid.selectRowsByIndexes(-1); //dataGrid.selectRowsByIndexes(rowIndex); /* var chage = new Array(); var dataGrid = $('#gridContainer2').dxDataGrid('instance'); var data = selectedCoursePos(); chage.push({ SiteId: data.SiteId(), PatrolCourseId: data.PatrolCourseId(), PosId: data.PosId(), CourseOrder: data.CourseOrder() }); rowIndex--; dataGrid.selectRowsByIndexes(rowIndex); data = dataGrid.getSelectedRowsData(); chage.push({ SiteId: data[0].SiteId(), PatrolCourseId: data[0].PatrolCourseId(), PosId: data[0].PosId(), CourseOrder: data[0].CourseOrder() }); reSelectRow(true); BWA.api.post('CmPatrolCourse/ChangeCourseOrder', chage).done(function () { // 재로드하는 걸로 utils.toast.show($G('successDatabaseProcessMsg')); LoadCoursePos(); }); */ } function handleOrderDown() { disableOrderUpdate(false); var dataGrid = $('#gridContainer2').dxDataGrid('instance'); var data = selectedCoursePos(); var oldOrder = data.CourseOrder(); rowIndex++; dataGrid.byKey(dataGrid.getKeyByRowIndex(rowIndex)).done(function (dataObject) { data.CourseOrder(dataObject.CourseOrder()); dataObject.CourseOrder(oldOrder); reSelectRow(true); $('#gridContainer2').dxDataGrid('instance').refresh(); }); //dataGrid.selectRowsByIndexes(rowIndex); //var data2 = dataGrid.getSelectedRowsData(); // data.CourseOrder(data2[0].CourseOrder()); //data.CourseOrder(100); // data2[0].CourseOrder(oldOrder); //dataGrid.selectRowsByIndexes(rowIndex); //dataGrid.selectRowsByIndexes(-1); return; var chage = new Array(); var dataGrid = $('#gridContainer2').dxDataGrid('instance'); var data = selectedCoursePos(); chage.push({ SiteId: data.SiteId(), PatrolCourseId: data.PatrolCourseId(), PosId: data.PosId(), CourseOrder: data.CourseOrder() }); rowIndex++ dataGrid.selectRowsByIndexes(rowIndex); data = dataGrid.getSelectedRowsData(); chage.push({ SiteId: data[0].SiteId(), PatrolCourseId: data[0].PatrolCourseId(), PosId: data[0].PosId(), CourseOrder: data[0].CourseOrder() }); reSelectRow(true); BWA.api.post('CmPatrolCourse/ChangeCourseOrder', chage).done(function () { // 재로드하는 걸로 utils.toast.show($G('successDatabaseProcessMsg')); LoadCoursePos(); }); } function handleDelete() { DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) { if (result) { var array = utils.datagrid.getSelectedRowsData('gridContainer2'); var data = selectedPatrolCourse(); var PatrolCourseId = data.PatrolCourseId(); var postData; postData = _.map(array, function (m) { return { SiteId: m.SiteId(), PatrolCourseId: PatrolCourseId, PosId: m.PosId(), }; }); BWA.api.post('CmPatrolCourse/DeleteCoursePos', postData).done(function () { utils.toast.show($G('successDatabaseProcessMsg')); PatrolCoursePosDataSource.load().done(function (poss) { possInView(poss); $('#gridContainer2').dxDataGrid('instance').refresh(); }); }); } }); } // GroupUser 추가 function handlePosAdd() { viewModel.PatrolPosSearchPopup.show(); } function handleEdit() { /* var data = selectedPatrolCourse(); viewModel.dataModel = data; viewModel.dataModel.SiteId = $KoSet(viewModel.dataModel.SiteId, data['SiteId']); viewModel.dataModel.PatrolCourseId = $KoSet(viewModel.dataModel.PatrolCourseId, data['PatrolCourseId']); viewModel.dataModel.Name = $KoSet(viewModel.dataModel.Name, data['Name']); */ //viewModel.popupVisible(false); viewModel.popupVisible(true); //viewModel.popupVisible(true); } //onSelectedMaterials: function(selectedMaterials) { function onSelectedposs(selectedposs) { if (selectedposs.length <= 0) return; var data = selectedPatrolCourse(); var PatrolCourseId = data.PatrolCourseId(); $('#gridContainer2').dxDataGrid('instance').refresh(); // 여기서 바로 저장 하자 !! var postData; try { postData = _.map(selectedposs, function (m) { return { SiteId: m.SiteId(), PatrolCourseId: PatrolCourseId, BuildingId: m.BuildingId(), FloorId: m.FloorId(), PosId: m.PosId(), }; }); } catch (e) { postData = _.map(selectedposs, function (m) { return { SiteId: m.SiteId, PatrolCourseId: PatrolCourseId, BuildingId: m.BuildingId, FloorId: m.FloorId, PosId: m.PosId, }; }); } BWA.api.post('CmPatrolCourse/AddCoursePos', postData).done(function () { // 재로드하는 걸로 LoadCoursePos(); utils.toast.show($G('successDatabaseProcessMsg')); }); } function handleOrderUpdate() { var dataGrid = $('#gridContainer2').dxDataGrid('instance'); var chage = new Array(); var total = dataGrid.totalCount(); for (var i = 0; i < total; i++) { dataGrid.byKey(dataGrid.getKeyByRowIndex(i)).done(function (data) { chage.push({ SiteId: data.SiteId(), PatrolCourseId: data.PatrolCourseId(), PosId: data.PosId(), CourseOrder: data.CourseOrder() }); }); } BWA.api.post('CmPatrolCourse/UpdateCourseOrder', chage).done(function () { utils.toast.show($G('successDatabaseProcessMsg')); //LoadCoursePos(); disableOrderUpdate(true); }); } function LoadCoursePos() { var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; var data = selectedPatrolCourse(); PatrolCoursePosDataSource.filter([ eq('SiteId', data.SiteId()), and, eq('PatrolCourseId', data.PatrolCourseId()), ]); PatrolCoursePosDataSource.load().done(function (poss) { possInView(poss); $('#gridContainer2').dxDataGrid('instance').refresh(); }); disableOrderUpdate(true); } viewModel.popupVisible.subscribe(function (visible) { var i = {}; }); viewModel.menuDataGridOptions = menuDataGridOptions; viewModel.handlePosAdd = handlePosAdd; viewModel.handleEdit = handleEdit; viewModel.handleDelete = handleDelete; viewModel.handleOrderUpdate = handleOrderUpdate; viewModel.handleOrderUp = handleOrderUp; viewModel.handleOrderDown = handleOrderDown; viewModel.selectedPatrolCourse = selectedPatrolCourse; viewModel.selectedCoursePos = selectedCoursePos; viewModel.deleteDisabled = deleteDisabled; viewModel.upDisabled = upDisabled; viewModel.downDisabled = downDisabled; viewModel.reSelectRow = reSelectRow; viewModel.disableOrderUpdate = disableOrderUpdate; //viewModel.handleSearchInSearchView = handleSearchInSearchView; viewModel.PatrolPosSearchPopup = $PatrolPosSearchPopup(viewModel, null, true, onSelectedposs); //viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData, true, onSelectedposs); //viewModel.toolbarItems.push({location: 'after', widget: 'button', options: { text: $G('close'), icon: 'save', clickAction: handleOrderUpdate } }); // viewModel.commandButtonOptions = commandButtonOptions; viewModel.handleSearchInSearchView2 = function (filter) { var filterA = []; _.each(filter, function (x) { filterA.push(x); }); PatrolCoursePosDataSource.filter(filterA); PatrolCoursePosDataSource.load().done(function (result) { //PatrolCoursePermissionDataArray.load().done(function (result) { //PatrolCoursePermissionDataArray(result); }); }; return viewModel; };