Ir para conteúdo
Fórum Script Brasil
  • 0

Montar relatório matricial


RRH

Pergunta

O código abaixo monta um relatório matricial com os dados das vendas por vendedor/mes com um total por vendedor/mes. A dúvida agora é como eu faço para incluir uma coluna de subtotal a cada dois meses?

<?php 
/**
 * função __autoload()
 *  Carrega uma classe quando ela é necessária,
 *  ou seja, quando ela é instancia pela primeira vez.
 */
function __autoload($classe)
{
    if (file_exists("app.ado/{$classe}.class.php"))
    {
        include_once "app.ado/{$classe}.class.php";
    }
    else if (file_exists("app.widgets/{$classe}.class.php"))
    {
        include_once "app.widgets/{$classe}.class.php";
    }
}

try
{
    // cria um estilo para o cabeçalho
    $estilo_cabecalho = new TStyle('cabecalho');
    $estilo_cabecalho->font_family     = 'arial,verdana,sans-serif';
    $estilo_cabecalho->font_weight     = 'bold';
    $estilo_cabecalho->color           = '#ffffff';
    $estilo_cabecalho->background_color= '#825046';
    $estilo_cabecalho->font_size       = '10pt';
    $estilo_cabecalho->show();
    
    // cria um estilo para o total
    $estilo_cabecalho = new TStyle('total');
    $estilo_cabecalho->font_family     = 'arial,verdana,sans-serif';
    $estilo_cabecalho->font_weight     = 'bold';
    $estilo_cabecalho->color           = '#ffffff';
    $estilo_cabecalho->background_color= '#757575';
    $estilo_cabecalho->font_size       = '10pt';
    $estilo_cabecalho->show();
    
    // cria um estilo para os dados
    $estilo_dados = new TStyle('dados');
    $estilo_dados->font_family     = 'arial,verdana,sans-serif';
    $estilo_dados->color           = '#2D2D2D';
    $estilo_dados->font_size       = '10pt';
    $estilo_dados->show();
    
    $conn = TConnection::open('exemplos'); // abre uma conexão
    
    // define a consulta
    $sql = "SELECT vendedor.nome || ' (' || vendedor.id || ')' as vendedor," .
           "       venda.dt_venda, venda_itens.quantidade, venda_itens.valor" .
           " FROM   venda, venda_itens, vendedor" .
           " WHERE  venda.id = venda_itens.id_venda AND" .
           "        venda.id_vendedor = vendedor.id AND " .
           "        venda.dt_venda >= '2010-01-01' AND " .
           "        venda.dt_venda <= '2010-12-31' ".
           " ORDER BY 1";
    
    $result = $conn->query($sql); // executa a instrução SQL
    
    // inicializa matriz com dados
    $matriz          = array();
    $totais_mes      = array();
    $totais_vendedor = array();
	$totais_bimestre = array(); // rogerio
    
	
	// define bimestres
	$primeiroBim = array ('Junho', 'Julho');
	
    // percorre os resultados
    foreach ($result as $row)
    {
        // obtém os campos da consulta
        $vendedor   = $row['vendedor'];
        $dt_venda   = $row['dt_venda'];
        $mes_venda  = (int) substr($dt_venda, 5,2);
        $quantidade = $row['quantidade'];
        $valor      = $row['valor'];
        
        // inicializa a matriz de dados se necessário
        if (!isset($matriz[$vendedor][$mes_venda]))
        {
            $matriz[$vendedor][$mes_venda] = 0;
        }
        // inicializa a totais por vendedor se necessário
        if (!isset($totais_vendedor[$vendedor]))
        {
            $totais_vendedor[$vendedor] = 0;
        }
        // inicializa a totais por mês se necessário
        if (!isset($totais_mes[$mes_venda]))
        {
            $totais_mes[$mes_venda] = 0;
        }
        
        // totaliza total vendido conforme vendedor e mês
        $matriz[$vendedor][$mes_venda] += ($quantidade * $valor);
        
        // totaliza total vendido conforme vendedor
        $totais_vendedor[$vendedor]    += ($quantidade * $valor);
        
        // totaliza total vendido conforme mês
        $totais_mes[$mes_venda]        += ($quantidade * $valor);
		
		// totaliza total vendido conforme bimestre
        //$totais_mes[$mes_venda]        += (in_array('$primeiroBim'));
    }
    
    $meses = array_keys($totais_mes); // cria vetor com os meses com venda
    sort($meses); // ordena o vetor
    
    // cria vetor com os nomes dos meses do ano
    $nomesmeses = array();
    $nomesmeses[1] = 'Janeiro';
    $nomesmeses[2] = 'Fevereiro';
    $nomesmeses[3] = 'Março';
    $nomesmeses[4] = 'Abril';
    $nomesmeses[5] = 'Maio';
    $nomesmeses[6] = 'Junho';
    $nomesmeses[7] = 'Julho';
    $nomesmeses[8] = 'Agosto';
    $nomesmeses[9] = 'Setembro';
    $nomesmeses[10] = 'Outubro';
    $nomesmeses[11] = 'Novembro';
    $nomesmeses[12] = 'Dezembro';
    
    // instancia objeto tabela
    $tabela = new TTable;
    $tabela->border= 1;
    $tabela->style = "border-collapse:collapse";
    
    // adiciona uma linha para os títulos 
    $linha = $tabela->addRow(); 
    $linha->class = 'cabecalho';
    
    // adiciona células com os nomes dos meses
    $linha->addCell('');
    foreach ($meses as $mes)
    {
        $cell = $linha->addCell($nomesmeses[$mes]);
        $cell->align = 'center';
    }
    // adiciona célula de total
    $cell = $linha->addCell('Total');
    $cell->align = 'center';
    
    $colore = FALSE; // controle de cor do fundo
    
    // percorre a matriz
    foreach ($matriz as $vendedor => $vendas_por_mes)
    {
        // verifica qual cor irá utilizar para o fundo dos dados
        $bgcolor = $colore ? '#d0d0d0' : '#ffffff';
        
        // adiciona uma linha para os dados
        $linha = $tabela->addRow(); 
        $linha->bgcolor = $bgcolor;
        $linha->class = 'dados';
        
        // adiciona o nome do vendedor
        $cell = $linha->addCell($vendedor);
        $cell->width = '160';
        
        // adiciona os totais por vendedor/mês
        foreach ($meses as $mes)
        {
            $valor = isset($vendas_por_mes[$mes]) ? $vendas_por_mes[$mes] : 0;
            $valor = number_format($valor, 2, ',', '.');
            $cell = $linha->addCell($valor);
            $cell->align = 'right';
            $cell->width = '80';
        }
        
        // adiciona uma célula para o total do vendedor 
        $valor = isset($totais_vendedor[$vendedor]) ? $totais_vendedor[$vendedor] : 0;
        $valor = number_format($valor, 2, ',', '.');
        $cell = $linha->addCell($valor);
        $cell->align = 'right';
        $cell->width = '80';
        
        // inverte variável de controle para cor de fundo
        $colore = !$colore;
    }
    
    // adiciona uma linha para os totais por mes 
    $linha = $tabela->addRow(); 
    $linha->class = 'total';
    
    $linha->addCell('');
    $total_geral = 0; // soma o total geral
    
    // para cada mês, adiciona célula com o total
    foreach ($meses as $mes)
    {
        $valor = isset($totais_mes[$mes]) ? $totais_mes[$mes] : 0;
        $total_geral += $valor; 
        $valor = number_format($valor, 2, ',', '.');
        $cell = $linha->addCell($valor);
        $cell->align = 'right';
        $cell->width = '80';
    }
    
    // adiciona uma célula para o total geral 
    $valor = number_format($total_geral, 2, ',', '.');
    $cell = $linha->addCell($valor);
    $cell->align = 'right';
    $cell->width = '80';
    
    $tabela->show(); // exibe a tabela
} 
catch (Exception $e) 
{ 
    echo $e->getMessage(); // exibe a mensagem de erro 
} 
?>
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...