tambah emel masa semak sijil
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Public;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Jobs\SendCertificateEmailJob;
|
||||
use App\Models\Certificate;
|
||||
use App\Models\Participant;
|
||||
use App\Models\ProgramQrCode;
|
||||
@@ -57,4 +58,35 @@ class AttendanceCheckController extends Controller
|
||||
return view('public.semak.result', compact('program', 'qrCode', 'participant', 'attendance', 'certificate'))
|
||||
->with('found', (bool) $attendance);
|
||||
}
|
||||
|
||||
public function updateEmail(string $qr_token, Request $request): View
|
||||
{
|
||||
$qrCode = ProgramQrCode::where('token', $qr_token)->where('is_active', true)->firstOrFail();
|
||||
$program = $qrCode->program;
|
||||
|
||||
$request->validate([
|
||||
'no_kp' => ['required', 'digits:12'],
|
||||
'email' => ['required', 'email', 'max:255'],
|
||||
], [
|
||||
'email.required' => 'Sila masukkan alamat emel.',
|
||||
'email.email' => 'Format emel tidak sah.',
|
||||
]);
|
||||
|
||||
$participant = Participant::where('no_kp', $request->no_kp)->firstOrFail();
|
||||
$participant->update(['email' => $request->email]);
|
||||
|
||||
$attendance = $participant->attendanceForProgram($program->id);
|
||||
$certificate = Certificate::where('program_id', $program->id)
|
||||
->where('participant_id', $participant->id)
|
||||
->first();
|
||||
|
||||
// Masukkan queue hantar e-sijil jika sijil sudah dijana dan belum dihantar
|
||||
if ($certificate && $certificate->status === 'generated' && ! $certificate->emailed_at) {
|
||||
SendCertificateEmailJob::dispatch($certificate);
|
||||
}
|
||||
|
||||
return view('public.semak.result', compact('program', 'qrCode', 'participant', 'attendance', 'certificate'))
|
||||
->with('found', true)
|
||||
->with('email_updated', true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,51 @@
|
||||
|
||||
{{-- Certificate status --}}
|
||||
@if($program->isDownloadOpen())
|
||||
|
||||
@if(! $participant->email)
|
||||
{{-- Emel belum ada — minta emel sebelum sijil dihantar --}}
|
||||
<div class="checkin-card card p-4 mb-3">
|
||||
<div class="d-flex align-items-center gap-3 mb-3">
|
||||
<div class="rounded-circle bg-warning bg-opacity-10 d-flex align-items-center justify-content-center flex-shrink-0"
|
||||
style="width:44px;height:44px;">
|
||||
<i class="bi bi-envelope-exclamation-fill text-warning fs-5"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="fw-semibold">Emel Diperlukan</div>
|
||||
<div class="text-muted small">Masukkan emel untuk menerima pautan e-sijil</div>
|
||||
</div>
|
||||
</div>
|
||||
<form method="POST" action="{{ route('public.semak.update-email', $qrCode->token) }}">
|
||||
@csrf
|
||||
<input type="hidden" name="no_kp" value="{{ $participant->no_kp }}">
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium small">Alamat Emel <span class="text-danger">*</span></label>
|
||||
<input type="email" name="email"
|
||||
class="form-control @error('email') is-invalid @enderror"
|
||||
placeholder="nama@email.com"
|
||||
value="{{ old('email') }}" autocomplete="email" required>
|
||||
<div class="form-text">
|
||||
<i class="bi bi-info-circle me-1"></i>Untuk penerimaan e-sijil
|
||||
</div>
|
||||
@error('email')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100">
|
||||
<i class="bi bi-envelope-check me-2"></i>Kemaskini & Hantar E-Sijil
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@else
|
||||
|
||||
{{-- Emel ada (termasuk baru dikemaskini) --}}
|
||||
@if($email_updated ?? false)
|
||||
<div class="alert alert-success small mb-3">
|
||||
<i class="bi bi-check-circle-fill me-2"></i>
|
||||
Emel berjaya dikemaskini. Pautan e-sijil akan dihantar ke
|
||||
<strong>{{ $participant->email }}</strong>.
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@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>
|
||||
@@ -69,12 +114,13 @@
|
||||
@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
|
||||
Pautan muat turun sijil akan dihantar ke emel
|
||||
<strong>{{ $participant->email }}</strong>.
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@endif
|
||||
|
||||
@else
|
||||
<div class="alert alert-secondary text-center small">
|
||||
<i class="bi bi-clock me-2"></i>
|
||||
|
||||
@@ -118,6 +118,7 @@ Route::middleware('throttle:checkin')->prefix('p')->name('public.')->group(funct
|
||||
Route::post('/{qr_token}/external', [CheckinController::class, 'externalRegister'])->name('checkin.external');
|
||||
Route::get('/{qr_token}/semak', [AttendanceCheckController::class, 'show'])->name('semak.show');
|
||||
Route::post('/{qr_token}/semak', [AttendanceCheckController::class, 'check'])->name('semak.check');
|
||||
Route::post('/{qr_token}/semak/email', [AttendanceCheckController::class, 'updateEmail'])->name('semak.update-email');
|
||||
Route::get('/{qr_token}/questionnaire/{participant_uuid}', [QuestionnaireController::class, 'show'])->name('questionnaire.show');
|
||||
Route::post('/{qr_token}/questionnaire/{participant_uuid}', [QuestionnaireController::class, 'submit'])->name('questionnaire.submit');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user