Files
sam-manage/resources/views/hr/leaves/partials/balance.blade.php
김보곤 efebd1e1f8 fix: [leave] 근속 기간 표시 형식 개선
- 소수점 float 대신 "1년 3개월", "2개월" 형태로 표시
- 1개월 미만인 경우 "1개월 미만" 표시
2026-02-27 11:20:40 +09:00

121 lines
6.2 KiB
PHP

{{-- 잔여연차 현황 (HTMX로 로드) --}}
<x-table-swipe>
<table class="min-w-full">
<thead class="bg-gray-50 border-b border-gray-200">
<tr>
<th class="px-6 py-3 text-left text-sm font-semibold text-gray-600">사원</th>
<th class="px-6 py-3 text-left text-sm font-semibold text-gray-600">부서</th>
<th class="px-6 py-3 text-center text-sm font-semibold text-gray-600">입사일</th>
<th class="px-6 py-3 text-center text-sm font-semibold text-gray-600">근속</th>
<th class="px-6 py-3 text-center text-sm font-semibold text-gray-600">부여</th>
<th class="px-6 py-3 text-center text-sm font-semibold text-gray-600">사용</th>
<th class="px-6 py-3 text-center text-sm font-semibold text-gray-600">잔여</th>
<th class="px-6 py-3 text-center text-sm font-semibold text-gray-600">소진율</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-100">
@forelse($balances as $balance)
@php
$employee = $balance->employee ?? null;
$displayName = $employee?->display_name ?? $balance->user?->name ?? '-';
$department = $employee?->department;
$hireDate = $employee?->hire_date;
$tenureParts = null;
if ($hireDate) {
$hire = \Carbon\Carbon::parse($hireDate);
$tenureYears = (int) $hire->diffInYears(now());
$tenureMonths = (int) $hire->copy()->addYears($tenureYears)->diffInMonths(now());
$tenureParts = ['years' => $tenureYears, 'months' => $tenureMonths];
}
$remaining = $balance->total_days - $balance->used_days;
$rate = $balance->total_days > 0 ? round(($balance->used_days / $balance->total_days) * 100) : 0;
$barColor = $rate >= 90 ? 'bg-red-500' : ($rate >= 70 ? 'bg-amber-500' : 'bg-blue-500');
@endphp
<tr class="hover:bg-gray-50 transition-colors">
{{-- 사원 --}}
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center gap-2">
<div class="shrink-0 w-8 h-8 rounded-full bg-blue-100 text-blue-600 flex items-center justify-center text-xs font-medium">
{{ mb_substr($displayName, 0, 1) }}
</div>
<span class="text-sm font-medium text-gray-900">{{ $displayName }}</span>
</div>
</td>
{{-- 부서 --}}
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-700">
{{ $department?->name ?? '-' }}
</td>
{{-- 입사일 --}}
<td class="px-6 py-4 whitespace-nowrap text-center text-sm text-gray-700">
{{ $hireDate ?? '-' }}
</td>
{{-- 근속 --}}
<td class="px-6 py-4 whitespace-nowrap text-center text-sm text-gray-700">
@if($tenureParts !== null)
@if($tenureParts['years'] > 0 && $tenureParts['months'] > 0)
{{ $tenureParts['years'] }} {{ $tenureParts['months'] }}개월
@elseif($tenureParts['years'] > 0)
{{ $tenureParts['years'] }}
@elseif($tenureParts['months'] > 0)
{{ $tenureParts['months'] }}개월
@else
1개월 미만
@endif
@else
-
@endif
</td>
{{-- 부여 --}}
<td class="px-6 py-4 whitespace-nowrap text-center text-sm text-gray-700 font-medium">
{{ $balance->total_days }}
</td>
{{-- 사용 --}}
<td class="px-6 py-4 whitespace-nowrap text-center text-sm text-gray-700">
{{ $balance->used_days }}
</td>
{{-- 잔여 --}}
<td class="px-6 py-4 whitespace-nowrap text-center">
<span class="text-sm font-semibold {{ $remaining <= 3 ? 'text-red-600' : 'text-blue-600' }}">
{{ $remaining }}
</span>
</td>
{{-- 소진율 --}}
<td class="px-6 py-4 whitespace-nowrap text-center" style="min-width: 120px;">
<div class="flex items-center gap-2 justify-center">
<div class="flex-1 bg-gray-200 rounded-full h-2" style="max-width: 80px;">
<div class="{{ $barColor }} h-2 rounded-full" style="width: {{ $rate }}%;"></div>
</div>
<span class="text-xs text-gray-500">{{ $rate }}%</span>
</div>
</td>
</tr>
@empty
<tr>
<td colspan="8" class="px-6 py-12 text-center">
<div class="flex flex-col items-center gap-2">
<svg class="w-12 h-12 text-gray-300" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z"/>
</svg>
<p class="text-gray-500">{{ $year }} 연차 정보가 없습니다.</p>
</div>
</td>
</tr>
@endforelse
</tbody>
</table>
</x-table-swipe>
@if($balances->count())
<div class="px-6 py-3 bg-gray-50 border-t border-gray-200 text-sm text-gray-500">
{{ $balances->count() }} | 부여합계: {{ $balances->sum('total_days') }} | 사용합계: {{ $balances->sum('used_days') }} | 잔여합계: {{ $balances->sum('total_days') - $balances->sum('used_days') }}
</div>
@endif