@php use App\Services\Targets\SalesPerformanceProgressService; use App\Services\Targets\TargetProgressService; $statusBadgeClasses = [ TargetProgressService::STATUS_BEHIND => 'bg-red-100 text-red-800', TargetProgressService::STATUS_ON_TRACK => 'bg-amber-100 text-amber-900', TargetProgressService::STATUS_ACHIEVED => 'bg-green-100 text-green-800', 'no_target' => 'bg-gray-100 text-gray-700', ]; $statusLabels = [ TargetProgressService::STATUS_BEHIND => 'Behind', TargetProgressService::STATUS_ON_TRACK => 'On track', TargetProgressService::STATUS_ACHIEVED => 'Achieved', 'no_target' => 'No target set', ]; $progressBarClasses = [ TargetProgressService::STATUS_BEHIND => 'bg-red-500', TargetProgressService::STATUS_ON_TRACK => 'bg-amber-500', TargetProgressService::STATUS_ACHIEVED => 'bg-green-500', 'no_target' => 'bg-gray-300', ]; $formatTargetValue = static function (float|int $value, string $valueType): string { if ($valueType === 'money') { return format_rand((float) $value); } return number_format((float) $value, 0, '.', ','); }; $monthSelectOptions = \App\Support\ReportingPeriod::monthSelectOptions(); $yearSelectOptions = \App\Support\ReportingPeriod::yearSelectOptions(); $activityTypeFilterOptions = [['value' => '', 'label' => 'All types']]; foreach (($activityTypes ?? []) as $type) { $typeLabel = $type->code === 'online_ads_posted' ? 'Online Ad' : $type->name; $activityTypeFilterOptions[] = [ 'value' => (string) $type->id, 'label' => $typeLabel, ]; } $selectedActivityTypeStr = $selectedActivityTypeId !== null ? (string) $selectedActivityTypeId : ''; $metricFilterOptions = [['value' => '', 'label' => 'All metrics']]; foreach (($performanceMetrics ?? []) as $metric) { $metricFilterOptions[] = [ 'value' => (string) ($metric['code'] ?? ''), 'label' => (string) ($metric['label'] ?? ''), ]; } $selectedMetricStr = $selectedMetricCode ?? ''; $totalRowCount = collect($periodSections ?? [])->sum( fn ($section) => count($section['activity_rows'] ?? []) + count($section['performance_rows'] ?? []), ); $summaryValueClasses = [ 'neutral' => 'text-gray-900', TargetProgressService::STATUS_BEHIND => 'text-red-700', TargetProgressService::STATUS_ON_TRACK => 'text-amber-700', TargetProgressService::STATUS_ACHIEVED => 'text-emerald-700', ]; @endphp {{ __('My Targets') }}
@if (! empty($isManagerPersonal))

Manager targets assigned to you. Actuals reflect your assigned salespeople’s combined activity.

@endif
@foreach (($summaryMetrics ?? []) as $metric) @php $tone = (string) ($metric['tone'] ?? 'neutral'); $valueClass = $summaryValueClasses[$tone] ?? $summaryValueClasses['neutral']; @endphp
{{ $metric['label'] }}
{{ $metric['value'] }}
@endforeach
Clear

As at {{ $referenceDate->format('j M Y') }} · {{ number_format($totalRowCount) }} row(s)

@foreach (($periodSections ?? []) as $section) @php $sectionKey = (string) ($section['key'] ?? ''); $sectionOpen = $sectionKey === \App\Services\Targets\TargetResolver::PERIOD_DAILY; @endphp

{{ $section['label'] ?? 'Targets' }}

Period: {{ $section['range_label'] ?? '—' }}

Activity targets

@forelse (($section['activity_rows'] ?? []) as $row) @php $status = (string) ($row['status'] ?? 'no_target'); $badgeClass = $statusBadgeClasses[$status] ?? $statusBadgeClasses['no_target']; $statusLabel = $statusLabels[$status] ?? $status; $barClass = $progressBarClasses[$status] ?? $progressBarClasses['no_target']; $hasTarget = (bool) ($row['has_target'] ?? false); $percent = (float) ($row['achievement_percent'] ?? 0); $barWidth = $hasTarget ? min(100, max(0, $percent)) : 0; @endphp @empty @endforelse
Activity Target Actual Remaining Achievement Progress Status
{{ $row['activity_label'] ?? '—' }} {{ number_format((int) ($row['target'] ?? 0)) }} {{ number_format((int) ($row['actual'] ?? 0)) }} {{ number_format((int) ($row['remaining'] ?? 0)) }} @if ($hasTarget) {{ number_format($percent, $percent === floor($percent) ? 0 : 1) }}% @else — @endif
{{ $statusLabel }}
No activity targets for this period.

Sales performance targets

@forelse (($section['performance_rows'] ?? []) as $row) @php $status = (string) ($row['status'] ?? SalesPerformanceProgressService::STATUS_NO_TARGET); $badgeClass = $statusBadgeClasses[$status] ?? $statusBadgeClasses['no_target']; $statusLabel = $statusLabels[$status] ?? $status; $barClass = $progressBarClasses[$status] ?? $progressBarClasses['no_target']; $hasTarget = (bool) ($row['has_target'] ?? false); $percent = (float) ($row['achievement_percent'] ?? 0); $barWidth = $hasTarget ? min(100, max(0, $percent)) : 0; $valueType = (string) ($row['value_type'] ?? 'count'); @endphp @empty @endforelse
Metric Target Actual Remaining Achievement Progress Status
{{ $row['metric_label'] ?? '—' }} {{ $hasTarget ? $formatTargetValue($row['target'] ?? 0, $valueType) : '—' }} {{ $formatTargetValue($row['actual'] ?? 0, $valueType) }} {{ $hasTarget ? $formatTargetValue($row['remaining'] ?? 0, $valueType) : '—' }} @if ($hasTarget) {{ number_format($percent, $percent === floor($percent) ? 0 : 1) }}% @else — @endif
{{ $statusLabel }}
No sales performance targets for this period.
@endforeach