@php use App\Models\SalaryReview; use Illuminate\Support\Carbon; $currencySymbol = '৳'; $reviewGross = static function (SalaryReview $review, bool $after = true): ?float { $snapshot = $after ? ($review->after_snapshot ?? []) : ($review->before_snapshot ?? []); if (! isset($snapshot['gross_salary'])) { return null; } return (float) $snapshot['gross_salary']; }; $formatMoney = static function (?float $amount) use ($currencySymbol): string { if ($amount === null) { return '—'; } return $currencySymbol.' '.number_format($amount, 0); }; $formatTimelineDate = static function ($date): string { if ($date === null || $date === '') { return '—'; } return $date instanceof Carbon ? $date->format('d F, Y') : Carbon::parse($date)->format('d F, Y'); }; $oldestReview = $approvedSalaryReviews ->sortBy(fn (SalaryReview $review) => sprintf('%s-%06d', $review->effective_date?->format('Y-m-d') ?? '9999-99-99', $review->id)) ->first(); $initialGross = null; $initialDate = $staff->joing_date; if ($oldestReview) { $initialGross = $reviewGross($oldestReview, false); } elseif ($pendingSalaryReviews->isNotEmpty()) { $referenceReview = $pendingSalaryReviews ->sortBy(fn (SalaryReview $review) => sprintf('%s-%06d', $review->effective_date?->format('Y-m-d') ?? '9999-99-99', $review->id)) ->first(); $initialGross = $referenceReview ? $reviewGross($referenceReview, false) : null; } if ($initialGross === null && isset($salary) && $salary !== null && $approvedSalaryReviews->isEmpty() && $pendingSalaryReviews->isEmpty()) { $initialGross = (float) $salary; } $showInitial = $initialGross !== null && ( $approvedSalaryReviews->isNotEmpty() || $pendingSalaryReviews->isNotEmpty() ); if ($showInitial && $approvedSalaryReviews->count() === 1 && $pendingSalaryReviews->isEmpty()) { $onlyAfter = $reviewGross($approvedSalaryReviews->first(), true); if ($onlyAfter !== null && abs($initialGross - $onlyAfter) < 0.005) { $showInitial = false; } } $hasTimeline = $pendingSalaryReviews->isNotEmpty() || $approvedSalaryReviews->isNotEmpty() || ($showInitial && $initialGross !== null); @endphp