Analytics @if (session('status'))
{{ session('status') }}
@endif @if ($errors->any())
@endif Creates one entitlement row per active employee per active leave type. Re-running is safe โ€” existing rows are left alone.
@csrf

{{ $staffCount }} active staff ยท {{ $types->where('is_active', true)->count() }} active types

{{ $allocated }} entitlement rows exist for {{ $year }} (expected {{ $expected }}).

Carried days lapse at the end of the policy month configured on each leave type. The run forfeits what is left of the carry โ€” this year's allocation is untouched.
@csrf

Safe to re-run. Forfeited days are kept on the entitlement for the audit trail instead of being deleted.

Set or top up balances for a group โ€” negotiated extra days, opening balances or a catch-up run. Existing leave taken is always preserved. @can('hrm.leave.policy')
@csrf

Ctrl/Cmd-click to select several people.

@error('user_ids')

{{ $message }}

@enderror
@endcan
A zero-day type is treated as unpaid/unlimited: balances are tracked but requests are not blocked.
@foreach ($types as $type) @endforeach
Type Days / year Rules Audience Requests Status Manage

{{ $type->name }}

{{ $type->code }}

{{ $type->isUnlimited ? 'Unlimited' : number_format((float) $type->annual_days, 1) }}
{{ $type->is_paid ? 'Paid' : 'Unpaid' }} @if ($type->requires_document) Document @endif @if ($type->carries_forward) Carries forward until {{ $monthOptions[$type->carry_over_expiry_month] ?? 'March' }} @endif
{{ $type->gender_restriction === 'none' ? 'Everyone' : $type->gender_restriction.' only' }} {{ $type->requests_count }}
Edit
@csrf @method('PUT')
@csrf