54 lines
3.7 KiB
PHP
54 lines
3.7 KiB
PHP
@extends('layouts.app')
|
|
@section('title', 'Import Hadiah')
|
|
|
|
@section('content')
|
|
@php $result = session('import_result') ? \App\Models\ImportLog::find(session('import_result')) : null; @endphp
|
|
<div class="row g-3">
|
|
<div class="col-lg-5">
|
|
<div class="card"><div class="card-body">
|
|
<h5 class="fw-bold"><i class="bi bi-upload text-teal"></i> Muat Naik Fail</h5>
|
|
<p class="text-muted small">Format CSV atau XLSX. Lajur: <code>kod_hadiah, nama_hadiah, kategori, nilai_anggaran, susunan_cabutan, kuantiti</code>.
|
|
Jika <b>kuantiti > 1</b>, sistem akan jana beberapa item berasingan (cth Hamper #1 … #5).
|
|
Data lama akan <b>ditulis ganti</b> jika <code>susunan_cabutan</code> adalah nombor yang sama (kecuali yang sudah ada pemenang disahkan).</p>
|
|
<form method="POST" action="{{ route('admin.prizes.import.store') }}" enctype="multipart/form-data">
|
|
@csrf
|
|
<input type="file" name="file" class="form-control mb-2 @error('file') is-invalid @enderror" accept=".csv,.xlsx,.xls" required>
|
|
@error('file')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
|
<button class="btn btn-teal w-100"><i class="bi bi-cloud-upload"></i> Import Sekarang</button>
|
|
</form>
|
|
<a href="{{ asset('samples/contoh-hadiah.csv') }}" class="btn btn-sm btn-link mt-2"><i class="bi bi-download"></i> Muat turun templat contoh</a>
|
|
</div></div>
|
|
</div>
|
|
<div class="col-lg-7">
|
|
@if($result)
|
|
<div class="card mb-3 border-start border-4 border-success"><div class="card-body">
|
|
<h6 class="fw-bold">Ringkasan Import: {{ $result->filename }}</h6>
|
|
<div class="row text-center g-2 my-2">
|
|
<div class="col"><div class="stat-card bg-teal py-2"><div class="value fs-4">{{ $result->total_rows }}</div><div class="label">Baris</div></div></div>
|
|
<div class="col"><div class="stat-card bg-green py-2"><div class="value fs-4">{{ $result->success_count }}</div><div class="label">Item Dijana</div></div></div>
|
|
<div class="col"><div class="stat-card bg-gold py-2"><div class="value fs-4">{{ $result->duplicate_count }}</div><div class="label">Ditulis Ganti</div></div></div>
|
|
<div class="col"><div class="stat-card bg-red py-2"><div class="value fs-4">{{ $result->failed_count }}</div><div class="label">Gagal</div></div></div>
|
|
</div>
|
|
@if($result->errors)
|
|
<details><summary class="text-danger">Lihat {{ count($result->errors) }} isu</summary>
|
|
<ul class="small mt-2 mb-0">@foreach($result->errors as $e)<li>{{ $e }}</li>@endforeach</ul></details>
|
|
@endif
|
|
</div></div>
|
|
@endif
|
|
<div class="card"><div class="card-body">
|
|
<h6 class="fw-bold"><i class="bi bi-clock-history"></i> Log Import Terkini</h6>
|
|
<table class="table table-sm align-middle">
|
|
<thead><tr><th>Fail</th><th>Item</th><th>Gagal</th><th>Oleh</th><th>Masa</th></tr></thead>
|
|
<tbody>
|
|
@forelse($logs as $log)
|
|
<tr><td>{{ $log->filename }}</td><td class="text-success">{{ $log->success_count }}</td>
|
|
<td class="text-danger">{{ $log->failed_count }}</td><td>{{ $log->importedBy?->name ?? '-' }}</td>
|
|
<td><small>{{ $log->created_at->format('d/m H:i') }}</small></td></tr>
|
|
@empty<tr><td colspan="5" class="text-center text-muted">Belum ada import.</td></tr>@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div></div>
|
|
</div>
|
|
</div>
|
|
@endsection
|