BemsWebApplication.User = function (params, viewInfo) { 'use strict'; var companyDataSource = BemsWebApplication.db.createDataSource('CmCompany', true, true), departmentDataSource = BemsWebApplication.db.createDataSource('CmDepartment', true, true), positionDataSource = BemsWebApplication.db.createDataSource('CmPosition', true, true), businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true), userGroupDataSource = BemsWebApplication.db.createDataSource('CmUserGroup', true); var CmUserDataSource = BemsWebApplication.db.createDataSource('CmUser'); var UserInfo = ko.observableArray(); var companies = ko.observableArray(), departments = ko.observableArray(), positions = ko.observableArray(), businessFields = ko.observableArray(), userGroups = ko.observableArray(), tabIndex = ko.observable(0); var deferredForSearch = new $.Deferred(); var searchEmploymentTypes = $SearchView.createObservableCodeNamesOfSelectBoxForSearch($G.EmploymentTypeNames), searchEmploymentStatus = $SearchView.createObservableCodeNamesOfSelectBoxForSearch($G.EmploymentStatusNames), searchCompanies = ko.observableArray(), searchDepartments = ko.observableArray(), employmentTypeForSerach = ko.observable(), employmentStatusForSerach = ko.observable(), companyIdForSerach = ko.observable(), departmentIdForSerach = ko.observable(); var eq = BWA.DataUtil.constructEqualFilter; var noteq = BWA.DataUtil.constructNotEqualFilter; // 2016 07 06 hcLee 이 주석이 보인다면 복사 잘못했음, user.js는 센터버젼이 최신임.... function getFilter() { if (BWA.LoginManager.isCenterLogin()) { return [['SiteId', '=', 0]]; } return [ eq('SiteId', BWA.UserInfo.SiteId()), 'and', noteq('UserId', 'admin'), ]; } function Encrypt(theText) { var output = new String; var Temp = new Array(); var Temp2 = new Array(); var TextSize = theText.length; for (var i = 0; i < TextSize; i++) { var rnd = Math.round(Math.random() * 122) + 68; Temp[i] = theText.charCodeAt(i) + rnd; Temp2[i] = rnd; } for (i = 0; i < TextSize; i++) { output += String.fromCharCode(Temp[i], Temp2[i]); } return output; } var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'CmUser', { dataSourceOptions: { select: [ 'SiteId', 'CompanyId', 'DepartmentId', 'UserId', 'Name', 'UserGroupId', 'Certificated', 'BusinessFieldId', 'EmploymentType', 'EmploymentStatus', 'CmPosition/Name', 'CmDepartment/Name', 'CmCompany/Name', 'CmBusinessField/Name', 'CmUserGroup/Name', 'IsScheduleUser', 'IsSI', 'IsMobile' ], expand: ['CmPosition', 'CmDepartment', 'CmCompany', 'CmBusinessField', 'CmUserGroup'], //filter: getFilter(), // 2016 07 06 hcLee 이 주석이 보인다면 복사 잘못했음, user.js는 센터버젼이 최신임.... filter: [ //['UserId', '<>', 'admin'] eq('SiteId', BWA.UserInfo.SiteId()), 'and', noteq('UserId', 'admin'), ], extendOptions: { forceOriginalField: true } }, /*"export": { enabled: true, fileName: "사용자정보관리" },*/ columns: [ { caption: $G('number'), width: '10%', alignment: 'center' }, { dataField: 'UserId', caption: $G('userId'), width: '15%', alignment: 'center' }, { dataField: 'Name', caption: $G('userName'), width: '15%', alignment: 'center' }, { dataField: 'CmUserGroup/Name', caption: $G('permissionGroupName'), width: '15%', alignment: 'center', //customizeText: function(cellInfo) { // return $Name($G.EmploymentTypeNames, cellInfo.value); //} }, { dataField: 'EmploymentStatus', caption: $G('employmentStatus'), width: '15%', alignment: 'center', customizeText: function (cellInfo) { return $Name($G.EmploymentStatusNames, cellInfo.value); } }, { dataField: 'CmCompany/Name', caption: $G('companyName'), width: '15%', alignment: 'center' }, { dataField: 'CmDepartment/Name', caption: $G('departmentName'), width: '15%', alignment: 'center' } // { caption: $G( 'affiliation' ), width: '15%', alignment: 'center' } ], // 2019.04.17 엑셀 출력 기능 추가 ~~~ "export": { enabled: true, fileName: '사용자 목록' }, onExporting: function (e) { e.component.columnOption($G('number'), "visible", false); }, onExported: function (e) { e.component.columnOption($G('number'), "visible", true); }, // ~~~ 2019.04.17 엑셀 출력 기능 추가 //cellPrepared: function( cellElement, cellInfo ) { // if( cellInfo.columnIndex == 5 ) { // //cellInfo.value = cellInfo.displayValue = cellInfo.rowIndex + 1; // //cellInfo.text = cellInfo.rowIndex + 1; // $( cellElement ).text( cellInfo.data.CmCompany_Name() + ' / ' + cellInfo.data.CmDepartment_Name() ); // } //}, promiseDataInSearchView: deferredForSearch.promise(), searchViewItems: [ { id: 'EmploymentType', ignoreValue: 0, defaultValue: 0, value: employmentTypeForSerach, dataSource: searchEmploymentTypes }, { id: 'EmploymentStatus', ignoreValue: 0, defaultValue: 1, value: employmentStatusForSerach, dataSource: searchEmploymentStatus, isChecked: true, }, { id: 'CompanyId', ignoreValue: 0, defaultValue: 0, dataSource: searchCompanies, value: companyIdForSerach, handleChangedValue: handleCompanyChangedValueInSearchView, entityForCheckingUse: 'CmCompany' }, { id: 'DepartmentId', ignoreValue: 0, defaultValue: 0, withCheckId: 'CompanyId', value: departmentIdForSerach, dataSource: searchDepartments, entityForCheckingUse: 'CmDepartment' }, { id: 'Name' }], popupWidth: 720, // hcLee 2016 04 14 handlePopupButtonEdit: function (dataModel) { $("#enddate").dxDateBox({ min: dataModel.StartDate }); }, handleViewShown: function () { /* var dataGrid = $("#gridContainer").dxDataGrid("instance"); dataGrid.option({ "export": { enabled: true, fileName: "사용자정보관리" }, });*/ //searchViewItems.EmploymentStatus.check(true); businessFieldDataSource.load().done(function (dbBusinessFields) { businessFields(dbBusinessFields); }); userGroupDataSource.load().done(function (dbUserGroups) { userGroups(dbUserGroups); }); companyDataSource.load().done(function (dbCompanies) { companies(dbCompanies); searchCompanies($SearchView.createArrayOfSelectBox('CompanyId', dbCompanies)); departments([]); searchDepartments(getDefaultDepartmentsForSearch()); deferredForSearch.resolve(); //BemsWebApplication.app.currentViewInfo.model.handleSearchInSearchView(); // 2016 09 28 }); $("#gridContainer").dxDataGrid({ paging: { pageSize: 18, enabled: true } }); }, handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) { if (!isNewInPopup()) { BWA.DataUtil.setArrayDataSourceFilter(departmentDataSource, 'CompanyId', dataViewModel.CompanyId(), departments); } else { } }, /* beforeUpdateDataViewModel: function () { var keys = BWA.db.extractKeysObject('CmUser', viewModel.dataModel); BWA.db.CmUser.update(keys, viewModel.dataModel.toJS()).done(function (response, responseKey) { //if (popup && popup.handleAfterSave) { // popup.handleAfterSave(response, responseKey); //} }); return 1; }, */ afterUpdateDataViewModel: function (data) { if (data.EmploymentStatus() != 1) { var user = new BemsWebApplication['CmUserViewModel'](); user.SiteId = data.SiteId(); user.UserId = data.UserId(); var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemovePatrolGroupUser', user); promise.done(function (r) { if (r > 0) utils.toast.show('데이터 수정 작업이 성공하였습니다. (휴직이나 퇴직으로 변경되어 ( ' + r + ') 건이 순찰조에서 자동으로 삭제 되었습니다)'); }); } }, // 2016 09 28 hcLee 사용자의 상태가 휴직이나 퇴직이되는 경우 순찰조에서 삭제한다 /* handleSaveButtonInPopup: function (isInsert) { if (isInsert === false) { var user = new BemsWebApplication['CmUserViewModel'](); if (viewModel.dataModel.EmploymentStatus() != 1) { //var dataViewModel = new BemsWebApplication['CmUser'](); //utils.toast.show('휴직이나 퇴직으로 변경된 사용자는 순찰조에서 자동으로 삭제 됩니다', 'error'); DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) { if (result) { //handleConfirmDelete(); user.SiteId = viewModel.dataModel.SiteId(); user.UserId = viewModel.dataModel.UserId(); var promise = BemsWebApplication.api.post('BemsMonitoringPoint/RemovePatrolGroupUser', user); 사 promise.done(function () { ; }); } }); } } },*/ handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); viewModel.isNewInPopup(false); var data = clickRow.data; var dataModel = viewModel.dataModel; dataModel.CompanyName = $KoSet(dataModel.CompanyName, data['CmCompany/Name']); dataModel.DepartmentName = $KoSet(dataModel.DepartmentName, data['CmDepartment/Name']); dataModel.BusinessFieldName = $KoSet(dataModel.BusinessFieldName, data['CmBusinessField/Name']); dataModel.UserGroupName = $KoSet(dataModel.UserGroupName, data['CmUserGroup/Name']); dataModel.IsScheduleUser = $KoSet(dataModel.IsScheduleUser, data.IsScheduleUser()); dataModel.IsSI = $KoSet(dataModel.IsSI, data.IsSI()); dataModel.IsMobile = $KoSet(dataModel.IsMobile, data.IsMobile()); popupVisible(true); }, handlePopupShowing: function (that) { positionDataSource.load().done(function (result) { positions(result); }); CmUserDataSource.filter([ ["SiteId", "=", BWA.UserInfo.SiteId()] ]); CmUserDataSource.load().done(function (result) { UserInfo(result); }); }, // hcLee 2015 12 23 beforeInsertingDataViewModel: function (dataModel, dbModelId) { var dfd = $.Deferred(); //alert(dataModel.Name()); var isDuplicated = false; for (var i = 0; i < UserInfo().length; i++) { if (dataModel.UserId() == UserInfo()[i].UserId()) { isDuplicated = true; break; } } if (dataModel.UserId() == null || dataModel.Name() == null || dataModel.Passwd() == null || dataModel.CompanyId() == null || dataModel.DepartmentId() == null || dataModel.PositionId() == null || dataModel.BusinessFieldId() == null || dataModel.UserGroupId() == null) dfd.resolve(false, '(*) 표시 항목은 필수 입력 사항 입니다!'); if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.UserId())) dfd.resolve(false, '아이디에 공백이 포함되어있습니다. (앞뒤공백 허용안함)'); if (isDuplicated) return dfd.resolve(false, '이미 동일 아이디가 존재합니다.'); else return dfd.resolve(true); if (!chekPassword()) return dfd.resolve(false); }, beforeUpdateDataViewModel: function () { //handlePopupButtonSave: function () { if (_.isEmpty(viewModel.dataModel.UserId()) || _.isEmpty(viewModel.dataModel.Name()) || _.isEmpty(viewModel.dataModel.Passwd()) || viewModel.dataModel.CompanyId() == null || viewModel.dataModel.DepartmentId() == null || viewModel.dataModel.PositionId() == null || viewModel.dataModel.BusinessFieldId() == null || viewModel.dataModel.UserGroupId() == null) { utils.toast.show('(*) 표시 항목은 필수 입력 사항 입니다.', 'error'); return 0; } if (!BWA.DataUtil.isValidInputValue(viewModel.dataModel.UserId())) utils.toast.show(false, '아이디에 공백이 포함되어있습니다. (앞뒤공백 허용안함)', 'error'); if (chekPassword()) return 2; else return 0; } }); function chekPassword() { var mbrId = viewModel.dataModel.UserId(); // id 값 입력 var mbrPwd = viewModel.dataModel.Passwd(); // pw 입력 var check1 = /^(?=.*[a-zA-Z])(?=.*[0-9]).{10,20}$/.test(mbrPwd); //영문,숫자 var check2 = /^(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{10,20}$/.test(mbrPwd); //영문,특수문자 var check3 = /^(?=.*[^a-zA-Z0-9])(?=.*[0-9]).{10,20}$/.test(mbrPwd); //특수문자, 숫자 if (!(check1 || check2 || check3)) { utils.toast.show('비밀번호는 10자~20자리의 영문+숫자+특수문자 중 2종류 이상을 조합하여 사용할 수 있습니다.', 'error'); return false; } if (mbrPwd.search(mbrId) > -1) { utils.toast.show('비밀번호에 아이디가 포함되었습니다.', 'error'); return false; } viewModel.dataModel.Passwd(Encrypt(viewModel.dataModel.Passwd())); return true; } function getDefaultDepartmentsForSearch() { return $SearchView.createDefaultArray('DepartmentId'); } function handleCompanyChangedValueInSearchView(e) { if (e.value === 0) { searchDepartments(getDefaultDepartmentsForSearch()); } else { BWA.DataUtil.setArrayDataSourceFilter(departmentDataSource, 'CompanyId', e.value, searchDepartments, getDefaultDepartmentsForSearch()); } departmentIdForSerach(0); } viewModel.handleSelectBoxChangeCompanyInPopup = function (e) { BWA.DataUtil.setArrayDataSourceFilter(departmentDataSource, 'CompanyId', e.value, departments); viewModel.dataModel.DepartmentId(null); } viewModel.companyDataSource = companies; viewModel.departmentDataSource = departments; viewModel.positionDataSource = positions; viewModel.businessFieldDataSource = businessFields; viewModel.userGroupDataSource = userGroups; viewModel.employmentTypeNames = $G.EmploymentTypeNames; viewModel.employmentStatusNames = $G.EmploymentStatusNames; viewModel.userLicensePopup = BWA.Popup.UserLicense.create(viewModel, params); // 2016 02 18 hcLee 등록팝업 최초 수행후 안보이는 현상 해결 viewModel.dataModel.CompanyName = ko.observable(); viewModel.dataModel.DepartmentName = ko.observable(); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.UserGroupName = ko.observable(); //$SearchView.searchViewItems.EmploymentStatus.check(true); //viewModel.searchViewItems.EmploymentStatus.check(true); //viewModel.handleSearchInSearchView = handleSearchInSearchView; return viewModel; };