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,48 @@
<div class="row g-3">
<div class="col-md-6">
<label class="form-label" for="assign_position_id">Jawatan</label>
<select class="form-select" id="assign_position_id" name="position_id" required>
@foreach ($positions as $position)
<option value="{{ $position->id }}" @selected(old('position_id', $application->approved_position_id ?: $application->requested_position_id) == $position->id)>{{ $position->code }} - {{ $position->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="assign_pusat_mengundi_id">Pusat Mengundi</label>
<select class="form-select" id="assign_pusat_mengundi_id" name="pusat_mengundi_id" required>
@foreach ($pusats as $pusat)
<option value="{{ $pusat->id }}" @selected(old('pusat_mengundi_id', $application->pusat_mengundi_id) == $pusat->id)>{{ $pusat->code }} - {{ $pusat->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="assign_saluran_mengundi_id">Saluran</label>
<select class="form-select" id="assign_saluran_mengundi_id" name="saluran_mengundi_id">
<option value="">Pusat level / ikut KTM</option>
@foreach ($salurans as $saluran)
<option value="{{ $saluran->id }}" @selected(old('saluran_mengundi_id', $application->staffAssignments->first()?->saluran_mengundi_id) == $saluran->id)>{{ $saluran->pusatMengundi?->code }} - Saluran {{ $saluran->number }}</option>
@endforeach
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="reports_to_assignment_id">KTM Ketua</label>
<select class="form-select" id="reports_to_assignment_id" name="reports_to_assignment_id">
<option value="">Tiada</option>
@foreach ($ktmAssignments as $ktm)
<option value="{{ $ktm->id }}" @selected(old('reports_to_assignment_id', $application->selected_ktm_assignment_id) == $ktm->id)>{{ $ktm->user?->name ?? 'KTM' }} - {{ $ktm->pusatMengundi?->code }} / Saluran {{ $ktm->saluranMengundi?->number }}</option>
@endforeach
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="assign_status">Status Tugasan</label>
<select class="form-select" id="assign_status" name="status">
@foreach (['active', 'inactive', 'replaced', 'cancelled'] as $status)
<option value="{{ $status }}">{{ $status }}</option>
@endforeach
</select>
</div>
<div class="col-12">
<label class="form-label" for="assign_note">Catatan</label>
<textarea class="form-control" id="assign_note" name="note" rows="2" placeholder="Wajib selepas tempoh pendaftaran ditutup">{{ old('note') }}</textarea>
</div>
</div>

View File

@@ -0,0 +1,86 @@
@php($isEdit = $application->exists)
<div class="row g-3">
@unless($isEdit)
<div class="col-md-6">
<label class="form-label" for="election_id">Pilihanraya</label>
<select class="form-select" id="election_id" name="election_id" required>
@foreach ($elections as $election)
<option value="{{ $election->id }}" @selected(old('election_id', $application->election_id) == $election->id)>{{ $election->name }}</option>
@endforeach
</select>
</div>
@endunless
<div class="col-md-6">
<label class="form-label" for="pusat_mengundi_id">Pusat Mengundi</label>
<select class="form-select" id="pusat_mengundi_id" name="pusat_mengundi_id" required>
@foreach ($pusats as $pusat)
<option value="{{ $pusat->id }}" @selected(old('pusat_mengundi_id', $application->pusat_mengundi_id) == $pusat->id)>{{ $pusat->code }} - {{ $pusat->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="requested_position_id">Jawatan Dipohon</label>
<select class="form-select" id="requested_position_id" name="requested_position_id" required>
@foreach ($positions as $position)
<option value="{{ $position->id }}" @selected(old('requested_position_id', $application->requested_position_id) == $position->id)>{{ $position->code }} - {{ $position->name }}</option>
@endforeach
</select>
</div>
@if($isEdit)
<div class="col-md-6">
<label class="form-label" for="approved_position_id">Jawatan Diluluskan</label>
<select class="form-select" id="approved_position_id" name="approved_position_id">
<option value="">Belum diluluskan</option>
@foreach ($positions as $position)
<option value="{{ $position->id }}" @selected(old('approved_position_id', $application->approved_position_id) == $position->id)>{{ $position->code }} - {{ $position->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6">
<label class="form-label" for="status">Status</label>
<select class="form-select" id="status" name="status" required>
@foreach (['draft', 'submitted', 'under_ppm_review', 'approved', 'rejected', 'assigned', 'cancelled'] as $status)
<option value="{{ $status }}" @selected(old('status', $application->status) === $status)>{{ str_replace('_', ' ', $status) }}</option>
@endforeach
</select>
</div>
@endif
<div class="col-md-6">
<label class="form-label" for="name">Nama</label>
<input class="form-control" id="name" name="name" value="{{ old('name', $application->name) }}" required>
</div>
<div class="col-md-6">
<label class="form-label" for="ic_number">No. IC</label>
<input class="form-control" id="ic_number" name="ic_number" value="{{ old('ic_number', $application->ic_number) }}" maxlength="12" required>
</div>
<div class="col-md-6">
<label class="form-label" for="phone_number">Telefon</label>
<input class="form-control" id="phone_number" name="phone_number" value="{{ old('phone_number', $application->phone_number) }}" required>
</div>
<div class="col-md-6">
<label class="form-label" for="email">Email</label>
<input class="form-control" id="email" name="email" type="email" value="{{ old('email', $application->email) }}">
</div>
<div class="col-12">
<label class="form-label" for="address">Alamat</label>
<textarea class="form-control" id="address" name="address" rows="2">{{ old('address', $application->address) }}</textarea>
</div>
<div class="col-md-6">
<label class="form-label" for="bank_name">Bank</label>
<input class="form-control" id="bank_name" name="bank_name" value="{{ old('bank_name', $application->bank_name) }}">
</div>
<div class="col-md-6">
<label class="form-label" for="bank_account_number">No. Akaun Bank</label>
<input class="form-control" id="bank_account_number" name="bank_account_number" value="{{ old('bank_account_number', $application->bank_account_number) }}">
</div>
<div class="col-12">
<label class="form-label" for="note">Catatan</label>
<textarea class="form-control" id="note" name="note" rows="2" placeholder="Wajib selepas tempoh pendaftaran ditutup">{{ old('note') }}</textarea>
</div>
</div>

View File

@@ -0,0 +1,24 @@
@extends('layouts.app')
@section('title', 'Manual Entry')
@section('content')
<div class="page-heading">
<div class="eyebrow">Admin</div>
<h1 class="h3 mb-1">Manual Entry Permohonan</h1>
<p class="text-secondary mb-0">Rekod yang dimasukkan Admin tidak menghantar email permintaan butiran bank.</p>
</div>
@include('admin.management._nav')
<div class="content-panel p-3 p-md-4">
<form method="POST" action="{{ route('admin.management.applications.store') }}">
@csrf
@include('admin.management.applications._form')
<div class="d-flex justify-content-end gap-2 mt-4">
<a class="btn btn-outline-secondary" href="{{ route('admin.management.applications.index') }}">Batal</a>
<button class="btn btn-primary" type="submit"><i class="bi bi-save me-1"></i>Simpan</button>
</div>
</form>
</div>
@endsection

View File

@@ -0,0 +1,77 @@
@extends('layouts.app')
@section('title', 'Edit Permohonan')
@section('content')
<div class="page-heading">
<div class="eyebrow">Admin</div>
<div class="d-flex justify-content-between flex-column flex-lg-row gap-3">
<div>
<h1 class="h3 mb-1">Edit Permohonan</h1>
<p class="text-secondary mb-0">{{ $application->name }} · {{ $application->public_uuid }}</p>
</div>
</div>
</div>
@include('admin.management._nav')
<div class="row g-3">
<div class="col-12 col-xl-7">
<div class="content-panel p-3 p-md-4">
<h2 class="h5 mb-3">Maklumat Pemohon</h2>
<form method="POST" action="{{ route('admin.management.applications.update', $application->public_uuid) }}">
@csrf
@method('PATCH')
@include('admin.management.applications._form')
<div class="d-flex justify-content-end gap-2 mt-4">
<a class="btn btn-outline-secondary" href="{{ route('admin.management.applications.index') }}">Kembali</a>
<button class="btn btn-primary" type="submit"><i class="bi bi-save me-1"></i>Kemas Kini</button>
</div>
</form>
</div>
</div>
<div class="col-12 col-xl-5">
<div class="content-panel p-3 p-md-4">
<h2 class="h5 mb-3">Direct Assignment</h2>
<form method="POST" action="{{ route('admin.management.applications.assign', $application->public_uuid) }}">
@csrf
@include('admin.management.applications._assignment_form')
<div class="d-flex justify-content-end mt-4">
<button class="btn btn-primary" type="submit"><i class="bi bi-person-check me-1"></i>Assign</button>
</div>
</form>
</div>
<div class="content-panel p-3 p-md-4 mt-3">
<h2 class="h6 mb-3">Sejarah Status</h2>
<div class="list-group list-group-flush">
@forelse ($application->statusHistories->sortByDesc('created_at') as $history)
<div class="list-group-item px-0">
<div class="fw-semibold">{{ $history->from_status ?: '-' }} {{ $history->to_status }}</div>
<div class="text-secondary small">{{ $history->created_at?->format('d/m/Y H:i') }} · {{ $history->note ?: '-' }}</div>
</div>
@empty
<div class="text-secondary">Tiada sejarah.</div>
@endforelse
</div>
</div>
<div class="content-panel p-3 p-md-4 mt-3">
<h2 class="h6 mb-3">Dokumen</h2>
@forelse ($application->documents as $document)
<div class="d-flex justify-content-between align-items-center border-bottom py-2">
<div>
<div class="fw-semibold">{{ str_replace('_', ' ', $document->document_type) }}</div>
<div class="small text-secondary">{{ $document->original_name }}</div>
</div>
<a class="btn btn-sm btn-outline-primary" href="{{ route('admin.documents.download', $document) }}">
<i class="bi bi-download me-1"></i>Muat turun
</a>
</div>
@empty
<div class="text-secondary">Tiada dokumen dimuat naik.</div>
@endforelse
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,87 @@
@extends('layouts.app')
@section('title', 'Senarai Permohonan')
@section('content')
<div class="page-heading">
<div class="eyebrow">Admin</div>
<div class="d-flex justify-content-between flex-column flex-lg-row gap-3">
<div>
<h1 class="h3 mb-1">Senarai Permohonan</h1>
<p class="text-secondary mb-0">Paparan global untuk semakan, edit, dan direct assignment.</p>
</div>
<div><a class="btn btn-primary" href="{{ route('admin.management.applications.create') }}"><i class="bi bi-plus-circle me-1"></i>Manual Entry</a></div>
</div>
</div>
@include('admin.management._nav')
<div class="content-panel p-3 mb-3">
<form class="row g-2" method="GET">
<div class="col-12 col-md-3"><input class="form-control" name="q" value="{{ $filters['q'] ?? '' }}" placeholder="Cari nama / IC / email"></div>
<div class="col-6 col-md-3">
<select class="form-select" name="status">
<option value="">Semua status</option>
@foreach (['submitted', 'under_ppm_review', 'approved', 'assigned', 'rejected', 'cancelled'] as $status)
<option value="{{ $status }}" @selected(($filters['status'] ?? '') === $status)>{{ str_replace('_', ' ', $status) }}</option>
@endforeach
</select>
</div>
<div class="col-6 col-md-3">
<select class="form-select" name="pusat_mengundi_id">
<option value="">Semua pusat</option>
@foreach ($pusats as $pusat)
<option value="{{ $pusat->id }}" @selected(($filters['pusat_mengundi_id'] ?? '') == $pusat->id)>{{ $pusat->code }} - {{ $pusat->name }}</option>
@endforeach
</select>
</div>
<div class="col-6 col-md-2">
<select class="form-select" name="position_id">
<option value="">Semua jawatan</option>
@foreach ($positions as $position)
<option value="{{ $position->id }}" @selected(($filters['position_id'] ?? '') == $position->id)>{{ $position->code }}</option>
@endforeach
</select>
</div>
<div class="col-6 col-md-1"><button class="btn btn-outline-primary w-100" type="submit"><i class="bi bi-search"></i></button></div>
</form>
</div>
<div class="content-panel p-0 overflow-hidden">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead>
<tr>
<x-sort-th column="name" label="Nama" />
<th>Pusat</th>
<th>Jawatan</th>
<x-sort-th column="status" label="Status" />
<th>Sumber</th>
<x-sort-th column="created_at" label="Tarikh" />
<th class="text-end no-sort">Tindakan</th>
</tr>
</thead>
<tbody>
@forelse ($applications as $application)
<tr>
<td>
<div class="fw-semibold">{{ $application->name }}</div>
<div class="text-secondary small">{{ $application->ic_number }} · {{ $application->email ?: '-' }}</div>
</td>
<td>{{ $application->pusatMengundi?->code }}<div class="small text-secondary">{{ $application->pusatMengundi?->name }}</div></td>
<td>{{ $application->approvedPosition?->code ?: $application->requestedPosition?->code }}</td>
<td><span class="badge text-bg-secondary">{{ str_replace('_', ' ', $application->status) }}</span></td>
<td>{{ $application->source }}</td>
<td class="small text-secondary">{{ $application->created_at?->format('d/m/Y') }}</td>
<td class="text-end"><a class="btn btn-sm btn-outline-primary" href="{{ route('admin.management.applications.edit', $application->public_uuid) }}">Edit</a></td>
</tr>
@empty
<tr><td colspan="7" class="text-center text-secondary py-4">Tiada permohonan dijumpai.</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
<div class="mt-3">{{ $applications->links() }}</div>
@endsection