BemsWebApplication.PatrolGroup = function (params, viewInfo) { "use strict"; // Permission Index var PI_SEARCH = 0, PI_MODIFICATION = 1, PI_BUSINESS_FIELD = 2; var selectedUserData = ko.observable(); var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; selectedUserData.subscribe(function (value) { if (isMainContactor) { viewModel.dataModel.MainContactorUserId(value.UserId); viewModel.dataModel.MainContactorUserName(value.Name); } else { viewModel.dataModel.SubContactorUserId(value.UserId); viewModel.dataModel.SubContactorUserName(value.Name); } }); var CmPatrolGroupDataSource = BemsWebApplication.db.createDataSource('CmPatrolGroup'); var PatrolGroupInfo = ko.observableArray(); var RowName; var PatrolGroupDataSource = BWA.db.createDataSource('CmPatrolGroup'), // PatrolGroupUserDataSource = BWA.db.createDataSource('CmPatrolGroupUser'), PatrolGroupUserDataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: { select: ['SiteId', 'UserId', 'CmUser/Name', 'CmUser/CmDepartment/Name', ], expand: ['CmUser', 'CmUser/CmDepartment'], 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] ] } }, 'CmPatrolGroupUser'), usersInView = ko.observableArray(), //PatrolGroupPermissionDataArray = ko.observableArray(), deleteDisabled = ko.observable(true), popupVisible = ko.observable(false), selectedPatrolGroup = ko.observable(null), 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 -> PatrolGroupUser var menuDataGridOptions = utils.datagrid.defaultOptions({ //dataSource: PatrolGroupUserDataSource, dataSource: usersInView, width: '100%', //height: 706, height: 685, columns: [ { dataField: 'UserId', caption: '아이디', width: '35%', sortOrder: 'asc' }, //{ dataField: 'CmSite/Name', caption: '아이디', width: '35%', sortOrder: 'asc' }, // { dataField: 'CmPatrolGroup/Name', caption: '아이디', width: '35%', sortOrder: 'asc' }, { dataField: 'CmUser/Name', caption: $G('name'), width: '25%' }, { dataField: 'CmUser/CmDepartment/Name', caption: '부서', width: '25%' }, ], // hcLee 2015 11 09 paging: { enabled: true, pageSize: 19 }, pager: { }, selection: { mode: 'multiple', allowSelectAll: true, }, //rowClick: selectionChanged: function (clickRow) { var array = utils.datagrid.getSelectedRowsData('gridContainer2'); deleteDisabled(!(array.length > 0)); /* if (array.length > 0) $('#delete').attr("disabled", true); else $('#delete').attr("disabled", true); $('#delete').disabled = true; $('#delete').prop("disabled", true); //$('#delete').dxButton('instance').disabled = true; document.getElementById("delete").disabled = true; */ /* var array = utils.datagrid.getSelectedRowsData('gridContainer2'); DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) { if (result) { return BWA.api.post('CmPatrolGroup/DeleteGroupUser', array); } });*/ }, /* contentReadyAction: function(e) { //gridView = e.component; //datagrid.filter(null); },*/ }); var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmPatrolGroup', { height: 685, popupWidth: 480, columns: [ { dataField: 'Number', caption: $G('number'), width: '20%', allowSorting: false }, { dataField: 'Name', caption: '순찰조명', width: '80%' } ], paging: { enabled: true, pageSize: 19 }, /* searchViewItems: [ { id: 'MenuPath' }, { id: 'Name' } ],*/ pager: { }, NoSearchView: true, // 2019.07.25 kgpark 검색버튼 삭제 handleViewShown: function () { sidemenuHashSet = $SideMenu.getSidemenuHashSet(); //$SearchView.setPopupVisibleObservable(null); $SearchView.visibleObservable(false); }, handlePopupShowing2: function (selectedId) { var data = selectedPatrolGroup(); selectedId.SiteId = data.SiteId(); selectedId.PatrolGroupId = data.PatrolGroupId(); selectedId.Name = data.Name(); }, /* handleAfterLoadingModelByKey: function(data, dataViewModel, isNewInPopup) { },*/ /* handlePopupShowing: function(that) { },*/ handlePopupShowing: function (isNewInPopup, dataViewModel) { CmPatrolGroupDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()] ]); CmPatrolGroupDataSource.load().done(function (result) { PatrolGroupInfo(result); }); }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { var data = clickRow.data; RowName = data.Name; selectedPatrolGroup(data); PatrolGroupUserDataSource.filter([ eq('SiteId', data.SiteId()), and, eq('PatrolGroupId', data.PatrolGroupId()), ]); PatrolGroupUserDataSource.load().done(function (users) { usersInView(users); /* PatrolGroupPermissionDataArray(_.map(dbPermissions, function(p) { var menu = sidemenuHashSet[p.MenuId()]; if (_.has(menu, 'Name')) { p.Name = ko.observable(menu.Name); p.MenuPath = ko.observable(menu.MenuPath); } return p; })); */ //gridView.refresh(); //dataGrid.refresh(); $('#gridContainer2').dxDataGrid('instance').refresh(); }); //var data = clickRow.data; }, beforeInsertingDataViewModel: function (dataModel, dbModelId) { var dfd = $.Deferred(); var isDuplicated = false; for (var i = 0; i < PatrolGroupInfo().length; i++) { if (dataModel.Name() == PatrolGroupInfo()[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 < PatrolGroupInfo().length; i++) { if (viewModel.dataModel.Name() == PatrolGroupInfo()[i].Name() && (RowName() != PatrolGroupInfo()[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; } }, // Group 추가 //handleSaveInPopup: function (dataViewModel, popupVisible) { // console.log('save!'); //} }); function handleDelete() { DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) { if (result) { var array = utils.datagrid.getSelectedRowsData('gridContainer2'); var data = selectedPatrolGroup(); var PatrolGroupId = data.PatrolGroupId(); var postData; postData = _.map(array, function (m) { return { SiteId: m.SiteId(), PatrolGroupId: PatrolGroupId, UserId: m.UserId(), }; }); BWA.api.post('CmPatrolGroup/DeleteGroupUser', postData).done(function () { utils.toast.show($G('successDatabaseProcessMsg')); PatrolGroupUserDataSource.load().done(function (users) { usersInView(users); $('#gridContainer2').dxDataGrid('instance').refresh(); }); }); } }); } // GroupUser 추가 function handleUserAdd() { viewModel.userSearchPopup.show(); } function handleEdit() { /* var data = selectedPatrolGroup(); viewModel.dataModel = data; viewModel.dataModel.SiteId = $KoSet(viewModel.dataModel.SiteId, data['SiteId']); viewModel.dataModel.PatrolGroupId = $KoSet(viewModel.dataModel.PatrolGroupId, data['PatrolGroupId']); viewModel.dataModel.Name = $KoSet(viewModel.dataModel.Name, data['Name']); */ //viewModel.popupVisible(false); viewModel.popupVisible(true); //viewModel.popupVisible(true); } //onSelectedMaterials: function(selectedMaterials) { function onSelectedUsers(selectedUsers) { var data = selectedPatrolGroup(); var PatrolGroupId = data.PatrolGroupId(); //$('#gridContainer2').dxDataGrid('instance').refresh(); var postData; postData = _.map(selectedUsers, function (m) { try { return { SiteId: m.SiteId(), PatrolGroupId: PatrolGroupId, UserId: m.UserId(), }; } catch (e) { return { SiteId: m.SiteId, PatrolGroupId: PatrolGroupId, UserId: m.UserId, }; } }); BWA.api.post('CmPatrolGroup/UpdateGroupUser', postData).done(function () { _.each(selectedUsers, function (sm) { // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다. // JD : 팝업에서 전체선택시 추가로 하면 오류 발생함. 이에 대한 회피 코드로 try-catch // JD : 근본적인 원인은 시간 관계상 차후로 넘김 //var found = _.some(PatrolGroupUserDataSource, function (m) { var found = _.some(usersInView(), function (m) { try { return m.UserId() === sm.UserId(); } catch (e) { return m.UserId() === sm.UserId; } }); if (found) return; try { usersInView.push({ SiteId: ko.observable(sm.SiteId()), PatrolGroupId: ko.observable(PatrolGroupId), UserId: ko.observable(sm.UserId()), 'CmUser/Name': ko.observable(sm.Name()), 'CmUser/CmDepartment/Name': ko.observable(sm.CmDepartment_Name()), }); } catch (e) { usersInView.push({ SiteId: ko.observable(sm.SiteId), PatrolGroupId: ko.observable(PatrolGroupId), UserId: ko.observable(sm.UserId), 'CmUser/Name': ko.observable(sm.Name), 'CmUser/CmDepartment/Name': ko.observable(sm.CmDepartment_Name), }); } }); PatrolGroupUserDataSource.filter([ eq('SiteId', data.SiteId()), and, eq('PatrolGroupId', data.PatrolGroupId()), ]); PatrolGroupUserDataSource.load().done(function (users) { usersInView(users); $('#gridContainer2').dxDataGrid('instance').refresh(); }); utils.toast.show($G('successDatabaseProcessMsg')); }); } viewModel.popupVisible.subscribe(function (visible) { var i = {}; }); viewModel.menuDataGridOptions = menuDataGridOptions; viewModel.handleUserAdd = handleUserAdd; viewModel.handleEdit = handleEdit; viewModel.handleDelete = handleDelete; viewModel.selectedPatrolGroup = selectedPatrolGroup; viewModel.deleteDisabled = deleteDisabled; //viewModel.handleSearchInSearchView = handleSearchInSearchView; viewModel.userSearchPopup = $UserSearchPopup(viewModel, selectedUserData, true, onSelectedUsers); viewModel.handleSearchInSearchView2 = function (filter) { var filterA = []; _.each(filter, function (x) { filterA.push(x); }); PatrolGroupUserDataSource.filter(filterA); PatrolGroupUserDataSource.load().done(function (result) { //PatrolGroupPermissionDataArray.load().done(function (result) { //PatrolGroupPermissionDataArray(result); }); }; return viewModel; };