@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 ── --}}
{{-- ── 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
| # |
Nome |
Situação |
Nasc. |
Celular |
@foreach(['E','F','C'] as $tipoGrupo)
@if(isset($grupos[$tipoGrupo]) && $grupos[$tipoGrupo]->count() > 0)
@foreach($grupos[$tipoGrupo] as $i => $m)
| {{ $i + 1 }} |
{{ $m->Nome }} |
{{ $fmtSit($m->Situacao) }}
|
{{ $fmtData($m->dtNascimento) }} |
{{ $fmtCel($m->Celular) }} |
@endforeach
@endif
@endforeach
{{-- Outros tipos não mapeados --}}
@foreach($membros->whereNotIn('Tipo',['E','F','C']) as $i => $m)
| {{ $i + 1 }} |
{{ $m->Nome }} |
{{ $fmtSit($m->Situacao) }}
|
{{ $fmtData($m->dtNascimento) }} |
{{ $fmtCel($m->Celular) }} |
@endforeach
@else
{{-- Listagem simples por nome --}}
| # |
Nome |
Tipo |
Situação |
Nasc. |
Celular |
@foreach($membros as $i => $m)
| {{ $i + 1 }} |
{{ $m->Nome }} |
{{ $fmtTipo($m->Tipo) }}
|
{{ $fmtSit($m->Situacao) }}
|
{{ $fmtData($m->dtNascimento) }} |
{{ $fmtCel($m->Celular) }} |
@endforeach
@endif
@endif
{{-- ── Rodapé ── --}}