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…
Comentários
31 respostas para “Query de Chamados Abertos por Grupo no GLPI”
Aquila houve mudanças, porém como disse nesse caso seria legal estudar o novo código e recriar sua customização.
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.
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 = ;
meu codigo fica cortado aqui nesses comentarios….
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’);
}
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’);
}
Aquila o [php]//print_r ($tecnico);[/php] está comentado. A query está correta, porém de onde vem o $ID?
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);
Thiago em qual parte do GLPI você deseja visualizar essas informações?
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.
KCSCoelho é necessário apenas criar uma nova “entrada” na tabela TICKETS. Apenas cadastrar os campos necessários.
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!!
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?
Thiago é muito simples, mas preciso saber o que precisa configurar.
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 !
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
@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.
@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
@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.
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.
@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?
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.
Manda um email para contato@thiagopassamani.com.br
me fala seu msn pra eu ti passar o arquivo
@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.
Uso método normal, não uso Ldap nem nada, só cadastro no sistema e acesso. Não sei se respondi a sua pergunta.
@Jair Boa tarde, sim posso te ajudar, mas preciso saber qual é o método de autenticação utilizado?
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???
Corrigindo o erro, junho é mês ’06’:
[sql]
— Junho
AND MONTH(Chamados.date) = ’06’
AND YEAR(Chamados.date) = ‘2010’
[/sql]
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.
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.