Skip to content

Exemplo Multibanco

Rogerio Muniz edited this page Mar 1, 2018 · 13 revisions

Meu sistema alimenta um conjunto de campos independente do banco, aqui um exemplo de código, não é tudo que da para entender porque tem varias dependências que não da para colocar tudo aqui, mas as ideias e a logica ficam evidentes.

`public function geraArquivo($param)
{
        TTransaction::open(TSession::getValue('conectionfile')); // abre uma transação no banco
        TTransaction::setLogger( new TLoggerHTML('arquivo.html') ); // seta o log para arquivo.html

        $codigo_banco = $param['bancos_codigo'];
        $cc_conta = new Cc_conta(array('cc_contas_codigo'=>$param['cc_contas_codigo'])); // cria um objeto conta
        $carteira = new Carteira(array('carteiras_codigo'=>$param['carteiras_codigo'])); // cria um objeto carteira
        $empresa  = new Empresa(array('empresas_codigo'=>TSession::getValue('empresas_codigo')));// cria um objeto emrpesa
        $conta = explode('-',$cc_conta->cc_contas_conta); // divide a conta em conta e conta_dv pelo ifen.
        $agencia = explode("-",$cc_conta->cc_contas_agencia); // divida a agencia
        $agencia = count($agencia)>0?$agencia[0]:$this->cc_contas->cc_contas_agencia;// se a agencia tem ifen pega a primeira parte.
        $agencia_dv = count($agencia)>0?$agencia[1]:0;
        $cod_cedente = explode('-',$cc_conta->cc_contas_cod_cliente); // pega o codigo do cedente do cadastro de contas
        $boletos_arquivo = new Boletos_arquivo($param); //cria um objeto para gravar os dados do arquivo
        $boletos_arquivo->boletos_arquivos_datahora = date("ymdhis"); 
        $boletos_arquivo->situacao = "NOR";
        $lastInsert = $boletos_arquivo->insert(); // insere no banco os dados do arquivo e recupera o numero do ultimo
        header("Content-Disposition: attachment;filename=REM".str_pad($boletos_arquivo->boletos_arquivos_codigo,5,'0',STR_PAD_LEFT).".rem;"); // seta o header para download do arquivo rem
        $layout  = $carteira->carteira_layout_remessa; // pega o layout que sera usado no cadastro de carteiras

        $arquivo = new Remessa($cc_conta->bancos_codigo,$layout,array(     // instancia uma remessa passando o banco e o layout carregados do cadastro de conta e da carteira
            'nome_empresa' =>$empresa->empresas_razaosocial, // seu nome de empresa
            'tipo_inscricao'  => 2, // seu cnpj completo
            'numero_inscricao' => $empresa->empresas_cnpjcpf, // seu cnpj completo
            'agencia'       => $agencia, 
            'agencia_dv'    => $agencia_dv, 
            'conta'         => $conta[0], // número da conta
            'conta_dv'     => $conta[1], // digito da conta
            'codigo_beneficiario'     => $cod_cedente[0], // digito do cedente
            'numero_sequencial_arquivo'     => $boletos_arquivo->boletos_arquivos_codigo, // digito da conta
        ));

        $lote  = $arquivo->addLote(array('tipo_servico'=> $carteira->carteiras_registro));
        $especie = new CnabPHP\Especie($cc_conta->bancos_codigo);
        // instancia um repositório 
        $repository = new TRepository('Boleto');// cria um objeto que consultara o banco procurando os boletos não enviados
        $criteria = new TCriteria(); // cria um criterio
        $criteria->add(new TFilter(new TTableAndField('boletos','situacao'),'=','NOR'));// adiciona um filtro para boletos não excluidos
        $criteria->add(new TFilter('boletos_arquivos_codigo','is',NULL)); // adiciona um filtro para os boletos não enviados
        $criteria->add(new TFilter('bancos_codigo','=',$param['bancos_codigo'])); // adiciona um filtro para os boletos do banco passado como parametro
        $criteria->setProperty('order', 'boletos_codigo'); // seta uma ordem
        $join = new TJoin("cc_contas",new TTableAndField("cc_contas","cc_contas_codigo"),"=",new TTableAndField("boletos","cc_contas_codigo")); // faz join do cadastro de contas
        $criteria->setProperty('join',$join); // adiciona join ao criterio
        // carrega todos os objetos
        $collection = $repository->load($criteria); // carrega todos os boletos
        
        foreach ($collection as $object) // percorrerá todos os boletos e adiciona no arquivo
        {
            $locatario = $object->get_locatario(); // meu sistema é de imobiliária então locatário é pagador
            $imovel = $object->get_locacao()->imovel; 
            
            $locacao = new Locacao(array("locacoes_codigo" => $this->locacoes_codigo));
            $aditamento = $locacao->aditamento;
            
            $sacado_tipo = $locatario->locatarios_pfpj=='F'?'1':'2';
            $object->boletos_arquivos_codigo = $boletos_arquivo->boletos_arquivos_codigo;
            $object->update(); 
            $lote->inserirDetalhe(array(
                'codigo_ocorrencia' => $object->boletos_acoes_codigo, // 1 = Entrada de título, futuramente poderemos ter uma constante
                'nosso_numero'      => $object->boletos_codigo,
                'numero_documento'  => $object->boletos_codigo."/".str_pad($object->boletos_parcela,3,'0',STR_PAD_LEFT),
                'especie_titulo'    => $object->boletos_especie, // informar dm e sera convertido para codigo em qualquer laytou conferir em especie.php
                'carteira_banco'    => $carteira->carteiras_nome, // codigo da carteira ex: 109,RG esse vai o nome da carteira no banco
                'cod_carteira'          => "I", // I para a maioria ddas carteiras do itau
                'carteira'          => 1, // codigo da carteira 1 = simples
                'valor'             => $object->getUnformated("boletos_valor"), // Valor do boleto
                'emissao_boleto'    => 2, // tipo de emissao do boleto informar
                'protestar'         => 3, // 1 = Protestar com (Prazo) dias, 2 = Devolver após (Prazo) dias, futuramente poderemos ter uma constante
                'nome_pagador'      => $locatario->locatarios_nome, // O Sacado é o cliente, preste atenção nos campos abaixo
                'tipo_inscricao'    => $sacado_tipo, //campo fixo, escreva '1' se for pessoa fisica, 2 se for pessoa juridica
                'numero_inscricao'  => $locatario->locatarios_cnpjcpf,
                'endereco_pagador'  => $imovel->imoveis_endereco.",".$imovel->imoveis_numero." ".$imovel->imoveis_complemento,
                'bairro_pagador'     => $imovel->imoveis_bairro,
                'cep_pagador'        => $imovel->imoveis_cep, // sem hífem
                'cidade_pagador'     => $imovel->cidades_nome,
                'uf_pagador'         => $imovel->imoveis_uf,
                'data_vencimento'    => $object->boletos_data_venc,
                'data_emissao'       => $object->boletos_data_cad,
                'vlr_juros'          => ($locacao->locacoes_calcula_juros=="S")?$object->getUnformated('boletos_juro_dia'):0, // Valor do juros de 1 dia'
                'data_desconto'      => $object->boletos_data_desc,
                'vlr_desconto'       => $object->getUnformated('boletos_vlr_desc'), // Valor do desconto
                'prazo_protesto'     => $object->boletos_prazo, // prazo de dias para o cliente pagar após o vencimento
                'prazo_baixar'        => $object->boletos_prazo, // prazo para devolver quando nao pago
                //'mensagem'           => $object->boletos_mensagem,
                //'email_pagador'         => 'rogerio@ciatec.net', // data da multa
                'data_multa'         => $object->boletos_data_multa, // data da multa  
                'vlr_multa'        => $object->getUnformated('boletos_vlr_multa'), // valor da multa
                'taxa_multa'         => ($locacao->locacoes_calcula_multa=="S")?$object->boletos_taxa_multa:0, // taxa de multa em percentual
                'taxa_juros'         => ($locacao->locacoes_calcula_multa=="S")?$object->boletos_taxa_juros:0, // taxa de multa em percentual
            ));  
            //break;      
        }
        echo utf8_decode($arquivo->getText());
        TTransaction::close();
        exit;
    }`
Clone this wiki locally