Update Alert Profil Petani
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
{{--
|
||||
Kelengkapan data (terisi X dari 209) + status Draf/Lengkap/Terverifikasi di kartu Profil Petani.
|
||||
Tombol "Tandai Lengkap" hanya untuk enumerator penginput, dan nonaktif selama isian wajib masih kosong.
|
||||
--}}
|
||||
@props(['petani'])
|
||||
|
||||
@use('App\Enums\StatusDataPetani')
|
||||
@use('App\Services\Produktivitas\KelengkapanPetani')
|
||||
|
||||
@php
|
||||
$kelengkapan = KelengkapanPetani::untuk($petani);
|
||||
$hitung = $kelengkapan->hitungIsian();
|
||||
$wajibKosong = $kelengkapan->jumlahWajibKosong();
|
||||
$status = $petani->status ?? StatusDataPetani::DRAFT;
|
||||
$bisaTandai = $petani->bisaDitandaiOleh(auth()->user());
|
||||
@endphp
|
||||
|
||||
<hr class="my-2">
|
||||
<div class="d-flex justify-content-between align-items-center mb-1">
|
||||
<h6 class="mb-0" style="font-size: 0.85rem;">Kelengkapan Data</h6>
|
||||
<span class="badge bg-label-{{ $status->warna() }}">{{ $status->label() }}</span>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between" style="font-size: 0.75rem;">
|
||||
<span>{{ $hitung['terisi'] }} dari {{ $hitung['total'] }} isian terisi</span>
|
||||
<span class="fw-medium">{{ $hitung['persen'] }}%</span>
|
||||
</div>
|
||||
<div class="progress my-1" style="height: 6px;">
|
||||
<div class="progress-bar {{ $hitung['persen'] >= 100 ? 'bg-success' : '' }}" role="progressbar"
|
||||
style="width: {{ $hitung['persen'] }}%;" aria-valuenow="{{ $hitung['persen'] }}" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.7rem;">
|
||||
@if ($hitung['tidak_berlaku'])
|
||||
{{ $hitung['tidak_berlaku'] }} isian tidak berlaku untuk petani ini.
|
||||
@endif
|
||||
@if ($wajibKosong)
|
||||
<span class="text-danger">{{ $wajibKosong }} isian wajib masih kosong.</span>
|
||||
@else
|
||||
<span class="text-success">Semua isian wajib sudah terisi.</span>
|
||||
@endif
|
||||
</p>
|
||||
|
||||
@if ($bisaTandai && $status === StatusDataPetani::DRAFT)
|
||||
<form method="POST" action="{{ route('petani.status.update', $petani->id) }}" class="form-status-petani mt-2"
|
||||
data-konfirmasi="Tandai data petani ini sudah lengkap? Koordinator akan memverifikasinya.">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="status" value="{{ StatusDataPetani::LENGKAP->value }}">
|
||||
<button type="submit" class="btn btn-sm btn-success w-100" @disabled($wajibKosong > 0)
|
||||
@if ($wajibKosong) title="Lengkapi {{ $wajibKosong }} isian wajib terlebih dahulu" @endif>
|
||||
<i class="icon-base ti tabler-checks icon-sm me-1"></i>Tandai Sudah Lengkap
|
||||
</button>
|
||||
</form>
|
||||
@elseif ($bisaTandai && $status === StatusDataPetani::LENGKAP)
|
||||
<form method="POST" action="{{ route('petani.status.update', $petani->id) }}" class="form-status-petani mt-2"
|
||||
data-konfirmasi="Batalkan tanda lengkap? Status kembali ke draf.">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="status" value="{{ StatusDataPetani::DRAFT->value }}">
|
||||
<button type="submit" class="btn btn-sm btn-outline-secondary w-100">
|
||||
<i class="icon-base ti tabler-arrow-back-up icon-sm me-1"></i>Batalkan Tanda Lengkap
|
||||
</button>
|
||||
</form>
|
||||
@elseif ($status === StatusDataPetani::DRAFT)
|
||||
<p class="mb-0 mt-1 text-muted fst-italic" style="font-size: 0.7rem;">Hanya enumerator penginput yang dapat menandai lengkap.</p>
|
||||
@elseif ($status === StatusDataPetani::LENGKAP)
|
||||
<p class="mb-0 mt-1 text-muted fst-italic" style="font-size: 0.7rem;">Menunggu verifikasi koordinator.</p>
|
||||
@endif
|
||||
|
||||
@once
|
||||
@push('scripts')
|
||||
<script>
|
||||
document.addEventListener('submit', function (e) {
|
||||
const form = e.target.closest('.form-status-petani');
|
||||
if (!form || form.dataset.terkonfirmasi) return;
|
||||
|
||||
e.preventDefault();
|
||||
const kirim = () => { form.dataset.terkonfirmasi = '1'; form.submit(); };
|
||||
|
||||
if (!window.Swal) {
|
||||
if (confirm(form.dataset.konfirmasi)) kirim();
|
||||
return;
|
||||
}
|
||||
Swal.fire({
|
||||
icon: 'question',
|
||||
text: form.dataset.konfirmasi,
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Ya',
|
||||
cancelButtonText: 'Batal',
|
||||
}).then((r) => { if (r.isConfirmed) kirim(); });
|
||||
});
|
||||
|
||||
@if (session('status_petani_success') || session('status_petani_error'))
|
||||
window.addEventListener('load', function () {
|
||||
const pesan = @json(session('status_petani_success') ?? session('status_petani_error'));
|
||||
const ikon = @json(session('status_petani_success') ? 'success' : 'error');
|
||||
window.Swal ? Swal.fire({ icon: ikon, text: pesan }) : alert(pesan);
|
||||
});
|
||||
@endif
|
||||
</script>
|
||||
@endpush
|
||||
@endonce
|
||||
Reference in New Issue
Block a user