Alteração Relatorio

Olá!

Coloquei em produção o sistema faz 2 semanas, e até o momento tudo esta funcionando a contento.

Na parte dos relatórios achei interessante incluir o filtro de Unidade nos relatórios de "Tempos médio por atendentes". Alguém já fez algo nesse sentido? Ou tem alguma dica de como proceder.
Pois sem esse filtro, vai aparecer todos os atendentes de todas unidades. Obrigado
Tagged:

Comments

  • cotriel, bom dia.

    Encontrou a solução? Estou retornando de longa licença médica e também vou precisar implementar este filtro.
    Mais uma pendência de tantas que me aguardavam retornar.

    Se puder colaborar...

    Abraços.
  • MoisesMoises Entry Level
    Boa Tarde,

    Sou novo no forum, mas para a solução desta demanda segue:
    ->/novosga/modules/sga/estatisticas/
    editar o arquivo EstatisticasController.php
    na linha 43 -> 6 => new Relatorio(_('Tempos médios por Atendente'), 'tempo_medio_atendentes','date-range'),
    alterar para -> 6 => new Relatorio(_('Tempos médios por Atendente'), 'tempo_medio_atendentes','unidade,date-range'),
    salvar e testar.

    Abraços.
  • MoisesMoises Entry Level
    edited August 2017
    Ajuda,
    vou colocar o parte do arquivo que está funcionando, a parte final do arquivo, preciso de ajuda para colocar no relatório de tempo médio de atendente nome da unidade na nova guia criada. por favor ajudem?
    private function tempo_medio_atendentes($dataInicial, $dataFinal, $unidadeId = 0)
    {
    $unidaded = $unidadeId;
    $unidades = $this->unidadesArray($unidadeId);
    $dados = array();
    $query = $this->em()->createQuery("
    SELECT
    CONCAT(u.nome, CONCAT(' ', u.sobrenome)) as atendente,
    COUNT(a) as total,
    AVG(a.dataChamada - a.dataChegada) as espera,
    AVG(a.dataInicio - a.dataChamada) as deslocamento,
    AVG(a.dataFim - a.dataInicio) as atendimento,
    AVG(a.dataFim - a.dataChegada) as tempoTotal
    FROM
    Novosga\Model\ViewAtendimento a
    JOIN a.usuario u
    WHERE
    a.unidade = $unidadeId and
    a.dataChegada >= :dataInicial AND
    a.dataChegada <= :dataFinal AND
    a.dataFim IS NOT NULL
    GROUP BY
    u
    ORDER BY
    u.nome
    ");
    $query->setParameter('dataInicial', $dataInicial);
    $query->setParameter('dataFinal', $dataFinal);
    $query->setMaxResults(self::MAX_RESULTS);
    $rs = $query->getResult();
    foreach ($rs as $r) {
    $d = array(
    'atendente' => $r['atendente'],
    'total' => $r['total'],

    );
    try {
    // se der erro tentando converter a data do banco para segundos, assume que ja esta em segundos
    // Isso é necessário para manter a compatibilidade entre os bancos
    $d['espera'] = DateUtil::timeToSec($r['espera']);
    $d['deslocamento'] = DateUtil::timeToSec($r['deslocamento']);
    $d['atendimento'] = DateUtil::timeToSec($r['atendimento']);
    $d['tempoTotal'] = DateUtil::timeToSec($r['tempoTotal']);
    } catch (\Exception $e) {
    $d['espera'] = $r['espera'];
    $d['deslocamento'] = $r['deslocamento'];
    $d['atendimento'] = $r['atendimento'];
    $d['tempoTotal'] = $r['tempoTotal'];
    }
    $dados[] = $d;
    }

    return $dados;
    }

    /**
    * Retorna todos os usuarios e cargos (lotação) por unidade.
    *
    * @return array
    */
    private function lotacoes($unidadeId = 0, $nomeServico = '')
    {
    $nomeServico = trim($nomeServico);
    if (!empty($nomeServico)) {
    $nomeServico = Strings::sqlLikeParam($nomeServico);
    }

    $unidades = $this->unidadesArray($unidadeId);
    $dados = array();

    $usuarioService = new UsuarioService($this->em());
    $unidadeService = new UnidadeService($this->em());

    foreach ($unidades as $unidade) {
    $lotacoes = $unidadeService->lotacoesComServico($unidade->getId(), $nomeServico);
    $servicos = array();
    foreach ($lotacoes as $lotacao) {
    $servicos[$lotacao->getUsuario()->getId()] = $usuarioService->servicos($lotacao->getUsuario(), $unidade);
    }
    $dados[$unidade->getId()] = array(
    'unidade' => $unidade->getNome(),
    'lotacoes' => $lotacoes,
    'servicos' => $servicos,
    );
    }

    return $dados;
    }

    /**
    * Retorna todos os cargos e suas permissões.
    *
    * @return array
    */
    private function cargos()
    {
    $dados = array();
    $query = $this->em()->createQuery("SELECT e FROM Novosga\Model\Cargo e ORDER BY e.nome");
    $cargos = $query->getResult();
    foreach ($cargos as $cargo) {
    $dados[$cargo->getId()] = array(
    'cargo' => $cargo->getNome(),
    'permissoes' => $cargo->getPermissoes(),
    );
    }

    return $dados;
    }
    }
  • VeraVera Entry Level
    Olá @moises e @fielcomunista ,

    Por acaso vocês conseguiram alterar o relatório de tempos médios por atendente para listar por unidade?
    Também estou tentando, mas estou bem enferrujada na programação.

    Para colocar o nome da unidade vi que precisa alterar o sga\modules\sga\estatisticas\views\relatorios\tempo_medio_atendentes.html.twig

    estou tentando usar o sga\modules\sga\estatisticas\views\relatorios\atendimentos_concluidos.html.twig como referência.

    Fico no aguardo de mais alguma dica...
  • VeraVera Entry Level
    edited October 2017
    Tentei usar o código postado pelo @moises mas deu erro.

    Fiz ajustes em 2 arquivos e já consigo emitir o relatório dos tempos médios dos atendentes de apenas 1 local e incluí o total de usuários da unidade.

    O que falta fazer é ajustar para que o cabeçalho e agrupamento dos dados seja igual ao relatório 'Atendimentos concluídos':
    - Se escolher unidade = Todas listar todos os usuários agrupados por unidades (hoje 'Todas' não mostra nada)
    - Mostrar o nome da unidade no cabeçalho do relatório, antes do período de datas

    Faz muito tempo que não mexo com programação, estou com dificuldade na hora de fazer um loop para agrupar por unidade e usar os dados corretamente no arquivo twig.

    Agradeço se puderem ajudar.

    -----------------------------------------------------------------------

    \sga\modules\sga\estatisticas\views\relatorios\tempo_medio_atendentes.html.twig

    incluídas as linhas 27 a 33 após a tag e antes da tag para mostrar o total de atendentes:

    < tfoot>
    < tr>
    < td colspan="6">
    < strong>Total: {{ relatorio.dados|length }}< /strong>
    < /td>
    < /tr>
    < /tfoot>

    -----------------------------------------------------------------------
    \sga\modules\sga\estatisticas\EstatisticasController.php

    linhas 43, 153, 454 e 471 alteradas para incluir a unidade

    linha 43 original:
    6 => new Relatorio(_('Tempos médios por Atendente'), 'tempo_medio_atendentes', 'date-range'),

    linha 43 alterada:
    6 => new Relatorio(_('Tempos médios por Atendente'), 'tempo_medio_atendentes', 'unidade,date-range'),

    linha 153 original:
    $relatorio->setDados($this->tempo_medio_atendentes($dataInicial, $dataFinal));

    linha 153 alterada:
    $relatorio->setDados($this->tempo_medio_atendentes($dataInicial, $dataFinal, $unidade));

    linha 454 original:
    private function tempo_medio_atendentes($dataInicial, $dataFinal)

    linha 454 alterada:
    private function tempo_medio_atendentes($dataInicial, $dataFinal,$unidadeId=0)

    linha 471 original:
    a.dataFim IS NOT NULL

    linha 471 alterada:
    a.dataFim IS NOT NULL AND a.unidade = $unidadeId

    -----------------------------------------------------------------------

    Como foi alterado o arquivo .twig, após a alterações limpar o cache para que passe a fazer efeito (apagar todas pastas e arquivos da pasta \sga\var\cache).
Sign In or Register to comment.