Source: components/admin/modulos/telegram/usuarios/2.telegram.usuarios.controller.js

/**
 * @ngdoc controller
 * @name AdminTelegramUsuariosCtrl
 * @module s4c.controllers.AdminTelegramUsuariosCtrl
 *
 * @description
 * `AdminTelegramUsuariosCtrl` Controller da administração dos usuários do telegram
 * 
 * 
 */
(function () {
    'use strict';

    function AdminTelegramUsuariosCtrl($scope, TelegramService, $q) {

        $scope.userViewActive = false;
        $scope.userEditActive = false;
        $scope.grupos = {};
        $scope.usuarios = {};
        $scope.usuario = {};
        $scope.usuariosPendentes = [];
        $scope.usuariosAceitos = [];
        $scope.res = $scope.$root.res;

        /**
         * @method getUsers
         */
        TelegramService.getUsers().then(function (usuarios) {
            $scope.usuariosPendentes = usuarios.filter((usuario) => {
                if (usuario.UsuarioMensageriaExternas.length > 0 &&
                    !usuario.UsuarioMensageriaExternas[0].ativo) {
                    usuario.usuarioMensageriaExternaIdMensageria =
                        usuario.UsuarioMensageriaExternas[0].idMensageria;

                    return usuario;
                }
            });

            $scope.usuariosAceitos = usuarios.filter((usuario) => {
                if (usuario.UsuarioMensageriaExternas.length > 0 &&
                    usuario.UsuarioMensageriaExternas[0].ativo) {
                    usuario.usuarioMensageriaExternaIdMensageria =
                        usuario.UsuarioMensageriaExternas[0].idMensageria;

                    return usuario
                }
            });

            $scope.usuarios = usuarios;
        });

        /**
         * @method getGroups
         * @param {*} grupos
         */
        TelegramService.getGroups().then(function (grupos) {
            $scope.grupos = grupos;
        });

        /**
         * @method editUser
         * @param {*} usuario
         */
        $scope.editUser = function editUser(usuario) {
            $scope.userViewActive = true;
            $scope.userEditActive = true;

            $scope.usuario = usuario;
        }

        /**
         * @method allowUser
         * @param {*} id
         */
        $scope.allowUser = (id) => {
            TelegramService.changeStatusUsuarioMensageriaExterna(id, true)
                .then(() => {
                    let usuario = _.find($scope.usuariosPendentes, { id: id });
                    let index = $scope.usuariosPendentes.indexOf(usuario);
                    $scope.usuariosPendentes.splice(index, 1);
                    $scope.usuariosAceitos.push(usuario);
                });
        };

        /**
         * @method disallowUser
         * @param {*} id
         */
        $scope.disallowUser = (id) => {
            TelegramService.removeUsuarioMensageriaExterna(id)
                .then(() => {
                    let usuario = _.find($scope.usuariosPendentes, { id: id });
                    let index = $scope.usuariosPendentes.indexOf(usuario);
                    $scope.usuariosPendentes.splice(index, 1);
                });
        };

        /**
         * @method cancelEditUser
         * 
         */
        $scope.cancelEditUser = function cancelEditUser() {
            $scope.userEditActive = false;
        }

        /**
         * @method viewUser
         * @param {*} usuario
         */
        $scope.viewUser = function viewUser(usuario) {
            $scope.userViewActive = true;
            $scope.userEditActive = false;

            $scope.usuario = usuario;
        }

        /**
         * @method saveUser
         * @param {*} usuario
         */
        $scope.saveUser = function saveUser(usuario) {
            // Get the list of groups from the user
            TelegramService.getGroupsFromUser(usuario.id).then(function (grupos) {
                $scope.usuario.grupos = grupos;
            });

            // Track removed groups
            // Track added groups
            // Create a queue to save deleted and added groups
            var processGroup = $q.all([
                TelegramService.deleteUsersFromGroup(grupo.id, [$scope.usuario]),
                TelegramService.addUsersToGroup(grupo.id, [$scope.usuario])
            ]);

            // Update the list of users
            processGroup.then(function (result) {
                var deletedUsersReq = result[0],
                    addedUsersReq = result[1];

                // Add and remove groups from groups list
            });
        }
    }


    angular.module('s4c.telegram')
        .controller('AdminTelegramUsuariosCtrl', AdminTelegramUsuariosCtrl);

    AdminTelegramUsuariosCtrl.$inject = ['$scope', 'TelegramService', '$q'];

}());