This commit is contained in:
Saufi
2026-06-03 08:51:22 +08:00
commit a14d43fe34
347 changed files with 38197 additions and 0 deletions

View File

@@ -0,0 +1,213 @@
@extends('layouts.app')
@section('title', 'Tetapan Pilihanraya')
@section('content')
<div class="page-heading">
<div class="eyebrow">Admin · Setup</div>
<div class="d-flex justify-content-between flex-column flex-lg-row gap-3">
<div>
<h1 class="h3 mb-1">Tetapan Pilihanraya</h1>
<p class="text-secondary mb-0">{{ $election->name }} · Kawalan tarikh, mod kehadiran, dan pendaftaran.</p>
</div>
</div>
</div>
@include('admin.setup._nav')
<div class="row g-3">
{{-- Status semasa --}}
<div class="col-12 col-xl-4">
<div class="content-panel p-3 p-md-4 h-100">
<h2 class="h5 mb-3">Status Semasa</h2>
@if ($election->settings)
<dl class="mb-0">
<dt class="text-secondary small">Pilihanraya</dt>
<dd class="mb-3">{{ $election->name }}</dd>
<dt class="text-secondary small">Tarikh Daftar Buka</dt>
<dd class="mb-3">{{ $election->settings->registration_start_date?->format('d/m/Y') ?? '-' }}</dd>
<dt class="text-secondary small">Tarikh Daftar Tutup</dt>
<dd class="mb-3">{{ $election->settings->registration_end_date?->format('d/m/Y') ?? '-' }}</dd>
<dt class="text-secondary small">Tarikh Mengundi</dt>
<dd class="mb-3">{{ $election->settings->polling_date?->format('d/m/Y') ?? '-' }}</dd>
<dt class="text-secondary small">Status Pendaftaran</dt>
<dd class="mb-3">
@if ($isRegistrationOpen)
<span class="badge text-bg-success"><i class="bi bi-door-open me-1"></i>Dibuka</span>
@else
<span class="badge text-bg-secondary"><i class="bi bi-door-closed me-1"></i>Ditutup</span>
@endif
@if ($election->settings->is_registration_open_override !== null)
<span class="badge text-bg-warning ms-1"><i class="bi bi-exclamation-triangle me-1"></i>Override aktif</span>
@endif
</dd>
<dt class="text-secondary small">Mod Kehadiran</dt>
<dd class="mb-0">
@if ($election->settings->is_attendance_active)
<span class="badge text-bg-success"><i class="bi bi-check-circle me-1"></i>Aktif</span>
@else
<span class="badge text-bg-secondary"><i class="bi bi-dash-circle me-1"></i>Tidak aktif</span>
@endif
</dd>
</dl>
@else
<p class="text-secondary small mb-0">Tiada tetapan lagi. Isikan borang untuk mencipta tetapan baru.</p>
@endif
</div>
</div>
{{-- Borang tetapan --}}
<div class="col-12 col-xl-8">
<div class="content-panel p-3 p-md-4">
<h2 class="h5 mb-3">{{ $election->settings ? 'Kemaskini Tetapan' : 'Tetapan Baru' }}</h2>
@php
$isNew = $election->settings === null;
$formAction = $isNew
? route('admin.setup.settings.store', $election)
: route('admin.setup.settings.update', $election);
@endphp
<form method="POST" action="{{ $formAction }}">
@csrf
@unless ($isNew) @method('PATCH') @endunless
{{-- Tarikh --}}
<div class="row g-3 mb-4">
<div class="col-12 col-md-4">
<label for="registration_start_date" class="form-label fw-semibold">Tarikh Daftar Buka</label>
<input type="date" class="form-control @error('registration_start_date') is-invalid @enderror"
id="registration_start_date" name="registration_start_date"
value="{{ old('registration_start_date', $election->settings?->registration_start_date?->format('Y-m-d')) }}">
@error('registration_start_date')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-12 col-md-4">
<label for="registration_end_date" class="form-label fw-semibold">Tarikh Daftar Tutup</label>
<input type="date" class="form-control @error('registration_end_date') is-invalid @enderror"
id="registration_end_date" name="registration_end_date"
value="{{ old('registration_end_date', $election->settings?->registration_end_date?->format('Y-m-d')) }}">
@error('registration_end_date')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-12 col-md-4">
<label for="polling_date" class="form-label fw-semibold">Tarikh Mengundi</label>
<input type="date" class="form-control @error('polling_date') is-invalid @enderror"
id="polling_date" name="polling_date"
value="{{ old('polling_date', $election->settings?->polling_date?->format('Y-m-d')) }}">
@error('polling_date')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<hr>
{{-- Mod Kehadiran --}}
<div class="mb-4">
<label class="form-label fw-semibold">Mod Kehadiran</label>
<p class="text-secondary small mb-2">
Apabila diaktifkan, PPM boleh merekod kehadiran staf pada skrin kehadiran.
Aktifkan hanya pada hari mengundi.
</p>
<div class="d-flex gap-3">
<div class="form-check">
<input class="form-check-input" type="radio" name="is_attendance_active"
id="attendance_off" value="0"
{{ old('is_attendance_active', $election->settings?->is_attendance_active ? '1' : '0') === '0' ? 'checked' : '' }}>
<label class="form-check-label" for="attendance_off">
<span class="badge text-bg-secondary"><i class="bi bi-dash-circle me-1"></i>Tidak aktif</span>
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="is_attendance_active"
id="attendance_on" value="1"
{{ old('is_attendance_active', $election->settings?->is_attendance_active ? '1' : '0') === '1' ? 'checked' : '' }}>
<label class="form-check-label" for="attendance_on">
<span class="badge text-bg-success"><i class="bi bi-check-circle me-1"></i>Aktif</span>
</label>
</div>
</div>
@error('is_attendance_active')
<div class="text-danger small mt-1">{{ $message }}</div>
@enderror
</div>
<hr>
{{-- Override Pendaftaran --}}
<div class="mb-4">
<label class="form-label fw-semibold">Override Tempoh Pendaftaran</label>
<p class="text-secondary small mb-2">
Secara lalai, sistem mengikut tarikh buka dan tutup pendaftaran yang ditetapkan.
Gunakan override hanya apabila perlu buka atau tutup pendaftaran di luar tarikh tersebut.
</p>
@php
$currentOverride = old('is_registration_open_override',
$election->settings?->is_registration_open_override === null
? ''
: ($election->settings->is_registration_open_override ? '1' : '0')
);
@endphp
<div class="d-flex flex-wrap gap-3">
<div class="form-check">
<input class="form-check-input" type="radio" name="is_registration_open_override"
id="override_auto" value=""
{{ $currentOverride === '' ? 'checked' : '' }}>
<label class="form-check-label" for="override_auto">
<span class="fw-semibold">Auto</span>
<div class="text-secondary small">Ikut tarikh buka/tutup pendaftaran</div>
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="is_registration_open_override"
id="override_open" value="1"
{{ $currentOverride === '1' ? 'checked' : '' }}>
<label class="form-check-label" for="override_open">
<span class="fw-semibold text-success">Buka Paksa</span>
<div class="text-secondary small">Buka walaupun di luar tempoh tarikh</div>
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="is_registration_open_override"
id="override_closed" value="0"
{{ $currentOverride === '0' ? 'checked' : '' }}>
<label class="form-check-label" for="override_closed">
<span class="fw-semibold text-danger">Tutup Paksa</span>
<div class="text-secondary small">Tutup walaupun dalam tempoh tarikh</div>
</label>
</div>
</div>
@error('is_registration_open_override')
<div class="text-danger small mt-1">{{ $message }}</div>
@enderror
</div>
@if ($election->settings?->is_registration_open_override !== null)
<div class="alert alert-warning py-2" role="alert">
<i class="bi bi-exclamation-triangle me-2"></i>
Override sedang aktif. Tetapkan semula ke <strong>Auto</strong> untuk kembali kepada kawalan tarikh biasa.
</div>
@endif
<div class="d-flex justify-content-end gap-2 mt-3">
<a class="btn btn-outline-secondary" href="{{ route('admin.setup.index') }}">Kembali</a>
<button class="btn btn-primary" type="submit">
<i class="bi bi-save me-1"></i>{{ $isNew ? 'Cipta Tetapan' : 'Simpan Tetapan' }}
</button>
</div>
</form>
</div>
</div>
</div>
@endsection