@php use Illuminate\Support\Facades\DB; use Carbon\Carbon; $idIgreja = request('idIgreja'); $mes = (int) request('mes', now()->month); // ── Nomes dos meses em português ───────────────────────────────────────── $mesesNomes = [ 1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro', ]; $nomeMes = $mesesNomes[$mes] ?? 'Mês inválido'; // ── Nome da igreja ───────────────────────────────────────────────────────── $igreja = $idIgreja ? DB::table('igrejas')->where('idIgreja', $idIgreja)->first() : null; $nomeIgreja = $igreja ? $igreja->Nome : 'Todas as igrejas'; // ── Query de aniversariantes ────────────────────────────────────────────── // Membros vinculados à 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(); $aniversariantes = DB::table('membros as m') ->joinSub($membroIds, 'ids', 'ids.idMembro', '=', 'm.idMembro') ->whereNotNull('m.dtNascimento') ->whereRaw('MONTH(m.dtNascimento) = ?', [$mes]) ->where('m.Situacao', 'A') ->select( 'm.idMembro', 'm.Nome', 'm.dtNascimento', 'm.Celular', 'm.Email' ) ->orderByRaw('DAY(m.dtNascimento)') ->orderBy('m.Nome') ->get(); // ── Agrupar por dia ─────────────────────────────────────────────────────── $porDia = $aniversariantes->groupBy(function($m) { return (int) Carbon::parse($m->dtNascimento)->format('d'); })->sortKeys(); // ── Calcular idade ──────────────────────────────────────────────────────── $calcIdade = function($dtNasc) use ($mes) { if (!$dtNasc) return '—'; $nasc = Carbon::parse($dtNasc); $anoAtual = now()->year; // Usa o ano atual e o mês do aniversário para calcular a idade que fará $aniversario = Carbon::create($anoAtual, $nasc->month, $nasc->day); return $anoAtual - $nasc->year; }; @endphp Aniversariantes de {{ $nomeMes }} — {{ $nomeIgreja }}
{{-- ── Cabeçalho ── --}}
🎂
ANIVERSARIANTES
{{ $nomeIgreja }}
{{ $nomeMes }} / {{ now()->year }}
Total: {{ $aniversariantes->count() }} aniversariante(s)
Emissão: {{ now()->format('d/m/Y H:i') }}
{{-- ── Resumo ── --}}
Total no mês
{{ $aniversariantes->count() }}
Dias com aniversário
{{ $porDia->count() }}
Mês
{{ $nomeMes }}
{{-- ── Lista agrupada por dia ── --}} @if($aniversariantes->isEmpty())
🎈
Nenhum aniversariante encontrado para {{ $nomeMes }}.
@else @foreach($porDia as $dia => $membros) @if(!$loop->first)
@endif
{{ str_pad($dia, 2, '0', STR_PAD_LEFT) }}
{{ str_pad($dia, 2, '0', STR_PAD_LEFT) }} de {{ $nomeMes }} — {{ $membros->count() }} aniversariante{{ $membros->count() !== 1 ? 's' : '' }}
@foreach($membros as $m) @php $nasc = $m->dtNascimento ? Carbon::parse($m->dtNascimento) : null; $idade = $nasc ? (now()->year - $nasc->year) : null; @endphp @endforeach
Nome Data Nasc. Idade em {{ now()->year }} Celular
{{ $m->Nome }} {{ $nasc ? $nasc->format('d/m/Y') : '—' }} @if($idade !== null) {{ $idade }} anos @else — @endif {{ $m->Celular ?: '—' }}
@endforeach @endif {{-- ── Footer decorativo ── --}} @if($aniversariantes->count() > 0) @endif {{-- ── Rodapé ── --}}