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().

 
  1. <?php
  2. class BoletoForm extends TPage
  3. {
  4. private $form;
  5. function __construct()
  6. {
  7. parent::__construct();
  8. $this->form = new TQuickForm;
  9. $this->form->class = 'tform';
  10. $this->form->style = 'width:640px';
  11. $this->form->setFormTitle('Gerar Boleto');
  12. $numero = new TEntry('nosso_numero');
  13. $vencimento = new TDate('data_vencimento');
  14. $valor = new TEntry('valor_boleto'); // Com vírgula e sempre com duas casas depois da virgula
  15. $sacado = new TEntry('sacado');
  16. $endereco1 = new TEntry('endereco1');
  17. $endereco2 = new TEntry('endereco2');
  18. $demonstrativo = new TText('demonstrativo');
  19. $instrucoes = new TText('instrucoes');
  20. $numero->setValue('1234');
  21. $valor->setNumericMask(2, ',', '.');
  22. $valor->setValue('100,00');
  23. $vencimento->setMask('dd/mm/yyyy');
  24. $vencimento->setValue( date('d/m/Y', mktime(0, 0, 0, date("m") , date("d")+30, date("Y")) ));
  25. $sacado->setValue('Pedro');
  26. $endereco1->setValue('Rua Júlio de Castilhos');
  27. $endereco2->setValue('Porto Alegre, CEP: 88.888-888');
  28. $demonstrativo->setValue("Pagamento inscrição ...\nMensalidade referente a .. \nBoleto Automático");
  29. $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");
  30. $this->form->addQuickField('Número', $numero, 40);
  31. $this->form->addQuickField('Vencimento', $vencimento, 100);
  32. $this->form->addQuickField('Valor', $valor, 100);
  33. $this->form->addQuickField('Sacado', $sacado, 200);
  34. $this->form->addQuickField('Endereço 1', $endereco1, 400);
  35. $this->form->addQuickField('Endereço 2', $endereco2, 400);
  36. $this->form->addQuickField('Demonstrativo', $demonstrativo, 400);
  37. $this->form->addQuickField('Instruções', $instrucoes, 400);
  38. $demonstrativo->setSize(400,100);
  39. $instrucoes->setSize(400,100);
  40. $this->form->addQuickAction('Gerar', new TAction(array($this, 'onGenerate')), 'ico_apply.png');
  41. parent::add($this->form);
  42. }
  43. public function onGenerate($param)
  44. {
  45. $data = $this->form->getData();
  46. TApplication::loadPage('BoletoView', 'onGenerate', (array) $data);
  47. }
  48. }
  49. ?>



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.

 
  1. <?php
  2. class BoletoView extends TPage
  3. {
  4. public function onGenerate($param)
  5. {
  6. $dadosboleto = $param;
  7. $dadosboleto["numero_documento"] = $dadosboleto["nosso_numero"];
  8. $dadosboleto["valor_boleto"] = str_replace(".", "",$dadosboleto["valor_boleto"]);
  9. $dadosboleto["valor_boleto"] = str_replace(",", ".",$dadosboleto["valor_boleto"]);
  10. $dadosboleto["valor_boleto"] = number_format($dadosboleto["valor_boleto"], 2, ',', '');
  11. $dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
  12. $dadosboleto["data_processamento"] = date("d/m/Y"); // Data de processamento do boleto (opcional)
  13. $demonstrativo = explode("\n", $dadosboleto['demonstrativo']);
  14. for ($n=0; $n<=2; $n++)
  15. {
  16. $key = $n+1;
  17. $texto = isset($demonstrativo[$n]) ? $demonstrativo[$n] : '';
  18. $dadosboleto["demonstrativo{$key}"] = $texto;
  19. }
  20. $instrucoes = explode("\n", $dadosboleto['instrucoes']);
  21. for ($n=0; $n<=3; $n++)
  22. {
  23. $key = $n+1;
  24. $texto = isset($instrucoes[$n]) ? $instrucoes[$n] : '';
  25. $dadosboleto["instrucoes{$key}"] = $texto;
  26. }
  27. // DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
  28. $dadosboleto["quantidade"] = "";
  29. $dadosboleto["valor_unitario"] = "";
  30. $dadosboleto["aceite"] = "N";
  31. $dadosboleto["especie"] = "R$";
  32. $dadosboleto["especie_doc"] = "DM";
  33. // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
  34. // DADOS DA SUA CONTA - BANCO DO BRASIL
  35. $dadosboleto["agencia"] = "8888";
  36. $dadosboleto["conta"] = "88888888";
  37. // DADOS PERSONALIZADOS - BANCO DO BRASIL
  38. $dadosboleto["convenio"] = "888888";
  39. $dadosboleto["contrato"] = "888888";
  40. $dadosboleto["carteira"] = "88";
  41. $dadosboleto["variacao_carteira"] = "-019";
  42. // TIPO DO BOLETO
  43. $dadosboleto["formatacao_convenio"] = "7";
  44. $dadosboleto["formatacao_nosso_numero"] = "2";
  45. // SEUS DADOS
  46. $dadosboleto["identificacao"] = "Sacador";
  47. $dadosboleto["cpf_cnpj"] = "12.222.333/0001-24";
  48. $dadosboleto["endereco"] = "Av. Bento Gonçalves, 123. Bairro Centro - Cep 88.888-888";
  49. $dadosboleto["cidade_uf"] = "Porto Alegre - RS";
  50. $dadosboleto["cedente"] = "Empresa LTDA - ME";
  51. ob_start();
  52. if (!isset($_GET['print']) OR ($_GET['print'] !== '1'))
  53. {
  54. $url = $_SERVER['QUERY_STRING'];
  55. echo "<center> <a href='' onclick='window.open(\"engine.php?{$url}&print=1\")'> <h1>Clique aqui para Imprimir</h1></a> </center>";
  56. }
  57. include("app/lib/boleto/include/funcoes_bb.php");
  58. include("app/lib/boleto/include/layout_bb.php");
  59. if (isset($_GET['print']) AND ($_GET['print'] === '1'))
  60. {
  61. echo '<script>window.print();</script>';
  62. }
  63. $content = ob_get_clean();
  64. parent::add($content);
  65. }
  66. }
  67. ?>

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:

 
  1. <?php
  2. $this->form->addQuickAction('Gerar', new TAction(array( 'BoletoView', 'onGenerate')), 'ico_apply.png');
  3. ?>
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

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


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

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


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
 
  1. <?php include ?>
fora do loop e chamei as funcoes necessarias dentro do loop.

Obrigado a todos.