Query de Chamados Abertos por Grupo no GLPI

Boa tarde galera,

Vou ensinar “basicamente” uma VIEW no MySQL com algumas tabelas
do GLPI para facilitar suas vidas… Rsrss…

OBJETIVO: Selecionar todos os chamados abertos no GLPI e separar por Grupo/Empresa e no final gerar um resultado total de chamados registrados.

Como eu utilizo os grupos do GLPI como “Empresas”, criei uma VIEW para verificar a quantidade de chamados abertos por Grupo/Empresas sem a necessidade de ficar executando minha QUERY sempre.

Para criar basta executar a QUERY abaixo no phpMyAdmin ou em qualquer gerenciador de bando de dados (SGBD) para MySQL.

CREATE VIEW glpi_view_por_empresa AS
SELECT Grupos.name AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
FROM (glpi_tracking AS Chamados
INNER JOIN glpi_groups AS Grupos ON((Chamados.FK_group = Grupos.ID)))
WHERE (Chamados.FK_group = Grupos.ID)
GROUP BY Chamados.FK_group
UNION
SELECT 'Total de Chamados' AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
FROM glpi_tracking AS Chamados
WHERE (Chamados.FK_group <> '0');

Explicando:

– Criando a View chamada “glpi_view_por_empresa”:

CREATE VIEW glpi_view_por_empresa AS

– Seleciona o nome do Grupo/Empresa e faz uma contagem dos ch. abertos usando as tabelas “glpi_groups” e “glpi_tracking” utilizando INNET JOIN:

SELECT Grupos.name AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
FROM (glpi_tracking AS Chamados
INNER JOIN glpi_groups AS Grupos ON((Chamados.FK_group = Grupos.ID)))
WHERE (Chamados.FK_group = Grupos.ID)
GROUP BY Chamados.FK_group

– Unindo dois SELECT’s com UNION

UNION

– Agora faço um select para gerar o Total de Chamados já abertos:

SELECT 'Total de Chamados' AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
FROM glpi_tracking AS Chamados
WHERE (Chamados.FK_group <> '0');

Agora para verificar o resultado, basta fazer um SELECT na VIEW, veja como é simples:

SELECT * FROM glpi_view_por_empresa;

O resultado será esse:

Obs: Apaguei o nome das empresa para não ter problemas.

Espero que gostem, nos próximos post estarei colocando mais querys para auxiliar com o GLPI.

Até próxima…

31 respostas para “Query de Chamados Abertos por Grupo no GLPI”

  1. Thiago,

    Desculpe a bagunça na pagina! o codigo fica cortado quando respondo. é o seguinte, tenho um codigo javascript no GLPI/INC/ticket.class.php, ele é responsavel de pegar informações do formulario e enviar para imprimir. na versão 80.4 funcionava. atualizei para a versão 90 e parou. as variaveis mudam??
    eu uso esse codigo para imprimir de forma personalizada. sem usar plugin.
    o que eu quero é pegar as informação do chamado nas variaveis abaixo. receber as informações nas variaveis

    solicitante,
    tecnico
    local
    titulo
    descrição problema
    solução
    data abertura.
    Conseguindo pegar esses dados no script, consigo imprimir.

    exemplo:
    na versão antiga eu pegava a descrição do problema assim:

    var DescricaoProb = ;

  2. function chamaRelatorio(){

    fields[“address”];

    // pega o primeiro tecnico
    $resultado= mysql_query(“SELECT `users_id`
    FROM `glpi_tickets_users`
    WHERE `tickets_id` = “.$ID.”
    AND `TYPE` =2″);
    $tecnico= mysql_result($resultado,0,”users_id”);
    //print_r ($tecnico);
    //print_r ($resultado);

    // pega o endereco
    $consulta1=mysql_query(“SELECT E.address
    FROM `glpi_tickets` T
    inner join `glpi_entitydatas` E on E.entities_id = T.entities_id
    WHERE T.id = “.$ID.””);
    $endereco=mysql_result($consulta1,0,”address”);

    ?>;

    var ID = ;
    var NomeAbertura = fields[“users_id_recipient”]).”‘” ?>;
    var Local = ;
    var TipoSolucao = fields[“solutiontypes_id”] ?>;
    var Urgencia = fields[“urgency”] ?>;
    var Prioridade = fields[“impact”]?>;
    var Impacto = fields[“priority”]?>;
    var DataAbertura = fields[“date”].”‘”?>;
    var DataSolucao = fields[“solvedate”].”‘”?>;
    var DataVencimento = fields[“itilcategories_id”] ?>;
    var DescricaoProb = ;
    var DescSolucao = getField(‘solution’))))).”‘”?>;
    var Solicitante = ;
    var Tecnico = ;
    var Endereco = ;

    if(Urgencia == 1){
    Urgencia = ‘Muito Baixa’;
    }else if(Urgencia == 2){
    Urgencia = ‘Baixa’;
    }else if(Urgencia == 3){
    Urgencia = ‘Media’;
    }else if(Urgencia == 4){
    Urgencia = ‘Alta’;
    }else if(Urgencia == 5){
    Urgencia = ‘Muito Alta’;
    }

    if(DataVencimento == 3){
    DataVencimento = ‘INFORMATICA’;
    }else if(DataVencimento == 2){
    DataVencimento = ‘TELEFONIA’;
    }else if(DataVencimento == 0){
    DataVencimento = ”;
    }

    if(TipoSolucao == 1){
    TipoSolucao = ‘FECHADO E SOLUCIONADO’;
    }else if(TipoSolucao == 2){
    TipoSolucao = ‘PENDENTE’;
    }else if(TipoSolucao == 0){
    TipoSolucao = ”;
    }

    if(Prioridade == 1){
    Prioridade = ‘Muito Baixa’;
    }else if(Prioridade == 2){
    Prioridade = ‘Baixa’;
    }else if(Prioridade == 3){
    Prioridade = ‘Media’;
    }else if(Prioridade == 4){
    Prioridade = ‘Alta’;
    }else if(Prioridade == 5){
    Prioridade = ‘Muito Alta’;
    }

    if(Impacto == 1){
    Impacto = ‘Muito Baixa’;
    }else if(Impacto == 2){
    Impacto = ‘Baixa’;
    }else if(Impacto == 3){
    Impacto = ‘Media’;
    }else if(Impacto == 4){
    Impacto = ‘Alta’;
    }else if(Impacto == 5){
    Impacto = ‘Muito Alta’;
    }

    window.open(‘imp/un_relchamado.php?ID=’+ID+’&Urgencia=’+Urgencia+’&Prioridade=’+Prioridade+’&Impacto=’+Impacto+’&NomeAbertura=’+NomeAbertura+’&DataAbertura=’+DataAbertura+’&DataVencimento=’+DataVencimento+’&DataSolucao=’+DataSolucao+’&TipoSolucao=’+TipoSolucao+’&Local=’+Local+’&Solicitante=’+Solicitante+’&Tecnico=’+Tecnico+’&Endereco=’+Endereco+’&DescSolucao=’+DescSolucao+’&DescricaoProb=’+DescricaoProb,’Pagina’, ‘STATUS=NO, TOOLBAR=NO, LOCATION=NO, DIRECTORIES=NO, RESIZABLE=YES, SCROLLBARS=YES’);

    }

  3. Thiago,

    esse codigo dentro do javascript, é chamado por um botão imprimir. na versão 80.4 funcionava. atualizei para a versão 90 e parou. as variaveis mudam??
    eu uso esse codigo para imprimir de forma personalizada. sem usar plugin.
    o que eu quero é pegar as informação do chamado aberto;

    solicitante, tecnico, local, titulo, descrição, solução, data abertura. Conseguindo pegar esses dados no script, consigo imprimir.

    function chamaRelatorio(){

    fields[“address”];

    // pega o primeiro tecnico
    $resultado= mysql_query(“SELECT `users_id`
    FROM `glpi_tickets_users`
    WHERE `tickets_id` = “.$ID.”
    AND `TYPE` =2″);
    $tecnico= mysql_result($resultado,0,”users_id”);
    //print_r ($tecnico);
    //print_r ($resultado);

    // pega o endereco
    $consulta1=mysql_query(“SELECT E.address
    FROM `glpi_tickets` T
    inner join `glpi_entitydatas` E on E.entities_id = T.entities_id
    WHERE T.id = “.$ID.””);
    $endereco=mysql_result($consulta1,0,”address”);

    ?>;

    var ID = ;
    var NomeAbertura = fields[“users_id_recipient”]).”‘” ?>;
    var Local = ;
    var TipoSolucao = fields[“solutiontypes_id”] ?>;
    var Urgencia = fields[“urgency”] ?>;
    var Prioridade = fields[“impact”]?>;
    var Impacto = fields[“priority”]?>;
    var DataAbertura = fields[“date”].”‘”?>;
    var DataSolucao = fields[“solvedate”].”‘”?>;
    var DataVencimento = fields[“itilcategories_id”] ?>;
    var DescricaoProb = ;
    var DescSolucao = getField(‘solution’))))).”‘”?>;
    var Solicitante = ;
    var Tecnico = ;
    var Endereco = ;

    if(Urgencia == 1){
    Urgencia = ‘Muito Baixa’;
    }else if(Urgencia == 2){
    Urgencia = ‘Baixa’;
    }else if(Urgencia == 3){
    Urgencia = ‘Media’;
    }else if(Urgencia == 4){
    Urgencia = ‘Alta’;
    }else if(Urgencia == 5){
    Urgencia = ‘Muito Alta’;
    }

    if(DataVencimento == 3){
    DataVencimento = ‘INFORMATICA’;
    }else if(DataVencimento == 2){
    DataVencimento = ‘TELEFONIA’;
    }else if(DataVencimento == 0){
    DataVencimento = ”;
    }

    if(TipoSolucao == 1){
    TipoSolucao = ‘FECHADO E SOLUCIONADO’;
    }else if(TipoSolucao == 2){
    TipoSolucao = ‘PENDENTE’;
    }else if(TipoSolucao == 0){
    TipoSolucao = ”;
    }

    if(Prioridade == 1){
    Prioridade = ‘Muito Baixa’;
    }else if(Prioridade == 2){
    Prioridade = ‘Baixa’;
    }else if(Prioridade == 3){
    Prioridade = ‘Media’;
    }else if(Prioridade == 4){
    Prioridade = ‘Alta’;
    }else if(Prioridade == 5){
    Prioridade = ‘Muito Alta’;
    }

    if(Impacto == 1){
    Impacto = ‘Muito Baixa’;
    }else if(Impacto == 2){
    Impacto = ‘Baixa’;
    }else if(Impacto == 3){
    Impacto = ‘Media’;
    }else if(Impacto == 4){
    Impacto = ‘Alta’;
    }else if(Impacto == 5){
    Impacto = ‘Muito Alta’;
    }

    window.open(‘imp/un_relchamado.php?ID=’+ID+’&Urgencia=’+Urgencia+’&Prioridade=’+Prioridade+’&Impacto=’+Impacto+’&NomeAbertura=’+NomeAbertura+’&DataAbertura=’+DataAbertura+’&DataVencimento=’+DataVencimento+’&DataSolucao=’+DataSolucao+’&TipoSolucao=’+TipoSolucao+’&Local=’+Local+’&Solicitante=’+Solicitante+’&Tecnico=’+Tecnico+’&Endereco=’+Endereco+’&DescSolucao=’+DescSolucao+’&DescricaoProb=’+DescricaoProb,’Pagina’, ‘STATUS=NO, TOOLBAR=NO, LOCATION=NO, DIRECTORIES=NO, RESIZABLE=YES, SCROLLBARS=YES’);

    }

  4. Olá, tenho uma grande problema no meu GLPI. Tento fazer essa consulta no banco de dados e não me retorna nada. Aí tem um grande detalhe. na versão 80.4 funciona normalmente, mas na versão 84.5 que eu uso não funciona. Poderia me ajudar? segue codigo.

    // pega o primeiro tecnico
    $resultado= mysql_query(“SELECT `users_id`
    FROM `glpi_tickets_users`
    WHERE `tickets_id` = “.$ID.”
    AND `TYPE` =2″);
    $tecnico= mysql_result($resultado,0,”users_id”);
    //print_r ($tecnico);
    //print_r ($resultado);

  5. Olá Thiago eu adicionei 4 campos em uma tabela e gostaria de saber como posso visualizar esse campos da tabela na tela do glpi ?

    Obrigado pela ajuda.

  6. Grande thiago, tudo bem?

    Meu querido, veja se pode me ajudar, gostaria de integrar o GLPI com um sistema de monitoramento de rede chamado The Dude da Mikrotik, de forma que quando ocorra uma queda de link o Dude consiga abrir um chamado para a equipe de redes. Já fez algo parecido? Sabe indicar o caminho das pedras? Meu medo é registrar o chamado deixando de registrar alguma outra informação que o sistema interno do GLPI possa registrar adicionalmente.
    Obrigado, fico no aguardo!!

  7. Quando executei o script no phpMyAdmin deu erro,

    #1146 – Table ‘glpi.glpi_tracking’ doesn’t exist

    Uso a versão 0.80.5 do GLPI, muda alguma coisa com relação ao nome de algumas tabelas/campos?

  8. quero saber se posso fazer uma customização na parte de menus, como cadastrar as opções no GLPI, para o usuario ter a opção na hora de abrir o chamado. Mesmo para o administrador ter os opções simples de visualização de chamados, resposta, um layout para o GLPI.

    thiag_o_15@hotmail.com
    Aguardo contato !

  9. Ola, estou tendo problemas com o GLPI, preciso configura-lo e não sei como posso fazer isso, alguem poderia me ajudar pois preciso colocar o Help Desk no ar o mais rapido possive.
    Segue meu e-mail para contato.

    thiag_o_15@hotmail.com

  10. @Leandro Augusto: Nesse caso sugiro fazer a Query e gerar os gráficos no Excel, pois para conseguir você precisará modificar alguns scripts e precisa de um pouco de conhecimento a respeito.

  11. @Thiago Passamani:
    Sim eh isso mesmo.
    Gostaria de implementar os mesmos arquivos que já estão funcionando e gerando o gráfico. Porém para este relatório, a função do query SQL entra em um loop contado pela existência do “técnico”, e implementaria a query SQL que já existe para selecionar por técnico. Fazendo isso, iria imprimir vários conjuntos de gráficos, cada dois gráficos representaria cada técnico.
    Assim teria o mesmo relatório segmentado por técnico. – PS. ñ consegui entender o funcionamento e dos scripts :p – []’s

  12. @Leandro você quer que o GLPI gere esses relatórios pra você, é isso? Sugiro que gere uma “query sql” para os fins de relatório ou implemente os relatórios já existentes. No GLPI essa parte de relatório ainda está bem fraca nessa versão.

    Caso queira visualizar apenas gráfico você precisa colocar em “Mostrar Gráfico” como “Sim” e colocar por Técnico do Chamado.

  13. Thiago, boa tarde!
    Já havia escrito anteriormente sobre a geração de relatórios com gráficos. Porém com as informações que possuo ainda não consegui implementar meu GLPI para atender nossa necessidade. “localhost/glpi/front/stat.tracking.php?type=user&date1=2010-09-19&submit=Atualizar&date2=2011-09-19&showgraph=1”
    Caminho: tickets -> estatística -> por chamado -> “opção gráfico” sim -> atualizar.
    Deixo bem claro que este gerando os relatórios originalmente (versão GLPI 0.78.1).
    Neste relatório, gostaria que imprimi se na tela, vários conjuntos de gráficos, cada conjunto referente a um técnico que atendeu o chamado.
    Minhas limitações: não consigo compreender os arquivos para montar mina query em SQL.

  14. Thiago estou com um problema na minha empresa, usamos o GLPI para controlar nossos chamados. Cara eu trabalho em uma das matrizes e o GLPI aki funciona bem. Agora é que ta minha gerente quer que o pessoal da filial começe a usar e nos não sabemos como fazer para dividir, assim os chamado de são paulo tem que ficar em são paulo e da matriz que é no rio de janeiro tem que ficar no rio. lembrando que o ´GLPI esta sincronizando com o AD que replica aki e no rio de janeiro.

  15. Uso método normal, não uso Ldap nem nada, só cadastro no sistema e acesso. Não sei se respondi a sua pergunta.

  16. Bom dia Thiago, estou usando o GLPI a pouco tempo na minha empresa, com o intuito de registrar as ocorrências de TI. Me deparei com um problema. Depois de cadastrar diversos usuários normalmente, o GLPI agora cadastra o usuário, só que não aparece no sistema. Baixei o Dump XML do banco, esses usuários aparecem todos no banco cadastrados mas nada no GLPI. Isso começou depois que eu exclui um usuário do sistema. Sabe alguma forma de me ajudar com isso???

  17. Valeu Raphael, bom existe sim é só acresentar aos dois WHERE as linhas

    AND MONTH(Chamados.date) = '07'
    AND YEAR(Chamados.date) = '2010'
    

    Fiz essa query que pega o mês e ano corrente, porém ela não funciona com VIEW
    mas basta comentar SET e descomentar as linhas que estão com os valores fixos que funciona, mas vai ser uma VIEW especifica para aquele mês e ano.

    Veja a query:

    /* Seta as variaveis mes e ano - Ambos Corrente */
    SET @mes = MONTH(NOW()); 
    SET @ano = YEAR(NOW());
    
    /* Seta as variaveis mes e ano - Passando os valores */
    -- SET @mes = '07'; 
    -- SET @ano = '2010';
    
    SELECT Grupos.name AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
    	FROM glpi_tracking AS Chamados
    	INNER JOIN glpi_groups AS Grupos ON(Chamados.FK_group = Grupos.ID)
    	WHERE (Chamados.FK_group = Grupos.ID)
    	AND MONTH(Chamados.date) = @mes
    	AND YEAR(Chamados.date) = @ano
    --	AND MONTH(Chamados.date) = '07'
    --	AND YEAR(Chamados.date) = '2010'
    	GROUP BY Chamados.FK_group
    UNION
    	SELECT 'Total de Chamados' AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
    		FROM glpi_tracking AS Chamados
    		WHERE (Chamados.FK_group <> '0')
    		AND MONTH(Chamados.date) = @mes
    		AND YEAR(Chamados.date) = @ano
    	--	AND MONTH(Chamados.date) = '07'
    	--	AND YEAR(Chamados.date) = '2010'
    

    Qualquer dúvida me fala ok.

  18. Thiago.
    Parabens pelo site.
    Gostaria de uma ajuda.
    Criei o View como você colocou, mais tem como fazer para filtrar com os chamados de uma data certa. Como do mes de junho?
    Grato.

Os comentários estão desativados.