initial
All checks were successful
linter / quality (push) Successful in 1m37s
tests / ci (8.4) (push) Successful in 2m13s
tests / ci (8.5) (push) Successful in 1m25s

This commit is contained in:
Tim Basten
2026-03-05 11:41:39 +08:00
commit 564f78dcda
182 changed files with 21145 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
<?php
use App\Enums\TravelStatus;
use App\Models\TravelRequest;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Layout;
use Livewire\Component;
use Livewire\WithPagination;
new #[Layout('components.layouts.app')] class extends Component {
use WithPagination;
public function render(): mixed
{
$user = Auth::user();
$query = TravelRequest::query()->with(['user', 'approvals']);
if (! $user->hasAnyRole(['travel_approver', 'administrator'])) {
$query->where('user_id', $user->id);
}
return view('livewire.dashboard', [
'requests' => $query->latest()->paginate(15),
'statuses' => TravelStatus::cases(),
]);
}
}
?>
<div>
<div class="d-flex justify-content-between align-items-center mb-4">
<h2 class="h4 mb-0">Travel Requests</h2>
<a href="{{ route('travel-requests.create') }}" class="btn btn-primary">
+ New Request
</a>
</div>
@if ($requests->isEmpty())
<div class="card">
<div class="card-body text-center py-5 text-muted">
<p class="mb-0">No travel requests yet.</p>
<a href="{{ route('travel-requests.create') }}" class="btn btn-primary mt-3">Submit Your First Request</a>
</div>
</div>
@else
<div class="card">
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr>
<th>#</th>
<th>Applicant</th>
<th>Reason</th>
<th>Status</th>
<th>Submitted</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach ($requests as $request)
<tr>
<td class="text-muted">{{ $request->id }}</td>
<td>{{ $request->user->name }}</td>
<td>{{ Str::limit($request->reason_summary, 60) }}</td>
<td>
@php
$badgeClass = match($request->status) {
\App\Enums\TravelStatus::Draft => 'secondary',
\App\Enums\TravelStatus::Pending => 'warning',
\App\Enums\TravelStatus::Approved => 'success',
\App\Enums\TravelStatus::Rejected => 'danger',
};
@endphp
<span class="badge bg-{{ $badgeClass }}">{{ $request->status->value }}</span>
</td>
<td>{{ $request->submitted_at?->format('d M Y') ?? '—' }}</td>
<td>
<a href="{{ route('travel-requests.show', $request) }}" class="btn btn-sm btn-outline-secondary">View</a>
@if($request->status === \App\Enums\TravelStatus::Pending && auth()->user()->hasAnyRole(['travel_approver', 'administrator']))
<a href="{{ route('travel-requests.approve', $request) }}" class="btn btn-sm btn-outline-primary ms-1">Review</a>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<div class="mt-3">
{{ $requests->links() }}
</div>
@endif
</div>