├── .gitignore ├── .htaccess ├── OB_init.php ├── README.textile ├── exemplos ├── exemplo_banco_amazonia.php ├── exemplo_bancoob.php ├── exemplo_banrisul.php ├── exemplo_bb.php ├── exemplo_bnb.php ├── exemplo_bradesco.php ├── exemplo_brb.php ├── exemplo_caixa.php ├── exemplo_hsbc.php └── exemplo_itau.php ├── gerar_boleto.php ├── lib ├── bancos │ ├── BB.php │ ├── BNB.php │ ├── BRB.php │ ├── BancoAmazonia.php │ ├── Bancoob.php │ ├── Banrisul.php │ ├── Bradesco.php │ ├── Caixa.php │ ├── Hsbc.php │ └── Itau.php ├── core │ ├── Banco.php │ ├── Boleto.php │ ├── Cliente.php │ ├── Configuracao.php │ ├── OB.php │ ├── Plugin.php │ ├── Template.php │ └── Vendedor.php ├── plugins │ ├── Pdf.plugin.php │ └── Pdf │ │ ├── DomPdf_Library.php │ │ ├── Pdf.php │ │ ├── mPdf_Library.php │ │ └── mpdf │ │ └── mpdf-dir.txt └── utils │ ├── Barcode.php │ ├── Date.php │ ├── Debug.php │ ├── Math.php │ ├── String.php │ ├── Validar.php │ ├── Validate_BR.php │ └── Validation.php ├── ob_logo.png ├── ob_logo_compacto.png ├── public ├── css │ ├── bb.css │ ├── blueprint │ │ ├── ie.css │ │ ├── print.css │ │ └── screen.css │ ├── caixa.css │ └── default.css └── images │ ├── banco_da_amazonia.png │ ├── banco_fiat.png │ ├── banco_pan.png │ ├── banco_pine.png │ ├── bancoob.png │ ├── banespa.png │ ├── banestes.png │ ├── banrisul.png │ ├── bb.png │ ├── besc.png │ ├── bgn.png │ ├── bmc.png │ ├── bmg.png │ ├── bnb.png │ ├── bradesco.png │ ├── brb.png │ ├── bva.png │ ├── caixa.png │ ├── hsbc.png │ ├── itau.png │ ├── nossa_caixa.png │ ├── paranabanco.png │ ├── real.png │ ├── safra.png │ ├── santander.png │ ├── sicoob.png │ ├── sudameris.png │ └── unibanco.png └── templates ├── README.textile ├── blocks ├── ficha_compensacao.htm.php └── recibo.htm.php ├── default.htm.php └── html5.htm.php /.gitignore: -------------------------------------------------------------------------------- 1 | logo_empresa.png 2 | esquema.png 3 | *git* 4 | *.komodoproject 5 | TODO.txt 6 | arquivos/* 7 | teste.php 8 | lib/utils/validation_component.php 9 | tests/* 10 | lib/bancos/Santander/ 11 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | Options +FollowSymlinks 2 | 3 | RewriteEngine On 4 | 5 | #Reescreve as chamadas a barcode/23836473254735243524753274527354732 6 | #para lib/utils/Barcode.php?n=23836473254735243524753274527354732 7 | RewriteRule ^barcode/([\d]{44})$ lib/utils/Barcode.php?n=$1 [L] 8 | -------------------------------------------------------------------------------- /OB_init.php: -------------------------------------------------------------------------------- 1 | Vendedor 54 | ->setAgencia('2345') 55 | ->setConta('67890') 56 | ->setRazaoSocial('Jose Claudio Medeiros de Lima') 57 | ->setCnpj('12.345.678/0001-90') 58 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 59 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 60 | ; 61 | //Definindo configurações gerais 62 | $ob->Configuracao 63 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 64 | ; 65 | //Definindo configurações do template. Variáveis enviadas para a configuração do template 66 | $ob->Template 67 | ->setTitle('ObjBoleto') 68 | ->setTemplate('html5') 69 | ->set('variavel', 'valor') 70 | ; 71 | //Identificando o cliente 72 | $ob->Cliente 73 | ->setNome('Maria Joelma Bezerra de Medeiros') 74 | ->setCpf('111.999.888-39') 75 | ->setEmail('mariajoelma85@hotmail.com') 76 | ; 77 | //Passando dados pro boleto 78 | $ob->Boleto 79 | ->setValor(129.45) 80 | ->setDiasVencimento(5) 81 | ->setNossoNumero('123456') 82 | ->setNumDocumento('873245') 83 | ; 84 | //Renderizando o boleto 85 | $ob->render(); 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /exemplos/exemplo_banco_amazonia.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('7') //Agência, sem dígito. O dígito será calculado para exibir no boleto 11 | ->setConta('1') 12 | ->setConvenio('386') 13 | ->setCarteira('CNR') 14 | ->setRazaoSocial('José Claudio Medeiros de Lima') 15 | ->setCpf('012.345.678-39') 16 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 17 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 18 | ; 19 | 20 | //Define as configurações do boleto 21 | $ob->Configuracao 22 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 23 | ->addInstrucao('Sr. Caixa. Não receber após 20 dias de atraso.') 24 | ->addInstrucao('Multa de 2% por atraso e 1% ao dia.') 25 | ; 26 | 27 | //Envia variáveis para ser usada nos templates 28 | $ob->Template 29 | //Define o título da página 30 | ->setTitle('PHP->OB ObjectBoleto') 31 | //Define o template que será usado 32 | ->setTemplate('html5') 33 | ; 34 | 35 | //Define as configurações do cliente 36 | $ob->Cliente 37 | ->setNome('Maria Joelma Bezerra de Medeiros') 38 | ->setCpf('111.999.888-39') 39 | ->setEmail('mariajoelma85@hotmail.com') 40 | ->setEndereco('') 41 | ->setCidade('') 42 | ->setUf('') 43 | ->setCep('') 44 | ; 45 | 46 | //Define as configurações do boleto 47 | $ob->Boleto 48 | ->setValor(15.56) 49 | ->setNumParcela(1) 50 | ->setVencimento(27,6,2014) 51 | ->setNossoNumero('123') 52 | ; 53 | 54 | //Renderiza o boleto 55 | $ob->render(); /**/ -------------------------------------------------------------------------------- /exemplos/exemplo_bancoob.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('100') 11 | ->setConta('1193') 12 | ->setCodigoCedente('1') 13 | ->setCarteira('2') 14 | ->setRazaoSocial('José Claudio Medeiros de Lima') 15 | ->setCpf('012.345.678-39') 16 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 17 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 18 | ; 19 | 20 | $ob->Configuracao 21 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 22 | ; 23 | 24 | $ob->Template 25 | ->setTitle('PHP->OB ObjectBoleto') 26 | ->setTemplate('html5') 27 | ; 28 | 29 | $ob->Cliente 30 | ->setNome('Maria Joelma Bezerra de Medeiros') 31 | ->setCpf('111.999.888-39') 32 | ->setEmail('mariajoelma85@hotmail.com') 33 | ->setEndereco('') 34 | ->setCidade('') 35 | ->setUf('') 36 | ->setCep('') 37 | ; 38 | 39 | $ob->Boleto 40 | ->setValor(550) 41 | ->setNumParcela(1) 42 | ->setVencimento(4,7,2000) 43 | ->setNossoNumero('228563') 44 | ; 45 | 46 | $ob->render(); /**/ -------------------------------------------------------------------------------- /exemplos/exemplo_banrisul.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('100') 11 | ->setConta('1193') 12 | ->setCodigoCedente('1') 13 | ->setCarteira('2') 14 | ->setRazaoSocial('José Claudio Medeiros de Lima') 15 | ->setCpf('012.345.678-39') 16 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 17 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 18 | ; 19 | 20 | $ob->Configuracao 21 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 22 | ; 23 | 24 | $ob->Template 25 | ->setTitle('PHP->OB ObjectBoleto') 26 | ->setTemplate('html5') 27 | ; 28 | 29 | $ob->Cliente 30 | ->setNome('Maria Joelma Bezerra de Medeiros') 31 | ->setCpf('111.999.888-39') 32 | ->setEmail('mariajoelma85@hotmail.com') 33 | ->setEndereco('') 34 | ->setCidade('') 35 | ->setUf('') 36 | ->setCep('') 37 | ; 38 | 39 | $ob->Boleto 40 | ->setValor(550) 41 | //->setDiasVencimento(5) 42 | ->setVencimento(4,7,2000) 43 | ->setNossoNumero('22832563') 44 | ; 45 | 46 | $ob->render(); /**/ -------------------------------------------------------------------------------- /exemplos/exemplo_bb.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('9999') 11 | ->setConta('00099999') 12 | ->setCarteira('18-7') 13 | ->setRazaoSocial('José Claudio Medeiros de Lima') 14 | ->setCpf('012.345.678-39') 15 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 16 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 17 | ->setCodigoCedente('7777777') 18 | ; 19 | 20 | $ob->Configuracao 21 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 22 | ; 23 | 24 | $ob->Template 25 | ->setTitle('PHP->OB ObjectBoleto') 26 | ->setTemplate('html5') 27 | ; 28 | 29 | $ob->Cliente 30 | ->setNome('Maria Joelma Bezerra de Medeiros') 31 | ->setCpf('111.999.888-39') 32 | ->setEmail('mariajoelma85@hotmail.com') 33 | ->setEndereco('') 34 | ->setCidade('') 35 | ->setUf('') 36 | ->setCep('') 37 | ; 38 | 39 | $ob->Boleto 40 | ->setValor(2952.95) 41 | //->setDiasVencimento(5) 42 | ->setVencimento(6,9,2011) 43 | ->setNossoNumero('87654') 44 | ->setNumDocumento('27.030195.10') 45 | ->setQuantidade(1) 46 | ; 47 | 48 | $ob->render(); /**/ 49 | -------------------------------------------------------------------------------- /exemplos/exemplo_bnb.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('0035') 11 | ->setConta('0036098') 12 | ->setCarteira('55') //Cobrança Simples - fichamento emitido pelo cliente 13 | ->setRazaoSocial('José Claudio Medeiros de Lima') 14 | ->setCpf('012.345.678-39') 15 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 16 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 17 | ; 18 | 19 | $ob->Configuracao 20 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 21 | ->addInstrucao('- Sr. Caixa, cobrar multa de 2% após o vencimento') 22 | ->addInstrucao('- Receber até 10 dias após o vencimento') 23 | ->addInstrucao('- Em caso de dúvidas entre em contato conosco: xxxx@xxxx.com.br') 24 | ; 25 | 26 | $ob->Template 27 | ->setTitle('PHP->OB ObjectBoleto') 28 | ->setTemplate('html5') 29 | ; 30 | 31 | $ob->Cliente 32 | ->setNome('Maria Joelma Bezerra de Medeiros') 33 | ->setCpf('111.999.888-39') 34 | ->setEmail('mariajoelma85@hotmail.com') 35 | ->setEndereco('') 36 | ->setCidade('') 37 | ->setUf('') 38 | ->setCep('') 39 | ; 40 | 41 | $ob->Boleto 42 | ->setValor(949.50) 43 | ->setDiasVencimento(1) 44 | //->setVencimento(18,2,2013) 45 | ->setNossoNumero('0009946') 46 | ->setNumDocumento('666688') 47 | ->setQuantidade(1) 48 | ; 49 | 50 | $ob->render(); /**/ 51 | -------------------------------------------------------------------------------- /exemplos/exemplo_bradesco.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('1172') 11 | ->setConta('0403005') 12 | ->setCarteira('06') 13 | ->setRazaoSocial('José Claudio Medeiros de Lima') 14 | ->setCpf('012.345.678-39') 15 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 16 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 17 | ->setCodigoCedente('0403005') 18 | ->setInsertDVAtPosFour(false) 19 | ; 20 | 21 | $ob->Configuracao 22 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 23 | ; 24 | 25 | $ob->Template 26 | ->setTitle('PHP->OB ObjectBoleto') 27 | ->setTemplate('html5') 28 | ; 29 | 30 | $ob->Cliente 31 | ->setNome('Maria Joelma Bezerra de Medeiros') 32 | ->setCpf('111.999.888-39') 33 | ->setEmail('mariajoelma85@hotmail.com') 34 | ->setEndereco('') 35 | ->setCidade('') 36 | ->setUf('') 37 | ->setCep('') 38 | ; 39 | 40 | $ob->Boleto 41 | ->setValor(2952.95) 42 | //->setDiasVencimento(5) 43 | ->setVencimento(6,9,2011) 44 | ->setNossoNumero('75896452') 45 | ->setNumDocumento('27.030195.10') 46 | ->setQuantidade(1) 47 | ; 48 | 49 | $ob->render(); /**/ 50 | -------------------------------------------------------------------------------- /exemplos/exemplo_brb.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('172') 11 | ->setConta('1000345') 12 | ->setCarteira('1') 13 | ->setRazaoSocial('José Claudio Medeiros de Lima') 14 | ->setCpf('012.345.678-39') 15 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 16 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 17 | ; 18 | 19 | //Define as configurações do boleto 20 | $ob->Configuracao 21 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 22 | ->addInstrucao('Sr. Caixa. Não receber após 20 dias de atraso.') 23 | ->addInstrucao('Multa de 2% por atraso e 1% ao dia.') 24 | ; 25 | 26 | //Envia variáveis para ser usada nos templates 27 | $ob->Template 28 | //Define o título da página 29 | ->setTitle('PHP->OB ObjectBoleto') 30 | //Define o template que será usado 31 | ->setTemplate('html5') 32 | ; 33 | 34 | //Define as configurações do cliente 35 | $ob->Cliente 36 | ->setNome('Maria Joelma Bezerra de Medeiros') 37 | ->setCpf('111.999.888-39') 38 | ->setEmail('mariajoelma85@hotmail.com') 39 | ->setEndereco('') 40 | ->setCidade('') 41 | ->setUf('') 42 | ->setCep('') 43 | ; 44 | 45 | //Define as configurações do boleto 46 | $ob->Boleto 47 | ->setValor(23) 48 | ->setNumParcela(1) 49 | ->setVencimento(24,1,2013) 50 | ->setNossoNumero(758964) 51 | ; 52 | 53 | //Renderiza o boleto 54 | $ob->render(); /**/ -------------------------------------------------------------------------------- /exemplos/exemplo_caixa.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | //->setAgencia('756') 11 | //->setCodigoCedente('10812') 12 | //->setCarteira('SR') //1 = SR - Sem Registro 13 | //->setRazaoSocial('Educandário Nossa Senhora das Vitórias') 14 | //->setCnpj('08.009.235/0001-56') 15 | //->setEndereco('Rua Augusto Severo, 200 Centro - Assu/RN 59.650-000') 16 | //->setEmail('financeiro@ensvassu.com.br') 17 | 18 | ->setAgencia('756') 19 | ->setCodigoCedente('00002') 20 | ->setCarteira('1') //1 = SR - Sem Registro 21 | ->setRazaoSocial('Educandário Nossa Senhora das Vitórias') 22 | ->setCnpj('08.009.235/0001-56') 23 | ->setEndereco('Rua Augusto Severo, 200 Centro - Assu/RN 59.650-000') 24 | ->setEmail('financeiro@ensvassu.com.br') 25 | ; 26 | 27 | $ob->Configuracao 28 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 29 | ; 30 | 31 | $ob->Template 32 | ->setTitle('PHP->OB ObjectBoleto') 33 | ->setTemplate('html5') 34 | ; 35 | 36 | $ob->Cliente 37 | ->setNome('Maria Joelma Bezerra de Medeiros') 38 | ->setCpf('111.999.888-39') 39 | ->setEmail('mariajoelma85@hotmail.com') 40 | ->setEndereco('') 41 | ->setCidade('') 42 | ->setUf('') 43 | ->setCep('') 44 | ; 45 | 46 | $ob->Boleto 47 | //->setValor(195) 48 | //->setDiasVencimento(5) 49 | //->setVencimento(31,1,2013) 50 | //->setNossoNumero('000000368101138') 51 | //->setNumDocumento('00002') 52 | //->setQuantidade(1) 53 | ->setValor(123.5) 54 | ->setVencimento(17,6,2002) 55 | ->setNossoNumero('0000000000000017') 56 | ->setNumDocumento('00002') 57 | ->setQuantidade(1) 58 | ; 59 | 60 | $ob->render(); /**/ 61 | -------------------------------------------------------------------------------- /exemplos/exemplo_hsbc.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('100') 11 | ->setConta('1122334') 12 | ->setCodigoCedente('1122334') 13 | ->setCarteira('CNR') 14 | ->setRazaoSocial('José Claudio Medeiros de Lima') 15 | ->setCpf('012.345.678-39') 16 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 17 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 18 | ; 19 | 20 | $ob->Configuracao 21 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 22 | ; 23 | 24 | $ob->Template 25 | ->setTitle('PHP->OB ObjectBoleto') 26 | ->setTemplate('html5') 27 | ; 28 | 29 | $ob->Cliente 30 | ->setNome('Maria Joelma Bezerra de Medeiros') 31 | ->setCpf('111.999.888-39') 32 | ->setEmail('mariajoelma85@hotmail.com') 33 | ->setEndereco('') 34 | ->setCidade('') 35 | ->setUf('') 36 | ->setCep('') 37 | ; 38 | 39 | $ob->Boleto 40 | ->setValor(2952.95) 41 | ->setVencimento(5,6,2011) 42 | ->setNossoNumero('0000012345678943') 43 | ; 44 | 45 | $ob->render(); 46 | -------------------------------------------------------------------------------- /exemplos/exemplo_itau.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('0148') 11 | ->setConta('34851') 12 | ->setCarteira('175') 13 | ->setRazaoSocial('José Claudio Medeiros de Lima') 14 | ->setCpf('012.345.678-39') 15 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 16 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 17 | ; 18 | 19 | $ob->Configuracao 20 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 21 | ; 22 | 23 | $ob->Template 24 | ->setTitle('PHP->OB ObjectBoleto') 25 | ->setTemplate('html5') 26 | ; 27 | 28 | $ob->Cliente 29 | ->setNome('Maria Joelma Bezerra de Medeiros') 30 | ->setCpf('111.999.888-39') 31 | ->setEmail('mariajoelma85@hotmail.com') 32 | ->setEndereco('') 33 | ->setCidade('') 34 | ->setUf('') 35 | ->setCep('') 36 | ; 37 | 38 | $ob->Boleto 39 | ->setValor(666.06) 40 | ->setNumParcela(1) 41 | ->setVencimento(5,3,2006) 42 | ->setNossoNumero('51') 43 | ; 44 | 45 | $ob->render(); /**/ -------------------------------------------------------------------------------- /gerar_boleto.php: -------------------------------------------------------------------------------- 1 | Vendedor 9 | 10 | ->setAgencia('0016') 11 | ->setConta('1193') 12 | ->setCarteira('55') 13 | ->setRazaoSocial('José Claudio Medeiros de Lima') 14 | ->setCpf('012.345.678-39') 15 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 16 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 17 | ; 18 | 19 | $ob->Configuracao 20 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 21 | ; 22 | 23 | $ob->Template 24 | ->setTitle('PHP->OB ObjectBoleto') 25 | ->setTemplate('html5') 26 | ->set('instrucao', array('linha1', 'linha2', 'linha3')) 27 | ; 28 | 29 | $ob->Cliente 30 | ->setNome('Maria Joelma Bezerra de Medeiros') 31 | ->setCpf('111.999.888-39') 32 | ->setEmail('mariajoelma85@hotmail.com') 33 | ->setEndereco('') 34 | ->setCidade('') 35 | ->setUf('') 36 | ->setCep('') 37 | ; 38 | 39 | $ob->Boleto 40 | ->setValor(1000) 41 | //->setDiasVencimento(5) 42 | ->setVencimento(10,9,2000) 43 | ->setNossoNumero('1234567') 44 | ->setNumDocumento('27.030195.10') 45 | ->setQuantidade(1) 46 | ; 47 | 48 | $ob->render(); /**/ 49 | /* 50 | $ob->Vendedor 51 | ->setAgencia('1565') 52 | ->setConta('87000000414') 53 | ->setCodigoCedente('87000000414') 54 | ->setCarteira('55') 55 | ->setRazaoSocial('José Claudio Medeiros de Lima') 56 | ->setCpf('012.345.678-39') 57 | ->setEndereco('Rua dos Mororós 111 Centro, São Paulo/SP CEP 12345-678') 58 | ->setEmail('joseclaudiomedeirosdelima@uol.com.br') 59 | ; 60 | 61 | $ob->Configuracao 62 | ->setLocalPagamento('Pagável em qualquer banco até o vencimento') 63 | ; 64 | 65 | $ob->Template 66 | ->setTitle('PHP->OB ObjectBoleto') 67 | ->setTemplate('html5') 68 | ; 69 | 70 | $ob->Cliente 71 | ->setNome('Maria Joelma Bezerra de Medeiros') 72 | ->setCpf('111.999.888-39') 73 | ->setEmail('mariajoelma85@hotmail.com') 74 | ->setEndereco('') 75 | ->setCidade('') 76 | ->setUf('') 77 | ->setCep('') 78 | ; 79 | 80 | $ob->Boleto 81 | ->setValor(1000) 82 | ->setDiasVencimento(5) 83 | //->setVencimento(10,9,2000) 84 | ->setNossoNumero('1234567') 85 | ->setNumDocumento('27.030195.10') 86 | ->setQuantidade(1) 87 | ; 88 | 89 | $ob->render();/**/ -------------------------------------------------------------------------------- /lib/bancos/BB.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 17/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class BB extends Banco{ 24 | public $Codigo = '001'; 25 | public $Nome = 'Banco do Brasil'; 26 | public $Css = 'bb.css'; 27 | public $Image = 'bb.png'; 28 | 29 | public $tamanhos = array( 30 | #Campos comuns a todos os bancos 31 | 'Banco' => 3, //identificação do banco 32 | 'Moeda' => 1, //Código da moeda: real=9 33 | 'DV' => 1, //Dígito verificador geral da linha digitável 34 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 35 | 'Valor' => 10, //Valor nominal do título 36 | #Campos variávies 37 | 'Agencia' => 4, //Código da agencia, sem dígito 38 | 'Conta' => 8, //Número da conta 39 | 'CodigoCedente' => 6, //Número do convênio fornecido pelo banco 40 | 'DigitoConta' => 1, //Dígito da conta do Cedente 41 | 'NossoNumero' => 5, //Nosso número 42 | 'DigitoNossoNumero' => 5, //Dígito do nosso número 43 | 'Carteira' => 2, //Código da carteira 44 | ); 45 | 46 | /* 47 | @var string $layoutCodigoBarras 48 | armazena o layout que será usado para gerar o código de barras desse banco. 49 | Cada variável é precedida por dois-pontos (:), que serão substituídas 50 | pelos seus respectivos valores 51 | */ 52 | // public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:NossoNumero:Agencia:Conta:Carteira'; 53 | 54 | /** 55 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 56 | * para a geração correta do código de barras 57 | * Especificamente para o Hsbc, temos duas particularidas: Data no formato juliano, e 58 | * um dígito verificador triplo para o nosso número. 59 | * 60 | * 61 | * @version 0.1 28/05/2011 Initial 62 | */ 63 | public function particularidade($object){ 64 | switch ($object->Vendedor->Carteira) { 65 | case '18-6': 66 | $object->Boleto->NossoNumero = $object->Data['CodigoCedente'] . Math::Mod11($object->Data['NossoNumero'], 0, 0, true); 67 | break; 68 | case '18-6-17': 69 | $this->layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:NossoNumero21'; 70 | break; 71 | case '18-7': 72 | $this->layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor000000:CodigoCedente:NossoNumero:Carteira'; 73 | $object->Boleto->NossoNumero = $object->Data['CodigoCedente'] . $object->Data['NossoNumero']; 74 | break; 75 | case '18-8': 76 | $this->layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor000000:CodigoCedente:NossoNumero:Carteira'; 77 | $object->Boleto->NossoNumero = $object->Data['CodigoCedente'] . Math::Mod11($object->Data['NossoNumero'], 0, 0, true); 78 | break; 79 | } 80 | $object->Vendedor->Carteira = '18'; 81 | //Gerando o número do dígito da conta 82 | $object->Data['DigitoConta'] = Math::Mod11($object->Cliente->Conta); 83 | $object->Data['DigitoNossoNumero'] = Math::Mod11($object->Boleto->NossoNumero); 84 | } 85 | 86 | /* 87 | @var $carteiras 88 | Identifica as carteiras disponíveis para esse banco. 89 | 90 | - A primeira carteira sempre é a carteira padrão. 91 | - Se a carteira for um array, esse array deverá conter as diferenças 92 | nos tamanhos entre essa carteira e a carteira padrão. Se for uma 93 | string, será considerado que os tamanahos são os mesmos da carteira 94 | padrão, e o valor será o nome da carteira. 95 | - Só é necessário informar os campos cujos tamanhos sejam diferentes 96 | dos da carteira padrão. 97 | Abaixo, "CNR" é a carteira padrão, e "CNR Fácil" é a segunda opção 98 | de carteira. No "CNR Fácil", há apenas as mudanças no NossoNumero e no 99 | CodigoCedente. Os demais campos são iguais 100 | */ 101 | public $carteiras = array( 102 | '18-6', 103 | '18-6-17' => array('NossoNumero' => 17, 'CodigoCedente' => 7), 104 | '18-7' => array('NossoNumero' => 10, 'CodigoCedente' => 7), 105 | '18-8' => array('NossoNumero' => 9, 'CodigoCedente' => 8) 106 | ); 107 | 108 | /* 109 | @var array $obrigatorios 110 | Armazena os campos obrigatórios para a geração do código de 111 | barras e a linha digitável neste banco, assim como a emissão 112 | do boleto bancário 113 | */ 114 | public $obrigatorios = array( 115 | 'Agencia', 'CodigoCedente', 116 | 'Nome', 'Valor', 'Vencimento', 117 | 'Banco', 'Moeda', 'NossoNumero', 'Carteira' 118 | ); 119 | 120 | 121 | 122 | 123 | 124 | } -------------------------------------------------------------------------------- /lib/bancos/BNB.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 25/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class BNB extends Banco{ 24 | public $Codigo = '004'; 25 | public $Nome = 'Banco do Nordeste'; 26 | //public $Css = 'bnb.css'; 27 | public $Image = 'bnb.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | */ 34 | public $tamanhos = array( 35 | #Campos comuns a todos os bancos 36 | 'Banco' => 3, //identificação do banco 37 | 'Moeda' => 1, //Código da moeda: real=9 38 | 'DV' => 1, //Dígito verificador geral da linha digitável 39 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 40 | 'Valor' => 10, //Valor nominal do título 41 | #Campos variávies 42 | 'Agencia' => 4, //Código da agencia, sem dígito 43 | 'Conta' => 7, //Número da conta 44 | 'DigitoConta' => 1, //Dígito da conta do Cedente 45 | 'NossoNumero' => 7, //Nosso número 46 | 'DigitoNossoNumero' => 1, //Dígito do nosso número 47 | 'Carteira' => 2, //Código da carteira 48 | // 'Zeros' => 3, //Zeros 49 | ); 50 | 51 | /* 52 | @var string $layoutCodigoBarras 53 | armazena o layout que será usado para gerar o código de barras desse banco. 54 | Cada variável é precedida por dois-pontos (:), que serão substituídas 55 | pelos seus respectivos valores 56 | */ 57 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:Agencia:Conta:DigitoConta:NossoNumero:DigitoNossoNumero:Carteira000'; 58 | 59 | /** 60 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 61 | * para a geração correta do código de barras 62 | * 63 | * 64 | * 65 | * @version 0.1 28/05/2011 Initial 66 | */ 67 | public function particularidade($object){ 68 | $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); 69 | $object->Data['DigitoConta'] = Math::Mod10($object->Data['Conta']); 70 | $object->Data['DigitoNossoNumero'] = Math::Mod10($object->Data['NossoNumero']); 71 | } 72 | 73 | } -------------------------------------------------------------------------------- /lib/bancos/BRB.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 18/10/2013 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class BRB extends Banco{ 24 | public $Codigo = '070'; 25 | public $Nome = 'Banco de Brasília'; 26 | //public $Css = 'bnb.css'; 27 | public $Image = 'brb.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | 34 | ---- 35 | Formatação no bloqueto 36 | ---- 37 | Os 3 primeiros campos da chave ASBACE (zeros, agencia e conta), devem ser separados 38 | por um traço ou espaço e impressos no quadrilátero "Agência/Código Cedente" no bloqueto 39 | de cobrança 40 | Ex.: 41 | Agência/ Código do Cedente 42 | 000–058-6002006 43 | 44 | Os demais campos são juntos e impressos no quadrilátero "Nosso Número" 45 | Ex.: 46 | Nosso Número 47 | 100000107045 48 | 49 | ---- 50 | Descrição dos campos 51 | ---- 52 | O campo "Carteira" (ou "categoria") identifica os tipos de cobrança. Que são: 53 | Tipo "1" - Cobrança direta sem registro 54 | - Bloqueto pré impresso fornecido pelo BRB- Banco de Brasília S.A ao cedente; 55 | - Emissão própria do cedente em papel A4; 56 | - Impressão local pelo cedente em papel A4 utilizando o módulo de Cobrança Offline) 57 | Tipo "2" - Cobrança direta com registro 58 | - Bloqueto impresso pelo cliente e entregue diretamente ao Sacado. É necessário a 59 | transmissão do arquivo de remessa para o Banco. 60 | 61 | O campo "sequencial", ou "nosso número", é montado a critério do cedente. Pode 62 | ser um número sequencial iniciado em 1, ou um número composto. 63 | Ex.: As 2 primeiras posições pode ser o ano, e as outras 4 uma sequência. O mais 64 | importante é que esse número não se repita 65 | 66 | O campo "banco" sempre é 070, que é o código para Banco de Brasília S.A. 67 | 68 | DV1 e DV2 são calculados a partir das 23 posições anteriores 69 | 70 | */ 71 | public $tamanhos = array( 72 | #Campos comuns a todos os bancos 73 | 'Banco' => 3, //identificação do banco 74 | 'Moeda' => 1, //Código da moeda: real=9 75 | 'DV' => 1, //Dígito verificador geral da linha digitável 76 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 77 | 'Valor' => 10, //Valor nominal do título 78 | #Campos variávies. Neste banco, chamado de Chave ASBACE, com 25 posições 79 | //'Zeros' => 3 //Zeros 80 | 'Agencia' => 3, //Código da agencia, sem dígito 81 | 'Conta' => 7, //Número da conta 82 | 'Categoria' => 1, //Carteira, chama de "Categoria" por este banco 83 | 'NossoNumero' => 6, //Nosso número, também chamado de sequencial 84 | 'Banco' => 3, //Código do Banco: 070 85 | 'DV1' => 1, //Dígito verificador 1, baseado nos 23 algarismos anteriores 86 | 'DV2' => 1, //Dígito verificador 2, baseado nos 24 algarismos anteriores, incluindo o DV1 87 | ); 88 | 89 | /* 90 | @var string $layoutCodigoBarras 91 | armazena o layout que será usado para gerar o código de barras desse banco. 92 | Cada variável é precedida por dois-pontos (:), que serão substituídas 93 | pelos seus respectivos valores 94 | */ 95 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor000:Agencia:Conta:Categoria:NossoNumero:Banco:DV1:DV2'; 96 | 97 | 98 | /** 99 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 100 | * para a geração correta do código de barras 101 | * 102 | * 103 | * 104 | * @version 0.1 18/10/2013 Initial 105 | */ 106 | public function particularidade($object){ 107 | //Formato os dados 108 | $object->Data['Categoria'] = $object->Vendedor->Carteira; 109 | $object->Data['DV1'] = $this->dv1($object->Data); 110 | $object->Data['DV2'] = $this->dv2($object->Data); 111 | 112 | //Formato o Nosso Número de acordo com o padrão do banco 113 | $object->Boleto->NossoNumero = $this->layoutNossoNumero($object->Data); 114 | } 115 | 116 | /** 117 | * Formata o Nosso Número desse banco 118 | * 119 | * @version 0.1 18/1/2013 120 | * 121 | * @param array $data Array com todos os dados constantes na classe 122 | * @return string String formatada no padrão do Nosso Número do banco 123 | */ 124 | public function layoutNossoNumero($data){ 125 | return String::insert(':Categoria:NossoNumero:Banco:DV1:DV2', $data); 126 | } 127 | 128 | /** 129 | * Formata o campo Agência/Codigo do Cliente no boleto, de acordo com as especificações de cada banco 130 | * Esse método é opcional na classe, e quando não é declarado, o boleto bancário exibe 131 | * a agência com dígito e a conta com dígito, no formato: 123-4/ 23346-3 132 | * 133 | * @version 0.1 18/01/2013 Initial 134 | * 135 | * @param array $data Array com todos os dados constantes na classe 136 | * @return string String formatada no padrão do Nosso Número do banco 137 | */ 138 | public function agenciaCodigoCedente(){ 139 | return String::insert('000-:Agencia-:Conta', $this->parent->Data); 140 | } 141 | 142 | /** 143 | * Cálculo do Dígito Verificador 1 144 | * 145 | * Módulo 10 das 23 posições anteriores da chave ASBACE 146 | * 147 | * @version 0.1 18/10/2013 148 | * 149 | * @param array $data Array com todos os dados constantes na classe 150 | * @return int Inteiro contendo o dígito procurado 151 | */ 152 | public function dv1($data){ 153 | //pr($data); 154 | $string = String::insert('000:Agencia:Conta:Categoria:NossoNumero:Banco', $data); 155 | //pr('00017201326131758964070'); 156 | //pr($string); 157 | //pr(Math::Mod11($string, 0, 0, false, 7)); 158 | //pr(Math::Mod10($string)); 159 | return Math::Mod10($string); 160 | } 161 | 162 | /** 163 | * Cálculo do Dígito Verificador 2 164 | * 165 | * Módulo 10 das 24 posições anteriores da chave ASBACE, incluindo o DV1 166 | * 167 | * @version 0.1 18/10/2013 168 | * 169 | * @param array $data Array com todos os dados constantes na classe 170 | * @return int Inteiro contendo o dígito procurado 171 | */ 172 | public function dv2($data){ 173 | $string = String::insert('000:Agencia:Conta:Carteira:NossoNumero:Banco:DV1', $data); 174 | //pr($string); 175 | return Math::Mod11($string, 0, 0, false, 7); 176 | } 177 | } -------------------------------------------------------------------------------- /lib/bancos/BancoAmazonia.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 19/10/2013 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class BancoAmazonia extends Banco{ 24 | public $Codigo = '003'; 25 | public $Nome = 'Banco da Amazônia'; 26 | //public $Css = 'bnb.css'; 27 | public $Image = 'banco_da_amazonia.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | 34 | ---- 35 | Descrição dos campos 36 | ---- 37 | O campo "sequencial", ou "nosso número", é montado a critério do cedente. Precisa 38 | ser um número único com no máximo 16 caracteres 39 | */ 40 | public $tamanhos = array( 41 | #Campos comuns a todos os bancos 42 | 'Banco' => 3, //identificação do banco 43 | 'Moeda' => 1, //Código da moeda: real=9 44 | 'DV' => 1, //Dígito verificador geral da linha digitável 45 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 46 | 'Valor' => 10, //Valor nominal do título 47 | #Campos variávies. 48 | 'AgComDigito' => 4, //Agencia, COM dígito calculado pelo Mod11 49 | 'Convenio' => 4, //Número do convênio firmado com o banco 50 | 'NossoNumero' => 16, //Nosso número, também chamado de sequencial. 51 | //'Identificador' => 1, //Identificador no Sistema: 8. Sempre 8 52 | ); 53 | 54 | /* 55 | @var string $layoutCodigoBarras 56 | armazena o layout que será usado para gerar o código de barras desse banco. 57 | Cada variável é precedida por dois-pontos (:), que serão substituídas 58 | pelos seus respectivos valores 59 | */ 60 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:AgComDigito:Convenio:NossoNumero8'; 61 | 62 | 63 | /** 64 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 65 | * para a geração correta do código de barras 66 | * 67 | * 68 | * 69 | * @version 0.1 18/10/2013 Initial 70 | */ 71 | public function particularidade($object){ 72 | //Inserindo a informação de convênio, com 4 dígitos 73 | $object->Data['Convenio'] = OB::zeros($object->Vendedor->Convenio, 4); 74 | 75 | //Incluindo os dados da agencia com o dígito, exigência do boleto e 76 | //necessário para criar o código de barras e a linha digitável 77 | $object->Data['AgComDigito'] = OB::zeros(Math::Mod11($object->Vendedor->Agencia, 0,0,true,9,''),4); 78 | 79 | //Formato o "Nosso Número" que é enviado pro boleto de acordo 80 | //com o padrão do banco, com 16 caracteres 81 | $object->Boleto->NossoNumero = OB::zeros($object->Data['NossoNumero'], 16); 82 | } 83 | 84 | /** 85 | * Formata o Nosso Número desse banco 86 | * 87 | * @version 0.1 18/1/2013 88 | * 89 | * @param array $data Array com todos os dados constantes na classe 90 | * @return string String formatada no padrão do Nosso Número do banco 91 | */ 92 | //public function layoutNossoNumero($data){ 93 | //return String::insert(':NossoNumero:Banco:DV1:DV2', $data); 94 | //} 95 | 96 | /** 97 | * Formata o campo Agência/Codigo do Cliente no boleto, de acordo com as especificações de cada banco 98 | * Esse método é opcional na classe, e quando não é declarado, o boleto bancário exibe 99 | * a agência com dígito e a conta com dígito, no formato: 123-4/ 23346-3 100 | * 101 | * @version 0.1 18/01/2013 Initial 102 | * 103 | * @param array $data Array com todos os dados constantes na classe 104 | * @return string String formatada no padrão do Nosso Número do banco 105 | */ 106 | public function agenciaCodigoCedente(){ 107 | $data = $this->parent->Data; 108 | $string = OB::zeros(Math::Mod11($data['Agencia'], 0,0, true), 5) . ' / ' . OB::zeros(Math::Mod11($data['Conta'], 0,0, true), 7); 109 | 110 | return $string; 111 | } 112 | } -------------------------------------------------------------------------------- /lib/bancos/Bancoob.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 28/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class Bancoob extends Banco{ 24 | public $Codigo = '756'; 25 | public $Nome = 'Bancoob'; 26 | //public $Css; 27 | public $Image = 'bancoob.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | 34 | 1 5 10 15 20 25 30 35 40 44 35 | | | | | | | | | | | 36 | 75692100100000550002010001000000111228563001 37 | └-┘↓↓└--┘└--------┘↓└--┘└┘└-----┘└┘└----┘└-┘ 38 | | || | | | | | | | | └--- Número da Parcela do boleto 39 | | || | | | | | | | └-------- Nosso número 40 | | || | | | | | | └------------ Ano da emisão 41 | | || | | | | | └---------------- Código do Cedente 42 | | || | | | | └--------------------- Modalidade de cobrança (01) 43 | | || | | | └------------------------ Agência 44 | | || | | └-------------------------- Carteira 45 | | || | └-------------------------------- Valor 46 | | || └-------------------------------------- Fator de Vencimento 47 | | |└----------------------------------------- Dígito do código de barras 48 | | └------------------------------------------ Código da moeda 49 | └-------------------------------------------- Código do banco 50 | 51 | 52 | */ 53 | public $tamanhos = array( 54 | #Campos comuns a todos os bancos 55 | 'Banco' => 3, //identificação do banco 56 | 'Moeda' => 1, //Código da moeda: real=9 57 | 'DV' => 1, //Dígito verificador geral da linha digitável 58 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 59 | 'Valor' => 10, //Valor nominal do título 60 | #Campos variávies 61 | 'Carteira' => 1, //Código da agência 62 | 'Agencia' => 4, //Código do cedente 63 | //'ModalidadeCobranca'=> 2, //Nosso número 64 | 'CodigoCedente' => 7, //Nosso número 65 | 'AnoEmissao' => 2, //Nosso número //São 8 números, mas os 2 primeiros são sempre referente ao ano de emissão do boleto. Exemplo: 2011, todos os nossos números devem iniciar com 11 66 | 'NossoNumero' => 6, //Nosso número //São 8 números, mas os 2 primeiros são sempre referente ao ano de emissão do boleto. Exemplo: 2011, todos os nossos números devem iniciar com 11 67 | 'NumParcela' => 3, //Nosso número 68 | ); 69 | 70 | /* 71 | @var string $layoutCodigoBarras 72 | Armazena o layout que será usado para gerar o código de barras desse banco. 73 | Cada variável é precedida por dois-pontos (:), que serão substituídas 74 | pelos seus respectivos valores 75 | */ 76 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:Carteira:Agencia01:CodigoCedente:AnoEmissao:NossoNumero:NumParcela'; 77 | 78 | /** 79 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 80 | * para a geração correta do código de barras 81 | * Particularmente para o Banrisul, ele acrescenta ao array OB::$Data, que 82 | * guarda as variáveis que geram o código de barras, uma nova variável 83 | * $DuploDigito, específica desse banco 84 | * 85 | * @version 0.1 28/05/2011 Initial 86 | */ 87 | public function particularidade($object){ 88 | $object->Data['NumParcela'] = OB::zeros($object->Boleto->NumParcela, 3); 89 | $object->Data['AnoEmissao'] = date('y'); 90 | $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); 91 | } 92 | } -------------------------------------------------------------------------------- /lib/bancos/Banrisul.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 28/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class Banrisul extends Banco{ 24 | public $Codigo = '041'; 25 | public $Nome = 'Banrisul'; 26 | //public $Css; 27 | public $Image = 'banrisul.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | 34 | Especificações sobre as posições 20 a 44 do código de barras 35 | Posições 20 a 20 Produto: 36 | "1" Cobrança Normal, Fichário emitido pelo BANRISUL 37 | "2" Cobrança Direta, Fichário emitido pelo CLIENTE. 38 | Posição 21 a 21 Constante "1" 39 | Posição 22 a 24 Agência Cedente sem Número de Controle. 40 | Posição 25 a 31 Código do Cedente sem Número de Controle. 41 | Posição 32 a 39 Nosso Número sem Número de Controle. 42 | Posição 40 a 42 Constante "041". 43 | Posição 43 a 44 Duplo Dígito referente às posições 20 a 42 (módulos 10 e 11). 44 | 45 | 46 | 1 5 10 15 20 25 30 35 40 44 47 | | | | | | | | | | | 48 | 0419 100100000550002110000000012283256304168 //manual 49 | 04191100100000550002110000000012283256304168 //gerado 50 | | | \/ 51 | dv dig.duplo 52 | 53 | */ 54 | public $tamanhos = array( 55 | #Campos comuns a todos os bancos 56 | 'Banco' => 3, //identificação do banco 57 | 'Moeda' => 1, //Código da moeda: real=9 58 | 'DV' => 1, //Dígito verificador geral da linha digitável 59 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 60 | 'Valor' => 10, //Valor nominal do título 61 | #Campos variávies 62 | 'Agencia' => 3, //Código da agência 63 | 'CodigoCedente' => 7, //Código do cedente 64 | 'NossoNumero' => 8, //Nosso número 65 | ); 66 | 67 | /* 68 | @var string $layoutCodigoBarras 69 | Armazena o layout que será usado para gerar o código de barras desse banco. 70 | Cada variável é precedida por dois-pontos (:), que serão substituídas 71 | pelos seus respectivos valores 72 | */ 73 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor21:Agencia:CodigoCedente:NossoNumero041:DuploDigito'; 74 | 75 | /** 76 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 77 | * para a geração correta do código de barras 78 | * Particularmente para o Banrisul, ele acrescenta ao array OB::$Data, que 79 | * guarda as variáveis que geram o código de barras, uma nova variável 80 | * $DuploDigito, específica desse banco 81 | * 82 | * @version 0.1 28/05/2011 Initial 83 | */ 84 | public function particularidade($object){ 85 | $codigo = String::insert('21:Agencia:CodigoCedente:NossoNumero041', $object->Data); 86 | $dv1 = Math::Mod10($codigo); 87 | $dv2 = Math::Mod11($codigo . $dv1); 88 | $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); 89 | 90 | return $object->Data['DuploDigito'] = self::DuploDigito($codigo); 91 | } 92 | 93 | /* 94 | 95 | 3.4.1.1 PRIMEIRO DÍGITO – MÓDULO 10 96 | P1 – Multiplicar Os Dígitos Do Argumento Pelos Pesos 2,1,2,....Da Direita Para Esquerda; 97 | P2 – Subtrair 9 Do Valor Obtido Em Cada Multiplicação Do P1 Se Superior A 9; 98 | P3 – Efetuar Somatório Dos Resultados Das Multiplicações P1 Após P2; 99 | P4 – Obter O Resto Da Divisão Inteira Do Somatório De P3 Por 10; 100 | P5 – O Primeiro Dígito Será 10 Menos O Resto Da Divisão Inteira De P4; 101 | P6 – Se O Resto Da Divisão Inteira De P4 For Zero, Então O Primeiro Dígito Será Zero. 102 | 103 | 3.4.1.2 SEGUNDO DÍGITO – MÓDULO 11 104 | P7 – Multiplicar Os Dígitos Do Novo Argumento (Original Acrescido Do Primeiro Dígito) Pelos Pesos 2 A 7 Da Direita Para Esquerda; 105 | P8 – Efetuar Somatório Dos Resultados Das Multiplicações De P7; 106 | P9 – Obter O Resto Da Divisão Inteira Do Somatório De P8 Por 11; 107 | P10 – O Segundo Dígito Será 11 Menos O Resto Da Divisão Inteira De P9; 108 | P11 – Se O Resto Da Divisão Inteira De P9 For Zero, Então O Segundo Dígito Será Zero; 109 | P12 – Se O Resto Da Divisão Inteira De P9 For 1 (Um), Então Somar 1 (Um) 110 | Ao Primeiro Dígito Calculado (Módulo 10) E Reiniciar A Partir De P7; 111 | P13 – Se A Soma De 1 (Um) Ao Primeiro Dígito, Descrito No P12, For Maior Que 9, Então 112 | O Primeiro Dígito (Módulo 10) Será Zero; 113 | P14 – Nos Casos De P12 E P13 O Primeiro Conserva Seu Valor Para O Seu Duplo-Dígito Final. 114 | 115 | EXEMPLO DE CÁLCULO DO DUPLO-DÍGITO (NC): 116 | Toma-se o argumento 00009194: 117 | P1 - 9x1, 1x2, 9x1, 4x2 118 | P2 - = 9, =2, =9, =8 119 | P3 - 9 + 2 + 9 + 8 = 28 120 | P4 - 28/10 resto 8 121 | P5 - 10 - 8 = 2 (Primeiro Dígito) 122 | P6 - (Não Se Aplica Neste Caso) 123 | P7 - 9x6, 1x5, 9x4, 4x3, 2x2 124 | P8 - 54 + 5 + 36 + 12 + 4 = 111 125 | P9 - 111/11 resto 1 126 | P10 – 11 – 1 = 10 (Inválido) 127 | P11 - (Não Se Aplica Neste Caso) 128 | P12 – 91943 (Novo Argumento) 129 | P13 – (Não Se Aplica Neste Caso) 130 | P14 – Primeiro Dígito Passa A Ser 3 131 | P7 - 9x6, 1x5, 9x4, 4x3, 3x2 132 | P8 - 54 + 5 + 36 + 12 + 6 = 113 133 | P9 - 113/11 resto 3 134 | P10 – 11 – 3 = 8 (Segundo Dígito) 135 | P11 – (Não Se Aplica Neste Caso) 136 | P12 – (Não Se Aplica Neste Caso) 137 | P13 – (Não Se Aplica Neste Caso) 138 | P14 – Primeiro Dígito Permanece Com 3 Resultado: 139 | Argumento 00009194 Duplo Dígito = 38 140 | Nota: Mesmo Não Constando No Exemplo, O Número Do Título Para O Banco Sempre Deve Ser Composto Por 8 (Oito) Dígitos, Neste Caso Deve Ser Completado Com Zeros A Esquerda. 141 | */ 142 | public static function DuploDigito($num){ 143 | #DV1 144 | $dv1 = Math::Mod10($num); 145 | 146 | #DV2 - $num concatenado com $dv1, calculado com Mod11 com 147 | #multiplicador máximo 7 148 | $dv2 = Math::Mod11($num . $dv1, 10, 0, false, 7); 149 | 150 | #Se $dv2 = 10, adiciona 1 a $dv1 e recalcula $dv2 151 | #concatenando agora o novo $dv1 152 | if($dv2 == 10){ 153 | $dv1++; 154 | 155 | #Se o novo valor de $dv1 for maior que 9, então 156 | #$dv1 passará a ser 0 157 | if($dv1 > 9){ 158 | $dv1 = 0; 159 | } 160 | 161 | $dv2 = Math::Mod11($num . $dv1, 10, 0, false, 7); 162 | } 163 | 164 | return $dv1 . $dv2; 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /lib/bancos/Bradesco.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 01/09/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class Bradesco extends Banco{ 24 | public $Codigo = '237'; 25 | public $Nome = 'Bradesco'; 26 | //public $Css = 'bb.css'; 27 | public $Image = 'bradesco.png'; 28 | 29 | public $tamanhos = array( 30 | #Campos comuns a todos os bancos 31 | 'Banco' => 3, //identificação do banco 32 | 'Moeda' => 1, //Código da moeda: real=9 33 | 'DV' => 1, //Dígito verificador geral da linha digitável 34 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 35 | 'Valor' => 10, //Valor nominal do título 36 | #Campos variávies 37 | 'Agencia' => 4, //Código da agencia, sem dígito 38 | 'Conta' => 6, //Número da conta 39 | 'CodigoCedente' => 7, //Número do convênio fornecido pelo banco 40 | 'DigitoConta' => 1, //Dígito da conta do Cedente 41 | 'NossoNumero' => 11, //Nosso número 42 | 'DigitoNossoNumero' => 5, //Dígito do nosso número 43 | 'Carteira' => 2, //Código da carteira 44 | ); 45 | 46 | /* 47 | @var string $layoutCodigoBarras 48 | armazena o layout que será usado para gerar o código de barras desse banco. 49 | Cada variável é precedida por dois-pontos (:), que serão substituídas 50 | pelos seus respectivos valores 51 | */ 52 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:Agencia:CartNum:CodigoCedente0'; 53 | 54 | /** 55 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 56 | * para a geração correta do código de barras 57 | * Especificamente para o Hsbc, temos duas particularidas: Data no formato juliano, e 58 | * um dígito verificador triplo para o nosso número. 59 | * 60 | * 61 | * @version 0.1 28/05/2011 Initial 62 | */ 63 | public function particularidade($object){ 64 | $object->Data['CartNum'] = $object->Data['Carteira'] . $object->Data['NossoNumero']; 65 | $object->Boleto->NossoNumero = $object->Vendedor->Carteira . ' / ' . $this->dvNossoNumero($object->Data);; 66 | } 67 | 68 | /* 69 | @var $carteiras 70 | Identifica as carteiras disponíveis para esse banco. 71 | 72 | - A primeira carteira sempre é a carteira padrão. 73 | - Se a carteira for um array, esse array deverá conter as diferenças 74 | nos tamanhos entre essa carteira e a carteira padrão. Se for uma 75 | string, será considerado que os tamanahos são os mesmos da carteira 76 | padrão, e o valor será o nome da carteira. 77 | - Só é necessário informar os campos cujos tamanhos sejam diferentes 78 | dos da carteira padrão. 79 | */ 80 | public $carteiras = array( 81 | '06', 82 | '03' 83 | ); 84 | 85 | /* 86 | @var array $obrigatorios 87 | Armazena os campos obrigatórios para a geração do código de 88 | barras e a linha digitável neste banco, assim como a emissão 89 | do boleto bancário 90 | */ 91 | public $obrigatorios = array( 92 | 'Agencia', 'CodigoCedente', 93 | 'Nome', 'Valor', 'Vencimento', 94 | 'Banco', 'Moeda', 'NossoNumero', 'Carteira' 95 | ); 96 | 97 | function dvNossoNumero($data) { 98 | $dv = Math::Mod11($data['Carteira'] . $data['NossoNumero'], 0, 0, false, 7); 99 | return $data['NossoNumero'] . '-' . $dv; 100 | } 101 | 102 | } -------------------------------------------------------------------------------- /lib/bancos/Caixa.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 17/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class Caixa extends Banco{ 24 | public $Codigo = '104'; 25 | public $Nome = 'Caixa'; 26 | public $Css = 'caixa.css'; 27 | public $Image = 'caixa.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | */ 34 | public $tamanhos = array( 35 | #Campos comuns a todos os bancos 36 | 'Banco' => 3, //identificação do banco 37 | 'Moeda' => 1, //Código da moeda: real=9 38 | 'DV' => 1, //Dígito verificador geral da linha digitável 39 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 40 | 'Valor' => 10, //Valor nominal do título 41 | #Campos variávies 42 | 'CodigoCedente' => 6, //Código do cedente 43 | 'NossoNumero' => 17, //Nosso número 44 | ); 45 | 46 | /* 47 | @var string $layoutCodigoBarras 48 | armazena o layout que será usado para gerar o código de barras desse banco. 49 | Cada variável é precedida por dois-pontos (:), que serão substituídas 50 | pelos seus respectivos valores 51 | */ 52 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor1:CodigoCedente9:NossoNumero'; 53 | 54 | 55 | /** 56 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 57 | * para a geração correta do código de barras 58 | * Especificamente para o Hsbc, temos duas particularidas: Data no formato juliano, e 59 | * um dígito verificador triplo para o nosso número. 60 | * 61 | * 62 | * @version 0.1 28/05/2011 Initial 63 | */ 64 | public function particularidade($object){ 65 | $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); 66 | } 67 | 68 | } -------------------------------------------------------------------------------- /lib/bancos/Hsbc.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 28/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class Hsbc extends Banco{ 24 | public $Codigo = '399'; 25 | public $Nome = 'Hsbc'; 26 | //public $Css; 27 | public $Image = 'hsbc.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | 34 | 1 5 10 15 20 25 30 35 40 44 35 | | | | | | | | | | | 36 | 39999498900002952951122334000001234567815512 37 | 39991498900002952951122334001234567894315512 - 38 | └-┘↓↓└--┘└--------┘└-----┘└-----------┘└--┘↓ 39 | | || | | | | | └-- Código do aplicativo (2 fixo) 40 | | || | | | | └---- Data no formato juliano 41 | | || | | | └------------- Nosso número 42 | | || | | └----------------------- Código do cedente 43 | | || | └------------------------------- Valor 44 | | || └-------------------------------------- Fator de vencimento 45 | | |└----------------------------------------- Dígito verificador do código 46 | | └------------------------------------------ Código da Moeda 47 | └-------------------------------------------- Código do banco 48 | 49 | 50 | Array 51 | ( 52 | [Banco] => 399 53 | [Moeda] => 9 54 | [Valor] => 0000055000 55 | [NossoNumero] => 0039104766340 56 | [FatorVencimento] => 1001 57 | [CodigoCedente] => 0351202 58 | [DataVencimentoCalendarioJuliano] => 0000 59 | ) 60 | */ 61 | public $tamanhos = array( 62 | #Campos comuns a todos os bancos 63 | 'Banco' => 3, //identificação do banco 64 | 'Moeda' => 1, //Código da moeda: real=9 65 | 'DV' => 1, //Dígito verificador geral da linha digitável 66 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 67 | 'Valor' => 10, //Valor nominal do título 68 | #Campos variávies 69 | 'CodigoCedente' => 7, 70 | 'NossoNumero' => 13, 71 | 'DataVencimentoCalendarioJuliano' => 4, 72 | //'CodigoAplicativo' => 1, 73 | ); 74 | 75 | 76 | /* 77 | @var $carteiras 78 | Identifica as carteiras disponíveis para esse banco. 79 | 80 | - A primeira carteira sempre é a carteira padrão. 81 | - Se a carteira for um array, esse array deverá conter as diferenças 82 | nos tamanhos entre essa carteira e a carteira padrão. Se for uma 83 | string, será considerado que os tamanahos são os mesmos da carteira 84 | padrão, e o valor será o nome da carteira. 85 | - Só é necessário informar os campos cujos tamanhos sejam diferentes 86 | dos da carteira padrão. 87 | Abaixo, "CNR" é a carteira padrão, e "CNR Fácil" é a segunda opção 88 | de carteira. No "CNR Fácil", há apenas as mudanças no NossoNumero e no 89 | CodigoCedente. Os demais campos são iguais 90 | */ 91 | public $carteiras = array( 92 | 'CNR', 93 | 'CNR Fácil' => array('NossoNumero' => 7, 'CodigoCedente' => 13), 94 | ); 95 | 96 | /* 97 | @var string $layoutCodigoBarras 98 | Armazena o layout que será usado para gerar o código de barras desse banco. 99 | Cada variável é precedida por dois-pontos (:), que serão substituídas 100 | pelos seus respectivos valores 101 | */ 102 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:CodigoCedente:NossoNumero:DataVencimentoCalendarioJuliano2'; 103 | 104 | /** 105 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 106 | * para a geração correta do código de barras 107 | * Especificamente para o Hsbc, temos duas particularidas: Data no formato juliano, e 108 | * um dígito verificador triplo para o nosso número. 109 | * 110 | * 111 | * @version 0.1 28/05/2011 Initial 112 | */ 113 | public function particularidade($object){ 114 | if($object->Vendedor->Carteira == 'CNR Fácil'){ 115 | $object->Data['DataVencimentoCalendarioJuliano'] = '0000'; 116 | } 117 | else{ 118 | $object->Data['DataVencimentoCalendarioJuliano'] = $this->julianDays($object->Boleto->Vencimento); 119 | } 120 | $object->Data['NossoNumero'] = $this->geraCodigoDocumento($object->Data); 121 | $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); 122 | } 123 | 124 | /** 125 | * HSBC usa um dígito verificador triplo no NossoNumero. 126 | * 127 | * @version 0.1 28/05/2011 Inicial 128 | */ 129 | public function geraCodigoDocumento($dados){ 130 | #dv1 é o Mod11 do NossoNumero 131 | $dv1 = Math::Mod11($dados['NossoNumero']); 132 | 133 | #Concatena o NossoNumero a dv1 134 | $codigo = (int) $dados['NossoNumero'] . $dv1; 135 | 136 | #Calcula a data de vencimento no formato dmy, em barras e com o ano com 2 digitos 137 | $data = OB::fatorVencimentoParaData($dados['FatorVencimento'], 'dmy'); 138 | 139 | #Se o identificador for "4", dv3 é o Mod11 da soma do NossoNumero 140 | #concatenado a dv1 e dv2, a data sem barras e o código do cedente. 141 | #Se o identificador for "5", dv3 é o modulo 11 da soma donosso 142 | #numero concatenado e do codigo do cedente 143 | if($dados['Carteira'] == 'CNR'){ 144 | $codigo .= 4; 145 | $dv3 = Math::Mod11($codigo + $data + $dados['CodigoCedente']); 146 | } 147 | else{ 148 | $codigo .= 5; 149 | $dv3 = Math::Mod11($codigo + $dados['CodigoCedente']); 150 | } 151 | 152 | #Retorno com 13 caracteres 153 | return OB::zeros($codigo . $dv3, $this->tamanhos['NossoNumero']); 154 | } 155 | 156 | /** 157 | * Calcula a data juliana para uma data informada no formato d/m/a 158 | * 159 | * @version 0.1 28/05/2011 Initial 160 | * 0.2 31/05/2011 Formatação geral 161 | */ 162 | public function julianDays($date) { 163 | $date = preg_split('%[/-]+%', $date); 164 | 165 | $dataFinal = mktime(0,0,0,$date[1],$date[0],$date[2]); 166 | $dataInicial = mktime(0,0,0,12,31,$date[2]-1); 167 | 168 | return OB::zeros((int)(($dataFinal - $dataInicial)/(60*60*24)), 3) . String::right($date[2],1); 169 | } 170 | 171 | 172 | } -------------------------------------------------------------------------------- /lib/bancos/Itau.php: -------------------------------------------------------------------------------- 1 | 10 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 11 | @subpackage ObjectBoleto.Lib.Bancos 12 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 13 | 14 | ----------------------- 15 | CHANGELOG 16 | ----------------------- 17 | 17/05/2011 18 | [+] Inicial 19 | 20 | 21 | 22 | */ 23 | class Itau extends Banco{ 24 | public $Codigo = '341'; 25 | public $Nome = 'Itau'; 26 | public $Css; 27 | public $Image = 'itau.png'; 28 | 29 | /* 30 | @var array $tamanhos 31 | Armazena os tamanhos dos campos na geração do código de barras 32 | e da linha digitável 33 | 34 | 1 5 10 15 20 25 30 35 40 44 35 | | | | | | | | | | | 36 | 34196307200000666061750000005160148348516000 37 | 34198307100000666061750000005190148348519000 38 | └-┘↓↓└--┘└--------┘└-┘└------┘↓└--┘└---┘↓└-┘ 39 | | || | | | | | | | | |--- Zeros fixos 40 | | || | | | | | | | └----- Módulo10 da agência e conta 41 | | || | | | | | | └-------- Código do aplicativo (2 fixo) 42 | | || | | | | | └------------ Data no formato juliano 43 | | || | | | | └--------------- Módulo10 da ag, conta, carteira e NoNum 44 | | || | | | └------------------- Nosso número 45 | | || | | └------------------------- Código do cedente 46 | | || | └------------------------------- Valor 47 | | || └-------------------------------------- Fator de vencimento 48 | | |└----------------------------------------- Dígito verificador do código 49 | | └------------------------------------------ Código da Moeda 50 | └-------------------------------------------- Código do banco 51 | 52 | 53 | */ 54 | public $tamanhos = array( 55 | #Campos comuns a todos os bancos 56 | 'Banco' => 3, //identificação do banco 57 | 'Moeda' => 1, //Código da moeda: real=9 58 | 'DV' => 1, //Dígito verificador geral da linha digitável 59 | 'FatorVencimento' => 4, //Fator de vencimento (Dias passados desde 7/out/1997) 60 | 'Valor' => 10, //Valor nominal do título 61 | #Campos variávies 62 | 'Carteira' => 3, 63 | 'NossoNumero' => 8, //Nosso número 64 | 'Agencia' => 4, 65 | 'Conta' => 5 66 | ); 67 | 68 | /* 69 | @var string $layoutCodigoBarras 70 | armazena o layout que será usado para gerar o código de barras desse banco. 71 | Cada variável é precedida por dois-pontos (:), que serão substituídas 72 | pelos seus respectivos valores 73 | */ 74 | public $layoutCodigoBarras = ':Banco:Moeda:FatorVencimento:Valor:Carteira:NossoNumero:DigitoAgContaCarteiraNNum:Agencia:Conta:DigitoAgConta000'; 75 | 76 | 77 | public function particularidade($object){ 78 | //pr($object->Data); 79 | $digAgConta = $object->Data['Agencia'] . $object->Data['Conta']; 80 | $digAgContaCartNNum = $object->Data['Agencia'] . $object->Data['Conta'] 81 | . $object->Data['Carteira'] . $object->Data['NossoNumero']; 82 | 83 | $object->Data['DigitoAgContaCarteiraNNum'] = Math::Mod10($digAgContaCartNNum); 84 | $object->Data['DigitoAgConta'] = Math::Mod10($digAgConta); 85 | $object->Boleto->NossoNumero = Math::Mod11($object->Boleto->NossoNumero, 0, 0, true); 86 | } 87 | 88 | } -------------------------------------------------------------------------------- /lib/core/Banco.php: -------------------------------------------------------------------------------- 1 | 'BB', 43 | '003' => 'BancoAmazonia', 44 | '004' => 'BNB', 45 | '033' => 'Santander', 46 | '041' => 'Banrisul', 47 | '070' => 'BRB', //Banco de Brasília 48 | '104' => 'Caixa', 49 | '237' => 'Bradesco', 50 | '318' => 'Bmg', 51 | '341' => 'Itau', 52 | '356' => 'Real', 53 | '399' => 'Hsbc', 54 | '409' => 'Unibanco', 55 | '623' => 'Panamericano', 56 | '756' => 'Bancoob', 57 | ); 58 | 59 | 60 | /* 61 | @var array $tamanhos 62 | Armazena os dados de posições dos valores dentro do código de barras. 63 | 64 | */ 65 | public $tamanhos = array(); 66 | 67 | /* 68 | @var array $carteiras 69 | Armazena todas as carteiras disponíveis e as diferenças de tamanhos 70 | dos campos entre elas. 71 | */ 72 | public $carteiras = array(); 73 | 74 | /* 75 | @var $layoutCodigoBarras 76 | armazena o layout que será usado para gerar o código de barras desse banco 77 | */ 78 | public $layoutCodigoBarras; 79 | 80 | /* 81 | @var $formataLinhaDigitavel 82 | Máscara para a linha digitável 83 | */ 84 | public $mascaraLinhaDigitavel = '00000.00000 00000.000000 00000.000000 0 00000000000000'; 85 | 86 | 87 | /** 88 | * Construtor da classe 89 | * 90 | * @version 0.1 18/05/2011 Initial 91 | */ 92 | public function __construct($object = null){ 93 | if(!empty($object)){ 94 | $this->parent = $object; 95 | } 96 | } 97 | 98 | /** 99 | * Carrega o arquivo e as configurações de layout do banco informado 100 | * 101 | * @version 0.1 20/05/2011 Initial 102 | */ 103 | public function load($codigo, $object){ 104 | 105 | 106 | if(array_key_exists($codigo, $this->relacoes)){ 107 | $banco = $this->relacoes[$codigo]; 108 | $filename = OB_DIR . '/lib/bancos/' . $banco . '.php'; 109 | 110 | if(file_exists($filename)){ 111 | require $filename; 112 | return new $banco($object); 113 | } 114 | else{ 115 | throw new Exception('O arquivo /lib/bancos/' . $banco. '.php não existe.'); 116 | } 117 | } 118 | else{ 119 | throw new Exception('O banco ' . $codigo. ' não existe em Banco::$relacoes'); 120 | } 121 | } 122 | 123 | /** 124 | * Normaliza as variáveis de acordo com os seus tamanhos exatos 125 | * 126 | * @version 0.1 18/05/2011 Initial 127 | */ 128 | public function normalize($valor, $variavel){ 129 | if(array_key_exists($variavel, $this->tamanhos)){ 130 | $length = $this->tamanhos[$variavel]; 131 | if(strlen($valor) < $length){ 132 | return OB::zeros($valor, $length); 133 | } 134 | else{ 135 | return String::left($valor, $length); 136 | } 137 | } 138 | else{ 139 | throw new Exception(" A chave \"{$variavel}\" não existe no layout"); 140 | } 141 | } 142 | 143 | /** 144 | * engenhariaReversa() pega um número de código de barras e o transforma em um array 145 | * com os valores, baseando os detalhes de cada banco. 146 | */ 147 | public function engenhariaReversa($banco, $codigoBarras){ 148 | 149 | } 150 | 151 | 152 | /** 153 | * particularidade() Faz em tempo de execução mudanças que sejam imprescindíveis 154 | * para a geração correta do código de barras 155 | * Esse método será estendido por todas as classes filhas, portanto só é 156 | * necessário declará-la caso haja algo para mudar 157 | * 158 | * @version 0.1 28/05/2011 Initial 159 | */ 160 | public function particularidade($data){} 161 | 162 | /** 163 | * agenciaCondigoCedente() 164 | * Retorna a agência e a conta/código do cedente formatada de acordo 165 | * com o padrão visual do banco. 166 | * Caso esse método não seja declarado na classe individual dos bancos, 167 | * ele irá herdar esta definição 168 | */ 169 | public function agenciaCodigoCedente(){ 170 | $object = $this->parent; 171 | 172 | return Math::Mod10($object->Data['Agencia'], true) . ' / ' . Math::Mod10($object->Data['Conta'], true); 173 | } 174 | 175 | 176 | /** 177 | * Avalia se todos os campos necessários para a geração do código de barras 178 | * estão preenchidos 179 | * 180 | * @version 0.1 28/05/2011 181 | * 0.2 18/10/2013 Reabilitado. Agora não verifica a o DV, pois este é calculado 182 | * só ao final da geração do código de barras 183 | */ 184 | public function verificaObrigatorios($data){ 185 | $obrigatorios = array_keys($this->tamanhos); 186 | 187 | foreach($this->tamanhos as $chave => $valor){ 188 | //Se a chave for diferente de 'DV' e 189 | if($chave != 'DV' && (!array_key_exists($chave, $data) || is_null($data[$chave]))){ 190 | throw new Exception('O campo "' . $chave . '" é obrigatório para 191 | a geração do código de barras do banco "' . $this->Nome . '"'); 192 | } 193 | } 194 | } 195 | 196 | /** 197 | * Retorna as carteiras aceitas por esse boleto 198 | * 199 | * @version 0.1 31/05/2011 200 | */ 201 | public function getCarteiras(){ 202 | $buff = array(); 203 | 204 | foreach($this->carteiras as $key => $carteira){ 205 | if(is_array($carteira)){ 206 | $buff[] = $key; 207 | } 208 | else{ 209 | $buff[] = $carteira; 210 | } 211 | } 212 | return $buff; 213 | } 214 | 215 | /** 216 | * Retorna as posições desse banco, para essa carteira, 217 | * já considerando as diferenças. Se informar o parâmetro 218 | * $campo, retorna o tamanho específico desse campo 219 | * 220 | * @version 0.1 31/05/2011 221 | * 0.2 31/05/2011 Se passar um nome de campo, ele retorna só aquele campo específico 222 | */ 223 | public function getTamanhos($campo = null){ 224 | if(is_null($campo)){ 225 | $carteira = $this->parent->Vendedor->Carteira; 226 | if(array_key_exists($carteira, $this->carteiras)){ 227 | return array_merge($this->tamanhos, $this->carteiras[$carteira]); 228 | } 229 | else{ 230 | return $this->tamanhos; 231 | } 232 | } 233 | else{ 234 | $tamanhos = $this->getTamanhos(); 235 | if(array_key_exists($campo, $tamanhos)){ 236 | return $tamanhos[$campo]; 237 | } 238 | } 239 | } 240 | } -------------------------------------------------------------------------------- /lib/core/Boleto.php: -------------------------------------------------------------------------------- 1 | parent = $obj; 11 | 12 | //Pré-configurando o boleto 13 | $this->setDataEmissao(); 14 | } 15 | 16 | 17 | 18 | # # # # # # # # # # # # # # # # # # # # # # 19 | # # 20 | # # SETTERS E TRATAMENTO DOS VALORES DE ENTRADA 21 | # # 22 | # # # # # # # # # # # # # # # # # # # # # # 23 | 24 | 25 | //Setters Valores 26 | public $Valor; 27 | public $ValorUnitario; 28 | public $FatorVencimento; 29 | public $Vencimento; 30 | public $VencimentoContraApresentacao = false; 31 | public $NossoNumero; 32 | public $NumDocumento; 33 | public $DataEmissao; 34 | public $NumParcela; 35 | //Opcionais 36 | public $Quantidade; 37 | public $Desconto; 38 | public $OutrosAbatimentos; 39 | public $Multa; 40 | public $OutrosAcrescimos; 41 | // 42 | public $CodigoBarras; 43 | public $LinhaDigitavel; 44 | 45 | /** 46 | * Configura os dados dos clientes a partir de um array 47 | * 48 | * @version 0.1 20/05/2011 Initial 49 | */ 50 | public function set($array){ 51 | foreach($array as $var => $value){ 52 | $method = 'set' . $var; 53 | $this->$method($value); 54 | } 55 | return $this; 56 | } 57 | 58 | /** 59 | * Define a data da emissão do boleto. Qualquer um dos parâmetros 60 | * deixados em branco seraá preenchido com o valor referente ao dia 61 | * atual 62 | * 63 | * @version 0.1 19/05/2011 Initial 64 | */ 65 | public function setDataEmissao($dia = null, $mes = null, $ano = null){ 66 | $dia = empty($dia) ? date('d') : $dia; 67 | $mes = empty($mes) ? date('m') : $mes; 68 | $ano = empty($ano) ? date('Y') : $ano; 69 | 70 | $this->DataEmissao = $dia . '/' . $mes . '/' . $ano; 71 | return $this; 72 | } 73 | 74 | /** 75 | * Define o número do documento 76 | * 77 | * @version 0.1 19/05/2011 Initial 78 | */ 79 | public function setNumDocumento($numero){ 80 | $this->NumDocumento = $numero; 81 | return $this; 82 | } 83 | 84 | /** 85 | * Define a propriedade Valor e ValorUnitario, retirando a vírgula. 86 | * setValor() verifica o valor da propriedade Quantidade e ajusta 87 | * o valor da propriedade Valor 88 | * 89 | * @version 0.1 18/05/2011 Initial 90 | */ 91 | public function setValor($valor){ 92 | $this->ValorUnitario = (int) ($valor * 100); 93 | if(empty($this->Quantidade)){ 94 | $this->Quantidade = 1; 95 | } 96 | $this->Valor = $this->ValorUnitario * $this->Quantidade; 97 | 98 | return $this; 99 | } 100 | 101 | /** 102 | * Define o nosso número do boleto 103 | * 104 | * @version 0.1 18/05/2011 Initial 105 | */ 106 | public function setNossoNumero($valor){ 107 | if(!preg_match('/[^0-9]/', $valor)){ 108 | $this->NossoNumero = $valor; 109 | return $this; 110 | } 111 | else{ 112 | throw new Exception('Boleto::setNossoNumero só permite números'); 113 | } 114 | 115 | } 116 | 117 | /** 118 | * Define uma data específica de vencimento 119 | * 120 | * @version 0.1 18/05/2011 Initial 121 | */ 122 | public function setVencimento($dia, $mes, $ano){ 123 | $this->FatorVencimento = OB::fatorVencimento($dia, $mes, $ano); 124 | //$this->Vencimento = $dia . '/' . $mes . '/' . $ano; 125 | $this->Vencimento = sprintf("%02d", $dia) . '/' . sprintf("%02d", $mes) . '/' . $ano; 126 | 127 | return $this; 128 | } 129 | 130 | /** 131 | * Define o vencimento como contra-apresentação 132 | * 133 | * @version 0.1 27/05/2011 Initial 134 | */ 135 | public function setVencimentoContraApresentacao(){ 136 | $time = strtotime('+15 days'); 137 | $this->VencimentoContraApresentacao = true; 138 | $this->FatorVencimento = OB::fatorVencimento(date('d', $time), date('m', $time), date('Y', $time)); 139 | 140 | return $this; 141 | } 142 | 143 | /** 144 | * Adiciona dias à data de hoje para definir o vencimento 145 | * 146 | * @version 0.1 18/05/2011 Initial 147 | */ 148 | public function setDiasVencimento($num){ 149 | $time = strtotime('+' . $num . ' days'); 150 | $this->setVencimento(date('d', $time), date('m', $time), date('Y', $time)); 151 | 152 | return $this; 153 | } 154 | 155 | /** 156 | * Define a multa a ser impressa no boleto 157 | * 158 | * @version 0.1 20/05/2011 Initial 159 | */ 160 | public function setMulta($valor){ 161 | $this->Multa = $valor; 162 | 163 | return $this; 164 | } 165 | 166 | /** 167 | * Define o desconto 168 | * 169 | * @version 0.1 20/05/2011 Initial 170 | */ 171 | public function setDesconto($valor){ 172 | $this->Desconto = $valor; 173 | 174 | return $this; 175 | } 176 | 177 | /** 178 | * Define outros acréscimos 179 | * 180 | * @version 0.1 20/05/2011 Initial 181 | */ 182 | public function setOutrosAcrescimos($valor){ 183 | $this->OutrosAcrescimos = $valor; 184 | 185 | return $this; 186 | } 187 | 188 | /** 189 | * Define outros abatimentos 190 | * 191 | * @version 0.1 20/05/2011 Initial 192 | */ 193 | public function setOutrosAbatimentos($valor){ 194 | $this->OutrosAbatimentos = $valor; 195 | 196 | return $this; 197 | } 198 | 199 | /** 200 | * Define o índice quantidade desse boleto. 201 | * Se $this->ValorUnitario não estiver vazio, setQuantidade() irá 202 | * preencher $this->Valor com o produto da multiplicação entre 203 | * $this->ValorUnitario e $this->Quantidade. 204 | * 205 | * @version 0.1 20/05/2011 Initial 206 | * 0.2 21/05/2011 Ajusta o valor nominal do boleto de acordo 207 | * com a quantidade 208 | * 0.3 21/05/2011 Obriga $num a ser maior ou igual a 1 209 | */ 210 | public function setQuantidade($num = 1){ 211 | if($num < 1) { 212 | $num = (int) 1; 213 | } 214 | 215 | $this->Quantidade = $num; 216 | 217 | if(!empty($this->ValorUnitario)){ 218 | $this->Valor = $this->ValorUnitario * $this->Quantidade; 219 | } 220 | 221 | return $this; 222 | } 223 | 224 | /** 225 | * Define o número da parcela 226 | * 227 | * @version 0.1 28/05/2011 Initial 228 | */ 229 | public function setNumParcela($num){ 230 | $this->NumParcela = $num; 231 | 232 | return $this; 233 | } 234 | 235 | } -------------------------------------------------------------------------------- /lib/core/Cliente.php: -------------------------------------------------------------------------------- 1 | parent = $obj; 23 | } 24 | 25 | /** 26 | * Configura os dados dos clientes a partir de um array 27 | * 28 | * @version 0.1 20/05/2011 Initial 29 | */ 30 | public function set($array){ 31 | foreach($array as $var => $value){ 32 | $method = 'set' . $var; 33 | $this->$method($value); 34 | } 35 | return $this; 36 | } 37 | 38 | /** 39 | * Configura o nome do cliente 40 | * 41 | * @version 0.1 20/05/2011 Initial 42 | */ 43 | public function setNome($value){ 44 | $this->Nome = $value; 45 | return $this; 46 | } 47 | 48 | /** 49 | * Configura o email do cliente 50 | * 51 | * @version 0.1 20/05/2011 Initial 52 | */ 53 | public function setEmail($value){ 54 | $this->Email = $value; 55 | return $this; 56 | } 57 | 58 | /** 59 | * Configura o cpf do cliente 60 | * 61 | * @version 0.1 20/05/2011 Initial 62 | * 0.2 27/05/2011 Adicionada Validação do cpf 63 | */ 64 | public function setCpf($value){ 65 | if(Validar::cpf($value)){ 66 | $this->Cpf = $value; 67 | } 68 | else{ 69 | throw new Exception('CPF "' . $value . '" inválido'); 70 | } 71 | return $this; 72 | } 73 | 74 | /** 75 | * Configura o cnpj do cliente 76 | * 77 | * @version 0.1 20/05/2011 Initial 78 | * 0.2 27/05/2011 Adicionada Validação do cnpj 79 | */ 80 | public function setCnpj($value){ 81 | if(Validar::cnpj($value)){ 82 | $this->Cnpj = $value; 83 | } 84 | else{ 85 | throw new Exception('CNPJ "' . $value . '" inválido'); 86 | } 87 | return $this; 88 | } 89 | 90 | /** 91 | * Configura o endereço do cliente 92 | * 93 | * @version 0.1 20/05/2011 Initial 94 | */ 95 | public function setEndereco($value){ 96 | $this->Endereco = $value; 97 | return $this; 98 | } 99 | /** 100 | * Configura a cidade do cliente 101 | * 102 | * @version 0.1 20/05/2011 Initial 103 | */ 104 | public function setCidade($value){ 105 | $this->Cidade = $value; 106 | return $this; 107 | } 108 | /** 109 | * Configura a uf do cliente 110 | * 111 | * @version 0.1 20/05/2011 Initial 112 | */ 113 | public function setUf($value){ 114 | $this->Uf = $value; 115 | return $this; 116 | } 117 | /** 118 | * Configura o cep do cliente 119 | * 120 | * @version 0.1 20/05/2011 Initial 121 | */ 122 | public function setCep($value){ 123 | $this->Cep = $value; 124 | return $this; 125 | } 126 | } -------------------------------------------------------------------------------- /lib/core/Configuracao.php: -------------------------------------------------------------------------------- 1 | parent = $obj; 14 | } 15 | 16 | /** 17 | * 18 | * @version 0.1 18/05/2011 Initial 19 | * 20 | */ 21 | public function addInstrucao($frase){ 22 | if(!empty($frase)){ 23 | $this->Instrucoes[] = $frase; 24 | } 25 | return $this; 26 | } 27 | 28 | /** 29 | * Devolve as instruções 30 | * 31 | * @version 0.1 19/10/2013 32 | * 33 | */ 34 | public function getInstrucoes(){ 35 | return $this->Instrucoes; 36 | } 37 | 38 | /** 39 | * Devolve as instruções 40 | * 41 | * @version 0.1 19/10/2013 42 | * 43 | */ 44 | public function getLocalPagamento(){ 45 | return $this->LocalPagamento; 46 | } 47 | 48 | /** 49 | * 50 | * @version 0.1 19/05/2011 Initial 51 | * 52 | */ 53 | public function setLocalPagamento($frase){ 54 | if(!empty($frase)){ 55 | $this->LocalPagamento = $frase; 56 | } 57 | return $this; 58 | } 59 | 60 | } -------------------------------------------------------------------------------- /lib/core/Plugin.php: -------------------------------------------------------------------------------- 1 | plugin('Pdf')->save('/public/files/filename.pdf'); 3 | 4 | class Plugin{ 5 | 6 | public $plugins = array(); 7 | public static $object; 8 | 9 | /** 10 | * 11 | * @version 0.1 18/05/2011 Initial 12 | * 13 | */ 14 | public function __construct(){ 15 | 16 | } 17 | 18 | /** 19 | * 20 | * @version 0.1 18/05/2011 Initial 21 | * 22 | */ 23 | public static function instance(){ 24 | if(empty(self::$object)){ 25 | self::$object = new Plugin; 26 | } 27 | return self::$object; 28 | } 29 | /** 30 | * 31 | * @version 0.1 18/05/2011 Initial 32 | * 33 | */ 34 | public static function load($pluginName){ 35 | $self = self::instance(); 36 | $filename = self::path($pluginName); 37 | if(file_exists($filename)){ 38 | $className = $pluginName . 'Plugin'; 39 | require $filename; 40 | return $self->plugins[$pluginName] = new $className($self->parent); 41 | } 42 | else{ 43 | throw new Exception('Plugin nao existe'); 44 | } 45 | } 46 | /** 47 | * 48 | * @version 0.1 18/05/2011 Initial 49 | * 50 | */ 51 | public static function path($pluginName){ 52 | return OB_DIR . '/lib/plugins/' . $pluginName . '.plugin.php'; 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /lib/core/Template.php: -------------------------------------------------------------------------------- 1 | parent = $obj; 41 | } 42 | 43 | /** 44 | * Adiciona estilos css ao template 45 | * 46 | * @version 0.1 18/05/2011 Initial 47 | * 0.2 19/05/2011 - Só um estilo igual é adicionado 48 | * - Styles podem ser adicionados a partir dos 49 | * templates, blocks e serão enviados diretamente 50 | * para o template padrão 51 | * 0.3 22/05/2011 - $filename pode receber um array de estilos 52 | * - Não é mais possível o envio de variáveis dos 53 | * blocks para o template. 54 | */ 55 | public function addStyle($filename, $media = 'all' ){ 56 | #$filename pode receber um array de arquivos 57 | if(is_array($filename)){ 58 | foreach($filename as $file){ 59 | $this->addStyle($file); 60 | } 61 | return $this; 62 | } 63 | #Tornando opcional informar a extensão do CSS 64 | if(!preg_match('/(.css)$/', $filename)){ 65 | $filename .= '.css'; 66 | } 67 | #Guardando o estilo 68 | $this->Styles[$filename] = $media; 69 | 70 | return $this; 71 | } 72 | /** 73 | * Retorna os styles css formatados como html 74 | * 75 | * @version 0.1 19/05/2011 Initial 76 | */ 77 | public function getStyles(){ 78 | if(!empty($this->Styles)){ 79 | $html = ''; 80 | foreach($this->Styles as $file => $media){ 81 | $html .= '' . PHP_EOL; 84 | } 85 | } 86 | return $html; 87 | } 88 | 89 | /** 90 | * Pega o html do bloco pré-carregado 91 | * 92 | * @version 0.1 18/05/2011 Initial 93 | */ 94 | public function getBlock($blockName, $data = array()){ 95 | //$data = array_merge($data, array('OB' => (object)$this->Data)); 96 | 97 | return $this->render('/blocks/'.$blockName, $data); 98 | } 99 | 100 | /** 101 | * Renderiza templates 102 | * 103 | * @version 0.1 18/05/2011 Initial 104 | * 1.0 22/05/2011 Consertado o bug dos Output bufferin 105 | */ 106 | public function render($template, $data = array()){ 107 | $data = array_merge($data, array('OB' => $this->parent)); 108 | $template = OB_DIR . '/templates/' . $template . '.htm.php'; 109 | 110 | if(file_exists($template)){ 111 | extract($data); 112 | ob_start(); 113 | require $template; 114 | } 115 | else{ 116 | throw new Exception('Template "' . $template . '" não existe.'); 117 | } 118 | } 119 | 120 | /** 121 | * Manda variáveis para os templates/blocks 122 | * 123 | * @version 0.1 20/05/2011 Initial 124 | */ 125 | public function set($var, $value){ 126 | $this->$var = $value; 127 | return $this; 128 | } 129 | 130 | 131 | # # # # # # # # # # # # # # # # # # # # # # 132 | # # 133 | # # SETTERS E TRATAMENTO DOS VALORES DE ENTRADA 134 | # # 135 | # # # # # # # # # # # # # # # # # # # # # # 136 | 137 | 138 | /** 139 | * Configura o título da página do template 140 | * 141 | * @version 0.1 18/05/2011 Initial 142 | */ 143 | public function setTitle($title){ 144 | $this->Title = $title; 145 | return $this; 146 | } 147 | 148 | /** 149 | * Define qual o template que será usado 150 | * 151 | * @version 0.1 18/05/2011 Initial 152 | */ 153 | public function setTemplate($template){ 154 | $this->Template = $template; 155 | return $this; 156 | } 157 | 158 | } -------------------------------------------------------------------------------- /lib/core/Vendedor.php: -------------------------------------------------------------------------------- 1 | parent = $obj; 29 | } 30 | 31 | /** 32 | * Chama os métodos inexistentes 33 | * 34 | * @version 0.1 18/05/2011 Initial 35 | */ 36 | public function __call($name, $arg = null){ 37 | preg_match('/^(set|get)([a-zA-Z]+)$/', $name, $output); 38 | 39 | if($output[1] == 'set'){ 40 | $this->$output[2] = $arg[0]; 41 | return $this; 42 | } 43 | elseif($output[1] == 'get'){ 44 | if(isset($this->$output[2])){ 45 | return $this->$output[2]; 46 | } 47 | else{ 48 | throw new Exception("A propriedade \"{$output[2]}\" não existe na class Vendedor"); 49 | } 50 | } 51 | } 52 | 53 | /** 54 | * Configura os dados do vendedor a partir de um array 55 | * 56 | * @version 0.1 20/05/2011 Initial 57 | */ 58 | public function set($array){ 59 | foreach($array as $var => $value){ 60 | $method = 'set' . $var; 61 | $this->$method($value); 62 | } 63 | 64 | return $this; 65 | } 66 | 67 | /** 68 | * Configura a Razão Social 69 | * 70 | * @version 0.1 27/05/2011 Initial 71 | * 0.2 27/05/2011 Renomeado de setNome() para setRazaoSocial() 72 | */ 73 | public function setRazaoSocial($value){ 74 | $this->RazaoSocial = $value; 75 | 76 | return $this; 77 | } 78 | 79 | /** 80 | * Configura a agência 81 | * 82 | * @version 0.1 27/05/2011 Initial 83 | * 0.2 28/05/2011 Removido bug que forçava 4 caracteres 84 | * no campo Agencia, sendo que alguns bancos usam 3 85 | */ 86 | public function setAgencia($codigo){ 87 | $this->Agencia = $codigo; 88 | 89 | return $this; 90 | } 91 | 92 | /** 93 | * Configura o número da conta do cliente. 94 | * Em alguns bancos, esse campo é desnecessário, sendo substituído pelo 95 | * número do contrato. Os código de barras serão gerados corretamente de 96 | * acordo com o padrão de cada banco, e os templates exibirão correta- 97 | * mente cada dado em seu lugar. 98 | * 99 | * @version 0.1 27/05/2011 Initial 100 | */ 101 | public function setConta($value){ 102 | $this->Conta = $value; 103 | 104 | return $this; 105 | } 106 | 107 | /** 108 | * Configura o número do contrato do Vendedor com o banco 109 | * Em alguns bancos, esse campo é desnecessário, sendo substituído pelo 110 | * número do contrato. Os código de barras serão gerados corretamente de 111 | * acordo com o padrão de cada banco, e os templates exibirão corre- 112 | * tamente cada dado em seu lugar. 113 | * 114 | * @version 0.1 27/05/2011 Initial 115 | * 0.2 27/05/2011 Renomeado de setNumCodigoCedente() para 116 | * setCodigoCedente() 117 | */ 118 | public function setCodigoCedente($value){ 119 | $this->CodigoCedente = $value; 120 | 121 | return $this; 122 | } 123 | 124 | /** 125 | * Configura a carteira 126 | * 127 | * @version 0.1 27/05/2011 Initial 128 | */ 129 | public function setCarteira($value){ 130 | $this->Carteira = $value; 131 | 132 | return $this; 133 | } 134 | 135 | /** 136 | * Configura o cnpj do vendedor 137 | * 138 | * @version 0.1 27/05/2011 Initial 139 | * 0.2 27/05/2011 Adicionada validação do CNPJ informado 140 | */ 141 | public function setCnpj($value){ 142 | if(Validar::cnpj($value)){ 143 | $this->Cnpj = $value; 144 | } 145 | else{ 146 | throw new Exception('CNPJ "' . $value . '" inválido'); 147 | } 148 | return $this; 149 | } 150 | 151 | /** 152 | * Configura o endereço do vendedor 153 | * 154 | * @version 0.1 27/05/2011 Initial 155 | */ 156 | public function setEndereco($value){ 157 | $this->Endereco = $value; 158 | 159 | return $this; 160 | } 161 | 162 | /** 163 | * Configura o e-mail do vendedor 164 | * 165 | * @version 0.1 27/05/2011 Initial 166 | * 0.2 27/05/2011 Adicionada validação do e-mail 167 | */ 168 | public function setEmail($value){ 169 | if(Validar::email($value)){ 170 | $this->Email = $value; 171 | } 172 | else{ 173 | throw new Exception('E-mail "' . $value . '" inválido'); 174 | } 175 | return $this; 176 | } 177 | } -------------------------------------------------------------------------------- /lib/plugins/Pdf.plugin.php: -------------------------------------------------------------------------------- 1 | object = $object; 7 | } 8 | 9 | public function save(){ 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /lib/plugins/Pdf/DomPdf_Library.php: -------------------------------------------------------------------------------- 1 | 'certificados/participantes', 23 | 24 | //Layout to be used 25 | 'layout' => 'certificados', 26 | 27 | //Url. Only if a remote file. Required constant DOMPDF_ENABLE_REMOTE as TRUE 28 | //'url' => 'http://www.google.com.br', 29 | 30 | //Paper settings. 31 | 'paper' => array( 32 | 'size'=>'A4', 33 | 'orientation'=>'landscape' //portrait or landscape 34 | ), 35 | 36 | //Sending data to view 37 | 'data' => array( 38 | 'name' => 'Cláudio Medeiros', 39 | 'email' => 'contato@claudiomedeiros.net' 40 | ), 41 | )); 42 | 43 | //To download 44 | $pdf->download('download'.time().'.pdf'); 45 | 46 | //To save 47 | $pdf->save('/files/'.time().'.pdf'); 48 | 49 | ----------------------------------------- 50 | 51 | /**/ 52 | 53 | 54 | require_once 'lib/utils/Pdf/dompdf/dompdf_config.inc.php'; 55 | 56 | class DomPdf_Library { 57 | protected $view = null; 58 | protected $data = array(); 59 | protected $layout = false; 60 | public $DomPdf = null; 61 | protected $url = null;//if a remote file. 62 | protected $paper = array(); 63 | 64 | public function __construct($data = array()) { 65 | foreach($data as $key => $value): 66 | $this->{$key} = $value; 67 | endforeach; 68 | 69 | $this->DomPdf = new DOMPDF(); 70 | $this->paper(); 71 | } 72 | public function render() { 73 | if(!$this->url): 74 | $view = new View(); 75 | $content = $view->render($this->view, $this->data, $this->layout); 76 | $this->DomPdf->load_html($content); 77 | else: 78 | $this->DomPdf->load_html_file($this->url); 79 | endif; 80 | 81 | $this->DomPdf->render(); 82 | } 83 | public function download($filename = null){ 84 | $this->render(); 85 | $this->DomPdf->stream($filename); 86 | } 87 | public function save($filename) { 88 | $this->render(); 89 | file_put_contents($filename, $this->DomPdf->output()); 90 | } 91 | public function paper(){ 92 | $this->paper = 93 | array_merge(array('size'=>'A4', 'orientation'=>'portrait'), $this->paper); 94 | 95 | $this->DomPdf->set_paper($this->paper['size'], $this->paper['orientation']); 96 | } 97 | 98 | } -------------------------------------------------------------------------------- /lib/plugins/Pdf/Pdf.php: -------------------------------------------------------------------------------- 1 | 'mPdf', //DomPdf is available 22 | 23 | //View to render 24 | 'view' => 'certificados/participantes', 25 | 26 | //Layout to be used 27 | 'layout' => 'certificados', 28 | 29 | //Url. Only if a remote file. 30 | //'url' => 'http://www.google.com.br', 31 | 32 | //Paper settings. 33 | 'paper' => array( 34 | 'size'=>'A4', 35 | 'orientation'=>'landscape' //portrait or landscape 36 | ), 37 | 38 | //Sending data to view 39 | 'data' => array( 40 | 'name' => 'Cláudio Medeiros', 41 | 'email' => 'contato@claudiomedeiros.net' 42 | ), 43 | )); 44 | 45 | //To download 46 | $pdf->download('download'.time().'.pdf'); 47 | 48 | //To save 49 | $pdf->save('/files/'.time().'.pdf'); 50 | 51 | 52 | */ 53 | 54 | 55 | 56 | class Pdf { 57 | protected $object = array(); 58 | 59 | public function __construct($data = array()) { 60 | if(array_key_exists('library', $data)): 61 | $library = array_unset($data, 'library'); 62 | $library .= '_Library'; 63 | require_once 'lib/utils/Pdf/' . $library . '.php'; 64 | //pr($library); 65 | $this->object = new $library($data); 66 | else: 67 | throw new PdfException('Library name not specified'); 68 | endif; 69 | } 70 | public function render() { 71 | $this->object->render(); 72 | } 73 | public function download($filename = null){ 74 | $this->object->download($filename); 75 | } 76 | public function save($filename) { 77 | $this->object->save($filename); 78 | } 79 | } 80 | 81 | class PdfException extends Exception{} -------------------------------------------------------------------------------- /lib/plugins/Pdf/mPdf_Library.php: -------------------------------------------------------------------------------- 1 | 'certificados/participantes', 21 | 22 | //Layout to be used 23 | 'layout' => 'certificados', 24 | 25 | //Url. Only if a remote file. Required constant DOMPDF_ENABLE_REMOTE as TRUE 26 | //'url' => 'http://www.google.com.br', 27 | 28 | //Paper settings. 29 | 'paper' => array( 30 | 'size'=>'A4', 31 | 'orientation'=>'landscape' //portrait or landscape 32 | ), 33 | 34 | //Sending data to view 35 | 'data' => array( 36 | 'name' => 'Cláudio Medeiros', 37 | 'email' => 'contato@claudiomedeiros.net' 38 | ), 39 | )); 40 | 41 | //To download 42 | $pdf->download('downloaded-filename.pdf'); 43 | 44 | //To save. Path relative to /SPAGHETTI_ROOT 45 | $pdf->save('/files/saved-filename.pdf'); 46 | 47 | ----------------------------------------- 48 | 49 | /**/ 50 | 51 | 52 | require_once 'lib/utils/Pdf/mpdf/mpdf.php'; 53 | 54 | class mPdf_Library { 55 | protected $view = null; 56 | protected $data = array(); 57 | protected $layout = false; 58 | public $mPDF = null; 59 | protected $url = null;//if a remote file. 60 | protected $paper = array(); 61 | 62 | public function __construct($data = array()) { 63 | foreach($data as $key => $value): 64 | $this->{$key} = $value; 65 | endforeach; 66 | 67 | $this->paper(); 68 | pr($this->paper); 69 | $this->mPDF = new mPDF('UTF-8', $this->paper); 70 | //pr($this->mPDF->CurOrientation); 71 | } 72 | public function render() { 73 | if(!$this->url): 74 | $view = new View(); 75 | $content = $view->render($this->view, $this->data, $this->layout); 76 | $this->mPDF->WriteHTML($content); 77 | else: 78 | $this->mPDF->WriteHTML(file_get_contents($this->url)); 79 | endif; 80 | } 81 | public function download($filename = null){ 82 | $this->render(); 83 | $this->mPDF->Output($filename, 'D'); 84 | } 85 | public function save($filename) { 86 | $this->render(); 87 | $filename = Filesystem::path($filename); 88 | $this->mPDF->Output($filename, 'F'); 89 | } 90 | protected function paper(){ 91 | $paper = array_merge(array('size' => 'A4', 'orientation' => 'portrait'), $this->paper); 92 | 93 | if($paper['orientation'] == 'portrait'): 94 | $this->paper = $paper['size']; 95 | else: 96 | $this->paper = $paper['size'] . '-L'; 97 | endif; 98 | } 99 | } -------------------------------------------------------------------------------- /lib/plugins/Pdf/mpdf/mpdf-dir.txt: -------------------------------------------------------------------------------- 1 | ----------------- 2 | Configuration 3 | ----------------- 4 | 5 | 1) Download DomPdf (http://mpdf.bpm1.com/download) and copy mpdf folder to /lib/utils/Pdf/mpdf in your application. 6 | 7 | 2) Copy Pdf.php to /lib/utils/Pdf.php and mPdf_Library.php to /lib/utils/Pdf/ 8 | 3) Require lib/utils/Pdf.php in your controllers and start using it. 9 | -------------------------------------------------------------------------------- /lib/utils/Barcode.php: -------------------------------------------------------------------------------- 1 | 15 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 16 | @subpackage ObjectBoleto.Lib.Utils 17 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 18 | 19 | ----------------------------------------------- 20 | HOW TO USE 21 | ----------------------------------------------- 22 | //Inclua a class no arquivo 23 | require 'lib/utils/Barcode.php'; 24 | 25 | //Chame as funções normalmente 26 | Barcode::getImage('123455689') pega o resource da imagem gerada 27 | echo Barcode::getHtml('123455689') retorna o html para gerar a imagem 28 | 29 | ----------------------------------------------- 30 | CHANGELOG 31 | ----------------------------------------------- 32 | 33 | 17/05/2011 34 | [+] Initial 35 | 36 | ----------------------------------------------- 37 | TO DO 38 | ----------------------------------------------- 39 | 40 | 41 | 42 | ----------------------------------------------- 43 | KNOWN BUGS 44 | ----------------------------------------------- 45 | 46 | 47 | */ 48 | class Barcode{ 49 | //Imagem 50 | public $image; 51 | //dimensões do código de barras 52 | public $width = 480; 53 | public $height= 50; 54 | //Cores 55 | public $white; 56 | public $black; 57 | public $poolblue; 58 | //Configurações 59 | public $n = 1 ; //narrow: fino 60 | public $w = 3 ; //wide:largo 61 | public $start_code = '0000'; 62 | public $end_code = '100'; 63 | public $codes = array( //0111000010 64 | //0 //1 //2 //3 //4 65 | '00110', '10001', '01001', '11000', '00101', 66 | //5 //6 //7 //8 //9 67 | '10100', '01100', '00011', '10010', '01010' 68 | ); 69 | 70 | private $current_x = 0; 71 | private $color = 0; 72 | 73 | 74 | /** 75 | * 76 | * 77 | * @version 0.1 17/05/2011 Initial 78 | */ 79 | public function __construct(){ 80 | header("Content-type:image/png"); 81 | $this->image = imagecreate( $this->width, $this->height); 82 | 83 | //Alocando cores 84 | $this->white = imagecolorallocate($this->image, 255, 255, 255); 85 | $this->black = imagecolorallocate($this->image, 0, 0, 0); 86 | 87 | } 88 | 89 | /** 90 | * 91 | * 92 | * @version 0.1 17/05/2011 Initial 93 | */ 94 | public function addBar($x, $width, $color){ 95 | $color = $color == 0 ? $this->black : $this->white; 96 | imagefilledrectangle($this->image, $x, 0, $x + $width, $this->height, $color); 97 | } 98 | 99 | /** 100 | * 101 | * 102 | * @version 0.1 17/05/2011 Initial 103 | */ 104 | public function getBarcode($code){ 105 | //Chamando quem vai processar a imagem 106 | $this->process($code); 107 | //Exibindo a image 108 | imagepng($this->image); 109 | imagedestroy($this->image); 110 | } 111 | 112 | /** 113 | * 114 | * 115 | * @version 0.1 17/05/2011 Initial 116 | */ 117 | public function __destruct(){ 118 | $this->current_x = 0; 119 | $this->color = 0; 120 | $this->image = null; 121 | } 122 | 123 | /** 124 | * 125 | * 126 | * @version 0.1 17/05/2011 Initial 127 | */ 128 | public static function getImage($code){ 129 | $barcode = new Barcode(); 130 | $barcode->getBarcode($code); 131 | } 132 | 133 | /** 134 | * 135 | * 136 | * @version 0.1 17/05/2011 Initial 137 | */ 138 | public static function getHtml($code){ 139 | //return ''; 140 | return ''; 141 | } 142 | 143 | /** 144 | * 145 | * 146 | * @version 0.1 17/05/2011 Initial 147 | */ 148 | public function interleave($code){ 149 | $n1 = substr($code, 0, 1); 150 | $n2 = substr($code, 1, 1); 151 | $buff = ''; 152 | 153 | for($i = 0; $i < 5; $i++){ 154 | $buff .= substr($this->codes[$n1], $i, 1) . substr($this->codes[$n2], $i, 1); 155 | } 156 | 157 | return $buff; 158 | } 159 | 160 | /** 161 | * 162 | * 163 | * @version 0.1 17/05/2011 Initial 164 | */ 165 | public function process($code){ 166 | $n = strlen($code); 167 | //se o número de caracteres for ímpar, adicione um 0 no início 168 | $code = (strlen($code) % 2) <> 0 ? '0' . $code : $code; 169 | 170 | //Pegando cada número do código 171 | for($i = 0; $i < $n; $i+=2){ 172 | $current = $this->interleave(substr($code, $i, 1) . substr($code, $i+1, 1)); 173 | 174 | //Está no início? Adiciona o início 175 | if($i == 0) $current = $this->start_code . $current; 176 | //Está no final? Adiciono o final 177 | if($i == ($n - 2)) $current .= $this->end_code; 178 | 179 | //Transformando cada número os binários utilizados 180 | for($j = 0; $j < strlen($current); $j++){ 181 | //Se for 1, a largura é 3. Se for 0, a largura é 1 182 | $width = substr($current, $j, 1) == 1 ? 3 : 1; 183 | //pr($width); 184 | 185 | $this->addBar($this->current_x, $width, $this->color); 186 | //Se a última cor for preta, mudo pra branca 187 | $this->color = $this->color == 0 ? 1 : 0; 188 | //Adiciona o x atual 189 | $this->current_x += $width; 190 | } 191 | } 192 | //Adiciona espaço em branco ao final 193 | $this->addBar($this->current_x, 1, $this->color); 194 | } 195 | } 196 | if(isset($_GET['n'])) Barcode::getImage($_GET['n']); -------------------------------------------------------------------------------- /lib/utils/Date.php: -------------------------------------------------------------------------------- 1 | 217728000, 6 | 'months' => 18144000, 7 | 'weeks' => 604800, 8 | 'days' => 86400, 9 | 'hours' => 3600, 10 | 'minutes' => 60, 11 | 'seconds' => 1 12 | ); 13 | public static $holidays = array( 14 | '01/01', '21/04', '01/05', '07/09', '12/10', 15 | '02/11', '20/11', '15/11', '25/12' 16 | ); 17 | public static $format = 'Y-m-d'; 18 | 19 | 20 | /** 21 | * Calcula a diferença entre duas datas 22 | * 23 | * @version 0.1 Initial 24 | * 25 | * @param date $date Data informada 26 | * @param date optional $otherDate Data a ser comparada com a 27 | * informada em $date. Caso seja nula, será considerada o 28 | * dia de hoje 29 | * @param $unit optional Informa o tipo de retorno, podendo ser em 30 | * days, months, years, hours, etc. 31 | */ 32 | public static function diff($date, $otherDate = null, $unit = 'days') { 33 | if(is_null($otherDate)): 34 | $otherDate = time(); 35 | else: 36 | $otherDate = strtotime($otherDate); 37 | endif; 38 | $date = strtotime($date); 39 | $time = abs($date - $otherDate); 40 | 41 | return ceil($time / self::$convert[$unit]); 42 | } 43 | 44 | /** 45 | * Adiciona um período de tempo a uma data 46 | * 47 | * @version 0.1 Initial 48 | * 49 | * @param $date Data inicial 50 | * @param $num Número de períodos a serem adicionados 51 | * @param $unit Tipo do período que está sendo adicionado 52 | * @param $format Formato de saída 53 | */ 54 | public static function add($date, $num, $unit = 'days', $format = null) { 55 | $new_date = self::addInTime($date, $num, $unit); 56 | return self::format($new_date, $format); 57 | } 58 | 59 | /** 60 | * Devolve o próximo dia útil 61 | * 62 | * @version 0.1 Initial 63 | * 0.2 24/05/2011 Adicionado o parâmetro $format 64 | * 65 | * @param $date Data a ser comparada 66 | * @param $format Formato opcional de saída 67 | */ 68 | public static function nextWorkday($date = null, $format = null) { 69 | if(is_null($date)): 70 | $date = date('Y-m-d'); 71 | endif; 72 | $date = self::add($date, 1, 'days', 'Y-m-d'); 73 | 74 | while(!self::isWorkday($date)): 75 | $date = self::add($date, 1, 'days', 'Y-m-d'); 76 | endwhile; 77 | 78 | return self::format($date, $format); 79 | } 80 | 81 | /** 82 | * Retorna true se a data informada é um dia útil 83 | * 84 | * @version 0.1 Initial 85 | * 86 | * @param $date optional Data a ser verificada. HOJE se nada for 87 | * informado 88 | */ 89 | public static function isWorkday($date = null) { 90 | if(is_null($date)): 91 | $date = date('Y-m-d'); 92 | endif; 93 | return !self::isWeekend($date) && !self::isHoliday($date); 94 | } 95 | 96 | /** 97 | * Verifica se a data informada é no final de semana 98 | * 99 | * @version 0.1 Initial 100 | * 101 | * @param $date optional Data a ser verificada. HOJE se nada for 102 | * informado 103 | */ 104 | public static function isWeekend($date = null) { 105 | if(is_null($date)): 106 | $time = time(); 107 | else: 108 | $time = strtotime($date); 109 | endif; 110 | 111 | return date('N', $time) >= 6; 112 | } 113 | 114 | /** 115 | * Verifica se a data informada é um feriado 116 | * 117 | * @version 0.1 Initial 118 | * 119 | * @param $date optional Data a ser verificada. HOJE se nada for 120 | * informado 121 | */ 122 | public static function isHoliday($date = null) { 123 | $date = self::format($date, 'd/m'); 124 | return in_array($date, self::$holidays); 125 | } 126 | 127 | /** 128 | * Formata uma data informada 129 | * 130 | * @version 0.1 Initial 131 | * 132 | * @param $date A data a ser formatada 133 | * @param $format O formato de saída. Se não for informado, será 134 | * utilizado o formato definido em Date::$format 135 | */ 136 | public static function format($date, $format = null) { 137 | if(is_null($format)): 138 | $format = self::$format; 139 | endif; 140 | if(is_null($date)): 141 | $date = time(); 142 | elseif(!is_numeric($date)): 143 | $date = strtotime($date); 144 | endif; 145 | 146 | return date($format, $date); 147 | } 148 | 149 | /** 150 | * Retorna o tempo decorrido entre a data informada em $date e agora. 151 | * 152 | * @version 0.1 Initial 153 | * 154 | * @param $date a data a ser comparada 155 | */ 156 | public static function timeAgo($date = null) { 157 | if(is_null($date)): 158 | $date = time(); 159 | else: 160 | $date = strtotime($date); 161 | endif; 162 | $now = time(); 163 | $since = $now - $date; 164 | 165 | $times = array_values(self::$convert); 166 | $names = array_keys(self::$convert); 167 | foreach($times as $i => $seconds): 168 | if(($count = floor($since / $seconds))): 169 | break; 170 | endif; 171 | endforeach; 172 | $name = preg_replace('/s$/', '', $names[$i]); 173 | $ago = ($count == 1) ? '1 ' . $name : $count . ' ' . $name . 's'; 174 | 175 | if($i + 1 < count(self::$convert)): 176 | $name = preg_replace('/s$/', '', $names[$i + 1]); 177 | $seconds2 = $times[$i + 1]; 178 | if(($count = floor(($since - ($seconds * $count)) / $seconds2))): 179 | $ago .= ', ' . (($count == 1) ? '1 ' . $name : $count . ' ' . $name . 's'); 180 | endif; 181 | endif; 182 | 183 | return $ago; 184 | } 185 | 186 | /** 187 | * Adiciona um feriado à tabela de feriados em tempo de execução 188 | * 189 | * @version 0.1 Initial 190 | * 191 | * @param $date 192 | */ 193 | public static function addHoliday($date) { 194 | self::$holidays []= $date; 195 | } 196 | 197 | /** 198 | * Define a formatação padrão a ser utilizada pela classe 199 | * 200 | * @version 0.1 Initial 201 | * 202 | * @param $format O formato padrão 203 | */ 204 | public static function setDefaultFormat($format) { 205 | self::$format = $format; 206 | } 207 | 208 | /** 209 | * Adiciona unidades de tempo a uma data informada, mas retorna o 210 | * valor em UnixTimeStamp 211 | * 212 | * @version 0.1 Initial 213 | * 214 | * @param $date A data informada 215 | * @param $num O número de períodos 216 | * @param $unit A unidade dos períodos adicionados 217 | */ 218 | protected static function addInTime($date, $num, $unit = 'days') { 219 | if(is_null($date)): 220 | $date = time(); 221 | else: 222 | $date = strtotime($date); 223 | endif; 224 | return $date + $num * self::$convert[$unit]; 225 | } 226 | 227 | /** 228 | * @todo 229 | * Converte entre formatos de data 230 | * 231 | * @version 0.1 Initial 232 | * 233 | * @param 234 | * @param 235 | * @param 236 | */ 237 | public static function convertFrom($fromFormat, $date, $toFormat = null){ 238 | 239 | 240 | } 241 | } -------------------------------------------------------------------------------- /lib/utils/Debug.php: -------------------------------------------------------------------------------- 1 | ' .PHP_EOL . print_r($data, true) . PHP_EOL . '' . PHP_EOL; 24 | else: 25 | echo '
' . $legend 26 | . '
'
27 |                                         . print_r($data, true)
28 |                                         . '
'; 29 | endif; 30 | } 31 | 32 | public static function dump($data) { 33 | self::pr(var_export($data, true)); 34 | } 35 | 36 | public static function trace() { 37 | return debug_backtrace(); 38 | } 39 | } 40 | 41 | function pr($data, $legend = null) { 42 | Debug::pr($data, $legend); 43 | } 44 | 45 | function dump($data) { 46 | Debug::dump($data); 47 | } -------------------------------------------------------------------------------- /lib/utils/Math.php: -------------------------------------------------------------------------------- 1 | 15 | @package ObjectBoleto http://github.com/klawdyo/PHP-Object-Boleto 16 | @subpackage ObjectBoleto.Lib.Utils 17 | @license http://www.opensource.org/licenses/mit-license.php The MIT License 18 | 19 | ----------------------------------------------- 20 | HOW TO USE 21 | ----------------------------------------------- 22 | //Inclua a class no arquivo 23 | require 'lib/utils/Math.php'; 24 | 25 | //Chame as funções normalmente 26 | echo Math::Mod11('261533'); //Retorna 9 27 | echo Math::Mod10('261533'); //Retorna 4 28 | 29 | ----------------------------------------------- 30 | CHANGELOG 31 | ----------------------------------------------- 32 | 33 | 17/05/2011 34 | [+] Mod11() calcula o módulo 11 do número informado 35 | [+] Mod10() calcula o módulo 10 do número informado 36 | [+] financing() calcula a prestacao de um financiamento considerando 37 | periodo, valor inicial e juros 38 | 39 | 22/05/2011 40 | [m] Correção de bug em Mod11() 41 | 42 | 24/05/2011 43 | [m] Mod10() e Mod11() agora podem retornar o valor original formatado 44 | juntamente com o dígito calculado pelo algoritmo 45 | 46 | 28/05/2011 47 | [m] Adicionado $maxFactor em Mod11() como quinto parâmetro 48 | [m] $separator foi movido para o sexto parâmetro 49 | 50 | ----------------------------------------------- 51 | TO DO 52 | ----------------------------------------------- 53 | 54 | - Cálculo de parcelas em um parcelamento simples, com arredondamento, 55 | retirada dos centavos para outra prestação, etc. 56 | 57 | ----------------------------------------------- 58 | KNOWN BUGS 59 | ----------------------------------------------- 60 | Ao passar números como inteiros, e que comecem com 0, o PHP 61 | entendará tratar-se de um octal e o cálculo será errado. A solução 62 | é sempre evitar adicionar à esquerda do número, ou sempre passar 63 | o número entre aspas, mantendo como string e evitando a conversão 64 | automática para octal. 65 | 66 | 67 | */ 68 | class Math{ 69 | 70 | /** 71 | * method Mod11() 72 | * Calcula o módulo 11 de um número, conforme esquema abaixo, retirado 73 | * de http://pt.wikipedia.org/wiki/D%C3%ADgito_verificador 74 | 75 | +---+---+---+---+---+---+ +---+ 76 | | 2 | 6 | 1 | 5 | 3 | 3 | - | 9 |<--- 77 | +---+---+---+---+---+---+ +---+ 78 | | | | | | | 79 | x7 x6 x5 x4 x3 x2 80 | | | | | | | 81 | =14 =36 =5 =20 =9 =6 82 | +---+---+---+---+---+-> = (90 x 10) / 11 = 81, resto 9 => Dígito = 9 83 | 84 | +---+---+---+---+---+---+ +---+---+ 85 | | 2 | 6 | 1 | 5 | 3 | 3 | - | 9 | 4 |<--- 86 | +---+---+---+---+---+---+ +---+---+ 87 | | | | | | | | 88 | x8 x7 x6 x5 x4 x3 x2 89 | | | | | | | | 90 | =16 =42 =6 =25 =12 =9 =18 91 | +---+---+---+---+---+-> = (128 x 10) / 11 = 116, resto 4 => Dígito = 4 92 | 93 | * @version 0.1 17/05/2011 Initial 94 | * 0.2 22/05/2011 Bug corrigido 95 | * 0.3 24/05/2011 Adicionados os parâmetros $returnFull e $separator 96 | * 0.4 28/05/2011 Adicionado o parâmetro $maxFactor 97 | * 0.5 19/10/2013 Corrigido erro no retorno 98 | * 99 | * @param $number O número informado 100 | * @param $ifTen Caso o resto da divisão seja 10, o que colocar 101 | * em seu lugar? Existem exemplos de bancos que adicionam 102 | * "0", outros "1", outros "X", outros "P", etc 103 | * @param $ifZero Se o resultado for zero, substituir por algum outro valor? 104 | * @param $returnFull Deve retornar o valor completo, incluindo o dígito, 105 | * ou somente o cálculo da divisão? 106 | * @param $maxFactor Estipula o fator máximo de múltiplicação a ser aplicado 107 | * nos algarismos do número informado 108 | * @param $separator Separador para o dígito calculado 109 | * @return mixed 110 | */ 111 | public static function Mod11($number, $ifTen = '0', $ifZero = '0', 112 | $returnFull = false, $maxFactor = 9, $separator = '-'){ 113 | $numLen = strlen($number) - 1; 114 | $sum = 0; 115 | $factor = 2; //Inicial 116 | 117 | #Loop pelos algarismos, de trás pra frente. O último número 118 | #é multiplicado pelo fator 2, o penúltimo por 3, e assim por diante. 119 | #Quando o fator ficar maior que $maxFactor, retorno seu valor para 2 120 | for($i = $numLen; $i >= 0; $i --){ 121 | $sum += substr($number, $i, 1) * $factor; 122 | $factor = $factor >= $maxFactor ? 2 : $factor + 1; 123 | } 124 | 125 | #Resto da divisão 126 | $rest = ($sum * 10) % 11; 127 | 128 | #Verificando se o resto é 10 ou zero. //v0.5 129 | if($rest === 10){$rest = $ifTen;} 130 | elseif($rest === 0){$rest = $ifZero;} 131 | 132 | #Se $returnFull===false, retorna só o resto 133 | if($returnFull === false) 134 | return $rest; 135 | else 136 | return $number . $separator . $rest; 137 | } 138 | 139 | 140 | /** 141 | * Method Mod10() 142 | * Calcula o módulo 10 de um número, conforme o esquema a seguir 143 | * 144 | * @version 0.1 17/05/2011 Initial 145 | * 0.2 24/05/2011 Adicionados os parâmetros $returnFullNumber e $separator 146 | * 147 | * @tutorial 148 | +---+---+---+---+---+---+ +---+ 149 | | 2 | 6 | 1 | 5 | 3 | 3 | - | 4 | 150 | +---+---+---+---+---+---+ +---+ 151 | | | | | | | 152 | x1 x2 x1 x2 x1 x2 153 | | | | | | | 154 | =2 =12 =1 =10 =3 =6 155 | +2 +1+2 +1 +1+0 +3 +6 = 16 156 | +---+---+---+---+---+-> = (16 / 10) = 1, resto 6 => DV = (10 - 6) = 4 157 | * Se o resto for diferente de 0, o resultado será 10 menos esse número 158 | * 159 | * @param $number Número a ser calculado o módulo 10 160 | * @param $returnFull Deve retornar o valor completo, incluindo o dígito, 161 | * ou somente o cálculo da divisão? 162 | * @param $separator Separador para o dígito calculado 163 | * @return integer 164 | */ 165 | public static function Mod10($number, $returnFullNumber = false, $separator = '-'){ 166 | $numLen = strlen($number) - 1; 167 | $sum = 0; 168 | $factor = 2; 169 | 170 | for($i = $numLen; $i >= 0; $i --){ 171 | $result = substr($number, $i, 1) * $factor; 172 | 173 | if($result >= 10){ 174 | $result = substr($result, 0, 1) + substr($result, 1, 1); 175 | } 176 | 177 | $sum += $result; 178 | $factor = $factor == 2 ? 1 : 2; 179 | } 180 | //Resto da divisão 181 | $rest = $sum % 10; 182 | 183 | $rest = $rest <> 0 ? 10 - $rest : $rest; 184 | 185 | if($returnFullNumber === false){ 186 | return $rest; 187 | } 188 | else{ 189 | return $number . $separator . $rest; 190 | } 191 | } 192 | 193 | /** 194 | * http://pt.wikipedia.org/wiki/Tabela_price#C.C3.A1lculo 195 | */ 196 | public static function financing($investimento, $juros, $periodo) { 197 | return ($investimento * $juros) / (1 - (1 / pow((1 + $juros), $periodo))); 198 | } 199 | } -------------------------------------------------------------------------------- /lib/utils/String.php: -------------------------------------------------------------------------------- 1 | $length): 89 | //O último espaço encontrado na string 90 | $lastSpacePos = mb_strrpos($newText, " "); 91 | 92 | //Tem que encontrar pelo menos 1 espaço. Se encontrar, defina o 93 | //tamanho a ser cortado como sendo a posição desse espaço 94 | if($lastSpacePos !== false): 95 | $length = $lastSpacePos; 96 | endif; 97 | 98 | return mb_substr($newText, 0, $length) . $complement; 99 | else: 100 | return $text; 101 | endif; 102 | } 103 | 104 | /** 105 | * Checa se a string passada está em UTF-8 106 | * 107 | * @version 108 | * 0.1 09/10/2010 Initial 109 | * 110 | * @param string $text 111 | * @return bool TRUE caso a string esteja em utf-8 112 | */ 113 | public function isUtf8($text){ 114 | return mb_check_encoding($text, 'utf-8'); 115 | } 116 | 117 | 118 | /** 119 | * Checa se a string passada está em UTF-8 120 | * 121 | * @version 122 | * 0.1 09/10/2010 Initial 123 | * 124 | * @param string $text 125 | * @param mixed $verifyFollowings A lista dos charsets que serão usados 126 | * para verificar se a string informada está em um deles. 127 | * @return string O nome do charset utilizado na string. A busca é feita 128 | * entre os charsets indicados em $verifyFollowings 129 | */ 130 | public function getCharset($text, 131 | $verifyFollowings = array('utf-8', 'iso-8859-1')){ 132 | 133 | //O "x" corrige um bug da função "mb_detect_string", que falha caso 134 | //a última letra da string seja acentuada. 135 | return mb_detect_encoding($text . 'x', $verifyFollowings); 136 | } 137 | 138 | /** 139 | * Converte para utf8 se ainda não estiver 140 | * 141 | * @version 142 | * 0.1 09/10/2010 Initial 143 | * 144 | * @param string $text A string que será convertida 145 | * @return String O texto convertido 146 | */ 147 | public function toUtf8($text){ 148 | if(!$this->isUtf8($text)): 149 | return utf8_encode($text); 150 | endif; 151 | 152 | return $text; 153 | } 154 | 155 | public static function insert($string, $data) { 156 | foreach($data as $key => $value): 157 | $regex = '%(:' . $key . ')%'; 158 | $string = preg_replace($regex, $value, $string); 159 | endforeach; 160 | return $string; 161 | } 162 | public static function extract($string) { 163 | preg_match_all('%:([a-zA-Z-_]+)%', $string, $extracted); 164 | return $extracted[1]; 165 | } 166 | //18/05/2011 167 | public static function putAt($text, $put, $at){ 168 | return self::left($text, $at) . $put . mb_substr($text, $at); 169 | } 170 | //18/05/2011 171 | public static function applyMask($text, $mask){ 172 | $length = strlen($text); 173 | $buff = ''; 174 | 175 | $special = array('/', '.', '-', '_', ' '); 176 | 177 | for($i = 0, $j = 0; $i < $length; $i++, $j++){ 178 | if(!isset($text[$i]) || !isset($mask[$j])) break; 179 | 180 | if(in_array($mask[$j], $special)){ 181 | $buff .= $mask[$j]; 182 | $j++; 183 | } 184 | $buff .= $text[$i]; 185 | } 186 | 187 | return $buff; 188 | } 189 | 190 | } -------------------------------------------------------------------------------- /lib/utils/Validar.php: -------------------------------------------------------------------------------- 1 | 'SP','02'=> 'MG','03'=> 'RJ','04'=> 'RS','05'=> 'BA', 33 | '06'=> 'PR','07'=> 'CE','08'=> 'PE','09'=> 'SC','10'=> 'GO', 34 | '11'=> 'MA','12'=> 'PB','13'=> 'PA','14'=> 'ES','15'=> 'PI', 35 | '16'=> 'RN','17'=> 'AL','18'=> 'MT','19'=> 'MS','20'=> 'DF', 36 | '21'=> 'SE','22'=> 'AM','23'=> 'RO','24'=> 'AC','25'=> 'AP', 37 | '26'=> 'RR','27'=> 'TO','28'=> 'EX' 38 | ); 39 | * @param $msg Mensagem personalizada para esse campo. Caso seja null, error() 40 | * roteará a mensagem para o padrão da função de validação 41 | */ 42 | public static function titulo($sigla_uf = null, $msg = null){ 43 | //Só permite números 44 | if(eregi("([^0-9]+)", $this->nowdata())){ 45 | $this->error($msg, 'titulo', null, 'Só números são permitidos'); 46 | } 47 | else{ 48 | // precisa ter 12 caracteres numéricos. retira tudo q nao for número e adiciona zeros à esquerda. 49 | $titulo = str_pad($this->nowdata(),12,"0",STR_PAD_LEFT); 50 | 51 | $tit = substr($titulo,0,8); 52 | $num_uf = substr($titulo,8,2); 53 | $dv = substr($titulo,10,2); 54 | $ignore_list = array('000000000000'); 55 | 56 | if(in_array($titulo, $ignore_list)) 57 | return false; 58 | 59 | //1 dv 60 | for($i = 0; $i < 8; $i++){ 61 | $soma1 += $tit[$i] * ($i+2); 62 | } 63 | //2 dv 64 | $soma2 = $num_uf[0] * 7 + $num_uf[1] * 8 + ($soma1 % 11) * 9; 65 | 66 | if(($soma1 % 11) . ($soma2%11) != $dv){ 67 | $error = 5; 68 | } 69 | 70 | if($error > 0){ 71 | $this->error($msg, 'titulo'); 72 | } 73 | } 74 | return $this; 75 | } 76 | 77 | /** 78 | * Valida um PIS (Programa de Integração Social) 79 | * 80 | * @version: 0.3 18/05/2009 81 | * 1.0 23/05/2011 - Importado do ValidationComponent. 82 | * - Agora retorna true or false 83 | * - Método static 84 | * @param $pis Número do PIS 85 | * @return boolean True se for um número válido 86 | */ 87 | public static function pis($pis){ 88 | #permite pontos e traços, mas não deve permitir outras coisas 89 | $pis = str_pad(preg_replace("([^0-9]+)", '', $pis), 10, '0', STR_PAD_LEFT); 90 | #DV informado 91 | $dv = substr($pis,-1,1); 92 | #sequencia de números a serem calculados 93 | $seqcalc = "3298765432"; 94 | 95 | $soma = 0; 96 | 97 | for($i = 0; $i < 10; $i++){ 98 | $soma += $pis[$i] * $seqcalc[$i]; 99 | } 100 | 101 | $dv1 = (($soma % 11) < 2) ? 0 : (11 - ($soma % 11)); 102 | 103 | return ($dv1 != $dv); 104 | } 105 | 106 | /** 107 | * function cpf() 108 | * Valida um CPF verificando seus algarismos e seus dígitos verificadores. 109 | * Para fins de validação, cpf() não leva em consideração as presenças de pontos e 110 | * traços ao número informado. 111 | * 112 | * @version: 0.3 18/05/2009 Initial 113 | * 1.0 23/05/2011 - Método agora é static 114 | * - Retorna true se for válido 115 | * - Importado do ValidationComponent. 116 | * 117 | * @param $value CPF a ser verificado 118 | * @return $this 119 | */ 120 | public static function cpf($value) { 121 | #permite pontos e traços, mas não deve permitir outras coisas 122 | $value = str_pad(preg_replace("([^0-9]+)", '', $value), 11, '0', STR_PAD_LEFT); 123 | 124 | $cpf = substr($value, 0, 9); 125 | $dv = substr($value,9,2); 126 | 127 | $soma = $soma2 = 0; 128 | for($i = 0; $i <= 9; $i++){ 129 | $ignore_list[] = str_repeat($i, 11); //gerando ignore list 130 | @$soma += $cpf[$i] * (10 - $i); 131 | @$soma2 += $cpf[$i] * (11 - $i); 132 | } 133 | 134 | if(in_array($value, $ignore_list)){ 135 | return false; 136 | } 137 | 138 | $dv1 = (($soma % 11) <= 1) ? 0 : (11 - ($soma % 11)); 139 | $soma2 = ($soma2 + $dv[0] * 2) % 11; 140 | $dv2 = (($soma2 % 11) <= 1) ? 0 : (11 - ($soma2 % 11)); 141 | //pr($dv1.$dv2); 142 | if($dv1 . $dv2 != $dv[0] . $dv[1]){ 143 | return false; 144 | } 145 | return true; 146 | } 147 | 148 | /** 149 | * Valida uma CNH (Carteira nacional de habilitação) 150 | * 151 | * @version 0.1 Initial. Retirado da internet 152 | * 0.2 23/05/2011 - Transformado em static 153 | * - Algumas adaptações 154 | * - Importado do ValidationComponent. 155 | * 156 | */ 157 | public static function cnh($cnh) { 158 | $ret = false; 159 | 160 | if((strlen($cnh = preg_replace('/[^\d]/' , '' , $cnh)) == 11 )){ 161 | $dsc = 0; 162 | 163 | for ( $i = 0 , $j = 9 , $v = 0 ; $i < 9 ; ++$i , --$j ){ 164 | $v += (int) $cnh{ $i } * $j; 165 | } 166 | 167 | if ( ( $vl1 = $v % 11 ) >= 10 ) { 168 | $vl1 = 0; 169 | $dsc = 2; 170 | } 171 | 172 | for ( $i = 0 , $j = 1 , $v = 0 ; $i < 9 ; ++$i , ++$j ){ 173 | $v += (int) $cnh{ $i } * $j; 174 | } 175 | 176 | $vl2 = ( $x = ( $v % 11 ) ) >= 10 ? 0 : $x - $dsc; 177 | $ret = sprintf( '%d%d' , $vl1 , $vl2 ) == substr( $cnh , -2 ); 178 | } 179 | 180 | return $ret; 181 | } 182 | 183 | /** 184 | * function cnpj() 185 | * Valida um CNPJ. 186 | * cnpj() não considera pontos, traços e barras. 187 | * 188 | * @version: 0.2 18/05/2009 189 | * 0.3 23/05/2011 - Agora retorna True se for um cnpj válido 190 | * - Importado do ValidationComponent. 191 | * 0.4 27/05/2011 Método transformado em static 192 | * 0.5 27/05/2011 Mudança do algoritmo 193 | * 194 | * @param $cnpj CNPJ a ser verificado 195 | * @return boolean 196 | */ 197 | public static function cnpj($cnpj = null){ 198 | /*elimina tudo que não for números e acrescenta zeros à esquerda 199 | $cnpj = String::left(preg_replace("([^0-9])", "", $cnpj), 14); 200 | $dv = String::right($cnpj, 2); 201 | $seqcalc1 = "543298765432"; 202 | $seqcalc2 = "6543298765432"; 203 | 204 | $soma1 = $soma2 = 0; 205 | //faz as multiplicações 206 | for($i = 0; $i < 12; $i++){ 207 | $soma1 += $cnpj[$i] * $seqcalc1[$i]; 208 | $soma2 += $cnpj[$i] * $seqcalc2[$i]; 209 | } 210 | 211 | $dv1 = (($soma1 % 11) < 2) ? 0 : (11 - ($soma1 % 11)); 212 | 213 | $soma2 += $dv1 * 2; 214 | $dv2 = (($soma2 % 11) < 2) ? 0 : (11 - ($soma2 % 11)); 215 | 216 | return $dv1 . $dv2 != $dv;/**/ 217 | // Canonicalize input 218 | $cnpj = sprintf('%014s', preg_replace('{\D}', '', $cnpj)); 219 | 220 | // Validate length and CNPJ order 221 | if ((strlen($cnpj) != 14) 222 | || (intval(substr($cnpj, -4)) == 0)) { 223 | return false; 224 | } 225 | 226 | // Validate check digits using a modulus 11 algorithm 227 | for ($t = 11; $t < 13;) { 228 | for ($d = 0, $p = 2, $c = $t; $c >= 0; $c--, ($p < 9) ? $p++ 229 | : $p = 2) { 230 | $d += $cnpj[$c] * $p; 231 | } 232 | 233 | if ($cnpj[++$t] != ($d = ((10 * $d) % 11) % 10)) { 234 | return false; 235 | } 236 | } 237 | 238 | return true; 239 | 240 | } 241 | 242 | 243 | } -------------------------------------------------------------------------------- /lib/utils/Validate_BR.php: -------------------------------------------------------------------------------- 1 | 9 | * @version 20100404 10 | * @copyright 2005-2010 Paulo Freitas 11 | * @license http://creativecommons.org/licenses/by-sa/3.0 12 | */ 13 | class Validate_BR 14 | { 15 | /* 16 | * Credit card flag constants 17 | */ 18 | const CARD_AMEX = 1; 19 | const CARD_DINERS = 2; 20 | const CARD_DISCOVER = 4; 21 | const CARD_MASTERCARD = 8; 22 | const CARD_VISA = 16; 23 | const CARD_ALL = 32; 24 | 25 | /** 26 | * Validates credit card 27 | * 28 | * @param string $cc credit card number to validate 29 | * @param int $flag card flag to validate 30 | * @return bool TRUE if the number is a valid credit card, FALSE otherwise 31 | * @access public 32 | * @since 20060317 33 | */ 34 | public static function CC($cc, $flag = Validate_BR::CARD_ALL) 35 | { 36 | // Canonicalize input 37 | $cc = preg_replace('{\D}', '', $cc); 38 | 39 | // Validate choosed flags 40 | $er = array(); 41 | 42 | if ($flag & self::CARD_AMEX) { 43 | $er[] = '^3[47].{13}$'; 44 | } 45 | 46 | if ($flag & self::CARD_DINERS) { 47 | $er[] = '^3(0[0-5].{11}|6.{12})$'; 48 | } 49 | 50 | if ($flag & self::CARD_DISCOVER) { 51 | $er[] = '^6(011.{12}|5.{14})$'; 52 | } 53 | 54 | if ($flag & self::CARD_MASTERCARD) { 55 | $er[] = '^5[1-5].{14}$'; 56 | } 57 | 58 | if ($flag & self::CARD_VISA) { 59 | $er[] = '^4.{15}$'; 60 | } 61 | 62 | if (empty($er) || !preg_match('~' . implode('|', $er) . '~', $cc)) { 63 | return false; 64 | } 65 | 66 | // Validate digits using a modulus 10 algorithm (aka Luhn) 67 | for ($sum = 0, $idx = strlen($cc) - 1, $wt = 1; $idx >= 0; 68 | $wt = ($wt % 2) + 1, --$idx) { 69 | $sum += (($d = intval($cc[$idx]) * $wt) > 9) ? $d - 9 : $d; 70 | } 71 | 72 | return (($sum % 10) == 0); 73 | } 74 | 75 | /** 76 | * Validates CNH (Carteira Nacional de Habilitação) 77 | * 78 | * CNH is the Brazilian driving license. 79 | * 80 | * @param string $cnh CNH number to validate 81 | * @return bool TRUE if the number is a valid CNH, FALSE otherwise 82 | * @access public 83 | * @since 20100404 84 | */ 85 | public static function CNH($cnh) 86 | { 87 | // Canonicalize input 88 | $cnh = sprintf('%011s', preg_replace('{\D}', '', $cnh)); 89 | 90 | // Validate length and invalid numbers 91 | if ((strlen($cnh) != 11) || (intval($cnh) == 0)) { 92 | return false; 93 | } 94 | 95 | // Validate check digits using a modulus 11 algorithm 96 | for ($c = $s1 = $s2 = 0, $p = 9; $c < 9; $c++, $p--) { 97 | $s1 += intval($cnh[$c]) * $p; 98 | $s2 += intval($cnh[$c]) * (10 - $p); 99 | } 100 | 101 | if ($cnh[9] != (($dv1 = $s1 % 11) > 9) ? 0 : $dv1) { 102 | return false; 103 | } 104 | 105 | if ($cnh[10] != (((($dv2 = ($s2 % 11) - (($dv1 > 9) ? 2 : 0)) < 0) 106 | ? $dv2 + 11 : $dv2) > 9) ? 0 : $dv2) { 107 | return false; 108 | } 109 | 110 | return true; 111 | } 112 | 113 | /** 114 | * Validates CNPJ (Cadastro Nacional da Pessoa Jurídica) 115 | * 116 | * CNPJ is the Brazilian corporate taxpayer identification number. 117 | * 118 | * @param string $cnpj CNPJ number to validate 119 | * @return bool TRUE if the number is a valid CNPJ, FALSE otherwise 120 | * @access public 121 | * @since 20050619 122 | */ 123 | public static function CNPJ($cnpj) 124 | { 125 | // Canonicalize input 126 | $cnpj = sprintf('%014s', preg_replace('{\D}', '', $cnpj)); 127 | 128 | // Validate length and CNPJ order 129 | if ((strlen($cnpj) != 14) 130 | || (intval(substr($cnpj, -4)) == 0)) { 131 | return false; 132 | } 133 | 134 | // Validate check digits using a modulus 11 algorithm 135 | for ($t = 11; $t < 13;) { 136 | for ($d = 0, $p = 2, $c = $t; $c >= 0; $c--, ($p < 9) ? $p++ 137 | : $p = 2) { 138 | $d += $cnpj[$c] * $p; 139 | } 140 | 141 | if ($cnpj[++$t] != ($d = ((10 * $d) % 11) % 10)) { 142 | return false; 143 | } 144 | } 145 | 146 | return true; 147 | } 148 | 149 | /** 150 | * Validates CPF (Cadastro de Pessoas Físicas) 151 | * 152 | * CPF is the Brazilian individual taxpayer identification number. 153 | * 154 | * @param string $cpf CPF number to validate 155 | * @return bool TRUE if the number is a valid CPF, FALSE otherwise 156 | * @access public 157 | * @since 20050617 158 | */ 159 | public static function CPF($cpf) 160 | { 161 | // Canonicalize input 162 | $cpf = sprintf('%011s', preg_replace('{\D}', '', $cpf)); 163 | 164 | // Validate length and invalid numbers 165 | if ((strlen($cpf) != 11) 166 | || ($cpf == '00000000000') 167 | || ($cpf == '99999999999')) { 168 | return false; 169 | } 170 | 171 | // Validate check digits using a modulus 11 algorithm 172 | for ($t = 8; $t < 10;) { 173 | for ($d = 0, $p = 2, $c = $t; $c >= 0; $c--, $p++) { 174 | $d += $cpf[$c] * $p; 175 | } 176 | 177 | if ($cpf[++$t] != ($d = ((10 * $d) % 11) % 10)) { 178 | return false; 179 | } 180 | } 181 | 182 | return true; 183 | } 184 | 185 | /** 186 | * Validates DDD (Discagem Direta a Distância) 187 | * 188 | * DDD is the Brazilian phone area code (NPA). 189 | * 190 | * @param string $ddd 2-digit DDD code 191 | * @return bool TRUE if the code is a valid DDD, FALSE otherwise 192 | * @access public 193 | * @since 20080719 194 | */ 195 | public static function DDD($ddd) 196 | { 197 | return preg_match('{^([14689][1-9]|2[14]|[23][278]|[357][13-5]|7[79])$}', 198 | $ddd) != false; 199 | } 200 | 201 | /** 202 | * Validates NIS (PIS/PASEP/NIT) 203 | * 204 | * PIS/PASEP/NIT is the Brazilian social integration program. 205 | * 206 | * @param string $nis NIS number to validate 207 | * @return bool TRUE if the number is a valid NIS, FALSE otherwise 208 | * @access public 209 | * @since 20050620 210 | */ 211 | public static function NIS($nis) 212 | { 213 | // Canonicalize input 214 | $nis = sprintf('%011s', preg_replace('{\D}', '', $nis)); 215 | 216 | // Validate length and invalid numbers 217 | if ((strlen($nis) != 11) 218 | || (intval($nis) == 0)) { 219 | return false; 220 | } 221 | 222 | // Validate check digit using a modulus 11 algorithm 223 | for ($d = 0, $p = 2, $c = 9; $c >= 0; $c--, ($p < 9) ? $p++ : $p = 2) { 224 | $d += $nis[$c] * $p; 225 | } 226 | 227 | return ($nis[10] == (((10 * $d) % 11) % 10)); 228 | } 229 | 230 | /** 231 | * Validates TE (Título Eleitoral) 232 | * 233 | * Título Eleitoral is the Brazilian voter registration card. 234 | * 235 | * @param string $te TE number to validate 236 | * @return bool TRUE if the number is a valid TE, FALSE otherwise 237 | * @access public 238 | * @since 20060315 239 | */ 240 | public static function TE($te) 241 | { 242 | // Canonicalize input and parse UF 243 | $te = sprintf('%012s', preg_replace('{\D}', '', $te)); 244 | $uf = intval(substr($te, 8, 2)); 245 | 246 | // Validate length and invalid UFs 247 | if ((strlen($te) != 12) 248 | || ($uf < 1) 249 | || ($uf > 28)) { 250 | return false; 251 | } 252 | 253 | // Validate check digits using a slightly modified modulus 11 algorithm 254 | foreach (array(7, 8 => 10) as $s => $t) { 255 | for ($d = 0, $p = 2, $c = $t; $c >= $s; $c--, $p++) { 256 | $d += $te[$c] * $p; 257 | } 258 | 259 | if ($te[($s) ? 11 : 10] != ((($d %= 11) < 2) ? (($uf < 3) ? 1 - $d 260 | : 0) 261 | : 11 - $d)) { 262 | return false; 263 | } 264 | } 265 | 266 | return true; 267 | } 268 | 269 | /** 270 | * Validates UF (Unidade Federativa) 271 | * 272 | * UF is the Brazilian federal unit. 273 | * 274 | * @param string $uf 2-letter UF code 275 | * @return bool TRUE if the code is a valid UF, FALSE otherwise 276 | * @access public 277 | * @since 20050620 278 | */ 279 | public static function UF($uf) 280 | { 281 | return preg_match('{^A[CLMP]|BA|CE|DF|ES|[GT]O|M[AGST]|P[ABEIR]|R[JNORS]' 282 | . '|S[CEP]$}', $uf) != false; 283 | } 284 | } -------------------------------------------------------------------------------- /lib/utils/Validation.php: -------------------------------------------------------------------------------- 1 | array( 15 | 'min_range' => $min, 16 | 'max_range' => $max, 17 | ) 18 | )) !== false; 19 | } 20 | 21 | public static function blank($value) { 22 | return !preg_match('/[^\s]/', $value); 23 | } 24 | 25 | public static function boolean($value) { 26 | $boolean = array(0, 1, '0', '1', true, false); 27 | 28 | return in_array($value, $boolean, true); 29 | } 30 | 31 | public static function creditCard($value) { 32 | return preg_match('/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/', $value); 33 | } 34 | 35 | public static function comparison($value1, $operator, $value2) { 36 | switch($operator) { 37 | case '>': 38 | case 'greater': 39 | return $value1 > $value2; 40 | case '<': 41 | case 'less': 42 | return $value1 < $value2; 43 | case '>=': 44 | case 'greaterorequal': 45 | return $value1 >= $value2; 46 | case '<=': 47 | case 'lessorequal': 48 | return $value1 <= $value2; 49 | case '==': 50 | case 'equal': 51 | return $value1 == $value2; 52 | case '!=': 53 | case 'notequal': 54 | return $value1 != $value2; 55 | } 56 | 57 | return false; 58 | } 59 | 60 | public function regex($value, $regex) { 61 | return preg_match($regex, $value); 62 | } 63 | 64 | public static function date($value) { 65 | $regex = '%^(?:(?:31(/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$%'; 66 | 67 | return (bool) preg_match($regex, $value); 68 | } 69 | 70 | public static function decimal($value, $places = null) { 71 | if(is_null($places)) { 72 | $regex = '/^[+-]?[\d]+\.[\d]+([eE][+-]?[\d]+)?$/'; 73 | } 74 | else { 75 | $regex = '/^[+-]?[\d]+\.[\d]{' . $places . '}$/'; 76 | } 77 | 78 | return (bool) preg_match($regex, $value); 79 | } 80 | 81 | public static function email($value) { 82 | return filter_var($value, FILTER_VALIDATE_EMAIL) !== false; 83 | } 84 | 85 | public static function equal($value, $compare) { 86 | return $value === $compare; 87 | } 88 | 89 | public static function ip($value) { 90 | return filter_var($value, FILTER_VALIDATE_IP) !== false; 91 | } 92 | 93 | public static function minLength($value, $length) { 94 | $value_length = strlen($value); 95 | 96 | return $value_length >= $length; 97 | } 98 | 99 | public static function maxLength($value, $length) { 100 | $value_length = strlen($value); 101 | 102 | return $value_length <= $length; 103 | } 104 | 105 | public static function multiple($values, $list, $min = null, $max = null) { 106 | $values = array_filter($values); 107 | 108 | if(empty($values)) { 109 | return false; 110 | } 111 | else if(!is_null($min) && count($values) < $min) { 112 | return false; 113 | } 114 | else if(!is_null($max) && count($values) > $max) { 115 | return false; 116 | } 117 | else { 118 | foreach(array_keys($values) as $value) { 119 | if(!in_array($value, $list)) { 120 | return false; 121 | } 122 | } 123 | } 124 | 125 | return true; 126 | } 127 | 128 | public static function inList($value, $list) { 129 | return in_array($value, $list); 130 | } 131 | 132 | public static function numeric($value) { 133 | return is_numeric($value); 134 | } 135 | 136 | public static function notEmpty($value) { 137 | return (bool) preg_match('/[^\s]+/m', $value); 138 | } 139 | 140 | public static function range($value, $lower = null, $upper = null) { 141 | if(is_numeric($value)) { 142 | if(!is_null($lower) || !is_null($upper)) { 143 | $check_lower = $check_upper = true; 144 | if(!is_null($lower)) { 145 | $check_lower = $value > $lower; 146 | } 147 | if(!is_null($upper)) { 148 | $check_upper = $value < $upper; 149 | } 150 | } 151 | else { 152 | return is_finite($value); 153 | } 154 | 155 | return $check_lower && $check_upper; 156 | } 157 | 158 | return false; 159 | } 160 | 161 | public static function time($value) { 162 | $regex = '/^([01]\d|2[0-3])(:[0-5]\d){1,2}$' 163 | . '|^(0?[1-9]|1[0-2])(:[0-5]\d){1,2}\s?[AaPp]m$/'; 164 | 165 | return (bool) preg_match($regex, $value); 166 | } 167 | 168 | public static function url($value) { 169 | return filter_var($value, FILTER_VALIDATE_URL) !== false; 170 | } 171 | } -------------------------------------------------------------------------------- /ob_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/ob_logo.png -------------------------------------------------------------------------------- /ob_logo_compacto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/ob_logo_compacto.png -------------------------------------------------------------------------------- /public/css/bb.css: -------------------------------------------------------------------------------- 1 | /****** SEPARADORES DOS CAMPOS ****/ 2 | #recibo .linha div, 3 | #ficha_compensacao #colunadireita div, 4 | #ficha_compensacao #colunaprincipal .item, 5 | #ficha_compensacao #colunaprincipal .mensagens{ 6 | border-left-color:#FF0; 7 | } 8 | 9 | /****** LINHAS NO CABEÇALHO ******/ 10 | .cabecalho, .cabecalho .banco_codigo{ 11 | border-color:#009; 12 | } 13 | 14 | /****** LINHAS INFERIORES DOS CAMPOS ******/ 15 | #recibo div, 16 | #ficha_compensacao #colunaprincipal div, 17 | #ficha_compensacao #colunadireita div, 18 | #ficha_compensacao #sacado{ 19 | border-bottom-color:#009; 20 | } 21 | 22 | /***** CORES DOS TEXTOS **********/ 23 | #ficha_compensacao{ 24 | color:#000; 25 | } 26 | 27 | /***** CORES DOS LABELS **********/ 28 | #ficha_compensacao label, #recibo label{ 29 | color:#009; 30 | } 31 | 32 | /***** CORES DOS TEXTOS DO CABEÇALHO**********/ 33 | .cabecalho{ 34 | color:#009; 35 | } -------------------------------------------------------------------------------- /public/css/blueprint/ie.css: -------------------------------------------------------------------------------- 1 | /* ----------------------------------------------------------------------- 2 | 3 | 4 | Blueprint CSS Framework 0.9 5 | http://blueprintcss.org 6 | 7 | * Copyright (c) 2007-Present. See LICENSE for more info. 8 | * See README for instructions on how to use Blueprint. 9 | * For credits and origins, see AUTHORS. 10 | * This is a compressed file. See the sources in the 'src' directory. 11 | 12 | ----------------------------------------------------------------------- */ 13 | 14 | /* ie.css */ 15 | body {text-align:center;} 16 | .container {text-align:left;} 17 | * html .column, * html div.span-1, * html div.span-2, * html div.span-3, * html div.span-4, * html div.span-5, * html div.span-6, * html div.span-7, * html div.span-8, * html div.span-9, * html div.span-10, * html div.span-11, * html div.span-12, * html div.span-13, * html div.span-14, * html div.span-15, * html div.span-16, * html div.span-17, * html div.span-18, * html div.span-19, * html div.span-20, * html div.span-21, * html div.span-22, * html div.span-23, * html div.span-24 {display:inline;overflow-x:hidden;} 18 | * html legend {margin:0px -8px 16px 0;padding:0;} 19 | sup {vertical-align:text-top;} 20 | sub {vertical-align:text-bottom;} 21 | html>body p code {*white-space:normal;} 22 | hr {margin:-8px auto 11px;} 23 | img {-ms-interpolation-mode:bicubic;} 24 | .clearfix, .container {display:inline-block;} 25 | * html .clearfix, * html .container {height:1%;} 26 | fieldset {padding-top:0;} 27 | textarea {overflow:auto;} 28 | input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;} 29 | input.text:focus, input.title:focus {border-color:#666;} 30 | input.text, input.title, textarea, select {margin:0.5em 0;} 31 | input.checkbox, input.radio {position:relative;top:.25em;} 32 | form.inline div, form.inline p {vertical-align:middle;} 33 | form.inline label {position:relative;top:-0.25em;} 34 | form.inline input.checkbox, form.inline input.radio, form.inline input.button, form.inline button {margin:0.5em 0;} 35 | button, input.button {position:relative;top:0.25em;} -------------------------------------------------------------------------------- /public/css/blueprint/print.css: -------------------------------------------------------------------------------- 1 | /* ----------------------------------------------------------------------- 2 | 3 | 4 | Blueprint CSS Framework 0.9 5 | http://blueprintcss.org 6 | 7 | * Copyright (c) 2007-Present. See LICENSE for more info. 8 | * See README for instructions on how to use Blueprint. 9 | * For credits and origins, see AUTHORS. 10 | * This is a compressed file. See the sources in the 'src' directory. 11 | 12 | ----------------------------------------------------------------------- */ 13 | 14 | /* print.css */ 15 | body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;} 16 | .container {background:none;} 17 | hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;} 18 | hr.space {background:#fff;color:#fff;visibility:hidden;} 19 | h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;} 20 | code {font:.9em "Courier New", Monaco, Courier, monospace;} 21 | a img {border:none;} 22 | p img.top {margin-top:0;} 23 | blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;} 24 | .small {font-size:.9em;} 25 | .large {font-size:1.1em;} 26 | .quiet {color:#999;} 27 | .hide {display:none;} 28 | a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;} 29 | a:link:after, a:visited:after {content:" (" attr(href) ")";font-size:90%;} -------------------------------------------------------------------------------- /public/css/blueprint/screen.css: -------------------------------------------------------------------------------- 1 | /* ----------------------------------------------------------------------- 2 | 3 | 4 | Blueprint CSS Framework 0.9 5 | http://blueprintcss.org 6 | 7 | * Copyright (c) 2007-Present. See LICENSE for more info. 8 | * See README for instructions on how to use Blueprint. 9 | * For credits and origins, see AUTHORS. 10 | * This is a compressed file. See the sources in the 'src' directory. 11 | 12 | ----------------------------------------------------------------------- */ 13 | 14 | /* reset.css */ 15 | html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;} 16 | body {line-height:1.5;} 17 | table {border-collapse:separate;border-spacing:0;} 18 | caption, th, td {text-align:left;font-weight:normal;} 19 | table, td, th {vertical-align:middle;} 20 | blockquote:before, blockquote:after, q:before, q:after {content:"";} 21 | blockquote, q {quotes:"" "";} 22 | a img {border:none;} 23 | 24 | /* typography.css */ 25 | html {font-size:100.01%;} 26 | body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;} 27 | h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;} 28 | h1 {font-size:2em;line-height:1;margin-bottom:0.5em;} 29 | h2 {font-size:1.6em;margin-bottom:0.75em;} 30 | h3 {font-size:1.4em;line-height:1;margin-bottom:1em;} 31 | h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;} 32 | h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;} 33 | h6 {font-size:1em;font-weight:bold;} 34 | h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;} 35 | p {margin:0 0 1.5em;} 36 | p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;} 37 | p img.right {float:right;margin:1.5em 0 1.5em 1.5em;} 38 | a:focus, a:hover {color:#000;} 39 | a {color:#009;text-decoration:underline;} 40 | blockquote {margin:1.5em;color:#666;font-style:italic;} 41 | strong {font-weight:bold;} 42 | em, dfn {font-style:italic;} 43 | dfn {font-weight:bold;} 44 | sup, sub {line-height:0;} 45 | abbr, acronym {border-bottom:1px dotted #666;} 46 | address {margin:0 0 1.5em;font-style:italic;} 47 | del {color:#666;} 48 | pre {margin:1.5em 0;white-space:pre;} 49 | pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;} 50 | li ul, li ol {margin:0;} 51 | ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;} 52 | ul {list-style-type:disc;} 53 | ol {list-style-type:decimal;} 54 | dl {margin:0 0 1.5em 0;} 55 | dl dt {font-weight:bold;} 56 | dd {margin-left:1.5em;} 57 | table {margin-bottom:1.4em;width:100%;} 58 | th {font-weight:bold;} 59 | thead th {background:#c3d9ff;} 60 | th, td, caption {padding:4px 10px 4px 5px;} 61 | tfoot {font-style:italic;} 62 | caption {background:#eee;} 63 | .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;} 64 | .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;} 65 | .hide {display:none;} 66 | .quiet {color:#666;} 67 | .loud {color:#000;} 68 | .highlight {background:#ff0;} 69 | .added {background:#060;color:#fff;} 70 | .removed {background:#900;color:#fff;} 71 | .first {margin-left:0;padding-left:0;} 72 | .last {margin-right:0;padding-right:0;} 73 | .top {margin-top:0;padding-top:0;} 74 | .bottom {margin-bottom:0;padding-bottom:0;} 75 | 76 | /* grid.css */ 77 | .container {width:950px;margin:0 auto;} 78 | .showgrid {background:url(src/grid.png);} 79 | .column, div.span-1, div.span-2, div.span-3, div.span-4, div.span-5, div.span-6, div.span-7, div.span-8, div.span-9, div.span-10, div.span-11, div.span-12, div.span-13, div.span-14, div.span-15, div.span-16, div.span-17, div.span-18, div.span-19, div.span-20, div.span-21, div.span-22, div.span-23, div.span-24 {float:left;margin-right:10px;} 80 | .last, div.last {margin-right:0;} 81 | .span-1 {width:30px;} 82 | .span-2 {width:70px;} 83 | .span-3 {width:110px;} 84 | .span-4 {width:150px;} 85 | .span-5 {width:190px;} 86 | .span-6 {width:230px;} 87 | .span-7 {width:270px;} 88 | .span-8 {width:310px;} 89 | .span-9 {width:350px;} 90 | .span-10 {width:390px;} 91 | .span-11 {width:430px;} 92 | .span-12 {width:470px;} 93 | .span-13 {width:510px;} 94 | .span-14 {width:550px;} 95 | .span-15 {width:590px;} 96 | .span-16 {width:630px;} 97 | .span-17 {width:670px;} 98 | .span-18 {width:710px;} 99 | .span-19 {width:750px;} 100 | .span-20 {width:790px;} 101 | .span-21 {width:830px;} 102 | .span-22 {width:870px;} 103 | .span-23 {width:910px;} 104 | .span-24, div.span-24 {width:950px;margin-right:0;} 105 | input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {border-left-width:1px!important;border-right-width:1px!important;padding-left:5px!important;padding-right:5px!important;} 106 | input.span-1, textarea.span-1 {width:18px!important;} 107 | input.span-2, textarea.span-2 {width:58px!important;} 108 | input.span-3, textarea.span-3 {width:98px!important;} 109 | input.span-4, textarea.span-4 {width:138px!important;} 110 | input.span-5, textarea.span-5 {width:178px!important;} 111 | input.span-6, textarea.span-6 {width:218px!important;} 112 | input.span-7, textarea.span-7 {width:258px!important;} 113 | input.span-8, textarea.span-8 {width:298px!important;} 114 | input.span-9, textarea.span-9 {width:338px!important;} 115 | input.span-10, textarea.span-10 {width:378px!important;} 116 | input.span-11, textarea.span-11 {width:418px!important;} 117 | input.span-12, textarea.span-12 {width:458px!important;} 118 | input.span-13, textarea.span-13 {width:498px!important;} 119 | input.span-14, textarea.span-14 {width:538px!important;} 120 | input.span-15, textarea.span-15 {width:578px!important;} 121 | input.span-16, textarea.span-16 {width:618px!important;} 122 | input.span-17, textarea.span-17 {width:658px!important;} 123 | input.span-18, textarea.span-18 {width:698px!important;} 124 | input.span-19, textarea.span-19 {width:738px!important;} 125 | input.span-20, textarea.span-20 {width:778px!important;} 126 | input.span-21, textarea.span-21 {width:818px!important;} 127 | input.span-22, textarea.span-22 {width:858px!important;} 128 | input.span-23, textarea.span-23 {width:898px!important;} 129 | input.span-24, textarea.span-24 {width:938px!important;} 130 | .append-1 {padding-right:40px;} 131 | .append-2 {padding-right:80px;} 132 | .append-3 {padding-right:120px;} 133 | .append-4 {padding-right:160px;} 134 | .append-5 {padding-right:200px;} 135 | .append-6 {padding-right:240px;} 136 | .append-7 {padding-right:280px;} 137 | .append-8 {padding-right:320px;} 138 | .append-9 {padding-right:360px;} 139 | .append-10 {padding-right:400px;} 140 | .append-11 {padding-right:440px;} 141 | .append-12 {padding-right:480px;} 142 | .append-13 {padding-right:520px;} 143 | .append-14 {padding-right:560px;} 144 | .append-15 {padding-right:600px;} 145 | .append-16 {padding-right:640px;} 146 | .append-17 {padding-right:680px;} 147 | .append-18 {padding-right:720px;} 148 | .append-19 {padding-right:760px;} 149 | .append-20 {padding-right:800px;} 150 | .append-21 {padding-right:840px;} 151 | .append-22 {padding-right:880px;} 152 | .append-23 {padding-right:920px;} 153 | .prepend-1 {padding-left:40px;} 154 | .prepend-2 {padding-left:80px;} 155 | .prepend-3 {padding-left:120px;} 156 | .prepend-4 {padding-left:160px;} 157 | .prepend-5 {padding-left:200px;} 158 | .prepend-6 {padding-left:240px;} 159 | .prepend-7 {padding-left:280px;} 160 | .prepend-8 {padding-left:320px;} 161 | .prepend-9 {padding-left:360px;} 162 | .prepend-10 {padding-left:400px;} 163 | .prepend-11 {padding-left:440px;} 164 | .prepend-12 {padding-left:480px;} 165 | .prepend-13 {padding-left:520px;} 166 | .prepend-14 {padding-left:560px;} 167 | .prepend-15 {padding-left:600px;} 168 | .prepend-16 {padding-left:640px;} 169 | .prepend-17 {padding-left:680px;} 170 | .prepend-18 {padding-left:720px;} 171 | .prepend-19 {padding-left:760px;} 172 | .prepend-20 {padding-left:800px;} 173 | .prepend-21 {padding-left:840px;} 174 | .prepend-22 {padding-left:880px;} 175 | .prepend-23 {padding-left:920px;} 176 | div.border {padding-right:4px;margin-right:5px;border-right:1px solid #eee;} 177 | div.colborder {padding-right:24px;margin-right:25px;border-right:1px solid #eee;} 178 | .pull-1 {margin-left:-40px;} 179 | .pull-2 {margin-left:-80px;} 180 | .pull-3 {margin-left:-120px;} 181 | .pull-4 {margin-left:-160px;} 182 | .pull-5 {margin-left:-200px;} 183 | .pull-6 {margin-left:-240px;} 184 | .pull-7 {margin-left:-280px;} 185 | .pull-8 {margin-left:-320px;} 186 | .pull-9 {margin-left:-360px;} 187 | .pull-10 {margin-left:-400px;} 188 | .pull-11 {margin-left:-440px;} 189 | .pull-12 {margin-left:-480px;} 190 | .pull-13 {margin-left:-520px;} 191 | .pull-14 {margin-left:-560px;} 192 | .pull-15 {margin-left:-600px;} 193 | .pull-16 {margin-left:-640px;} 194 | .pull-17 {margin-left:-680px;} 195 | .pull-18 {margin-left:-720px;} 196 | .pull-19 {margin-left:-760px;} 197 | .pull-20 {margin-left:-800px;} 198 | .pull-21 {margin-left:-840px;} 199 | .pull-22 {margin-left:-880px;} 200 | .pull-23 {margin-left:-920px;} 201 | .pull-24 {margin-left:-960px;} 202 | .pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float:left;position:relative;} 203 | .push-1 {margin:0 -40px 1.5em 40px;} 204 | .push-2 {margin:0 -80px 1.5em 80px;} 205 | .push-3 {margin:0 -120px 1.5em 120px;} 206 | .push-4 {margin:0 -160px 1.5em 160px;} 207 | .push-5 {margin:0 -200px 1.5em 200px;} 208 | .push-6 {margin:0 -240px 1.5em 240px;} 209 | .push-7 {margin:0 -280px 1.5em 280px;} 210 | .push-8 {margin:0 -320px 1.5em 320px;} 211 | .push-9 {margin:0 -360px 1.5em 360px;} 212 | .push-10 {margin:0 -400px 1.5em 400px;} 213 | .push-11 {margin:0 -440px 1.5em 440px;} 214 | .push-12 {margin:0 -480px 1.5em 480px;} 215 | .push-13 {margin:0 -520px 1.5em 520px;} 216 | .push-14 {margin:0 -560px 1.5em 560px;} 217 | .push-15 {margin:0 -600px 1.5em 600px;} 218 | .push-16 {margin:0 -640px 1.5em 640px;} 219 | .push-17 {margin:0 -680px 1.5em 680px;} 220 | .push-18 {margin:0 -720px 1.5em 720px;} 221 | .push-19 {margin:0 -760px 1.5em 760px;} 222 | .push-20 {margin:0 -800px 1.5em 800px;} 223 | .push-21 {margin:0 -840px 1.5em 840px;} 224 | .push-22 {margin:0 -880px 1.5em 880px;} 225 | .push-23 {margin:0 -920px 1.5em 920px;} 226 | .push-24 {margin:0 -960px 1.5em 960px;} 227 | .push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float:right;position:relative;} 228 | .prepend-top {margin-top:1.5em;} 229 | .append-bottom {margin-bottom:1.5em;} 230 | .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;} 231 | hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;} 232 | hr.space {background:#fff;color:#fff;visibility:hidden;} 233 | .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;} 234 | .clearfix, .container {display:block;} 235 | .clear {clear:both;} -------------------------------------------------------------------------------- /public/css/caixa.css: -------------------------------------------------------------------------------- 1 | /****** SEPARADORES DOS CAMPOS ****/ 2 | #recibo .linha div, 3 | #ficha_compensacao #colunadireita div, 4 | #ficha_compensacao #colunaprincipal .item, 5 | #ficha_compensacao #colunaprincipal .mensagens{ 6 | border-left-color:rgb(231,130,39); 7 | } 8 | 9 | /****** LINHAS NO CABEÇALHO ******/ 10 | .cabecalho, .cabecalho .banco_codigo{ 11 | border-color:rgb(0,94,151); 12 | } 13 | 14 | /****** LINHAS INFERIORES DOS CAMPOS ******/ 15 | #recibo div, 16 | #ficha_compensacao #colunaprincipal div, 17 | #ficha_compensacao #colunadireita div, 18 | #ficha_compensacao #sacado{ 19 | border-bottom-color:rgb(0,94,151); 20 | } 21 | 22 | /***** CORES DOS TEXTOS **********/ 23 | #ficha_compensacao{ 24 | color:#000; 25 | } 26 | 27 | /***** CORES DOS LABELS **********/ 28 | #ficha_compensacao label, #recibo label{ 29 | color:rgb(0,94,151); 30 | } 31 | 32 | /***** CORES DOS TEXTOS DO CABEÇALHO**********/ 33 | .cabecalho{ 34 | color:rgb(0,94,151); 35 | } -------------------------------------------------------------------------------- /public/css/default.css: -------------------------------------------------------------------------------- 1 | div#container{ 2 | width:700px; 3 | font-family:arial; 4 | font-size:12px; 5 | } 6 | div#container div, div#container{ 7 | float:left; 8 | } 9 | div#ficha_compensacao{ 10 | margin-top:20px; 11 | } 12 | #ficha_compensacao #colunaprincipal div, 13 | #ficha_compensacao #colunadireita div, 14 | #recibo .linha div{ 15 | height:27px; 16 | margin:0; 17 | margin-bottom:2px; 18 | float:left; 19 | border-bottom: 1px solid #C0C0C0; 20 | } 21 | #ficha_compensacao #colunaprincipal div .item{ 22 | border-bottom:0; 23 | } 24 | #ficha_compensacao #colunaprincipal .item, 25 | #ficha_compensacao #colunaprincipal .mensagens, 26 | #ficha_compensacao #colunadireita div, 27 | #recibo .item 28 | { 29 | border-left:5px solid #C0C0C0; 30 | padding-left:5px; 31 | padding-right:0px; 32 | } 33 | /****************************************************** 34 | Cabeçalho 35 | *******************************************************/ 36 | .cabecalho{ 37 | border-bottom: 3px solid #000000; 38 | width:690px; 39 | margin-bottom:5px; 40 | } 41 | .cabecalho div{float:left;height:25px;margin-top:25px;border:0} 42 | .cabecalho .banco_logo{width:160px;height:40px;margin-top:10px;} 43 | .cabecalho .banco_codigo{width:70px;font-size:20px;font-weight:bold;text-align:center;border:0;border-left:3px solid #000000;border-right:3px solid #000000;} 44 | .cabecalho .linha_digitavel{width:450px;font-size:15px;font-weight:bold;text-align:right} 45 | 46 | #ficha_compensacao #colunaprincipal{ 47 | border:0; 48 | } 49 | #ficha_compensacao #colunaprincipal, 50 | #ficha_compensacao .local_pagamento,#ficha_compensacao .mensagens, 51 | #ficha_compensacao .cedente, #ficha_compensacao .linha{ 52 | width:480px; 53 | } 54 | #ficha_compensacao label, #recibo label{ 55 | font-size:9px; 56 | display:block; 57 | } 58 | #ficha_compensacao .local_pagamento,#ficha_compensacao .mensagens, 59 | #ficha_compensacao .cedente, #ficha_compensacao .linha{ 60 | clear:left; 61 | } 62 | 63 | /* Mensagens */ 64 | #ficha_compensacao #colunaprincipal .mensagens{height:147px;} 65 | 66 | /* Linha 3 */ 67 | #ficha_compensacao #colunaprincipal .data_doc{width:100px;} 68 | #ficha_compensacao #colunaprincipal .num_doc{width:120px;} 69 | #ficha_compensacao #colunaprincipal .espec_doc{width:70px;} 70 | #ficha_compensacao #colunaprincipal .aceite{width:40px;} 71 | #ficha_compensacao #colunaprincipal .dt_proc{width:90px;} 72 | 73 | /* Linha 4 */ 74 | #ficha_compensacao #colunaprincipal .uso_banco{width:100px;} 75 | #ficha_compensacao #colunaprincipal .carteira{width:90px;} 76 | #ficha_compensacao #colunaprincipal .moeda{width:40px;} 77 | #ficha_compensacao #colunaprincipal .qtd{width:55px;} 78 | #ficha_compensacao #colunaprincipal .valor{width:130px;} 79 | 80 | /* Coluna lado direito */ 81 | #ficha_compensacao #colunadireita{width:200px;} 82 | #ficha_compensacao #colunadireita div{display:block;width:200px} 83 | 84 | 85 | /*Sacado*/ 86 | #ficha_compensacao #sacado, #ficha_compensacao #codigo_barras{ 87 | clear:both; 88 | width:680px; 89 | height:70px; 90 | border-left:5px solid #fff; 91 | padding-left:5px; 92 | } 93 | 94 | #ficha_compensacao #sacado{ 95 | border-bottom:1px solid #c0c0c0; 96 | } 97 | #ficha_compensacao #codigo_barras{ 98 | 99 | } 100 | 101 | /*Recibo*/ 102 | #recibo div{float:left} 103 | /*Linha1*/ 104 | #recibo .linha .cedente{width:270px;} 105 | #recibo .linha .agencia{width:130px;} 106 | #recibo .linha .moeda{width:50px;} 107 | #recibo .linha .qtd{width:30px;} 108 | #recibo .linha .nosso_numero{width:160px;} 109 | /*Linha2*/ 110 | #recibo .linha .num_doc{width:150px;} 111 | #recibo .linha .cpf_cnpj{width:150px;} 112 | #recibo .linha .vencimento{width:150px;} 113 | #recibo .linha .valor{width:200px;} 114 | /*Linha3*/ 115 | #recibo .linha .descontos{width:110px;} 116 | #recibo .linha .outras_deducoes{width:110px;} 117 | #recibo .linha .multa{width:110px;} 118 | #recibo .linha .outros_acrescimos{width:110px;} 119 | /*Linha4*/ 120 | #recibo .linha .sacado{width:680px;} 121 | 122 | #recibo .linha .demonstrativo{width:480px;border-bottom:0;height:100px;} 123 | #recibo .linha .autenticacao_mecanica{width:200px;border-bottom:0} 124 | 125 | 126 | .linha_corte{ 127 | border-bottom:1px dotted #000; 128 | height:10px; 129 | width:690px; 130 | } 131 | .linha_corte label, .autenticacao_mecanica label{ 132 | text-align:right; 133 | } 134 | -------------------------------------------------------------------------------- /public/images/banco_da_amazonia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banco_da_amazonia.png -------------------------------------------------------------------------------- /public/images/banco_fiat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banco_fiat.png -------------------------------------------------------------------------------- /public/images/banco_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banco_pan.png -------------------------------------------------------------------------------- /public/images/banco_pine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banco_pine.png -------------------------------------------------------------------------------- /public/images/bancoob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bancoob.png -------------------------------------------------------------------------------- /public/images/banespa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banespa.png -------------------------------------------------------------------------------- /public/images/banestes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banestes.png -------------------------------------------------------------------------------- /public/images/banrisul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/banrisul.png -------------------------------------------------------------------------------- /public/images/bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bb.png -------------------------------------------------------------------------------- /public/images/besc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/besc.png -------------------------------------------------------------------------------- /public/images/bgn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bgn.png -------------------------------------------------------------------------------- /public/images/bmc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bmc.png -------------------------------------------------------------------------------- /public/images/bmg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bmg.png -------------------------------------------------------------------------------- /public/images/bnb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bnb.png -------------------------------------------------------------------------------- /public/images/bradesco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bradesco.png -------------------------------------------------------------------------------- /public/images/brb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/brb.png -------------------------------------------------------------------------------- /public/images/bva.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/bva.png -------------------------------------------------------------------------------- /public/images/caixa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/caixa.png -------------------------------------------------------------------------------- /public/images/hsbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/hsbc.png -------------------------------------------------------------------------------- /public/images/itau.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/itau.png -------------------------------------------------------------------------------- /public/images/nossa_caixa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/nossa_caixa.png -------------------------------------------------------------------------------- /public/images/paranabanco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/paranabanco.png -------------------------------------------------------------------------------- /public/images/real.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/real.png -------------------------------------------------------------------------------- /public/images/safra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/safra.png -------------------------------------------------------------------------------- /public/images/santander.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/santander.png -------------------------------------------------------------------------------- /public/images/sicoob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/sicoob.png -------------------------------------------------------------------------------- /public/images/sudameris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/sudameris.png -------------------------------------------------------------------------------- /public/images/unibanco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klawdyo/PHP-Object-Boleto/f7f5628387a4bb10f9c8eea1f51f0ac2ff3852c1/public/images/unibanco.png -------------------------------------------------------------------------------- /templates/README.textile: -------------------------------------------------------------------------------- 1 | h1. Introdução 2 | 3 | ObjectBoleto trabalha com uma camada de visualização que se divide em 2 partes: 4 | Templates e Blocks 5 | 6 | h2. Templates 7 | 8 | Os Templates são o que podemos chamar de layouts. Você, usuário, poderá criar quantos templates quiser, pois cada cliente pode exigir um modelo diferente. 9 | Por padrão, ObjectBoleto vem com os templates default, html5 e carne. 10 | 11 | * "default" é um modelo em tabelas, com estilos inline, importado e adaptado do boletophp. 12 | * "html5" é totalmente tabless. Ele acompanha um recibo de cliente, e uma ficha de compensação. É o padrão geralmente utilizado. "html5" é personalisado por arquivos .css externos para cada banco. 13 | * "carne" também não usa tabelas, e seus estilos são oriundos de um arquivo css externo. A diferença para o "html" é que ele é no formato de um carnê pagamento, onde, além da ficha de compensação, à sua esquerda tem um recibo para o cliente. 14 | 15 | Os templates padrão do ObjectBoleto tem por objetivo facilitar a personalização dos boletos, com imagens, textos e etc. 16 | 17 | h2. Blocks 18 | 19 | Os blocks são códigos html que geralmente são usados em vários locais, como a ficha de compensação. Nesse sentido, o ObjectBoleto dispõe de 3 blocks padrão: 20 | 21 | * "ficha_compensacao" concentra o boleto bancário propriamente dito, inclusive com o código de barras; 22 | * "recibo" contém a parte superior de uma folha A4, acima da ficha de compensação; 23 | * "canhoto" é o comprovante que fica à esquerda das fichas de compensação em um carnê. 24 | 25 | O objetivo dos blocks é minimizar a repetição de código, concentrando tudo em um só lugar. 26 | 27 | h3. Exemplo 28 | 29 | A ficha de compensação é utilizada tanto no template "html", como no "carne". Você, usuário, também poderia criar seu próprio template, utilizando os blocks prontos do ObjectBoleto. 30 | Supondo que eu quero um template com uma imagem grande na parte de cima, com propaganda do produto do seu cliente, e um boleto bancário na parte de baixo. 31 | Crio o arquivo "novotemplate.htm.php". Todos os templates e blocks devem ter a extensão ".htm.php". Os templates ficam no diretório "/templates", e os blocks no diretório "/templates/blocks". 32 | 33 | pre. 34 | 35 | Meu template 36 | 37 | 38 | 39 | Template->getBlock('novotemplate'); 42 | ?> 43 | 44 | 45 | 46 | Pronto. Está criado o seu template personalizado. 47 | 48 | Agora, para usá-lo, é só indicar no momento da configuração do ObjectBoleto. 49 | 50 | pre. $ob = new OB(); 51 | $ob->Template->setTemplate('novotemplate'); 52 | 53 | -------------------------------------------------------------------------------- /templates/blocks/ficha_compensacao.htm.php: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |
8 | 9 |
Banco->Codigo, 0, 0, true)?>
10 |
linhaDigitavel();?>
11 |
12 | 13 |
14 | 15 | 16 |
17 | 18 | Configuracao->LocalPagamento; ?> 19 |
20 | 21 | 22 | 23 |
24 | 25 | Vendedor->RazaoSocial; ?> 26 |
27 | 28 | 29 |
30 | 31 |
32 | 33 | Boleto->DataEmissao; ?> 34 |
35 | 36 |
37 | 38 | Boleto->NumDocumento; ?> 39 |
40 | 41 |
42 | 43 | 44 |
45 | 46 |
47 | 48 | 49 |
50 | 51 |
52 | 53 | Boleto->DataEmissao; ?> 54 |
55 |
56 | 57 | 58 |
59 | 60 |
61 | 62 | 63 |
64 | 65 |
66 | 67 | Vendedor->Carteira; ?> 68 |
69 | 70 |
71 | 72 | R$ 73 |
74 | 75 |
76 | 77 | Boleto->Quantidade; ?> 78 |
79 | 80 |
81 | 82 | Boleto->ValorUnitario/100,2,',','.'); ?> 83 |
84 |
85 | 86 | 87 |
88 | 89 | Configuracao->getInstrucoes(); 91 | echo implode('
', $instrucoes); 92 | ?> 93 |
94 | 95 |
96 | 97 |
98 |
99 | 100 | Boleto->VencimentoContraApresentacao == false){ 102 | echo $OB->Boleto->Vencimento; 103 | } 104 | else{ 105 | echo 'Contra-Apresentacao'; 106 | } 107 | ?> 108 |
109 |
110 | 111 | Banco->agenciaCodigoCedente(); ?> 112 |
113 |
114 | 115 | Boleto->NossoNumero; ?> 116 |
117 |
118 | 119 | Boleto->Valor) ? number_format($OB->Boleto->Valor/100, 2, ',', '.') : ''; ?> 120 |
121 |
122 | 123 | Boleto->Desconto ? number_format($OB->Boleto->Desconto, 2, ',', '.') : ''; ?> 124 |
125 |
126 | 127 | Boleto->OutrosAbatimentos ? number_format($OB->Boleto->OutrosAbatimentos, 2, ',', '.') : ''; ?> 128 |
129 |
130 | 131 | Boleto->Multa ? number_format($OB->Boleto->Multa, 2, ',', '.') : ''; ?> 132 |
133 |
134 | 135 | Boleto->OutrosAcrescimos ? number_format($OB->Boleto->OutrosAcrescimos, 2, ',', '.') : ''; ?> 136 |
137 |
138 | 139 |
140 |
141 | 142 | 143 |
144 |
145 | 146 | Cliente->Nome 148 | . '
' 149 | . 'CPF: ' . $OB->Cliente->Cpf 150 | . '
' 151 | . $OB->Cliente->Endereco 152 | ; 153 | ?> 154 |
155 |
156 | 157 | 158 |
159 |
160 | 161 | geraCodigo()); 163 | ?> 164 |
165 |
166 | Ficha de Compensação 167 | 168 |
169 |
170 | 171 | 172 |
173 | 174 | 175 |
176 | -------------------------------------------------------------------------------- /templates/blocks/recibo.htm.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
Banco->Codigo, 0, 0, true)?>
6 |
linhaDigitavel();?>
7 |
8 | 9 |
10 | 11 |
12 | 13 | Vendedor->RazaoSocial; ?> 14 |
15 | 16 |
17 | 18 | Banco->agenciaCodigoCedente(); ?> 19 |
20 | 21 |
22 | 23 | R$ 24 |
25 | 26 |
27 | 28 | Boleto->Quantidade;?> 29 |
30 | 31 |
32 | 33 | Boleto->NossoNumero; ?> 34 |
35 |
36 | 37 | 38 |
39 | 40 |
41 | 42 | Boleto->NumDocumento;?> 43 |
44 | 45 |
46 | 47 | Vendedor->Cpf)){ 49 | echo $OB->Vendedor->Cpf; 50 | } 51 | elseif(isset($OB->Vendedor->Cnpj)){ 52 | echo $OB->Vendedor->Cnpj; 53 | } 54 | 55 | ?> 56 |
57 | 58 |
59 | 60 | Boleto->VencimentoContraApresentacao == false){ 62 | echo $OB->Boleto->Vencimento; 63 | } 64 | else{ 65 | echo 'Contra-Apresentacao'; 66 | } 67 | ?> 68 |
69 | 70 |
71 | 72 | Boleto->Valor/100, 2, ',', '.');?> 73 |
74 |
75 | 76 | 77 |
78 | 79 |
80 | 81 |
82 | 83 |
84 | 85 |
86 | 87 |
88 | 89 |
90 | 91 |
92 | 93 |
94 | 95 |
96 | 97 |
98 |
99 | 100 | 101 |
102 | 103 |
104 | 105 | Cliente->Nome;?> 106 |
107 |
108 | 109 | 110 |
111 | 112 |
113 | 114 | Detalhes da compra
115 | Detalhes da compra
116 | Detalhes da compra
117 |
118 | 119 |
120 | 121 |
122 |
123 | 124 | 125 |
126 |
-------------------------------------------------------------------------------- /templates/html5.htm.php: -------------------------------------------------------------------------------- 1 | Template->addStyle('default'); 4 | 5 | #Carregando o estilo referente ao banco, caso ele tenha 6 | if(!empty($OB->Banco->Css)) 7 | $OB->Template->addStyle($OB->Banco->Css); 8 | 9 | ?> 10 | 11 | 12 | 13 | <?php echo $OB->Template->Title;?> 14 | Template->getStyles();?> 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 |
23 | 24 |
25 | 26 | 27 | Template->getBlock('recibo'); 29 | ?> 30 | 31 | 32 | Template->getBlock('ficha_compensacao', array('viaparam'=>'viaparam')); 34 | ?> 35 |
36 | 37 | --------------------------------------------------------------------------------