@extends('layouts.app') @section('title', 'Reports') @section('breadcrumb')Reports & Analytics@endsection @section('content')

Reports & Analytics

Pipeline performance, revenue trends, and conversion metrics

Export CSV
Reset
@if($stageFilter || $pmFilter)
@if($stageFilter) Stage: {{ ucfirst($stageFilter) }} @endif @if($pmFilter) @php $pmName = $projectManagers->firstWhere('id', $pmFilter)?->name ?? 'Unknown'; @endphp PM: {{ $pmName }} @endif
@endif

Downloadable Reports

Download pre-built CSV reports for the selected date range
Gross Profit Report
Revenue vs costs per job — sortable, filterable, exportable to CSV
Open Report
@foreach([ ['Pipeline Summary', 'Complete jobs list with stage, status, and value', 'fa-chart-bar', 'text-blue-400', ['export'=>'csv']], ['Revenue by Month', 'Monthly revenue totals for the selected period', 'fa-coins', 'text-green-400', ['export'=>'csv','group_by'=>'stage']], ['Lead Source Report', 'Lead counts and conversion by source channel', 'fa-funnel-dollar','text-purple-400', ['export'=>'csv','group_by'=>'source']], ['Project Type Report', 'Job breakdown by kitchen, laundry, wardrobe etc.', 'fa-layer-group', 'text-amber-400', ['export'=>'csv','group_by'=>'project_type']], ['PM Performance', 'Jobs and revenue per project manager', 'fa-user-tie', 'text-pink-400', ['export'=>'csv','group_by'=>'status']], ['Consultant Activity', 'Lead and job counts per sales consultant', 'fa-handshake', 'text-teal-400', ['export'=>'csv','group_by'=>'stage']], ] as [$rptName, $rptDesc, $rptIcon, $rptColor, $rptParams]) @php $rptUrl = route('reports.index', array_merge( ['from' => $from->format('Y-m-d'), 'to' => $to->format('Y-m-d')], $stageFilter ? ['stage_filter' => $stageFilter] : [], $pmFilter ? ['pm_filter' => $pmFilter] : [], $rptParams )); @endphp
{{ $rptName }}
{{ $rptDesc }}
Download CSV
@endforeach

Scheduled Reports {{ $scheduledReports->count() }} configured

@csrf
@if($scheduledReports->isEmpty())

No scheduled reports configured yet.

Click "New Schedule" to create your first automated report.

@else
@foreach($scheduledReports as $rpt)
{{ $rpt->name }}
{{ \App\Models\ScheduledReport::typeLabels()[$rpt->report_type] ?? $rpt->report_type }} · {{ \App\Models\ScheduledReport::frequencyLabels()[$rpt->frequency] ?? $rpt->frequency }} @if($rpt->last_run_at) · Last run {{ $rpt->last_run_at->diffForHumans() }} @else · Never run @endif
@csrf
{{ $rpt->is_active ? 'Active' : 'Paused' }}
@csrf @method('DELETE')
@endforeach
@endif
@endsection