SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_PERMISSOES_ADMINISTRADOR (
    APELIDO VARCHAR(64))
AS
DECLARE VARIABLE USERS INTEGER;
DECLARE VARIABLE PERMISSAO INTEGER;
DECLARE VARIABLE PERMISSAO_EXISTENTE INTEGER;
BEGIN
  /*buscando o usuario supervisor da empresa */
  FOR
    SELECT TU.CODIGO
      FROM TIPOS_USUARIOS TU
      INNER JOIN EMPRESAS E ON TU.CODIGOEMPRESA = E.CODIGO
      WHERE E.APELIDO = :APELIDO
        AND TU.DESCRICAO = 'ADMINISTRADOR'
        AND TU.APAGADO = 'F'
      INTO :USERS
  DO
  BEGIN
    /*Inserindo todas as permisoes*/
    FOR
      SELECT P.CODIGO
        FROM PERFIL P
        INTO :PERMISSAO
    DO
    BEGIN
      SELECT COUNT(*)
        FROM PERMISSOES PER
        WHERE PER.CODIGOTIPOUSUARIO = :USERS
          AND PER.CODIGOPERFIL = :PERMISSAO
        INTO :PERMISSAO_EXISTENTE;

      IF (:PERMISSAO_EXISTENTE = 0) THEN
      BEGIN
        INSERT INTO PERMISSOES (
            CODIGOTIPOUSUARIO,
            CODIGOPERFIL)
        VALUES (:USERS,
                :PERMISSAO);
      END
    END
  END
END^

SET TERM ;^

COMMENT ON PROCEDURE SP_PERMISSOES_ADMINISTRADOR IS '01.10.20 - Vitorino: Colocado condição para trazer apenas os tipos de usuários que não estão apagados E coloca comando FOR para não quebrar para aqueles que não foram apagados';
