infrastructureModule .controller('UserManageController', ['$scope', '$log', 'userService', 'orgService', 'uiGridConstants', 'SweetAlert', 'projectService', 'roleService', '$translate', 'enums', function ($scope, $log, userService, orgService, uiGridConstants, SweetAlert, projectService, roleService, $translate, enums) { 'use strict'; /***********************************************************new code start*********************************************************/ //Clear user model var newUser = function () { $scope.isAdd = true; $scope.editUserModel = {}; resetErrorStatus(); $('#addUserPop').modal('show'); }; //Initial user list var initUser = function () { userService.getUserTreeList().success(function (userData) { $scope.userList = userData; selectedUser($scope.userList[0].subUsers[0]); getProjectByUserId($scope.userList[0].subUsers[0].id); }); }; //select tree node event var selectedUser = function (user) { if (user.id === constant.guid.empty) { return; } $scope.selectUser = user; $scope.selectUser.statusName = $scope.selectUser.status === enums.userStatus.disabled ? $translate.instant('UserStateDisable') : ($scope.selectUser.status === enums.userStatus.active ? $translate.instant('UserStateEnable') : ($scope.selectUser.status === enums.userStatus.inActive ? $translate.instant('UserStateUnActive') : ($scope.selectUser.status === enums.userStatus.locked ? $translate.instant('UserStateLocked') : $translate.instant('UserStateUnknow')))); if ($scope.selectUser.organizationID) { orgService.getSingleOrg($scope.selectUser.organizationID).success(function (orgData) { $scope.selectUser.OrgName = orgData.name; }); } else { $scope.selectUser.OrgName = ''; } getProjectByUserId($scope.selectUser.id); }; //Load user info by userId var loadUser = function (userId) { $scope.isAdd = false; resetErrorStatus(); userService.getSingleUser(userId).success(function (userData) { $scope.editUserModel.IsAdmin = userData.isAdmin; $scope.editUserModel.ID = userData.ID; $scope.editUserModel.UserName = userData.userName; $scope.editUserModel.Status = userData.status; $scope.editUserModel.OrganizationID = userData.organizationID; $scope.editUserModel.Email = userData.email; $scope.editUserModel.OrgName = userData.orgName; $scope.editUserModel.RoleIDs = userData.roleIDs; $scope.editUserModel.RoleNames = userData.roleNames; $scope.editUserModel.CreateTime = userData.createTime; $scope.editUserModel.Password = userData.password; }); $('#addUserPop').modal('show'); }; //Save role info var saveUser = function () { if (!($('#userForm').valid())) { return; } if ($scope.isAdd) { userService.addUser($scope.editUserModel).success(function (or) { if (or) { if (or.result === true) { SweetAlert.success($translate.instant('AddUserSuccess')); $scope.editUserModel = {}; initUser(); } else { SweetAlert.warning($translate.instant(or.resultMsg)); } } }); } else { userService.updateUser($scope.editUserModel).success(function (or) { if (or) { if (or.result === true) { SweetAlert.success($translate.instant('UpdateUserSuccess')); $scope.editUserModel = {}; initUser(); } else { SweetAlert.warning($translate.instant(or.resultMsg)); } } }); } $('#addUserPop').modal('hide'); }; //disable user account var disableUser = function (user) { SweetAlert.swal({ title: $translate.instant('Confirm') + $translate.instant('StopUse') + '?', text: $translate.instant('Confirm') + $translate.instant('StopUse') + user.userName, type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: $translate.instant('Confirm'), cancelButtonText: $translate.instant('Cancel'), closeOnConfirm: false, closeOnCancel: true }, function (isConfirm) { if (isConfirm) { // 选中 userService.enableOrDisableUser(user.id, 0).success(function (or) { if (or) { if (or.result === true) { $scope.selectUser.status = enums.userStatus.disabled; $scope.selectUser.statusName = $translate.instant('StopUse'); SweetAlert.success($translate.instant('DisableUserSuccess')); } else { SweetAlert.warning($translate.instant(or.resultMsg)); } } }); } }); }; //enable user account var enableUser = function (userId) { userService.enableOrDisableUser(userId, enums.userStatus.active).success(function (or) { if (or) { if (or.result === true) { $scope.selectUser.status = enums.userStatus.active; $scope.selectUser.statusName = $translate.instant('Enable'); SweetAlert.success($translate.instant('EnableUserSuccess')); } else { SweetAlert.warning($translate.instant(or.resultMsg)); } } }) }; //get project list by userid var getProjectByUserId = function (userId) { userService.getProjectListByUserId(userId).success(function (projectData) { var curProject = null; projectData.forEach(function (p) { if (!curProject) { curProject = p; p.nameDisplay = p.name; p.organizationNameDisplay = p.organizationName; p.yearDisplay = p.year; } else { if (p.id == curProject.id) { p.nameDisplay = ''; p.organizationNameDisplay = ''; p.yearDisplay = ''; } else { curProject = p; p.nameDisplay = p.name; p.organizationNameDisplay = p.organizationName; p.yearDisplay = p.year; } } }); $scope.gridOptionsProjectList.data = projectData; }); }; //add project pop up var addProjectPopUp = function () { if (!$scope.selectUser) { SweetAlert.warning($translate.instant('SelectUserFirst')); return; } if ($scope.selectUser.status === 0) { SweetAlert.warning($translate.instant('DisabledUser')); return; } projectService.getProjectExceptSelected($scope.selectUser.id).success(function (allProjectData) { //set index number, ui-grid have no $$index var projectIndex = 1; var curProject = null; allProjectData.forEach(function (p) { if (!curProject) { curProject = p; p.index = projectIndex++; p.nameDisplay = p.name; p.organizationNameDisplay = p.organizationName; p.yearDisplay = p.year; p.industryNameDisplay = p.industryName; } else { if (p.id == curProject.id) { p.nameDisplay = ''; p.organizationNameDisplay = ''; p.yearDisplay = ''; p.industryNameDisplay = ''; } else { curProject = p; p.index = projectIndex++; p.nameDisplay = p.name; p.organizationNameDisplay = p.organizationName; p.yearDisplay = p.year; p.industryNameDisplay = p.industryName; } } }); $scope.gridOptionsAllProjectList.data = allProjectData; }); $scope.gridApiAllProject.selection.clearSelectedRows(); $('#addProjectPop').modal('show'); }; //add project to user var addProject = function () { var selectedProject = $scope.gridApiAllProject.selection.getSelectedRows(); if (selectedProject && selectedProject.length === 0) { showInfo($translate.instant('AssignProject'), $translate.instant('SelectOneProjectToAdd'), 'addProjectPop'); return; } var selectedProjectIds = []; if (selectedProject) { selectedProject.forEach(function (s) { selectedProjectIds.push({ 'projectID': s.id, 'serviceTypeID': s.serviceTypeID }); }); } var userProject = {}; userProject.UserId = $scope.selectUser.id; userProject.ProjectIds = selectedProjectIds; userService.addProjectToUser(userProject).success(function (or) { if (or) { if (or.result === true) { SweetAlert.success($translate.instant('AddProjectToUserSuccess')); getProjectByUserId($scope.selectUser.id); $('#addProjectPop').modal('hide'); } else { SweetAlert.warning($translate.instant(or.resultMsg)); } } }); }; //remove project from user var removeProject = function () { var selectedProject = $scope.gridApiProject.selection.getSelectedRows(); if (selectedProject && selectedProject.length === 0) { SweetAlert.warning($translate.instant('SelectOneProjectToDelete')); return; } var selectedProjectIds = []; if (selectedProject) { selectedProject.forEach(function (s) { selectedProjectIds.push({ 'projectID': s.id, 'serviceTypeID': s.serviceTypeID }); }); } var userProject = {}; userProject.UserId = $scope.selectUser.id; userProject.ProjectIds = selectedProjectIds; userService.removeProjectFromUser(userProject).success(function (or) { if (or) { if (or.result === true) { SweetAlert.success($translate.instant('RemoveProjectFromUserSuccess')); getProjectByUserId($scope.selectUser.id); $scope.gridApiProject.selection.clearSelectedRows(); } else { SweetAlert.warning($translate.instant(or.resultMsg)); } } }); }; //assign role to project var assignRole = function (event, project) { if ($('.assign-user-box').is(":hidden")) { $('.assign-user-box').css('top', event.clientY + document.body.scrollTop); $('.assign-user-box').css('left', event.clientX - 110); $(".assign-user-box").show(); } else { $(".assign-user-box").hide(); } $(document).one("click", function () { $(".assign-user-box").hide(); }); event.stopPropagation(); $scope.roleList = []; getRoleByService(project); //set currentProject $scope.curProject = project; }; //get role by serviceType var getRoleByService = function (project) { var selectedProjectIds = []; selectedProjectIds.push({ 'projectID': project.id, 'serviceTypeID': project.serviceTypeID }); var userProject = {}; userProject.UserId = $scope.selectUser.id; userProject.ProjectIds = selectedProjectIds; roleService.getRoleListByRoleTypeId(project.serviceTypeID).success(function (roleData) { //get project's own roles userService.getProjectRoles(userProject).success(function (checkedRole) { $scope.roleChecked = checkedRole; //checked own roles roleData.forEach(function (r) { if ($.inArray(r.id, $scope.roleChecked) > -1) { r.isChecked = true; } }); $scope.roleList = roleData; }); }); }; //add or remove role to project var setRoleToProject = function (role) { $log.debug(role.isChecked); $log.debug(role.id); var selectedProjectIds = []; selectedProjectIds.push({ 'projectID': $scope.curProject.id, 'serviceTypeID': $scope.curProject.serviceTypeID }); var userProject = {}; userProject.UserId = $scope.selectUser.id; userProject.ProjectIds = selectedProjectIds; userProject.RoleID = role.id; if (role.isChecked) { userProject.IsAdd = true; userService.operateProjectRole(userProject).success(function (or) { }); } else { userProject.IsAdd = false; userService.operateProjectRole(userProject).success(function (or) { }); } }; var resources = { userNameRequired: $translate.instant('RequireUserName'), userEmailRequired: $translate.instant('RequireEmail'), userEmailCheck: $translate.instant('RequireCorrectEmail'), userOrgRequired: $translate.instant('RequireOrganization') }; var validator = $('#userForm').validate({ errorClass: "has-error", rules: { inputUserName: { required: true }, inputUserEmail: { required: true, email: true }, orgName: { required: true } }, messages: { inputUserName: { required: resources.userNameRequired }, inputUserEmail: { required: resources.userEmailRequired, email: resources.userEmailCheck }, orgName: { required: resources.userOrgRequired } }, errorPlacement: function (error, element) { setErrorStyle(error, element); } }); var setErrorStyle = function (error, element) { if (element.hasClass('has-error')) { element.parent().addClass('has-error'); error.insertAfter(element); error.addClass('label'); } if (element[0].name === 'orgName') { element.parent().addClass('col-xs-9'); element.parent().addClass('padding-left-zero'); } }; var resetErrorStatus = function () { validator.resetForm(); var currentForm = $('#userForm'); $(currentForm).find('.has-error').removeClass('has-error'); }; var showOperateLogPop = function () { $scope.isShowLog = true; // $('#showOperatePop').modal('show'); }; $scope.getGridHeight = function () { return { height: ($(".user-manage .project-list-container").height() - $(".user-manage .project-list-container .buttons").height()) + "px" }; }; //init page (function initialize() { $log.debug('UserManageController.ctor()...'); $scope.userList = []; $scope.isAdd = false; //To save new role model or edit role model $scope.editUserModel = {}; /*************************new variables****************************/ $scope.selectUser = {}; $scope.searchText = ''; $scope.roleList = []; $scope.roleChecked = []; $(".assign-user-box").on("click", function (e) { e.stopPropagation(); }); $scope.gridOptionsProjectList = { rowHeight: 55, selectionRowHeaderWidth: 55, enableSorting: false, enableColumnMenus: false, enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER, enableRowSelection: true, enableSelectAll: true, columnDefs: [ { field: 'name', name: $translate.instant('ProjectNameCol'), width: '29.5%', headerCellClass: 'cell-text-align-left', cellTemplate: '<div><span>{{row.entity.nameDisplay}}<span></div>' }, { field: 'organizationName', name: $translate.instant('ProjectCompanyCol'), width: '23.5%', headerCellClass: 'cell-text-align-left', cellTemplate: '<div><span>{{row.entity.organizationNameDisplay}}</span></div>' }, { field: 'year', name: $translate.instant('ProjectYearCol'), width: '11.8%', headerCellClass: 'cell-text-align-center', cellTemplate: '<div class="cell-text-align-center"><span>{{row.entity.yearDisplay}}</span></div>' }, { field: 'serviceTypeName', name: $translate.instant('ProjectServiceCol'), width: '17.6%', headerCellClass: 'cell-text-align-left', cellTemplate: '<div><span>{{row.entity.serviceTypeName}}</span></div>' }, { name: $translate.instant('AssignRoleCol'), width: '17.6%', headerCellClass: 'cell-text-align-center', enableFiltering: false, cellTemplate: '<div class="cell-text-align-center">' + '<a class="assignA" href="javascript:void(0)" ng-click="grid.appScope.assignRole($event,row.entity)"> <i class="material-icons">rate_review</i></a>' + '</div>' } ], onRegisterApi: function (gridApi) { $scope.gridApiProject = gridApi; } }; $scope.gridOptionsAllProjectList = { rowHeight: 55, selectionRowHeaderWidth: 55, enableSorting: false, enableColumnMenus: false, enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER, enableRowSelection: true, enableSelectAll: true, columnDefs: [ { field: 'index', name: $translate.instant('SequenceNoCol'), width: 90, headerCellClass: 'cell-text-align-center', enableFiltering: false, cellTemplate: '<div class="cell-text-align-center"><span>{{row.entity.index}}<span></div>' }, { field: 'name', name: $translate.instant('ProjectNameCol'), width: 250, headerCellClass: 'cell-text-align-left', cellTemplate: '<div><span>{{row.entity.nameDisplay}}<span></div>' }, { field: 'organizationName', name: $translate.instant('ProjectCompanyCol'), width: 200, headerCellClass: 'cell-text-align-left', cellTemplate: '<div><span>{{row.entity.organizationNameDisplay}}</span></div>' }, { field: 'year', name: $translate.instant('ProjectYearCol'), width: 100, headerCellClass: 'cell-text-align-center', cellTemplate: '<div class="cell-text-align-center"><span>{{row.entity.yearDisplay}}</span></div>' }, { field: 'serviceTypeName', name: $translate.instant('ProjectServiceCol'), width: 220, headerCellClass: 'cell-text-align-left', cellTemplate: '<div><span>{{row.entity.serviceTypeName}}</span></div>' } ], onRegisterApi: function (gridApi) { $scope.gridApiAllProject = gridApi; } }; initUser(); //Save user info $scope.saveUser = saveUser; //Load user info by userId $scope.loadUser = loadUser; //Clear user model $scope.newUser = newUser; //Enable user $scope.enableUser = enableUser; //Disable user $scope.disableUser = disableUser; //Select user $scope.selectedUser = selectedUser; //Assign role $scope.assignRole = assignRole; //Add project pop up $scope.addProjectPopUp = addProjectPopUp; //Add project $scope.addProject = addProject; //Remove project $scope.removeProject = removeProject; //Set role to project $scope.setRoleToProject = setRoleToProject; $scope.resetErrorStatus = resetErrorStatus; $scope.showOperateLogPop = showOperateLogPop; })(); } ]);