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