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,128 @@
@extends('layouts.app')
@section('title', 'Import Pusat Mengundi')
@section('content')
<div class="page-heading">
<div class="eyebrow">Admin · Setup</div>
<h1 class="h3 mb-1">Import Pusat Mengundi</h1>
<p class="text-secondary mb-0">Upload fail XLSX untuk mencipta DUN, Pusat Mengundi, Saluran, dan Kuota secara automatik.</p>
</div>
@include('admin.setup._nav')
@if (session('import_errors'))
<div class="alert alert-warning" role="alert">
<div class="fw-semibold mb-1">Beberapa baris tidak dapat diimport:</div>
<ul class="mb-0 small">
@foreach (session('import_errors') as $err)
<li>{{ $err }}</li>
@endforeach
</ul>
</div>
@endif
<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">Borang Import</h2>
<form method="POST" action="{{ route('admin.setup.import.store') }}" enctype="multipart/form-data">
@csrf
<div class="mb-3">
<label for="election_id" class="form-label fw-semibold">Pilihan Raya</label>
<select id="election_id" name="election_id" class="form-select @error('election_id') is-invalid @enderror" required>
<option value="">Pilih pilihan raya</option>
@foreach ($elections as $election)
<option value="{{ $election->id }}" @selected(old('election_id') == $election->id)>
{{ $election->name }}
</option>
@endforeach
</select>
@error('election_id')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="row g-3 mb-3">
<div class="col-md-4">
<label for="dun_code" class="form-label fw-semibold">Kod DUN</label>
<input id="dun_code" type="text" name="dun_code" value="{{ old('dun_code', 'N49') }}"
class="form-control @error('dun_code') is-invalid @enderror" maxlength="20"
placeholder="cth: N49" required>
@error('dun_code')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-8">
<label for="dun_name" class="form-label fw-semibold">Nama DUN</label>
<input id="dun_name" type="text" name="dun_name" value="{{ old('dun_name', 'Kota Iskandar') }}"
class="form-control @error('dun_name') is-invalid @enderror" maxlength="255"
placeholder="cth: Kota Iskandar" required>
@error('dun_name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="mb-4">
<label for="file" class="form-label fw-semibold">Fail XLSX Senarai Pusat Mengundi</label>
<input id="file" type="file" name="file" accept=".xlsx"
class="form-control @error('file') is-invalid @enderror" required>
<div class="form-text">Format: .xlsx sahaja, saiz maksimum 10MB.</div>
@error('file')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="alert alert-warning py-2 small" role="alert">
<i class="bi bi-exclamation-triangle me-1"></i>
<strong>Amaran:</strong> Import akan <strong>menggantikan</strong> semua data Pusat Mengundi, Saluran, dan Kuota sedia ada untuk DUN yang sama. Pastikan fail betul sebelum teruskan.
</div>
<div class="d-flex justify-content-end gap-2 mt-3">
<a href="{{ route('admin.setup.index') }}" class="btn btn-outline-secondary">Batal</a>
<button type="submit" class="btn btn-success">
<i class="bi bi-upload me-1"></i>Import Data
</button>
</div>
</form>
</div>
</div>
<div class="col-12 col-xl-5">
<div class="content-panel p-3 p-md-4 h-100">
<h2 class="h5 mb-3">Format Fail XLSX</h2>
<p class="text-secondary small mb-2">Fail mesti mempunyai lajur mengikut susunan berikut (baris pertama = tajuk):</p>
<div class="table-responsive">
<table class="table table-sm table-bordered small">
<thead class="table-light">
<tr>
<th>Lajur</th>
<th>Nama</th>
<th>Keterangan</th>
</tr>
</thead>
<tbody>
<tr><td>A</td><td>SEKOLAH</td><td>Nama Pusat Mengundi</td></tr>
<tr><td>B</td><td>NAMA PPM</td><td>Nama PPM (simpan sebagai metadata)</td></tr>
<tr><td>C</td><td>SALURAN</td><td>Bilangan saluran (nombor)</td></tr>
<tr><td>DF</td><td>KTM, POLIS, KP</td><td>Dikira automatik dari bilangan saluran</td></tr>
<tr><td>G</td><td>PPM</td><td>Kuota PPM per pusat (0 atau 1)</td></tr>
<tr><td>H</td><td>KPDP</td><td>Dikira automatik</td></tr>
<tr><td>I</td><td>PAPM</td><td>Kuota PAPM per pusat (nombor)</td></tr>
<tr><td>J</td><td>JKM</td><td>Kuota JKM per pusat</td></tr>
<tr><td>K</td><td>KKM</td><td>Kuota KKM per pusat</td></tr>
<tr><td>L</td><td>TAMBAHAN</td><td>Dikira automatik</td></tr>
<tr><td>M</td><td>NO TELEFON</td><td>Telefon PPM (simpan sebagai metadata)</td></tr>
</tbody>
</table>
</div>
<p class="text-secondary small mt-2 mb-0">
Lajur dengan formula Excel (KTM, POLIS, KP, KPDP, TAMBAHAN) dikira semula secara automatik berdasarkan bilangan saluran nilai asal dalam fail diabaikan.
</p>
</div>
</div>
</div>
@endsection