Integrando a BoletoPHP ao Adianti Framework Algumas vezes já me perguntaram como integrar a BoletoPHP (http://boletophp.com.br/) ao Adianti Framework. Infelizmente a biblioteca não é orientada a objetos, o que permitiria uma integração mais elegante. Mas isso não impede que venhamos a utilizar. Neste artigo mostrarei como integrá-la ao framework. Em primeiro lugar, precisamos integrar a biblioteca ao framework. Para tal, estou dis...
PD
Integrando a BoletoPHP ao Adianti Framework  
Fechado
Algumas vezes já me perguntaram como integrar a BoletoPHP (boletophp.com.br/) ao Adianti Framework. Infelizmente a biblioteca não é orientada a objetos, o que permitiria uma integração mais elegante. Mas isso não impede que venhamos a utilizar. Neste artigo mostrarei como integrá-la ao framework.

Em primeiro lugar, precisamos integrar a biblioteca ao framework. Para tal, estou disponibilizando o arquivo em anexo (ver link no final do artigo), que trata-se da biblioteca já preparada para ser descompactada no diretório app/lib, formando a estrutura: app/lib/boleto/images e app/lib/boleto/include. Realizei pequenas substituições de caminhos na biblioteca para ela buscar as imagens em app/lib/boleto/images, e não no diretório principal da aplicação.

Depois de descompactar o arquivo em anexo, vamos criar um formulário para fornecer alguns dados dinâmicos para geração do boleto, como número, valor, vencimento, endereço e outros. Este formulário terá um botão que acionará o método onGenerate(). Este método, por sua vez, acionará o método onGenerate() da classe BoletoView, que exibirá o boleto em tela. Os dados do formulário são convertidos em array e passados como parâmetro de BoletoView::onGenerate().

<?phpclass BoletoForm extends TPage{    private $form;    function __construct()    {        parent::__construct();                $this->form = new TQuickForm;        $this->form->class = 'tform';        $this->form->style = 'width:640px';        $this->form->setFormTitle('Gerar Boleto');                $numero       = new TEntry('nosso_numero');        $vencimento   = new TDate('data_vencimento');        $valor        = new TEntry('valor_boleto'); // Com vírgula e sempre com duas casas depois da virgula        $sacado       = new TEntry('sacado');        $endereco1       = new TEntry('endereco1');        $endereco2       = new TEntry('endereco2');        $demonstrativo   = new TText('demonstrativo');        $instrucoes        = new TText('instrucoes');        $numero->setValue('1234');        $valor->setNumericMask(2, ',', '.');        $valor->setValue('100,00');        $vencimento->setMask('dd/mm/yyyy');        $vencimento->setValue( date('d/m/Y', mktime(0, 0, 0, date("m")  , date("d")+30, date("Y")) ));        $sacado->setValue('Pedro');        $endereco1->setValue('Rua Júlio de Castilhos');        $endereco2->setValue('Porto Alegre, CEP: 88.888-888');        $demonstrativo->setValue("Pagamento inscrição ...\nMensalidade referente a .. \nBoleto Automático");        $instrucoes->setValue("- Sr. Caixa, cobrar multa de 2% após o vencimento\n- Receber até 10 dias após o vencimento\n- Em caso de dúvidas entre em contato conosco: email@email.com");        $this->form->addQuickField('Número',        $numero,    40);        $this->form->addQuickField('Vencimento',    $vencimento, 100);        $this->form->addQuickField('Valor',         $valor, 100);        $this->form->addQuickField('Sacado',        $sacado, 200);        $this->form->addQuickField('Endereço 1',    $endereco1, 400);        $this->form->addQuickField('Endereço 2',    $endereco2, 400);        $this->form->addQuickField('Demonstrativo', $demonstrativo, 400);        $this->form->addQuickField('Instruções',    $instrucoes, 400);        $demonstrativo->setSize(400,100);        $instrucoes->setSize(400,100);                $this->form->addQuickAction('Gerar', new TAction(array($this, 'onGenerate')), 'ico_apply.png');        parent::add($this->form);    }    public function onGenerate($param)    {        $data = $this->form->getData();                TApplication::loadPage('BoletoView', 'onGenerate', (array) $data);    }}?>



A classe Boleto View tem como responsabilidade incluir as bibliotecas necessárias para geração do boleto e exibir ele em tela. Para tal, ela recebe um vetor de parâmetros com os dados vindos do formulário BoletoForm. É importante lembrar que este método pode ser executado de qualquer ponto do sistema por meio da chamada TApplication::loadPage(), como realizado no BoletoForm, sem necessariamente termos de construir um formulário para tal. No início do método, recebemos o vetor de parâmetros, contendo os dados do formulário e realizamos algumas transformações, além de acrescentar outros dados como número de convênio, endereço do sacador e outros, que são fixos, mas que deveriam vir de alguma tabela contendo configurações do sistema.

<?phpclass BoletoView extends TPage{    public function onGenerate($param)    {        $dadosboleto = $param;        $dadosboleto["numero_documento"] = $dadosboleto["nosso_numero"];        $dadosboleto["valor_boleto"] = str_replace(".", "",$dadosboleto["valor_boleto"]);        $dadosboleto["valor_boleto"] = str_replace(",", ".",$dadosboleto["valor_boleto"]);        $dadosboleto["valor_boleto"] = number_format($dadosboleto["valor_boleto"], 2, ',', '');        $dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto        $dadosboleto["data_processamento"] = date("d/m/Y"); // Data de processamento do boleto (opcional)        $demonstrativo = explode("\n", $dadosboleto['demonstrativo']);        for ($n=0; $n<=2; $n++)        {            $key = $n+1;            $texto = isset($demonstrativo[$n]) ? $demonstrativo[$n] : '';            $dadosboleto["demonstrativo{$key}"] = $texto;        }        $instrucoes = explode("\n", $dadosboleto['instrucoes']);        for ($n=0; $n<=3; $n++)        {            $key = $n+1;            $texto = isset($instrucoes[$n]) ? $instrucoes[$n] : '';            $dadosboleto["instrucoes{$key}"] = $texto;        }                // DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE        $dadosboleto["quantidade"] = "";        $dadosboleto["valor_unitario"] = "";        $dadosboleto["aceite"] = "N";                $dadosboleto["especie"] = "R$";        $dadosboleto["especie_doc"] = "DM";                        // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //                // DADOS DA SUA CONTA - BANCO DO BRASIL        $dadosboleto["agencia"] = "8888";        $dadosboleto["conta"] = "88888888";                // DADOS PERSONALIZADOS - BANCO DO BRASIL        $dadosboleto["convenio"] = "888888";        $dadosboleto["contrato"] = "888888";        $dadosboleto["carteira"] = "88";        $dadosboleto["variacao_carteira"] = "-019";                // TIPO DO BOLETO        $dadosboleto["formatacao_convenio"] = "7";        $dadosboleto["formatacao_nosso_numero"] = "2";        // SEUS DADOS        $dadosboleto["identificacao"] = "Sacador";        $dadosboleto["cpf_cnpj"] = "12.222.333/0001-24";        $dadosboleto["endereco"] = "Av. Bento Gonçalves, 123. Bairro Centro - Cep 88.888-888";        $dadosboleto["cidade_uf"] = "Porto Alegre - RS";        $dadosboleto["cedente"] = "Empresa LTDA - ME";        ob_start();        if (!isset($_GET['print']) OR ($_GET['print'] !== '1'))        {            $url = $_SERVER['QUERY_STRING'];            echo "<center> <a href='' onclick='window.open(\"engine.php?{$url}&print=1\")'> <h1>Clique aqui para Imprimir</h1></a> </center>";        }        include("app/lib/boleto/include/funcoes_bb.php");         include("app/lib/boleto/include/layout_bb.php");        if (isset($_GET['print']) AND ($_GET['print'] === '1'))        {            echo '<script>window.print();</script>';        }        $content = ob_get_clean();                parent::add($content);    }}?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (18)


IL

Boa Tarde

Pablo

Ficou otimo esta integracao Adianti + BoletoPHP esta me ajudando muito, parabens!!!

Testando o exemplo desenvolvido por voce, percebi que quando envio, esta aparecendo esta string no browser.

localhost/intracob/index.php?class=BoletoView&method=onGenerate&


Se o usuario alterar algum valor no browser (http://) vai alterar os dados do boleto.



A ideia seria fazer esta requisição com POST para nao ser vista ou alterada pelo usuario.

Como faço para fazer esta requisição com POST no framework?



No aguardo


Obrigado
PD

TApplication::postData();

Att,
Pablo
PD

Ou melhor ainda, conecte diretamente o botão do primeiro formulário ao método onGenerate() da BoletoView, assim:

<?php$this->form->addQuickAction('Gerar', new TAction(array( 'BoletoView', 'onGenerate')), 'ico_apply.png');?>
AS

mas se ligar direto como pegar os dados?
PD

Pelos parâmetros:

function onGenerate($param)

Os parâmetros são $_REQUEST, que engloba $_GET e $_POST.
PD

Pessoal,

Como o fórum eliminou alguns caracteres de controle, como backslashes, coloquei no pastebin:
pastebin.com/GezSuhDh
pastebin.com/gthATcGp

Att,
Pablo
IL

Bom Dia

Caro Amigo

Alterei meu botao para

<?php$this->form->addQuickAction('Gerar', new TAction(array( 'BoletoView', 'onGenerate')), 'ico_apply.png');?>


No BoletoView os dados sao carregados corretamente

Mas quando clico no link "clique aqui para imprimir"

Da erro de variaveis;

nosso_numero
data_vencimento
valor_boleto

como pego estes valores ja que agora estou passando com POST. ?


Fico no aguardo

Obrigado
PD

Substituir no BoletoView, agregando http_build_query...:

<?php        if (!isset($_GET['print']) OR ($_GET['print'] !== '1'))        {            $url = $_SERVER['QUERY_STRING'] . '&'.http_build_query($_POST); // !!! AQUI        }?>


Att,
Pablo
DS

Pablo, tentei fazer esta integração no adianti 3 e não esta funcionando será preciso realizar algua alteração?
PL

Apesar de não ter tantas opções de banco e um nome um tanto esquisito, o projeto
umbrellaTech/ya-boleto-php

https://packagist.org/packages/umbrella/retorno-boleto
https://github.com/umbrellaTech/ya-boleto-php/tree/v1.7.0

é muito bem contruido, e tem outro projeto
https://packagist.org/packages/umbrella/retorno-boleto

Todos projetado de forma simples e Orientada a Objetos. Seguindo os padrões PSR-0, PSR-1 e PSR-2.

Ambos podem ser instalados via composer.


Fica a dica.
JA

o botão "Gerar" cria a tela com o boleto e colocar o link "Clique aqui para Imprimir", quando é dado o click parece que a tela é redesenhada (desculpa, não sei o nome correto"), neste momento o boleto passa a ter um formato perfeito, antes tinha falhas no desenho.

Como faço para que quando der o click no botão Gerar ele vá direto para ultima tela, alguém passou por isso?
JA

Resumindo, quando der um click em Gerar ele vai direto para a impressora, sem fazer preview
JA

Pessoal, como faço a chamada do boleto sem fazer preview ? mandar direto para a impressora!
AR

Como fazer geração de boletos em lote pelo Adianti?
AM

Bom dia, a visualização dos dados do boleto na url ainda continuam, alguém resolveu esse problema?

localhost/pharma/engine.php?class=BoletoView&method=onGenerate&a

Ai qquer esperto com um pouco de conhecimento pode alterar os dados na url e imprimir o boleto com novos dados.
EB

Muito bom artigo.
Parabens!!
EB

Boa noite pessoal.
Alguem conseguiu gerar os boletos em lote?

Att.,
Edimar Barbosa
EB

Resolvi pessoal.
Coloquei o
<?php include ?>
fora do loop e chamei as funcoes necessarias dentro do loop.

Obrigado a todos.