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().
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.
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().
- <?php
- class 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.
- <?php
- class 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);
- }
- }
- ?>
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
TApplication::postData();
Att,
Pablo
Ou melhor ainda, conecte diretamente o botão do primeiro formulário ao método onGenerate() da BoletoView, assim:
mas se ligar direto como pegar os dados?
Pelos parâmetros:
function onGenerate($param)
Os parâmetros são $_REQUEST, que engloba $_GET e $_POST.
Pessoal,
Como o fórum eliminou alguns caracteres de controle, como backslashes, coloquei no pastebin:
pastebin.com/GezSuhDh
pastebin.com/gthATcGp
Att,
Pablo
Bom Dia
Caro Amigo
Alterei meu botao para
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
Substituir no BoletoView, agregando http_build_query...:
Att,
Pablo
Pablo, tentei fazer esta integração no adianti 3 e não esta funcionando será preciso realizar algua alteração?
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.
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?
Resumindo, quando der um click em Gerar ele vai direto para a impressora, sem fazer preview
Pessoal, como faço a chamada do boleto sem fazer preview ? mandar direto para a impressora!
Como fazer geração de boletos em lote pelo Adianti?
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.
Muito bom artigo.
Parabens!!
Boa noite pessoal.
Alguem conseguiu gerar os boletos em lote?
Att.,
Edimar Barbosa
Resolvi pessoal.
Coloquei o
Obrigado a todos.