first
This commit is contained in:
23
resources/views/public/applications/closed.blade.php
Normal file
23
resources/views/public/applications/closed.blade.php
Normal file
@@ -0,0 +1,23 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('title', 'Pendaftaran Ditutup')
|
||||
|
||||
@section('content')
|
||||
<div class="page-heading">
|
||||
<div class="eyebrow">Pendaftaran Awam</div>
|
||||
<h1 class="h3 mb-1">Pendaftaran Ditutup</h1>
|
||||
<p class="text-secondary mb-0">{{ $pusatMengundi->code }} - {{ $pusatMengundi->name }}</p>
|
||||
</div>
|
||||
|
||||
<div class="content-panel p-3 p-md-4">
|
||||
<div class="d-flex gap-3 align-items-start">
|
||||
<div class="stat-icon text-bg-warning">
|
||||
<i class="bi bi-calendar-x"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="h5 mb-2">Permohonan tidak boleh dihantar</h2>
|
||||
<p class="text-secondary mb-0">{{ $message }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
164
resources/views/public/applications/create.blade.php
Normal file
164
resources/views/public/applications/create.blade.php
Normal file
@@ -0,0 +1,164 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('title', 'Permohonan Petugas')
|
||||
|
||||
@section('content')
|
||||
<div class="page-heading">
|
||||
<div class="eyebrow">Pendaftaran Awam</div>
|
||||
<h1 class="h3 mb-1">Permohonan Petugas Pilihanraya</h1>
|
||||
<p class="text-secondary mb-0">{{ $pusatMengundi->code }} - {{ $pusatMengundi->name }}</p>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-12 col-xl-4">
|
||||
<div class="content-panel p-3 p-md-4">
|
||||
<h2 class="h5 mb-3">Pusat Mengundi</h2>
|
||||
<dl class="mb-0">
|
||||
<dt class="text-secondary small">Daerah</dt>
|
||||
<dd class="mb-3">{{ $pusatMengundi->daerahMengundi?->name ?? '-' }}</dd>
|
||||
<dt class="text-secondary small">Alamat</dt>
|
||||
<dd class="mb-0">{{ $pusatMengundi->address ?: '-' }}</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-xl-8">
|
||||
<div class="content-panel p-3 p-md-4">
|
||||
<form method="POST" action="{{ route('public.applications.store', $pusatMengundi->public_uuid) }}" enctype="multipart/form-data">
|
||||
@csrf
|
||||
|
||||
<div class="row g-3">
|
||||
<div class="col-12">
|
||||
<h2 class="h5 mb-0">Maklumat Pemohon</h2>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="name">Nama</label>
|
||||
<input id="name" name="name" class="form-control" value="{{ old('name') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="ic_number">No. Kad Pengenalan</label>
|
||||
<input id="ic_number" name="ic_number" class="form-control" inputmode="numeric" value="{{ old('ic_number') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="phone_number">No. Telefon</label>
|
||||
<input id="phone_number" name="phone_number" class="form-control" value="{{ old('phone_number') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="email">Emel</label>
|
||||
<input id="email" name="email" type="email" class="form-control" value="{{ old('email') }}">
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<label class="form-label" for="address">Alamat</label>
|
||||
<textarea id="address" name="address" class="form-control" rows="3" required>{{ old('address') }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<h2 class="h5 mb-0">Jawatan dan Bank</h2>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="requested_position_code">Jawatan Dipohon</label>
|
||||
<select id="requested_position_code" name="requested_position_code" class="form-select" required>
|
||||
<option value="">Pilih jawatan</option>
|
||||
@foreach ($roles as $role)
|
||||
<option value="{{ $role->code }}" @selected(old('requested_position_code') === $role->code)>
|
||||
{{ $role->code }} - {{ $role->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6 d-none" id="ktm-section">
|
||||
<label class="form-label" for="selected_ktm_assignment_id">KTM</label>
|
||||
<select id="selected_ktm_assignment_id" name="selected_ktm_assignment_id" class="form-select" data-old-value="{{ old('selected_ktm_assignment_id') }}">
|
||||
<option value="">Pilih KTM</option>
|
||||
</select>
|
||||
<div class="form-text">KTM hanya dipaparkan jika kekosongan masih ada.</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="bank_name">Nama Bank</label>
|
||||
<input id="bank_name" name="bank_name" class="form-control" value="{{ old('bank_name') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="bank_account_number">No. Akaun Bank</label>
|
||||
<input id="bank_account_number" name="bank_account_number" class="form-control" inputmode="numeric" value="{{ old('bank_account_number') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<h2 class="h5 mb-0">Dokumen</h2>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="ic_document">Dokumen Kad Pengenalan</label>
|
||||
<input id="ic_document" name="ic_document" type="file" class="form-control" accept=".pdf,.jpg,.jpeg,.png" required>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6">
|
||||
<label class="form-label" for="bank_statement">Penyata Bank</label>
|
||||
<input id="bank_statement" name="bank_statement" type="file" class="form-control" accept=".pdf,.jpg,.jpeg,.png" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end mt-4">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-send me-1"></i>Hantar Permohonan
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
const ktmOptionsByRole = @json($ktmOptionsByRole);
|
||||
const roleSelect = document.getElementById('requested_position_code');
|
||||
const ktmSection = document.getElementById('ktm-section');
|
||||
const ktmSelect = document.getElementById('selected_ktm_assignment_id');
|
||||
const oldKtmValue = ktmSelect.dataset.oldValue;
|
||||
|
||||
function refreshKtmOptions() {
|
||||
const roleCode = roleSelect.value;
|
||||
const requiresKtm = ['KP', 'KPDP'].includes(roleCode);
|
||||
const options = ktmOptionsByRole[roleCode] || [];
|
||||
|
||||
ktmSection.classList.toggle('d-none', !requiresKtm);
|
||||
ktmSelect.required = requiresKtm;
|
||||
ktmSelect.disabled = !requiresKtm;
|
||||
ktmSelect.innerHTML = '';
|
||||
|
||||
if (!requiresKtm) {
|
||||
ktmSelect.append(new Option('Pilih KTM', ''));
|
||||
return;
|
||||
}
|
||||
|
||||
if (options.length === 0) {
|
||||
ktmSelect.append(new Option('Tiada KTM dengan kekosongan', ''));
|
||||
return;
|
||||
}
|
||||
|
||||
ktmSelect.append(new Option('Pilih KTM', ''));
|
||||
|
||||
options.forEach((item) => {
|
||||
const option = new Option(`${item.label} (${item.remaining} kosong)`, item.id);
|
||||
if (oldKtmValue && oldKtmValue === String(item.id)) {
|
||||
option.selected = true;
|
||||
}
|
||||
ktmSelect.append(option);
|
||||
});
|
||||
}
|
||||
|
||||
roleSelect.addEventListener('change', refreshKtmOptions);
|
||||
refreshKtmOptions();
|
||||
</script>
|
||||
@endpush
|
||||
91
resources/views/public/applications/status.blade.php
Normal file
91
resources/views/public/applications/status.blade.php
Normal file
@@ -0,0 +1,91 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('title', 'Status Permohonan')
|
||||
|
||||
@section('content')
|
||||
<div class="page-heading">
|
||||
<div class="eyebrow">Semak Status Permohonan</div>
|
||||
<h1 class="h3 mb-1">Status Permohonan</h1>
|
||||
<p class="text-secondary mb-0">Paparan status terhad. Dokumen dan maklumat sensitif tidak dipaparkan.</p>
|
||||
</div>
|
||||
|
||||
@if ($application === null)
|
||||
{{-- Generic response for unknown / internal-only UUIDs --}}
|
||||
<div class="content-panel p-3 p-md-4">
|
||||
<div class="d-flex gap-3 align-items-start">
|
||||
<div class="stat-icon text-bg-secondary">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="h5 mb-2">Status tidak dapat dipaparkan</h2>
|
||||
<p class="text-secondary mb-0">
|
||||
Tiada rekod permohonan yang aktif ditemui untuk pautan ini.
|
||||
Sila pastikan URL yang digunakan adalah betul.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
@php
|
||||
$statusConfig = match ($application->status) {
|
||||
'submitted' => ['label' => 'Menunggu Semakan', 'tone' => 'info', 'icon' => 'bi-hourglass-split'],
|
||||
'under_ppm_review' => ['label' => 'Sedang Disemak', 'tone' => 'warning', 'icon' => 'bi-eye'],
|
||||
'approved' => ['label' => 'Diluluskan', 'tone' => 'success', 'icon' => 'bi-check-circle'],
|
||||
'assigned' => ['label' => 'Diluluskan & Ditempatkan', 'tone' => 'success', 'icon' => 'bi-person-check'],
|
||||
'rejected' => ['label' => 'Ditolak', 'tone' => 'danger', 'icon' => 'bi-x-circle'],
|
||||
'cancelled' => ['label' => 'Dibatalkan', 'tone' => 'secondary', 'icon' => 'bi-slash-circle'],
|
||||
default => ['label' => ucfirst($application->status), 'tone' => 'secondary', 'icon' => 'bi-circle'],
|
||||
};
|
||||
@endphp
|
||||
|
||||
<div class="content-panel p-3 p-md-4">
|
||||
<div class="d-flex gap-3 align-items-start mb-4">
|
||||
<div class="stat-icon text-bg-{{ $statusConfig['tone'] }}">
|
||||
<i class="bi {{ $statusConfig['icon'] }}"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="h5 mb-1">{{ $statusConfig['label'] }}</h2>
|
||||
<p class="text-secondary mb-0 small">
|
||||
Dikemaskini: {{ $application->updated_at?->format('d/m/Y H:i') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<dl class="row mb-0">
|
||||
<dt class="col-sm-4 text-secondary small">Nama (disamarkan)</dt>
|
||||
<dd class="col-sm-8 fw-semibold">{{ $maskedName }}</dd>
|
||||
|
||||
<dt class="col-sm-4 text-secondary small">Jawatan Dipohon</dt>
|
||||
<dd class="col-sm-8">
|
||||
{{ $application->requestedPosition?->name ?? '-' }}
|
||||
</dd>
|
||||
|
||||
@if ($application->approvedPosition && $application->approvedPosition->id !== $application->requestedPosition?->id)
|
||||
<dt class="col-sm-4 text-secondary small">Jawatan Diluluskan</dt>
|
||||
<dd class="col-sm-8">{{ $application->approvedPosition->name }}</dd>
|
||||
@endif
|
||||
|
||||
<dt class="col-sm-4 text-secondary small">Pusat Mengundi</dt>
|
||||
<dd class="col-sm-8">{{ $application->pusatMengundi?->name ?? '-' }}</dd>
|
||||
|
||||
<dt class="col-sm-4 text-secondary small">Status</dt>
|
||||
<dd class="col-sm-8">
|
||||
<span class="badge text-bg-{{ $statusConfig['tone'] }}">
|
||||
{{ $statusConfig['label'] }}
|
||||
</span>
|
||||
</dd>
|
||||
|
||||
@if ($application->status === 'rejected' && $application->rejection_reason)
|
||||
<dt class="col-sm-4 text-secondary small">Sebab Penolakan</dt>
|
||||
<dd class="col-sm-8 text-danger">{{ $application->rejection_reason }}</dd>
|
||||
@endif
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<p class="text-secondary small mt-3">
|
||||
<i class="bi bi-shield-lock me-1"></i>
|
||||
Untuk pertanyaan lanjut, hubungi pentadbir pilihanraya dengan menyertakan nombor rujukan anda:
|
||||
<code>{{ $application->public_uuid }}</code>
|
||||
</p>
|
||||
@endif
|
||||
@endsection
|
||||
49
resources/views/public/applications/success.blade.php
Normal file
49
resources/views/public/applications/success.blade.php
Normal file
@@ -0,0 +1,49 @@
|
||||
@extends('layouts.public')
|
||||
|
||||
@section('title', 'Permohonan Diterima')
|
||||
|
||||
@section('content')
|
||||
<div class="page-heading">
|
||||
<div class="eyebrow">Pendaftaran Awam</div>
|
||||
<h1 class="h3 mb-1">Permohonan Diterima</h1>
|
||||
<p class="text-secondary mb-0">Rujukan: <code>{{ $application->public_uuid }}</code></p>
|
||||
</div>
|
||||
|
||||
<div class="content-panel p-3 p-md-4">
|
||||
<div class="d-flex gap-3 align-items-start">
|
||||
<div class="stat-icon text-bg-success">
|
||||
<i class="bi bi-check2-circle"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="h5 mb-2">Rekod permohonan telah disimpan</h2>
|
||||
<dl class="row mb-0">
|
||||
<dt class="col-sm-4">Pusat Mengundi</dt>
|
||||
<dd class="col-sm-8">{{ $application->pusatMengundi?->name }}</dd>
|
||||
<dt class="col-sm-4">Jawatan Dipohon</dt>
|
||||
<dd class="col-sm-8">{{ $application->requestedPosition?->code }} - {{ $application->requestedPosition?->name }}</dd>
|
||||
<dt class="col-sm-4">Status</dt>
|
||||
<dd class="col-sm-8"><span class="badge text-bg-info">Menunggu Semakan</span></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-panel p-3 p-md-4 mt-3">
|
||||
<h2 class="h6 mb-2"><i class="bi bi-bookmark me-1"></i>Simpan pautan status anda</h2>
|
||||
<p class="text-secondary small mb-2">
|
||||
Gunakan pautan berikut untuk semak status permohonan anda pada bila-bila masa tanpa perlu log masuk.
|
||||
</p>
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" class="form-control font-monospace"
|
||||
value="{{ route('public.applications.status', $application->public_uuid) }}"
|
||||
id="statusUrl" readonly>
|
||||
<button class="btn btn-outline-secondary" type="button"
|
||||
onclick="navigator.clipboard.writeText(document.getElementById('statusUrl').value)">
|
||||
<i class="bi bi-clipboard"></i> Salin
|
||||
</button>
|
||||
</div>
|
||||
<p class="text-secondary small mt-2 mb-0">
|
||||
Nombor rujukan: <code>{{ $application->public_uuid }}</code>
|
||||
</p>
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user