(function() { 'use strict'; angular .module('app') .controller('StaffCtrl', StaffCtrl); StaffCtrl.$inject = ['$scope', 'smartRequest', 'Notification', '$timeout']; function StaffCtrl($scope, smartRequest, Notification, $timeout) { $scope.groups = []; $scope.personals = []; $scope.parentGroup = 0; $scope.parentGroupCode = ''; $scope.search = { query: '' }; $scope.interfaces = []; $scope.rights = []; $scope.currentPersonalObject = { id: 0 }; $scope.currentGroupObject = { id: 0 }; var promise = 0; smartRequest.get('v1/clearcache?folder=staff', function () {}); $scope.update = function() { smartRequest.get('staff/group/list', function(data) { $scope.groups = data.groups; }); }; $scope.updateGroups = function (callback, id) { smartRequest.get('staff/group/list', function(data) { $scope.groups = data.groups; if (callback) { var newGroup = $scope.getItemById($scope.groups, id); callback(newGroup); } }); }; $scope.updatePersonals = function (callback, id) { smartRequest.get('staff/list?group_code=' + $scope.parentGroupCode, function(data) { $scope.personals = data.staff; if (callback) { var newStaff = $scope.getItemById($scope.personals, id); callback(newStaff); } }); }; $scope.addGroup = function() { smartRequest.post('staff/group/store', { name: 'Новая группа' }, function(data) { var groupId = data.group_id; $scope.updateGroups($scope.showGroup, groupId); }); }; $scope.addPersonal = function() { smartRequest.post('staff/store', { name: 'Новый персонал', group_code: $scope.parentGroupCode }, function(data) { var staffId = data.staff_id; $scope.updatePersonals($scope.showPersonal, staffId); }); }; $scope.openGroup = function(group) { $scope.currentGroupObject = { id: 0 }; $scope.parentGroup = group.id; $scope.parentGroupCode = group.code; $scope.personals = []; $scope.updatePersonal(); }; $scope.showPersonal = function(personal) { $scope.currentGroupObject = { id: 0 }; $scope.currentPersonalObject = personal; }; $scope.showGroup = function(group) { $scope.currentPersonalObject = { id: 0 }; $scope.currentGroupObject = group; for(var i = 0; i < $scope.rights.length; i++) { $scope.rights[i].is_active = false; } smartRequest.get('staff/right/list?group_code=' + $scope.currentGroupObject.code, function(data) { for(var i = 0; i < data.rights.length; i++) { for(var j = 0; j < $scope.rights.length; j++) { if(data.rights[i].code === $scope.rights[j].code) { $scope.rights[j].is_active = true; break; } } } }); }; $scope.updatePersonal = function() { smartRequest.get('staff/list?group_code=' + $scope.parentGroupCode, function(data) { $scope.personals = data.staff; }); }; $scope.closeCard = function() { $scope.currentPersonalObject = { id: 0 }; $scope.currentGroupObject = { id: 0 }; }; $scope.getItemById = function(list, id) { var res; list.forEach(function (item) { if (item.id == id) { res = item; return; } }); return res; }; $scope.savePersonal = function() { smartRequest.post('staff/update', { id: $scope.currentPersonalObject.id, name: $scope.currentPersonalObject.name, password: $scope.currentPersonalObject.password, interface_code: $scope.currentPersonalObject.interface_code, group_code: $scope.currentPersonalObject.group_code }, function(data) { Notification.success('Персонал сохранен'); $scope.closeCard(); }); }; $scope.saveGroup = function() { var activeRights = $scope.rights.filter(right => right.is_active); smartRequest.post('staff/group/update', { id: $scope.currentGroupObject.id, name: $scope.currentGroupObject.name, interface_code: $scope.currentGroupObject.interface_code, sub_interface_code: $scope.currentGroupObject.sub_interface_code, rights: JSON.stringify(activeRights.map(activeRight => activeRight.code)) }, function(data) { Notification.success('Группа сохранена'); $scope.closeCard(); }); }; $scope.upFolder = function() { $scope.currentPersonalObject = { id: 0 }; $scope.currentGroupObject = { id: 0 }; $scope.parentGroup = 0; $scope.update(); }; $scope.removePersonal = function() { $('#personal-confirm-delete').modal('toggle'); smartRequest.post('staff/delete', { id: $scope.currentPersonalObject.id }, function(data) { $scope.currentPersonalObject = { id: 0 }; $scope.updatePersonal(); }); }; $scope.removeGroup = function() { $('#group-confirm-delete').modal('toggle'); smartRequest.post('staff/group/delete', { id: $scope.currentGroupObject.id }, function(data) { $scope.currentGroupObject = { id: 0 }; $scope.update(); }); }; $scope.personalSearch = function() { if(promise){ $timeout.cancel(promise); } promise = $timeout(function() { if($scope.search.query.length > 0) { smartRequest.post('staff/search', { name: $scope.search.query }, function (data) { $scope.personals = data.staff; }); } else { $scope.upFolder(); } }, 300); }; $scope.setRights = function() { $scope.removeActiveToggle(); $scope.onRightsByTemplate(); }; $scope.removeActiveToggle = function() { $scope.rights.forEach(function (item) { if (item.is_active) { item.is_active = false; } }); }; $scope.onRightsByTemplate = function() { smartRequest.get('staff/rights/template?code=' + $scope.currentGroupObject.interface_code + '&sub_code=' + $scope.currentGroupObject.sub_interface_code, function (data) { for(var i = 0; i < data.rights.length; i++) { for(var j = 0; j < $scope.rights.length; j++) { if(data.rights[i].code === $scope.rights[j].code) { $scope.rights[j].is_active = true; break; } } } }); }; $scope.update(); smartRequest.get('staff/interface/list', function(data) { $scope.interfaces = data.interfaces; }); smartRequest.get('staff/right/all', function(data) { $scope.rights = data.rights; }); } })();