@extends('layouts.app') @section('title', 'Kelola Ujian') @section('content') @php $tabs = [ 'master' => ['Tahun & Jenis Ujian', 'bi-calendar2-week'], 'pembagian' => ['Pembagian Penyusunan', 'bi-person-workspace'], 'form' => ['Form Pemesanan', 'bi-ui-checks'], 'pesanan' => ['Daftar Pemesanan', 'bi-inboxes'], 'paket' => ['Harga Paket & Pembagian Hasil', 'bi-tags'], 'pembayaran' => ['Monitoring Pembayaran', 'bi-wallet2'], ]; $rp = fn ($value) => 'Rp '.number_format((float) $value, 0, ',', '.'); @endphp

Admin KabupatenKelola Ujian

Kelola Ujian

Atur pembagian penyusunan naskah, pemesanan soal, paket, dan pembayaran ujian.

Pesanan tercatat{{ number_format($orders->total(), 0, ',', '.') }} pesanan
@if (session('status'))
{{ session('status') }}
@endif @if ($errors->any()) @endif

Total tagihan

{{ $rp($totalTagihan) }}

Pembayaran diterima

{{ $rp($totalDibayar) }}

Sisa tagihan

{{ $rp(max(0, (float) $totalTagihan - (float) $totalDibayar)) }}

@if ($tab === 'master')

Data Tahun Pelajaran & Jenis Ujian

Kelola pasangan ujian yang tersedia untuk pembagian dan pemesanan.

Daftar Tahun Pelajaran & Jenis Ujian

Tahun aktif menjadi pilihan utama untuk form ujian baru.

@csrf
@php $seenYearIds = []; $seenExamTypeIds = []; @endphp
@forelse ($masterPairs as $pair) @php $yearForm = 'year-update-'.$pair->tahun_id; $typeForm = 'type-update-'.$pair->jenis_id; $yearInput = 'year-name-'.$pair->tahun_id; $typeInput = 'type-name-'.$pair->jenis_id; $descriptionInput = 'type-description-'.$pair->jenis_id; $editYear = ! isset($seenYearIds[$pair->tahun_id]); $editType = ! isset($seenExamTypeIds[$pair->jenis_id]); $seenYearIds[$pair->tahun_id] = true; $seenExamTypeIds[$pair->jenis_id] = true; @endphp @empty @endforelse
Tahun PelajaranStatus TahunJenis UjianKeteranganAksi
@if ($editYear)
@csrf @method('PUT')
@else {{ $pair->tahun_pelajaran }} @endif
@if ($editYear) @else {{ $pair->aktif ? 'Aktif' : 'Tidak aktif' }} @endif @if ($editType)
@csrf @method('PUT')
@else {{ $pair->jenis_nama }} @endif
@if ($editType) @else {{ $pair->jenis_keterangan ?: '-' }} @endif
@if ($editYear)
@csrf @method('DELETE')
@endif @if ($editType)
@csrf @method('DELETE')
@endif
@csrf @method('DELETE')
Belum ada pasangan tahun pelajaran dan jenis ujian.
@csrf

Tambah Tahun dan Jenis Ujian

Isi periode dan jenis ujian sekaligus.

@elseif ($tab === 'pembagian') @php $packageTabs = [ 'A' => ['Paket A', 'Kelas 1–6'], 'B' => ['Paket B', 'Kelas 7–9'], 'C' => ['Paket C', 'Kelas 10–12'], ]; @endphp
@if ($selectedAssignmentYearId && $selectedAssignmentTypeId) Cetak kelas {{ $selectedAssignmentGrade }} @else Cetak pembagian @endif
@if ($selectedAssignmentYearId || $selectedAssignmentTypeId) Reset filter @endif
@if ($errors->any()) @endif @if (session('status'))
{{ session('status') }}
@endif @if ($selectedAssignmentYearId && $selectedAssignmentTypeId) @include('fk.ujian.partials.manual-assignment-table') @else
Pilih tahun pelajaran dan jenis ujian untuk melihat pemetaan penyusun.
@endif
@elseif ($tab === 'form')

Form Pemesanan Soal

Buat tautan pemesanan publik untuk PKBM. Pesanan yang masuk otomatis tercatat.

@csrf
@forelse ($forms as $form) @php $formUpdate = 'form-update-'.$form->id; @endphp @empty@endforelse
Form / PeriodeBatasPesananLink publikStatusAksi
@csrf @method('PUT')
{{ number_format($form->pesanan_count, 0, ',', '.') }}
@csrf @method('DELETE')
Belum ada form pemesanan.
@elseif ($tab === 'pesanan')

Hasil Pemesanan

Pesanan masuk dari seluruh form pemesanan ujian.

Cetak rekap pemesanan
@forelse ($orders as $order) @php $paid = (float) $order->dibayar; @endphp @if ($order->catatan)@endif @empty@endforelse
PKBM / PemesanUjianPaketTotalPembayaranTanggalAksi
{{ $order->nama_pkbm }}{{ $order->nama_pemesan }}{{ $order->kontak ? ' · '.$order->kontak : '' }} {{ $order->nama_ujian }}{{ $order->tahun_pelajaran }} {{ $order->nama_paket }} × {{ $order->jumlah }}@if ($order->kelas_detail->isNotEmpty()){{ $order->kelas_detail->map(fn ($detail) => 'Kelas '.$detail->tingkatan.' × '.$detail->jumlah)->implode(', ') }}@endif{{ $order->judul_form }} {{ $order->harga_tersedia ? $rp($order->total) : 'Menunggu harga' }} @if (! $order->harga_tersedia) Menunggu harga Jumlah pesanan sudah tercatat @elseif ((float) $order->total <= 0) Tanpa biaya @else {{ $paid >= (float) $order->total ? 'Lunas' : ($paid > 0 ? 'Sebagian' : 'Belum bayar') }} {{ $rp($paid) }} dibayar @endif {{ \Carbon\CarbonImmutable::parse($order->created_at)->format('d/m/Y') }} @if ((int) $order->id === (int) $order->group_first_id)
@csrf @method('DELETE')
@endif
Catatan: {{ $order->catatan }}
Belum ada pesanan masuk.
@if ($orders->hasPages())
{{ $orders->links() }}
@endif
@elseif ($tab === 'paket')

Harga Paket Soal & Pembagian Hasil

Atur harga dan persentase bagian FK serta lembaga untuk setiap kelas berdasarkan tahun pelajaran dan jenis ujian. Form pemesanan mengambil harga dari pasangan yang dipilih pada form tersebut.

@if ($selectedPriceYearId && $selectedPriceTypeId)
@csrf
@else

Hubungkan tahun pelajaran dengan jenis ujian pada bagian Tahun & Jenis Ujian terlebih dahulu.

@endif
Harga {{ $pricePairs->first()->tahun_pelajaran ?? '' }} · {{ $pricePairs->first()->nama_ujian ?? 'Belum ada jenis ujian' }}
@forelse ($classPrices as $price) @php $priceForm = 'class-price-update-'.$price->id; @endphp @empty@endforelse
JenjangKelasHarga / PaketBagian FKBagian LembagaAksi
{{ $price->tingkatan <= 6 ? 'Paket A' : ($price->tingkatan <= 9 ? 'Paket B' : 'Paket C') }} Kelas {{ $price->tingkatan }}
@csrf @method('PUT')
% · {{ $rp((float) $price->harga * (float) $price->persentase_fk / 100) }}
% · {{ $rp((float) $price->harga * (float) $price->persentase_lembaga / 100) }}
@csrf @method('DELETE')
Belum ada harga kelas untuk tahun dan jenis ujian ini.
@elseif ($tab === 'pembayaran')

Monitoring Pembayaran Naskah Ujian

Pilih status pembayaran setiap pesanan. Untuk status mencicil, masukkan jumlah pembayaran yang diterima.

@if ($paymentOrders->isEmpty()) @else @foreach ($paymentOrders as $order) @php $paid = (float) $order->dibayar; $remaining = max(0, (float) $order->total - $paid); $paymentStatus = ! $order->harga_tersedia ? 'menunggu_harga' : ((float) $order->total <= 0 || $remaining <= 0 ? 'lunas' : ($paid > 0 ? 'mencicil' : 'belum_lunas')); @endphp @endforeach @endif
PKBM / PemesanPeriode UjianRincian PesananTagihanDibayarSisaKonfirmasi Pembayaran
Belum ada pesanan untuk dipantau.
{{ $order->nama_pkbm }}{{ $order->nama_pemesan }} {{ $order->nama_ujian }}{{ $order->tahun_pelajaran }} {{ $order->ringkasan_jenjang }}@if ($order->kelas_detail->isNotEmpty()){{ $order->kelas_detail->map(fn ($detail) => 'Kelas '.$detail->tingkatan.' × '.$detail->jumlah)->implode(', ') }}@elseRincian kelas tidak tersedia@endif {{ $order->harga_tersedia ? $rp($order->total) : 'Menunggu harga' }} {{ $rp($paid) }} {{ $order->harga_tersedia ? $rp($remaining) : 'Menunggu harga' }} @if (! $order->harga_tersedia) Menunggu harga paket @elseif ((float) $order->total <= 0) Tanpa biaya @else
@csrf
@foreach (['belum_lunas' => 'Belum lunas', 'mencicil' => 'Mencicil', 'lunas' => 'Lunas'] as $value => $label) @endforeach
@endif
@if ($paymentOrders->hasPages())
{{ $paymentOrders->links() }}
@endif
@endif
@endsection @push('scripts') @endpush