tambah fungsi upload peserta sebagai hadir
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
@extends('layouts.admin')
|
||||
|
||||
@section('title', 'Edit Peserta — ' . $pp->participant->name)
|
||||
@section('header', 'Edit Maklumat Peserta')
|
||||
|
||||
@section('breadcrumb')
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.programs.index') }}">Program</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.programs.show', $program) }}">{{ Str::limit($program->title, 25) }}</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ route('admin.programs.participants.index', $program) }}">Peserta</a></li>
|
||||
<li class="breadcrumb-item active">Edit</li>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="card border-0 shadow-sm">
|
||||
<div class="card-header bg-white border-bottom py-3">
|
||||
<span class="fw-semibold">
|
||||
<i class="bi bi-person-gear me-2 text-primary"></i>Kemaskini Maklumat Peserta
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form method="POST" action="{{ route('admin.programs.participants.update', [$program, $pp]) }}">
|
||||
@csrf @method('PUT')
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium">Nama Penuh <span class="text-danger">*</span></label>
|
||||
<input type="text" name="name" class="form-control @error('name') is-invalid @enderror"
|
||||
value="{{ old('name', $pp->participant->name) }}" required>
|
||||
@error('name')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<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 @error('no_kp') is-invalid @enderror"
|
||||
value="{{ old('no_kp', $pp->participant->no_kp) }}"
|
||||
placeholder="12 digit tanpa sempang" required>
|
||||
@error('no_kp')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium">Emel</label>
|
||||
<input type="email" name="email" class="form-control @error('email') is-invalid @enderror"
|
||||
value="{{ old('email', $pp->participant->email) }}"
|
||||
placeholder="Kosongkan jika tiada">
|
||||
@error('email')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium">No. Telefon</label>
|
||||
<input type="text" name="phone" class="form-control @error('phone') is-invalid @enderror"
|
||||
value="{{ old('phone', $pp->participant->phone) }}"
|
||||
placeholder="Kosongkan jika tiada">
|
||||
@error('phone')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium">Jabatan / Agensi</label>
|
||||
<input type="text" name="agency" class="form-control @error('agency') is-invalid @enderror"
|
||||
value="{{ old('agency', $pp->participant->agency) }}"
|
||||
placeholder="Kosongkan jika tiada">
|
||||
@error('agency')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-medium">Sesi</label>
|
||||
<select name="session" class="form-select @error('session') is-invalid @enderror">
|
||||
<option value="">— Tiada Sesi —</option>
|
||||
<option value="pagi" {{ old('session', $pp->pre_registered_session) === 'pagi' ? 'selected' : '' }}>Pagi</option>
|
||||
<option value="petang" {{ old('session', $pp->pre_registered_session) === 'petang' ? 'selected' : '' }}>Petang</option>
|
||||
<option value="full_day" {{ old('session', $pp->pre_registered_session) === 'full_day' ? 'selected' : '' }}>Sehari Penuh</option>
|
||||
</select>
|
||||
@error('session')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
@foreach($filters as $key => $value)
|
||||
<input type="hidden" name="{{ $key }}" value="{{ $value }}">
|
||||
@endforeach
|
||||
|
||||
@php $backUrl = route('admin.programs.participants.index', $program) . ($filters ? '?' . http_build_query($filters) : ''); @endphp
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-check-lg me-1"></i> Simpan
|
||||
</button>
|
||||
<a href="{{ $backUrl }}" class="btn btn-outline-secondary">Batal</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -17,6 +17,30 @@
|
||||
{{-- Import Result --}}
|
||||
@if(session('import_result'))
|
||||
@php $r = session('import_result'); @endphp
|
||||
|
||||
{{-- All IC empty — offer delete --}}
|
||||
@if(!empty($r['all_empty_ic']))
|
||||
<div class="card border-0 shadow-sm mb-4 border-start border-4 border-warning">
|
||||
<div class="card-body">
|
||||
<h6 class="fw-semibold mb-2 text-warning">
|
||||
<i class="bi bi-exclamation-triangle me-2"></i>Semua No. K/P Kosong
|
||||
</h6>
|
||||
<p class="small text-muted mb-3">
|
||||
Fail CSV yang dimuat naik tidak mengandungi sebarang No. K/P yang sah.
|
||||
Tiada rekod diimport. Adakah anda ingin <strong>memadam semua peserta belum hadir</strong> dalam program ini?
|
||||
</p>
|
||||
<form method="POST" action="{{ route('admin.programs.participants.clear', $program) }}">
|
||||
@csrf @method('DELETE')
|
||||
<button type="submit" class="btn btn-danger btn-sm"
|
||||
onclick="return confirm('Padam semua peserta yang belum hadir? Tindakan ini tidak boleh dibatalkan.')">
|
||||
<i class="bi bi-trash me-1"></i> Padam Peserta Belum Hadir
|
||||
</button>
|
||||
<a href="{{ route('admin.programs.participants.import.form', $program) }}"
|
||||
class="btn btn-outline-secondary btn-sm ms-2">Batal</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="card border-0 shadow-sm mb-4 border-start border-4
|
||||
{{ $r['failed'] > 0 ? 'border-warning' : 'border-success' }}">
|
||||
<div class="card-body">
|
||||
@@ -59,6 +83,7 @@
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
{{-- Upload Form --}}
|
||||
<div class="card border-0 shadow-sm">
|
||||
@@ -79,7 +104,7 @@
|
||||
@error('csv_file')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-medium">Sesi Default</label>
|
||||
<select name="session" class="form-select">
|
||||
<option value="">— Ikut Tetapan Program —</option>
|
||||
@@ -90,6 +115,24 @@
|
||||
<div class="form-text">Sesi yang akan digunakan untuk semua peserta dalam fail ini.</div>
|
||||
</div>
|
||||
|
||||
@if($programEnded)
|
||||
<div class="mb-4 p-3 bg-warning bg-opacity-10 rounded border border-warning-subtle">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="mark_attendance"
|
||||
value="1" id="markAttendance">
|
||||
<label class="form-check-label fw-medium" for="markAttendance">
|
||||
Tandakan sebagai Data Kehadiran
|
||||
</label>
|
||||
</div>
|
||||
<div class="small text-muted mt-1 ms-4">
|
||||
<i class="bi bi-info-circle me-1"></i>
|
||||
Tempoh check-in telah tamat pada <strong>{{ ($program->checkin_end_at ?? $program->end_date->endOfDay())->format('d M Y, H:i') }}</strong>.
|
||||
Jika ditanda, semua peserta dalam fail ini akan direkodkan sebagai <strong>hadir</strong>.
|
||||
Peserta sedia ada dalam program akan dikemaskini status kehadirannya.
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<button type="submit" class="btn btn-primary w-100">
|
||||
<i class="bi bi-upload me-2"></i>Mula Import
|
||||
</button>
|
||||
|
||||
@@ -201,6 +201,10 @@
|
||||
<i class="bi bi-download"></i>
|
||||
</a>
|
||||
@endif
|
||||
<a href="{{ route('admin.programs.participants.edit', [$program, $pp]) . (request()->hasAny(['search','source','status','page']) ? '?' . http_build_query(request()->only(['search','source','status','page'])) : '') }}"
|
||||
class="btn btn-sm btn-outline-secondary" title="Edit Peserta">
|
||||
<i class="bi bi-pencil"></i>
|
||||
</a>
|
||||
@if($pp->status !== 'checked_in')
|
||||
<form method="POST"
|
||||
action="{{ route('admin.programs.participants.destroy', [$program, $pp]) }}"
|
||||
|
||||
Reference in New Issue
Block a user