- Menambahkan method editKurang() di PembayaranController untuk menampilkan form pelunasan kurang bayar
- Menambahkan logika pelunasan kurang bayar di method store() dengan validasi type 'kurang_bayar'
- Menambahkan penyimpanan bukti KSL kurang bayar dengan upload file ke storage
- Menambahkan update nominal pelunasan dan bukti KSL ke tabel noc dan persetujuan_penawaran
- Menambahkan filter bukti_ksl_kurang_bayar null pada query dataForDatatablesKurang untuk menampilkan data yang belum dilunasi
- Menambahkan validasi file upload untuk bukti_ksl_kurang_bayar dengan format pdf,doc,docx maksimal 10MB
- Menambahkan kolom nominal_pelunasan dan debiture_id pada migration persetujuan_penawaran
- Menambahkan view form-kurang.blade.php dengan tampilan detail pembayaran dan form pelunasan
- Menambahkan validasi JavaScript untuk memastikan nominal pelunasan tidak melebihi nominal kurang bayar
- Menambahkan route pembayaran/{pembayaran}/kurang untuk mengakses form pelunasan kurang bayar
- Mengubah link action di kurang.blade.php dari edit ke kurang untuk mengarahkan ke form pelunasan
- Menambahkan redirect ke pembayaran.kurang.index setelah berhasil menyimpan pelunasan
- Menambahkan rollback migration untuk menghapus kolom yang ditambahkan jika diperlukan
152 lines
8.1 KiB
PHP
152 lines
8.1 KiB
PHP
@extends('layouts.main')
|
|
|
|
@section('breadcrumbs')
|
|
{{ Breadcrumbs::render('pembayaran') }}
|
|
@endsection
|
|
|
|
@section('content')
|
|
<div class="grid gap-5 mx-auto w-full lg:gap-7.5">
|
|
<div class="pb-2.5 border card border-agi-100">
|
|
<div class="card-header bg-agi-50" id="basic_settings">
|
|
<div class="flex flex-row gap-1.5 card-title">
|
|
Form Pembayaran Kurang Bayar
|
|
</div>
|
|
<div class="flex gap-2 items-center">
|
|
<a href="{{ route('pembayaran.kurang.index') }}" class="btn btn-xs btn-info"><i
|
|
class="ki-filled ki-exit-left"></i> Back</a>
|
|
</div>
|
|
</div>
|
|
<div class="card-body">
|
|
<!-- Detail Informasi -->
|
|
<div class="p-4 mb-6 bg-gray-50 rounded-lg">
|
|
<h4 class="mb-4 text-lg font-semibold text-gray-800">Detail Pembayaran</h4>
|
|
<div class="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Nomor Registrasi:</label>
|
|
<p class="text-sm font-bold text-gray-800">{{ $noc->permohonan->nomor_registrasi ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Nomor Tiket:</label>
|
|
<p class="text-sm font-bold text-gray-800">{{ $noc->nomor_tiket ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tanggal Permohonan:</label>
|
|
<p class="text-sm font-bold text-gray-800">{{ $noc->permohonan->tanggal_permohonan ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">User Pemohon:</label>
|
|
<p class="text-sm font-bold text-gray-800">{{ $noc->permohonan->user->name ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Cabang Pemohon:</label>
|
|
<p class="text-sm font-bold text-gray-800">
|
|
@if ($noc->permohonan->branch ?? null)
|
|
{{ $noc->permohonan->branch->code }} - {{ $noc->permohonan->branch->name }}
|
|
@else
|
|
-
|
|
@endif
|
|
</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Debitur:</label>
|
|
<p class="text-sm font-bold text-gray-800">{{ $noc->permohonan->debiture->name ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Status Bayar:</label>
|
|
<p class="text-sm font-bold text-red-600 uppercase">Kurang Bayar</p>
|
|
</div>
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Nominal Kurang Bayar:</label>
|
|
<p class="text-sm font-bold text-red-600">{{ formatRupiah($noc->nominal_kurang_bayar ?? 0, 2) }}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<form action="{{ route('pembayaran.store') }}" method="POST" class="grid gap-5"
|
|
enctype="multipart/form-data">
|
|
@csrf
|
|
<input type="hidden" name="noc_id" value="{{ $noc->id ?? '' }}">
|
|
<input type="hidden" name="type" value="kurang_bayar">
|
|
|
|
<div class="flex flex-wrap gap-2.5 items-baseline lg:flex-nowrap">
|
|
<label class="form-label max-w-56">
|
|
Nominal Pelunasan <span class="text-red-500">*</span>
|
|
</label>
|
|
<div class="flex flex-wrap items-baseline w-full">
|
|
<input type="number" name="nominal_pelunasan" id="nominal_pelunasan"
|
|
class="input w-full @error('nominal_pelunasan') border-danger bg-danger-light @enderror"
|
|
value="{{ old('nominal_pelunasan') }}" placeholder="Masukkan nominal pelunasan" required>
|
|
@error('nominal_pelunasan')
|
|
<em class="text-sm alert text-danger">{{ $message }}</em>
|
|
@enderror
|
|
<small class="mt-1 text-xs text-gray-500">
|
|
Nominal kurang bayar: {{ formatRupiah($noc->nominal_kurang_bayar ?? 0, 2) }}
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex flex-wrap gap-2.5 items-baseline lg:flex-nowrap">
|
|
<label class="form-label max-w-56">
|
|
Bukti KSL Kurang Bayar <span class="text-red-500">*</span>
|
|
</label>
|
|
<div class="flex flex-wrap items-baseline w-full">
|
|
<input type="file" name="bukti_ksl_kurang_bayar" id="bukti_ksl_kurang_bayar"
|
|
class="file-input w-full @error('bukti_ksl_kurang_bayar') border-danger bg-danger-light @enderror"
|
|
accept=".pdf,.jpg,.jpeg,.png" required>
|
|
@error('bukti_ksl_kurang_bayar')
|
|
<em class="text-sm alert text-danger">{{ $message }}</em>
|
|
@enderror
|
|
<small class="mt-1 text-xs text-gray-500">
|
|
Format yang diizinkan: PDF, JPG, JPEG, PNG (Max: 2MB)
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex flex-wrap gap-2.5 items-baseline lg:flex-nowrap">
|
|
<label class="form-label max-w-56">
|
|
Catatan
|
|
</label>
|
|
<div class="flex flex-wrap items-baseline w-full">
|
|
<textarea name="catatan" id="catatan" rows="4"
|
|
class="textarea w-full @error('catatan') border-danger bg-danger-light @enderror"
|
|
placeholder="Masukkan catatan (opsional)">{{ old('catatan') }}</textarea>
|
|
@error('catatan')
|
|
<em class="text-sm alert text-danger">{{ $message }}</em>
|
|
@enderror
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex gap-2 justify-end">
|
|
<a href="{{ route('pembayaran.kurang.index') }}" class="btn btn-secondary">
|
|
Batal
|
|
</a>
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="ki-filled ki-check"></i>
|
|
Proses Pelunasan
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|
|
|
|
@push('scripts')
|
|
<script>
|
|
// Validasi nominal pelunasan tidak boleh melebihi nominal kurang bayar
|
|
document.getElementById('nominal_pelunasan').addEventListener('input', function() {
|
|
const nominalKurangBayar = {{ $noc->nominal_kurang_bayar ?? 0 }};
|
|
const nominalPelunasan = parseFloat(this.value) || 0;
|
|
|
|
if (nominalPelunasan > nominalKurangBayar) {
|
|
this.setCustomValidity('Nominal pelunasan tidak boleh melebihi nominal kurang bayar');
|
|
} else if (nominalPelunasan <= 0) {
|
|
this.setCustomValidity('Nominal pelunasan harus lebih dari 0');
|
|
} else {
|
|
this.setCustomValidity('');
|
|
}
|
|
});
|
|
</script>
|
|
@endpush
|