Skip to content

Instantly share code, notes, and snippets.

@ricardobarantini
Created June 21, 2016 19:06
Show Gist options
  • Save ricardobarantini/4a8241329fb98fd97442a72b0dbb3ec9 to your computer and use it in GitHub Desktop.
Save ricardobarantini/4a8241329fb98fd97442a72b0dbb3ec9 to your computer and use it in GitHub Desktop.
Remessa
<?php
namespace App\Http\Controllers;
use App\Models\Banco;
use App\Models\Empresa;
use App\Models\Parcelas;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class RemessasController extends Controller
{
public function index()
{
$bancos = Banco::all()->lists('descricao_conta', 'id');
$parcelas = Parcelas::where('boleto_gerado', 1)->where('remessa_enviada', 0)->get();
return view('remessas.index')->with('bancos', $bancos)->with('parcelas', $parcelas);
}
public function gerar(Request $request)
{
$this->data_inicio = $this->formataData($request->input('data_inicio'));
$this->data_termino = $this->formataData($request->input('data_termino'));
$this->bancos_id = $request->input('bancos_id');
echo $this->gerarRemessa();
}
/**
* Retorna o código do banco.
*
* @param integer $id
* @return string
*/
public function banco_codigo($id)
{
return Parcela::find($id)->vendas->loteamentos->bancos->banco_codigo;
}
public function banco($field = '')
{
$banco = Banco::find($this->banco_id);
if(!empty($field)) {
return $banco->{$field};
}
return $banco;
}
/**
* Informações do cedente para gerar o arquivo de remessa.
*
* @return array
*/
public function cedente()
{
$empresa = Empresa::find(1);
$dados = [
'nome' => $empresa->empresa,
'endereco' => $empresa->endereco . ', ' . $empresa->numero,
'cep' => $empresa->cep,
'uf' => $empresa->estado,
'cidade' => $empresa->cidade,
'documento' => $empresa->cnpj
];
return $dados;
}
public function sacado($id)
{
$cliente = Parcelas::find($id)->vendas->clientes;
$dados = [
'nome' => $cliente->nome,
'endereco' => $cliente->endereco . ', ' . $cliente->numero,
'bairro' => $cliente->bairro,
'cep' => $cliente->cep,
'uf' => $cliente->uf,
'cidade' => $cliente->cidade,
'documento' => $cliente->cpf
];
return $dados;
}
public function boleto($id)
{
$parcela = Parcelas::find($id);
$dados = [
'logo' => 'path/para/o/logo', // Logo da empresa
'dataVencimento' => Carbon::parse('1790-01-01'),
'valor' => $parcela->getOriginal('valor_total'),
'multa' => 10.00, // porcento
'juros' => 2.00, // porcento ao mes
'juros_apos' => 1, // juros e multa após
'diasProtesto' => false, // protestar após, se for necessário
'numero' => 1,
'numeroDocumento' => 1,
'pagador' => new \Eduardokum\LaravelBoleto\Boleto\Pessoa($this->sacado($id)), // Objeto PessoaContract
'beneficiario' => new \Eduardokum\LaravelBoleto\Boleto\Pessoa($this->cedente()), // Objeto PessoaContract
'agencia' => 9999, // BB, Bradesco, CEF, HSBC, Itáu
'agenciaDv' => 9, // se possuir
'conta' => 99999, // BB, Bradesco, CEF, HSBC, Itáu, Santander
'contaDv' => 9, // Bradesco, HSBC, Itáu
'carteira' => 1, // BB, Bradesco, CEF, HSBC, Itáu, Santander
'convenio' => 9999999, // BB
//'variacaoCarteira' => 99, // BB
//'range' => 99999, // HSBC
'codigoCliente' => 99999, // Bradesco, CEF, Santander
'ios' => 0, // Santander
'descricaoDemonstrativo' => ['msg1', 'msg2', 'msg3'], // máximo de 5
'instrucoes' => ['inst1', 'inst2'], // máximo de 5
'aceite' => 1,
'especieDoc' => 'DM',
];
return $dados;
}
public function dadosRemessa()
{
$dados = [
'agencia' => 9999,
'agenciaDv' => 9, // se possuir
'conta' => 99999,
'contaDv' => 9, // se possuir
'carteira' => 101,
'convenio' => 9999999, // se possuir
'range' => 99999, // se possuir
'codigoCliente' => 99999, // se possuir
'variacaoCarteira' => 99, // se possuir
'beneficiario' => new \Eduardokum\LaravelBoleto\Boleto\Pessoa($this->cedente()),
];
return $dados;
}
public function gerarRemessa()
{
$remessa = new \Eduardokum\LaravelBoleto\Cnab\Remessa\Banco\Santander($this->dadosRemessa());
$parcelas = $this->capturaParcelasComBoletosGerados();
foreach($parcelas as $parcela) {
$boleto = new \Eduardokum\LaravelBoleto\Boleto\Banco\Santander($this->boleto($parcela->id));
$remessa->addBoleto($boleto);
}
return $remessa->gerar();
}
public function capturaParcelasComBoletosGerados()
{
return Parcelas::whereBetween('vencimento', [$this->data_inicio, $this->data_termino])
->where('boleto_gerado', 1)
->where('remessa_enviada', 0)
->with(['vendas.loteamentos' => function ($query) {
$query->where('bancos_id', $this->bancos_id);
}])->get();
}
public function formataData($data)
{
return Carbon::createFromFormat('d/m/Y', $data)->toDateString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment