Ir para o conteúdo

 Voltar a Fórum do For...
Tela cheia

Imprimindo relatório entre datas

6 de Fevereiro de 2013, 17:15 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 10 vezes

Saudações, 

 Estou utilizando como referência o CRUD 1.5, para estudos. Estou precisando gerar um relatório entre duas datas. Como solucionar o problema? 

Código utilizado:

<?php

$sql = "select * from agenda where dataagendamento BETWEEN ";
$parametros=array();
if( $_REQUEST['dtinicio'] )
{
	$sql.=' = ?';
	$parametros[] = $_REQUEST['dtinicio'];
}
if( $_REQUEST['dtfinal'] )
{
	$sql.=" and ?"; // para pesquisar pela marca em caixa alta e baixa e em qualquer posição
	$parametros[] = $_REQUEST['dtfinal']);
}

echo $sql;
$dados = TPDOConnection::executeSql($sql,$parametros);

if( !$dados )
{
	echo '<h3><center>Nenhum agendamento no periodo!</center></h3>';
	die();
}

$pdf = new TPDF('L');

// a classe TPDF procura pela função cabecalho() e se existir será executada recebendo a instância da classe TPDF
function cabecalho($pdf)
{
	$pdf->setFont('','B',14);
	$pdf->cell(0,5,'TÍTULO XXXXX',0,1,'C');
	$pdf->setFont('','B',12);
	$pdf->cell(0,5,'Listagem ',0,1,'C');
	$pdf->ln(1);
	$pdf->setFont('','',10);
	$criterio = '';
	if( $_REQUEST['status_idstatus'] )
	{
		$criterio = 'status_idstatus = '.$_REQUEST['status_idstatus'];
	}
	// TRATAMENTO DA CHAVE ESTRANGEIRA
	$criterio = ( ($criterio=='') ? 'Todos os agendamentos' : $criterio );
	$criterio = ( ($criterio=='status_idstatus = 1') ? 'Atendidos' : $criterio );
	$criterio = ( ($criterio=='status_idstatus = 2') ? 'Não atendidos' : $criterio );
	$criterio = ( ($criterio=='status_idstatus = 3') ? 'Cancelados' : $criterio );
	$criterio = ( ($criterio=='status_idstatus = 4') ? 'Retorno em outra data' : $criterio );
	$criterio = ( ($criterio=='status_idstatus = 2') ? 'Agendados' : $criterio );
	
	$pdf->cell(0,5,'Critério de consulta: '.$criterio,0,1,'L');
	$pdf->ln(1);
}

function rodape($pdf)
{
  	$pdf->setY($pdf->h-10);
  	$pdf->cell(50,5,'Emissão: '.date('d/m/Y h:i:s')		,'T',0,'L');
	$pdf->cell(0,5,'Página: '.$pdf->PageNo().' de {nb}'	,'T',0,'C');
}

$pdf->setData($dados);
$pdf->addColumn('Solicitante'			,80,'L', 'NOME'				,'white','B',8,'black'	,'times');
$pdf->addColumn('Nº Telefone'			,18,'L', 'TELEFONE'			,'white',null,8,'black'	,'arial');
$pdf->addColumn('Nº Celular'			,18,'L', 'CELULAR'			,'white',null,8,'black'	,'arial');
$pdf->addColumn('Descrição do assunto'		,60,'L', 'ASSUNTO'			,'white',null,8,'black'	,'arial');
$pdf->addColumn('Observação'			,60,'L', 'OBSERVACAO'		,'white',null,8,'black'	,'arial');
$pdf->addColumn('Data Agendamento'		,20,'C', 'DATAAGENDAMENTO'	,'white',null,8,'black'	,'arial');
$pdf->addColumn('Data Atendimento'		,20,'C', 'DATAATENDIMENTO'	,'white',null,8,'black'	,'arial');

$pdf->printRows();
$pdf->show();  

?>

Desde já agradeço 

Autor: Rogério Alexandre Leite PEREIRA


1Um comentário

  • 51b06d6eae66e2cfdfc361d418eea715?only path=false&size=50&d=404Luis Eugênio barbosa(usuário não autenticado)
    6 de Fevereiro de 2013, 19:24

     

    Rogerio,

    pelo que entendi seu problema é criar a clausula between quando uma das datas ou todas não forem informadas.

    Então monte sua clausula where assim:

    $sql = "select * from agenda";
    $where = array();
    $parametros=array();
    if( $_REQUEST['dtinicio'] )
    {
        $where[] = 'dataagendamento >= ?';
        $parametros[] = $_REQUEST['dtinicio'];
    }

    if( $_REQUEST['dtfinal'] )
    {
        $where[] = "dataagendamento <= ?"; // para pesquisar pela marca em caixa alta e baixa e em qualquer posição
        $parametros[] = $_REQUEST['dtfinal'];
    }
    if( count($where)  > 0 )
    {
        $sql .= '  where '.implode(' and ',$where);
    }

    Abraço.

Essa comunidade não possui posts nesse blog