@php
use Illuminate\Support\Facades\DB;
$idIgreja = request('idIgreja');
$idBase = request('idBase');
$ini = request('ini');
$fim = request('fim');
$tipo = request('tipo'); // R, D ou null/vazio = todos
// ── Nomes de contexto ────────────────────────────────────────────────────
$igreja = $idIgreja
? DB::table('igrejas')->where('idIgreja', $idIgreja)->first()
: null;
$base = $idBase
? DB::table('financeiro_bases')->where('idBase', $idBase)->first()
: null;
$nomeIgreja = $igreja ? $igreja->Nome : 'Todas as igrejas';
$nomeCaixa = $base ? $base->Titular : 'Todos os caixas';
// ── Query de lançamentos ─────────────────────────────────────────────────
$query = DB::table('financeiro_lancamentos as l')
->leftJoin('financeiro_categorias as cat', 'cat.idCategoria', '=', 'l.idCategoria')
->leftJoin('financeiro_bases as b', 'b.idBase', '=', 'l.idBase')
->where('l.Status', 'C'); // compensado
if ($idIgreja) {
$query->where('b.idIgreja', $idIgreja);
}
if ($idBase) {
$query->where('l.idBase', $idBase);
}
if ($ini) {
$query->whereDate('l.dtPagamento', '>=', $ini);
}
if ($fim) {
$query->whereDate('l.dtPagamento', '<=', $fim);
}
if ($tipo === 'R') {
$query->where('l.Tipo', 'R');
} elseif ($tipo === 'D') {
$query->where('l.Tipo', 'D');
}
$lancamentos = $query
->select(
'l.idLancamento',
'l.dtPagamento',
'l.Descricao',
'l.Tipo',
'l.Valor',
'l.Forma',
'cat.Nome as Categoria',
'b.Titular as Caixa'
)
->orderBy('l.dtPagamento')
->orderBy('l.idLancamento')
->get();
// ── Totais gerais ────────────────────────────────────────────────────────
$totalReceitas = $lancamentos->where('Tipo', 'R')->sum('Valor');
$totalDespesas = $lancamentos->where('Tipo', 'D')->sum('Valor');
$saldo = $totalReceitas - $totalDespesas;
// ── Subtotais por categoria ──────────────────────────────────────────────
$porCategoria = $lancamentos->groupBy('Categoria')->map(function ($items, $cat) {
return [
'nome' => $cat ?: 'Sem categoria',
'receitas' => $items->where('Tipo', 'R')->sum('Valor'),
'despesas' => $items->where('Tipo', 'D')->sum('Valor'),
'qtd' => $items->count(),
];
})->sortKeys();
// ── Helpers ──────────────────────────────────────────────────────────────
$fmtMoeda = fn($v) => 'R$ ' . number_format(abs($v), 2, ',', '.');
$fmtData = fn($d) => $d ? \Carbon\Carbon::parse($d)->format('d/m/Y') : '—';
$fmtForma = function($f) {
return match($f) {
'D' => 'Dinheiro',
'P' => 'PIX',
'C' => 'Cartão',
'CH' => 'Cheque',
'T' => 'Transferência',
'B' => 'Boleto',
default => ($f ?: '—'),
};
};
$periodoLabel = '';
if ($ini && $fim) {
$periodoLabel = $fmtData($ini) . ' a ' . $fmtData($fim);
} elseif ($ini) {
$periodoLabel = 'A partir de ' . $fmtData($ini);
} elseif ($fim) {
$periodoLabel = 'Até ' . $fmtData($fim);
} else {
$periodoLabel = 'Todo o período';
}
@endphp
Extrato Financeiro — {{ $nomeIgreja }}
{{-- ── Cabeçalho ── --}}
{{-- ── Resumo ── --}}
Receitas
{{ $fmtMoeda($totalReceitas) }}
{{ $lancamentos->where('Tipo','R')->count() }} lançamento(s)
Despesas
{{ $fmtMoeda($totalDespesas) }}
{{ $lancamentos->where('Tipo','D')->count() }} lançamento(s)
Saldo
{{ $saldo < 0 ? '− ' : '' }}{{ $fmtMoeda($saldo) }}
{{ $lancamentos->count() }} lançamento(s) total
{{-- ── Tabela principal ── --}}
Lançamentos Detalhados
@if($lancamentos->isEmpty())
Nenhum lançamento encontrado para os filtros selecionados.
@else
| Data |
Descrição |
Categoria |
Forma |
Valor |
@foreach($lancamentos as $lanc)
| {{ $fmtData($lanc->dtPagamento) }} |
{{ $lanc->Descricao ?: '—' }} |
{{ $lanc->Categoria ?: 'Sem categoria' }} |
{{ $fmtForma($lanc->Forma) }} |
{{ $lanc->Tipo === 'D' ? '− ' : '' }}{{ $fmtMoeda($lanc->Valor) }}
|
@endforeach
| Total Receitas: |
{{ $fmtMoeda($totalReceitas) }} |
| Total Despesas: |
{{ $fmtMoeda($totalDespesas) }} |
| Saldo: |
{{ $saldo < 0 ? '− ' : '' }}{{ $fmtMoeda($saldo) }}
|
{{-- ── Subtotais por categoria ── --}}
@if($porCategoria->count() > 1)
Resumo por Categoria
| Categoria |
Receitas |
Despesas |
Qtd |
@foreach($porCategoria as $cat)
| {{ $cat['nome'] }} |
{{ $cat['receitas'] > 0 ? $fmtMoeda($cat['receitas']) : '—' }} |
{{ $cat['despesas'] > 0 ? $fmtMoeda($cat['despesas']) : '—' }} |
{{ $cat['qtd'] }} |
@endforeach
@endif
@endif
{{-- ── Rodapé ── --}}