feat: public check-in flow and attendance (Fasa 5)
- AttendanceService: staffCheckin and walkInRegister methods - CheckinController: QR-based check-in (staff & walk-in external) - AttendanceCheckController: semak kehadiran & sijil status - Views: checkin show/success/already/unavailable, semak show/result Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
90
resources/views/public/semak/result.blade.php
Normal file
90
resources/views/public/semak/result.blade.php
Normal file
@@ -0,0 +1,90 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('title', 'Hasil Semakan — ' . $program->title)
|
||||
|
||||
@section('hero')
|
||||
<h4 class="mb-1">{{ $program->title }}</h4>
|
||||
<div class="opacity-75 small">
|
||||
<i class="bi bi-calendar3 me-1"></i>{{ $program->start_date->format('d M Y') }}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
|
||||
@if(! $found)
|
||||
{{-- Not found --}}
|
||||
<div class="checkin-card card p-4 text-center">
|
||||
<div class="rounded-circle bg-danger bg-opacity-10 d-inline-flex align-items-center justify-content-center mx-auto mb-3"
|
||||
style="width:70px; height:70px;">
|
||||
<i class="bi bi-person-x-fill text-danger" style="font-size:2rem;"></i>
|
||||
</div>
|
||||
<h5 class="fw-bold text-danger mb-2">Tiada Rekod Kehadiran</h5>
|
||||
<p class="text-muted small mb-3">
|
||||
No. Kad Pengenalan yang dimasukkan tidak dijumpai dalam senarai kehadiran program ini.
|
||||
</p>
|
||||
<a href="{{ route('public.semak.show', $qrCode->token) }}" class="btn btn-outline-primary btn-sm">
|
||||
<i class="bi bi-arrow-left me-1"></i> Cuba Semula
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@else
|
||||
{{-- Found --}}
|
||||
<div class="checkin-card card p-4 text-center mb-3">
|
||||
<div class="rounded-circle bg-success bg-opacity-10 d-inline-flex align-items-center justify-content-center mx-auto mb-3"
|
||||
style="width:70px; height:70px;">
|
||||
<i class="bi bi-patch-check-fill text-success" style="font-size:2rem;"></i>
|
||||
</div>
|
||||
<h5 class="fw-bold text-success mb-1">Kehadiran Disahkan</h5>
|
||||
<p class="text-muted small mb-3">Rekod kehadiran anda dijumpai.</p>
|
||||
|
||||
<div class="bg-light rounded p-3 text-start">
|
||||
<div class="row g-2">
|
||||
<div class="col-5 text-muted small">Nama</div>
|
||||
<div class="col-7 fw-medium small">{{ $participant->name }}</div>
|
||||
<div class="col-5 text-muted small">Sesi</div>
|
||||
<div class="col-7 small"><span class="badge bg-primary">{{ Str::ucfirst($attendance->attendance_session) }}</span></div>
|
||||
<div class="col-5 text-muted small">Masa Check-In</div>
|
||||
<div class="col-7 small">{{ $attendance->checked_in_at->format('d/m/Y H:i') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Certificate status --}}
|
||||
@if($program->isDownloadOpen())
|
||||
@if($certificate && $certificate->isGenerated())
|
||||
<div class="checkin-card card p-4 text-center">
|
||||
<i class="bi bi-award-fill text-warning fs-1 mb-2"></i>
|
||||
<h6 class="fw-semibold mb-2">Sijil Sedia Dimuat Turun</h6>
|
||||
<p class="text-muted small mb-3">Klik butang di bawah untuk dapatkan sijil anda.</p>
|
||||
<a href="{{ route('public.certificate.show', $certificate->token) }}"
|
||||
class="btn btn-warning btn-checkin w-100">
|
||||
<i class="bi bi-download me-2"></i>Muat Turun Sijil
|
||||
</a>
|
||||
</div>
|
||||
@elseif($certificate && $certificate->status === 'pending')
|
||||
<div class="alert alert-info text-center">
|
||||
<i class="bi bi-hourglass-split me-2"></i>
|
||||
Sijil sedang disediakan. Sila semak emel anda atau cuba lagi sebentar.
|
||||
</div>
|
||||
@else
|
||||
<div class="alert alert-info text-center small">
|
||||
<i class="bi bi-envelope-fill me-2"></i>
|
||||
Link muat turun sijil akan dihantar ke emel anda.
|
||||
@if($participant->email)
|
||||
<strong>{{ $participant->email }}</strong>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<div class="alert alert-secondary text-center small">
|
||||
<i class="bi bi-clock me-2"></i>
|
||||
Sijil belum boleh dimuat turun.
|
||||
@if($program->ecert_download_start_at)
|
||||
Mula pada <strong>{{ $program->ecert_download_start_at->format('d M Y, H:i') }}</strong>.
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@endif
|
||||
|
||||
@endsection
|
||||
45
resources/views/public/semak/show.blade.php
Normal file
45
resources/views/public/semak/show.blade.php
Normal file
@@ -0,0 +1,45 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('title', 'Semak Kehadiran — ' . $program->title)
|
||||
|
||||
@section('hero')
|
||||
<h4 class="mb-1">{{ $program->title }}</h4>
|
||||
<div class="opacity-75 small">
|
||||
<i class="bi bi-calendar3 me-1"></i>{{ $program->start_date->format('d M Y') }}
|
||||
·
|
||||
<i class="bi bi-geo-alt me-1"></i>{{ $program->location }}
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
|
||||
@if($program->isDownloadOpen())
|
||||
<div class="alert alert-success mb-4 small">
|
||||
<i class="bi bi-award-fill me-2"></i>
|
||||
<strong>Sijil boleh dimuat turun!</strong>
|
||||
Masukkan No. Kad Pengenalan untuk semak status sijil anda.
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="checkin-card card p-4">
|
||||
<h6 class="fw-semibold mb-3">
|
||||
<i class="bi bi-search me-2 text-primary"></i>Semak Kehadiran & Sijil
|
||||
</h6>
|
||||
<form method="POST" action="{{ route('public.semak.check', $qrCode->token) }}">
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium">No. Kad Pengenalan <span class="text-danger">*</span></label>
|
||||
<input type="text" name="no_kp"
|
||||
class="form-control form-control-lg @error('no_kp') is-invalid @enderror"
|
||||
placeholder="900101011234"
|
||||
inputmode="numeric" maxlength="12" autocomplete="off">
|
||||
<div class="form-text">12 digit tanpa sempang</div>
|
||||
@error('no_kp')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100 btn-checkin">
|
||||
<i class="bi bi-search me-2"></i>Semak Sekarang
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
Reference in New Issue
Block a user