Tambahkan fitur input dan pengelolaan Nilai Liquidasi

- Menambahkan kolom "nilai_liquidasi" pada tabel "permohonan" melalui migrasi baru.
- Memperbarui LaporanController untuk menyimpan dan menampilkan data Nilai Liquidasi.
- Menambahkan tampilan halaman input Nilai Liquidasi dengan validasi dan perhitungan otomatis.
- Memodifikasi tampilan daftar laporan untuk menunjukkan status Nilai Liquidasi.
- Menambahkan relasi baru pada model Permohonan untuk mengakses data Penilai.
This commit is contained in:
Daeng Deni Mardaeni
2024-12-31 09:49:27 +07:00
parent 848f103631
commit 483c69e8f1
5 changed files with 181 additions and 18 deletions

View File

@@ -189,23 +189,29 @@
const inspeksiId = data.debiture?.documents[0]?.inspeksi[0]?.id || '-';
const dokumenID = data.debiture?.documents[0]?.id || '-';
const jenisJaminanID = data.debiture?.documents[0]?.jenis_jaminan_id || '-';
if(data.status_bayar=="sudah_bayar") {
return `
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0}}" class="btn btn-sm btn-success">
Resume
</a>
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0"
class="btn btn-sm btn-dark">
Laporan
</a>
`;
} else {
return `
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0}}" class="btn btn-sm btn-success">
Resume
</a>
`;
let laporanButton = '';
const resumeButton = `
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" class="btn btn-sm btn-success">
Resume
</a>`;
if(data.nilai_liquidasi==null) {
laporanButton = `
<a href="laporan/${data.id}" class="btn btn-sm btn-dark">
Input NL
</a>`;
}
console.log(data.nilai_liquidasi);
if(data.status_bayar=="sudah_bayar" && data.nilai_liquidasi >0) {
laporanButton = `
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" class="btn btn-sm btn-dark">
Laporan
</a>`;
}
return `${resumeButton} ${laporanButton}`;
},
}
},

View File

@@ -0,0 +1,114 @@
@extends('layouts.main')
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
Input Nilai Liquidasi (LPJ)
</div>
<div class="flex items-center gap-2">
<a href="{{ route('pembayaran.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
@php
$lpj = json_decode($permohonan->penilai->lpj);
@endphp
<form action="{{ route('laporan.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly type="text" name="nomor_registrasi" id="nomor_registrasi" class="input w-full @error('nomor_registrasi') border-danger bg-danger-light @enderror" value="{{ old('nomor_registrasi', $permohonan->nomor_registrasi ?? '') }}" placeholder="Nomor Registrasi">
@error('nomor_registrasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Debitur
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly type="text" name="debitur" id="debitur" class="input w-full @error('debitur') border-danger bg-danger-light @enderror" value="{{ old('debitur', $permohonan->debiture->name ?? '') }}" placeholder="Debitur">
@error('debitur')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Total Nilai Pasar Wajar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="total_niilai_pasar_wajar" id="total_niilai_pasar_wajar" class="currency input w-full @error('total_niilai_pasar_wajar') border-danger bg-danger-light @enderror" value="{{ old('total_niilai_pasar_wajar', $lpj->total_nilai_pasar_wajar ?? '') }}" placeholder="Masukkan Nilai Pasar Wajar">
@error('total_niilai_pasar_wajar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Liquidasi (%)
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="liquidasi" max="100" min="0" id="liquidasi" class="persen input w-full @error('liquidasi') border-danger bg-danger-light @enderror" value="{{ old('liquidasi', $lpj->liquidasi ?? '') }}" placeholder="Masukkan Persentase Liquidasi">
@error('liquidasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nilai Liquidasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="nilai_liquidasi" id="nilai_liquidasi" class="currency input w-full @error('nilai_liquidasi') border-danger bg-danger-light @enderror" placeholder="Nilai Liquidasi">
@error('nilai_liquidasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Proses
</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
function calculateNilaiLiquidasi() {
const totalNilaiPasarWajar = parseFloat(document.getElementById('total_niilai_pasar_wajar').value.replace(/\./g, '').replace(',', '.'));
const liquidasiPercentage = parseFloat(document.getElementById('liquidasi').value);
const nilaiLiquidasiInput = document.getElementById('nilai_liquidasi');
if (!isNaN(totalNilaiPasarWajar) && !isNaN(liquidasiPercentage)) {
const nilaiLiquidasi = totalNilaiPasarWajar * (liquidasiPercentage / 100);
nilaiLiquidasiInput.value = nilaiLiquidasi.toLocaleString('id-ID', {maximumFractionDigits: 0});
} else {
nilaiLiquidasiInput.value = '';
}
}
// Calculate initially in case values are pre-filled
document.addEventListener('DOMContentLoaded', calculateNilaiLiquidasi);
// Ensure the calculation happens when Total Nilai Pasar Wajar changes as well
document.getElementById('liquidasi').addEventListener('change', calculateNilaiLiquidasi);
</script>
@endpush