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