diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index ec4cf45..c06db93 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -11,6 +11,12 @@ class LaporanController extends Controller /** * Display a listing of the resource. */ + + public function index() + { + return view('lpj::laporan.index'); + } + public function sederhana_index() { return view('lpj::laporan.sederhana_index'); diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 2be57e5..7528118 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -199,7 +199,7 @@ class PenilaiController extends Controller $permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId); $inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); - + return view('lpj::penilai.components.paparan'); } @@ -240,10 +240,10 @@ class PenilaiController extends Controller }); } - // Apply whereHas to check penilai_id, role, and user_id specifically for 'penilai' role + $query->whereHas('penilaian.userPenilai', function ($q) { - $q->where('role', 'penilai') // Ensure the role is 'penilai' - ->where('user_id', Auth::user()->id); // Ganti dengan Auth::user()->id jika dinamis + $q->where('role', 'penilai') + ->where('user_id', Auth::user()->id); }); // Apply sorting if provided @@ -487,7 +487,8 @@ class PenilaiController extends Controller } } - public function storeLpjSederhanadanStandard(Request $request){ + public function storeLpjSederhanadanStandard(Request $request) + { try { diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 5515aaa..b7d4ed6 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -359,7 +359,7 @@ class PenilaianController extends Controller 'pembatalan' => 'Pembatalan', 'sla' => 'SLA', ]; - + $header = $headers[$type] ?? 'Pelaporan'; return view('lpj::penilaian.otorisator.index', compact('header')); @@ -380,7 +380,7 @@ class PenilaianController extends Controller return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header')); } - public function otorisatorUpdate($id, $context) + public function otorisatorUpdate(Request $request, $id, $context) { $permohonan = Permohonan::find($id); @@ -396,28 +396,30 @@ class PenilaianController extends Controller $newStatus = $permohonan->status_bayar === 'sudah_bayar' ? 'belum_bayar' : 'sudah_bayar'; $permohonan->update([ - 'status_bayar' => $newStatus + 'status_bayar' => $newStatus, + 'keterangan' => $request->message ]); break; case 'pembatalan': - $permohonan->update([ - 'authorized_status' => 1, + 'status' => 'batal', + 'keterangan' => $request->message ]); break; case 'pelaporan': - $permohonan->update([ - 'status' => 'disetujui', + 'status' => 'proses-laporan', + 'keterangan' => $request->message ]); break; case 'sla': $permohonan->update([ - 'status' => 'order', + 'status' => 'proses-sla', + 'keterangan' => $request->message ]); break; @@ -449,10 +451,10 @@ class PenilaianController extends Controller // Tentukan status berdasarkan otorisator $status = match ($otorisator) { - 'Pelaporan' => 'proses laporan', + 'Pelaporan' => 'proses-laporan', 'Pembayaran' => 'proses', - 'Pembatalan' => 'proses', - 'SLA' => 'proses', + 'Pembatalan' => 'batal', + 'SLA' => 'freeze', default => '', }; @@ -477,10 +479,13 @@ class PenilaianController extends Controller if (!empty($otorisator)) { if ($status == 'proses') { $query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']); + } elseif ($status == 'proses-laporan') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } elseif ($status == 'batal') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } elseif ($status == 'freeze') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); } - // else { - // $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); - // } } // Filter berdasarkan region user yang login diff --git a/module.json b/module.json index f884f24..762ae31 100644 --- a/module.json +++ b/module.json @@ -323,33 +323,6 @@ "pemohon-eo", "admin", "senior-officer" - ], - "sub": [ - { - "title": "Sederhana", - "path": "laporan.sederhana", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "admin" - ] - }, - { - "title": "Standard", - "path": "laporan.standard", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "pemohon-eo", - "admin", - "senior-officer" - ] - } ] }, { diff --git a/resources/views/laporan/index.blade.php b/resources/views/laporan/index.blade.php new file mode 100644 index 0000000..46f3aff --- /dev/null +++ b/resources/views/laporan/index.blade.php @@ -0,0 +1,96 @@ +@extends('layouts.main') + +{{-- @section('breadcrumbs') --}} + {{-- {{ Breadcrumbs::render('laporan.index') }} --}} +{{-- @endsection --}} + + +@section('content') +
+ + +
+
+

+ Laporan +

+
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Debitur + + + Pemohon(Cabang/Direktorat) + + + AO + + + Tujuan Penilaian + + + Fasilitas Kredit + + + Tanggal Survei + + + Due Date SLA + + Action
+
+ +
+ + +
+ +
+@endsection diff --git a/resources/views/laporan/sederhana_index.blade.php b/resources/views/laporan/sederhana_index.blade.php deleted file mode 100644 index 48cd5be..0000000 --- a/resources/views/laporan/sederhana_index.blade.php +++ /dev/null @@ -1,487 +0,0 @@ -@extends('layouts.main') - -@section('breadcrumbs') - {{ Breadcrumbs::render('laporan.sederhana.index') }} -@endsection - - -@section('content') - - -
-
-
-
-
- - @csrf - -
-
- -
- - @error('cadeb') - {{ $message }} - @enderror -
-
- -
- -
- - @error('aset') - {{ $message }} - @enderror -
-
-
- -
-
- -
- - @error('kredit') - {{ $message }} - @enderror -
-
- -
- -
- - @error('alamat') - {{ $message }} - @enderror -
-
-
- -
-
- -
- - @error('cabang') - {{ $message }} - @enderror -
-
- -
- -
- - @error('ao') - {{ $message }} - @enderror -
-
-
- -
- -
- -
- - @error('surveyor') - {{ $message }} - @enderror -
-
- -
- -
- - @error('penilai') - {{ $message }} - @enderror -
-
- -
- -
- - @error('tanggal_survey') - {{ $message }} - @enderror -
-
- -
-
- -
- - @error('nomor_resume') - {{ $message }} - @enderror -
-
- -
- -
- - @error('tanggal_resume') - {{ $message }} - @enderror -
-
-
- -
- -
- -
- - @error('faktor_positif') - {{ $message }} - @enderror -
-
- -
- -
- - @error('faktor_negatif') - {{ $message }} - @enderror -
-
- -
- - - -
- -
-
-
- - @error('sertifikat') - {{ $message }} - @enderror -
- -
- - - @error('luas_tanah') - {{ $message }} - @enderror -
- -
- - - @error('luas_bangunan') - {{ $message }} - @enderror -
- -
- Rp - - @error('pasar_wajar') - {{ $message }} - @enderror -
-
-
-
- -
- -
-
-
- - @error('sertifikat') - {{ $message }} - @enderror -
- -
- - - @error('luas_tanah') - {{ $message }} - @enderror -
- -
- - - @error('luas_bangunan') - {{ $message }} - @enderror -
- -
- Rp - - @error('pasar_wajar') - {{ $message }} - @enderror -
-
-
-
- -
- -
-
-
- - @error('sertifikat') - {{ $message }} - @enderror -
- -
- - - @error('luas_tanah') - {{ $message }} - @enderror -
- -
- - - @error('luas_bangunan') - {{ $message }} - @enderror -
- -
- Rp - - @error('pasar_wajar') - {{ $message }} - @enderror -
-
-
-
- -
- -
- -
- - @error('catatan') - {{ $message }} - @enderror -
-
- -
- -
- -
-
    -
  1. Laporan Resume ini dikeluarkan dikarenakan belum dilakukannya pembayaran biaya - penilaian jaminan
  2. -
  3. Laporan Resume ini tidak bisa dijadikan sebagai dasar pengajuan dan atau pencairan - kredit, laporan yang digunakan tetap wajib berupa Laporan Penilaian Jaminan (LPJ) -
  4. -
  5. Detail per meter tanah dan bangunan, sarana pelengkap dll akan tercatat di Laporan - Penilaian Jaminan (LPJ) nanti
  6. -
  7. Laporan Resume ini hanya digunakan untuk kepentingan internal bagi
  8. -
  9. Laporan resume ini hanya berlaku 14 hari kerja - terhitung dari tanggal resume ini dibuat sesuai aturan yang berlaku, apabila lewat - maka harus dilakukan order ulang sesuai prosedur yang berlaku
  10. -
  11. Apabila sudah melewati 6 bulan, maka harus penilaian ulang kembali
  12. -
-
-
- -
- - - -
-
- - -
-
- -
- -
-
-
-
-
- - {{--
-
- - -
-
- -
- - @error('code') - {{ $message }} - @enderror -
-
- -
- -
- - @error('name') - {{ $message }} - @enderror -
-
- -
- -
-
-
-
--}} -
-@endsection diff --git a/resources/views/penilai/components/lpj-sederhana-standard.blade.php b/resources/views/penilai/components/lpj-sederhana-standard.blade.php index 8fcaaa2..0d401c2 100644 --- a/resources/views/penilai/components/lpj-sederhana-standard.blade.php +++ b/resources/views/penilai/components/lpj-sederhana-standard.blade.php @@ -436,54 +436,115 @@
- +
- - + +
- - +
- +
- - + +
- - +
- +
- - + + + +
-
- - +
+ + +
+ + + +
+ +
+ + +
@@ -495,25 +556,35 @@
- +
- - + +
- - -
-
- - + +
+
@@ -535,19 +606,33 @@
- +
- - + +
- - + Rp + + +
@@ -565,90 +650,164 @@
- @endsection +@endsection - @include('lpj::surveyor.js.utils') - + }); + + document.querySelectorAll('.number-format').forEach(input => { + input.addEventListener('input', function() { + formatNumber(this); + }); + }); + }); + + function calculateTotal() { + // Fungsi untuk menghapus format ribuan/koma + const parseInput = (value) => parseFloat(value.replace(/[^0-9]/g, '')) || 0; + + // Ambil elemen input dan parse nilainya + let luasTanah = parseInput(document.getElementById('luas_tanah').value); + let hargaPerMeterTanah = parseInput(document.querySelector('input[name="nilai_tanah_1"]').value); + let totalLuasTanah = document.querySelector('input[name="nilai_tanah_2"]'); + + let luasBangunan = parseInput(document.getElementById('luas_bangunan').value); + let hargaPerMeterBangunan = parseInput(document.querySelector('input[name="nilai_bangunan_1"]').value); + let totalLuasBangunan = document.querySelector('input[name="nilai_bangunan_2"]'); + + let saranaPelengkap = parseInput(document.getElementById('sarana_pelengkap').value); + let hargaPerMeterSarana = parseInput(document.querySelector('input[name="nilai_sarana_pelengkap_1"]').value); + let totalLuasSarana = document.querySelector('input[name="nilai_sarana_pelengkap_2"]'); + + // Bagian Likuidasi + let persentaseLikuidasi = parseInput(document.getElementById('likuidasi').value); + let totalNilaiPasarLikuidasi = document.querySelector('input[name="likuidasi_nilai_1"]'); + let totalLikuidasi = document.querySelector('input[name="likuidasi_nilai_2"]'); + + // Bagian Asuransi + let luasBangunanAsuransi = parseInput(document.getElementById('asuransi_luas_bangunan').value); + let hargaPerMeterAsuransi = parseInput(document.querySelector('input[name="asuransi_nilai_1"]').value); + let totalNilaiAsuransi = document.querySelector('input[name="asuransi_nilai_2"]'); + + let total = document.querySelector('input[name="total_nilai_pasar_wajar"]'); + + // Hitung hasil + const hasilTanah = luasTanah * hargaPerMeterTanah; + const hasilBangunan = luasBangunan * hargaPerMeterBangunan; + const hasilSarana = saranaPelengkap * hargaPerMeterSarana; + + const totalNilaiPasarWajar = hasilTanah + hasilBangunan + hasilSarana; + + // Perhitungan Likuidasi + const hasilLikuidasi = (persentaseLikuidasi / 100) * totalNilaiPasarWajar; + + // Perhitungan Asuransi + const hasilAsuransi = luasBangunanAsuransi * hargaPerMeterAsuransi; + + // Tampilkan hasil dalam format currency + totalLuasTanah.value = formatCurrency(hasilTanah.toString()); + totalLuasBangunan.value = formatCurrency(hasilBangunan.toString()); + totalLuasSarana.value = formatCurrency(hasilSarana.toString()); + total.value = formatCurrency(totalNilaiPasarWajar.toString()); + + // Tampilkan nilai likuidasi dan asuransi + totalNilaiPasarLikuidasi.value = formatCurrency(totalNilaiPasarWajar.toString()); + totalNilaiAsuransi.value = formatCurrency(hasilAsuransi.toString()); + + // Total likuidasi (total nilai pasar wajar + nilai likuidasi) + // const totalPasarWajarDenganLikuidasi = totalNilaiPasarWajar + hasilLikuidasi; + totalLikuidasi.value = formatCurrency(hasilLikuidasi.toString()); +} + + + + function saveLpjSederhanadanStandard() { + const form = document.getElementById('form-lpj'); + const formData = new FormData(form); + + const jsonData = { + luas_tanah: formData.get('luas_tanah'), + nilai_tanah_1: formData.get('nilai_tanah_1'), + nilai_tanah_2: formData.get('nilai_tanah_2'), + luas_bangunan: formData.get('luas_bangunan'), + nilai_bangunan_1: formData.get('nilai_bangunan_1'), + nilai_bangunan_2: formData.get('nilai_bangunan_2'), + sarana_pelengkap: formData.get('sarana_pelengkap'), + nilai_sarana_pelengkap_1: formData.get('nilai_sarana_pelengkap_1'), + nilai_sarana_pelengkap_2: formData.get('nilai_sarana_pelengkap_2'), + total_nilai_pasar_wajar: formData.get('total_nilai_pasar_wajar'), + likuidasi: formData.get('likuidasi'), + likuidasi_nilai_1: formData.get('likuidasi_nilai_1'), + likuidasi_nilai_2: formData.get('likuidasi_nilai_2'), + asuransi_luas_bangunan: formData.get('asuransi_luas_bangunan'), + asuransi_nilai_1: formData.get('asuransi_nilai_1'), + asuransi_nilai_2: formData.get('asuransi_nilai_2') + }; + + showLoadingSwal('Mengirim data ke server...'); + + const urlParams = new URLSearchParams(window.location.search); + const permohonanId = {{ $permohonan->id }}; + const documentId = urlParams.get('documentId'); + const inspeksiId = urlParams.get('inspeksiId'); + + const requestUrl = `{{ route('penilai.storeLpjSederhanadanStandard') }}`; + $.ajax({ + url: requestUrl, + type: 'POST', + data: JSON.stringify({ + permohonan_id: permohonanId, + document_id: documentId, + inspeksi_id: inspeksiId, + lpj: jsonData, + }), + contentType: 'application/json', + headers: { + 'X-CSRF-TOKEN': '{{ csrf_token() }}' + }, + success: function(response) { + hideLoadingSwal(); + if (response.success) { + Swal.fire({ + title: 'Berhasil!', + text: response.message, + icon: 'success', + confirmButtonText: 'OK' + }).then((response) => { + if (response.isConfirmed) { + window.location.href = + '{{ route('penilai.show', ['id' => $permohonan->id]) }}'; + } + }); + } else { + Swal.fire({ + title: 'Error!', + text: response.message || 'Terjadi kesalahan', + icon: 'error', + confirmButtonText: 'OK' + }); + } + console.log(response); + }, + error: function(xhr, status, error) { + let errors = xhr.responseJSON?.errors; + $('.alert').text(''); + if (errors) { + $.each(errors, function(key, value) { + $(`#error-${key}`).text(value[0]); + toastrErrorBuild(value[0]); + }); + } + hideLoadingSwal(); + console.log(errors); + } + }); + } + +@include('lpj::surveyor.js.utils') diff --git a/resources/views/penilai/index.blade.php b/resources/views/penilai/index.blade.php index 539b603..ef6f4e1 100644 --- a/resources/views/penilai/index.blade.php +++ b/resources/views/penilai/index.blade.php @@ -5,92 +5,92 @@ @endsection @section('content') -
+
-
-
-

- Penilai -

-
-
- -
- +
+
+

+ Penilai +

+
+
+ +
+
- -
-
- - - - - - - - - - - - - - - -
- - - Nomor Registrasi - - - Debitur - - - Pemohon(Cabang/Direktorat) - - - AO - - - Tujuan Penilaian - - - Fasilitas Kredit - - - Tanggal Survei - - - Due Date SLA - - Action
-
- -
- -
+
+
+ + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Debitur + + + Pemohon(Cabang/Direktorat) + + + AO + + + Tujuan Penilaian + + + Fasilitas Kredit + + + Tanggal Survei + + + Due Date SLA + + Action
+
+ +
+ + +
+
@endsection @@ -181,12 +181,22 @@ actions: { title: 'Action', render: (item, data) => { - return ` + + if (data.status === 'done') { + return ` `; + } else { + return `
+ + + +
` + } + }, } }, @@ -200,4 +210,22 @@ }); + + @endpush diff --git a/resources/views/penilai/show.blade.php b/resources/views/penilai/show.blade.php index 76ee030..f3bc183 100644 --- a/resources/views/penilai/show.blade.php +++ b/resources/views/penilai/show.blade.php @@ -258,23 +258,17 @@
- -
@endforeach
- SAVE + REPORT
diff --git a/resources/views/penilaian/otorisator/index.blade.php b/resources/views/penilaian/otorisator/index.blade.php index 56a8c90..66f2d1d 100644 --- a/resources/views/penilaian/otorisator/index.blade.php +++ b/resources/views/penilaian/otorisator/index.blade.php @@ -200,8 +200,7 @@ actions: { title: 'Status', render: (item, data) => { - if (data.status != 'proses laporan' && dataHeader != 'Pelaporan') { - return `
+ return `
@@ -210,14 +209,6 @@
`; - } else { - return `
- - - - -
` - } }, } @@ -240,6 +231,12 @@ title: 'Apakah Anda yakin?', text: `Untuk melakukan otorisator ${dataHeader}!`, icon: 'warning', + input: 'textarea', // Menambahkan input textarea + inputLabel: 'Keterangan', + inputPlaceholder: 'Masukkan keterangan...', + inputAttributes: { + 'aria-label': 'Masukkan keterangan' + }, showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', @@ -247,6 +244,7 @@ cancelButtonText: 'Batal', }).then((result) => { if (result.isConfirmed) { + const userMessage = result.value || ''; // Ambil pesan dari textarea $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' @@ -255,6 +253,9 @@ $.ajax({ url: `/otorisator/otorisator/${dataId}/${dataHeader}`, type: 'POST', + data: { + message: userMessage // Kirim pesan sebagai bagian dari data + }, success: (response) => { Swal.fire('Berhasil!', 'Data berhasil diotorisasi.', 'success').then(() => { window.location.reload(); @@ -264,13 +265,14 @@ error: (error) => { console.error('Error:', error); Swal.fire('Gagal!', 'Terjadi kesalahan saat melakukan otorisator.', - 'error'); + 'error'); } }); } }); } + function showLoadingSwal(message, duration = 5000) { Swal.fire({ title: message, diff --git a/resources/views/penilaian/otorisator/show.blade.php b/resources/views/penilaian/otorisator/show.blade.php index 00dd3e0..05b1fff 100644 --- a/resources/views/penilaian/otorisator/show.blade.php +++ b/resources/views/penilaian/otorisator/show.blade.php @@ -26,13 +26,18 @@ @push('scripts')