@php use Illuminate\Support\Facades\DB; $idIgreja = request('idIgreja'); $situacao = request('situacao', 'A'); // A, I, T $tipo = request('tipo', ''); // E, F, C ou vazio $ordem = request('ordem', 'Nome'); // Nome ou Tipo // ── Nome da igreja ──────────────────────────────────────────────────────── $igreja = $idIgreja ? DB::table('igrejas')->where('idIgreja', $idIgreja)->first() : null; $nomeIgreja = $igreja ? $igreja->Nome : 'Todas as igrejas'; // ── Query de membros ────────────────────────────────────────────────────── // Membros vinculados a uma igreja via cargoxmembroxigreja → departamentosxigreja $membroIdsQuery = DB::table('cargoxmembroxigreja as cmi') ->join('departamentosxigreja as di', 'cmi.idDI', '=', 'di.idDI'); if ($idIgreja) { $membroIdsQuery->where('di.idIgreja', $idIgreja); } $membroIds = $membroIdsQuery->select('cmi.idMembro')->distinct(); $query = DB::table('membros as m') ->joinSub($membroIds, 'ids', 'ids.idMembro', '=', 'm.idMembro'); // ── Filtro situação ─────────────────────────────────────────────────────── if ($situacao === 'A') { $query->where('m.Situacao', 'A'); } elseif ($situacao === 'I') { $query->where('m.Situacao', 'I'); } // T = todos, sem filtro // ── Filtro tipo ─────────────────────────────────────────────────────────── if ($tipo) { $query->where('m.Tipo', $tipo); } // ── Ordenação ───────────────────────────────────────────────────────────── if ($ordem === 'Tipo') { $query->orderByRaw("FIELD(m.Tipo,'E','F','C')")->orderBy('m.Nome'); } else { $query->orderBy('m.Nome'); } $membros = $query ->select( 'm.idMembro', 'm.Nome', 'm.Tipo', 'm.Situacao', 'm.dtNascimento', 'm.Celular', 'm.Email' ) ->get(); // ── Breakdown por tipo ──────────────────────────────────────────────────── $totalEfetivos = $membros->where('Tipo', 'E')->count(); $totalCongregados = $membros->where('Tipo', 'F')->count(); $totalVisitantes = $membros->where('Tipo', 'V')->count(); $totalCriancas = $membros->where('Tipo', 'C')->count(); $totalOutros = $membros->whereNotIn('Tipo', ['E','F','V','C'])->count(); // ── Helpers ─────────────────────────────────────────────────────────────── $fmtData = fn($d) => $d ? \Carbon\Carbon::parse($d)->format('d/m/Y') : '—'; $fmtTipo = function($t) { return match($t) { 'E' => 'Membro', 'F' => 'Congregado', 'V' => 'Visitante', 'C' => 'Criança', default => ($t ?: 'Outro'), }; }; $badgeTipo = function($t) { return match($t) { 'E' => 'badge-efetivo', 'F' => 'badge-congregado', 'V' => 'badge-visitante', 'C' => 'badge-crianca', default => 'badge-outro', }; }; $fmtSit = fn($s) => $s === 'A' ? 'Ativo' : 'Inativo'; $fmtCel = fn($c) => $c ?: '—'; // Labels para filtros aplicados $labelSituacao = match($situacao) { 'A' => 'Ativos', 'I' => 'Inativos', default => 'Todos' }; $labelTipo = $tipo ? $fmtTipo($tipo) : 'Todos os tipos'; $labelOrdem = $ordem === 'Tipo' ? 'Tipo' : 'Nome'; @endphp Lista de Membros — {{ $nomeIgreja }}
{{-- ── Cabeçalho ── --}}
@include('relatorios.partials.logo-header', ['logoStyle' => 'height:40px;width:auto;object-fit:contain;'])
LISTA DE MEMBROS
{{ $nomeIgreja }}
Emissão: {{ now()->format('d/m/Y H:i') }}
Total: {{ $membros->count() }} membro(s)
Situação: {{ $labelSituacao }} Tipo: {{ $labelTipo }} Ordenado por: {{ $labelOrdem }}
{{-- ── Resumo ── --}}
Total
{{ $membros->count() }}
Membros
{{ $totalEfetivos }}
Congregados
{{ $totalCongregados }}
Visitantes
{{ $totalVisitantes }}
Crianças
{{ $totalCriancas }}
Outros
{{ $totalOutros }}
{{-- ── Tabela ── --}}
Listagem ({{ $membros->count() }} membro{{ $membros->count() !== 1 ? 's' : '' }})
@if($membros->isEmpty())
Nenhum membro encontrado para os filtros selecionados.
@else @if($ordem === 'Tipo') {{-- Agrupado por tipo --}} @php $grupos = $membros->groupBy('Tipo'); $ordemGrupos = ['E' => 'Membros', 'F' => 'Congregados', 'V' => 'Visitantes', 'C' => 'Crianças']; @endphp @foreach(['E','F','C'] as $tipoGrupo) @if(isset($grupos[$tipoGrupo]) && $grupos[$tipoGrupo]->count() > 0) @foreach($grupos[$tipoGrupo] as $i => $m) @endforeach @endif @endforeach {{-- Outros tipos não mapeados --}} @foreach($membros->whereNotIn('Tipo',['E','F','C']) as $i => $m) @endforeach
# Nome Situação Nasc. Celular
{{ $ordemGrupos[$tipoGrupo] ?? $tipoGrupo }} — {{ $grupos[$tipoGrupo]->count() }} membro(s)
{{ $i + 1 }} {{ $m->Nome }} {{ $fmtSit($m->Situacao) }} {{ $fmtData($m->dtNascimento) }} {{ $fmtCel($m->Celular) }}
{{ $i + 1 }} {{ $m->Nome }} {{ $fmtSit($m->Situacao) }} {{ $fmtData($m->dtNascimento) }} {{ $fmtCel($m->Celular) }}
@else {{-- Listagem simples por nome --}} @foreach($membros as $i => $m) @endforeach
# Nome Tipo Situação Nasc. Celular
{{ $i + 1 }} {{ $m->Nome }} {{ $fmtTipo($m->Tipo) }} {{ $fmtSit($m->Situacao) }} {{ $fmtData($m->dtNascimento) }} {{ $fmtCel($m->Celular) }}
@endif @endif {{-- ── Rodapé ── --}}