@extends('layouts.app') @section('title', 'Reports') @section('content')

Operational reporting

Reports

Projects, workload, support and payments within your permissions. Dates use {{ config('app.timezone') }}.

@foreach(['Projects created in period' => $projectCount, 'Overdue production targets' => $overdueCount, 'Completed in period' => $completedCount, 'QC returns in period' => $qcReturns + $finalQcReturns] as $label => $count)
{{ $label }}{{ $count }}
@endforeach

Project stages, workload and correction counts describe the current state of projects created in the selected period. Completion totals and average turnaround use projects completed in the period, including earlier submissions.

Projects by stage

@forelse($byStatus as $stage)
{{ $stage->total }}
{{ $stage->total }}
@empty

No authorized projects in this period.

@endforelse

Market & turnaround

    @forelse($byMarket as $group)
  • {{ $group->market->name }}: {{ $group->total }}
  • @empty
  • No market totals.
  • @endforelse

Average submission-to-completion: {{ $turnaroundDays !== null ? number_format($turnaroundDays, 2).' days' : 'No completed projects' }}

Regular QC returns: {{ $qcReturns }} · Final QC returns: {{ $finalQcReturns }}

Employee workload

@forelse($workload as $employee)@empty@endforelse
EmployeeActive projectsOverdueCorrectionsQC returned
{{ $employee->name }}{{ $employee->active_projects }}{{ $employee->overdue_projects }}{{ $employee->correction_projects }}{{ $employee->qc_returned_projects }}
No active assignments in this report scope.

Revision cycles

    @forelse($corrections as $cycle)
  • {{ ucfirst(str_replace('_', ' ', $cycle->status)) }}: {{ $cycle->total }}
  • @empty
  • No correction cycles.
  • @endforelse

Oldest open cycle created: {{ $oldestCorrection ? Illuminate\Support\Carbon::parse($oldestCorrection)->format('d M Y H:i') : 'None' }}

Support performance

{{ $ticketCount }} tickets opened in period · {{ $overdueTickets }} currently overdue · {{ $escalatedTickets }} active escalations

By stage

    @forelse($ticketsByStatus as $group)
  • {{ App\Models\Ticket::STATUSES[$group->status] }}: {{ $group->total }}
  • @empty
  • No tickets.
  • @endforelse

By category

    @foreach($ticketsByCategory as $group)
  • {{ $group->category->name }}: {{ $group->total }}
  • @endforeach
@if(auth()->user()->hasPermissionTo('finance.view'))

Verified payments & outstanding balances

Received totals use payment dates in the selected period. Refunds use settlement dates; net receipts are received less refunded. Outstanding balances use accepted quotations created in the period, less all verified payments to date; credit notes offset refunded amounts. Currencies and precisions are kept separate.

@forelse($finance as $group)@empty@endforelse
CurrencyPaymentsReceivedRefundedNet receiptsOutstanding
{{ $group['currency'] }}{{ $group['payments'] }}{{ App\Support\Money::format($group['received'], $group['precision']) }}{{ App\Support\Money::format($group['refunded'] ?? 0, $group['precision']) }}{{ App\Support\Money::format($group['received'] - ($group['refunded'] ?? 0), $group['precision']) }}{{ App\Support\Money::format($group['outstanding'], $group['precision']) }}
No verified payments, refunds or accepted quotations in this period.
@endif

Projects in report

@forelse($projects as $project)@empty@endforelse
ProjectMarketTeamStage
{{ $project->title }}{{ $project->market->name }}{{ $project->team?->name ?: 'Unallocated' }}{{ App\Models\Project::STATUSES[$project->status] }}
No authorized projects match this report.
{{ $projects->links() }}
@endsection