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
}
?>
Pergunta
RRH
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?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.