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().
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); }}?>
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: