@php $d = $this->getComputedData(); $inputClass = 'rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white px-3 py-2 text-sm shadow-sm focus:ring-2 focus:ring-primary-500 focus:outline-none'; $fmtUsd = fn($n) => '$' . number_format($n, 2); $statusLabel = [ 'in_progress' => 'In Progress', 'pending' => 'Pending', 'completed' => 'Selesai', 'hold' => 'Hold', ]; // Tailwind classes — must be written as full strings so Tailwind includes them $statusBadgeClass = [ 'in_progress' => 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-blue-100 text-blue-800 dark:bg-blue-900/40 dark:text-blue-300', 'pending' => 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-yellow-100 text-yellow-800 dark:bg-yellow-900/40 dark:text-yellow-300', 'completed' => 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-green-100 text-green-800 dark:bg-green-900/40 dark:text-green-300', 'hold' => 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold bg-red-100 text-red-800 dark:bg-red-900/40 dark:text-red-300', ]; $statusCardClass = [ 'in_progress' => ['bg' => 'bg-blue-50 dark:bg-blue-900/20', 'icon' => 'text-blue-500', 'value' => 'text-blue-700 dark:text-blue-300', 'border' => 'border-blue-200 dark:border-blue-800'], 'pending' => ['bg' => 'bg-yellow-50 dark:bg-yellow-900/20', 'icon' => 'text-yellow-500', 'value' => 'text-yellow-700 dark:text-yellow-300', 'border' => 'border-yellow-200 dark:border-yellow-800'], 'completed' => ['bg' => 'bg-green-50 dark:bg-green-900/20', 'icon' => 'text-green-500', 'value' => 'text-green-700 dark:text-green-300', 'border' => 'border-green-200 dark:border-green-800'], 'hold' => ['bg' => 'bg-red-50 dark:bg-red-900/20', 'icon' => 'text-red-500', 'value' => 'text-red-700 dark:text-red-300', 'border' => 'border-red-200 dark:border-red-800'], ]; @endphp
{{-- ===================== FILTER BAR ===================== --}}
Data per {{ \Carbon\Carbon::create()->month($month)->format('F') }} {{ $year }}
{{-- ===================== SECTION 1: STATUS PROJECT ===================== --}}

Status Project

@foreach(['in_progress', 'pending', 'completed', 'hold'] as $statusKey) @php $count = $d['statusCounts'][$statusKey] ?? 0; $card = $statusCardClass[$statusKey]; @endphp
{{ $statusLabel[$statusKey] }} @if($statusKey === 'in_progress') @elseif($statusKey === 'pending') @elseif($statusKey === 'completed') @elseif($statusKey === 'hold') @endif
{{ $count }} project
@endforeach
{{-- ===================== SECTION 2: DETAIL PROJECT ===================== --}}

Detail Project — earning & progress bulan {{ \Carbon\Carbon::create()->month($month)->format('F') }} {{ $year }}

@forelse($d['projects'] as $project) @php $pct = $project['progress_pct']; $barColor = $pct >= 100 ? 'bg-green-500' : ($pct >= 60 ? 'bg-blue-500' : ($pct >= 30 ? 'bg-yellow-400' : 'bg-red-400')); $statusKey = $project['status'] ?? 'pending'; $badgeClass = $statusBadgeClass[$statusKey] ?? $statusBadgeClass['pending']; @endphp @empty @endforelse @if(count($d['projects']) > 0) @endif
Project Status Project Manager Developer Earning Potential Progress
{{ $project['name'] }} {{ $statusLabel[$statusKey] ?? $statusKey }} {{ $project['pm_name'] }} @if(count($project['developer_names']) > 0)
@foreach($project['developer_names'] as $dev) {{ $dev }} @endforeach
@else @endif
@if($project['earning_this_period'] > 0) {{ $fmtUsd($project['earning_this_period']) }} @else @endif @if($project['potential_this_period'] > 0) {{ $fmtUsd($project['potential_this_period']) }} @else @endif
{{ $pct }}%
Tidak ada data project untuk periode ini.
Total ({{ count($d['projects']) }} project) {{ $fmtUsd(array_sum(array_column($d['projects'], 'earning_this_period'))) }} {{ $fmtUsd(array_sum(array_column($d['projects'], 'potential_this_period'))) }}
{{-- ===================== SECTION 3: KONDISI DEVELOPER ===================== --}}

Kondisi Developer — workload bulan {{ \Carbon\Carbon::create()->month($month)->format('F') }} {{ $year }}

@if(count($d['developerStats']) > 0)
@foreach($d['developerStats'] as $dev) @php $isOverloaded = $dev['status'] === 'overloaded'; @endphp
{{ mb_strtoupper(mb_substr($dev['name'], 0, 1)) }}
{{ $dev['name'] }}
@if($isOverloaded) Overloaded @else Normal @endif
{{ $dev['project_count'] }}
Project
{{ $fmtUsd($dev['total_earning']) }}
Total Earning
@if($isOverloaded)

Menangani {{ $dev['project_count'] }} project aktif. Pertimbangkan redistribusi workload.

@endif
@endforeach
@else
Tidak ada data developer untuk periode ini.
@endif
{{-- ===================== SECTION 4: KONDISI PROJECT MANAGER ===================== --}}

Kondisi Project Manager — bulan {{ \Carbon\Carbon::create()->month($month)->format('F') }} {{ $year }}

@if(count($d['pmStats']) > 0)
@foreach($d['pmStats'] as $pm)
{{-- PM Header --}}
{{ mb_strtoupper(mb_substr($pm['name'], 0, 1)) }}
{{ $pm['name'] }}
Project Manager
{{-- Stats Row --}}
{{ $pm['project_count'] }}
Project Dikelola
{{ $fmtUsd($pm['total_earning']) }}
Total Earning
{{-- Project List --}} @if(count($pm['project_names']) > 0)
Daftar Project
    @foreach($pm['project_names'] as $projectName)
  • {{ $projectName }}
  • @endforeach
@endif
@endforeach
@else
Tidak ada data project manager untuk periode ini.
@endif