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.

[sql]
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’);
[/sql]

Explicando:

– Criando a View chamada “glpi_view_por_empresa”:

[sql]CREATE VIEW glpi_view_por_empresa AS[/sql]

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

[sql]
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
[/sql]

– Unindo dois SELECT’s com UNION

[sql]UNION[/sql]

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

[sql]
SELECT ‘Total de Chamados’ AS Empresa, COUNT(Chamados.ID) AS Chamados_Abertos
FROM glpi_tracking AS Chamados
WHERE (Chamados.FK_group <> ‘0’);
[/sql]

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

[sql]
SELECT * FROM glpi_view_por_empresa;
[/sql]

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…


Publicado

em

por

Tags:

Comentários

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

  1. Avatar de Thiago Passamani

    Aquila houve mudanças, porém como disse nesse caso seria legal estudar o novo código e recriar sua customização.

  2. Avatar de Thiago Passamani

    Aquila você deve fazer uma query melhor usando INNER JOIN. Veja qual erro está ocorrendo, pois não tenho como testar. Coloca seu usuário em modo debug e veja os erros e post aqui.

  3. Avatar de Aquila Israel

    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 = ;

  4. Avatar de Aquila Israel

    meu codigo fica cortado aqui nesses comentarios….

  5. Avatar de Aquila Israel

    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’);

    }

  6. Avatar de Aquila Israel

    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’);

    }

  7. Avatar de Thiago Passamani

    Aquila o [php]//print_r ($tecnico);[/php] está comentado. A query está correta, porém de onde vem o $ID?

  8. Avatar de Aquila Israel

    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);

  9. Avatar de Thiago Passamani

    Thiago em qual parte do GLPI você deseja visualizar essas informações?

  10. Avatar de Thiago Alexandre
    Thiago Alexandre

    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.

  11. Avatar de Thiago Passamani

    KCSCoelho é necessário apenas criar uma nova “entrada” na tabela TICKETS. Apenas cadastrar os campos necessários.

  12. Avatar de KCSCoelho
    KCSCoelho

    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!!

  13. Avatar de Bruno Gomes
    Bruno Gomes

    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?

  14. Avatar de Thiago Passamani

    Thiago é muito simples, mas preciso saber o que precisa configurar.

  15. Avatar de Thiago Carlos
    Thiago Carlos

    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 !

  16. Avatar de Thiago Carlos
    Thiago Carlos

    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

  17. Avatar de Thiago Passamani

    @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.

  18. Avatar de Leandro Augusto

    @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

  19. Avatar de Thiago Passamani

    @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.

  20. Avatar de Leandro Augusto

    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.

  21. Avatar de Thiago Passamani

    @Felipe: Temos que estudar o seu caso, faz o seguinte me manda um email como está implantado ai na sua empresa e como você precisa que funcione, ok?

  22. Avatar de felipe
    felipe

    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.

  23. Avatar de Jair
    Jair

    me fala seu msn pra eu ti passar o arquivo

  24. Avatar de Thiago Passamani

    @Jair você esta colocando um perfil de acesso para esse usuário? Outra coisa faz um dump mysql e manda pra mim a base de dados.

  25. Avatar de Jair
    Jair

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

  26. Avatar de Thiago Passamani

    @Jair Boa tarde, sim posso te ajudar, mas preciso saber qual é o método de autenticação utilizado?

  27. Avatar de Jair
    Jair

    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???

  28. Avatar de Thiago Passamani

    Corrigindo o erro, junho é mês ’06’:
    [sql]
    — Junho
    AND MONTH(Chamados.date) = ’06’
    AND YEAR(Chamados.date) = ‘2010’
    [/sql]

  29. Avatar de Thiago Passamani

    Valeu Raphael, bom existe sim é só acresentar aos dois WHERE as linhas
    [sql]
    AND MONTH(Chamados.date) = ’07’
    AND YEAR(Chamados.date) = ‘2010’
    [/sql]

    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:
    [sql]
    /* 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’
    [/sql]

    Qualquer dúvida me fala ok.

  30. Avatar de Raphael Hora
    Raphael Hora

    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.