Compare commits

...

144 Commits

Author SHA1 Message Date
Daeng Deni Mardaeni
d068593177 fix(dokumen): perbaiki pengalihan rute setelah menambahkan dokumen jaminan
- Memperbaiki rute pengalihan setelah berhasil menambahkan dokumen jaminan.
- Menambahkan parameter 'pemrohonan_id' pada rute pengalihan untuk memastikan data yang tepat dikirim.
- Memperbaiki penanganan kesalahan dengan mengarahkan kembali ke halaman pembuatan dokumen jaminan dengan pesan kesalahan yang lebih informatif.
2025-02-24 15:41:18 +07:00
Daeng Deni Mardaeni
058fe71173 fix(dokumen): perbaiki input field jenis legalitas jaminan
- Mengubah parameter yang digunakan dalam fungsi getCustomFieldInput
- Mengganti item.id dengan item.jenis_legalitas_jaminan_id
2025-02-24 15:29:36 +07:00
Daeng Deni Mardaeni
cb05fa3178 fix(permohonan): perbaiki penanganan catatan ditolak pada reschedule jadwal survey
- Mengubah cara pengiriman catatan ditolak dengan menggunakan JSON.stringify.
- Memastikan catatan ditolak dapat diparse kembali di fungsi surveyorRescheduleJadwalSurvey.
2025-02-24 15:02:42 +07:00
Daeng Deni Mardaeni
fb77198ca3 fix(laporan): perbaiki relasi dokumen pada laporan
- Mengubah relasi dokumen dari 'debiture.documents.inspeksi' menjadi 'documents.inspeksi' untuk memperbaiki akses data.
- Memastikan data yang diambil sesuai dengan struktur relasi yang benar.
2025-02-24 13:56:32 +07:00
Daeng Deni Mardaeni
7e6482f095 fix(laporan): perbaiki akses data dokumen pada laporan
- Mengubah akses data dari `data.debiture?.documents` menjadi `data.documents` untuk konsistensi.
- Memastikan bahwa ID inspeksi, dokumen, dan jenis jaminan diambil dengan benar dari struktur data yang diperbarui.
2025-02-24 13:50:54 +07:00
putrakuningan
42f4a27c54 Merge pull request 'fix(surveyor/penilai): perbaikkan pembanding dan call report' (#103) from feature/senior-officer into staging
Reviewed-on: #103
2025-02-24 02:49:03 +01:00
majid
e4cec2a9a2 fix(surveyor/penilai): perbaikkan pembanding dan call report 2025-02-23 01:36:34 +07:00
majid
7c6f50265c Merge branch 'staging' into feature/senior-officer 2025-02-21 09:28:28 +07:00
majid
49d1b1ef75 fix(penilai/surveyor): perbaiki ukuran textarea menjadi 10 baris dan penambahan denah di lampiran 2025-02-21 09:27:42 +07:00
putrakuningan
410fd6c991 Merge pull request 'feature/senior-officer' (#101) from feature/senior-officer into staging
Reviewed-on: #101
2025-02-20 11:12:16 +01:00
majid
fbb8af6fc2 perbaikan status pregister dan revisi 2025-02-20 17:08:09 +07:00
majid
28295f5b85 fix(so): perbaikan assigment bisa pindah region, dan perbaikan call report dan revisi dokumen admin dari so 2025-02-20 16:54:39 +07:00
majid
61c5690e38 perbaikan signature di print out 2025-02-19 17:34:13 +07:00
majid
fa921add45 perbaikan print out call report 2025-02-18 16:14:52 +07:00
majid
e19d5af09a Merge branch 'staging' into feature/senior-officer 2025-02-17 13:49:26 +07:00
majid
21a3f560e9 perbaikan status survey dan pelaporan 2025-02-17 13:47:18 +07:00
putrakuningan
d924454547 Merge pull request 'perbaikan form inspeksi dan ganti surveyor' (#99) from feature/senior-officer into staging
Reviewed-on: #99
2025-02-17 06:09:46 +01:00
majid
f626aeecfe perbaikan form inspeksi dan ganti surveyor 2025-02-17 12:07:26 +07:00
majid
f567e3da40 Merge branch 'staging' into feature/senior-officer 2025-02-17 10:05:54 +07:00
Daeng Deni Mardaeni
968adae26f fix(print-resume): perbaiki validasi dan format tampilan nilai
- Mengubah cara menampilkan nilai dan total likuidasi agar lebih jelas.
- Mengganti penggunaan operator null coalescing dengan pengecekan isset untuk menghindari tampilan kosong.
- Memperbaiki struktur HTML untuk bagian penilai dan pejabat terkait.
2025-02-17 10:00:11 +07:00
e328852ffe Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-17 09:21:36 +07:00
putrakuningan
25a652621d Merge pull request 'feature/senior-officer' (#98) from feature/senior-officer into staging
Reviewed-on: #98
2025-02-14 11:35:58 +01:00
majid
a846c22479 perbaikan validasi input nilai likuidasi percent resume 2025-02-14 11:35:58 +01:00
majid
3318e1c91a Merge branch 'staging' into feature/senior-officer 2025-02-14 17:33:41 +07:00
majid
4c4f3dd70b perbaikan validasi input nilai likuidasi percent resume 2025-02-14 17:33:02 +07:00
putrakuningan
8586745b82 Merge pull request 'tender' (#87) from tender into staging
Reviewed-on: #87
2025-02-14 10:21:24 +01:00
64e615760c Mengubah di method KirimEmailTenderAll untuk mengirimkan beberapa KJPP terkait 2025-02-14 10:21:24 +01:00
putrakuningan
6a159a9015 Merge pull request 'perbaikan back halaman di otorisator so dan penambahan nilai likuidasi di resume' (#97) from feature/senior-officer into staging
Reviewed-on: #97
2025-02-14 10:20:04 +01:00
majid
2cb2b7981c perbaikan back halaman di otorisator so dan penambahan nilai likuidasi di resume 2025-02-14 16:16:41 +07:00
05557433d0 Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-14 08:51:10 +07:00
majid
d2805bdb2f Merge branch 'staging' into feature/senior-officer 2025-02-13 20:21:12 +07:00
majid
7269d2e954 fix(penilai): perbaikan urutan alamat pada print out 2025-02-13 20:20:36 +07:00
putrakuningan
776bff338f Merge pull request 'fix(penilai): perbaikan format nilai rupiah diresume' (#95) from feature/senior-officer into staging
Reviewed-on: #95
2025-02-13 11:51:37 +01:00
majid
27ef923c27 fix(penilai): perbaikan format nilai rupiah diresume 2025-02-13 11:51:37 +01:00
majid
295b2fa183 fix(penilai): perbaikan format nilai rupiah diresume 2025-02-13 17:43:55 +07:00
putrakuningan
259f63917e Merge pull request 'feature/senior-officer' (#94) from feature/senior-officer into staging
Reviewed-on: #94
2025-02-13 09:44:18 +01:00
majid
3b3765a53f fix(surveyor): perbaikan filter data revisi dan data pembanding 2025-02-13 15:14:10 +07:00
majid
5a4c8ab3a4 tambahan satuan luas di denah 2025-02-13 13:40:30 +07:00
majid
90249b83e1 fix(surveyor): tambah nama desa dan ganti n/a ke angak 0 2025-02-13 13:21:02 +07:00
571e19f11c Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-13 08:53:18 +07:00
majid
51bc603fe7 Merge branch 'staging' into feature/senior-officer 2025-02-12 18:05:01 +07:00
majid
c860daa1d5 feat(pemohon): menambahkan fitur reschedule jadwal kunjungan
fix(surveyor): memperbaiki nama placeholder dan call report
2025-02-12 18:03:05 +07:00
c6b9003429 Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-12 11:45:36 +07:00
putrakuningan
c4ce75789d Merge pull request 'feature/senior-officer' (#92) from feature/senior-officer into staging
Reviewed-on: #92
2025-02-11 09:35:17 +01:00
majid
874d101b21 fix(surveyorr): perbaikan upload foto dan pembanding 2025-02-11 09:35:17 +01:00
majid
ffd8f72c74 fix(surveyor): perbaikan upload foto 2025-02-11 09:35:17 +01:00
majid
2d99b6ab7a Merge branch 'staging' into feature/senior-officer 2025-02-11 15:29:39 +07:00
majid
7ba4b4b2b4 fix(surveyorr): perbaikan upload foto dan pembanding 2025-02-11 15:28:48 +07:00
majid
30e41c1cab fix(surveyor): perbaikan upload foto 2025-02-11 11:55:42 +07:00
ee5c6207bd Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-11 10:59:07 +07:00
putrakuningan
b35a33587b Merge pull request 'feature/senior-officer' (#91) from feature/senior-officer into staging
Reviewed-on: #91
2025-02-11 02:50:05 +01:00
majid
05dfaf2c83 hapus inputan nomor nib di penilai 2025-02-10 23:18:18 +07:00
majid
4ef7c01e29 fix(surveyor): perbaikan tanda tangan, print out sederhana dan print hasil surveyor 2025-02-10 23:15:42 +07:00
30178c5179 Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-07 14:18:13 +07:00
majid
50367edca4 Merge branch 'staging' into feature/senior-officer 2025-02-07 14:07:18 +07:00
majid
5afcc52063 ubah @include untuk komponen foto ke foto-jaminan di Penilai 2025-02-07 14:06:17 +07:00
728dacf936 Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-07 13:36:36 +07:00
putrakuningan
fc4d668e6f Merge pull request 'fix(print-out): perbaikan print out foto dan sederhana dan standard' (#89) from feature/senior-officer into staging
Reviewed-on: #89
2025-02-07 05:37:35 +01:00
majid
36a8b0bb15 fix(print-out): perbaikan print out foto dan sederhana dan standard 2025-02-07 11:25:55 +07:00
7ad38849f2 Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-07 09:31:11 +07:00
majid
7c6059d479 fix(surveyor dan penilai): perbaikan upload foto dan print out 2025-02-07 07:29:49 +07:00
majid
8fc5f6ec0b Merge remote-tracking branch 'origin/feature/senior-officer' into surveyor 2025-02-06 14:53:05 +07:00
majid
ac326c0a49 fix view foto jaminan 2025-02-06 14:48:45 +07:00
3ab59dfbdc Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender 2025-02-06 13:45:24 +07:00
23e117279f Mengubah di method KirimEmailTenderAll untuk mengirimkan beberapa KJPP terkait 2025-02-06 13:44:19 +07:00
majid
a5e9f5df0a Merge branch 'staging' into feature/senior-officer 2025-02-06 11:58:56 +07:00
majid
441e2319b1 fix(surveyor) : perbaikan data table surveyor 2025-02-06 11:58:08 +07:00
majid
8f2555c0a0 perbaikan foto 2025-02-06 11:38:35 +07:00
Daeng Deni Mardaeni
e4ca3d7987 fix(pemohonan): perbaiki pemanggilan dokumen pada berbagai komponen
- Mengubah pemanggilan dokumen dari $permohonan->debiture->documents menjadi $permohonan->documents di beberapa file.
- Memastikan konsistensi dalam akses data dokumen di seluruh aplikasi.
2025-02-06 11:32:12 +07:00
2cc70d9163 Perbaiki Skrip untuk Pemanggilan Dokumen Jaminan 2025-02-06 10:34:28 +07:00
majid
e650cda8fc Merge branch 'staging' into feature/senior-officer 2025-02-05 15:18:55 +07:00
majid
821324e8a1 fix(print-out) : perbaikan print out rap, sederhana, standar dan perbaikan tanda tangan dan name informasi rap 2025-02-05 15:18:05 +07:00
Daeng Deni Mardaeni
28d579d65d fix(penilaian): perbaiki urutan parameter pada fungsi revisiLaporan
- Mengubah urutan parameter pada fungsi revisiLaporan di PenilaianController.
- Memperbaiki URL pada permintaan AJAX di tampilan show.blade.php.
2025-02-05 15:03:31 +07:00
Daeng Deni Mardaeni
1b32105603 fix(laporan): perbaiki logika penentuan type penilaian pada tombol laporan
- Menambahkan variabel type untuk mengambil type dari data penilai.
- Memperbaiki logika untuk menampilkan tombol laporan berdasarkan type penilai.
- Memastikan tombol laporan mengarah ke URL yang benar sesuai dengan type penilaian.
2025-02-05 14:18:57 +07:00
Daeng Deni Mardaeni
80c6c82ad1 fix(laporan): tambahkan type penilaian pada URL laporan
- Menambahkan parameter type pada URL laporan untuk mencakup type penilaian.
- Menghapus log console yang tidak diperlukan.
2025-02-05 13:59:18 +07:00
Daeng Deni Mardaeni
7c4a2659dd Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-02-05 13:58:22 +07:00
majid
97ad08bc56 perbaikan upload foto 2025-02-05 13:27:21 +07:00
majid
ac431a3c3c fix(penilai): perbaikan nomor laporan memo 2025-02-04 14:05:46 +07:00
majid
165042db38 fix(print-out): perbaikan foto 2025-02-04 13:33:16 +07:00
Daeng Deni Mardaeni
9e2a9b32d8 Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-02-04 10:45:06 +07:00
majid
075567f84c Merge branch 'staging' into feature/senior-officer 2025-02-04 10:40:45 +07:00
majid
c23a8f8c29 fix(penilai): perbaikan nomor laporan 2025-02-04 10:39:58 +07:00
Daeng Deni Mardaeni
b260151f4c Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-02-04 10:26:26 +07:00
majid
37959a9dae Merge branch 'staging' into feature/senior-officer 2025-02-04 10:20:45 +07:00
majid
41cae8b8f4 fix(penilai): perbaikan lihat data ketika status peoses paparan, dan penambahan print out inspeksi surveyor 2025-02-04 10:19:25 +07:00
Daeng Deni Mardaeni
c17541dbc8 Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-02-04 09:01:15 +07:00
majid
a200c1ec52 penambahan kirim email, dan perbaikan print out 2025-02-04 08:45:52 +07:00
Daeng Deni Mardaeni
d6e1586b4b feat(dokumen_jaminan): tambahkan custom fields pada legalitas jaminan
- Menambahkan pengambilan custom fields jika tersedia pada legalitas jaminan.
- Memastikan custom fields disertakan dalam data legalitas baru yang dibuat.
2025-02-03 14:04:55 +07:00
Daeng Deni Mardaeni
a7cd063be9 feat(tender): tambahkan informasi pengguna pada email penawaran
- Mengambil informasi pengguna yang sedang login.
- Menyimpan informasi pengguna dalam job pengiriman email.
- Mengupdate tampilan email untuk menampilkan informasi pengguna.
2025-02-03 13:28:07 +07:00
Daeng Deni Mardaeni
9e6ae1f5ad fix(tender): perbaiki pengambilan informasi pengguna
- Mengubah cara pengambilan informasi pengguna untuk meningkatkan konsistensi.
- Menggunakan variabel $user untuk menyimpan informasi pengguna yang terautentikasi.
2025-02-03 13:23:23 +07:00
Daeng Deni Mardaeni
108c30e4e1 feat(email): tambahkan informasi pengguna pada email penawaran
- Menambahkan properti user ke dalam data yang dikirimkan ke view.
- Memungkinkan pengiriman informasi pengguna sebagai cc dan bcc.
2025-02-03 13:22:03 +07:00
Daeng Deni Mardaeni
7e5d336469 feat(email): tambahkan informasi pengguna pada email penawaran
- Menambahkan parameter user pada konstruktor SendPenawaranKJPPEmail.
- Mengupdate data yang dikirimkan ke view untuk menyertakan informasi pengguna sebagai cc dan bcc.
- Menggunakan auth()->user() untuk mendapatkan informasi pengguna yang sedang login di TenderController.
2025-02-03 13:20:33 +07:00
Daeng Deni Mardaeni
561bf7237e feat(tender): tambahkan informasi pengguna pada email penawaran
- Menambahkan parameter pengguna pada konstruktor SendPenawaranKJPPTenderJob.
- Mengupdate pengambilan data pengguna di TenderController.
- Memperbarui tampilan email untuk menampilkan tanda tangan dan nama pengguna yang benar.
2025-02-03 13:16:55 +07:00
majid
9bdbd77f73 fix(surveyor): update key dokument jaminan 2025-01-31 13:56:53 +07:00
majid
d5311a944d feat(print-out): hasil inspeksi surveyor 2025-01-31 02:32:55 +07:00
majid
d8f0996184 Merge branch 'staging' into feature/senior-officer 2025-01-30 21:44:06 +07:00
majid
56bb085ed5 fix(penilai):perbaikan save penilai untuk so 2025-01-30 21:42:53 +07:00
Daeng Deni Mardaeni
33cbf385e6 fix(dokumen): perbaiki pengambilan nama custom field
- Mengubah cara pengambilan nama custom field dari objek JSON.
- Memastikan nilai input terisi dengan benar berdasarkan nama custom field.
2025-01-30 21:19:05 +07:00
Daeng Deni Mardaeni
a7f2115b56 fix(dokumen): hapus pengambilan luas tanah yang tidak diperlukan
- Menghapus baris yang mengambil nilai luas tanah dari custom field.
- Memastikan tampilan dokumen lebih bersih dan relevan.
2025-01-30 21:12:41 +07:00
Daeng Deni Mardaeni
115baf7552 fix(helpers): perbaiki penamaan kelas customField menjadi CustomField
- Mengubah penamaan kelas dari customField menjadi CustomField untuk konsistensi.
- Memastikan penggunaan huruf kapital pada nama kelas sesuai dengan konvensi PSR-1.
2025-01-30 21:11:52 +07:00
Daeng Deni Mardaeni
8da0880819 fix(models): perbaiki penamaan kelas customField menjadi CustomField
- Mengubah penamaan kelas dari `customField` menjadi `CustomField` untuk konsistensi penamaan.
- Memperbaiki referensi di beberapa file controller dan request yang menggunakan penamaan yang salah.
2025-01-30 21:07:31 +07:00
Daeng Deni Mardaeni
ad3d3e900d feat(jenis-legalitas-jaminan): perbaiki tampilan checkbox untuk jenis legalitas jaminan
- Memperbaiki struktur HTML untuk bagian jenis legalitas jaminan.
- Mengoptimalkan penggunaan checkbox dengan penataan ulang kode.
- Menjaga fungsionalitas checkbox tetap utuh saat menyimpan data.
2025-01-30 20:50:32 +07:00
Daeng Deni Mardaeni
cae62db0df fix(penawaran): perbaiki pengambilan luas tanah dan luas bangunan
- Sederhanakan kondisi untuk memeriksa dan mengambil nilai luas tanah dan luas bangunan.
- Ganti penggunaan notasi objek dengan notasi akses langsung untuk meningkatkan keterbacaan.
- Hapus kondisi yang tidak perlu untuk meningkatkan efisiensi kode.
2025-01-30 20:50:16 +07:00
Daeng Deni Mardaeni
b9d6e5a95b feat(dokumen-jaminan): perbaiki pengambilan custom field
- Memperbaiki pengambilan custom field pada dokumen jaminan.
- Mengubah logika untuk mendapatkan custom field berdasarkan ID yang benar.
- Menambahkan pengambilan custom fields yang terkait dengan jenis legalitas jaminan.
2025-01-30 20:50:00 +07:00
Daeng Deni Mardaeni
92d0aff9f8 feat(custom-field): tambahkan fungsi untuk mendapatkan custom field
- Menambahkan fungsi getCustomField untuk mengambil custom field berdasarkan ID atau nama.
- Memperbarui penggunaan model customField di file Lpj.php.
2025-01-30 20:49:34 +07:00
Daeng Deni Mardaeni
d746f53941 feat(jenis-legalitas-jaminan): tambahkan dukungan untuk custom fields
- Menambahkan kolom 'custom_fields' pada tabel 'jenis_legalitas_jaminan'.
- Memperbarui model untuk mengizinkan pengisian 'custom_fields' sebagai array.
- Memperbarui request untuk validasi 'custom_fields' sebagai array.
- Memperbarui controller untuk mengambil dan mengirimkan custom fields saat membuat dan mengedit jenis legalitas jaminan.
2025-01-30 16:34:37 +07:00
Daeng Deni Mardaeni
18cbb0bbc5 feat(custom-field): tambahkan kolom label dan urutan prioritas
- Menambahkan kolom 'label' pada tabel custom_fields.
- Menambahkan kolom 'urutan_prioritas' pada tabel custom_fields.
- Memperbarui model CustomField untuk menyertakan kolom baru.
- Memperbarui form input untuk label dan urutan prioritas di tampilan create dan index.
- Menambahkan validasi untuk label dan urutan prioritas di CustomFieldRequest.
2025-01-30 16:14:48 +07:00
Daeng Deni Mardaeni
b8a84bb7e1 Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-01-30 15:55:12 +07:00
Daeng Deni Mardaeni
32de93ef9f feat(custom-field): tambahkan fitur custom field
- Menambahkan model CustomField dengan atribut mass assignable.
- Membuat request validation untuk custom field.
- Menambahkan route dan breadcrumb untuk custom field.
- Membuat migration untuk tabel custom_fields.
- Menambahkan export functionality untuk custom field.
- Membuat view untuk menambah dan mengedit custom field.
2025-01-30 15:54:52 +07:00
majid
541ea8e94c Merge branch 'staging' into feature/senior-officer 2025-01-30 15:04:37 +07:00
majid
edb5a65fbf feat(surveyor): penambahan handout form inspeksi 2025-01-30 15:03:10 +07:00
Daeng Deni Mardaeni
a43c65e4c2 feat(penilaian): tambahkan kolom jenis laporan pada tabel
- Menambahkan kolom "Jenis Laporan" di tampilan otorisator.
- Memperbarui controller untuk menyertakan data penilai.
2025-01-30 14:50:29 +07:00
majid
44a1424349 perbaikan otorisator dd rap dan print out rap 2025-01-24 17:21:58 +07:00
majid
99fb76c5bc perbaikan nomor laporan di memo dan rap 2025-01-24 16:08:33 +07:00
majid
76209b31b5 Merge branch 'staging' into feature/senior-officer 2025-01-24 15:48:28 +07:00
majid
74701c092d fix(LaporanController ) : laporan memo dan print out rap 2025-01-24 15:47:12 +07:00
Daeng Deni Mardaeni
81e4ccca3c Merge remote-tracking branch 'origin/feature/senior-officer' into staging 2025-01-24 14:14:21 +07:00
majid
201003e020 perbaikan rap dan nilai otomatis likudasi menu laporan 2025-01-24 13:42:17 +07:00
Daeng Deni Mardaeni
0c6a4d65dc Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-01-24 09:55:36 +07:00
majid
152718526b Merge branch 'staging' into feature/senior-officer 2025-01-24 09:47:48 +07:00
majid
dffaadda3b feat(signature): penambahan tanda tangan di surveyor 2025-01-24 09:44:59 +07:00
Daeng Deni Mardaeni
84932aa6f2 Merge remote-tracking branch 'composer/feature/senior-officer' into staging
# Conflicts:
#	resources/views/penilai/components/print-resume.blade.php
#	resources/views/surveyor/components/header.blade.php
2025-01-24 09:42:49 +07:00
majid
a1282fbdca fix(print-out): perbaikan prit out, resume, memo, standard, sedehana dan rap 2025-01-24 07:47:12 +07:00
Daeng Deni Mardaeni
ebcf0a9a5a fix(print-resume, header): perbaiki penanganan tanggal dan nomor NIB
- Menambahkan pengecekan untuk memastikan tanggal kunjungan dan tanggal resume tidak menghasilkan error jika tidak ada data.
- Memperbaiki penanganan nilai default untuk nomor NIB agar tidak menampilkan nilai null.
2025-01-23 17:00:50 +07:00
Daeng Deni Mardaeni
ef76bb2654 Merge remote-tracking branch 'origin/feature/senior-officer' into staging 2025-01-23 16:21:34 +07:00
majid
09edabffdd perbaikan report rap dan dan penambahan no nib di pritn out sederhana 2025-01-23 16:20:39 +07:00
Daeng Deni Mardaeni
c0b125b481 feat(penilaian): tambahkan fitur tanggal paparan dan otorisasi
- Menambahkan kolom tanggal paparan pada tampilan laporan.
- Memperbarui model Permohonan untuk menambahkan relasi otorisasi.
- Memperbaiki logika otorisasi pada tampilan paparan.
- Memperbaiki penanganan tombol untuk melihat data paparan.
2025-01-23 13:33:48 +07:00
Daeng Deni Mardaeni
4c3d39a7ae feat(penilai): tambahkan fitur upload file paparan
- Menambahkan metode edit untuk menampilkan form upload file paparan.
- Menambahkan metode storePaparan untuk menyimpan file paparan ke database.
- Membuat migrasi untuk menambahkan kolom file_paparan pada tabel penilai.
- Menambahkan tampilan edit.blade.php untuk form upload.
- Memperbarui tampilan show.blade.php untuk mengarahkan ke form edit.
- Menambahkan breadcrumb untuk navigasi ke halaman upload file paparan.
- Memperbarui rute untuk mendukung pengeditan dan penyimpanan file paparan.
2025-01-23 11:37:10 +07:00
majid
91464d92fe Merge branch 'staging' into feature/senior-officer 2025-01-23 11:03:22 +07:00
majid
0f6ce6ef4a perbaikan upload foto dan print out rap, standard dan resume 2025-01-23 11:00:48 +07:00
Daeng Deni Mardaeni
348df64afc Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-01-23 09:56:16 +07:00
majid
0fa1563cf3 perbaikan output sederhana, standard 2025-01-23 07:19:52 +07:00
Daeng Deni Mardaeni
c29f73cbce fix(dokumen): perbaiki pengambilan nilai permohonan_id
- Mengubah nilai yang diambil untuk permohonan_id dari $document->id menjadi $document->permohonan_id.
- Memastikan bahwa nilai yang tepat digunakan dalam input tersembunyi untuk permohonan_id.
2025-01-22 18:17:58 +07:00
Daeng Deni Mardaeni
dbfbf126bb feat(laporan): tambahkan relasi penilai pada data laporan
- Menambahkan relasi 'penilai' pada query pengambilan data laporan.
- Memperbaiki referensi 'resume' dari 'penilaian' menjadi 'penilai' di tampilan.
2025-01-22 17:01:41 +07:00
Daeng Deni Mardaeni
1bfa6e942d fix(laporan): perbaiki tampilan tombol resume dan label
- Menambahkan kondisi untuk menampilkan tombol resume hanya jika data penilaian tersedia.
- Memperbaiki label tombol dari 'Input NL' menjadi 'Laporn'.
2025-01-22 16:56:35 +07:00
Daeng Deni Mardaeni
83778741a2 Merge remote-tracking branch 'origin/feature/senior-officer' into staging 2025-01-22 16:12:01 +07:00
majid
b18c25819e fix(print-out) : prbaikan tampilan memo, resume, sederhana, standard, rap 2025-01-22 16:10:30 +07:00
Daeng Deni Mardaeni
2d9cd4e1cb feat(penilai): tambahkan kolom dan fungsionalitas status
- Menambahkan kolom 'Status' pada tabel di halaman index penilai.
- Mengimplementasikan render untuk menampilkan status dengan format badge.
- Mengubah urutan default query menjadi berdasarkan 'updated_at' jika tidak ada parameter sort yang diberikan.
2025-01-22 14:56:42 +07:00
Daeng Deni Mardaeni
84a212a505 fix(penilai): tambahkan status 'paparan' pada kondisi render aksi
- Memperbarui kondisi render aksi untuk menyertakan status 'paparan'.
- Memastikan bahwa tombol aksi ditampilkan untuk status yang baru ditambahkan.
2025-01-22 14:42:51 +07:00
Daeng Deni Mardaeni
e00825320c fix(penilai): perbaiki query untuk status
- Menambahkan status 'paparan' pada kondisi whereRaw.
- Memastikan query mencakup semua status yang relevan.
2025-01-22 14:36:39 +07:00
Daeng Deni Mardaeni
c560a015b4 Merge remote-tracking branch 'composer/feature/senior-officer' into staging 2025-01-22 13:40:03 +07:00
Daeng Deni Mardaeni
df6f7c7fd0 fix(penilai): tambahkan status 'paparan' pada query
- Memperbarui query untuk menyertakan status 'paparan' dalam filter status.
2025-01-22 13:37:44 +07:00
majid
c0aafdd827 Merge branch 'staging' into feature/senior-officer 2025-01-22 13:28:09 +07:00
majid
833af13491 penambahan DISCLAIMER print otu dan pengecekan jika laporan belum di isi 2025-01-22 13:26:45 +07:00
123 changed files with 14226 additions and 7899 deletions

View File

@@ -0,0 +1,63 @@
<?php
namespace Modules\Lpj\Emails;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendJadwalKunjunganEmail extends Mailable
{
/**
* ID Penilaian.
*
* @var string
*/
public $id;
/**
* Waktu Penilaian.
*
* @var string
*/
public $waktu_penilaian;
/**
* Deskripsi Penilaian.
*
* @var string
*/
public $deskripsi_penilaian;
/**
* Create a new message instance.
*
* @param array $emailData
* @return void
*/
public function __construct(array $emailData)
{
// Validasi data yang diterima
if (!isset($emailData['emailData']['id']) ||
!isset($emailData['emailData']['waktu_penilaian']) ||
!isset($emailData['emailData']['deskripsi_penilaian'])) {
throw new \InvalidArgumentException("Data email tidak lengkap.");
}
$this->id = $emailData['emailData']['id'];
$this->waktu_penilaian = $emailData['emailData']['waktu_penilaian'];
$this->deskripsi_penilaian = $emailData['emailData']['deskripsi_penilaian'];
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('Jadwal Kunjungan Penilaian Resmi')
->view('lpj::emails.jadwal-kunjungan');
}
}

View File

@@ -19,11 +19,12 @@ class SendPenawaranKJPPEmail extends Mailable
public $districts; public $districts;
public $cities; public $cities;
public $provinces; public $provinces;
public $user; // Tambahkan user ke data yang dikirimkan ke view, sebagai cc dan bcc
/** /**
* Create a new message instance. * Create a new message instance.
*/ */
public function __construct($dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces) public function __construct($dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces, $user)
{ {
// Assign data yang diterima ke properti // Assign data yang diterima ke properti
$this->dp1 = $dp1; $this->dp1 = $dp1;
@@ -33,6 +34,7 @@ class SendPenawaranKJPPEmail extends Mailable
$this->districts = $districts; $this->districts = $districts;
$this->cities = $cities; $this->cities = $cities;
$this->provinces = $provinces; $this->provinces = $provinces;
$this->user = $user; // Tambahkan user ke data yang dikirimkan ke view, sebagai cc dan bcc
} }
/** /**
@@ -50,6 +52,7 @@ class SendPenawaranKJPPEmail extends Mailable
'districts' => $this->districts, 'districts' => $this->districts,
'cities' => $this->cities, 'cities' => $this->cities,
'provinces' => $this->provinces, 'provinces' => $this->provinces,
'user' => $this->user // Tambahkan user ke data yang dikirimkan ke view, sebagai cc dan bcc
]); ]);
} }
} }

View File

@@ -0,0 +1,49 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\CustomField;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class CustomFieldExport implements WithColumnFormatting, WithHeadings, FromCollection, WithMapping
{
public function collection()
{
return CustomField::all();
}
public function map($row): array
{
return [
$row->id,
$row->name,
$row->type,
$row->created_at,
$row->updated_at,
];
}
public function headings(): array
{
return [
'ID',
'Name',
'Type',
'Created At',
'Updated At',
];
}
public function columnFormats(): array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DDMMYYYY,
'E' => NumberFormat::FORMAT_DATE_DDMMYYYY,
];
}
}

View File

@@ -2,6 +2,7 @@
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\HolidayCalendar; use Modules\Lpj\Models\HolidayCalendar;
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
@@ -10,6 +11,10 @@ use Modules\Lpj\Models\JenisDokumen;
use Modules\Lpj\Models\TeamsUsers; use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Models\Laporan; use Modules\Lpj\Models\Laporan;
use Modules\Usermanagement\Models\User; use Modules\Usermanagement\Models\User;
use Modules\Location\Models\Province;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Village;
function formatTanggalIndonesia($date, $time = false) function formatTanggalIndonesia($date, $time = false)
{ {
@@ -25,7 +30,7 @@ function formatTanggalIndonesia($date, $time = false)
function formatRupiah($number) function formatRupiah($number)
{ {
$number = (float) $number; $number = (float) $number;
return 'Rp ' . number_format($number, 2, ',', '.'); return 'Rp ' . number_format($number, 0, ',', '.');
} }
@@ -352,10 +357,58 @@ function checkRegionUserName($userId)
} }
} }
function getNomorLaporan($permohonanId, $documentId){ function getNomorLaporan($permohonanId, $documentId)
{
$laporan = Laporan::where([ $laporan = Laporan::where([
'permohonan_id' => $permohonanId, 'permohonan_id' => $permohonanId,
'dokumen_jaminan_id' => $documentId, 'dokumen_jaminan_id' => $documentId,
])->first(); ])->first();
return $laporan->nomor_laporan ?? null; return $laporan->nomor_laporan ?? null;
} }
function getCustomField($param)
{
if (is_numeric($param)) {
$field = CustomField::find($param);
} else {
$field = CustomField::where(['name' => $param])->first();
}
if ($field) {
return $field;
} else {
return null;
}
}
function getWilayahName($code, $type)
{
try {
$wilayah = null;
if (!$code) {
return null;
}
switch ($type) {
case 'province':
$wilayah = Province::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
case 'city':
$wilayah = City::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
case 'district':
$wilayah = District::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
case 'village':
$wilayah = Village::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
default:
return null;
}
} catch (\Exception $e) {
return null;
}
}

View File

@@ -98,10 +98,10 @@ class ActivityController extends Controller
$permohonan = Permohonan::findOrFail($permohonanId); $permohonan = Permohonan::findOrFail($permohonanId);
// Validasi status permohonan // Validasi status permohonan
if ($permohonan->status !== 'assign') { if ($permohonan->status !== 'assign' && $permohonan->status !== 'proses-survey') {
return response()->json([ return response()->json([
'status' => 'error', 'status' => 'error',
'message' => 'Tidak bisa ganti tim, permohonan ini sudah mengatur jadwal.', 'message' => 'Tidak dapat mengganti tim, status permohonan tidak memungkinkan.',
]); ]);
} }
@@ -244,6 +244,15 @@ class ActivityController extends Controller
// abort(403, 'Sorry! You are not allowed to view users.'); // abort(403, 'Sorry! You are not allowed to view users.');
} }
$userRole = $user->roles->pluck('name')->first();
$regionId = null;
// If user is senior-officer, get their regionId
if ($userRole === 'senior-officer') {
$userTeam = TeamsUsers::with('team')->firstWhere('user_id', $user->id);
$regionId = $userTeam?->team->regions_id;
}
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query(); $query = Permohonan::query();
@@ -289,22 +298,39 @@ class ActivityController extends Controller
// Get filtered count // Get filtered count
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get data // Filter by region if user is senior-officer
if ($regionId) {
$data = null; $query->whereHas('region', function ($q) use ($regionId) {
$userRole = $user->roles[0]->name ?? null; $q->where('region_id', $regionId);
});
if (in_array($userRole, ['surveyor', 'surveyor-penilai'])) {
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian'])
->whereHas('penilaian.userPenilai', function ($q) use ($user) {
$q->where('user_id', $user->id);
})
->get();
} else {
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])
->get();
} }
// Filter for specific roles
if (in_array($userRole, ['surveyor', 'surveyor-penilai'])) {
$query->whereHas('penilaian.userPenilai', function ($q) use ($user) {
$q->where('user_id', $user->id);
});
}
$totalRecords = $query->count();
// Pagination
if ($request->has('page') && $request->has('size')) {
$page = (int) $request->get('page', 1);
$size = (int) $request->get('size', 10);
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
}
// Get filtered count
$filteredRecords = $query->count();
// Get data with necessary relationships
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'dokumenjaminan'])->get();
// Calculate total pages
$pageCount = ceil($totalRecords / $request->get('size', 10));
@@ -366,7 +392,7 @@ class ActivityController extends Controller
$q->where('user_id', $id); $q->where('user_id', $id);
}) })
->whereHas('permohonan', function ($q) { ->whereHas('permohonan', function ($q) {
$q->whereIn('status', ['assign', 'proses-laporan', 'done']); $q->whereIn('status', ['assign', 'proses-laporan', 'done', 'proses-survey', 'request-reschedule', 'reschedule', 'rejected-reschedule', 'approved-reschedule', 'revisi-laporan', 'survey']);
}); });

View File

@@ -0,0 +1,153 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\CustomFieldExport;
use Modules\Lpj\Http\Requests\CustomFieldRequest;
use Modules\Lpj\Models\CustomField;
class CustomFieldController extends Controller
{
public $user;
public function index()
{
return view('lpj::custom_fields.index');
}
public function store(CustomFieldRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
CustomField::create($validate);
return redirect()
->route('basicdata.custom-field.index')
->with('success', 'Custom Field created successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.custom-field.create')
->with('error', $e->getMessage());
}
}
}
public function create()
{
$urutan_prioritas = CustomField::max('urutan_prioritas')+1;
return view('lpj::custom_fields.create', compact('urutan_prioritas'));
}
public function edit($id)
{
$customField = CustomField::find($id);
$urutan_prioritas = $customField->urutan_prioritas ?? CustomField::max('urutan_prioritas')+1;
return view('lpj::custom_fields.create', compact('customField', 'urutan_prioritas' ));
}
public function update(CustomFieldRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Update in database
$customField = CustomField::find($id);
$customField->update($validate);
return redirect()
->route('basicdata.custom-field.index')
->with('success', 'Custom Field updated successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.custom-field.edit', $id)
->with('error', 'Failed to update custom field');
}
}
}
public function destroy($id)
{
try {
// Delete from database
$customField = CustomField::find($id);
$customField->delete();
echo json_encode(['success' => true, 'message' => 'Custom Field deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete custom field']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('custom_fields.view')) {
//abort(403, 'Sorry! You are not allowed to view custom fields.');
}
// Retrieve data from the database
$query = CustomField::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('name', 'LIKE', "%$search%");
$q->orWhere('label', 'LIKE', "%$search%");
$q->orWhere('type', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function export()
{
return Excel::download(new CustomFieldExport, 'custom_fields.xlsx');
}
}

View File

@@ -14,6 +14,7 @@
use Modules\Location\Models\Province; use Modules\Location\Models\Province;
use Modules\Location\Models\Village; use Modules\Location\Models\Village;
use Modules\Lpj\Http\Requests\DokumenJaminanRequest; use Modules\Lpj\Http\Requests\DokumenJaminanRequest;
use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\Debiture; use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DetailDokumenJaminan; use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\DokumenJaminan;
@@ -88,7 +89,7 @@
'jenis_legalitas_jaminan_id' => $value, 'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key], 'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key], 'keterangan' => $request->keterangan[$key],
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '' 'details' => isset($request->custom_field[$value]) ? json_encode($request->custom_field[$value]) : ''
]; ];
$dokumenJaminan = []; $dokumenJaminan = [];
@@ -117,13 +118,13 @@
} }
DB::commit(); DB::commit();
return redirect()->route('debitur.jaminan.index', $id)->with( return redirect()->route('debitur.jaminan.index',['id'=>$id,'pemrohonan_id' => $validate['permohonan_id'] ])->with(
'success', 'success',
'Dokumen Jaminan berhasil ditambahkan', 'Dokumen Jaminan berhasil ditambahkan',
); );
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with('error', 'ggl' . $e->getMessage()); return redirect()->route('debitur.jaminan.create',['id'=>$id,'pemrohonan_id' => $validate['permohonan_id'] ])->with('error', $e->getMessage());
} }
} }
} }
@@ -247,7 +248,7 @@
'jenis_legalitas_jaminan_id' => $value, 'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key], 'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key], 'keterangan' => $request->keterangan[$key],
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '' 'details' => isset($request->custom_field[$value]) ? json_encode($request->custom_field[$value]) : ''
]; ];
$dokumenJaminan = []; $dokumenJaminan = [];
@@ -496,6 +497,12 @@
foreach ($document->detail as $detail) { foreach ($document->detail as $detail) {
// Only include existing legalitas if its id is in the new set // Only include existing legalitas if its id is in the new set
if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) { if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) {
$customFields = [];
if($detail->jenisLegalitasJaminan->custom_fields) {
$customFields = CustomField::whereIn('id', $detail->jenisLegalitasJaminan->custom_fields)
->get();
}
$existingLegalitas[] = [ $existingLegalitas[] = [
'id' => $detail->id, 'id' => $detail->id,
'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id, 'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id,
@@ -507,6 +514,7 @@
$detail->dokumen_nomor, $detail->dokumen_nomor,
) ?? $detail->dokumen_nomor, ) ?? $detail->dokumen_nomor,
'custom_field' => $detail->jenisLegalitasJaminan->custom_field, 'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
'custom_fields' => $customFields,
'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type, 'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type,
'details' => $detail->details, 'details' => $detail->details,
'keterangan' => $detail->keterangan, 'keterangan' => $detail->keterangan,
@@ -519,6 +527,11 @@
foreach ($newLegalitasJaminan as $legalitas) { foreach ($newLegalitasJaminan as $legalitas) {
if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) { if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) {
$customFields = [];
if($legalitas->custom_fields) {
$customFields = CustomField::whereIn('id', $legalitas->custom_fields)->get();
}
$newLegalitas[] = [ $newLegalitas[] = [
'id' => null, 'id' => null,
'jenis_legalitas_jaminan_id' => $legalitas->id, 'jenis_legalitas_jaminan_id' => $legalitas->id,
@@ -527,6 +540,7 @@
'dokumen_nomor' => null, 'dokumen_nomor' => null,
'custom_field' => $legalitas->custom_field, 'custom_field' => $legalitas->custom_field,
'custom_field_type' => $legalitas->custom_field_type, 'custom_field_type' => $legalitas->custom_field_type,
'custom_fields' => $customFields,
'details' => null, 'details' => null,
'keterangan' => null, 'keterangan' => null,
'is_existing' => false, 'is_existing' => false,

View File

@@ -8,6 +8,7 @@
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\JenisLegalitasJaminanExport; use Modules\Lpj\Exports\JenisLegalitasJaminanExport;
use Modules\Lpj\Http\Requests\JenisLegalitasJaminanRequest; use Modules\Lpj\Http\Requests\JenisLegalitasJaminanRequest;
use Modules\Lpj\Models\CustomField;
use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan;
class JenisLegalitasJaminanController extends Controller class JenisLegalitasJaminanController extends Controller
@@ -40,13 +41,15 @@
public function create() public function create()
{ {
return view('lpj::jenis_legalitas_jaminan.create'); $customFields = CustomField::orderBy('urutan_prioritas', 'asc')->get();
return view('lpj::jenis_legalitas_jaminan.create',compact('customFields'));
} }
public function edit($id) public function edit($id)
{ {
$jenisLegalitasJaminan = JenisLegalitasJaminan::find($id); $jenisLegalitasJaminan = JenisLegalitasJaminan::find($id);
return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan')); $customFields = CustomField::orderBy('urutan_prioritas', 'asc')->get();
return view('lpj::jenis_legalitas_jaminan.create', compact('jenisLegalitasJaminan', 'customFields'));
} }
public function update(JenisLegalitasJaminanRequest $request, $id) public function update(JenisLegalitasJaminanRequest $request, $id)

View File

@@ -5,14 +5,21 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Http\Controllers\PenilaiController;
class LaporanController extends Controller class LaporanController extends Controller
{ {
public $user; public $user;
public $penilaiController;
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
public function __construct(PenilaiController $penilaiController){
$this->penilaiController = $penilaiController;
}
public function index() public function index()
{ {
return view('lpj::laporan.index'); return view('lpj::laporan.index');
@@ -33,7 +40,18 @@ class LaporanController extends Controller
*/ */
public function show($id) { public function show($id) {
$permohonan = Permohonan::with([ $permohonan = Permohonan::with([
'penilai'])->find($id); 'penilai',
'dokumenjaminan',
])->find($id);
if ($permohonan->penilai->type_penilai == 'memo') {
return $this->penilaiController->print_out($request = new Request(['documentId' => $permohonan->penilai->dokument_id, 'jaminanId' => $permohonan->dokumenjaminan[0]->jenis_jaminan_id, 'permohonanId' => $permohonan->id, 'statusLpj' => 1, 'type' => 'memo']));
}
if ($permohonan->penilai->type_penilai == 'rap') {
return $this->penilaiController->print_out($request = new Request(['documentId' => $permohonan->penilai->dokument_id, 'jaminanId' => $permohonan->dokumenjaminan[0]->jenis_jaminan_id, 'permohonanId' => $permohonan->id, 'statusLpj' => 1, 'type' => 'rap']));
}
return view('lpj::laporan.show', compact('permohonan')); return view('lpj::laporan.show', compact('permohonan'));
} }
/** /**
@@ -105,7 +123,7 @@ class LaporanController extends Controller
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','jenisFasilitasKredit', 'debiture.documents.inspeksi'])->get(); $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','jenisFasilitasKredit', 'documents.inspeksi','penilai'])->get();
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $size); $pageCount = ceil($totalRecords / $size);

View File

@@ -23,6 +23,7 @@ use Illuminate\Support\Facades\App;
use App\Helpers\Lpj; use App\Helpers\Lpj;
use Modules\Lpj\Http\Requests\FormSurveyorRequest; use Modules\Lpj\Http\Requests\FormSurveyorRequest;
use Modules\Lpj\Models\Authorization; use Modules\Lpj\Models\Authorization;
use Modules\Lpj\Models\Debiture;
class PenilaiController extends Controller class PenilaiController extends Controller
{ {
@@ -51,17 +52,19 @@ class PenilaiController extends Controller
$permohonanId = $request->query('permohonanId'); $permohonanId = $request->query('permohonanId');
$documentId = $request->query('documentId'); $documentId = $request->query('documentId');
$jaminanId = $request->query('jaminanId'); $jaminanId = $request->query('jaminanId');
$basicData = $this->surveyorController->getCommonData();
$permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId); $permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId);
$inpeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); $inpeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
$penilai = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
$formFoto = null; $formFoto = null;
if ($inpeksi) { if ($inpeksi) {
$formFoto = json_decode($inpeksi->foto_form, true); $formFoto = json_decode($inpeksi->foto_form, true);
$forminspeksi = json_decode($inpeksi->data_form, true); $forminspeksi = json_decode($inpeksi->data_form, true);
$formDenah = json_decode($inpeksi->denah_form, true);
} }
return view('lpj::penilai.lampiran', compact('permohonan', 'formFoto', 'forminspeksi')); return view('lpj::penilai.lampiran', compact('permohonan', 'formFoto', 'forminspeksi', 'basicData', 'penilai', 'formDenah'));
} }
public function create() public function create()
@@ -90,7 +93,7 @@ class PenilaiController extends Controller
'inspeksi_id' => $inspeksiId, 'inspeksi_id' => $inspeksiId,
], ],
[ [
'type_penilai' => 'standard', 'type_penilai' => 'sederhana',
] ]
); );
@@ -189,7 +192,7 @@ class PenilaiController extends Controller
$data = $this->getDataPermohonanWithPenilaiAndInspeksi($req['permohonanId'], $req['documentId'], $req['jaminanId']); $data = $this->getDataPermohonanWithPenilaiAndInspeksi($req['permohonanId'], $req['documentId'], $req['jaminanId']);
$permohonan = $data['permohonan']; $permohonan = $data['permohonan'];
$noLpmemo = $this->generateNoLaporan($permohonan, $req['documentId'], 'memo'); $nomorLaporan = $this->generateNoLaporan($permohonan, $req['documentId'], 'memo');
$inspeksi = Inspeksi::where('permohonan_id', $req['permohonanId'])->where('dokument_id', $req['documentId'])->first(); $inspeksi = Inspeksi::where('permohonan_id', $req['permohonanId'])->where('dokument_id', $req['documentId'])->first();
$penilai = Penilai::where('permohonan_id', $req['permohonanId'])->where('dokument_id', $req['documentId'])->first(); $penilai = Penilai::where('permohonan_id', $req['permohonanId'])->where('dokument_id', $req['documentId'])->first();
$provinces = Province::all(); $provinces = Province::all();
@@ -225,7 +228,7 @@ class PenilaiController extends Controller
} }
} }
return view('lpj::penilai.components.memo', compact('permohonan', 'formFoto', 'formPeta', 'provinces', 'basicData', 'memo', 'cities', 'districts', 'villages', 'noLpmemo')); return view('lpj::penilai.components.memo', compact('permohonan', 'formFoto', 'formPeta', 'provinces', 'basicData', 'memo', 'cities', 'districts', 'villages', 'nomorLaporan'));
} }
@@ -246,11 +249,13 @@ class PenilaiController extends Controller
*/ */
public function edit($id) public function edit($id)
{ {
return view('lpj::edit'); $permohonan = Permohonan::with('debiture')->find($id);
return view('lpj::penilai.edit', compact('permohonan'));
} }
public function storePaparan($id)
public function storePaparan(Request $request, $id)
{ {
try { try {
$permohonan = Permohonan::findOrFail($id); $permohonan = Permohonan::findOrFail($id);
@@ -269,17 +274,20 @@ class PenilaiController extends Controller
] ]
); );
return response()->json([ if ($request->hasFile('file_paparan')) {
'success' => true, $file = $request->file('file_paparan');
'message' => 'diperbarui ke status paparan dan dikirim ke So untuk proses lebih lanjut.' $path = $file->store('public/file_paparan');
], 200);
$penilai = Penilai::where('permohonan_id', $id)->first();
$penilai->file_paparan = $path;
$penilai->save();
}
return redirect()
->route('penilai.show', ['id' => $id])->with('success', 'diperbarui ke status paparan dan dikirim ke So untuk proses lebih lanjut.');
} catch (\Exception $e) { } catch (\Exception $e) {
return response()->json([ return redirect()->route('penilai.show', ['id' => $id])->with('error', 'Terjadi kesalahan saat memproses permohonan.');
'success' => false,
'message' => 'Terjadi kesalahan saat memproses permohonan.',
'error' => $e->getMessage()
], 500);
} }
} }
@@ -304,7 +312,7 @@ class PenilaiController extends Controller
$forminspeksi = json_decode($inspeksi->data_form, true); $forminspeksi = json_decode($inspeksi->data_form, true);
} }
return view('lpj::penilai.components.paparan', compact('permohonan', 'formFoto', 'penilai', 'forminspeksi','inspeksi')); return view('lpj::penilai.components.paparan', compact('permohonan', 'formFoto', 'penilai', 'forminspeksi', 'inspeksi'));
} }
@@ -317,7 +325,8 @@ class PenilaiController extends Controller
$jaminanId = $request->query('jaminanId'); $jaminanId = $request->query('jaminanId');
$provinces = Province::all(); $provinces = Province::all();
$permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId); $permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId);
$noLpRAP = $this->generateNoLaporan($permohonan, $documentId, 'rap'); $nomorLaporan = $this->generateNoLaporan($permohonan, $documentId, 'rap');
$basicData = $this->surveyorController->getCommonData();
$inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); $inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
Penilai::updateOrCreate( Penilai::updateOrCreate(
[ [
@@ -339,11 +348,124 @@ class PenilaiController extends Controller
$forminspeksi = json_decode($inspeksi->data_form, true); $forminspeksi = json_decode($inspeksi->data_form, true);
$rap = json_decode($resume->rap, true); $rap = json_decode($resume->rap, true);
} }
// Default: gunakan data dari debitur
$debitur = Debiture::find($permohonan->debiture_id);
return view('lpj::penilai.components.rap-penilai', compact('permohonan', 'rap', 'provinces', 'forminspeksi', 'noLpRAP')); $provinceCode = $debitur->province_code;
$cityCode = $debitur->city_code;
$districtCode = $debitur->district_code;
$cekAlamat = $forminspeksi['asset']['alamat']['tidak sesuai'] ?? null;
if ($cekAlamat) {
$provinceCode = $cekAlamat['province_code'] ?? $provinceCode;
$cityCode = $cekAlamat['city_code'] ?? $cityCode;
$districtCode = $cekAlamat['district_code'] ?? $districtCode;
}
$cities = City::where('province_code', $provinceCode)->get();
$districts = District::where('city_code', $cityCode)->get();
$villages = Village::where('district_code', $districtCode)->get();
if ($forminspeksi) {
if (isset($forminspeksi['alamat']['sesuai']['province_code'])) {
$cities = City::where('province_code', $forminspeksi['alamat']['sesuai']['province_code'])->get();
}
if (isset($forminspeksi['alamat']['sesuai']['city_code'])) {
$districts = District::where('city_code', $forminspeksi['alamat']['sesuai']['city_code'])->get();
}
if (isset($forminspeksi['alamat']['sesuai']['district_code'])) {
$villages = Village::where('district_code', $forminspeksi['alamat']['sesuai']['district_code'])->get();
}
}
return view('lpj::penilai.components.rap-penilai', compact(
'permohonan',
'rap',
'provinces',
'cities',
'districts',
'villages',
'forminspeksi',
'nomorLaporan',
'basicData',
'cekAlamat'
));
} }
public function call_report(Request $request)
{
$permohonanId = $request->query('permohonanId');
$documentId = $request->query('documentId');
$inspeksiId = $request->query('inspeksiId');
$jaminanId = $request->query('jaminanId');
$provinces = Province::all();
$permohonan = $this->surveyorController->getPermohonanJaminanId($permohonanId, $documentId, $jaminanId);
$nomorLaporan = $this->generateNoLaporan($permohonan, $documentId, 'call-report');
$basicData = $this->surveyorController->getCommonData();
$inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first();
$call = Penilai::updateOrCreate(
[
'permohonan_id' => $permohonanId,
'dokument_id' => $documentId,
'inspeksi_id' => $inspeksiId,
],
[
'type_penilai' => 'call-report',
]
);
// $lpjData = null;
$callReport = null;
if ($call && isset($call->call_report)) {
$callReport = json_decode($call->call_report, true);
}
$forminspeksi = null;
if ($forminspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true);
}
// Default: gunakan data dari debitur
$debitur = Debiture::find($permohonan->debiture_id);
$provinceCode = $debitur->province_code;
$cityCode = $debitur->city_code;
$districtCode = $debitur->district_code;
$cekAlamat = $forminspeksi['asset']['alamat']['tidak sesuai'] ?? null;
if ($cekAlamat) {
$provinceCode = $cekAlamat['province_code'] ?? $provinceCode;
$cityCode = $cekAlamat['city_code'] ?? $cityCode;
$districtCode = $cekAlamat['district_code'] ?? $districtCode;
}
$cities = City::where('province_code', $provinceCode)->get();
$districts = District::where('city_code', $cityCode)->get();
$villages = Village::where('district_code', $districtCode)->get();
if ($forminspeksi) {
if (isset($forminspeksi['alamat']['sesuai']['province_code'])) {
$cities = City::where('province_code', $forminspeksi['alamat']['sesuai']['province_code'])->get();
}
if (isset($forminspeksi['alamat']['sesuai']['city_code'])) {
$districts = District::where('city_code', $forminspeksi['alamat']['sesuai']['city_code'])->get();
}
if (isset($forminspeksi['alamat']['sesuai']['district_code'])) {
$villages = Village::where('district_code', $forminspeksi['alamat']['sesuai']['district_code'])->get();
}
}
return view('lpj::penilai.components.call-report', compact('permohonan', 'basicData', 'nomorLaporan', 'forminspeksi', 'cities', 'districts', 'villages', 'cekAlamat', 'callReport'));
}
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*/ */
@@ -374,7 +496,7 @@ class PenilaiController extends Controller
}); });
} }
$query->whereRaw('LOWER(status) IN (?, ?, ?)', ['assign','done', 'proses-laporan']); $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?)', ['assign','survey-completed', 'proses-laporan', 'paparan', 'proses-paparan','paparan']);
if (!Auth::user()->hasRole('administrator')) { if (!Auth::user()->hasRole('administrator')) {
$query->whereHas('penilaian.userPenilai', function ($q) { $query->whereHas('penilaian.userPenilai', function ($q) {
@@ -389,6 +511,8 @@ class PenilaiController extends Controller
$order = $request->get('sortOrder'); $order = $request->get('sortOrder');
$column = $request->get('sortField'); $column = $request->get('sortField');
$query->orderBy($column, $order); $query->orderBy($column, $order);
} else {
$query->orderBy('updated_at', 'DESC');
} }
// Get the total count of records // Get the total count of records
@@ -597,7 +721,21 @@ class PenilaiController extends Controller
$penilai = Penilai::where('permohonan_id', $id)->get(); $penilai = Penilai::where('permohonan_id', $id)->get();
$rap = $penilai->some(function ($item) {
return strtolower($item->type_penilai) === 'rap';
});
$allComplete = $penilai->every(function ($item) { $allComplete = $penilai->every(function ($item) {
if ($item->type_penilai === 'rap') {
return !empty($item->type_penilai) && (
!empty($item->memo) ||
!empty($item->resume) ||
!empty($item->lpj) ||
!empty($item->rap)
);
}
return !empty($item->type_penilai) && ( return !empty($item->type_penilai) && (
!empty($item->memo) || !empty($item->memo) ||
!empty($item->resume) || !empty($item->resume) ||
@@ -622,8 +760,7 @@ class PenilaiController extends Controller
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'message' => 'Berhasil Megirim reported ke so', 'message' => 'Berhasil Megirim reported ke so'
'data' => $penilai,
], 200); ], 200);
} catch (\Exception $e) { } catch (\Exception $e) {
@@ -796,10 +933,11 @@ class PenilaiController extends Controller
} }
} }
public function storeRap(Request $request){ public function storeRap(Request $request)
{
DB::beginTransaction(); DB::beginTransaction();
try { try {
$formRequest = new FormSurveyorRequest(); $formRequest = new FormSurveyorRequest();
$formRequest->setContainer(app()); $formRequest->setContainer(app());
$formRequest->initialize( $formRequest->initialize(
$request->all(), $request->all(),
@@ -814,7 +952,7 @@ class PenilaiController extends Controller
$validated = $formRequest->validateResolved(); $validated = $formRequest->validateResolved();
$result = $this->surveyorController->store($formRequest); $result = $this->surveyorController->store($formRequest);
$data =[ $data = [
'kepada' => $request->input('kepada'), 'kepada' => $request->input('kepada'),
'dari' => $request->input('dari'), 'dari' => $request->input('dari'),
'nomor_rap' => $request->input('nomor_rap'), 'nomor_rap' => $request->input('nomor_rap'),
@@ -850,6 +988,47 @@ class PenilaiController extends Controller
} }
public function storeCallReport(Request $request)
{
try {
// DB::beginTransaction();
$validated = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id',
'dokument_id' => 'required',
'inspeksi_id' => 'required',
'data' => 'required'
]);
$data = $request->input('data');
Penilai::updateOrCreate(
[
'permohonan_id' => $validated['permohonan_id'],
'dokument_id' => $validated['dokument_id'],
'inspeksi_id' => $validated['inspeksi_id'],
],
[
'call_report' => json_encode($validated['data']),
]
);
// DB::commit();
return response()->json([
'success' => true,
'message' => 'Berhasil menyimpan data',
'data' => $data
], 200);
} catch (\Throwable $e) {
// DB::rollBack();
return response()->json([
'success' => false,
'message' => 'Terjadi kesalahan saat menyimpan data',
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
], 500);
}
}
public function print_out(Request $request) public function print_out(Request $request)
@@ -889,22 +1068,24 @@ class PenilaiController extends Controller
$memo = json_decode($lpj->memo, true); $memo = json_decode($lpj->memo, true);
$resumeData = json_decode($lpj->resume, true); $resumeData = json_decode($lpj->resume, true);
$rap = json_decode($lpj->rap, true); $rap = json_decode($lpj->rap, true);
$report = json_decode($lpj->call_report, true);
} }
$inputAddress = $forminspeksi['asset']['alamat']['sesuai'] ?? $forminspeksi['asset']['alamat']['tidak sesuai']; $inputAddress = $forminspeksi['asset']['alamat']['sesuai'] ?? $forminspeksi['asset']['alamat']['tidak sesuai'] ?? [];
$alamat = [ $alamat = [
'address' => $inputAddress['address'] ?? null, 'address' => $inputAddress['address'] ?? null,
'village_code' => $this->getWilayahName($inputAddress['village_code'] ?? null, 'village'), 'village_code' => getWilayahName($inputAddress['village_code'] ?? null, 'village'),
'district_code' => $this->getWilayahName($inputAddress['district_code'] ?? null, 'district'), 'district_code' => getWilayahName($inputAddress['district_code'] ?? null, 'district'),
'city_code' => $this->getWilayahName($inputAddress['city_code'] ?? null, 'city'), 'city_code' => getWilayahName($inputAddress['city_code'] ?? null, 'city'),
'province_code' => $this->getWilayahName($inputAddress['province_code'] ?? null, 'province') 'province_code' => getWilayahName($inputAddress['province_code'] ?? null, 'province')
]; ];
$viewLaporan = $this->getViewLaporan($tipeLaporan); $viewLaporan = $this->getViewLaporan($tipeLaporan);
try { try {
if ($statusLpj) { if ($statusLpj) {
// $pdf = view('lpj::' . $viewLaporan, compact(
$pdf = PDF::loadView('lpj::' . $viewLaporan, compact( $pdf = PDF::loadView('lpj::' . $viewLaporan, compact(
'permohonan', 'permohonan',
'forminspeksi', 'forminspeksi',
@@ -920,11 +1101,16 @@ class PenilaiController extends Controller
'memo', 'memo',
'resumeData', 'resumeData',
'tanggalLaporan', 'tanggalLaporan',
'rap' 'rap',
'report'
)); ));
// return $pdf;
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);
$pdf->setPaper('A4', 'portrait'); $pdf->setPaper('A4', 'portrait');
return $pdf->stream(); return response($pdf->output(), 200)
->header('Content-Type', 'application/pdf')
->header('Content-Disposition', 'inline; filename="Laporan_' . $tipeLaporan . '_' .$permohonan->debiture->name . '_' . $cleanNomorLaporan .'.pdf"');
// return $pdf->stream();
} else { } else {
// $pdf = view('lpj::' . $viewLaporan, compact( // $pdf = view('lpj::' . $viewLaporan, compact(
$pdf = PDF::loadView('lpj::' . $viewLaporan, compact( $pdf = PDF::loadView('lpj::' . $viewLaporan, compact(
@@ -942,7 +1128,8 @@ class PenilaiController extends Controller
'memo', 'memo',
'resumeData', 'resumeData',
'tanggalLaporan', 'tanggalLaporan',
'rap' 'rap',
'report'
)); ));
// return $pdf; // return $pdf;
$cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan); $cleanNomorLaporan = str_replace(['/', '\\'], '-', $nomorLaporan);
@@ -964,44 +1151,12 @@ class PenilaiController extends Controller
'standard' => 'penilai.components.print-out-standard', 'standard' => 'penilai.components.print-out-standard',
'resume' => 'penilai.components.print-resume', 'resume' => 'penilai.components.print-resume',
'memo' => 'penilai.components.print-memo', 'memo' => 'penilai.components.print-memo',
'rap' => 'penilai.components.print-out-rap' 'rap' => 'penilai.components.print-out-rap',
'call-report' => 'penilai.components.print-out-call-report'
]; ];
return $viewMap[$tipe] ?? 'penilai.components.print-resume'; return $viewMap[$tipe] ?? 'penilai.components.print-resume';
} }
public function getWilayahName($code, $type)
{
try {
$wilayah = null;
if (!$code) {
return null;
}
switch ($type) {
case 'province':
$wilayah = Province::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
case 'city':
$wilayah = City::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
case 'district':
$wilayah = District::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
case 'village':
$wilayah = Village::where('code', $code)->first();
return $wilayah ? $wilayah->name : null;
default:
return null;
}
} catch (\Exception $e) {
return null;
}
}
// mengambil data dari fungsi permohonan di surveyor, dan table // mengambil data dari fungsi permohonan di surveyor, dan table
@@ -1047,46 +1202,300 @@ class PenilaiController extends Controller
// Tentukan tipe berdasarkan kondisi // Tentukan tipe berdasarkan kondisi
$type = $statusLpj->type_penilai ?? null; $type = $statusLpj->type_penilai ?? null;
if ($type === 'memo') {
return $this->checkDataMemo($type, $statusLpj);
}
if ($type === 'resume') {
return $this->checkDataResume($type, $statusLpj);
}
if ($type === 'standard' || $type === 'sederhana') {
return $this->checkDataLpj($type, $statusLpj);
}
if ($type === 'rap') {
return $this->checkDataRap($type, $statusLpj);
}
// Kembalikan respons dengan tipe yang sesuai // Kembalikan respons dengan tipe yang sesuai
return response()->json(['status' => $type]); return response()->json(['status' => $type]);
} }
public function generateNoLaporan($permohonan, $documentId, $type) public function generateNoLaporan($permohonan, $documentId, $type)
{ {
$typeMapping = ['lpj' => 'LPJ', 'memo' => 'MAK', 'rap' => 'RAP']; $typeMapping = ['lpj' => 'LPJ', 'memo' => 'MAK', 'rap' => 'RAP', 'call-report' => 'CR'];
// Cek apakah data sudah ada // Cek apakah data sudah ada
$laporan = Laporan::where([ $laporan = Laporan::where([
'permohonan_id' => $permohonan->id,
'dokumen_jaminan_id' => $documentId,
])->first();
if ($laporan) {
$nomorArray = explode('/', $laporan->nomor_laporan);
$nomorArray[2] = $typeMapping[$type] ?? 'RES';
$laporan->update([
'nomor_laporan' => implode('/', $nomorArray)
]);
} else {
$laporan = Laporan::create([
'permohonan_id' => $permohonan->id, 'permohonan_id' => $permohonan->id,
'dokumen_jaminan_id' => $documentId, 'dokumen_jaminan_id' => $documentId,
'nomor_laporan' => implode('/', [ ])->first();
$permohonan->debiture->branch->code,
generateLpjUniqueCode(3), if ($laporan) {
$typeMapping[$type] ?? 'RSM',
$permohonan->nomor_registrasi, $nomorArray = explode('/', $laporan->nomor_laporan);
onRomawi(date('m')), $nomorArray[2] = $typeMapping[$type] ?? 'RES';
substr(date('Y'), -2) $laporan->update([
]) 'nomor_laporan' => implode('/', $nomorArray)
]);
} else {
$laporan = Laporan::create([
'permohonan_id' => $permohonan->id,
'dokumen_jaminan_id' => $documentId,
'nomor_laporan' => implode('/', [
$permohonan->debiture->branch->code,
generateLpjUniqueCode(3),
$typeMapping[$type] ?? 'RSM',
$permohonan->nomor_registrasi,
onRomawi(date('m')),
substr(date('Y'), -2)
])
]);
}
return $laporan->nomor_laporan;
}
public function checkDataMemo($type, $statusLpj)
{
// Ambil data JSON dari statusLpj
$data = json_decode($statusLpj->memo, true) ?? [];
$validationRules = [
'memo' => [
'kepada',
'dari',
'nomor_memo',
'tanggal',
'perihal',
'jenis_asset_tidak_sesuai',
'lokasi.lokasi',
'lokasi.province_code',
'lokasi.city_code',
'lokasi.district_code',
'lokasi.village_code',
'lokasi.penilai',
'terlampir',
'hasil_survey',
'kesimpulan_saran',
],
];
// Validasi data JSON
if (isset($validationRules[$type])) {
$missingFields = [];
foreach ($validationRules[$type] as $field) {
$keys = explode('.', $field);
$value = $data;
foreach ($keys as $key) {
if (!isset($value[$key])) {
$missingFields[] = $field;
break;
}
$value = $value[$key];
}
}
// Jika ada field yang kosong, kembalikan error
if (!empty($missingFields)) {
return response()->json([
'status' => null,
'message' => "Silahkan lengkapi data memo terlebih dahulu.",
'missing_fields' => $missingFields,
], 400);
}
}
// Jika data valid
return response()->json([
'status' => $type,
'message' => "Data memo valid.",
]); ]);
} }
return $laporan->nomor_laporan;
}
public function checkDataResume($type, $statusLpj)
{
// Ambil data JSON dari statusLpj
$data = json_decode($statusLpj->resume, true) ?? [];
$validationRules = [
'resume' => [
'fakta.fakta_positif',
'fakta.fakta_negatif',
'fisik'
],
];
// Validasi data JSON
if (isset($validationRules[$type])) {
$missingFields = [];
foreach ($validationRules[$type] as $field) {
$keys = explode('.', $field);
$value = $data;
foreach ($keys as $key) {
if (!isset($value[$key])) {
$missingFields[] = $field;
break;
}
$value = $value[$key];
}
// Validasi khusus untuk array fisik dan sesuai_imb
if ($field === 'fisik' || $field === 'sesuai_imb') {
if (empty($value) || !is_array($value)) {
$missingFields[] = $field;
continue;
}
// Validasi struktur data di dalam array
foreach ($value as $item) {
$requiredKeys = ['sertifikat', 'luas_tanah', 'luas_bangunan', 'nilai'];
foreach ($requiredKeys as $requiredKey) {
if (!isset($item[$requiredKey])) {
$missingFields[] = $field . '.' . $requiredKey;
}
}
}
}
}
// Jika ada field yang kosong, kembalikan error
if (!empty($missingFields)) {
return response()->json([
'status' => null,
'message' => "Silahkan lengkapi data resume terlebih dahulu.",
'missing_fields' => $missingFields,
], 400);
}
}
// Jika data valid
return response()->json([
'status' => $type,
'message' => "Data resume valid.",
]);
}
public function checkDataLpj($type, $statusLpj)
{
// Ambil data JSON dari statusLpj
$data = json_decode($statusLpj->lpj, true) ?? [];
$validationRules = [
'lpj' => [
'luas_tanah',
'nilai_tanah_1',
'nilai_tanah_2',
'luas_bangunan',
'nilai_bangunan_1',
'nilai_bangunan_2',
'total_nilai_pasar_wajar',
'likuidasi',
'likuidasi_nilai_1',
'likuidasi_nilai_2',
'asuransi_luas_bangunan',
'asuransi_nilai_1',
'asuransi_nilai_2',
'npw_tambahan'
],
];
// Validasi data JSON
if (isset($validationRules[$type])) {
$missingFields = [];
foreach ($validationRules[$type] as $field) {
// Penanganan khusus untuk field yang boleh null
if (in_array($field, ['sarana_pelengkap_penilai', 'nilai_sarana_pelengkap_1', 'nilai_sarana_pelengkap_2'])) {
continue;
}
if (!isset($data[$field])) {
$missingFields[] = $field;
continue;
}
// Validasi khusus untuk npw_tambahan
if ($field === 'npw_tambahan' && is_array($data[$field])) {
foreach ($data[$field] as $index => $item) {
$requiredKeys = ['name', 'luas', 'nilai_1', 'nilai_2'];
foreach ($requiredKeys as $key) {
if (!isset($item[$key])) {
$missingFields[] = "npw_tambahan[$index].$key";
}
}
}
}
}
// Jika ada field yang kosong, kembalikan error
if (!empty($missingFields)) {
return response()->json([
'status' => null,
'message' => "Silahkan lengkapi data LPJ terlebih dahulu.",
'missing_fields' => $missingFields,
], 400);
}
}
// Jika data valid
return response()->json([
'status' => $type,
'message' => "Data LPJ valid.",
]);
}
public function checkDataRap($type, $statusLpj)
{
// Ambil data JSON dari statusLpj
$data = json_decode($statusLpj->rap, true) ?? [];
$requiredFields = [
'dari',
'kepada',
'perihal',
'tanggal',
'nomor_rap'
];
// Cek apakah ada field yang kosong
$missingFields = [];
foreach ($requiredFields as $field) {
if (!isset($data[$field]) || empty($data[$field])) {
$missingFields[] = $field;
}
}
// Jika ada field yang kosong, kembalikan error
if (!empty($missingFields)) {
return response()->json([
'status' => null,
'message' => "Silahkan lengkapi data RAP terlebih dahulu.",
'missing_fields' => $missingFields
], 400);
}
// Jika semua data terisi
return response()->json([
'status' => $type,
'message' => "Data RAP valid."
]);
}

View File

@@ -84,12 +84,20 @@ class PenilaianController extends Controller
$roles[] = 'surveyor'; $roles[] = 'surveyor';
} else { } else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
if (isset($validatedData['penilai_surveyor_id'])) { if (isset($validatedData['penilai_surveyor_id'])) {
$user_ids[] = $validatedData['penilai_surveyor_id']; if ($validatedData['penilai_surveyor_id'] == 'pilih_dari_region') {
$teams_ids[] = $validatedData['surveyor_penilai_region_id'];
$user_ids[] = null;
} else {
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['penilai_surveyor_id'];
}
} else { } else {
$user_ids[] = $validatedData['surveyor_id']; $user_ids[] = $validatedData['surveyor_id'];
} }
$roles[] = 'surveyor'; $roles[] = 'surveyor';
@@ -111,10 +119,22 @@ class PenilaianController extends Controller
$roles[] = 'penilai'; $roles[] = 'penilai';
} else { } else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
if (isset($validatedData['penilai_surveyor_id'])) { if (isset($validatedData['penilai_surveyor_id'])) {
$user_ids[] = $validatedData['penilai_surveyor_id']; if ($validatedData['penilai_surveyor_id'] == 'pilih_dari_region') {
$permohonan->update([
'region_id' => $validatedData['surveyor_penilai_region_id'],
]);
$teams_ids[] = $validatedData['surveyor_penilai_region_id'];
$user_ids[] = null;
} else {
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['penilai_surveyor_id'];
}
} else { } else {
$user_ids[] = $validatedData['penilai_id']; $user_ids[] = $validatedData['penilai_id'];
} }
@@ -122,6 +142,7 @@ class PenilaianController extends Controller
$roles[] = 'penilai'; $roles[] = 'penilai';
} }
// dd($teams_ids, $user_ids);
foreach ($teams_ids as $key => $teams_id) { foreach ($teams_ids as $key => $teams_id) {
PenilaianTeam::create([ PenilaianTeam::create([
'penilaian_id' => $validatedData['penilaian_id'], 'penilaian_id' => $validatedData['penilaian_id'],
@@ -131,12 +152,14 @@ class PenilaianController extends Controller
]); ]);
} }
if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region' || $validatedData['penilai_surveyor_id'] === 'pilih_dari_region') {
$status = $permohonan->status; $status = $permohonan->status;
} else { }else {
$status = 'assign'; $status = 'assign';
} }
$permohonan->update([ $permohonan->update([
'status' => $status, 'status' => $status,
]); ]);
@@ -144,6 +167,7 @@ class PenilaianController extends Controller
DB::commit(); DB::commit();
return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200); return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200);
} catch (Exception $e) { } catch (Exception $e) {
dd($e);
DB::rollBack(); DB::rollBack();
return response()->json(['error' => $e->getMessage()]); return response()->json(['error' => $e->getMessage()]);
@@ -483,7 +507,7 @@ class PenilaianController extends Controller
]); ]);
} elseif (Auth::user()->roles[0]->name === 'DD Appraisal') { } elseif (Auth::user()->roles[0]->name === 'DD Appraisal') {
$permohonan->update([ $permohonan->update([
'status' => 'proses-laporan', 'status' => 'done',
'approval_dd' => Auth::user()->id, 'approval_dd' => Auth::user()->id,
'approval_dd_at' => now(), 'approval_dd_at' => now(),
'keterangan' => $request->message, 'keterangan' => $request->message,
@@ -539,6 +563,10 @@ class PenilaianController extends Controller
'approve_so_at' => now(), 'approve_so_at' => now(),
'keterangan_so' => $request->message, 'keterangan_so' => $request->message,
]); ]);
$permohonan->update([
'tanggal_paparan' => $request->tanggalPaparan
]);
} elseif (Auth::user()->roles[0]->name === 'EO Appraisal') { } elseif (Auth::user()->roles[0]->name === 'EO Appraisal') {
$status = '2'; $status = '2';
if (!in_array($permohonan->nilai_plafond_id, [1, 4])) { if (!in_array($permohonan->nilai_plafond_id, [1, 4])) {
@@ -564,12 +592,11 @@ class PenilaianController extends Controller
]); ]);
$permohonan->update([ $permohonan->update([
'status' => 'paparan', 'status' => 'paparan'
'tanggal_paparan' => $request->tanggalPaparan
]); ]);
} }
break; break;
default: default:
return response()->json([ return response()->json([
'message' => 'Konteks otorisasi tidak valid.', 'message' => 'Konteks otorisasi tidak valid.',
@@ -677,9 +704,13 @@ class PenilaianController extends Controller
'penilaian.userPenilai' => function ($q) { 'penilaian.userPenilai' => function ($q) {
$q->where('role', 'penilai')->with(['user', 'team.regions'])->first(); $q->where('role', 'penilai')->with(['user', 'team.regions'])->first();
}, },
'penilai',
'approveSo', 'approveSo',
'approveEo', 'approveEo',
'approveDd' 'approveDd',
'authorization.approveSo',
'authorization.approveEo',
'authorization.approveDd'
])->get(); ])->get();
@@ -717,13 +748,16 @@ class PenilaianController extends Controller
->where('dokument_id', $documentId) ->where('dokument_id', $documentId)
->where('inspeksi_id', $inspeksi->id) ->where('inspeksi_id', $inspeksi->id)
->first(); ->first();
$penilai = $lpj;
$forminspeksi = null; $forminspeksi = null;
$lpjData = null; $lpjData = null;
if ($inspeksi) { if ($inspeksi) {
$forminspeksi = json_decode($inspeksi->data_form, true); $forminspeksi = json_decode($inspeksi->data_form, true);
} }
$noLpmemo = $this->penilaiController->generateNoLaporan($permohonan, $documentId, 'memo'); $nomorLaporan = $this->penilaiController->generateNoLaporan($permohonan, $documentId, $lpj->type_penilai);
$formFoto = $formPeta = $cities = $districts = $villages = $memo = null; $formFoto = $formPeta = $cities = $districts = $villages = $memo = null;
if ($lpj) { if ($lpj) {
@@ -756,7 +790,7 @@ class PenilaianController extends Controller
return redirect()->back()->with('error', 'Laporan belum dibuat'); return redirect()->back()->with('error', 'Laporan belum dibuat');
} }
return view('lpj::' . $viewLaporan, compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'resumeData', 'rap', 'memo', 'cities', 'districts', 'villages','formFoto', 'formPeta','noLpmemo')); return view('lpj::' . $viewLaporan, compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'resumeData', 'rap', 'memo', 'cities', 'districts', 'villages', 'formFoto', 'formPeta', 'nomorLaporan', 'penilai'));
} }
private function getViewLaporan($tipe) private function getViewLaporan($tipe)
@@ -825,11 +859,11 @@ class PenilaianController extends Controller
} }
} }
public function revisiLaporan($id, Request $request) public function revisiLaporan(Request $request, $id)
{ {
$permohonan = Permohonan::findOrFail($id); $permohonan = Permohonan::findOrFail($id);
$permohonan->update([ $permohonan->update([
'status' => 'done', 'status' => 'revisi-laporan',
'keterangan' => $request->message, 'keterangan' => $request->message,
'submitted_at' => now() 'submitted_at' => now()
]); ]);

View File

@@ -1,407 +1,481 @@
<?php <?php
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf; use Barryvdh\DomPDF\Facade\Pdf;
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\City; use Modules\Location\Models\City;
use Modules\Location\Models\District; use Modules\Location\Models\District;
use Modules\Location\Models\Province; use Modules\Location\Models\Province;
use Modules\Location\Models\Village; use Modules\Location\Models\Village;
use Modules\Lpj\Models\PermohonanPembatalan; use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Exports\PermohonanExport; use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Http\Requests\PermohonanRequest; use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Debiture; use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisFasilitasKredit; use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond; use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Lpj\Services\PermohonanHistoryService;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Penilaian;
class PermohonanController extends Controller class PermohonanController extends Controller
{
public $user;
protected $historyService;
public function __construct(PermohonanHistoryService $historyService)
{ {
public $user; $this->historyService = $historyService;
protected $historyService; }
public function __construct(PermohonanHistoryService $historyService) public function index()
{ {
$this->historyService = $historyService; return view('lpj::permohonan.index');
} }
public function index() public function store(PermohonanRequest $request)
{ {
return view('lpj::permohonan.index'); $validate = $request->validated();
} if ($validate) {
try {
public function store(PermohonanRequest $request) // Process file upload
{ $filePath = null;
$validate = $request->validated(); if ($request->hasFile('attachment')) {
if ($validate) { $file = $request->file('attachment');
try { $fileName = time() . '_' . $file->getClientOriginalName();
// Process file upload $filePath = $file->storeAs('permohonan_attachments', $fileName, 'public');
$filePath = null; }
if ($request->hasFile('attachment')) {
$file = $request->file('attachment'); // Get keterangan if provided
$fileName = time() . '_' . $file->getClientOriginalName(); $keterangan = $request->input('keterangan') ?? null;
$filePath = $file->storeAs('permohonan_attachments', $fileName, 'public');
}
// Save to database
// Get keterangan if provided $permohonan = Permohonan::create($validate);
$keterangan = $request->input('keterangan') ?? null;
// Create history
$this->historyService->createHistory(
// Save to database $permohonan,
$permohonan = Permohonan::create($validate); $validate['status'],
$keterangan,
// Create history [], // beforeRequest is empty for new permohonan
$this->historyService->createHistory( $permohonan->toArray(),
$permohonan, $filePath,
$validate['status'], );
$keterangan,
[], // beforeRequest is empty for new permohonan $documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
$permohonan->toArray(), if (count($documents) < 1) {
$filePath, return redirect()->route('debitur.jaminan.create', array_merge(['permohonan_id' => $permohonan->id], ['id' => $permohonan->debiture->id]))->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
);
$documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
if(count($documents)<1){
return redirect()->route('debitur.jaminan.create', array_merge(['permohonan_id'=>$permohonan->id],['id'=> $permohonan->debiture->id]))->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
}
return redirect()
->route('permohonan.index')->with('success', 'Permohonan created successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.create')->with('error', 'Failed to create permohonan' . $e->getMessage());
} }
} else {
return redirect() return redirect()
->route('permohonan.create')->with('success', 'error naon iye')->withInput(); ->route('permohonan.index')->with('success', 'Permohonan created successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.create')->with('error', 'Failed to create permohonan' . $e->getMessage());
} }
} else {
return redirect()
->route('permohonan.create')->with('success', 'error naon iye')->withInput();
} }
}
public function create() public function create()
{ {
return view('lpj::permohonan.create'); return view('lpj::permohonan.create');
} }
public function createPermohonan($debitur) public function createPermohonan($debitur)
{ {
$branches = Branch::all(); $branches = Branch::all();
$debitur = Debiture::find($debitur); $debitur = Debiture::find($debitur);
$tujuanPenilaian = TujuanPenilaian::all(); $tujuanPenilaian = TujuanPenilaian::all();
$status = StatusPermohonan::all(); $status = StatusPermohonan::all();
$fasilitasKredit = JenisFasilitasKredit::all(); $fasilitasKredit = JenisFasilitasKredit::all();
$plafond = NilaiPlafond::all(); $plafond = NilaiPlafond::all();
return view( return view(
'lpj::permohonan.form', 'lpj::permohonan.form',
compact('branches', 'debitur', 'tujuanPenilaian', 'status', 'fasilitasKredit', 'plafond'), compact('branches', 'debitur', 'tujuanPenilaian', 'status', 'fasilitasKredit', 'plafond'),
); );
} }
public function edit($id) public function edit($id)
{ {
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
$branches = Branch::all(); $branches = Branch::all();
$debitur = Debiture::find($permohonan->debiture_id); $debitur = Debiture::find($permohonan->debiture_id);
$tujuanPenilaian = TujuanPenilaian::all(); $tujuanPenilaian = TujuanPenilaian::all();
$status = StatusPermohonan::all(); $status = StatusPermohonan::all();
$provinces = Province::all(); $provinces = Province::all();
$cities = City::where('province_code', $debitur->province_code)->get(); $cities = City::where('province_code', $debitur->province_code)->get();
$districts = District::where('city_code', $debitur->city_code)->get(); $districts = District::where('city_code', $debitur->city_code)->get();
$villages = Village::where('district_code', $debitur->district_code)->get(); $villages = Village::where('district_code', $debitur->district_code)->get();
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get(); $documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
$fasilitasKredit = JenisFasilitasKredit::all(); $fasilitasKredit = JenisFasilitasKredit::all();
$plafond = NilaiPlafond::all(); $plafond = NilaiPlafond::all();
return view( return view(
'lpj::permohonan.form', 'lpj::permohonan.form',
compact( compact(
'permohonan', 'permohonan',
'branches', 'branches',
'debitur', 'debitur',
'tujuanPenilaian', 'tujuanPenilaian',
'status', 'status',
'provinces', 'provinces',
'cities', 'cities',
'districts', 'districts',
'villages', 'villages',
'documents', 'documents',
'fasilitasKredit', 'fasilitasKredit',
'plafond', 'plafond',
), ),
); );
} }
public function update(PermohonanRequest $request, $id) public function update(PermohonanRequest $request, $id)
{ {
$permohonan = Permohonan::findOrFail($id); $permohonan = Permohonan::findOrFail($id);
$beforeRequest = $permohonan->toArray(); $beforeRequest = $permohonan->toArray();
$validate = $request->validated(); $validate = $request->validated();
if ($validate) { if ($validate) {
try { try {
// Update in database // Update in database
if ($permohonan->status == 'revisi') { if ($permohonan->status == 'revisi') {
$validate['status'] = 'order'; $validate['status'] = 'order';
}
$permohonan->update($validate);
$documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
if(count($documents)<1){
return redirect()->route('debitur.jaminan.create', array_merge(['permohonan_id'=>$permohonan->id],['id'=> $permohonan->debiture->id]))->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
}
return redirect()
->route('permohonan.index')->with('success', 'Permohonan updated successfully');
} catch (Exception $e) {
return redirect()
->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan');
} }
} $permohonan->update($validate);
}
public function destroy($id) $documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
{ if (count($documents) < 1) {
try { return redirect()->route('debitur.jaminan.create', array_merge(['permohonan_id' => $permohonan->id], ['id' => $permohonan->debiture->id]))->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
// Delete from database }
$permohonan = Permohonan::find($id);
$permohonan->delete();
echo json_encode(['success' => true, 'message' => 'Permohonan deleted successfully']); return redirect()
->route('permohonan.index')->with('success', 'Permohonan updated successfully');
} catch (Exception $e) { } catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete permohonan']); return redirect()
->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan');
} }
} }
}
public function dataForDatatables(Request $request) public function destroy($id)
{ {
if (is_null($this->user) || !$this->user->can('debitur.view')) { try {
//abort(403, 'Sorry! You are not allowed to view users.'); // Delete from database
}
// Retrieve data from the database
$query = Permohonan::query();
if(!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
$query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','documents'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $request->get('page', 1));
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function export()
{
return Excel::download(new PermohonanExport, 'permohonan.xlsx');
}
public function authorization()
{
return view('lpj::permohonan.authorization.index');
}
public function dataForAuthorization(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query()->with('documents')->has('documents', '>', 0)->where('status', '=', 'order');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(
);
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function showAuthorization($id)
{
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
return view('lpj::permohonan.authorization.show', compact('permohonan')); $permohonan->delete();
echo json_encode(['success' => true, 'message' => 'Permohonan deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete permohonan']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
} }
public function updateAuthorization(Request $request, $id) // Retrieve data from the database
{ $query = Permohonan::query();
if (!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
$query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','documents'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
// Calculate the current page number
$currentPage = max(1, $request->get('page', 1));
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function export()
{
return Excel::download(new PermohonanExport(), 'permohonan.xlsx');
}
public function authorization()
{
return view('lpj::permohonan.authorization.index');
}
public function dataForAuthorization(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query()->with('documents')->has('documents', '>', 0)->where('status', '=', 'order');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(
);
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function showAuthorization($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.authorization.show', compact('permohonan'));
}
public function updateAuthorization(Request $request, $id)
{
try {
$permohonan = Permohonan::find($id);
$permohonan->status = $request->status;
$permohonan->keterangan = $request->keterangan;
$permohonan->save();
} catch (Exception $e) {
return redirect()->route('authorization.show', $id)->with('error', 'Failed to update permohonan');
}
return redirect()->route('authorization.index')->with('success', 'Permohonan updated successfully');
}
public function show($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.show', compact('permohonan'));
}
public function print($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.print', compact('permohonan'));
// $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan'));
// return $pdf->stream();
}
public function showPembatalan($id)
{
$permohonan = Permohonan::with(['pembatalan','debiture'])->findOrFail($id);
return view('lpj::permohonan.pembatalan-form', compact('permohonan'));
}
public function pembatalan(Request $request)
{
// Validate the request
$validatedData = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id',
'alasan_pembatalan' => 'required|string',
'file_pembatalan' => 'required|file|mimes:pdf,doc,docx|max:2048',
]);
// Handle file upload
if ($request->hasFile('file_pembatalan')) {
$file = $request->file('file_pembatalan');
$filename = time() . '_' . $file->getClientOriginalName();
$filePath = $file->storeAs('pembatalan', $filename, 'public');
$validatedData['file_pembatalan'] = $filePath;
}
// Add created_by
$validatedData['created_by'] = auth()->id();
// Create new PermohonanPembatalan
$pembatalan = PermohonanPembatalan::create($validatedData);
return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval');
}
public function storeAproved(Request $request, $id): JsonResponse
{
$data = [];
if (request()->ajax()) {
try { try {
$permohonan = Permohonan::find($id); $penilaian = Penilaian::findOrFail($id);
$permohonan->status = $request->status; $penilaian->update([
$permohonan->keterangan = $request->keterangan; 'authorized_status' => 1,
$permohonan->save(); ]);
} catch (Exception $e) {
return redirect()->route('authorization.show', $id)->with('error', 'Failed to update permohonan'); $permohonan = Permohonan::findOrFail($request->permohonan_id);
$permohonan->update([
'status' => 'proses-survey'
]);
$data['status'] = 'success';
$data['message'] = 'Jadwal '.$request->noReg.' berhasil di aprove';
} catch (\Exception $e) {
$data['status'] = 'error';
$data['message'] = 'Gagal membuat jadwal: ' . $e->getMessage();
} }
return redirect()->route('authorization.index')->with('success', 'Permohonan updated successfully'); } else {
$data['status'] = 'error';
$data['message'] = "no ajax request";
} }
public function show($id) return response()->json($data);
{ }
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.show', compact('permohonan'));
}
public function print($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::permohonan.print', compact('permohonan'));
// $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan'));
// return $pdf->stream();
}
public function showPembatalan($id)
{
$permohonan = Permohonan::with(['pembatalan','debiture'])->findOrFail($id);
return view('lpj::permohonan.pembatalan-form', compact('permohonan'));
}
public function pembatalan(Request $request) public function storeRescheduleSurvey(Request $request, $id)
{ {
// Validate the request try {
$validatedData = $request->validate([ $validatedData = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id', 'permohonan_id' => 'required|exists:permohonan,id',
'alasan_pembatalan' => 'required|string', 'penilaian_id' => 'nullable',
'file_pembatalan' => 'required|file|mimes:pdf,doc,docx|max:2048', 'nomor_registrasi' => 'required',
'reschedule_note' => 'required',
'reschedule_date' => 'required',
]); ]);
// Handle file upload DB::beginTransaction();
if ($request->hasFile('file_pembatalan')) {
$file = $request->file('file_pembatalan');
$filename = time() . '_' . $file->getClientOriginalName();
$filePath = $file->storeAs('pembatalan', $filename, 'public');
$validatedData['file_pembatalan'] = $filePath;
}
// Add created_by $permohonan = Permohonan::findOrFail($request->permohonan_id);
$validatedData['created_by'] = auth()->id(); $permohonan->update([
'status' => 'request-reschedule'
]);
// Create new PermohonanPembatalan $penilaian = Penilaian::findOrFail($id);
$pembatalan = PermohonanPembatalan::create($validatedData);
return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval'); $penilaian->update([
'reschedule_date' => $request->reschedule_date,
'reschedule_note' => $request->reschedule_note,
]);
DB::commit();
return response()->json([
'status' => 'success',
'message' => 'Proses request reschedule permohonan Nomor registrasi '.$request->nomor_registrasi.' berhasil',
]);
} catch (\Exception $e) {
DB::rollBack();
return response()->json([
'status' => 'error',
'message' => 'Gagal membuat request reschedule: ' . $e->getMessage(),
]);
} }
} }
}

View File

@@ -1,234 +1,253 @@
<?php <?php
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use Exception;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\JenisPenilaian; use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Regions; use Modules\Lpj\Models\Regions;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\Debiture;
class RegistrasiController extends Controller class RegistrasiController extends Controller
{
public $user;
public function index()
{ {
public $user; return view('lpj::registrasi.index');
public function index()
{
return view('lpj::registrasi.index');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query()->where('status', '=', 'preregister');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function edit($id)
{
return view('lpj::registrasi.edit', compact('id'));
}
public function setData(Request $request)
: JsonResponse {
$data = [];
$datas = [];
if (request()->ajax()) {
$id = $request->id;
$datas = Permohonan::find($id);
if ($datas) {
$jenisPenilaians = null;
$regions = null;
$regions = Regions::pluck('name', 'id');
$jenisPenilaians = JenisPenilaian::pluck('name', 'id');
$data['status'] = 'success';
$data['regions'] = $regions;
$data['jenisPenilaians'] = $jenisPenilaians;
$data['datas'] = $datas;
$data['message'] ['message_success'] = ["data successfully found"];
} else {
$data['status'] = 'error';
$data['datas'] = null;
$data['message'] ['message_data'] = ["data not found"];
}
} else {
$data['status'] = 'error';
$data['message']['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
}
public function update(Request $request, $id)
: JsonResponse {
// init
$data = [];
$dataku = [];
$tindakan = null;
if (request()->ajax()) {
$validator = RegistrasiController::rulesEditnya($request, $id);
if ($validator['fails']) {
$data['message'] = $validator['errors'];
$data['status'] = 'error';
} else {
try {
$tindakan = $request->tindakan;
$dataku = [
'registrasi_by' => Auth::id(),
'registrasi_at' => now(),
];
if ($tindakan == 0) {
$dataku['jenis_penilaian_id'] = $request->jenis_penilaian;
$dataku['region_id'] = $request->region;
$dataku['sla'] = $request->sla;
$dataku['status'] = 'registered';
if ($request->catatan2) {
$dataku['registrasi_catatan'] = $request->catatan2;
}
} else {
$dataku['registrasi_catatan'] = $request->catatan;
$dataku['status'] = 'revisi';
}
$data['dataku'] = $dataku;
$modal = Permohonan::find($id);
$modal->update($dataku);
//
$data['status'] = 'success';
$data['message'] ['message_success'] = ['Regitrasi ' . $modal->nomor_registrasi . ' successfully'];
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] ['message_try_catch'] = ['Regitrasi updated failed.'];
}
}
} else {
$data['status'] = 'error';
$data['message'] ['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
}
public function rulesEditnya($request, $id)
{
$tindakan = null;
$jenis_penilaian = null;
$validate_catatan = '';
$tindakan = $request->tindakan;
$jenis_penilaian = $request->jenis_penilaian;
$validateIt = [
// 'name' diambil dari definisi parameter yang di kirim pada POST Data
'tindakan' => 'required',
];
$messageIt = [
'tindakan.required' => 'Silahkan pilih Tindakan',
];
if ($tindakan == 0) {
$validateIt['jenis_penilaian'] = ['required'];
$messageIt ['jenis_penilaian.required'] = 'Silahkan pilih Jenis Penilaian';
// INTERNAL
if (1 == $jenis_penilaian) {
$validateIt['region'] = ['required'];
$messageIt ['region.required'] = 'Silahkan pilih Region';
}
else
{
$validateIt['sla'] = ['required'];
$messageIt ['sla.required'] = 'Silahkan isi SLA';
}
} elseif ($tindakan == 1) {
$validateIt['catatan'] = ['required'];
$messageIt ['catatan.required'] = 'Silahkan isi Catatan';
}
$validator = Validator::make($request->all(), $validateIt, $messageIt);
$data['fails'] = $validator->fails();
$data['errors'] = $validator->errors();
return $data;
}
public function show($id)
{
$permohonan = Permohonan::find($id);
return view('lpj::registrasi.show', compact('id', 'permohonan'));
}
} }
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query = Permohonan::query()
->whereIn('status', ['preregister', 'revisi']);
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
public function edit($id)
{
return view('lpj::registrasi.edit', compact('id'));
}
public function setData(Request $request): JsonResponse
{
$data = [];
$datas = [];
if (request()->ajax()) {
$id = $request->id;
$datas = Permohonan::find($id);
if ($datas) {
$jenisPenilaians = null;
$regions = null;
$regions = Regions::pluck('name', 'id');
$jenisPenilaians = JenisPenilaian::pluck('name', 'id');
$data['status'] = 'success';
$data['regions'] = $regions;
$data['jenisPenilaians'] = $jenisPenilaians;
$data['datas'] = $datas;
$data['message'] ['message_success'] = ["data successfully found"];
} else {
$data['status'] = 'error';
$data['datas'] = null;
$data['message'] ['message_data'] = ["data not found"];
}
} else {
$data['status'] = 'error';
$data['message']['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
}
public function update(Request $request, $id): JsonResponse
{
// init
$data = [];
$dataku = [];
$tindakan = null;
if (request()->ajax()) {
$validator = RegistrasiController::rulesEditnya($request, $id);
if ($validator['fails']) {
$data['message'] = $validator['errors'];
$data['status'] = 'error';
} else {
try {
$tindakan = $request->tindakan;
$dataku = [
'registrasi_by' => Auth::id(),
'registrasi_at' => now(),
];
if ($tindakan == 0) {
$dataku['jenis_penilaian_id'] = $request->jenis_penilaian;
$dataku['region_id'] = $request->region;
$dataku['sla'] = $request->sla;
$dataku['status'] = 'registered';
if ($request->catatan2) {
$dataku['registrasi_catatan'] = $request->catatan2;
}
} else {
$dataku['registrasi_catatan'] = $request->catatan;
$dataku['status'] = 'revisi';
}
$data['dataku'] = $dataku;
$modal = Permohonan::find($id);
$modal->update($dataku);
//
$data['status'] = 'success';
$data['message'] ['message_success'] = ['Regitrasi ' . $modal->nomor_registrasi . ' successfully'];
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] ['message_try_catch'] = ['Regitrasi updated failed.'];
}
}
} else {
$data['status'] = 'error';
$data['message'] ['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
}
public function rulesEditnya($request, $id)
{
$tindakan = null;
$jenis_penilaian = null;
$validate_catatan = '';
$tindakan = $request->tindakan;
$jenis_penilaian = $request->jenis_penilaian;
$validateIt = [
// 'name' diambil dari definisi parameter yang di kirim pada POST Data
'tindakan' => 'required',
];
$messageIt = [
'tindakan.required' => 'Silahkan pilih Tindakan',
];
if ($tindakan == 0) {
$validateIt['jenis_penilaian'] = ['required'];
$messageIt ['jenis_penilaian.required'] = 'Silahkan pilih Jenis Penilaian';
// INTERNAL
if (1 == $jenis_penilaian) {
$validateIt['region'] = ['required'];
$messageIt ['region.required'] = 'Silahkan pilih Region';
} else {
$validateIt['sla'] = ['required'];
$messageIt ['sla.required'] = 'Silahkan isi SLA';
}
} elseif ($tindakan == 1) {
$validateIt['catatan'] = ['required'];
$messageIt ['catatan.required'] = 'Silahkan isi Catatan';
}
$validator = Validator::make($request->all(), $validateIt, $messageIt);
$data['fails'] = $validator->fails();
$data['errors'] = $validator->errors();
return $data;
}
public function show($id)
{
$permohonan = Permohonan::find($id);
$debitur = Debiture::find($permohonan->debiture_id);
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
return view('lpj::registrasi.show', compact('id', 'permohonan', 'documents', 'debitur'));
}
public function storeRevisi(Request $request, $id)
{
try {
$permohonan = Permohonan::find($id);
$permohonan->update([
'status' => 'registered'
]);
return redirect()->route('registrasi.index')->with('success', 'Submit Revision successfully');
} catch (Exception $e) {
return redirect()->route('registrasi.index')->with('error', 'Failed to create permohonan' . $e->getMessage());
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -293,12 +293,12 @@ class TenderController extends Controller
} }
// Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan // Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan
if ($permohonan->debiture->documents->isEmpty()) { if ($permohonan->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -338,12 +338,12 @@ class TenderController extends Controller
} }
// Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan // Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan
if ($permohonan->debiture->documents->isEmpty()) { if ($permohonan->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -535,7 +535,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -563,7 +563,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -602,7 +602,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
if ($permohonan->debiture->documents->isEmpty()) { if ($permohonan->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
@@ -679,11 +679,18 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
if ($permohonan->debiture->documents->isEmpty()) { if ($permohonan->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)->get();
foreach ($detail_penawaran as $detail) {
$this->kirimEmailKJPP($noreg, $detail->kjpp_rekanan_id);
}
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id) $detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $penawaran->id)
->where('status', '=', 1) ->where('status', '=', 1)
->pluck('kjpp_rekanan_id') ->pluck('kjpp_rekanan_id')
@@ -713,7 +720,7 @@ class TenderController extends Controller
]; ];
}); });
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -724,6 +731,7 @@ class TenderController extends Controller
$districts = District::where('code', $district_permohonan)->get(); $districts = District::where('code', $district_permohonan)->get();
$cities = City::where('code', $city_permohonan)->get(); $cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get();
$user = auth::user();
$subject = 'Send Penawaran Email'; $subject = 'Send Penawaran Email';
@@ -734,19 +742,21 @@ class TenderController extends Controller
'villages' => $villages, 'villages' => $villages,
'districts' => $districts, 'districts' => $districts,
'cities' => $cities, 'cities' => $cities,
'provinces' => $provinces 'provinces' => $provinces,
'user' => $user,
])->render(); ])->render();
// Dispatch job untuk mengirim email // Dispatch job untuk mengirim email
SendPenawaranTenderJob::dispatch( // SendPenawaranTenderJob::dispatch(
$kjpps->pluck('emails')->flatten()->toArray(), // $kjpps->pluck('emails')->flatten()->toArray(),
$penawaran, // $penawaran,
$permohonan, // $permohonan,
$villages, // $villages,
$districts, // $districts,
$cities, // $cities,
$provinces // $provinces,
); // $user
// );
try { try {
// Proses log email untuk setiap KJPP // Proses log email untuk setiap KJPP
@@ -877,7 +887,7 @@ class TenderController extends Controller
return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!'); return redirect()->route('otorisasitender.penawaran.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk Otorisasi Tender tidak bisa masuk penawaran lagi!');
} }
if ($permohonan->debiture->documents->isEmpty()) { if ($permohonan->documents->isEmpty()) {
return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id])
->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!');
} }
@@ -907,7 +917,7 @@ class TenderController extends Controller
$dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first(); $dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first();
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
$city_permohonan = $document->city_code; $city_permohonan = $document->city_code;
@@ -918,8 +928,9 @@ class TenderController extends Controller
$districts = District::where('code', $district_permohonan)->get(); $districts = District::where('code', $district_permohonan)->get();
$cities = City::where('code', $city_permohonan)->get(); $cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get();
$user = auth()->user();
$subject = 'Send Penawaran K J P P Email'; $subject = 'Send Penawaran Email';
$body_pdf = view('lpj::penawaran.kirimEmailKJPP', [ $body_pdf = view('lpj::penawaran.kirimEmailKJPP', [
'dp1' => $dp1, 'dp1' => $dp1,
@@ -929,7 +940,8 @@ class TenderController extends Controller
'villages' => $villages, 'villages' => $villages,
'districts' => $districts, 'districts' => $districts,
'cities' => $cities, 'cities' => $cities,
'provinces' => $provinces 'provinces' => $provinces,
'user' => $user,
])->render(); ])->render();
SendPenawaranKJPPTenderJob::dispatch( SendPenawaranKJPPTenderJob::dispatch(
@@ -940,7 +952,8 @@ class TenderController extends Controller
$villages, $villages,
$districts, $districts,
$cities, $cities,
$provinces $provinces,
$user
); );
try { try {

View File

@@ -0,0 +1,58 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Modules\Lpj\Models\CustomField;
use Illuminate\Validation\Rule;
class CustomFieldRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
return [
'name' => 'required|max:255',
'type' => 'required|in:text,select,radio,checkbox',
'label' => 'nullable|max:255',
'urutan_prioritas' => [
'nullable',
'integer',
Rule::unique('custom_fields')->ignore($this->route('custom_field')),
],
];
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
public function prepareValidationData($data){
if(!$this->type){
$this->merge(['type' => 'text']);
}
if (!$this->urutan_prioritas) {
$maxPrioritas = CustomField::max('urutan_prioritas') ?? 0;
$this->merge(['urutan_prioritas' => $maxPrioritas + 1]);
}
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'urutan_prioritas.unique' => 'Urutan prioritas sudah digunakan. Silakan pilih nomor lain.',
];
}
}

View File

@@ -567,6 +567,7 @@ class FormSurveyorRequest extends FormRequest
{ {
return [ return [
'permohonan_id' => 'required', 'permohonan_id' => 'required',
'dokument_id' => 'required',
'type' => 'required', 'type' => 'required',
'nomor_registrasi' => 'required', 'nomor_registrasi' => 'required',
'debitur_perwakilan' => 'required|array', 'debitur_perwakilan' => 'required|array',
@@ -632,10 +633,18 @@ class FormSurveyorRequest extends FormRequest
private function getRapRules() private function getRapRules()
{ {
return [ return [
'perizinan.*' => 'required',
'perizinan_file.*' => 'required',
'brosur_price_list.*' => 'required', 'perizinan' => 'nullable|array',
'brosur_price_file.*' => 'required', 'perizinan.*' => 'nullable|string',
'perizinan_file' => 'nullable|array',
'perizinan_file.*' => 'nullable|file|mimes:pdf,docx',
'brosur_price_list' => 'nullable|array',
'brosur_price_list.*' => 'nullable|string',
'brosur_price_list_file' => 'nullable|array',
'brosur_price_list_file.*' => 'nullable|file|mimes:pdf,docx',
'pengalaman_developer' => 'nullable', 'pengalaman_developer' => 'nullable',
'developer_anggota' => 'nullable', 'developer_anggota' => 'nullable',
'lainnya_developer.*' => 'nullable', 'lainnya_developer.*' => 'nullable',
@@ -648,7 +657,13 @@ class FormSurveyorRequest extends FormRequest
'pusat_keramaian' => 'nullable', 'pusat_keramaian' => 'nullable',
'transportasi_umum' => 'nullable', 'transportasi_umum' => 'nullable',
'lainnya_kondisi.*' => 'nullable', 'lainnya_kondisi.*' => 'nullable',
'partisi_.*' => 'nullable',
// Validasi untuk partisi yang diperbarui
'partisi' => 'nullable|array',
'partisi.*' => 'nullable|array',
'partisi.*.nama' => 'nullable|string',
'partisi.*.value' => 'nullable|string|max:255',
'jumlah_unit.*' => 'nullable', 'jumlah_unit.*' => 'nullable',
'batas_batas_perumahan' => 'nullable', 'batas_batas_perumahan' => 'nullable',
'fasus_fasum.*' => 'nullable', 'fasus_fasum.*' => 'nullable',
@@ -657,6 +672,7 @@ class FormSurveyorRequest extends FormRequest
'target_market.*' => 'nullable', 'target_market.*' => 'nullable',
'kerjasama_dengan_bank' => 'nullable', 'kerjasama_dengan_bank' => 'nullable',
'rute_menuju_lokasi' => 'nullable', 'rute_menuju_lokasi' => 'nullable',
'peruntukan' => 'nullable',
'kdb' => 'nullable', 'kdb' => 'nullable',
'kdh' => 'nullable', 'kdh' => 'nullable',
'gsb' => 'nullable', 'gsb' => 'nullable',

View File

@@ -20,6 +20,8 @@
'slug' => 'required|max:255', 'slug' => 'required|max:255',
'custom_field' => 'nullable|max:255', 'custom_field' => 'nullable|max:255',
'custom_field_type' => 'nullable|max:255', 'custom_field_type' => 'nullable|max:255',
'custom_fields' => 'nullable|array',
'custom_fields.*' => 'required|string|max:255',
]; ];
} }
@@ -46,5 +48,10 @@
'slug' => Str::slug($this->name), 'slug' => Str::slug($this->name),
]); ]);
} }
// Ensure custom_fields is always an array
if (!is_array($this->custom_fields)) {
$this->merge(['custom_fields' => []]);
}
} }
} }

View File

@@ -36,7 +36,7 @@ class PenilaianRequest extends FormRequest
'penilai_surveyor_id' => 'nullable', 'penilai_surveyor_id' => 'nullable',
'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id', 'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id',
'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id', 'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id',
'surveyor_penilai_region_id' => 'nullable',
'keterangan' => 'nullable', 'keterangan' => 'nullable',
]; ];

View File

@@ -22,11 +22,12 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
protected $districts; protected $districts;
protected $cities; protected $cities;
protected $provinces; protected $provinces;
protected $user;
/** /**
* Create a new job instance. * Create a new job instance.
*/ */
public function __construct($kjpps, $dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces) public function __construct($kjpps, $dp1, $penawaran, $permohonan, $villages, $districts, $cities, $provinces, $user)
{ {
$this->kjpps = $kjpps; $this->kjpps = $kjpps;
$this->dp1 = $dp1; // Simpan keseluruhan array dp1, bukan dp1[0] $this->dp1 = $dp1; // Simpan keseluruhan array dp1, bukan dp1[0]
@@ -36,6 +37,7 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
$this->districts = $districts; $this->districts = $districts;
$this->cities = $cities; $this->cities = $cities;
$this->provinces = $provinces; $this->provinces = $provinces;
$this->user = $user;
} }
/** /**
@@ -50,7 +52,8 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
$this->villages, $this->villages,
$this->districts, $this->districts,
$this->cities, $this->cities,
$this->provinces $this->provinces,
$this->user // Kirim user ke email sebagai cc dan bcc
); );
$email->with([ $email->with([
@@ -61,6 +64,7 @@ class SendPenawaranKJPPTenderJob implements ShouldQueue
'districts' => $this->districts, 'districts' => $this->districts,
'cities' => $this->cities, 'cities' => $this->cities,
'provinces' => $this->provinces, 'provinces' => $this->provinces,
'user' => $this->user // Kirim user ke email sebagai cc dan bcc
]); ]);
$send = Mail::to($this->kjpps)->send($email); $send = Mail::to($this->kjpps)->send($email);

View File

@@ -21,11 +21,12 @@ class SendPenawaranTenderJob implements ShouldQueue
protected $districts; protected $districts;
protected $cities; protected $cities;
protected $provinces; protected $provinces;
protected $user; // Tidak perlu array [0] lagi
/** /**
* Create a new job instance. * Create a new job instance.
*/ */
public function __construct($kjpps, $penawaran, $permohonan, $villages, $districts, $cities, $provinces) public function __construct($kjpps, $penawaran, $permohonan, $villages, $districts, $cities, $provinces,$user)
{ {
$this->kjpps = $kjpps; $this->kjpps = $kjpps;
$this->penawaran = $penawaran; $this->penawaran = $penawaran;
@@ -34,6 +35,7 @@ class SendPenawaranTenderJob implements ShouldQueue
$this->districts = $districts; $this->districts = $districts;
$this->cities = $cities; $this->cities = $cities;
$this->provinces = $provinces; $this->provinces = $provinces;
$this->user = $user; // Simpan user yang dikirim email ke properti
} }
/** /**
@@ -49,6 +51,7 @@ class SendPenawaranTenderJob implements ShouldQueue
'districts' => $this->districts, 'districts' => $this->districts,
'cities' => $this->cities, 'cities' => $this->cities,
'provinces' => $this->provinces, 'provinces' => $this->provinces,
'user' => $this->user // Kirim user ke email ke properti sebagai additional data
]); ]);
Mail::to($this->kjpps)->send($email); Mail::to($this->kjpps)->send($email);

View File

@@ -0,0 +1,26 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\CustomFieldFactory;
class CustomField extends Base
{
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'name',
'type',
'urutan_prioritas',
'label'
];
// protected static function newFactory(): CustomFieldFactory
// {
// // return CustomFieldFactory::new();
// }
}

View File

@@ -7,5 +7,14 @@
class JenisLegalitasJaminan extends Base class JenisLegalitasJaminan extends Base
{ {
protected $table = 'jenis_legalitas_jaminan'; protected $table = 'jenis_legalitas_jaminan';
protected $fillable = ['code', 'name','slug','custom_field','custom_field_type']; protected $fillable = ['code', 'name','slug','custom_field','custom_field_type','custom_fields'];
protected $casts = [
'custom_fields' => 'array',
];
public function customFields()
{
return $this->hasMany(CustomField::class);
}
} }

View File

@@ -14,18 +14,7 @@ class Penilai extends Model
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected $fillable = [ protected $guarded = ['id'];
'dokument_id',
'permohonan_id',
'inspeksi_id',
'kertas_kerja',
'resume',
'lpj',
'type',
'memo',
'rap',
'type_penilai'
];
// protected static function newFactory(): PenilaiFactory // protected static function newFactory(): PenilaiFactory
// { // {
@@ -41,4 +30,8 @@ class Penilai extends Model
return $this->belongsTo(Inspeksi::class); return $this->belongsTo(Inspeksi::class);
} }
public function penilai_nilai_likuidasi(){
return $this->hasMany(PenilaiNilaiLikuidasi::class);
}
} }

View File

@@ -19,7 +19,7 @@ class Penilaian extends Model
protected $fillable = [ protected $fillable = [
'jenis_penilaian_id', 'penilaian_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi', 'jenis_penilaian_id', 'penilaian_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi',
'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_at', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_at',
'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by','waktu_penilaian', 'deskripsi_penilaian' 'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by','waktu_penilaian', 'deskripsi_penilaian', 'reschedule_date','reschedule_note','rejected_note'
]; ];
public function jenis_penilaian() public function jenis_penilaian()

View File

@@ -217,4 +217,8 @@
public function approveSo(){ public function approveSo(){
return $this->belongsTo(User::class, 'approval_so', 'id'); return $this->belongsTo(User::class, 'approval_so', 'id');
} }
public function authorization(){
return $this->belongsTo(Authorization::class, 'id', 'permohonan_id');
}
} }

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('penilai', function (Blueprint $table) {
$table->string('file_paparan')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penilai', function (Blueprint $table) {
$table->dropColumn('file_paparan');
});
}
};

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('custom_fields', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('type');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('custom_fields');
}
};

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('custom_fields', function (Blueprint $table) {
$table->integer('urutan_prioritas')->nullable()->after('type');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('custom_fields', function (Blueprint $table) {
$table->dropColumn('urutan_prioritas');
});
}
};

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('custom_fields', function (Blueprint $table) {
$table->string('label')->nullable()->after('name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('custom_fields', function (Blueprint $table) {
$table->dropColumn('label');
});
}
};

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('jenis_legalitas_jaminan', function (Blueprint $table) {
$table->string('custom_fields')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('jenis_legalitas_jaminan', function (Blueprint $table) {
$table->dropColumn('custom_fields');
});
}
};

View File

@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('penilaian', function (Blueprint $table) {
$table->datetime('reschedule_date')->nullable()->after('waktu_penilaian');
$table->text('reschedule_note')->nullable()->after('reschedule_date');
$table->text('rejected_note')->nullable()->after('reschedule_note');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penilaian', function (Blueprint $table) {
$table->dropColumn(['reschedule_date', 'reschedule_note', 'rejected_note']);
});
}
};

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('penilai', function (Blueprint $table) {
$table->enum('type_penilai', ['memo', 'resume', 'standard', 'sederhana', 'rap', 'call-report'])
->nullable()
->comment('Jenis penilai: memo, resume, standard, sederhana, rap, call-report')
->change();
$table->json('call_report')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penilai', function (Blueprint $table) {
$table->enum('type_penilai', ['memo', 'resume', 'standard', 'sederhana', 'rap'])
->nullable()
->comment('Jenis penilai: memo, resume, standard, sederhana, rap')
->change();
$table->dropColumn(['type_penilai', 'call_report']);
});
}
};

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class () extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('sla_criteria', function (Blueprint $table) {
$table->id();
$table->string('name_criteria');
$table->string('criteria');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('sla_criteria');
}
};

View File

@@ -302,7 +302,10 @@
"pemohon-ao", "pemohon-ao",
"pemohon-eo", "pemohon-eo",
"admin", "admin",
"surveyor" "surveyor",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
] ]
}, },
{ {
@@ -851,6 +854,17 @@
"administrator", "administrator",
"admin" "admin"
] ]
},
{
"title": "Custom Field",
"path": "basicdata.custom-field",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
} }
] ]
} }

View File

@@ -15,7 +15,7 @@
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card"> <div class="card">
<div class="card-header bg-agi-50" id="advanced_settings_appearance"> <div class="card-header bg-agi-50" id="advanced_settings_appearance">
<h3 class="card-title"> <h3 class="card-title uppercase">
Activity Permohonan Activity Permohonan
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
@@ -54,8 +54,33 @@
</div> </div>
</div> </div>
<div class="card border border-agi-100 grow" id="activity_2024">
@include('lpj::component.history-permohonan') @if ($permohonan->status === 'done')
</div> <div class="card border border-agi-100 grow" id="activity_2024">
<div class="card-header bg-agi-50">
<h3 class="card-title uppercase">
Hasil Laporan Penilaian
</h3>
</div>
<div class="card-body">
<a class="btn btn-info" {{-- href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1" --}}>
LAMPIRAN FOTO DAN DOKUMEN
</a>
<a {{-- href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => request('documentId'), 'jenis_jaminan_id' => request('jaminanId')]) }}" --}} class="btn btn-light">
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
</a>
<a class="btn btn-success" {{-- onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )" --}}>
<i class="ki-filled ki-printer"></i> Print Laporan
</a>
</div>
</div>
@endif
<div class="card border border-agi-100 grow" id="activity_2024">
@include('lpj::component.history-permohonan')
</div>
</div> </div>
@endsection @endsection

View File

@@ -4,35 +4,45 @@
{{ Breadcrumbs::render('activity') }} {{ Breadcrumbs::render('activity') }}
@endsection @endsection
@section('content') @section('content')
@push('styles') @push('styles')
<style> <style>
.dropdown { .dropdown {
position: relative; position: relative;
display: inline-block; display: inline-block;
} }
.dropdowns-content {
display: none;
position: absolute;
background-color: white;
min-width: 224px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown:hover .dropdowns-content {
display: block;
}
.dropdowns-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdowns-content a:hover {
background-color: #f1f1f1;
}
</style>
@endpush .dropdowns-content {
display: none;
position: absolute;
background-color: white;
min-width: 224px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
margin-top: 0;
/* Hilangkan jarak antara tombol dan dropdown */
}
.dropdown:hover .dropdowns-content {
display: block;
}
/* Tambahkan hover untuk elemen dropdown agar tidak hilang */
.dropdowns-content:hover {
display: block;
}
.dropdowns-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdowns-content a:hover {
background-color: #f1f1f1;
}
</style>
@endpush
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <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 border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings"> <div class="card-header bg-agi-50" id="basic_settings">
@@ -219,7 +229,8 @@
tujuan_penilaian_id: { tujuan_penilaian_id: {
title: 'Tujuan Penilaian', title: 'Tujuan Penilaian',
render: (item, data) => { render: (item, data) => {
return data.tujuan_penilaian && data.tujuan_penilaian.name ? `${data.tujuan_penilaian.name}` : '-'; return data.tujuan_penilaian && data.tujuan_penilaian.name ?
`${data.tujuan_penilaian.name}` : '-';
}, },
}, },
status: { status: {
@@ -249,17 +260,34 @@
return `<span class="badge ${badgeClass}">${data.status}</span>`; return `<span class="badge ${badgeClass}">${data.status}</span>`;
}, },
}, },
actions: { actions: {
title: 'Action', title: 'Action',
render: (item, data) => ` render: (item, data) => {
<div class="flex flex-nowrap justify-center"> const status = data.status; // Anggap status berada di dalam objek data
<a class="btn btn-sm btn-icon btn-clear btn-warning" href="activity/${data.id}/show"> const dokumenjaminan = data.dokumenjaminan || [];
<i class="ki-outline ki-eye"></i>
</a> return `
</div>`, <div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-warning" href="activity/${data.id}/show" title="Lihat Detail">
<i class="ki-outline ki-eye"></i>
</a>
${
['survey', 'done', 'proses-laporan', 'laporan', 'paparan'].includes(status) ?
dokumenjaminan.map(dokumen => {
return `
<a class="btn btn-sm btn-icon btn-clear btn-info" href="surveyor/print-out-inspeksi/${data.id}/${dokumen.id}/${dokumen.jenis_jaminan_id}" title="Print Inspeksi Permohonan">
<i class="ki-outline ki-printer"></i>
</a>
`;
}).join('') : ''
} }
}, </div>
`;
},
},
}
}; };
let dataTable = new KTDataTable(element, dataTableOptions); let dataTable = new KTDataTable(element, dataTableOptions);
@@ -306,7 +334,5 @@
const allChecked = Array.from(statusCheckboxes).every(cb => cb.checked); const allChecked = Array.from(statusCheckboxes).every(cb => cb.checked);
selectAllCheckbox.checked = allChecked; selectAllCheckbox.checked = allChecked;
} }
</script> </script>
@endpush @endpush

View File

@@ -185,13 +185,13 @@
</div> </div>
@endif @endif
<div data-accordion="true"> <div data-accordion="true">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
<div class="accordion-item {{ count($permohonan->debiture->documents) == 1 ? 'active' : '' }} [&:not(:last-child)]:border-b border-b-gray-200" <div class="accordion-item {{ count($permohonan->documents) == 1 ? 'active' : '' }} [&:not(:last-child)]:border-b border-b-gray-200"
data-accordion-item="true" id="accordion_detail_jaminan"> data-accordion-item="true" id="accordion_detail_jaminan">
<button @class(['accordion-toggle py-4 group', 'mx-8' => !isset($status)])" <button @class(['accordion-toggle py-4 group', 'mx-8' => !isset($status)])"
data-accordion-toggle="#accordion_detail_jaminan_{{ $loop->index }}"> data-accordion-toggle="#accordion_detail_jaminan_{{ $loop->index }}">
<span class="text-base text-gray-900 font-medium"> <span class="text-base text-gray-900 font-medium">
@if (count($permohonan->debiture->documents) > 1) @if (count($permohonan->documents) > 1)
Jaminan {{ $loop->index + 1 }} Jaminan {{ $loop->index + 1 }}
@else @else
Jaminan Jaminan
@@ -202,7 +202,7 @@
<i class="ki-outline ki-minus text-gray-600 text-2sm accordion-active:block hidden"> <i class="ki-outline ki-minus text-gray-600 text-2sm accordion-active:block hidden">
</i> </i>
</button> </button>
<div class="accordion-content {{ count($permohonan->debiture->documents) > 1 ? 'hidden' : '' }}" <div class="accordion-content {{ count($permohonan->documents) > 1 ? 'hidden' : '' }}"
id="accordion_detail_jaminan_{{ $loop->index }}"> id="accordion_detail_jaminan_{{ $loop->index }}">
@if (!isset($status)) @if (!isset($status))

View File

@@ -1,5 +1,6 @@
<div style="display: none"> <div style="display: none">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
<label class="form-label max-w-56">Debitur/Perwakilan</label> <label class="form-label max-w-56">Debitur/Perwakilan</label>
@if (isset($forminspeksi['asset']['debitur_perwakilan']) && !empty($forminspeksi['asset']['debitur_perwakilan'])) @if (isset($forminspeksi['asset']['debitur_perwakilan']) && !empty($forminspeksi['asset']['debitur_perwakilan']))
@@ -73,8 +74,8 @@
<label class="form-label max-w-56">Jenis Aset</label> <label class="form-label max-w-56">Jenis Aset</label>
<div> <div>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->debiture->documents)) @if (isset($permohonan->documents))
@foreach ($permohonan->debiture->documents as $item) @foreach ($permohonan->documents as $item)
<p class="text-2sm text-gray-700">{{ $item->jenisJaminan->name }}</p> <p class="text-2sm text-gray-700">{{ $item->jenisJaminan->name }}</p>
<input type="hidden" name="jenis_asset_name" <input type="hidden" name="jenis_asset_name"
value="{{ $item->jenisJaminan->name }}"> value="{{ $item->jenisJaminan->name }}">
@@ -217,7 +218,7 @@
<label class="form-label max-w-56">Pemilik Jaminan</label> <label class="form-label max-w-56">Pemilik Jaminan</label>
<div> <div>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@php @php
$hubCadebPemilik = $dokumen->pemilik->hubungan_pemilik->name ?? 'N/A'; $hubCadebPemilik = $dokumen->pemilik->hubungan_pemilik->name ?? 'N/A';
@endphp @endphp
@@ -342,13 +343,18 @@
<h3 class="card-title"> <h3 class="card-title">
{{ $title ?? 'Data Jaminan' }} {{ $title ?? 'Data Jaminan' }}
</h3> </h3>
@php
use Illuminate\Support\Facades\Route;
@endphp
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
@if (isset($id)) @if (Auth::user()->hasAnyRole(['administrator', 'senior-officer', 'EO Appraisal', 'DD Appraisal']) &&
<a href="{{ route($backLink, ['id' => $id]) }}" class="btn btn-xs btn-info"> Route::currentRouteName('otorisator.show'))
<a href="{{ route('otorisator.show', ['id' => $permohonan->id, 'type' => 'Pelaporan']) }}"
class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
@else @elseif (Auth::user()->hasAnyRole(['administrator', 'surveyor']) && Route::currentRouteName('penilai.show'))
<a href="{{ url()->previous() }}" class="btn btn-xs btn-info"> <a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
@endif @endif
@@ -366,7 +372,7 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat Object</label> <label class="form-label max-w-56">Alamat Object</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
<span class="text-2sm text-gray-700"> <span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen->pemilik) }} {{ formatAlamat($dokumen->pemilik) }}
{{ formatAlamat($dokumen->pemilik) }} {{ formatAlamat($dokumen->pemilik) }}
@@ -537,7 +543,7 @@
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@if ($dokumen->jenisJaminan) @if ($dokumen->jenisJaminan)
@php @php
$formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true); $formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true);
@@ -608,8 +614,8 @@
<label for="province" class="form-label max-w-56"> <label for="province" class="form-label max-w-56">
{{ $labelNilai[$item] }} {{ $labelNilai[$item] }}
</label> </label>
<input type="text" id="luas_{{ $item }}" <input type="text" id="luas_{{ $item }}" class="input w-full"
class="input w-full currency-format" name="luas_{{ $item }}" name="luas_{{ $item }}"
value="{{ old('luas_' . $item, $lpjData['luas_' . $item] ?? null) }}" value="{{ old('luas_' . $item, $lpjData['luas_' . $item] ?? null) }}"
oninput="calculateTotal()"> oninput="calculateTotal()">
</div> </div>
@@ -618,7 +624,7 @@
<label class="input"> <label class="input">
<i class="">Rp</i> <i class="">Rp</i>
<input type="text" id="nilai_{{ $item }}_1" <input type="text" id="nilai_{{ $item }}_1"
class="w-full currency-format" name="nilai_{{ $item }}_1" class="w-full currency" name="nilai_{{ $item }}_1"
value="{{ old('nilai_' . $item . '_1', $lpjData['nilai_' . $item . '_1'] ?? null) }}" value="{{ old('nilai_' . $item . '_1', $lpjData['nilai_' . $item . '_1'] ?? null) }}"
oninput="calculateTotal()"> oninput="calculateTotal()">
</label> </label>
@@ -662,18 +668,24 @@
Tambah NPW </button> Tambah NPW </button>
</div> </div>
<div> <div>
<label for="total_nilai_pasar_wajar" class="form-label uppercase">TOTAL NILAI <label for="total_nilai_pasar_wajar" class="form-label uppercase">TOTAL NILAI
LIKUIDASI</label> LIKUIDASI</label>
<div class="card-body grid gap-2.5 w-full"> <div class="card-body grid gap-2.5 w-full">
<div class="flex grid-col-3 gap-2.5 w-full"> <div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<input type="text" id="likuidasi" name="likuidasi" <div class="w-full">
class="input w-full currency-format" <label class="input">
value="{{ old('likuidasi', $lpjData['likuidasi'] ?? null) }}"
oninput="calculateTotal()"> <input type="text" id="likuidasi" name="likuidasi" class=" w-full currency"
value="{{ old('likuidasi', $lpjData['likuidasi'] ?? null) }}"
oninput="calculateTotal()">
<i class="">%
</i>
</label>
<span class="text-xs"> <span class="text-xs text-danger">*</span> Masukkan Angka Saja
</span>
</div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="">X</label> <label for="province" class="">X</label>
@@ -711,7 +723,7 @@
@if (!empty($lpjData['keterangan_penilai']) && is_array($lpjData['keterangan_penilai'])) @if (!empty($lpjData['keterangan_penilai']) && is_array($lpjData['keterangan_penilai']))
@foreach ($lpjData['keterangan_penilai'] as $index => $item) @foreach ($lpjData['keterangan_penilai'] as $index => $item)
<div class="keterangan_penilai flex items-center gap-2 mt-2 textarea-group w-full"> <div class="keterangan_penilai flex items-center gap-2 mt-2 textarea-group w-full">
<textarea name="keterangan_penilai[]" class="textarea mt-2" placeholder="Masukkan catatan penting" rows="3">{{ old("keterangan_penilai.$index", $item) }}</textarea> <textarea name="keterangan_penilai[]" class="textarea mt-2 " placeholder="Masukkan catatan penting" rows="10" >{{ old("keterangan_penilai.$index", $item) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -720,7 +732,7 @@
@endforeach @endforeach
@else @else
<div class="keterangan_penilai flex items-center gap-2 mt-2 textarea-group w-full"> <div class="keterangan_penilai flex items-center gap-2 mt-2 textarea-group w-full">
<textarea name="keterangan_penilai[]" class="textarea mt-2" placeholder="Masukkan catatan penting" rows="3"></textarea> <textarea name="keterangan_penilai[]" class="textarea mt-2 " placeholder="Masukkan catatan penting" rows="10"></textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -752,7 +764,7 @@
<div class="flex grid-col-3 gap-2.5 w-full"> <div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label">Luas Bangunan</label> <label for="province" class="form-label">Luas Bangunan</label>
<input type="text" class="input w-full currency-format" id="asuransi_luas_bangunan" <input type="text" class="input w-full" id="asuransi_luas_bangunan"
name="asuransi_luas_bangunan" name="asuransi_luas_bangunan"
value="{{ old('asuransi_luas_bangunan', $lpjData['asuransi_luas_bangunan'] ?? null) }}" value="{{ old('asuransi_luas_bangunan', $lpjData['asuransi_luas_bangunan'] ?? null) }}"
oninput="calculateTotal()"> oninput="calculateTotal()">
@@ -762,7 +774,7 @@
<label class="input"> <label class="input">
<i class="">Rp <i class="">Rp
</i> </i>
<input type="text" class="input w-full currency-format" id="asuransi_nilai_1" <input type="text" class="input w-full currency" id="asuransi_nilai_1"
name="asuransi_nilai_1" name="asuransi_nilai_1"
value="{{ old('asuransi_nilai_1', $lpjData['asuransi_nilai_1'] ?? null) }}" value="{{ old('asuransi_nilai_1', $lpjData['asuransi_nilai_1'] ?? null) }}"
oninput="calculateTotal()"> oninput="calculateTotal()">
@@ -787,7 +799,12 @@
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
const datas = @json($forminspeksi);
console.log(datas);
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
const tambahNPWButton = document.getElementById('tambah-npw'); const tambahNPWButton = document.getElementById('tambah-npw');
const addPasarWajarContainer = document.getElementById('add_pasar_wajar'); const addPasarWajarContainer = document.getElementById('add_pasar_wajar');
let npwCounter = 0; let npwCounter = 0;
@@ -807,7 +824,7 @@
<input type="text" <input type="text"
id="luas_npw_${npwCounter}" id="luas_npw_${npwCounter}"
class="input w-full currency-format" class="input w-full "
name="luas_npw_${npwCounter}" name="luas_npw_${npwCounter}"
placeholder="Luas NPW" placeholder="Luas NPW"
oninput="calculateTotal()"> oninput="calculateTotal()">
@@ -819,7 +836,7 @@
</i> </i>
<input type="text" <input type="text"
id="nilai_npw_${npwCounter}_1" id="nilai_npw_${npwCounter}_1"
class=" w-full currency-format" class=" w-full currency"
name="nilai_npw_${npwCounter}_1" name="nilai_npw_${npwCounter}_1"
placeholder="Harga per meter" placeholder="Harga per meter"
oninput="calculateTotal()"> oninput="calculateTotal()">
@@ -899,7 +916,7 @@
</i> </i>
<input type="text" <input type="text"
id="nilai_npw_${npwCounter}_1" id="nilai_npw_${npwCounter}_1"
class=" w-full currency-format" class=" w-full currency"
name="nilai_npw_${npwCounter}_1" name="nilai_npw_${npwCounter}_1"
placeholder="Harga per meter" placeholder="Harga per meter"
value="${npw.nilai_1 || ''}" value="${npw.nilai_1 || ''}"
@@ -953,13 +970,43 @@
// Panggil fungsi load NPW saat halaman dimuat // Panggil fungsi load NPW saat halaman dimuat
loadSavedNPW(); loadSavedNPW();
document.querySelectorAll('.currency-format').forEach(input => {
input.addEventListener('input', function() {
formatCurrency(this);
});
});
}); });
function formatPercentage(value) {
// Hapus semua karakter kecuali angka dan koma
let numericValue = value.replace(/[^0-9,]/g, '');
// Pastikan hanya satu koma yang ada
let parts = numericValue.split(',');
if (parts.length > 2) {
numericValue = parts[0] + ',' + parts[1]; // Pertahankan hanya bagian pertama dan kedua
}
// Jika nilai melebihi 100, batasi menjadi 100
let numericFloat = parseFloat(numericValue.replace(',', '.')) || 0;
if (numericFloat > 100) {
numericFloat = 100;
numericValue = '100';
}
// Kembalikan nilai dengan simbol %
return numericValue;
}
function calculateTotal() { function calculateTotal() {
const parseInput = (value) => parseFloat(value.replace(/[^0-9]/g, '')) || 0; const parseInput = (value) => parseFloat(value.replace(/[^0-9]/g, '')) || 0;
// Bagian Likuidasi // Bagian Likuidasi
let persentaseLikuidasi = parseInput(document.getElementById('likuidasi').value); let persentaseLikuidasiInput = document.getElementById('likuidasi');
let persentaseLikuidasi = parseInput(persentaseLikuidasiInput.value);
persentaseLikuidasiInput.value = formatPercentage(persentaseLikuidasiInput.value);
let totalNilaiPasarLikuidasi = document.querySelector('input[name="likuidasi_nilai_1"]'); let totalNilaiPasarLikuidasi = document.querySelector('input[name="likuidasi_nilai_1"]');
let totalLikuidasi = document.querySelector('input[name="likuidasi_nilai_2"]'); let totalLikuidasi = document.querySelector('input[name="likuidasi_nilai_2"]');
@@ -974,17 +1021,30 @@
let totalNilaiPasarWajar = 0; let totalNilaiPasarWajar = 0;
// Perhitungan untuk input yang sudah ada // Perhitungan untuk input yang sudah ada
const standardInputs = [{ const jenisAsetData = @json($jenisAset);
luas: 'luas_tanah',
nilai: 'nilai_tanah_1', // Menentukan input yang akan dihitung berdasarkan jenis aset
output: 'nilai_tanah_2' let standardInputs = [];
},
{ if (jenisAsetData.toUpperCase() === 'RUKO/RUKAN') {
standardInputs = [{
luas: 'luas_bangunan', luas: 'luas_bangunan',
nilai: 'nilai_bangunan_1', nilai: 'nilai_bangunan_1',
output: 'nilai_bangunan_2' output: 'nilai_bangunan_2'
} }];
]; } else {
standardInputs = [{
luas: 'luas_tanah',
nilai: 'nilai_tanah_1',
output: 'nilai_tanah_2'
},
{
luas: 'luas_bangunan',
nilai: 'nilai_bangunan_1',
output: 'nilai_bangunan_2'
}
];
}
standardInputs.forEach(input => { standardInputs.forEach(input => {
let luas = parseInput(document.getElementById(input.luas).value); let luas = parseInput(document.getElementById(input.luas).value);
@@ -1056,7 +1116,7 @@
confirmButtonText: 'OK' confirmButtonText: 'OK'
}).then((response) => { }).then((response) => {
if (response.isConfirmed) { if (response.isConfirmed) {
// window.location.reload(); window.location.reload();
} }
}); });
} else { } else {
@@ -1083,5 +1143,20 @@
} }
}); });
} }
function formatCurrencyInput(input) {
const value = input.value.replace(/[^0-9]/g, ''); // Hapus karakter non-angka
if (!value) {
input.value = ''; // Kosongkan jika tidak ada angka
return;
}
// Format ke mata uang
const formattedValue = new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR'
}).format(value);
input.value = formattedValue;
}
</script> </script>
@include('lpj::surveyor.js.utils')

View File

@@ -3,11 +3,11 @@
<div class="bg-white rounded-lg overflow-hidden shadow-xl transform transition-all min-w-3xl w-[1280px] h-[768px]"> <div class="bg-white rounded-lg overflow-hidden shadow-xl transform transition-all min-w-3xl w-[1280px] h-[768px]">
<div class="p-4 h-full flex flex-col"> <div class="p-4 h-full flex flex-col">
<div class="flex justify-between items-center mb-4"> <div class="flex justify-between items-center mb-4">
<button id="downloadBtn" class="btn btn-primary btn-sm"> <button type="button" id="downloadBtn" class="btn btn-primary btn-sm">
<i class="ki-duotone ki-cloud-download me-1"><span class="path1"></span><span class="path2"></span></i> <i class="ki-duotone ki-cloud-download me-1"><span class="path1"></span><span class="path2"></span></i>
Download File Download File
</button> </button>
<button onclick="closePreviewModal()" class="text-2xl"> <button type="button" onclick="closePreviewModal()" class="text-2xl">
<i class="ki-filled ki-cross-square text-red-600"></i> <i class="ki-filled ki-cross-square text-red-600"></i>
</button> </button>
</div> </div>

View File

@@ -0,0 +1,38 @@
<div class="signature-pad-container mx-auto border p-4 max-w-md sm:max-w-lg lg:max-w-xl">
<h3 class="signature-title text-lg sm:text-xl font-semibold mb-2">{{ ucfirst($type) }}</h3>
<canvas
id="signature-pad-{{ $type }}"
class="signature-pad w-full h-48 sm:h-56 bg-white border rounded"
></canvas>
<input
type="text"
class="input w-full border p-2 mt-2 rounded"
name="name-{{ $type }}"
id="name-{{ $type }}"
placeholder="Enter your name"
/>
<div class="button-container flex justify-between py-4">
<button
type="button"
id="save-{{ $type }}"
class="btn btn-primary px-4 py-2 rounded "
>
Save
</button>
<button
type="button"
id="clear-{{ $type }}"
class="btn btn-light px-4 py-2 rounded"
>
Clear
</button>
<button
type="button"
id="delete-{{ $type }}"
class="btn btn-danger text-white px-4 py-2 rounded hover:bg-red-600"
>
Delete
</button>
</div>
<div id="status-{{ $type }}" class="status-message text-sm text-gray-600 mt-2"></div>
</div>

View File

@@ -0,0 +1,89 @@
@php
$route = explode('.', Route::currentRouteName());
@endphp
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@if(isset($customField->id))
<form action="{{ route('basicdata.custom-field.update', $customField->id) }}" method="POST">
<input type="hidden" name="id" value="{{ $customField->id }}">
@method('PUT')
@else
<form method="POST" action="{{ route('basicdata.custom-field.store') }}">
@endif
@csrf
<div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title">
{{ isset($customField->id) ? 'Edit' : 'Tambah' }} Custom Field
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('basicdata.custom-field.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $customField->name ?? '' }}">
@error('name')
<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">
Label
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('label') border-danger bg-danger-light @enderror" type="text" name="label" value="{{ $customField->label ?? '' }}">
@error('label')
<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">
Type
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input @error('type') border-danger bg-danger-light @enderror" name="type">
<option value="text" {{ (isset($customField->type) && $customField->type == 'text') ? 'selected' : '' }}>Text</option>
<option value="radio" {{ (isset($customField->type) && $customField->type == 'radio') ? 'selected' : '' }}>Radio</option>
<option value="number" {{ (isset($customField->type) && $customField->type == 'select') ? 'selected' : '' }}>Select</option>
<option value="option" {{ (isset($customField->type) && $customField->type == 'checkbox') ? 'selected' : '' }}>Checkbox</option>
</select>
@error('type')
<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">
Urutan Prioritas
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('urutan_prioritas') border-danger bg-danger-light @enderror" type="number" name="urutan_prioritas" value="{{ $customField->urutan_prioritas ?? $urutan_prioritas }}">
@error('urutan_prioritas')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Save
</button>
</div>
</div>
</div>
</form>
</div>
@endsection

View File

@@ -0,0 +1,153 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('basicdata.custom-field') }}
@endsection
@section('content')
<div class="grid">
<div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="custom-field-table" data-api-url="{{ route('basicdata.custom-field.datatables') }}">
<div class="card-header bg-agi-50 py-5 flex-wrap">
<h3 class="card-title">
Daftar Custom Field
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Custom Field" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="{{ route('basicdata.custom-field.export') }}"> Export to Excel </a>
<a class="btn btn-sm btn-primary" href="{{ route('basicdata.custom-field.create') }}"> Tambah Custom Field </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[250px]" data-datatable-column="name">
<span class="sort"> <span class="sort-label"> Custom Field </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[250px]" data-datatable-column="type">
<span class="sort"> <span class="sort-label"> Type </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[250px]" data-datatable-column="urutan_prioritas">
<span class="sort"> <span class="sort-label"> Urutan Prioritas </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
function deleteData(data) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
$.ajax(`basic-data/custom-field/${data}`, {
type: 'DELETE'
}).then((response) => {
swal.fire('Deleted!', 'User has been deleted.', 'success').then(() => {
window.location.reload();
});
}).catch((error) => {
console.error('Error:', error);
Swal.fire('Error!', 'An error occurred while deleting the file.', 'error');
});
}
})
}
</script>
<script type="module">
const element = document.querySelector('#custom-field-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
label: {
title: 'Custom Field',
},
type: {
title: 'Type',
},
urutan_prioritas: {
title: 'Urutan Prioritas',
},
actions: {
title: 'Status',
render: (item, data) => {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-info" href="basic-data/custom-field/${data.id}/edit">
<i class="ki-outline ki-notepad-edit"></i>
</a>
<a onclick="deleteData(${data.id})" class="delete btn btn-sm btn-icon btn-clear btn-danger">
<i class="ki-outline ki-trash"></i>
</a>
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -3,7 +3,7 @@
@method('PUT') @method('PUT')
@endif @endif
@csrf @csrf
<input type="hidden" name="permohonan_id" value="{{ $document->id ?? request()->get('permohonan_id') }}"> <input type="hidden" name="permohonan_id" value="{{ $document->permohonan_id ?? request()->get('permohonan_id') }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Debitur Debitur
@@ -16,16 +16,16 @@
</p> </p>
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Nomor Permohonan Nomor Permohonan
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<p class="text-base text-gray-700 font-bold"> <p class="text-base text-gray-700 font-bold">
{{ $permohonan->nomor_registrasi ?? "-" }} {{ $permohonan->nomor_registrasi ?? "-" }}
</p> </p>
</div>
</div> </div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Pemilik Jaminan Pemilik Jaminan
@@ -314,38 +314,30 @@
</div> </div>
@if($detail->details) @if($detail->details)
@if($detail->jenisLegalitasJaminan->custom_field) @if($detail->jenisLegalitasJaminan->custom_fields)
@php $custom_field = json_decode($detail->details,true) @endphp @foreach($detail->jenisLegalitasJaminan->custom_fields as $key)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize"> <label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }} {{ getCustomField($key)->label ?? "" }}
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] ?? '' }}"> <input class="input" type="text" name="custom_field[{{$detail->jenisLegalitasJaminan->id}}][{{getCustomField($key)->name}}]" value="{{ json_decode($detail->details)->{getCustomField($key)->name} ?? '' }}">
</div>
</div> </div>
</div> @endforeach
@endif @endif
@else @else
@if($detail->jenisLegalitasJaminan->custom_field) @if($detail->jenisLegalitasJaminan->custom_fields)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> @foreach($detail->jenisLegalitasJaminan->custom_fields as $key)
<label class="form-label max-w-56 capitalize"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }} <label class="form-label max-w-56 capitalize">
</label> {{ getCustomField($key)->label }}
<div class="flex flex-wrap items-baseline w-full"> </label>
@if($detail->jenisLegalitasJaminan->custom_field_type === "text") <div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2"> <input class="input" type="text" name="custom_field[{{$detail->jenisLegalitasJaminan->id}}][{{getCustomField($key)->name}}]" placeholder="...">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "number") </div>
<input class="input" type="number" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@endif
</div> </div>
</div> @endforeach
@endif @endif
@endif @endif
@@ -393,25 +385,17 @@
</div> </div>
</div> </div>
@if($item->custom_field) @if($item->custom_fields)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> @foreach($item->custom_fields as $field)
<label class="form-label max-w-56 capitalize"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
{{ str_replace('_',' ',$item->custom_field) }} <label class="form-label max-w-56 capitalize">
</label> {{ getCustomField($field)->label }}
<div class="flex flex-wrap items-baseline w-full"> </label>
@if($item->custom_field_type === "text") <div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2"> <input class="input" type="text" name="custom_field[{{$item->id}}][{{getCustomField($field)->name}}]" placeholder="...">
@elseif($item->custom_field_type === "number") </div>
<input class="input" type="number" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@endif
</div> </div>
</div> @endforeach
@endif @endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -437,13 +421,13 @@
@push('scripts') @push('scripts')
{{--Pemilik Jaminan--}} {{--Pemilik Jaminan--}}
<script> <script>
document.addEventListener("DOMContentLoaded", function() { document.addEventListener("DOMContentLoaded", function () {
const namaSertifikatDiv = document.getElementById("nama_sertifikat"); const namaSertifikatDiv = document.getElementById("nama_sertifikat");
// Function to add delete event listeners to existing buttons // Function to add delete event listeners to existing buttons
function addDeleteListeners() { function addDeleteListeners() {
document.querySelectorAll(".delete-button").forEach(button => { document.querySelectorAll(".delete-button").forEach(button => {
button.addEventListener("click", function() { button.addEventListener("click", function () {
this.closest(".flex.items-baseline.flex-wrap.lg\\:flex-nowrap.gap-2\\.5.mb-5").remove(); this.closest(".flex.items-baseline.flex-wrap.lg\\:flex-nowrap.gap-2\\.5.mb-5").remove();
}); });
}); });
@@ -452,7 +436,7 @@
// Add delete listeners to existing buttons // Add delete listeners to existing buttons
addDeleteListeners(); addDeleteListeners();
document.getElementById("tambah_sertifikat").addEventListener("click", function() { document.getElementById("tambah_sertifikat").addEventListener("click", function () {
const newDiv = document.createElement("div"); const newDiv = document.createElement("div");
newDiv.className = "flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mb-5"; newDiv.className = "flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mb-5";
newDiv.innerHTML = ` newDiv.innerHTML = `
@@ -547,16 +531,16 @@
</div> </div>
</div> </div>
${item.custom_field ? ` ${item.custom_fields && item.custom_fields.length > 0 ? item.custom_fields.map(field => `
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize"> <label class="form-label max-w-56 capitalize">
${item.custom_field.replace(/_/g, " ")} ${field.label}
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
${getCustomFieldInput(item.custom_field_type, item.custom_field, item.details)} ${getCustomFieldInput(field.type, field.name, item.details, item.jenis_legalitas_jaminan_id)}
</div> </div>
</div> </div>
` : ""} `).join('') : ""}
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
@@ -637,19 +621,19 @@
return dokumenNomor; return dokumenNomor;
} }
function getCustomFieldInput(type, fieldName, value) { function getCustomFieldInput(type, fieldName, value, itemId) {
value = value ? JSON.parse(value)[fieldName] || "" : ""; value = value ? JSON.parse(value)[fieldName] || "" : "";
switch (type) { switch (type) {
case "text": case "text":
return `<input class="input" type="text" name="custom_field[][${fieldName}]" value="${value}">`; return `<input class="input" type="text" name="custom_field[${itemId}][${fieldName}]" value="${value}">`;
case "number": case "number":
return `<input class="input" type="number" name="custom_field[][${fieldName}]" value="${value}">`; return `<input class="input" type="number" name="custom_field[${itemId}][${fieldName}]" value="${value}">`;
case "date": case "date":
return `<input class="input" type="date" name="custom_field[][${fieldName}]" value="${value}">`; return `<input class="input" type="date" name="custom_field[${itemId}][${fieldName}]" value="${value}">`;
case "textarea": case "textarea":
return `<textarea class="textarea" rows="3" name="custom_field[][${fieldName}]">${value}</textarea>`; return `<textarea class="textarea" rows="3" name="custom_field[${itemId}][${fieldName}]">${value}</textarea>`;
default: default:
return `<input class="input" type="text" name="custom_field[][${fieldName}]" value="${value}">`; return `<input class="input" type="text" name="custom_field[${itemId}][${fieldName}]" value="${value}">`;
} }
} }
</script> </script>

View File

@@ -13,7 +13,13 @@
{{ isset($document->id) ? 'Edit' : 'Tambah' }} Data Jaminan {{ isset($document->id) ? 'Edit' : 'Tambah' }} Data Jaminan
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
@if (Auth::user()->roles[0]->name === 'admin')
<a href="{{ url()->previous() }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@else
<a href="{{ route('debitur.jaminan.index',$debitur->id) }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a> <a href="{{ route('debitur.jaminan.index',$debitur->id) }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
@endif
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">

View File

@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jadwal Kunjungan</title>
<style>
body {
background-color: #f3f4f6;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
margin: 0;
padding: 20px;
}
.email-container {
max-width: 42rem;
margin: 0 auto;
background-color: white;
border-radius: 0.5rem;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
padding: 1.5rem;
}
.header {
border-bottom: 1px solid #e5e7eb;
padding-bottom: 1rem;
margin-bottom: 1.5rem;
}
.title {
font-size: 1.5rem;
font-weight: 700;
color: #1f2937;
margin: 0;
}
.subtitle {
color: #4b5563;
margin: 0.25rem 0 0 0;
}
.content-row {
display: flex;
align-items: center;
margin-bottom: 1rem;
}
.content-row:last-child {
margin-bottom: 0;
}
.label {
width: 8rem;
font-weight: 500;
color: #374151;
}
.value {
color: #111827;
flex-grow: 1;
}
.footer {
margin-top: 2rem;
padding-top: 1rem;
border-top: 1px solid #e5e7eb;
font-size: 0.875rem;
color: #6b7280;
}
@media (max-width: 640px) {
.content-row {
flex-direction: column;
align-items: flex-start;
}
.label {
margin-bottom: 0.5rem;
width: auto;
}
}
</style>
</head>
<body>
<div class="email-container">
<!-- Header -->
<div class="header">
<h1 class="title">Jadwal Kunjungan Penilaian</h1>
<p class="subtitle">Dikirim melalui Sistem Penilaian</p>
</div>
<!-- Content -->
<div class="content">
<div class="content-row">
<span class="label">ID Penilaian:</span>
<span class="value">{{ $id }}</span>
</div>
<div class="content-row">
<span class="label">Waktu Penilaian:</span>
<span class="value">{{ \Carbon\Carbon::parse($waktu_penilaian)->format('d F Y H:i') }}</span>
</div>
<div class="content-row">
<span class="label">Deskripsi:</span>
<p class="value">{{ $deskripsi_penilaian }}</p>
</div>
</div>
<!-- Footer -->
<div class="footer">
<p>Email ini dikirim secara otomatis, mohon tidak membalas email ini.</p>
<p style="margin-top: 0.5rem;">&copy; {{ date('Y') }} Sistem Penilaian. All rights reserved.</p>
</div>
</div>
</body>
</html>

View File

@@ -92,28 +92,28 @@
@enderror @enderror
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <label class="form-label max-w-56">
<label class="form-label max-w-56"> Jenis Legalitas Jaminan
Jenis Legalitas Jaminan </label>
</label> <div class="grid grid-cols-3 lg:grid-cols-4 w-full gap-2.5">
<div class="grid grid-cols-3 lg:grid-cols-4 w-full gap-2.5"> @foreach ($jenisLegalitasJaminan as $row)
@foreach ($jenisLegalitasJaminan as $row) <label class="switch">
<label class="switch"> @if ( isset($jenisJaminan) && !empty(json_decode($jenisJaminan->jenis_legalitas_jaminan_id, true)))
@if ( isset($jenisJaminan) && !empty(json_decode($jenisJaminan->jenis_legalitas_jaminan_id, true))) <input type="checkbox" @if (in_array($row->code, json_decode($jenisJaminan->jenis_legalitas_jaminan_id, true))) {{ 'checked' }} @endif
<input type="checkbox" @if (in_array($row->code, json_decode($jenisJaminan->jenis_legalitas_jaminan_id, true))) {{ 'checked' }} @endif
value="{{ $row->code }}" name="jenis_legalitas_jaminan_id[]" /> value="{{ $row->code }}" name="jenis_legalitas_jaminan_id[]" />
@else @else
<input type="checkbox" value="{{ $row->code }}" <input type="checkbox" value="{{ $row->code }}"
name="jenis_legalitas_jaminan_id[]" /> name="jenis_legalitas_jaminan_id[]" />
@endif @endif
<span class="switch-label"> <span class="switch-label">
{{ $row->name }} {{ $row->name }}
</span> </span>
</label> </label>
@endforeach @endforeach
</div>
</div> </div>
</div>
<div class="flex justify-end"> <div class="flex justify-end">
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
Save Save

View File

@@ -10,83 +10,107 @@
<form action="{{ route('basicdata.jenis-legalitas-jaminan.update', $jenisLegalitasJaminan->id) }}" method="POST"> <form action="{{ route('basicdata.jenis-legalitas-jaminan.update', $jenisLegalitasJaminan->id) }}" method="POST">
<input type="hidden" name="id" value="{{ $jenisLegalitasJaminan->id }}"> <input type="hidden" name="id" value="{{ $jenisLegalitasJaminan->id }}">
@method('PUT') @method('PUT')
@else @else
<form method="POST" action="{{ route('basicdata.jenis-legalitas-jaminan.store') }}"> <form method="POST" action="{{ route('basicdata.jenis-legalitas-jaminan.store') }}">
@endif @endif
@csrf @csrf
<div class="card border border-agi-100 pb-2.5"> <div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings"> <div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title"> <h3 class="card-title">
{{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan {{ isset($jenisLegalitasJaminan->id) ? 'Edit' : 'Tambah' }} Jenis Legalitas Jaminan
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('basicdata.jenis-legalitas-jaminan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a> <a href="{{ route('basicdata.jenis-legalitas-jaminan.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div> </div>
</div> </div>
<div class="card-body grid gap-5"> <div class="card-body grid gap-5">
@if(isset($jenisLegalitasJaminan->id)) @if(isset($jenisLegalitasJaminan->id))
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Code Code
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input readonly class="input border-warning bg-warning-light @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisLegalitasJaminan->code ?? '' }}"> <input readonly class="input border-warning bg-warning-light @error('code') border-danger bg-danger-light @enderror" type="text" name="code" value="{{ $jenisLegalitasJaminan->code ?? '' }}">
@error('code') @error('code')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
@endif @endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Name Name
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisLegalitasJaminan->name ?? '' }}"> <input class="input @error('name') border-danger bg-danger-light @enderror" type="text" name="name" value="{{ $jenisLegalitasJaminan->name ?? '' }}">
@error('name') @error('name')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
<!-- Tambahkan inputan custom_field --> <!-- Tambahkan inputan custom_field -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Custom Field Custom Field
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input @error('custom_field') border-danger bg-danger-light @enderror" type="text" name="custom_field" value="{{ $jenisLegalitasJaminan->custom_field ?? '' }}"> <input class="input @error('custom_field') border-danger bg-danger-light @enderror" type="text" name="custom_field" value="{{ $jenisLegalitasJaminan->custom_field ?? '' }}">
@error('custom_field') @error('custom_field')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
<!-- Tambahkan inputan custom_field_type --> <!-- Tambahkan inputan custom_field_type -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Custom Field Type Custom Field Type
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect @error('custom_field_type') border-danger bg-danger-light @enderror" name="custom_field_type"> <select class="input tomselect @error('custom_field_type') border-danger bg-danger-light @enderror" name="custom_field_type">
<option value="">Pilih Tipe</option> <option value="">Pilih Tipe</option>
<option value="text" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'text') ? 'selected' : '' }}>Text</option> <option value="text" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'text') ? 'selected' : '' }}>Text</option>
<option value="number" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'number') ? 'selected' : '' }}>Number</option> <option value="number" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'number') ? 'selected' : '' }}>Number</option>
<option value="date" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'date') ? 'selected' : '' }}>Date</option> <option value="date" {{ (isset($jenisLegalitasJaminan) && $jenisLegalitasJaminan->custom_field_type == 'date') ? 'selected' : '' }}>Date</option>
</select> </select>
@error('custom_field_type') @error('custom_field_type')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Custom Fields
</label>
<div class="grid grid-cols-3 lg:grid-cols-4 w-full gap-2.5">
@foreach($customFields as $customField)
<label class="switch">
@if ( isset($jenisLegalitasJaminan) && !empty($jenisLegalitasJaminan->custom_fields))
<input type="checkbox" @if (in_array($customField->id, $jenisLegalitasJaminan->custom_fields))
{{ 'checked' }}
@endif
value="{{ $customField->id }}" name="custom_fields[]"/>
@else
<input type="checkbox" value="{{ $customField->id }}"
name="custom_fields[]"/>
@endif
<span class="switch-label">
{{ $customField->urutan_prioritas.'. '.$customField->label }}
</span>
</label>
@endforeach
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary"> <div class="flex justify-end">
Save <button type="submit" class="btn btn-primary">
</button> Save
</div> </button>
</div> </div>
</div> </div>
</form> </div>
</form>
</div> </div>
@endsection @endsection

View File

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

View File

@@ -59,7 +59,7 @@
Liquidasi (%) Liquidasi (%)
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <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"> <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->likuidasi ?? '') }}" placeholder="Masukkan Persentase Liquidasi">
@error('liquidasi') @error('liquidasi')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror
@@ -71,7 +71,7 @@
Nilai Liquidasi Nilai Liquidasi
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <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"> <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" value="{{ old('nilai_liquidasi', $lpj->likuidasi_nilai_2 ?? '') }}">
@error('nilai_liquidasi') @error('nilai_liquidasi')
<em class="alert text-danger text-sm">{{ $message }}</em> <em class="alert text-danger text-sm">{{ $message }}</em>
@enderror @enderror

View File

@@ -76,7 +76,7 @@
} }
} }
} }
} catch (\Exception $e) { } catch (Exception $e) {
// Handle invalid JSON silently // Handle invalid JSON silently
} }
} }
@@ -102,10 +102,10 @@
</div> </div>
<div class="content-max"> <div class="content-max">
Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) Aset Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->jenisJaminan->name }} {{ $document->jenisJaminan->name }}
@endforeach @endforeach
<span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) <span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->address }}, Kel. @foreach ($villages as $village) {{ $document->address }}, Kel. @foreach ($villages as $village)
{{ $village->name }} {{ $village->name }}
@endforeach, Kec. @foreach ($districts as $district) @endforeach, Kec. @foreach ($districts as $district)
@@ -118,47 +118,44 @@
@endforeach @endforeach
</span> </span>
Luas Tanah / Luas Bangunan: <br> Dokumen Jaminan: <br>
@php @php
$luas_tanah = null; $n = 1;
$luas_bangunan = null;
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
@foreach ($document->detail as $detail) @foreach ($document->detail as $detail)
@php @php
$details = json_decode($detail->details); $details = json_decode($detail->details);
@endphp @endphp
@if (is_object($details)) @if (isset($details->luas_tanah) && isset($details->luas_bangunan))
@if ( {{ $n }}. {{ $detail->name }}<br>
$detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && Luas Tanah / Luas Bangunan:
isset($details->{'luas_tanah'}) && {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
is_numeric($details->{'luas_tanah'})) m<sup>2</sup>
@php /
$luas_tanah = $details->{'luas_tanah'}; {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
@endphp m<sup>2</sup>
@endif <br>
@php $n++; @endphp
@if ( @elseif (isset($details->luas_tanah))
$detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && {{ $n }}. {{ $detail->name }}<br>
isset($details->{'luas_bangunan'}) && Luas Tanah :
is_numeric($details->{'luas_bangunan'})) {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
@php m<sup>2</sup>
$luas_bangunan = $details->{'luas_bangunan'}; <br>
@endphp @php $n++; @endphp
@endif @elseif (isset($details->luas_bangunan))
{{ $n }}. {{ $detail->name }}<br>
Luas Bangunan:
{{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
m<sup>2</sup>
<br>
@php $n++; @endphp
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if ($luas_tanah !== null && $luas_bangunan !== null)
{{ $luas_tanah }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
@elseif ($luas_tanah !== null)
{{ $luas_tanah }} m<sup>2</sup>
@elseif ($luas_bangunan !== null)
{{ $luas_bangunan }} m<sup>2</sup>
@endif
</div> </div>
<div class="content"> <div class="content">
@@ -169,10 +166,10 @@
<div class="signature"> <div class="signature">
Best Regards,<br /> Best Regards,<br />
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}" <img src="{{ asset('storage/signatures/' . $user->id . '/' . $user->sign) }}" alt="{{ $user->name }}"
alt="{{ $permohonan->user->name }}" width="200"> width="200">
<p> <p>
{{ $permohonan->user->name }} {{ $user->name }}
</p> </p>
</div> </div>

View File

@@ -104,10 +104,10 @@
</div> </div>
<div class="content-max"> <div class="content-max">
Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) Aset Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->jenisJaminan->name }} {{ $document->jenisJaminan->name }}
@endforeach @endforeach
<span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) <span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->address }}, Kel. @foreach ($villages as $village) {{ $document->address }}, Kel. @foreach ($villages as $village)
{{ $village->name }} {{ $village->name }}
@endforeach, Kec. @foreach ($districts as $district) @endforeach, Kec. @foreach ($districts as $district)
@@ -120,47 +120,44 @@
@endforeach @endforeach
</span> </span>
Luas Tanah / Luas Bangunan: <br> Dokumen Jaminan: <br>
@php @php
$luas_tanah = null; $n = 1;
$luas_bangunan = null;
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
@foreach ($document->detail as $detail) @foreach ($document->detail as $detail)
@php @php
$details = json_decode($detail->details); $details = json_decode($detail->details);
@endphp @endphp
@if (is_object($details)) @if (isset($details->luas_tanah) && isset($details->luas_bangunan))
@if ( {{ $n }}. {{ $detail->name }}<br>
$detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && Luas Tanah / Luas Bangunan:
isset($details->{'luas_tanah'}) && {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
is_numeric($details->{'luas_tanah'})) m<sup>2</sup>
@php /
$luas_tanah = $details->{'luas_tanah'}; {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
@endphp m<sup>2</sup>
@endif <br>
@php $n++; @endphp
@if ( @elseif (isset($details->luas_tanah))
$detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && {{ $n }}. {{ $detail->name }}<br>
isset($details->{'luas_bangunan'}) && Luas Tanah :
is_numeric($details->{'luas_bangunan'})) {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
@php m<sup>2</sup>
$luas_bangunan = $details->{'luas_bangunan'}; <br>
@endphp @php $n++; @endphp
@endif @elseif (isset($details->luas_bangunan))
{{ $n }}. {{ $detail->name }}<br>
Luas Bangunan:
{{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
m<sup>2</sup>
<br>
@php $n++; @endphp
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if ($luas_tanah !== null && $luas_bangunan !== null)
{{ $luas_tanah }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
@elseif ($luas_tanah !== null)
{{ $luas_tanah }} m<sup>2</sup>
@elseif ($luas_bangunan !== null)
{{ $luas_bangunan }} m<sup>2</sup>
@endif
</div> </div>
<div class="content"> <div class="content">
@@ -171,10 +168,10 @@
<div class="signature"> <div class="signature">
Best Regards,<br /> Best Regards,<br />
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}" <img src="{{ asset('storage/signatures/' . $user->id . '/' . $user->sign) }}" alt="{{ $user->name }}"
alt="{{ $permohonan->user->name }}" width="200"> width="200">
<p> <p>
{{ $permohonan->user->name }} {{ $user->name }}
</p> </p>
</div> </div>

View File

@@ -72,14 +72,14 @@
<ul> <ul>
<li>Aset Jaminan: <li>Aset Jaminan:
<span class="font-bold"> <span class="font-bold">
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
{{ $document->jenisJaminan->name }} {{ $document->jenisJaminan->name }}
@endforeach @endforeach
</span> </span>
</li> </li>
<li>Lokasi Jaminan: <li>Lokasi Jaminan:
<span class="font-bold"> <span class="font-bold">
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
{{ $document->address }} {{ $document->address }}
@if (isset($document->jenisJaminan)) @if (isset($document->jenisJaminan))
, Kel. , Kel.
@@ -102,48 +102,45 @@
@endforeach @endforeach
</span> </span>
</li> </li>
<li>Luas Tanah / Luas Bangunan: <li>Dokumen Jaminan: <br>
<span class="font-bold"> <span class="font-bold">
@php @php
$luas_tanah = null; $n = 1;
$luas_bangunan = null;
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
@foreach ($document->detail as $detail) @foreach ($document->detail as $detail)
@php @php
$details = json_decode($detail->details); $details = json_decode($detail->details);
@endphp @endphp
@if (is_object($details)) @if (isset($details->luas_tanah) && isset($details->luas_bangunan))
@if ( {{ $n }}. {{ $detail->name }}<br>
$detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && Luas Tanah / Luas Bangunan:
isset($details->{'luas_tanah'}) && {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
is_numeric($details->{'luas_tanah'})) m<sup>2</sup>
@php /
$luas_tanah = $details->{'luas_tanah'}; {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
@endphp m<sup>2</sup>
@endif <br>
@php $n++; @endphp
@if ( @elseif (isset($details->luas_tanah))
$detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && {{ $n }}. {{ $detail->name }}<br>
isset($details->{'luas_bangunan'}) && Luas Tanah :
is_numeric($details->{'luas_bangunan'})) {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
@php m<sup>2</sup>
$luas_bangunan = $details->{'luas_bangunan'}; <br>
@endphp @php $n++; @endphp
@endif @elseif (isset($details->luas_bangunan))
{{ $n }}. {{ $detail->name }}<br>
Luas Bangunan:
{{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
m<sup>2</sup>
<br>
@php $n++; @endphp
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if ($luas_tanah !== null && $luas_bangunan !== null)
{{ $luas_tanah }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
@elseif ($luas_tanah !== null)
{{ $luas_tanah }} m<sup>2</sup>
@elseif ($luas_bangunan !== null)
{{ $luas_bangunan }} m<sup>2</sup>
@endif
</span> </span>
</li> </li>
</ul> </ul>
@@ -153,10 +150,10 @@
</p> </p>
<p>Best Regards, <p>Best Regards,
<div class="font-bold"> <div class="font-bold">
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}" <img src="{{ asset('storage/signatures/' . auth()->user()->id . '/' . auth()->user()->sign) }}"
alt="{{ $permohonan->user->name }}" width="200" class="signature"> alt="{{ auth()->user()->name }}" width="200" class="signature">
<p> <p>
{{ $permohonan->user->name }} {{ auth()->user()->name }}
</p> </p>
</div> </div>
Sub Direktorat Appraisal Sub Direktorat Appraisal

View File

@@ -102,10 +102,10 @@
</div> </div>
<div class="content-max"> <div class="content-max">
Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) Aset Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->jenisJaminan->name }} {{ $document->jenisJaminan->name }}
@endforeach @endforeach
<span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) <span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->address }}, Kel. @foreach ($villages as $village) {{ $document->address }}, Kel. @foreach ($villages as $village)
{{ $village->name }} {{ $village->name }}
@endforeach, Kec. @foreach ($districts as $district) @endforeach, Kec. @foreach ($districts as $district)
@@ -118,47 +118,44 @@
@endforeach @endforeach
</span> </span>
Luas Tanah / Luas Bangunan: <br> Dokumen Jaminan: <br>
@php @php
$luas_tanah = null; $n = 1;
$luas_bangunan = null;
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
@foreach ($document->detail as $detail) @foreach ($document->detail as $detail)
@php @php
$details = json_decode($detail->details); $details = json_decode($detail->details);
@endphp @endphp
@if (is_object($details)) @if (isset($details->luas_tanah) && isset($details->luas_bangunan))
@if ( {{ $n }}. {{ $detail->name }}<br>
$detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && Luas Tanah / Luas Bangunan:
isset($details->{'luas_tanah'}) && {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
is_numeric($details->{'luas_tanah'})) m<sup>2</sup>
@php /
$luas_tanah = $details->{'luas_tanah'}; {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
@endphp m<sup>2</sup>
@endif <br>
@php $n++; @endphp
@if ( @elseif (isset($details->luas_tanah))
$detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && {{ $n }}. {{ $detail->name }}<br>
isset($details->{'luas_bangunan'}) && Luas Tanah :
is_numeric($details->{'luas_bangunan'})) {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
@php m<sup>2</sup>
$luas_bangunan = $details->{'luas_bangunan'}; <br>
@endphp @php $n++; @endphp
@endif @elseif (isset($details->luas_bangunan))
{{ $n }}. {{ $detail->name }}<br>
Luas Bangunan:
{{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
m<sup>2</sup>
<br>
@php $n++; @endphp
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if ($luas_tanah !== null && $luas_bangunan !== null)
{{ $luas_tanah }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
@elseif ($luas_tanah !== null)
{{ $luas_tanah }} m<sup>2</sup>
@elseif ($luas_bangunan !== null)
{{ $luas_bangunan }} m<sup>2</sup>
@endif
</div> </div>
<div class="content"> <div class="content">
@@ -169,10 +166,10 @@
<div class="signature"> <div class="signature">
Best Regards,<br /> Best Regards,<br />
<img src="{{ public_path('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}" <img src="{{ public_path('storage/signatures/' . auth()->user()->id . '/' . auth()->user()->sign) }}"
alt="{{ $permohonan->user->name }}" width="200"> alt="{{ auth()->user()->name }}" width="200">
<p> <p>
{{ $permohonan->user->name }} {{ auth()->user()->name }}
</p> </p>
</div> </div>

View File

@@ -42,7 +42,7 @@
} }
} }
} }
} catch (\Exception $e) { } catch (Exception $e) {
// Handle invalid JSON silently // Handle invalid JSON silently
} }
} }
@@ -70,14 +70,14 @@
<ul> <ul>
<li>Aset Jaminan: <li>Aset Jaminan:
<span class="font-bold"> <span class="font-bold">
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
{{ $document->jenisJaminan->name }} {{ $document->jenisJaminan->name }}
@endforeach @endforeach
</span> </span>
</li> </li>
<li>Lokasi Jaminan: <li>Lokasi Jaminan:
<span class="font-bold"> <span class="font-bold">
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
{{ $document->address }} {{ $document->address }}
@if (isset($document->jenisJaminan)) @if (isset($document->jenisJaminan))
, Kel. , Kel.
@@ -100,48 +100,45 @@
@endforeach @endforeach
</span> </span>
</li> </li>
<li>Luas Tanah / Luas Bangunan: <li>Dokumen Jaminan: <br>
<span class="font-bold"> <span class="font-bold">
@php @php
$luas_tanah = null; $n = 1;
$luas_bangunan = null;
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
@foreach ($document->detail as $detail) @foreach ($document->detail as $detail)
@php @php
$details = json_decode($detail->details); $details = json_decode($detail->details);
@endphp @endphp
@if (is_object($details)) @if (isset($details->luas_tanah) && isset($details->luas_bangunan))
@if ( {{ $n }}. {{ $detail->name }}<br>
$detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && Luas Tanah / Luas Bangunan:
isset($details->{'luas_tanah'}) && {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
is_numeric($details->{'luas_tanah'})) m<sup>2</sup>
@php /
$luas_tanah = $details->{'luas_tanah'}; {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
@endphp m<sup>2</sup>
@endif <br>
@php $n++; @endphp
@if ( @elseif (isset($details->luas_tanah))
$detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && {{ $n }}. {{ $detail->name }}<br>
isset($details->{'luas_bangunan'}) && Luas Tanah :
is_numeric($details->{'luas_bangunan'})) {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
@php m<sup>2</sup>
$luas_bangunan = $details->{'luas_bangunan'}; <br>
@endphp @php $n++; @endphp
@endif @elseif (isset($details->luas_bangunan))
{{ $n }}. {{ $detail->name }}<br>
Luas Bangunan:
{{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
m<sup>2</sup>
<br>
@php $n++; @endphp
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if ($luas_tanah !== null && $luas_bangunan !== null)
{{ $luas_tanah }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
@elseif ($luas_tanah !== null)
{{ $luas_tanah }} m<sup>2</sup>
@elseif ($luas_bangunan !== null)
{{ $luas_bangunan }} m<sup>2</sup>
@endif
</span> </span>
</li> </li>
</ul> </ul>
@@ -151,10 +148,10 @@
</p> </p>
<p>Best Regards, <p>Best Regards,
<div class="font-bold"> <div class="font-bold">
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}" <img src="{{ asset('storage/signatures/' . auth()->user()->id . '/' . auth()->user()->sign) }}"
alt="{{ $permohonan->user->name }}" width="200" class="signature"> alt="{{ auth()->user()->name }}" width="200" class="signature">
<p> <p>
{{ $permohonan->user->name }} {{ auth()->user()->name }}
</p> </p>
</div> </div>
Sub Direktorat Appraisal Sub Direktorat Appraisal

View File

@@ -104,10 +104,10 @@
</div> </div>
<div class="content-max"> <div class="content-max">
Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) Aset Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->jenisJaminan->name }} {{ $document->jenisJaminan->name }}
@endforeach @endforeach
<span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) <span class="flex-wrap">Lokasi Jaminan: @foreach ($permohonan->documents as $document)
{{ $document->address }}, Kel. @foreach ($villages as $village) {{ $document->address }}, Kel. @foreach ($villages as $village)
{{ $village->name }} {{ $village->name }}
@endforeach, Kec. @foreach ($districts as $district) @endforeach, Kec. @foreach ($districts as $district)
@@ -120,47 +120,44 @@
@endforeach @endforeach
</span> </span>
Luas Tanah / Luas Bangunan: <br> Dokumen Jaminan: <br>
@php @php
$luas_tanah = null; $n = 1;
$luas_bangunan = null;
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
@foreach ($document->detail as $detail) @foreach ($document->detail as $detail)
@php @php
$details = json_decode($detail->details); $details = json_decode($detail->details);
@endphp @endphp
@if (is_object($details)) @if (isset($details->luas_tanah) && isset($details->luas_bangunan))
@if ( {{ $n }}. {{ $detail->name }}<br>
$detail->jenisLegalitasJaminan->custom_field === 'luas_tanah' && Luas Tanah / Luas Bangunan:
isset($details->{'luas_tanah'}) && {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
is_numeric($details->{'luas_tanah'})) m<sup>2</sup>
@php /
$luas_tanah = $details->{'luas_tanah'}; {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
@endphp m<sup>2</sup>
@endif <br>
@php $n++; @endphp
@if ( @elseif (isset($details->luas_tanah))
$detail->jenisLegalitasJaminan->custom_field === 'luas_bangunan' && {{ $n }}. {{ $detail->name }}<br>
isset($details->{'luas_bangunan'}) && Luas Tanah :
is_numeric($details->{'luas_bangunan'})) {{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_tanah)) }}
@php m<sup>2</sup>
$luas_bangunan = $details->{'luas_bangunan'}; <br>
@endphp @php $n++; @endphp
@endif @elseif (isset($details->luas_bangunan))
{{ $n }}. {{ $detail->name }}<br>
Luas Bangunan:
{{ preg_replace('/[^0-9.]/', '', str_replace('m2', '', $details->luas_bangunan)) }}
m<sup>2</sup>
<br>
@php $n++; @endphp
@endif @endif
@endforeach @endforeach
@endforeach @endforeach
@if ($luas_tanah !== null && $luas_bangunan !== null)
{{ $luas_tanah }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
@elseif ($luas_tanah !== null)
{{ $luas_tanah }} m<sup>2</sup>
@elseif ($luas_bangunan !== null)
{{ $luas_bangunan }} m<sup>2</sup>
@endif
</div> </div>
<div class="content"> <div class="content">
@@ -171,10 +168,10 @@
<div class="signature"> <div class="signature">
Best Regards,<br /> Best Regards,<br />
<img src="{{ public_path('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}" <img src="{{ public_path('storage/signatures/' . auth()->user()->id . '/' . auth()->user()->sign) }}"
alt="{{ $permohonan->user->name }}" width="200"> alt="{{ auth()->user()->name }}" width="200">
<p> <p>
{{ $permohonan->user->name }} {{ auth()->user()->name }}
</p> </p>
</div> </div>

View File

@@ -0,0 +1,82 @@
<table style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
ANALISA UNIT
</td>
</tr>
</table>
<table style="width: 100%; ">
<tr>
@php
$cekLuas = isset($forminspeksi['luas_unit']['tidak sesuai'])
? 'tidak sesuai'
: 'sesuai';
$luas = $forminspeksi['luas_unit'][$cekLuas] ?? null;
@endphp
<td style="width: 25%; padding: 2px; vertical-align: top;">Luas Unit</td>
<td style="width: 1%; padding: 2px; vertical-align: top;">:</td>
<td style="width: 74%; padding: 2px; vertical-align: top;">{{ $luas ?? '' }}</td>
</tr>
<tr>
<td style="width: 25%; padding: 2px; vertical-align: top;">Bentuk Unit</td>
<td style="width: 1%; padding: 2px; vertical-align: top;">:</td>
<td style="width: 74%; padding: 2px; vertical-align: top;">
@php
$bentukUnit = $forminspeksi['bentuk_unit'] ?? [];
@endphp
@if (!empty($bentukUnit))
{{ implode(', ', $bentukUnit) }}
@else
-
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kondisi Unit</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$bentukUnit = $forminspeksi['kondisi_unit'] ?? [];
@endphp
@if (!empty($bentukUnit))
{{ implode(', ', $bentukUnit) }}
@else
-
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Posisi Unit</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$bentukUnit = $forminspeksi['posisi_unit'] ?? [];
@endphp
@if (!empty($bentukUnit))
{{ implode(', ', $bentukUnit) }}
@else
-
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">View Unit</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$bentukUnit = $forminspeksi['view'] ?? [];
@endphp
@if (!empty($bentukUnit))
{{ implode(', ', $bentukUnit) }}
@else
-
@endif
</td>
</tr>
</table>

View File

@@ -0,0 +1,145 @@
<table style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
ANALISA BANGUNAN
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style=" width: 25%; padding: 2px; vertical-align: top;">Luas Bangunan</td>
<td style=" width:1%; padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$luasTanahBangunan =
$forminspeksi['bangunan']['luas_tanah_bagunan'];
$output = !empty($luasTanahBangunan['sesuai'])
? $luasTanahBangunan['sesuai']
: (!empty($luasTanahBangunan['tidak sesuai'])
? $luasTanahBangunan['tidak sesuai']
: '-');
@endphp
{{ $output }} <sup>m2</sup>
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Jenis Bangunan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$jenisBangunan =
$forminspeksi['bangunan']['jenis_bangunan'] ?? [];
@endphp
@if (!empty($jenisBangunan))
{{ implode(', ', $jenisBangunan) }}
@else
-
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kondisi Bangunan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$kondisiBangunan =
$forminspeksi['bangunan']['kondisi_bangunan'] ?? [];
@endphp
@if (!empty($kondisiBangunan))
{{ implode(', ', $kondisiBangunan) }}
@else
-
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Sifat Bangunan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$sifatBangunan =
$forminspeksi['bangunan']['sifat_bangunan'][0] ?? '-';
$sifatBangunanInput =
$forminspeksi['bangunan']['sifat_bangunan_input'];
// Filter input yang tidak null
$inputTambahan = array_filter($sifatBangunanInput, function (
$value,
) {
return $value !== null && $value !== '';
});
// Gabungkan sifat bangunan dengan input tambahan
$output = $sifatBangunan;
if (!empty($inputTambahan)) {
$output .= ' (' . implode(', ', $inputTambahan) . ')';
}
@endphp
{{ $output }}
</td>
</tr>
@if (isset($forminspeksi['bangunan']['spesifikasi_bangunan']) && count($forminspeksi['bangunan']['spesifikasi_bangunan']) > 0)
@foreach ($forminspeksi['bangunan']['spesifikasi_bangunan'] as $bangunanIndex => $bangunan)
@if (count($forminspeksi['bangunan']['spesifikasi_bangunan']) > 1)
<tr>
<td colspan="2">Spesifikasi Bangunan {{ $bangunanIndex + 1 }}</td>
</tr>
@else
<tr>
<td colspan="2">Spesifikasi Bangunan</td>
</tr>
@endif
@if (isset($basicData['spekKategoriBangunan']))
@foreach ($basicData['spekKategoriBangunan'] as $index => $spesifikasi)
@if (!empty($spesifikasi->name)) <!-- Hanya tampilkan jika 'name' tidak kosong -->
<tr>
<td style="vertical-align: top;">{{ $spesifikasi->name }}</td>
<td>:</td>
<td>
@php
$selectedValue = null;
$lainnyaValue = null;
if (isset($bangunan['spek_kategori_bangunan'][$spesifikasi->name])) {
$selectedValues = $bangunan['spek_kategori_bangunan'][$spesifikasi->name];
// Ambil nilai pertama (bukan key) dari array
$selectedValue = array_values(array_filter($selectedValues, function ($key) {
return $key !== 'lainnya'; // Filter key lainnya
}, ARRAY_FILTER_USE_KEY))[0] ?? null;
$lainnyaValue = $selectedValues['lainnya'] ?? null;
}
@endphp
@if ($selectedValue)
<span>
{{ $selectedValue }}
@if ($selectedValue === 'Lainnya' && $lainnyaValue)
: {{ $lainnyaValue }}
@endif
</span>
@else
<span></span>
@endif
</td>
</tr>
@endif
@endforeach
@endif
@endforeach
@endif
</table>

View File

@@ -0,0 +1,104 @@
<table class="judul" style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
ANALISA FAKTA
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td width="25%" style="vertical-align: top;">Faktor Positif</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@isset($forminspeksi['fakta']['fakta_positif'])
<table style="width: 100%; border-collapse: collapse;">
@foreach ($forminspeksi['fakta']['fakta_positif'] as $key => $item)
<tr>
<td>{!! nl2br(e($item)) !!}</td>
</tr>
@endforeach
</table>
@endisset
</td>
</tr>
{{-- Faktor Negatif --}}
<tr>
<td width="25%" style="vertical-align: top;">Faktor Negatif</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@php
$faktaNegatif = $forminspeksi['fakta']['fakta_negatif'] ?? [];
$faktaNegatifFiltered = is_array($faktaNegatif)
? array_filter($faktaNegatif, function ($item) {
return !empty(trim($item));
})
: [];
@endphp
@if (!empty($faktaNegatifFiltered))
<table style="width: 100%; border-collapse: collapse;">
@foreach ($faktaNegatifFiltered as $key => $item)
<tr>
<td>{!! nl2br(e($item)) !!}</td>
</tr>
@endforeach
</table>
@else
<p>Tidak ada faktor negatif yang teridentifikasi.</p>
@endif
</td>
</tr>
@if (!empty($forminspeksi['fakta']['rute_menuju']))
<tr>
<td width="25%" style="vertical-align: top;">Rute Menuju</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
{!! nl2br(e($forminspeksi['fakta']['rute_menuju'] ?? '')) !!}
</td>
</tr>
@endif
@if (!empty($forminspeksi['fakta']['batas_batas_input']))
<tr>
<td width="25%" style="vertical-align: top;">Batas batas</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@foreach ($forminspeksi['fakta']['batas_batas_input'] ?? [] as $arah => $batas)
@if ($batas)
<p> - {{ $arah }} : {{ $batas }}</p>
@endif
@endforeach
</td>
</tr>
@endif
@if (!empty($forminspeksi['fakta']['kondisi_lingkungan']))
<tr>
<td width="25%" style="vertical-align: top;">Kondisi Lingkungan</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@foreach ($forminspeksi['fakta']['kondisi_lingkungan'] ?? [] as $kondisi)
{!! nl2br(e($kondisi)) !!}
@endforeach
</td>
</tr>
@endif
@if (!empty($forminspeksi['fakta']['informasi_dokument']))
<tr>
<td width="25%" style="vertical-align: top;">Informasi Lain terkait
Dokumen</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@foreach ($forminspeksi['fakta']['informasi_dokument'] ?? [] as $informasi)
{!! nl2br(e($informasi)) !!}
@endforeach
</td>
</tr>
@endif
</table>

View File

@@ -0,0 +1,55 @@
<table style="width: 100%">
<tr>
<td width="25%" style="vertical-align: top;">Informasi Dinas Tata Ruang
</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@php
$informasi = [
'peruntukan',
'kdb',
'kdh',
'gsb',
'max_lantai',
'klb',
'gss',
'pelebaran_jalan',
'nama_petugas',
];
@endphp
@foreach ($informasi as $key)
@if (isset($forminspeksi['fakta'][$key]) && $forminspeksi['fakta'][$key] !== '-')
<p> - {{ ucfirst(str_replace('_', ' ', $key)) }}:
{{ $forminspeksi['fakta'][$key] }}</p>
@endif
@endforeach
</td>
</tr>
@if (!empty($forminspeksi['fakta']['keterangan']))
<tr>
<td width="25%" style="vertical-align: top;">Catatan yang Perlu
Diperhatikan</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@php
$keterangan = $forminspeksi['fakta']['keterangan'] ?? '';
if (is_array($keterangan)) {
$keterangan = implode(', ', array_filter($keterangan));
}
@endphp
@if (!empty($keterangan))
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td>{!! nl2br(e($keterangan)) !!}</td>
</tr>
</table>
@endif
</td>
</tr>
@endif
</table>

View File

@@ -0,0 +1,129 @@
<table style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
ANALISA LINGKUNGAN
</td>
</tr>
</table>
<table style="width: 100%">
@php
$lingkungan = $forminspeksi['lingkungan'];
$fasilitas = $lingkungan['fasilitas_dekat_object'] ?? [];
$fasilitasInput = $lingkungan['fasilitas_dekat_object_input'] ?? [];
@endphp
<tr>
<td style=" width:25%; padding: 2px; vertical-align: top;">Jarak Jalan Utama</td>
<td style=" width:1%; padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jarak_jalan_utama'] ?? '-' }} m</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Jalan Lingkungan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jalan_linkungan'] ?? '-' }} m</td>
<tr>
<td style="padding: 2px; vertical-align: top;">Jarak CBD</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jarak_cbd_point'] ?? '-' }} m
({{ $lingkungan['nama_cbd_point'] ?? '-' }})</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Lebar Perkerasan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['lebar_perkerasan_jalan'] ?? '-' }} m</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Perkerasan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:
</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['perkerasan_jalan']['perkerasan_jalan'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Lalu Lintas</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ implode(', ', $lingkungan['lalu_lintas'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Golongan Masyarakat Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ implode(', ', $lingkungan['gol_mas_sekitar'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Tingkat Keramaian</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['tingkat_keramaian'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Terletak di Area</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['terletak_diarea']['terletak_diarea'] ?? ['-']) }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kondisi Bangunan Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['kondisi_bagunan_disekitar_lokasi'] ?? '-' }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Sifat Bangunan Sekitar</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['sifat_bagunan_disekitar_lokasi'] ?? '-' }}
</td>
</tr>
@if ($lingkungan['dekat_makam'] == 'ya')
<tr>
<td style="padding: 2px; vertical-align: top;">Dekat Makam</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">Ya, Jarak {{ $lingkungan['jarak_makam'] ?? '-' }} m
({{ $lingkungan['nama_makam'] ?? '-' }})
</td>
</tr>
@endif
@if ($lingkungan['dekat_tps'] == 'ya')
<tr>
<td style="padding: 2px; vertical-align: top;">Dekat TPS</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">Ya, Jarak {{ $lingkungan['jarak_tps'] ?? '-' }} m
({{ $lingkungan['nama_tps'] ?? '-' }})</td>
</tr>
@endif
<tr>
<td style="padding: 2px; vertical-align: top;">Daerah</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
{{ implode(', ', $lingkungan['merupakan_daerah'] ?? ['-']) }}
</td>
</tr>
@if (!empty($fasilitas))
<tr>
<td style="padding: 2px; vertical-align: top;">Fasilitas Dekat Objek</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@foreach ($fasilitas as $fas)
{{ $fas }}
@if (isset($fasilitasInput[$fas]))
({{ $fasilitasInput[$fas] }})
@endif
@if (!$loop->last)
,
@endif
@endforeach
</td>
</tr>
@endif
</table>

View File

@@ -0,0 +1,147 @@
<table style="width: 100%; ">
<tr>
<td style="width: 100%; border: 1px solid #000; text-align: center;">
ANALISA TANAH
</td>
</tr>
</table>
<table style="width: 100%; ">
<tr>
@php
$cekLuas = isset($forminspeksi['tanah']['luas_tanah']['tidak sesuai']) ? 'tidak sesuai' : 'sesuai';
$luas = $forminspeksi['tanah']['luas_tanah'][$cekLuas] ?? null;
@endphp
<td style="width: 25%; padding: 2px; vertical-align: top;">Luas Tanah</td>
<td style=" width:1%; padding: 2px; vertical-align: top;">:</td>
<td style="width: 74%; padding: 2px; vertical-align: top;">{{ $luas ?? '' }}</td>
</tr>
<tr>
@php
$cekMataAngin = isset($forminspeksi['tanah']['hadap_mata_angin']['tidak sesuai'])
? 'tidak sesuai'
: 'sesuai';
$Arah = $forminspeksi['tanah']['hadap_mata_angin'][$cekMataAngin] ?? null;
@endphp
<td style="padding: 2px; vertical-align: top;">Hadap Mata Angin</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">{{ $Arah ?? '' }}</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Bentuk Tanah</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$bentukTanah = isset($forminspeksi['tanah']['bentuk_tanah']['bentuk_tanah'])
? $forminspeksi['tanah']['bentuk_tanah']['bentuk_tanah']
: [];
$lainnya = isset($forminspeksi['tanah']['bentuk_tanah']['lainnya'])
? $forminspeksi['tanah']['bentuk_tanah']['lainnya']
: null;
@endphp
{{ !empty($bentukTanah) ? implode(', ', $bentukTanah) : '' }}
@if (!empty($bentukTanah) && in_array('Lainnya', $bentukTanah) && !is_null($lainnya))
({{ $lainnya }})
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kontur Tanah</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$konturTanah = $forminspeksi['tanah']['kontur_tanah'] ?? [];
@endphp
@if (!empty($konturTanah))
{{ implode(', ', $konturTanah) }}
@else
-
@endif
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Beda Ketinggian dengan Jalan</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$ketinggianTanah = $forminspeksi['tanah']['ketinggian_tanah'];
$ketinggian = $ketinggianTanah['ketinggian'][0] ?? '-';
$lebihTinggi = $ketinggianTanah['lebih_tinggi'];
$lebihRendah = $ketinggianTanah['lebih_rendah'];
@endphp
{{ $ketinggian }}
@if ($ketinggian === 'Lebih Tinggi' && $lebihTinggi !== null)
(Ketinggian: {{ $lebihTinggi }} cm)
@elseif($ketinggian === 'Lebih Rendah' && $lebihRendah !== null)
(Kerendahan: {{ $lebihRendah }} cm)
@endif
</td>
</tr>
<tr>
<td>Kontur Jalan Depan Objek</td>
<td>:</td>
<td>
{{ $forminspeksi['tanah']['kontur_jalan'] == 'menurun' ? 'Menurun' : 'Rata' }}
</td>
</tr>
<tr>
<td>Posisi Kavling</td>
<td>:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$posisiKavling = $forminspeksi['tanah']['posisi_kavling']['posisi_kavling'] ?? [];
$lainnya = $forminspeksi['tanah']['posisi_kavling']['lainnya'] ?? null;
@endphp
{{ !empty($posisiKavling) ? implode(', ', $posisiKavling) : '' }}
@if (!empty($posisiKavling) && in_array('Lainnya', $posisiKavling) && !empty($lainnya))
({{ $lainnya }})
@endif
</td>
</tr>
</tr>
<tr>
<td>Tusuk Sate</td>
<td>:</td>
<td>
{{ $forminspeksi['tanah']['tusuk_sate'] == 'yes' ? 'Ya' : 'Tidak' }}
</td>
</tr>
<tr>
<td>Lockland</td>
<td>:</td>
<td>
{{ $forminspeksi['tanah']['lockland'] == 'yes' ? 'Ya' : 'Tidak' }}
</td>
</tr>
<tr>
<td style="padding: 2px; vertical-align: top;">Kondisi Fisik Tanah</td>
<td style="padding: 2px; vertical-align: top;">:</td>
<td style="padding: 2px; vertical-align: top;">
@php
$kondisiFisikTanah = $forminspeksi['tanah']['kondisi_fisik_tanah']['kondisi_fisik_tanah'][0] ?? '-';
$lainnya = $forminspeksi['tanah']['kondisi_fisik_tanah']['lainnya'] ?? null;
@endphp
{{ $kondisiFisikTanah }}
@if ($kondisiFisikTanah === 'Lainnya' && !empty($lainnya))
({{ $lainnya }})
@endif
</td>
</tr>
</table>

View File

@@ -0,0 +1,574 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@php
$senior_officer = null;
$jenisJaminan = null;
$tanggalPenilaian = null;
if ($permohonan->debiture && $permohonan->documents) {
foreach ($permohonan->documents as $dokumen) {
$penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
$teams = $permohonan->region->teams;
$tanggalPenilaian = $permohonan->penilaian->waktu_penilaian;
$jenisJaminan = $dokumen->jenisJaminan->name;
if ($teams) {
foreach ($teams as $team) {
$team_users = $team->teamsUsers;
// print_r($team_users);
if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
if ($user && $user->hasRole('senior-officer')) {
$senior_officer = $user;
break 3;
}
}
}
}
}
}
}
@endphp
<form id="formInspeksi" method="POST" enctype="multipart/form-data" class="grid gap-5">
@csrf
<input type="hidden" name="nomor_registrasi" value="{{ $permohonan->nomor_registrasi ?? '' }}">
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id ?? '' }}">
<input type="hidden" name="dokument_id" value="{{ request('documentId') }}">
<input type="hidden" name="action" value="callReport">
<input type="hidden" name="type" value="callReport">
@include('lpj::assetsku.includenya')
{{-- @include('lpj::surveyor.components.header')
@include('lpj::surveyor.components.callReport') --}}
<div class="card">
<div class="card-header bg-agi-50">
<h3 class="card-title uppercase">
CALL Report
</h3>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kepada</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="kepada" class="input w-full" placeholder="Masukkan..."
value="{{ $callReport['kepada'] ?? old('kepada') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Dari</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="dari" class="input w-full" placeholder="Masukkan..."
value="{{ $callReport['dari'] ?? ($permohonan->branch->name ?? old('dari')) }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Laporan</label>
<div class="flex flex-wrap items-base line w-full">
<input type="text" name="nomor_laporan" class="input w-full cursor-not-allowed"
placeholder="Masukkan..." value="{{ $nomorLaporan ?? '' }}" @readonly(true)>
</div>
</div>
{{-- 250109828129/ --}}
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Tanggal</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" name="tanggal" class="input w-full" placeholder="Masukkan..."
value="{{ $callReport['tanggal'] ?? '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Perihal</label>
<div class="flex flex-wrap items-base line w-full">
<input type="text" name="perihal" class="input w-full" placeholder="Masukkan..."
value="{{ $callReport['perihal'] ?? '' }}">
</div>
</div>
</div>
</div>
<div class="card border border-agi-100 w-full bg-white rounded-lg shadow-md ">
<div class="card-header bg-agi-50">
<h1 class="text-md font-medium text-gray-900 uppercase">Menindak lanjuti permintaan <b>
{{ $permohonan->tujuanPenilaian->name ?? '' }}</b>, BAG CABang
<b>{{ $permohonan->branch->name }}</b>
disampaikan hal sebagai berikut:
</h1>
</div>
<div class="card-body">
<div class="grid gap-5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="nama_debiture" class="form-label max-w-56">Nama Debitur</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="nama_debiture" name="nama_debiture"
class="input w-full cursor-not-allowed" placeholder="Nama Debiture"
value="{{ $permohonan->debiture->name ?? old('nama_debiture') }}"
@readonly(true)>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="kjjp" class="form-label max-w-56">KJPP</label>
<div class="flex flex-wrap items-baseline w-full ">
<input type="text" id="kjjp" name="kjjp"
class="input w-full cursor-not-allowed" placeholder="Masukkan kjjp"
value="{{ preg_replace('/^K\\d+ - /', '', $permohonan->penawaran->nama_kjpp_sebelumnya ?? old('kjjp')) }}
"
@readonly(true)>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Jenis Aset</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="jenis_asset" name="jenis_asset"
class="input w-full cursor-not-allowed" placeholder="Masukkan jenis_asset"
value="{{ $jenisJaminan ?? old('jenis_asset') }}" @readonly(true)>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="penilai" class="form-label max-w-56">Tanggal Penilaian </label>
<div class="flex flex-wrap items-baseline w-full">
<input type="datetime" id="tanggal_penilaian" name="tanggal_penilaian"
class="input w-full cursor-not-allowed" placeholder="Masukkan Tanggal Penilai"
value="{{ $tanggalPenilaian ?? old('penilai') }}" @readonly(true)>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card border border-agi-100 w-full bg-white rounded-lg shadow-md">
<div class="card-header bg-agi-50">
<h1 class="text-md font-medium text-gray-900 uppercase">lokasi objek
</h1>
</div>
<div class="card-body grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label max-w-56">Provinsi</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="province" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->province) ? $permohonan->debiture->province->name : '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="city" class="form-label max-w-56">Kabupaten/Kota</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="city" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->city) ? $permohonan->debiture->city->name : '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="district" class="form-label max-w-56">Kecamatan</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="district" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->district) ? $permohonan->debiture->district->name : '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="village" class="form-label max-w-56">Desa/Kelurahan</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="village" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->village) ? $permohonan->debiture->village->name : '' }}">
</div>
</div>
</div>
</div>
<div class="card border border-agi-100 w-full bg-white rounded-lg shadow-md">
<div class="card-header bg-agi-50">
<h1 class="text-md font-medium text-gray-900 uppercase">Dokument</h1>
</div>
<div class="card-body">
@include('lpj::component.detail-jaminan', ['status' => true])
</div>
</div>
<div class="card border border-agi-100 w-full bg-white rounded-lg shadow-md">
<div class="card-header bg-agi-50">
<h1 class="text-md font-medium text-gray-900 uppercase">Nilai Likuidasi</h1>
</div>
<div class="card-body grid gap-5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="Lelang" class="form-label max-w-56">Lelang ke </label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="lelang" name="lelang" class="input w-full"
placeholder="Masukkan Lelang" value="{{ $callReport['lelang'] ?? old('lelang') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="penilai" class="form-label max-w-56">Nilai Pasar Wajar (NPW)</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="nilai-pasar" name="nilai_pasar"
class="input w-full nilai-pasar currency-format" placeholder="Masukkan likuidasi"
value="{{ $callReport['nilai_pasar'] ?? old('likuidasi') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="likuidasi_nilai_1" class="form-label max-w-56">Nilai Likuidasi(%)</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="likuidasi" name="likuidasi" class="input w-full likuidasi"
placeholder="Masukkan likuidasi dalam bentuk persen" onkeyup="calculateTotal(this)" value="{{ $callReport['persentase_likuidasi'] ?? old('likuidasi') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="total-likuidasi" class="form-label max-w-56">Total Nilai Likuidasi
(NL)</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="total-likuidasi" name="likuidasi_nilai_1"
class="input w-full total-likuidasi currency-format" placeholder="Masukkan likuidasi" value="{{ $callReport['hasil_nilai_likuidasi'] ?? old('likuidasi') }}">
</div>
</div>
</div>
</div>
<div class="card border border-agi-100 w-full bg-white rounded-lg shadow-md ">
<div class="card-header bg-agi-50">
<h1 class="text-md font-medium text-gray-900 uppercase">Penilaian ke lokasi objek telah dilakukan oleh
:
</h1>
</div>
<div class="card-body">
<div class="grid gap-5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="staf" class="form-label max-w-56">Staf Subdit Appraisal </label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="staf" name="staf"
class="input w-full cursor-not-allowed" placeholder="Masukkan Nama Staff"
value="{{ $penilai->userPenilaiTeam->name ?? '' }}" @readonly(true)>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="penilai" class="form-label max-w-56">Pihak KJPP</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="penilai" name="pihak_kjjpp"
class="input w-full "
value="{{ $forminspeksi['signature']['kjjp']['name'] ?? $callReport['pihak_kjjpp'] ?? '' }}"
placeholder="Masukkan Nama KJPP">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="pihak_bag" class="form-label max-w-56">Pihak BAGI Cab </label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="pihak_bag" name="pihak_bag"
class="input w-full cursor-not-allowed" placeholder="Masukkan Pihak Bag"
value="{{ $permohonan->user->name ?? '' }} || {{ $permohonan->branch->name }}"
@readonly(true)>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="debitur_perwakilan" class="form-label max-w-56">Debitur/perwakilan debitur
</label>
@if (isset($forminspeksi['asset']['debitur_perwakilan']))
@foreach ($forminspeksi['asset']['debitur_perwakilan'] as $item)
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="debitur_perwakilan" name="debitur_perwakilan"
class="input w-full cursor-not-allowed" placeholder="Masukkan Penilai"
value="{{ $item ?? '' }}" @readonly(true)>
</div>
@endforeach
@else
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="debitur_perwakilan" name="debitur_perwakilan"
class="input w-full cursor-not-allowed" placeholder="Masukkan Penilai"
value="{{ $permohonan->debiture->name ?? '' }}" @readonly(true)>
</div>
@endif
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header bg-agi-50">
<h3 class="card-title uppercase">
Informasi yang didapatkan sebagai berikut :
</h3>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Positif</label>
<div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($callReport['fakta']['fakta_positif']))
@foreach ($callReport['fakta']['fakta_positif'] as $index => $positif)
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-positif-container', 'fakta_positif')">
<i class="ki-outline ki-plus"></i>
</button>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Negatif</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($callReport['fakta']['fakta_negatif']))
@foreach ($callReport['fakta']['fakta_negatif'] as $index => $negatif)
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $callReport['fakta']['fakta_negatif'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-fakta_negatif" class="alert text-danger text-sm"></em>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-negatif-container', 'fakta_negatif')">
<i class="ki-outline ki-plus"></i>
</button>
</div>
</div>
</div>
</div>
<div class="flex justify-end gap-2" style="margin-right: 20px; margin-top: 20px">
<button type="button" class="btn btn-primary" id="saveButton" onclick="submitData()">
<i class="ki-filled ki-save-2"></i>
<span id="saveButtonText">Save</span>
</button>
@if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal']))
<a class="btn btn-info"
href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
LAMPIRAN FOTO DAN DOKUMEN
</a>
<a class="btn btn-primary"
onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )">
<i class="ki-filled ki-printer"></i> Print
</a>
@endif
</div>
</form>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
const callReports = @json($callReport);
console.log('callReport', callReports)
function formatJson(formElement) {
const formData = new FormData(formElement);
const jsonData = {
kepada: "",
tanggal: "",
nomor_laporan: "",
perihal: "",
pihak_kjjpp: "",
dari: "",
lelang: "",
fakta: {
fakta_positif: [],
fakta_negatif: []
},
nilai_pasar: "",
persentase_likuidasi: "",
hasil_nilai_likuidasi: ""
};
// Ambil fakta positif
document.querySelectorAll('textarea[name="fakta_positif[]"]').forEach(textarea => {
if (textarea.value.trim() !== "") {
jsonData.fakta.fakta_positif.push(textarea.value.trim());
}
});
// Ambil fakta negatif
document.querySelectorAll('textarea[name="fakta_negatif[]"]').forEach(textarea => {
if (textarea.value.trim() !== "") {
jsonData.fakta.fakta_negatif.push(textarea.value.trim());
}
});
jsonData.perihal = document.querySelector('input[name="perihal"]')?.value.trim() || "";
jsonData.dari = document.querySelector('input[name="dari"]')?.value.trim() || "";
jsonData.tanggal = document.querySelector('input[name="tanggal"]')?.value.trim() || "";
jsonData.kepada = document.querySelector('input[name="kepada"]')?.value.trim() || "";
jsonData.nomor_laporan = document.querySelector('input[name="nomor_laporan"]')?.value.trim() || "";
jsonData.lelang = document.querySelector('input[name="lelang"]')?.value.trim() || "";
// Ambil nilai lainnya
jsonData.nilai_pasar = cleanCurrencyValue(document.querySelector('input[name="nilai_pasar"]')?.value.trim() || "");
jsonData.persentase_likuidasi = cleanCurrencyValue(document.querySelector('input[name="likuidasi"]')?.value.trim() || "");
jsonData.hasil_nilai_likuidasi = cleanCurrencyValue(document.querySelector('input[name="likuidasi_nilai_1"]')?.value.trim() || "");
return jsonData;
}
function submitData() {
showLoadingSwal('Mengirim data ke server...');
const formElement = document.querySelector('form');
// console.log('Form data entries:', Array.from(formData.entries()));
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.storeCallReport') }}?permohonan_id=${permohonanId}&inspeksi_id=${inspeksiId}&dokument_id=${documentId}`;
const jsonData = formatJson(formElement);
$.ajax({
url: requestUrl,
type: 'POST',
data: JSON.stringify({
permohonan_id: permohonanId,
dokument_id: documentId,
inspeksi_id: inspeksiId,
data: 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.reload();
}
});
} 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]);
});
// toastrErrorBuild(error);
}
hideLoadingSwal();
console.log(errors);
}
});
}
</script>
<script>
function calculateTotal() {
let nilaiPasarInput = document.getElementById('nilai-pasar');
let nilaiLikuidasi = document.getElementById('likuidasi');
let totalLikuidasi = document.getElementById('total-likuidasi');
const cleanNilaiPasar = cleanCurrencyValue(nilaiPasarInput.value);
let cleanLikuidasi = cleanCurrencyValue(nilaiLikuidasi.value);
// Batasi likuidasi maksimal hingga 100
cleanLikuidasi = Math.min(parseFloat(cleanLikuidasi) || 0, 100);
// Format nilai likuidasi dengan simbol %
nilaiLikuidasi.value = cleanLikuidasi;
// Konversi ke angka untuk perhitungan
const nilaiPasar = parseFloat(cleanNilaiPasar) || 0;
const likuidasi = cleanLikuidasi / 100; // Konversi persentase ke desimal
// Hitung total likuidasi
const totalNilaiLikuidasi = nilaiPasar * likuidasi;
// Tampilkan hasil dengan format yang benar
totalLikuidasi.value = formatCurrency(totalNilaiLikuidasi.toString());
}
document.addEventListener('DOMContentLoaded', function() {
// Initialize currency format for existing inputs
document.querySelectorAll('.currency-format').forEach(input => {
input.addEventListener('input', function() {
handleCurrencyInput(this);
});
// Format initial values if they exist
if (input.value) {
input.value = formatCurrency(input.value);
}
});
});
</script>
@include('lpj::surveyor.js.utils')
@endpush

View File

@@ -0,0 +1,34 @@
<footer id="footer">
Cabang : {{ $permohonan->debiture->branch->name ?? '' }}
</footer>
<script>
const datas = @json($forminspeksi);
console.log(datas);
const lpjData = @json($lpjData);
console.log(lpjData);
document.addEventListener('DOMContentLoaded', function() {
const checkboxes = document.querySelectorAll('.checkbox-lainnya');
checkboxes.forEach(checkbox => {
checkbox.addEventListener('change', function() {
const textLainnya = this.closest('label').querySelector('.text-lainnya');
if (this.checked && this.value === 'Lainnya') {
textLainnya.style.display = 'inline';
} else if (this.value === 'Lainnya') {
textLainnya.style.display = 'none';
}
});
// Atur visibilitas awal
if (checkbox.checked && checkbox.value === 'Lainnya') {
const textLainnya = checkbox.closest('label').querySelector('.text-lainnya');
textLainnya.style.display = 'inline';
}
});
});
</script>
</body>
</html>

View File

@@ -1,142 +1,241 @@
<div> <style>
@php /* General Styles */
$photoSections = [ body {
'rute_menuju_lokasi' => [ margin: 0;
'key' => 'rute_menuju_lokasi', padding: 0;
'name_prefix' => '', }
'nested' => true,
],
'foto_rute_lainnya' => [
'key' => 'name_rute_lainnya',
'name_prefix' => '',
'nested' => false,
],
'foto_lingkungan' => [
'key' => 'foto_lingkungan',
'name_prefix' => '',
'nested' => true,
],
'single_photos' => [
'foto_basement' => 'Basement',
'foto_gerbang' => 'Gerbang',
'pendamping' => 'Pendamping',
],
'object_jaminan' => [
'key' => 'name_objek',
'name_prefix' => '',
'nested' => false,
],
'foto_lantai_unit' => [
'key' => 'name',
'name_prefix' => 'Foto Lantai',
'nested' => true,
],
];
$hasPhotos = false; .photo-container {
width: 100%;
margin-bottom: 10px;
clear: both;
page-break-inside: avoid;
}
.photo-row {
width: 100%;
clear: both;
page-break-inside: avoid;
}
.photo-item {
box-sizing: border-box;
page-break-inside: avoid;
}
.photo-item:nth-child(2n) {
margin-right: 0;
}
/* Image Styling */
.photo-item img {
width: 300px;
height: 300px;
object-fit: contain;
background-color: #f0f0f0;
border-radius: 5px;
}
/* Clearfix */
.clearfix::after {
content: "";
clear: both;
display: table;
}
/* Media Print */
@media print {
.photo-item {
width: 48%;
margin-right: 2%;
float: left;
padding: 5px;
box-sizing: border-box;
page-break-inside: avoid;
}
.photo-item img {
width: 300px;
height: 300px;
object-fit: contain;
background-color: #f0f0f0;
border-radius: 5px;
page-break-inside: avoid;
}
h2 {
font-size: 14px;
}
.photo-container {
page-break-inside: avoid;
}
.photo-row {
page-break-inside: avoid;
}
}
</style>
@isset($basicData['foto'])
@php
$photos = $formFoto['upload_foto'] ?? [];
if (!is_array($photos)) {
$photos = [];
}
$groupedPhotos = collect($photos)->groupBy('category');
$mainPhotos = $groupedPhotos->filter(fn($_, $key) => strtolower($key) !== 'lainnya');
$otherPhotos = $groupedPhotos->get('lainnya', collect());
@endphp @endphp
<style> @if ($groupedPhotos->isEmpty())
.photo-container { <p class="text-gray-500">Tidak ada foto yang tersedia.</p>
display: flex; @else
flex-wrap: wrap; @foreach ($mainPhotos as $category => $photos)
justify-content: space-between;
margin-bottom: 20px;
}
.photo-item {
width: 100%; /* Adjust to fit two photos per row */
margin-bottom: 10px;
}
.photo-item img {
width: 80%;
height: auto;
border-radius: 5px;
}
</style>
@foreach ($photoSections as $sectionKey => $sectionConfig)
@if ($sectionKey === 'single_photos')
<div class="photo-container">
@foreach ($sectionConfig as $photoKey => $photoName)
@if (isset($formFoto[$photoKey]) && !empty($formFoto[$photoKey]))
@php
$imagePath = storage_path('app/public/' . $formFoto[$photoKey]);
$hasPhotos = true;
@endphp
<div class="photo-item border">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $photoName }}
</h2>
@if ($statusLpj || file_exists($imagePath))
<img src="{{ $imagePath }}" alt="{{ $photoName }}" class="photo-image">
@endif
</div>
@endif
@endforeach
</div>
@else
@php @php
$sectionData = $formFoto[$sectionKey] ?? null; $groupedBySubcategory = $photos->groupBy('sub');
@endphp @endphp
@if (!empty($sectionData)) @foreach ($groupedBySubcategory as $subcategory => $subPhotos)
@if ($sectionConfig['nested']) @if (count($subPhotos) > 0)
@if (isset($sectionData[$sectionConfig['key']][0])) <table width="100%" border="0" style="align-content: center; text-align: center">
<div class="photo-container"> <tr>
@foreach ($sectionData[$sectionConfig['key']][0] as $index => $item) @if (count($subPhotos) === 1)
@php @php
$item = $subPhotos->first();
$imagePath = storage_path('app/public/' . $item['path']); $imagePath = storage_path('app/public/' . $item['path']);
$hasPhotos = true;
@endphp @endphp
<div class="photo-item border"> <td style="width: 100%; vertical-align: top; text-align: center" colspan="2"
<h2 class="text-gray-600 font-semibold text-xl"> class="photo-item border">
{{ $sectionConfig['name_prefix'] <p style="font-weight: medium; font-size: 10px">{{ $category }} -
? $sectionConfig['name_prefix'] . ' ' . ($index + 1)
: $item['name'] ?? 'Foto ' . ($index + 1) }} @isset($subcategory)
</h2> @if (trim($subcategory) !== '')
{{ $subcategory }} -
@endif
@endisset
{{ $item['name'] ?? '' }}
</p>
@if ($statusLpj || file_exists($imagePath)) @if ($statusLpj || file_exists($imagePath))
<img src="{{ $imagePath }}" alt="{{ $item['path'] }}" class="photo-image"> <img src="{{ $imagePath }}" alt="{{ $item['path'] }}" class="photo-image"
style="width: 100%; max-width: 300px;">
@endif @endif
</div> @isset($item['description'])
@endforeach <p style="font-size:9px">{{ $item['description'] }}</p>
</div> @endisset
@endif </td>
@else @else
<div class="photo-container"> @foreach ($subPhotos as $index => $item)
@foreach ($sectionData as $index => $item) @php
@php $imagePath = storage_path('app/public/' . $item['path']);
$name = $item[$sectionConfig['key']] ?? ''; @endphp
$photoPath = <td style="width: 50%; vertical-align: top; text-align: center"
$sectionKey === 'object_jaminan' class="photo-item border">
? $item['foto_objek'] ?? '' <p style="font-weight: medium; font-size: 10px">{{ $category }} -
: $item['foto_rute_lainnya'] ?? '';
$imagePath = storage_path('app/public/' . $photoPath); @isset($subcategory)
@endphp @if (trim($subcategory) !== '')
{{ $subcategory }} -
@endif
@endisset
@if (!empty($name) || !empty($photoPath)) {{ $item['name'] ?? '' }}
@php $hasPhotos = true; @endphp </p>
<div class="photo-item border"> @if ($statusLpj || file_exists($imagePath))
@if (!empty($name)) <img src="{{ $imagePath }}" alt="{{ $item['path'] }}" class="photo-image"
<h2 class="text-gray-600 font-semibold text-xl"> style="width: 100%; max-width: 300px;">
{{ $name }} @endif
</h2> @isset($item['description'])
@endif <p style="font-size:9px">{{ $item['description'] }}</p>
@if ($statusLpj || (file_exists($imagePath) && !empty($photoPath))) @endisset
<img src="{{ $imagePath }}" alt="{{ $name ?: 'Foto' }}" class="photo-image"> </td>
@endif @if (($index + 1) % 2 == 0)
</div> </tr>
@endif <tr>
@endforeach
</div>
@endif @endif
@endforeach
@if (count($subPhotos) % 2 != 0)
<td style="width: 50%;"></td>
@endif @endif
@endif @endif
@endforeach </tr>
</table>
@if (!$hasPhotos)
<div class="text-center py-6 bg-gray-100 rounded-lg">
<p class="text-gray-500 italic">Tidak ada foto yang tersedia</p>
</div>
@endif @endif
</div> @endforeach
@endforeach
@endif
<div class="page-break"></div>
@if (!$otherPhotos->isEmpty())
@foreach ($otherPhotos->groupBy('sub') as $subcategory => $subPhotos)
@if (count($subPhotos) > 0)
<table width="100%" border="0" style="align-content: center; text-align: center">
<tr>
@if (count($subPhotos) === 1)
@php
$item = $subPhotos->first();
$imagePath = storage_path('app/public/' . $item['path']);
@endphp
<td style="width: 100%; vertical-align: top; text-align: center" colspan="2"
class="photo-item border">
<p style="font-weight: medium; font-size: 10px">Lainnya -
@isset($subcategory)
@if (trim($subcategory) !== '')
{{ $subcategory }} -
@endif
@endisset
{{ $item['name'] ?? '' }}
</p>
@if ($statusLpj || file_exists($imagePath))
<img src="{{ $imagePath }}" alt="{{ $item['path'] }}" class="photo-image"
style="width: 100%; max-width: 300px;">
@endif
@isset($item['description'])
<p style="font-size:9px">{{ $item['description'] }}</p>
@endisset
</td>
@else
@foreach ($subPhotos as $index => $item)
@php
$imagePath = storage_path('app/public/' . $item['path']);
@endphp
<td style="width: 50%; vertical-align: top; text-align: center" class="photo-item border">
<p style="font-weight: medium; font-size: 10px">Lainnya -
@isset($subcategory)
@if (trim($subcategory) !== '')
{{ $subcategory }} -
@endif
@endisset
{{ $item['name'] ?? '' }}
</p>
@if ($statusLpj || file_exists($imagePath))
<img src="{{ $imagePath }}" alt="{{ $item['path'] }}" class="photo-image"
style="width: 100%; max-width: 300px;">
@endif
@isset($item['description'])
<p style="font-size:9px">{{ $item['description'] }}</p>
@endisset
</td>
@if (($index + 1) % 2 == 0)
</tr>
<tr>
@endif
@endforeach
@if (count($subPhotos) % 2 != 0)
<td style="width: 50%;"></td>
@endif
@endif
</tr>
</table>
@endif
@endforeach
@endif
@endisset

View File

@@ -1,264 +1,89 @@
@if (isset($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi'])) @isset($basicData['foto'])
<div class="card"> @php
<div class="card-header bg-agi-50" id="basic_settings"> $photos = $formFoto['upload_foto'] ?? [];
<h3 class="card-title"> if (!is_array($photos)) {
Rute Menuju Lokasi $photos = [];
</h3> }
</div> $groupedPhotos = collect($photos)->groupBy('category');
<div class="card-body"> @endphp
@if (isset($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi']))
@foreach ($formFoto['rute_menuju_lokasi']['rute_menuju_lokasi'][0] as $index => $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name'] ?? 'Rute menuju lokasi - ' . ($index + 1) }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['path']) }}" alt="Gambar {{ $index + 1 }}"
class="w-full h-auto object-cover">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@endif
@if (isset($formFoto['foto_rute_lainnya'])) @if ($groupedPhotos->isEmpty())
<div class="card"> <p class="text-gray-500">Tidak ada foto yang tersedia.</p>
<div class="card-header" id="basic_settings"> @else
<h3 class="card-title"> @foreach ($groupedPhotos as $category => $photos)
Rute Lainnya <div class="mt-5">
</h3> <h2 class="text-gray-800 font-bold text-xl mb-3">{{ $category ?? 'Tanpa Kategori' }}</h2>
</div>
<div class="card-body">
@if (isset($formFoto['foto_rute_lainnya']))
@foreach ($formFoto['foto_rute_lainnya'] as $index => $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute_lainnya'] ?? 'Rute Lainnya - ' . ($index + 1) }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute_lainnya']) }}" alt="Gambar {{ $index + 1 }}"
class="w-full h-auto object-cover">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="card">
<div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title">
Gerbang
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5"> <div class="grid gap-5">
<h2 class=" font-semibold text-xl"> @php
Gerbang $groupedBySubcategory = $photos->groupBy('sub');
</h2> @endphp
<div class="flex items-center">
@if ($groupedBySubcategory->isEmpty())
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="" class="w-full h-auto object-cover"> @foreach ($photos as $index => $item)
<div class="flex items-center justify-between">
</div> <div class="grid gap-5">
</div> <h3 class="text-gray-600 font-semibold text-lg">
</div> {{ $item['name'] ?? 'Foto - ' . ($index + 1) }}
</h3>
</div> <div class="flex items-center">
</div> @if (isset($item['path']))
@endif <img src="{{ asset('storage/' . $item['path']) }}" alt="Gambar {{ $index + 1 }}"
class="w-full h-auto object-cover rounded-md">
@if (isset($formFoto['foto_lingkungan']['foto_lingkungan'])) @else
<div class="card"> <p class="text-gray-500">Gambar tidak tersedia</p>
<div class="card-header" id="basic_settings"> @endif
<h3 class="card-title"> </div>
Lingkungan </h3> <p class="text-gray-500 text-sm">{{ $item['description'] ?? '-' }}</p>
</div>
<div class="card-body">
@if (isset($formFoto['foto_lingkungan']['foto_lingkungan']))
@foreach ($formFoto['foto_lingkungan']['foto_lingkungan'][0] as $index => $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name'] ?? 'Lingkungan - ' . ($index + 1) }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['path']) }}" alt="Gambar {{ $index + 1 }}"
class="w-full h-auto object-cover">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@endif
@if (isset($formFoto['object_jaminan']))
<div class="card">
<div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title">
Object Jaminan
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['name_objek'] ?? "" }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_objek']) }}" alt=""
class="w-full h-auto object-cover">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@endif
@if (isset($formFoto['foto_lantai_unit']))
<div class="card">
<div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title">Lantai</h3>
</div>
<div class="card-body">
@if (isset($formFoto['foto_lantai_unit']))
@foreach ($formFoto['foto_lantai_unit'] as $floorIndex => $floorPhotos)
<div class="mt-5">
@foreach ($floorPhotos as $index => $item)
@if (is_int($index) && isset($item['name'], $item['path']) && is_string($item['path']))
<div class="flex items-center justify-between mt-3">
<div class="grid gap-3">
<h3 class="text-gray-600 font-semibold text-lg">
{{ $item['name'] ?? 'Foto Lantai ' . ($floorIndex + 1) . ' - ' . ($index + 1) }}
</h3>
<div class="flex items-center ">
<img src="{{ Storage::url($item['path']) }}"
alt="Gambar {{ $floorIndex + 1 }}-{{ $index + 1 }}"
class="w-full h-auto object-cover">
</div> </div>
</div> </div>
</div> @endforeach
@endif @else
@endforeach <!-- Jika ada subkategori, tampilkan berdasarkan subkategori -->
</div> @foreach ($groupedBySubcategory as $subcategory => $subPhotos)
@endforeach <div class="mb-4">
<!-- Judul Subkategori -->
@endif <h4 class="text-gray-700 font-semibold text-lg mb-2">
</div> @if ($subcategory)
</div> {{ $subcategory }}
@endif @endif
</h4>
<div class="grid gap-5">
@foreach ($subPhotos as $index => $item)
@if (isset($formFoto['foto_basement'])) <div class="flex items-center justify-between">
<div class="card"> <div class="grid gap-5">
<div class="card-header bg-agi-50" id="basic_settings"> <h3 class="text-gray-600 font-semibold text-lg">
<h3 class="card-title"> {{ $item['name'] ?? 'Foto - ' . ($index + 1) }}
Basement </h3>
</h3> <div class="flex items-center">
</div> @if (isset($item['path']))
<div class="card-body"> <img src="{{ asset('storage/' . $item['path']) }}" alt="Gambar {{ $index + 1 }}"
<div class="flex items-center justify-between mt-5"> class="w-full h-auto object-cover rounded-md">
<div class="grid gap-5"> @else
<h2 class=" font-semibold text-xl"> <p class="text-gray-500">Gambar tidak tersedia</p>
Basemnt @endif
</h2> </div>
<div class="flex items-center"> <p class="text-gray-500 text-sm">{{ $item['description'] ?? '-' }}</p>
</div>
</div>
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="" class="w-full h-auto object-cover"> @endforeach
</div>
</div> </div>
@endforeach
@endif
</div> </div>
</div> </div>
@endforeach
</div> @endif
</div> @endisset
@endif
@if (isset($formFoto['foto_lantai_lainnya']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Lantai Lainnya
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['foto_lantai_lainnya']))
@foreach ($formFoto['foto_lantai_lainnya'] as $index => $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_lantai_lainnya'] ?? 'Lantai - ' . ($index + 1) }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_lantai_lainnya']) }}"
alt="Gambar {{ $index + 1 }}" class="w-full h-auto object-cover">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="card">
<div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title">
Pendamping
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="" class="w-full h-auto object-cover">
</div>
</div>
</div>
</div>
</div>
@endif
@php @php
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat']; $fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
if (($key = array_search('foto_tempat', $fotoTypes)) !== false) { if (($key = array_search('foto_tempat', $fotoTypes)) !== false) {
unset($fotoTypes[$key]); unset($fotoTypes[$key]);
array_unshift($fotoTypes, 'foto_tempat'); array_unshift($fotoTypes, 'foto_tempat');
} }
$adaFoto = false; $adaFoto = false;
if (isset($forminspeksi)) { if (isset($forminspeksi)) {
foreach ($fotoTypes as $type) { foreach ($fotoTypes as $type) {
$imagePath = $forminspeksi[$type] ?? null; $imagePath = $forminspeksi[$type] ?? null;
@@ -271,33 +96,33 @@ $adaFoto = false;
@endphp @endphp
@if ($adaFoto) @if ($adaFoto)
<div class="card"> <div class="card">
<div class="card-header bg-agi-50" id="basic_settings"> <div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title"> <h3 class="card-title">
Peta Peta
</h3> </h3>
</div> </div>
<div class="card-body"> <div class="card-body">
<div> <div>
@if (isset($forminspeksi)) @if (isset($forminspeksi))
@forelse ($fotoTypes as $type) @forelse ($fotoTypes as $type)
<div class="border photo-item"> <div class="border photo-item">
@php @php
$imagePath = $forminspeksi[$type] ?? null; $imagePath = $forminspeksi[$type] ?? null;
@endphp @endphp
@if ($imagePath && file_exists(storage_path('app/public/' . $imagePath))) @if ($imagePath && file_exists(storage_path('app/public/' . $imagePath)))
<img src="{{ Storage::url($imagePath) }}" alt="{{ $type }}" <img src="{{ asset('storage/' . $imagePath) }}" alt="{{ $type }}"
class="w-full h-auto object-cover"> class="w-full h-auto object-cover">
@endif @endif
<p class="mt-2 text-sm">{{ Str::title(str_replace('_', ' ', $type)) }}</p> <p class="mt-2 text-sm">{{ Str::title(str_replace('_', ' ', $type)) }}</p>
</div> </div>
@empty @empty
<p>Tidak ada tipe foto yang tersedia</p> <p>Tidak ada tipe foto yang tersedia</p>
@endforelse @endforelse
@endif @endif
</div>
</div> </div>
</div> </div>
</div>
@endif @endif

View File

@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Laporan Penilai Jaminan</title>
<style>
* {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
/** Define the header rules **/
@page {
margin-top: 100px;
margin-bottom: 50px;
}
#header {
position: fixed;
top: -80px;
left: 0;
right: 0;
height: 50px;
text-align: center;
padding-bottom: 10px;
}
.header-logo {
position: absolute;
left: 20px;
top: 10px;
max-height: 80px;
max-width: 150px;
}
.header-title {
margin-top: 20px;
}
#footer {
position: fixed;
bottom: -50px;
left: 0;
right: 0;
height: 50px;
text-align: center;
border-top: 1px solid #ddd;
padding-top: 10px;
font-size: 9px;
}
.page-number:after {
content: counter(page) " dari " counter(pages);
}
.content {
margin-top: 10px;
}
.page-break {
page-break-after: always;
}
#footer {
position: fixed;
bottom: -50px;
left: 0;
right: 0;
height: 50px;
text-align: left;
border-top: 1px solid #ddd;
padding-top: 10px;
}
body {
margin-top: 3cm;
margin-bottom: 120px;
position: relative;
z-index: 1;
}
.border {
border: 1px solid #000;
}
</style>
</head>
<body style="width: 90%; margin: auto;">
<header id="header">
<table style="width: 100%; border: none;">
<tr>
<td style="width: 20%; text-align: left;" class="header-left">
@include('lpj::component.logo-bag')
</td>
<td style="text-align: right;">
<div style="">
<p style="margin: 0; padding:0; font-size:10px;">Tanggal: {{ date('Y-m-d') }}</p>
<p style="margin: 0; padding:0; font-size:10px;">Waktu: {{ date('H:i:s') }}</p>
<p style="margin: 0; padding:0; font-size:10px;">User: {{ Auth::user()->name }}</p>
</div>
</td>
</tr>
</table>
</header>

View File

@@ -28,37 +28,39 @@
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Harga Penawara</label> <label class="form-label max-w-56">Harga Penawaran</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga_diskon'] }}</span> <span>{{ isset($item['harga']) ? formatRupiah($item['harga']) : '' }}</span>
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Penjualan (HP)</label> <label class="form-label max-w-56">Penjual (HP)</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga'] }}</span> <span>{{ $item['telepon'] }}</span>
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Ditawarkan sejak</label> <label class="form-label max-w-56">Ditawarkan sejak</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga'] }}</span> <span>{{ $item['penawaran'] }}</span>
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">LT</label> <label class="form-label max-w-56">LT</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['luas_tanah'] }}</span> <span>{{ $item['luas_tanah'] }} </span>
<sup> m2</sup>
</div> </div>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">LB</label> <label class="form-label max-w-56">LB</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['luas_bangunan'] }}</span> <span>{{ $item['luas_bangunan'] }} </span>
<sup> m2</sup>
</div> </div>
</div> </div>

View File

@@ -5,26 +5,26 @@
@endsection @endsection
@section('content') @section('content')
<style> <style>
.list-decimal { .list-decimal {
list-style-type: decimal; list-style-type: decimal;
margin: 0; margin: 0;
padding-left: 1.25rem; padding-left: 1.25rem;
line-height: 1.6; line-height: 1.6;
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
font-size: 16px; font-size: 16px;
color: #333333; color: #333333;
} }
.list-decimal li { .list-decimal li {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
</style>
</style>
@include('lpj::assetsku.includenya') @include('lpj::assetsku.includenya')
<form id="form-lpj" method="post" class="w-full grid gap-5"> <form id="form-lpj" method="post" class="w-full grid gap-5">
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}"> <input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="dokument_id" value="{{ request('documentId') }}"> <input type="hidden" name="dokument_id" value="{{ request('documentId') }}">
<input type="hidden" name="nomor_registrasi" value="{{ $permohonan->nomor_registrasi }}">
<input type="hidden" id="lpj-data" value="{{ json_encode($lpjData ?? []) }}" /> <input type="hidden" id="lpj-data" value="{{ json_encode($lpjData ?? []) }}" />
@include('lpj::component.form-penilai') @include('lpj::component.form-penilai')
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
@@ -33,25 +33,33 @@
<div class="input-group w-full flex gap-2"> <div class="input-group w-full flex gap-2">
<ol class="list-decimal pl-5 space-y-2"> <ol class="list-decimal pl-5 space-y-2">
<li>PENILAIAN INI DIBUAT BERDASARKAN ATURAN YANG BERLAKU DI SUBDIT APPRAISAL</li> <li>PENILAIAN INI DIBUAT BERDASARKAN ATURAN YANG BERLAKU DI SUBDIT APPRAISAL</li>
<li>LAPORAN INI DIBUAT BERDASARKAN DATA FOTOCOPY DOKUMEN YANG DITERIMA PENILAI DENGAN ASUMSI BAHWA DATA TERSEBUT SESUAI DENGAN DOKUMEN ASLINYA</li> <li>LAPORAN INI DIBUAT BERDASARKAN DATA FOTOCOPY DOKUMEN YANG DITERIMA PENILAI DENGAN ASUMSI BAHWA DATA
<li>PENILAI TIDAK MELAKUKAN PEMBUKTIAN LEBIH RINCI ATAU PENGAKUAN TERTULIS DARI PIHAK YANG DITEMUI SAAT PENILAIAN, ATAS INFORMASI YANG DIBERIKAN SECARA LISAN SEHUBUNGAN DENGAN IDENTITAS DIRI DAN HUBUNGAN DI ANTARA PIHAK TERKAIT SAAT MELAKUKAN INSPEKSI OBJEK YANG DINILAI</li> TERSEBUT SESUAI DENGAN DOKUMEN ASLINYA</li>
<li>LAPORAN INI DIGUNAKAN HANYA UNTUK KEPENTINGAN INTERNAL DAN DILARANG MENYEBARKAN KEPADA PIHAK KETIGA</li> <li>PENILAI TIDAK MELAKUKAN PEMBUKTIAN LEBIH RINCI ATAU PENGAKUAN TERTULIS DARI PIHAK YANG DITEMUI SAAT
PENILAIAN, ATAS INFORMASI YANG DIBERIKAN SECARA LISAN SEHUBUNGAN DENGAN IDENTITAS DIRI DAN HUBUNGAN
DI ANTARA PIHAK TERKAIT SAAT MELAKUKAN INSPEKSI OBJEK YANG DINILAI</li>
<li>LAPORAN INI DIGUNAKAN HANYA UNTUK KEPENTINGAN INTERNAL DAN DILARANG MENYEBARKAN KEPADA PIHAK KETIGA
</li>
</ol> </ol>
</div> </div>
</div> </div>
<div class="flex card-footer justify-end gap-5"> <div class="flex card-footer justify-end gap-5">
<button type="button" class="btn btn-success" id="saveButton" onclick="saveLpjSederhanadanStandard()"> <button type="button" class="btn btn-primary" id="saveButton" onclick="saveLpjSederhanadanStandard()">
<i class="ki-filled ki-save-2"></i>
<span id="saveButtonText">Save</span> <span id="saveButtonText">Save</span>
</button> </button>
@if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal'])) @if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal', 'administrator']))
<a class="btn btn-info" <a class="btn btn-info"
href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1"> href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
LAMPIRAN FOTO DAN DOKUMEN LAMPIRAN FOTO DAN DOKUMEN
</a> </a>
<a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => request('documentId'), 'jenis_jaminan_id' => request('jaminanId')]) }}" class="btn btn-light"
<a class="btn btn-primary" >
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
</a>
<a class="btn btn-success"
onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )"> onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )">
<i class="ki-filled ki-printer"></i> Print <i class="ki-filled ki-printer"></i> Print Laporan
</a> </a>
@endif @endif
</div> </div>

View File

@@ -14,9 +14,20 @@
Memo Antar Kantor Memo Antar Kantor
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ url()->previous() }}" class="btn btn-xs btn-info"> @php
<i class="ki-filled ki-exit-left"></i> Back use Illuminate\Support\Facades\Route;
</a> @endphp
@if (Auth::user()->hasAnyRole(['administrator', 'senior-officer', 'EO Appraisal', 'DD Appraisal']) &&
Route::currentRouteName('otorisator.show'))
<a href="{{ route('otorisator.show', ['id' => $permohonan->id, 'type' => 'Pelaporan']) }}"
class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@elseif (Auth::user()->hasAnyRole(['administrator', 'surveyor']) && Route::currentRouteName('penilai.show'))
<a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@endif
</div> </div>
</div> </div>
<div class="card-body grid gap-5"> <div class="card-body grid gap-5">
@@ -38,7 +49,7 @@
<label class="form-label max-w-56">Nomor Memo</label> <label class="form-label max-w-56">Nomor Memo</label>
<div class="flex flex-wrap items-base line w-full"> <div class="flex flex-wrap items-base line w-full">
<input type="text" name="nomor_memo" class="input w-full" placeholder="Masukkan..." <input type="text" name="nomor_memo" class="input w-full" placeholder="Masukkan..."
value="{{ $noLpmemo ?? '' }}" @readonly(true)> value="{{ $nomorLaporan ?? '' }}" @readonly(true)>
</div> </div>
</div> </div>
{{-- 250109828129/ --}} {{-- 250109828129/ --}}
@@ -175,7 +186,7 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input type="date" id="tanggal_survey" name="tanggal_survey" <input type="date" id="tanggal_survey" name="tanggal_survey"
class="input w-full" placeholder="Masukkan Tanggal Survey" class="input w-full" placeholder="Masukkan Tanggal Survey"
value="{{ $memo->tanggal_survey ?? old('tanggal_survey') }}"> value="{{ $memo->lokasi->tanggal_survey ?? old('tanggal_survey') }}">
</div> </div>
</div> </div>
@@ -281,7 +292,8 @@
{{-- @include('lpj::penilai.components.foto-lampiran') --}} {{-- @include('lpj::penilai.components.foto-lampiran') --}}
<div class="flex card-footer justify-end gap-5"> <div class="flex card-footer justify-end gap-5">
<a class="btn btn-success" onclick="saveMemo()"> <a class="btn btn-primary" onclick="saveMemo()">
<i class="ki-filled ki-save-2"></i>
SAVE SAVE
</a> </a>
@if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal'])) @if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal']))
@@ -289,7 +301,11 @@
href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1"> href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
LAMPIRAN FOTO DAN DOKUMEN LAMPIRAN FOTO DAN DOKUMEN
</a> </a>
<a class="btn btn-primary" <a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => request('documentId'), 'jenis_jaminan_id' => request('jaminanId')]) }}"
class="btn btn-light">
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
</a>
<a class="btn btn-success"
onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )"> onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )">
<i class="ki-filled ki-printer"></i> Print <i class="ki-filled ki-printer"></i> Print
</a> </a>

View File

@@ -1,401 +1,358 @@
<!DOCTYPE html> @include('lpj::penilai.components.header')
<html lang="en"> @php
$data = '';
foreach ($permohonan->documents as $dokumen) {
$data .= $dokumen->jenisJaminan->name . ', ';
<head> $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
<meta charset="UTF-8"> $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
<meta name="viewport" content="width=device-width, initial-scale=1.0"> $teams = $permohonan->region->teams;
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Laporan Penilai Jaminan</title>
<style> if ($teams) {
* { foreach ($teams as $team) {
font-family: Arial, Helvetica, sans-serif; $team_users = $team->teamsUsers;
font-size: 10px; // print_r($team_users);
} if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
h2 { if ($user && $user->hasRole('senior-officer')) {
font-size: 12px $senior_officer = $user;
} break 3;
/** Define the header rules **/
@page {
margin-top: 100px;
/* Ruang untuk header */
margin-bottom: 50px;
/* Ruang untuk footer */
}
#header {
/* position: fixed; */
/* top: -100px; */
/* Posisi header di luar konten */
left: 0;
right: 0;
height: 90px;
text-align: center;
padding-bottom: 10px;
}
.header-logo {
position: absolute;
left: 20px;
top: 10px;
max-height: 80px;
max-width: 150px;
}
.header-title {
margin-top: 20px;
}
#footer {
position: fixed;
bottom: -50px;
left: 0;
right: 0;
height: 50px;
text-align: center;
border-top: 1px solid #ddd;
padding-top: 10px;
}
.page-number:after {
content: counter(page) " dari " counter(pages);
}
.content {
margin-top: 20px;
}
.page-break {
page-break-after: always;
}
footer {
position: fixed;
bottom: 0cm;
left: 0cm;
right: 0cm;
}
body {
margin-top: 3cm;
/* Tambahkan margin top sedikit lebih besar dari tinggi header */
margin-bottom: 120px;
position: relative;
z-index: 1;
/* Pastikan konten berada di bawah header */
}
.border {
border: 1px solid #000;
}
.photo-item {
text-align: center;
margin-bottom: 20px;
}
.photo-image {
max-width: 80%;
height: auto;
display: block;
margin: 0 auto;
}
</style>
</head>
<body style="width: 80%; margin: auto">
@php
$data = '';
foreach ($permohonan->debiture->documents as $dokumen) {
$data .= $dokumen->jenisJaminan->name . ', ';
$penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
$surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
$teams = $permohonan->region->teams;
if ($teams) {
foreach ($teams as $team) {
$team_users = $team->teamsUsers;
// print_r($team_users);
if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
if ($user && $user->hasRole('senior-officer')) {
$senior_officer = $user;
break 3;
}
} }
} }
} }
} }
} }
$data = rtrim($data, ', '); }
@endphp $data = rtrim($data, ', ');
<header id="header"> @endphp
<table style="width: 100%; border: none;">
<tr>
<td style="width: 20%; text-align: left;" class="header-left">
@include('lpj::component.logo-bag')
</td>
</tr>
</table>
</header>
<main class="content">
<table style="width: 100%">
<tr>
<td style="text-align: center; margin-top: 5px;">
<h2 style="text-decoration: underline; text-transform: uppercase; text-align: center; margin: 0;">MEMO ANTAR KANTOR</h2>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Kepada</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['kepada'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Dari</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['dari'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">No memo</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $nomorLaporan ?? '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Tanggal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ formatTanggalIndonesia($memo['tanggal']) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Perihal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['perihal'] ?? '' }}</td>
</tr>
</table>
<table> <main class="content">
<tr> <table style="width: 100%">
<td> <tr>
Menindak lanjuti permintann penilaian jaminan dari {{ $permohonan->user->name }} AO Cabang {{ $permohonan->debiture->branch->name ?? '' }} <td style="text-align: center; margin-top: 5px;">
tanggal {{formatTanggalIndonesia($memo['tanggal']) ?? ''}}, dapat di sampaikan sebagai berikut: <h2 style="text-decoration: underline; text-transform: uppercase; text-align: center; margin: 0;">
</td> MEMO ANTAR KANTOR</h2>
</tr> </td>
</table> </tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Kepada</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['kepada'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Dari</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['dari'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">No memo</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $nomorLaporan ?? '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Tanggal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ formatTanggalIndonesia($memo['tanggal']) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Perihal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['perihal'] ?? '' }}</td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;"> <table>
<tr> <tr>
<td style=""> <td>
<h6 style="text-transform: uppercase; margin: 0; ">Data Debitur dan Jaminan</h2> Menindak lanjuti permintann penilaian jaminan dari {{ $permohonan->user->name }} AO Cabang
</td> {{ $permohonan->debiture->branch->name ?? '' }}
</tr> tanggal {{ formatTanggalIndonesia($memo['tanggal']) ?? '' }}, dapat di sampaikan sebagai berikut:
</table> </td>
<table style="width: 100%"> </tr>
</table>
<tr> <table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<td style="width: 20%; padding: 2px;">Nama Calon Debitur</td> <tr>
<td style="width: 1%; padding: 2px;">:</td> <td style="">
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td> <h6 style="text-transform: uppercase; margin: 0; ">Data Debitur dan Jaminan</h2>
</tr> </td>
<tr> </tr>
<td style="width: 20%; padding: 2px;">Jenis Aset</td> </table>
<td style="width: 1%; padding: 2px;">:</td> <table style="width: 100%">
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
</tr>
@if (@isset($dokumen)) <tr>
@foreach ($dokumen->detail as $details) <td style="width: 20%; padding: 2px;">Nama Calon Debitur</td>
<tr> <td style="width: 1%; padding: 2px;">:</td>
<td style="width: 20%; padding: 2px;">{{ $details->jenisLegalitasJaminan->name ?? '' }}</td> <td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
<td style="width: 1%; padding: 2px;">:</td> </tr>
<td style="width: 79%; padding: 2px;"> <tr>
<td style="width: 20%; padding: 2px;">Jenis Aset</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
</tr>
@if (@isset($dokumen))
@foreach ($dokumen->detail as $detail)
<tr>
@if (isset($detail->dokumen_jaminan))
<td style=" padding: 2px;">
{{ $detail->name ?? '' }}
</td>
<td style=" padding: 2px;">:</td>
<td style=" padding: 2px;">
@if (isset($detail->dokumen_jaminan)) @if (isset($detail->dokumen_jaminan))
@php @php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan))
? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) $dokumen_nomor = is_array(json_decode($detail->dokumen_nomor))
? json_decode($detail->dokumen_nomor) ? json_decode($detail->dokumen_nomor)
: ($detail->dokumen_nomor : ($detail->dokumen_nomor
? [$detail->dokumen_nomor] ? [$detail->dokumen_nomor]
: []); : []);
@endphp @endphp
@foreach ($dokumen_jaminan as $index => $dokumen) @foreach ($dokumen_jaminan as $index => $dokumen)
<div> <div>
@if (!empty($dokumen_nomor)) @if (!empty($dokumen_nomor[$index]))
<span> <span>{{ $dokumen_nomor[$index] }}</span>
{{ $dokumen_nomor[$index] }}</span>
@endif @endif
</div> </div>
<br>
@endforeach @endforeach
@endif @endif
</td> </td>
</tr> @endif
@endforeach </tr>
@endif
@if (isset($detail->details))
@if (json_decode($detail->details))
@foreach (json_decode($detail->details) as $key => $value)
@if (!is_null($value) && $value !== '')
<tr>
<td style="padding: 2px;">{{ ucwords(str_replace('_', ' ', $key)) ?? '' }}</td>
<td style=" padding: 2px;">:</td>
<td style="">{{ $value }}
@if ($key == 'luas_bangunan' || $key == 'luas_tanah')
<sup>m2</sup>
@endif
</td>
</tr>
@endif
@endforeach
@endif
@endif
@endforeach
@endif
<tr>
<td style="width: 20%; padding: 2px;">Atas Nama</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
@if (!empty($memo['lokasi']['address']))
<tr>
<td width="20%">Terletak di</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td> {{ $alamat['address'] ?? '' }}</td>
</tr>
<tr>
<td>Desa/Kelurahan</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['village_code'] ?? '' }}</td>
</tr>
<tr>
<td>Kecamatan</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['district_code'] ?? '' }}</td>
</tr>
<tr>
<td>Kabupaten/Kota</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td> {{ $alamat['city_code'] ?? '' }}</td>
</tr>
<tr>
<td>Provinsi</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['province_code'] ?? '' }}</td>
</tr>
@endif
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">HASIL Kunjungan</h6>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Tanggal Kunjungan</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">
{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Surveyor</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $surveyor->userPenilaiTeam->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak Pemohon</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->user->name ?? '' }} -
{{ $permohonan->debiture->branch->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak Cadeb/Debitur</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
</table>
<table>
<tr>
@isset($memo['hasil_survey'])
@foreach ($memo['hasil_survey'] as $key => $item)
<tr> <tr>
<td style="width: 20%; padding: 2px;">Atas Nama</td> <td>{{ $item }}</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr> </tr>
@endforeach
@endisset
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">KESIMPULAN DAN SARAN</h6>
</td>
</tr>
<tr>
@isset($memo['kesimpulan_saran'])
@foreach ($memo['kesimpulan_saran'] as $key => $item)
<tr> <tr>
<td> {{ $item }}</td>
</tr>
@endforeach
@endisset
</tr>
</table>
<table style="width: 100%">
<tr>
<td>Demikian Kami Sampaikan, atas perhatiannya kami ucapkan terimakasih</td>
</tr>
<tr>
<table style="width: 100%; border-collapse: collapse; text-align: center;">
@php @php
$cekLuas = isset($forminspeksi['tanah']['luas_tanah']['tidak sesuai']) ? 'tidak sesuai' : 'sesuai'; use Modules\Usermanagement\Models\User;
$luas = $forminspeksi['tanah']['luas_tanah'][$cekLuas] ?? null; $penilaiUser = User::where('id', $penilai->userPenilaiTeam->id)->first();
$imagePathPenilai = storage_path('app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign);
$soUser = User::where('id', $senior_officer->id)->first();
$imagePathSo = storage_path('app/public/signatures/' . $soUser->id . '/' . $soUser->sign);
$imagePathEO = storage_path(
'app/public/signatures/' .
User::role('EO Appraisal')->first()->id .
'/' .
User::role('EO Appraisal')->first()->sign,
);
$imagePathDD = storage_path(
'app/public/signatures/' .
User::role('DD Appraisal')->first()->id .
'/' .
User::role('DD Appraisal')->first()->sign,
);
@endphp @endphp
<td style="width: 20%; padding: 2px;">Luas Tanah</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $luas ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Lokasi Jaminan</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $memo['lokasi']['address'] ?? '' }}, {{ $alamat['village_code'] ?? '' }} {{ $alamat['district_code'] ?? '' }}, {{ $alamat['city_code'] ?? '' }}, {{ $alamat['province_code'] ?? '' }} </td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">HASIL Kunjungan</h6>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Tanggal Kunjungan</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Surveyor</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $surveyor->userPenilaiTeam->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak Pemohon</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->user->name ?? '' }} -
{{ $permohonan->debiture->branch->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak Cadeb/Debitur</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
</table>
<table>
<tr>
@isset($memo['hasil_survey'])
@foreach ($memo['hasil_survey'] as $key => $item)
<tr> <tr>
<td>{{ $item }}</td> <td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathPenilai))
<img src="{{ $imagePathPenilai }}" alt="{{ $imagePathPenilai }}" width="80px">
@endif
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathSo))
<img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathEO))
<img src="{{ $imagePathEO }}" alt="{{ $imagePathEO }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathDD))
<img src="{{ $imagePathDD }}" alt="{{ $imagePathDD }}" width="80px">
@endif
</td>
@endif
</tr> </tr>
@endforeach
@endisset
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">KESIMPULAN DAN SARAN</h6>
</td>
</tr>
<tr>
@isset($memo['kesimpulan_saran'])
@foreach ($memo['kesimpulan_saran'] as $key => $item)
<tr> <tr>
<td> {{ $item }}</td> <td style=" padding: 4px;">{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('PENILAI')) }}
</span>
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;">
{{ $senior_officer->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('SENIOR OFFICER')) }}
</span>
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;">
{{ User::role('EO Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('EXECUTIVE OFFICER')) }}
</span>
</td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;">
{{ User::role('DD Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('DEPUTY DIRECTOR')) }}
</span>
</td>
@endif
</tr> </tr>
@endforeach </table>
@endisset </tr>
</tr> </table>
</table>
<table style="width: 100%"> <div class="page-break"></div>
<tr>
<td>Demikian Kami Sampaikan, atas perhatiannya kami ucapkan terimakasih</td>
</tr>
<tr>
<table style="width: 100%; text-align: center;">
<tr> <div class="section">
<td style="height: 50px"></td> <div class="judul">
<td style="height: 50px"></td> <h6 class="border" style="text-align: center">
<td style="height: 50px"></td> FOTO JAMINAN
<td style="height: 50px"></td> </h6>
</tr>
@php
use Modules\Usermanagement\Models\User;
@endphp
<tr>
<td >{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
<span style="text-transform: uppercase; margin: 0; ">
PENILAI
</span>
</td>
<td > {{ $senior_officer->name ?? '' }}</br>
<span style="text-transform: uppercase; margin: 0; ">
SENIOR OFFICER
</span>
</td>
<td > {{ $senior_officer->name ?? '' }}</br>
<span style="text-transform: uppercase; margin: 0; ">
EXECUTIVE OFFICER
</span>
</td>
<td > {{ User::role('DD Appraisal')->first()->name ?? '' }}</br>
<span style="text-transform: uppercase; margin: 0; ">
Deputy Director
</span>
</td>
</tr>
</table>
</tr>
</table>
<div class="page-break"></div>
<div class="section">
<div class="judul">
<h6 class="border" style="text-align: center">
FOTO JAMINAN
</h6>
</div>
@include('lpj::penilai.components.foto-jaminan')
</div> </div>
@include('lpj::penilai.components.foto-jaminan')
</div>
</main> </main>
@include('lpj::penilai.components.footer')
<footer>
</footer>
<script>
const data = @json($memo);
console.log(data);
</script>
</body>
</html>

View File

@@ -0,0 +1,384 @@
@include('lpj::penilai.components.header')
@php
$data = '';
foreach ($permohonan->documents as $dokumen) {
$data .= $dokumen->jenisJaminan->name . ', ';
$penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
$surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
$teams = $permohonan->region->teams;
if ($teams) {
foreach ($teams as $team) {
$team_users = $team->teamsUsers;
// print_r($team_users);
if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
if ($user && $user->hasRole('senior-officer')) {
$senior_officer = $user;
break 3;
}
}
}
}
}
}
$data = rtrim($data, ', ');
@endphp
<main class="content">
<table style="width: 100%">
<tr>
<td style="text-align: center; margin-top: 5px;">
<h2 style="text-decoration: underline; text-transform: uppercase; text-align: center; margin: 0;">
CALL Report</h2>
<p style="font-size: 12px; margin: 0;">NO: {{ $nomorLaporan ?? '' }}</p>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Kepada</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $report['kepada'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Dari</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $report['dari'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Tanggal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ formatTanggalIndonesia($report['tanggal']) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Perihal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $report['perihal'] ?? '' }}</td>
</tr>
</table>
<table>
<tr>
<td>
Menindak lanjuti permintan penilaian Tujuan Lelang, BAG Cab
{{ $permohonan->debiture->branch->name ?? '' }}
tanggal {{ formatTanggalIndonesia($report['tanggal']) ?? '' }}, dapat di sampaikan sebagai berikut:
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Nama Debitur</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">KJPP</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ preg_replace('/^K\\d+ - /', '', $permohonan->penawaran->nama_kjpp_sebelumnya ?? '-') }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Jenis Aset</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $data ?? '' }}</td>
</tr>
@if (!empty($report['lokasi']['address']))
<tr>
<td style="width: 20%; padding: 2px;">Lokasi Objek Penilaian</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $report['lokasi']['address'] ?? '' }},
{{ $alamat['village_code'] ?? '' }} {{ $alamat['district_code'] ?? '' }},
{{ $alamat['city_code'] ?? '' }}, {{ $alamat['province_code'] ?? '' }} </td>
</tr>
@endif
@if (@isset($dokumen))
@foreach ($dokumen->detail as $detail)
<tr>
@if (isset($detail->dokumen_jaminan))
<td style=" padding: 2px;">
{{ $detail->name ?? '' }}
</td>
<td style=" padding: 2px;">:</td>
<td style=" padding: 2px;">
@if (isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan))
? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor))
? json_decode($detail->dokumen_nomor)
: ($detail->dokumen_nomor
? [$detail->dokumen_nomor]
: []);
@endphp
@foreach ($dokumen_jaminan as $index => $dokumen)
<div>
@if (!empty($dokumen_nomor[$index]))
<span>{{ $dokumen_nomor[$index] }}</span>
@endif
</div>
@endforeach
@endif
</td>
@endif
</tr>
@if (isset($detail->details))
@if (json_decode($detail->details))
@foreach (json_decode($detail->details) as $key => $value)
@if (!is_null($value) && $value !== '')
<tr>
<td style="padding: 2px;">{{ ucwords(str_replace('_', ' ', $key)) ?? '' }}</td>
<td style=" padding: 2px;">:</td>
<td style="">{{ $value }}
@if ($key == 'luas_bangunan' || $key == 'luas_tanah')
<sup>m2</sup>
@endif
</td>
</tr>
@endif
@endforeach
@endif
@endif
@endforeach
@endif
<tr>
<td style="width: 20%; padding: 2px;">Tanggal Penilaian</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ isset($permohonan->penilaian->tanggal_kunjungan) ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Lelang ke</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $report['lelang'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Nilai Pasar Wajar (NPW)</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ isset($report['nilai_pasar']) ? formatRupiah($report['nilai_pasar']) : '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">
Nilai Likuidasi
{{ isset($report['persentase_likuidasi']) ? '(' . $report['persentase_likuidasi'] . '%)' : '-' }}
</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">
{{ isset($report['hasil_nilai_likuidasi']) ? formatRupiah($report['hasil_nilai_likuidasi']) : '-' }}
</td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Penilaian ke lokasi objek telah dilakukan oleh :
</h6>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td style="width: 20%; padding: 2px;">Staf Subdit Appraisal </td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">
{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak KJPP</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $forminspeksi['signature']['kjjp']['name'] ?? $report['pihak_kjjpp'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Pihak BAGI Cab </td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->user->name ?? '' }} -
{{ $permohonan->debiture->branch->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Debitur/perwakilan debitur </td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Informasi yang didapatkan sebagai berikut : </h6>
</td>
</tr>
</table>
@isset($report['fakta']['fakta_positif'])
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Faktor positif</h2>
</td>
</tr>
<tr>
@foreach ($report['fakta']['fakta_positif'] as $key => $item)
<tr>
<td>{{ $item }}</td>
</tr>
@endforeach
</tr>
</table>
@endisset
@isset($report['fakta']['fakta_negatif'])
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Faktor negatif</h2>
</td>
</tr>
<tr>
@foreach ($report['fakta']['fakta_negatif'] as $key => $item)
<tr>
<td>{{ $item }}</td>
</tr>
@endforeach
</tr>
</table>
@endisset
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">3. Catatan Yang Perlu Diperhatikan</h6>
</td>
</tr>
<tr>
@isset($report['kesimpulan_saran'])
@foreach ($report['kesimpulan_saran'] as $key => $item)
<tr>
<td> {{ $item }}</td>
</tr>
@endforeach
@endisset
</tr>
</table>
<table style="width: 100%">
<tr>
<td>Demikian Kami Sampaikan, atas perhatiannya kami ucapkan terimakasih</td>
</tr>
<tr>
<table style="width: 100%; border-collapse: collapse; text-align: center;">
@php
use Modules\Usermanagement\Models\User;
$penilaiUser = User::where('id', $penilai->userPenilaiTeam->id)->first();
$imagePathPenilai = storage_path(
'app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign,
);
$soUser = User::where('id', $senior_officer->id)->first();
$imagePathSo = storage_path('app/public/signatures/' . $soUser->id . '/' . $soUser->sign);
$imagePathEO = storage_path(
'app/public/signatures/' .
User::role('EO Appraisal')->first()->id .
'/' .
User::role('EO Appraisal')->first()->sign,
);
$imagePathDD = storage_path(
'app/public/signatures/' .
User::role('DD Appraisal')->first()->id .
'/' .
User::role('DD Appraisal')->first()->sign,
);
@endphp
<tr>
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathPenilai))
<img src="{{ $imagePathPenilai }}" alt="{{ $imagePathPenilai }}" width="80px">
@endif
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathSo))
<img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathEO))
<img src="{{ $imagePathEO }}" alt="{{ $imagePathEO }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathDD))
<img src="{{ $imagePathDD }}" alt="{{ $imagePathDD }}" width="80px">
@endif
</td>
@endif
</tr>
<tr>
<td style=" padding: 4px;">{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('PENILAI')) }}
</span>
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;">
{{ $senior_officer->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('SENIOR OFFICER')) }}
</span>
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;">
{{ User::role('EO Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('EXECUTIVE OFFICER')) }}
</span>
</td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;">
{{ User::role('DD Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('DEPUTY DIRECTOR')) }}
</span>
</td>
@endif
</tr>
</table>
</tr>
</table>
<div class="page-break"></div>
<div class="section">
<div class="judul">
<h6 class="border" style="text-align: center">
FOTO JAMINAN
</h6>
</div>
@include('lpj::penilai.components.foto-jaminan')
</div>
</main>
@include('lpj::penilai.components.footer')

View File

@@ -1,349 +1,604 @@
<!DOCTYPE html> @include('lpj::penilai.components.header')
<html lang="en"> @php
$data = '';
foreach ($permohonan->documents as $dokumen) {
$data .= $dokumen->jenisJaminan->name . ', ';
<head> $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
<meta charset="UTF-8"> $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
<meta name="viewport" content="width=device-width, initial-scale=1.0"> $teams = $permohonan->region->teams;
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Laporan Penilai Jaminan</title>
<style> if ($teams) {
* { foreach ($teams as $team) {
font-family: Arial, Helvetica, sans-serif; $team_users = $team->teamsUsers;
font-size: 10px; // print_r($team_users);
if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
if ($user && $user->hasRole('senior-officer')) {
$senior_officer = $user;
break 3;
}
}
}
} }
}
}
$data = rtrim($data, ', ');
@endphp
<main class="content">
<table>
<tr>
<td>
<h2 style="text-transform: uppercase;">Report Analisa Property</h2>
</td>
</tr>
</table>
h2 { <table style="width: 100%;">
font-size: 12px <tr>
} <td style="width: 20%; padding: 2px; vertical-align: top;">Kepada</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td style="width: 79%; vertical-align: top;">{{ $rap['kepada'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Dari</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $rap['dari'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">No</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $nomorLaporan ?? '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Tanggal Survey</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">
{{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }}</td>
</tr>
<tr>
<td style="width: 25%; padding: 2px; vertical-align: top;">Cabang/Pemohon</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td style="vertical-align: top; vertical-align: top;">
{{ $permohonan->debiture->branch->name ?? '' }}
</td>
</tr>
<tr>
<td style="width: 25%; padding: 2px;">Ao</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="vertical-align: top; padding: 2px;">{{ $permohonan->user->name ?? '' }}</td>
</tr>
<tr>
<td style="width: 25%; padding: 2px; vertical-align: top;">Perwakilan Developer</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td style="vertical-align: top;">{{ $forminspeksi['asset']['pihak_bank'] ?? '' }}
</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Perihal</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td style="width: 79%;">{{ $rap['perihal'] ?? '' }}</td>
</tr>
</table>
/** Define the header rules **/ <div style="border-top: 1px solid black; width: 100%;"></div>
@page { <h2 style="text-transform: uppercase;">NAMA DEVELOPER</h2>
margin-top: 100px; <table style="width: 100%; ">
/* Ruang untuk header */ <tr>
margin-bottom: 50px; <td style="width: 20%; padding: 2px;">Nama</td>
/* Ruang untuk footer */ <td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
} <td style="width: 79%;">{{ $permohonan->debiture->name ?? '' }}</td>
</tr>
</table>
#header { <h2 style="text-transform: uppercase;">NAMA PROYEK</h2>
/* position: fixed; */ <table style="width: 100%; ">
/* top: -100px; */ <tr>
/* Posisi header di luar konten */ <td style="width: 20%; padding: 2px;">Proyek</td>
left: 0; <td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
right: 0; <td style="width: 79%;">{{ $data ?? '' }}</td>
height: 50px; </tr>
text-align: center; </table>
padding-bottom: 10px; <h2 style="text-transform: uppercase;">ALAMAT</h2>
} <table style="width: 100%; ">
<tr>
<td width="20%">Terletak di</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td> {{ $alamat['address'] ?? '' }}</td>
</tr>
<tr>
<td>Desa/Kelurahan</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['village_code'] ?? '' }}</td>
</tr>
<tr>
<td>Kecamatan</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['district_code'] ?? '' }}</td>
</tr>
<tr>
<td>Kabupaten/Kota</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td> {{ $alamat['city_code'] ?? '' }}</td>
</tr>
<tr>
<td>Provinsi</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['province_code'] ?? '' }}</td>
</tr>
</table>
<h2 style="text-transform: uppercase;">DOKUMEN TERLAMPIR</h2>
<table style="width: 100%;">
.header-logo { @if (@isset($dokumen))
position: absolute; @foreach ($dokumen->detail as $detail)
left: 20px; <tr>
top: 10px; @if (isset($detail->dokumen_jaminan))
max-height: 80px; <td style="width: 20%; padding: 2px;">
max-width: 150px; {{ $detail->name ?? '' }}
} </td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">
@if (isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_string($detail->dokumen_jaminan)
? json_decode($detail->dokumen_jaminan, true)
: [];
$dokumen_jaminan = is_array($dokumen_jaminan)
? $dokumen_jaminan
: [$detail->dokumen_jaminan];
.header-title { $dokumen_nomor = is_string($detail->dokumen_nomor)
margin-top: 20px; ? json_decode($detail->dokumen_nomor, true)
} : [];
$dokumen_nomor = is_array($dokumen_nomor)
? $dokumen_nomor
: [$detail->dokumen_nomor];
@endphp
#footer { @foreach ($dokumen_jaminan as $index => $dokumen)
position: fixed; <div>
bottom: -50px; @if (!empty($dokumen_nomor[$index]))
left: 0; <span>{{ $dokumen_nomor[$index] }}</span>
right: 0; @endif
height: 50px; </div>
text-align: center; @endforeach
border-top: 1px solid #ddd; @endif
padding-top: 10px; </td>
} @endif
</tr>
.page-number:after { <tr>
content: counter(page) " dari " counter(pages); @if (isset($detail->details))
} @if (json_decode($detail->details))
@foreach (json_decode($detail->details) as $key => $value)
@if (!is_null($value) && $value !== '')
<td style="width: 20%; padding: 2px;">
{{ ucwords(str_replace('_', ' ', $key)) ?? '' }}</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $value }}
@if ($key == 'luas_bangunan' || $key == 'luas_tanah')
<sup>m2</sup>
@endif
</td>
@endif
@endforeach
@endif
@endif
</tr>
@endforeach
@endif
.content { @if (isset($forminspeksi['perizinan']) && is_array($forminspeksi['perizinan']) && count($forminspeksi['perizinan']) > 0)
margin-top: 20px; @foreach ($forminspeksi['perizinan'] as $perizinan)
} <tr>
<td style="width: 20%; padding: 2px;">Perizinan</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $perizinan['perizinan'] }}</td>
</tr>
@endforeach
@endif
.page-break { @if (isset($forminspeksi['brosur_price_list']) && count($forminspeksi['brosur_price_list']) > 0)
page-break-after: always; @foreach ($forminspeksi['brosur_price_list'] as $perizinan)
} <tr>
<td style="width: 20%; padding: 2px;">Brosur & Pricelist</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $perizinan['jenis'] }}</td>
</tr>
@endforeach
@endif
footer { </table>
position: fixed;
bottom: 0cm;
left: 0cm;
right: 0cm;
}
body { <h2 style="text-transform: uppercase;">DESKRIPSI DEVELOPER</h2>
margin-top: 3cm; <table style="width: 100%;">
/* Tambahkan margin top sedikit lebih besar dari tinggi header */ <tr>
margin-bottom: 120px; <td style="vertical-align: top; width: 20%; padding: 2px;">Pengalaman Developer & Proyek Yang Pernah
position: relative; Dibuat</td>
z-index: 1; <td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
/* Pastikan konten berada di bawah header */ <td style="width: 79%;">{!! nl2br(e($forminspeksi['pengalaman_developer'] ?? 'Data tidak tersedia')) !!}</td>
} </tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Apakah Developer Anggota REI</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['developer_anggota'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
.border {
border: 1px solid #000;
}
.photo-item { @isset($forminspeksi['lainnya_developer'])
text-align: center; @foreach ($forminspeksi['lainnya_developer'] as $item)
margin-bottom: 20px; <tr>
} <td style="vertical-align: top; width: 20%; padding: 2px;">Lainnya</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
@endisset
</table>
<h2 style="text-transform: uppercase;">KONDISI, LINGKUNGAN DAN PROGRESS PEMBANGUNAN</h2>
<table style="width: 100%;">
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Kapan Mulai Dibangun & Target Penyelesaian
</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['kapan_mulai_dibangun'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Kondisi Perumahan Saat Ini</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['kondisi_perumahan'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Progress Pembangunan</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['progres_pembangunan'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Kontraktor (internal/eksternal)</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['kontraktor'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Lingkungan Sekitar</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['lingkungan_sekitar'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Komplek Lain Disekitar Lokasi</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['komplek_disekitar'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Pusat Keramaian Dekat Lokasi</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['pusat_keramaian'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Transportasi Umum Yang Tersedia</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>{!! nl2br(e($forminspeksi['transportasi_umum'] ?? 'Data tidak tersedia')) !!}</td>
</tr>
.photo-image {
max-width: 80%;
height: auto;
display: block;
margin: 0 auto;
}
</style>
</head> @isset($forminspeksi['lainnya_kondisi'])
@foreach ($forminspeksi['lainnya_kondisi'] as $item)
<tr>
<td style="vertical-align: top; width: 20%; padding: 2px;">Lainnya</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
@endisset
</table>
<body style="width: 80%; margin: auto;"> @isset($forminspeksi['partisi'])
<header id="header"> <h2 style="text-transform: uppercase;">PARTISI BANGUNAN</h2>
<table style="width: 100%; border: none;"> <table style="width: 100%;">
<tr> @if (is_array($forminspeksi['partisi']))
<td style="width: 20%; text-align: left;" class="header-left"> @foreach ($forminspeksi['partisi'] as $key => $item)
@include('lpj::component.logo-bag') @if (is_array($item))
</td> <tr>
</tr> <td style="vertical-align: top; width: 20%; padding: 2px;">
{{ $item['nama'] ?? '' }}
</td>
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
<td>
{{ $item['value'] ?? '' }}
</td>
</tr>
@endif
@endforeach
@endif
</table> </table>
</header> @endisset
<main class="content"> @isset($forminspeksi['jumlah_unit'])
<h2 style="text-transform: uppercase;">JUMLAH UNIT, BLOK, TYPE DAN LUAS BANGUNAN</h2>
<table>
@foreach ($forminspeksi['jumlah_unit'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['batas_batas_perumahan'])
<h2 style="text-transform: uppercase;">BATAS-BATAS PERUMAHAN</h2>
<table>
@foreach ($forminspeksi['batas_batas_perumahan'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['fasus_fasum'])
<h2 style="text-transform: uppercase;">FASOS/FASUM</h2>
<table>
@foreach ($forminspeksi['fasus_fasum'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['progres_penjualan'])
<h2 style="text-transform: uppercase;">PROGRES PENJUALAN SAAT INI</h2>
<table>
@foreach ($forminspeksi['progres_penjualan'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['harga_unit'])
<h2 style="text-transform: uppercase;">HARGA UNIT</h2>
<table>
@foreach ($forminspeksi['harga_unit'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['target_market'])
<h2 style="text-transform: uppercase;">TARGET MARKET</h2>
<table>
@foreach ($forminspeksi['target_market'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['kerjasama_dengan_bank'])
<h2 style="text-transform: uppercase;">KERJASAMA DENGAN BANK LAIN</h2>
<table>
@foreach ($forminspeksi['kerjasama_dengan_bank'] as $item)
<tr>
<td>
{!! nl2br(e($item)) !!}
</td>
</tr>
@endforeach
</table>
@endisset
@isset($forminspeksi['rute_menuju_lokasi'])
<h2 style="text-transform: uppercase;">RUTE MENUJU LOKASI</h2>
<table> <table>
<tr> <tr>
<td> <td>
<h2 style="text-transform: uppercase;">Report Analisa Property</h2> {{ $forminspeksi['rute_menuju_lokasi'] ?? '' }}
</td> </td>
</tr> </tr>
</table> </table>
@endisset
@if (isset($forminspeksi['fakta']) && is_array($forminspeksi['fakta']))
<h2 style="text-transform: uppercase;">ATURAN TATA KOTA</h2>
<table>
@php
$informasi = [
'peruntukan',
'kdb',
'kdh',
'gsb',
'max_lantai',
'klb',
'gss',
'pelebaran_jalan',
'nama_petugas',
];
@endphp
<table style="width: 100%;"> @if (isset($forminspeksi['fakta']) && is_array($forminspeksi['fakta']))
<tr> @foreach ($informasi as $key)
<td style="width: 20%; padding: 2px;">Kepada</td> @if (isset($forminspeksi['fakta'][$key]) && $forminspeksi['fakta'][$key] !== '-')
<td style="width: 1%; padding: 2px;">:</td> <p> - {{ ucfirst(str_replace('_', ' ', $key)) }}:
<td style="width: 79%; padding: 2px;">{{ $rap['kepada'] ?? '' }}</td> {{ $forminspeksi['fakta'][$key] }}</p>
</tr> @endif
<tr> @endforeach
<td style="width: 20%; padding: 2px;">Dari</td> @endif
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $rap['dari'] ?? '' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">No</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $nomorLaporan ?? '-' }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Tanggal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td>
</tr>
<tr>
<td style="width: 20%; padding: 2px;">Perihal</td>
<td style="width: 1%; padding: 2px;">:</td>
<td style="width: 79%; padding: 2px;">{{ $rap['perihal'] ?? '' }}</td>
</tr>
</table> </table>
@endif
<div style="border-top: 1px solid black; width: 100%;"></div> @isset($forminspeksi['fakta']['keterangan'])
<h2 style="text-transform: uppercase;">Copy Dokumen yang Dilampirkan</h2>
<table style="width: 100%;">
@foreach ($permohonan->debiture->documents as $dokumen)
@php
$penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
$teams = $permohonan->region->teams;
<h2 style="text-transform: uppercase;">CATATAN LAINNYA</h2>
@endphp <table>
@if (isset($dokumen)) @foreach ($forminspeksi['fakta']['keterangan'] ?? [] as $keterangan)
@foreach ($dokumen->detail as $index => $details) <tr>
<tr> <td>
<td> <p>{!! nl2br(e($keterangan)) !!}</p>
{{ $index + 1 }}. {{ $details->jenisLegalitasJaminan->name ?? '' }} </td>
@if (isset($details->dokumen_jaminan)) </tr>
@php
$dokumen_nomor = is_array(json_decode($details->dokumen_nomor))
? json_decode($details->dokumen_nomor)
: ($details->dokumen_nomor
? [$details->dokumen_nomor]
: []);
@endphp
@foreach ($dokumen_nomor as $nomor)
<div>{{ $nomor }}</div>
@endforeach
@endif
</td>
</tr>
@endforeach
@endif
@endforeach @endforeach
</table> </table>
@endisset
<p>Demikian kami sampaikan, atas perhatiannya kami ucapkan terima kasih.</p>
<h2 style="text-transform: uppercase;">Informasi Perusahaan/Kondisi dan Lingkungan Sekitar</h2> <table style="width: 100%; border-collapse: collapse; text-align: center;">
<table style="width: 100%;"> @php
<tr> use Modules\Usermanagement\Models\User;
<td>{{ $permohonan->debiture->name ?? '' }} {{ $forminspeksi['pengalaman_developer'] ?? '' }}
{{ $forminspeksi['developer_anggota'] ?? '' }}
<p style="padding-left: 15px;">
@isset($forminspeksi['lainnya_developer']) $penilaiUser = User::where('id', $penilai->userPenilaiTeam->id)->first();
@foreach ($forminspeksi['lainnya_developer'] as $item) $imagePathPenilai = storage_path('app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign);
<div>{{ $item }}</div>
@endforeach
@endisset
</p>
</td>
</tr>
<tr>
<td>{{ $forminspeksi['kapan_mulai_dibangun'] ?? '' }}<br>
<p style="padding-left: 15px;">
{{ $forminspeksi['kondisi_perumahan'] ?? '' }}<br>
{{ $forminspeksi['progres_pembangunan'] ?? '' }}<br>
{{ $forminspeksi['kontraktor'] ?? '' }}
</p>
</td>
</tr>
<tr>
<td>{{ $forminspeksi['kontraktor'] ?? '' }}</td>
</tr>
<tr>
<td>@isset($forminspeksi['kerjasama_dengan_bank'])
@foreach ($forminspeksi['kerjasama_dengan_bank'] as $item)
<div>{{ $item }}</div>
@endforeach
@endisset
<p style="padding-left: 15px;">
@isset($forminspeksi['batas_batas_perumahan'])
@foreach ($forminspeksi['batas_batas_perumahan'] as $item)
<div>{{ $item }}</div>
@endforeach
@endisset
</p>
</td>
</tr>
<tr>
<td>@isset($forminspeksi['harga_unit'])
@foreach ($forminspeksi['harga_unit'] as $item)
<div>{{ $item }}</div>
@endforeach
@endisset
<p style="padding-left: 15px;">
@isset($forminspeksi['progres_penjualan'])
@foreach ($forminspeksi['progres_penjualan'] as $item)
<div>{{ $item }}</div>
@endforeach
@endisset
</p>
</td>
</tr>
<tr>
<td>@isset($forminspeksi['fasus_fasum'])
@foreach ($forminspeksi['fasus_fasum'] as $item)
<div>{{ $item }}</div>
@endforeach
@endisset
</td>
</tr>
<tr>
<td>@isset($forminspeksi['target_market'])
@foreach ($forminspeksi['target_market'] as $item)
<div>{{ $item }}</div>
@endforeach
@endisset
</td>
</tr>
<tr>
<td>{{ $forminspeksi['kontraktor'] ?? '' }}</td>
</tr>
<tr>
<td>{{ $forminspeksi['lingkungan_sekitar'] ?? '' }}</td>
</tr>
<tr>
<td>{{ $forminspeksi['rute_menuju_lokasi'] ?? '' }}</td>
</tr>
<tr>
<td>
<p style="padding-left: 15px;">
{{ $forminspeksi['fakta']['peruntukan'] ?? '' }}<br> $soUser = User::where('id', $senior_officer->id)->first();
{{ $forminspeksi['fakta']['gsb'] ?? '' }}<br> $imagePathSo = storage_path('app/public/signatures/' . $soUser->id . '/' . $soUser->sign);
{{ $forminspeksi['fakta']['kdb'] ?? '' }}<br>
{{ $forminspeksi['fakta']['klb'] ?? '' }}
</p>
</td>
</tr>
<tr>
<td>13. {{ $forminspeksi['rute_menuju_lokasi'] ?? '' }}</td>
</tr>
<tr> $imagePathEO = storage_path(
<td> 'app/public/signatures/' .
@isset($forminspeksi['keterangan']) User::role('EO Appraisal')->first()->id .
@foreach ($forminspeksi['keterangan'] as $item) '/' .
<div>{{ $item }}</div> User::role('EO Appraisal')->first()->sign,
@endforeach );
@endisset
</td>
</tr>
</table>
<p>Demikian kami sampaikan, atas perhatiannya kami ucapkan terima kasih.</p> $imagePathDD = storage_path(
'app/public/signatures/' .
<table style="width: 100%; text-align: center;"> User::role('DD Appraisal')->first()->id .
<tr> '/' .
<td style="height: 50px;"></td> User::role('DD Appraisal')->first()->sign,
<td style="height: 50px;"></td> );
<td style="height: 50px;"></td> @endphp
<td style="height: 50px;"></td> <tr>
</tr> <td style=" padding: 4px;height: 50px">
@php @if (file_exists($imagePathPenilai))
use Modules\Usermanagement\Models\User; <img src="{{ $imagePathPenilai }}" alt="{{ $imagePathPenilai }}" width="80px">
@endphp @endif
<tr> </td>
<td></td> @if ($permohonan->approval_so != null)
<td>{{ User::role('DD Appraisal')->first()->name ?? '' }} <td style=" padding: 4px;height: 50px">
<br>Deputy Director @if (file_exists($imagePathSo))
<img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px">
@endif
</td> </td>
<td> @endif
<br>SO Region @if ($permohonan->approval_eo != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathEO))
<img src="{{ $imagePathEO }}" alt="{{ $imagePathEO }}" width="80px">
@endif
</td> </td>
<td>{{ $penilai->userPenilaiTeam->name ?? '' }} @endif
<br>Appraisal @if ($permohonan->approval_dd != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathDD))
<img src="{{ $imagePathDD }}" alt="{{ $imagePathDD }}" width="80px">
@endif
</td> </td>
</tr> @endif
</table> </tr>
<tr>
<td style=" padding: 4px;">{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('PENILAI')) }}
</span>
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;">
{{ $senior_officer->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('SENIOR OFFICER')) }}
</span>
<div class="page-break"></div> </td>
@endif
<div class="section"> @if ($permohonan->approval_eo != null)
<div class="judul"> <td style=" padding: 4px;">
<h6 class="border" style="text-align: center"> {{ User::role('EO Appraisal')->first()->name ?? '' }}</br>
FOTO JAMINAN <span>
</h6> {{ ucwords(strtolower('EXECUTIVE OFFICER')) }}
</div> </span>
@include('lpj::penilai.components.foto-jaminan') </td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;">
{{ User::role('DD Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('DEPUTY DIRECTOR')) }}
</span>
</td>
@endif
</tr>
</table>
<div class="page-break"></div>
<div class="section">
<div class="judul">
<h6 class="border" style="text-align: center;">
PETA
</h6>
</div> </div>
</main> <div class="photo-container">
@php
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
// Memindahkan foto_tempat ke depan jika ada
if (($key = array_search('foto_tempat', $fotoTypes)) !== false) {
unset($fotoTypes[$key]);
array_unshift($fotoTypes, 'foto_tempat');
}
@endphp
<footer></footer> @if (isset($forminspeksi))
@php $counter = 0; @endphp
@foreach ($fotoTypes as $type)
@php
$imagePath = $forminspeksi[$type] ?? null;
@endphp
@if ($imagePath && file_exists(storage_path('app/public/' . $imagePath)))
@if ($counter % 2 == 0)
<div class="photo-row clearfix">
@endif
<div class="photo-item border">
<img src="{{ storage_path('app/public/' . $imagePath) }}" alt="{{ $type }}"
class="photo-image">
<p style="margin: 0; font-size: 12px;">
{{ Str::title(str_replace('_', ' ', $type)) }}
</p>
</div>
@if ($counter % 2 == 1 || $loop->last)
</div>
@endif
@php $counter++; @endphp
@endif
@endforeach
@endif
</div>
</div>
<script> <div class="page-break"></div>
const data = @json($forminspeksi);
console.log(data);
</script>
</body>
</html> <div class="section">
<div class="judul">
<h6 class="border" style="text-align: center">
FOTO JAMINAN
</h6>
</div>
@include('lpj::penilai.components.foto-jaminan')
</div>
</main>
@include('lpj::penilai.components.footer')

File diff suppressed because it is too large Load Diff

View File

@@ -1,314 +1,254 @@
<!DOCTYPE html> @include('lpj::penilai.components.header')
<html lang="en"> @php
$data = '';
foreach ($permohonan->documents as $dokumen) {
$data .= $dokumen->jenisJaminan->name . ', ';
<head> $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
<meta charset="UTF-8"> $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
<meta name="viewport" content="width=device-width, initial-scale=1.0"> $teams = $permohonan->region->teams;
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Laporan Penilai Jaminan</title>
<style>
* {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
}
h2 { if ($teams) {
font-size: 14px foreach ($teams as $team) {
} $team_users = $team->teamsUsers;
// print_r($team_users);
if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
/** Define the header rules **/ if ($user && $user->hasRole('senior-officer')) {
@page { $senior_officer = $user;
margin-top: 100px; break 3;
/* Ruang untuk header */
margin-bottom: 30px;
/* Ruang untuk footer */
}
#header {
/* position: fixed; */
/* top: -100px; */
/* Posisi header di luar konten */
left: 0;
right: 0;
height: 50px;
text-align: center;
padding-bottom: 10px;
}
.header-logo {
position: absolute;
left: 20px;
top: 10px;
max-height: 80px;
max-width: 150px;
}
.header-title {
margin-top: 10px;
}
#footer {
position: fixed;
bottom: -50px;
left: 0;
right: 0;
height: 50px;
text-align: center;
border-top: 1px solid #ddd;
padding-top: 10px;
}
.page-number:after {
content: counter(page) " dari " counter(pages);
}
.content {
margin-top: 20px;
}
.page-break {
page-break-after: always;
}
footer {
position: fixed;
bottom: 0cm;
left: 0cm;
right: 0cm;
}
body {
margin-top: 3cm;
/* Tambahkan margin top sedikit lebih besar dari tinggi header */
margin-bottom: 120px;
position: relative;
z-index: 1;
/* Pastikan konten berada di bawah header */
}
.border {
border: 1px solid #000;
}
.photo-item {
text-align: center;
margin-bottom: 20px;
}
.photo-image {
max-width: 80%;
height: auto;
display: block;
margin: 0 auto;
}
</style>
</head>
<body style="width: 80%; margin: auto">
@php
$data = '';
foreach ($permohonan->debiture->documents as $dokumen) {
$data .= $dokumen->jenisJaminan->name . ', ';
$penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
$surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
$teams = $permohonan->region->teams;
if ($teams) {
foreach ($teams as $team) {
$team_users = $team->teamsUsers;
// print_r($team_users);
if ($team_users) {
foreach ($team_users as $team_user) {
$user = $team_user->user;
if ($user && $user->hasRole('senior-officer')) {
$senior_officer = $user;
break 3;
}
} }
} }
} }
} }
} }
$data = rtrim($data, ', '); }
@endphp $data = rtrim($data, ', ');
<header id="header"> @endphp
<table style="width: 100%; border: none;">
<tr>
<td style="width: 20%; text-align: left;" class="header-left">
@include('lpj::component.logo-bag')
</td>
</tr>
</table>
</header>
<main class="content"> <main class="content">
<table style="width: 100%"> <table style="width: 100%">
<tr> <tr>
<td style="text-align: center; margin-top: 5px;"> <td style="text-align: center; margin-top: 5px;">
<h2 style="text-decoration: underline; text-transform: uppercase; text-align: center; margin: 0;">Resume <h2 style="text-decoration: underline; text-transform: uppercase; text-align: center; margin: 0;">
Penilaian Resume
</h2> Penilaian
<p style="font-size: 12px; margin: 0;">NO: {{ $nomorLaporan }}</p> </h2>
</td> <p style="font-size: 12px; margin: 0;">NO: {{ $nomorLaporan }}</p>
</tr> </td>
</table> </tr>
</table>
<table> <table>
<tr> <tr>
<td style="width: 20%">Pemohon</td> <td style="width: 20%">Pemohon</td>
<td style="width: 1%">:</td> <td style="width: 1%">:</td>
<td style="width: 100%">{{ $permohonan->user->name ?? '' }} - <td style="width: 100%">{{ $permohonan->user->name ?? '' }} -
{{ $permohonan->debiture->branch->name ?? '' }}</td> {{ $permohonan->debiture->branch->name ?? '' }}</td>
</tr> </tr>
<tr> <tr>
<td>Atas Nama Cadeb</td> <td>Atas Nama Cadeb</td>
<td>:</td> <td>:</td>
<td>{{ $permohonan->debiture->name ?? '' }}</td> <td>{{ $permohonan->debiture->name ?? '' }}</td>
</tr> </tr>
<tr> <tr>
<td>Aset</td> <td idth="25%">Aset</td>
<td>:</td> <td width="1%">:</td>
<td>{{ $data ?? '' }}</td> <td>{{ $data ?? '' }}</td>
</tr> </tr>
<tr>
<td>Lokasi Objek</td>
<td>:</td> <tr>
<td>{{ $alamat['village_code'] ?? '' }}, {{ $alamat['district_code'] ?? '' }}, <td style="vertical-align: top;">Legalitas</td>
{{ $alamat['city_code'] ?? '' }}, {{ $alamat['province_code'] ?? '' }}</td> <td style="vertical-align: top;">:</td>
</tr> <td style="vertical-align: top;">
<tr> <table style="margin: 0; padding: 0;">
<td style="vertical-align: top; padding:2px;">Dokumen</td> @if (isset($dokumen))
<td style="vertical-align: top; padding:2px;">:</td> @foreach ($dokumen->detail as $detail)
<td style="vertical-align: top; padding:2px;"> <tr>
<table> @if (isset($detail->dokumen_jaminan))
@if (@isset($dokumen)) <td style="padding: 0; margin: 0;">
@foreach ($dokumen->detail as $details) @php
<tr> $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan))
<td>{{ $details->jenisLegalitasJaminan->name ?? '' }} ? json_decode($detail->dokumen_jaminan)
@if (isset($detail->dokumen_jaminan)) : [$detail->dokumen_jaminan];
@php $dokumen_nomor = is_array(json_decode($detail->dokumen_nomor))
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor)
? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor
: ($detail->dokumen_nomor ? [$detail->dokumen_nomor]
? [$detail->dokumen_nomor] : []);
: []); @endphp
@endphp
@foreach ($dokumen_jaminan as $index => $dokumen) @foreach ($dokumen_jaminan as $index => $dokumen)
<div> @if (!empty($dokumen_nomor[$index]))
@if (!empty($dokumen_nomor)) <span>{{ $dokumen_nomor[$index] }}</span>
<span> @endif
{{ $dokumen_nomor[$index] }}</span> @endforeach
@endif
</div>
<br>
@endforeach
@endif
</td> </td>
</tr> @endif
@endforeach </tr>
@endif @endforeach
</table> @endif
</td> </table>
</tr> </td>
<tr> </tr>
@php
$cekLuas = isset($forminspeksi['tanah']['luas_tanah']['tidak sesuai']) ? 'tidak sesuai' : 'sesuai';
$luas = $forminspeksi['tanah']['luas_tanah'][$cekLuas] ?? null; <tr>
@endphp @if (isset($permohonan->documents))
<td>Luas Tanah</td> @foreach ($permohonan->documents as $document)
<td>:</td> @foreach ($document->detail as $detail)
<td>{{ $luas ?? '' }}</td> @if (isset($detail->details))
</tr> @php
<tr> $details = json_decode($detail->details, true);
<td>Tanggal Survey</td> @endphp
<td>:</td> @if ($details)
<td>{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td> @foreach ($details as $key => $value)
</tr> @if (!is_null($value) && $value !== '')
<tr>
<td style="">{{ ucwords(str_replace('_', ' ', $key)) ?? '' }}</td>
<td style=" padding: 2px;">:</td>
<td style="">{{ $value }}
@if ($key == 'luas_bangunan' || $key == 'luas_tanah')
<sup>m2</sup>
@endif
</td>
</tr>
@endif
@endforeach
@endif
@endif
@endforeach
@endforeach
@endif
</tr>
<tr>
<td width="25%">Terletak di</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td> {{ $alamat['address'] ?? '' }}</td>
</tr>
<tr>
<td>Desa/Kelurahan</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['village_code'] ?? '' }}</td>
</tr>
<tr>
<td>Kecamatan</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['district_code'] ?? '' }}</td>
</tr>
<tr>
<td>Kabupaten/Kota</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td> {{ $alamat['city_code'] ?? '' }}</td>
</tr>
<tr>
<td>Provinsi</td>
<td style="width: 1%; vertical-align: top;">:</td>
<td>{{ $alamat['province_code'] ?? '' }}</td>
</tr>
<tr>
<td>Tanggal Survey</td>
<td>:</td>
<td>{{ isset($permohonan->penilaian->tanggal_kunjungan) ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '' }}
</td>
</tr>
<tr>
<td>Surveyor</td>
<td>:</td>
<td>{{ $surveyor->userPenilaiTeam->name ?? '' }}</td>
</tr>
<tr> <tr>
<td>Tanggal Resume</td> <td>Tanggal Resume</td>
<td>:</td> <td>:</td>
<td>{{ formatTanggalIndonesia($resumeData['tanggal_resume']) ?? '' }}</td> <td>{{ optional($resumeData)['tanggal_resume'] ? formatTanggalIndonesia($resumeData['tanggal_resume']) : '' }}
</tr> </td>
</tr>
</table> </table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;"> <table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Faktor Positif</h2>
</td>
</tr>
<tr>
@isset($resumeData['fakta']['fakta_positif'])
@foreach ($resumeData['fakta']['fakta_positif'] as $key => $item)
<tr> <tr>
<td style=""> <td>{!! nl2br(e($item)) !!}</td>
<h6 style="text-transform: uppercase; margin: 0; ">Faktor Positif</h2>
</td>
</tr> </tr>
<tr>
@isset($resumeData['fakta']['fakta_positif'])
@foreach ($resumeData['fakta']['fakta_positif'] as $key => $item)
<tr>
<td>{{ $key + 1 }} . {{ $item }}</td>
</tr>
@endforeach
@endisset
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Faktor negatif</h2>
</td>
</tr>
<tr>
@isset($resumeData['fakta']['fakta_negatif'])
@foreach ($resumeData['fakta']['fakta_negatif'] as $key => $item)
<tr>
<td>{{ $key + 1 }} . {{ $item }}</td>
</tr>
@endforeach
@endisset
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h3 style="text-transform: uppercase; margin: 0; ">Kesimpulan Nilai Pasar Wajar</h2>
</td>
<td>:</td>
<td></td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">1. Sesuai Fisik</h6>
</td>
</tr>
</table>
<table border="1" style="width: 100%; border-collapse: collapse; margin-bottom: 10px;">
<tr>
<td style="border: 1px solid #000; padding: 4px;">Sertifikat</td>
<td style="border: 1px solid #000; padding: 4px;">Luas Tanah ()</td>
<td style="border: 1px solid #000; padding: 4px;">Luas Bangunan ()</td>
<td style="border: 1px solid #000; padding: 4px;">Nilai Pasar Wajar (Rp)</td>
</tr>
@foreach ($resumeData['fisik'] as $item)
<tr>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['sertifikat'] ?? '' }}</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['luas_tanah'] ?? '' }}</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['luas_bangunan'] ?? '' }}</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['nilai'] ?? '' }}</td>
</tr>
@endforeach @endforeach
</table> @endisset
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">Faktor negatif</h2>
</td>
</tr>
<tr>
@isset($resumeData['fakta']['fakta_negatif'])
@foreach ($resumeData['fakta']['fakta_negatif'] as $key => $item)
<tr>
<td>{!! nl2br(e($item)) !!}</td>
</tr>
@endforeach
@endisset
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h3 style="text-transform: uppercase; margin: 0; ">Kesimpulan Nilai Pasar Wajar</h2>
</td>
<td>:</td>
<td></td>
</tr>
</table>
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">1. Sesuai Fisik</h6>
</td>
</tr>
</table>
<table border="1" style="width: 100%; border-collapse: collapse; margin-bottom: 10px;">
@foreach ($resumeData['fisik'] as $item)
<tr>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Sertifikat</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Luas Tanah</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Luas Bangunan</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Nilai Pasar Wajar</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Nilai Likuidasi {{ isset($item['likuidasi']) ? '('. $item['likuidasi'] . ' %)' : '-' }}</td>
</tr>
<tr>
<td style="border: 1px solid #000; padding: 4px; text-align: center">{{ $item['sertifikat'] ?? '' }}
</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['luas_tanah']) ? $item['luas_tanah'] . ' m²' : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['luas_bangunan']) ? $item['luas_bangunan'] . ' m²' : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['nilai']) ? formatRupiah($item['nilai']) : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['total_likuidasi']) ? formatRupiah($item['total_likuidasi']) : '-' }}</td>
</tr>
@endforeach
</table>
@if (!empty($resumeData['sesuai_imb']))
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;"> <table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr> <tr>
<td style=""> <td style="">
@@ -318,139 +258,217 @@
</table> </table>
<table border="1" style="width: 100%; border-collapse: collapse; margin-bottom: 10px;"> <table border="1" style="width: 100%; border-collapse: collapse; margin-bottom: 10px;">
<tr>
<td style="border: 1px solid #000; padding: 4px;">Sertifikat</td>
<td style="border: 1px solid #000; padding: 4px;">Luas Tanah ()</td>
<td style="border: 1px solid #000; padding: 4px;">Luas Bangunan ()</td>
<td style="border: 1px solid #000; padding: 4px;">Nilai Pasar Wajar (Rp)</td>
</tr>
@foreach ($resumeData['sesuai_imb'] as $item) @foreach ($resumeData['sesuai_imb'] as $item)
<tr> <tr>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['sertifikat'] ?? '' }}</td> <td style="border: 1px solid #000; padding: 4px; text-align: center">Sertifikat</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['luas_tanah'] ?? '' }}</td> <td style="border: 1px solid #000; padding: 4px; text-align: center">Luas Tanah</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['luas_bangunan'] ?? '' }}</td> <td style="border: 1px solid #000; padding: 4px; text-align: center">Luas Bangunan</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['nilai'] ?? '' }}</td> <td style="border: 1px solid #000; padding: 4px; text-align: center">Nilai Pasar Wajar</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Nilai Likuidasi {{ isset($item['likuidasi']) ? '('. $item['likuidasi'] . ' %)' : '-' }}</td>
</tr>
<tr>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ $item['sertifikat'] ?? '' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['luas_tanah']) ? $item['luas_tanah'] . ' m²' : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['luas_bangunan']) ? $item['luas_bangunan'] . ' m²' : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['nilai']) ? formatRupiah($item['nilai']) : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['total_likuidasi']) ? formatRupiah($item['total_likuidasi']) : '-' }}</td>
</tr> </tr>
@endforeach @endforeach
</table> </table>
@endif
@if (!empty($resumeData['tambahan']))
@foreach ($resumeData['tambahan'] as $index => $item)
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">
{{ $index + 3 }}. {{ $item['tambahan_nama_kesimpulan'] ?? '-' }}
</h6>
</td>
</tr>
</table>
<table border="1" style="width: 100%; border-collapse: collapse; margin-bottom: 1px;">
<tr>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Sertifikat</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Luas Tanah</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Luas Bangunan</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Nilai Pasar Wajar</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">Nilai Likuidasi {{ isset($item['likuidasi']) ? '('. $item['likuidasi'] . ' %)' : '' }}</td>
</tr>
<tr>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ $item['sertifikat'] ?? '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['luas_tanah']) ? $item['luas_tanah'] . ' m²' : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['luas_bangunan']) ? $item['luas_bangunan'] . ' m²' : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['nilai']) ? formatRupiah($item['nilai']) : '-' }}</td>
<td style="border: 1px solid #000; padding: 4px; text-align: center">
{{ isset($item['total_likuidasi']) ? formatRupiah($item['total_likuidasi']) : '-' }}</td>
</tr>
</table>
@endforeach
@endif
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">lain lain</h2>
</td>
</tr>
<tr>
<td>{!! nl2br(e($resumeData['keterangan'] ?? '')) !!}</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td>
<table>
<div style="margin-top: 20px;">
<label style="font-weight: bold;">DISCLAIMER</label>
<div>
<ol style="padding-left: 20px; list-style-type: decimal; margin-top: 0;">
<li style="margin-bottom: 5px; ">LAPORAN RESUME INI DIKELUARKAN DIKARENAKAN BELUM
DILAKUKANNYA PEMBAYARAN BIAYA PENILAIAN JAMINAN</li>
<li style="margin-bottom: 5px;">LAPORAN RESUME INI TIDAK BISA DIJADIKAN SEBAGAI
DASAR PENGAJUAN DAN ATAU PENCAIRAN KREDIT, LAPORAN YANG DIGUNAKAN TETAP WAJIB
BERUPA LAPORAN PENILAIAN JAMINAN (LPJ)</li>
<li style="margin-bottom: 5px;">DETAIL PER METER TANAH DAN BANGUNAN, SARANA
PELENGKAP DLL AKAN TERCATAT DI LAPORAN PENILAIAN JAMINAN (LPJ) NANTI</li>
<li style="margin-bottom: 5px;">LAPORAN RESUME INI HANYA DIGUNAKAN UNTUK KEPENTINGAN
INTERNAL BAGI</li>
<li style="margin-bottom: 5px;">LAPORAN RESUME INI HANYA BERLAKU <span
style="color:red;">14 HARI KALENDER </span>
TERHITUNG DARI TANGGAL RESUME INI DIBUAT SESUAI ATURAN YANG BERLAKU, APABILA
LEWAT MAKA HARUS DILAKUKAN ORDER ULANG SESUAI PROSEDUR YANG BERLAKU</li>
<li style="margin-bottom: 5px; text-transform: uppercase;">Apabila sudah melewati 6
bulan, maka harus penilaian
ulang kembali</li>
</ol>
</div>
</div>
@if (!empty($resumeData['tambahan']))
@foreach ($resumeData['tambahan'] as $index => $item)
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">
{{ $index + 3 }}. {{ $item['tambahan_nama_kesimpulan'] ?? '-' }}
</h6>
</td>
</tr>
</table> </table>
</td>
<table border="1" style="width: 100%; border-collapse: collapse; margin-bottom: 1px;"> </tr>
<tr> <tr>
<td style="border: 1px solid #000; padding: 4px;">Sertifikat</td> <td>Demikian Kami Sampaikan, atas perhatiannya kami ucapkan terimakasih</td>
<td style="border: 1px solid #000; padding: 4px;">Luas Tanah ()</td> </tr>
<td style="border: 1px solid #000; padding: 4px;">Luas Bangunan ()</td> <table style="width: 100%;">
<td style="border: 1px solid #000; padding: 4px;">Nilai Pasar Wajar (Rp)</td>
</tr>
<tr>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['sertifikat'] ?? '-' }}</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['luas_tanah'] ?? '-' }}</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['luas_bangunan'] ?? '-' }}</td>
<td style="border: 1px solid #000; padding: 4px;">{{ $item['nilai'] ?? '-' }}</td>
</tr>
</table>
@endforeach
@endif
<table style="margin: 5px 0; border-collapse: collapse; width: 100%;">
<tr>
<td style="">
<h6 style="text-transform: uppercase; margin: 0; ">lain lain</h2>
</td>
</tr>
<tr>
<td>{{ $resumeData['keterangan'] ?? '' }}</td>
</tr>
</table>
<table style="width: 100%">
<tr> <tr>
<td> <td>
<table> <table style="width: 100%; border-collapse: collapse; text-align: center;">
<div style="margin-top: 20px;"> @php
<label style="font-weight: bold;">DISCLAIMER</label> use Modules\Usermanagement\Models\User;
<div> $penilaiUser = User::where('id', $penilai->userPenilaiTeam->id)->first();
<ol style="padding-left: 20px; list-style-type: decimal; margin-top: 0;"> $imagePathPenilai = storage_path(
<li style="margin-bottom: 5px;">LAPORAN RESUME INI DIKELUARKAN DIKARENAKAN BELUM 'app/public/signatures/' . $penilaiUser->id . '/' . $penilaiUser->sign,
DILAKUKANNYA PEMBAYARAN BIAYA PENILAIAN JAMINAN</li> );
<li style="margin-bottom: 5px;">LAPORAN RESUME INI TIDAK BISA DIJADIKAN SEBAGAI
DASAR PENGAJUAN DAN ATAU PENCAIRAN KREDIT, LAPORAN YANG DIGUNAKAN TETAP WAJIB
BERUPA LAPORAN PENILAIAN JAMINAN (LPJ)</li>
<li style="margin-bottom: 5px;">DETAIL PER METER TANAH DAN BANGUNAN, SARANA
PELENGKAP DLL AKAN TERCATAT DI LAPORAN PENILAIAN JAMINAN (LPJ) NANTI</li>
<li style="margin-bottom: 5px;">LAPORAN RESUME INI HANYA DIGUNAKAN UNTUK KEPENTINGAN
INTERNAL BAGI</li>
<li style="margin-bottom: 5px;">LAPORAN RESUME INI HANYA BERLAKU <span style="color:red;">14 HARI KALENDER </span>
TERHITUNG DARI TANGGAL RESUME INI DIBUAT SESUAI ATURAN YANG BERLAKU, APABILA
LEWAT MAKA HARUS DILAKUKAN ORDER ULANG SESUAI PROSEDUR YANG BERLAKU</li>
<li style="margin-bottom: 5px;">Apabila sudah melewati 6 bulan, maka harus penilaian
ulang kembali</li>
</ol>
</div>
</div>
$soUser = User::where('id', $senior_officer->id)->first();
$imagePathSo = storage_path('app/public/signatures/' . $soUser->id . '/' . $soUser->sign);
$imagePathEO = storage_path(
'app/public/signatures/' .
User::role('EO Appraisal')->first()->id .
'/' .
User::role('EO Appraisal')->first()->sign,
);
$imagePathDD = storage_path(
'app/public/signatures/' .
User::role('DD Appraisal')->first()->id .
'/' .
User::role('DD Appraisal')->first()->sign,
);
@endphp
<tr>
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathPenilai))
<img src="{{ $imagePathPenilai }}" alt="{{ $imagePathPenilai }}" width="80px">
@endif
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathSo))
<img src="{{ $imagePathSo }}" alt="{{ $imagePathSo }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathEO))
<img src="{{ $imagePathEO }}" alt="{{ $imagePathEO }}" width="80px">
@endif
</td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;height: 50px">
@if (file_exists($imagePathDD))
<img src="{{ $imagePathDD }}" alt="{{ $imagePathDD }}" width="80px">
@endif
</td>
@endif
</tr>
<tr>
<td style=" padding: 4px;">{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('PENILAI')) }}
</span>
</td>
@if ($permohonan->approval_so != null)
<td style=" padding: 4px;">
{{ $senior_officer->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('SENIOR OFFICER')) }}
</span>
</td>
@endif
@if ($permohonan->approval_eo != null)
<td style=" padding: 4px;">
{{ User::role('EO Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('EXECUTIVE OFFICER')) }}
</span>
</td>
@endif
@if ($permohonan->approval_dd != null)
<td style=" padding: 4px;">
{{ User::role('DD Appraisal')->first()->name ?? '' }}</br>
<span>
{{ ucwords(strtolower('DEPUTY DIRECTOR')) }}
</span>
</td>
@endif
</tr>
</table> </table>
</td> </td>
</tr> </tr>
<tr>
<td>Demikian Kami Sampaikan, atas perhatiannya kami ucapkan terimakasih</td>
</tr>
<tr>
<table style="width: 100%; text-align: center;">
<tr>
<td style="height: 50px"></td>
<td style="height: 50px"></td>
</tr>
<tr>
<td>{{ $penilai->userPenilaiTeam->name ?? '' }}</br>
PENILAI
</td>
<td> {{ $senior_officer->name ?? '' }}</br>
SENIOR OFFICER
</td>
@php
use Modules\Usermanagement\Models\User;
@endphp
<td> {{ User::role('EO Appraisal')->first()->name ?? '' }}</br>
EXECUTIVE OFFICER
</td>
<td> {{ $surveyor->userPenilaiTeam->name ?? '' }}</br>
SURVEYOR
</td>
</tr>
</table>
</tr>
</table> </table>
</table>
<div class="page-break"></div> <div class="page-break"></div>
<div class="section"> <div class="section">
<div class="judul"> <div class="judul">
<h6 class="border" style="text-align: center"> <h6 class="border" style="text-align: center">
FOTO JAMINAN FOTO JAMINAN
</h6> </h6>
</div>
@include('lpj::penilai.components.foto-jaminan')
</div> </div>
</main> @include('lpj::penilai.components.foto-jaminan')
</div>
</main>
<footer id="footer"> @include('lpj::penilai.components.footer')
Cabang : {{ $permohonan->debiture->branch->name ?? '' }}
</footer>
</body>
</html>

View File

@@ -8,6 +8,7 @@
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<form id="formInspeksi" method="POST" enctype="multipart/form-data" class="grid gap-5"> <form id="formInspeksi" method="POST" enctype="multipart/form-data" class="grid gap-5">
@csrf @csrf
<input type="hidden" name="nomor_registrasi" value="{{ $permohonan->nomor_registrasi }}">
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}"> <input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="dokument_id" value="{{ request('documentId') }}"> <input type="hidden" name="dokument_id" value="{{ request('documentId') }}">
<input type="hidden" name="action" value="rap"> <input type="hidden" name="action" value="rap">
@@ -41,7 +42,7 @@
<label class="form-label max-w-56">Nomor RAP</label> <label class="form-label max-w-56">Nomor RAP</label>
<div class="flex flex-wrap items-base line w-full"> <div class="flex flex-wrap items-base line w-full">
<input type="text" name="nomor_rap" class="input w-full" placeholder="Masukkan..." <input type="text" name="nomor_rap" class="input w-full" placeholder="Masukkan..."
value="{{ $noLpRAP ?? '' }}" @readonly(true)> value="{{ $nomorLaporan ?? '' }}" @readonly(true)>
</div> </div>
</div> </div>
{{-- 250109828129/ --}} {{-- 250109828129/ --}}
@@ -64,21 +65,26 @@
</div> </div>
</div> </div>
<div class="flex justify-end gap-2" style="margin-right: 20px; margin-top: 20px"> <div class="flex justify-end gap-2" style="margin-right: 20px; margin-top: 20px">
<button type="button" class="btn btn-success" id="saveButton" onclick="submitData()"> <button type="button" class="btn btn-primary" id="saveButton" onclick="submitData()">
<i class="ki-filled ki-save-2"></i>
<span id="saveButtonText">Save</span> <span id="saveButtonText">Save</span>
<div class="spinner-border spinner-border-sm text-light" role="status" style="display: none;" <div class="spinner-border spinner-border-sm text-light" role="status" style="display: none;"
id="saveButtonSpinner"> id="saveButtonSpinner">
</div> </div>
</button> </button>
@if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal'])) @if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal', 'administrator']))
<a class="btn btn-info" <a class="btn btn-info"
href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1"> href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
LAMPIRAN FOTO DAN DOKUMEN LAMPIRAN FOTO DAN DOKUMEN
</a> </a>
<a class="btn btn-primary" <a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => request('documentId'), 'jenis_jaminan_id' => request('jaminanId')]) }}" class="btn btn-light"
>
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
</a>
<a class="btn btn-success"
onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )"> onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )">
<i class="ki-filled ki-printer"></i> Print <i class="ki-filled ki-printer"></i> Print Laporan
</a> </a>
@endif @endif
</div> </div>
@@ -87,7 +93,7 @@
@endsection @endsection
@push('scripts') @push('scripts')
<script type="text/javascript"> <script type="text/javascript">
const rap = @json($rap); const rap = @json($forminspeksi);
console.log('rap', rap) console.log('rap', rap)
function updateAlamatFields(status) { function updateAlamatFields(status) {

View File

@@ -29,10 +29,23 @@
<h3 class="card-title uppercase"> <h3 class="card-title uppercase">
Data Jaminan Data Jaminan
</h3> </h3>
@php
use Illuminate\Support\Facades\Route;
@endphp
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ url()->previous() }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back @if (Auth::user()->hasAnyRole(['administrator', 'senior-officer', 'EO Appraisal', 'DD Appraisal']) &&
</a> Route::currentRouteName('otorisator.show'))
<a href="{{ route('otorisator.show', ['id' => $permohonan->id, 'type' => 'Pelaporan']) }}"
class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@elseif (Auth::user()->hasAnyRole(['administrator', 'surveyor']) && Route::currentRouteName('penilai.show'))
<a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@endif
</div> </div>
</div> </div>
<div class="card-body grid gap-5 grid-cols-2"> <div class="card-body grid gap-5 grid-cols-2">
@@ -47,7 +60,7 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat Object</label> <label class="form-label max-w-56">Alamat Object</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
<span class="text-2sm text-gray-700"> <span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen->pemilik) }} {{ formatAlamat($dokumen->pemilik) }}
</span> </span>
@@ -181,7 +194,8 @@
<th class="text-center">Luas Tanah</th> <th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th> <th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th> <th class="text-center">Nilai Pasar Wajar</th>
<th class="text-center">Nilai Likuidasi(%)</th>
<th class="text-center">Total Nilai Likuidasi</th>
</tr> </tr>
</thead> </thead>
</thead> </thead>
@@ -202,7 +216,18 @@
class="input number-format"></td> class="input number-format"></td>
<td class="text-center"> <td class="text-center">
<input type="text" name="fisik_nilai[]" <input type="text" name="fisik_nilai[]"
class="input number-format" value="{{ $item['nilai'] }}"> class="input currency-format nilai-pasar"
value="{{ $item['nilai'] }}" onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="likuidasi[]" class="input likuidasi"
value="{{ $item['likuidasi'] ?? 0 }}"
onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="total_nilai_likuidasi[]"
class="input currency-format total-likuidasi"
value="{{ $item['total_likuidasi'] ?? 0 }}" readonly>
</td> </td>
</tr> </tr>
@endforeach @endforeach
@@ -212,14 +237,55 @@
<input type="text" name="fisik_sertifikat[]" <input type="text" name="fisik_sertifikat[]"
class="input number-format"> class="input number-format">
</td> </td>
@if (isset($permohonan->documents))
@foreach ($permohonan->documents as $item)
@php
$luas_tanah = '';
$luas_bangunan = '';
if ($item->detail) {
foreach ($item->detail as $luas) {
if (
isset($luas->name) &&
$luas->name === 'Sertifikat'
) {
$details = json_decode($luas->details, true);
$luas_tanah = isset($details['luas_tanah'])
? $details['luas_tanah']
: '';
break;
}
if (isset($luas->name) && $luas->name === 'IMB') {
$details = json_decode($luas->details, true);
$luas_bangunan = isset($details['luas_bangunan'])
? $details['luas_bangunan']
: '';
break;
}
}
}
@endphp
@endforeach
@endif
<td class="text-center"> <td class="text-center">
<input type="text" name="fisik_luas_tanah[]" <input type="text" name="fisik_luas_tanah[]"
class="input number-format"> class="input number-format" value="{{ $luas_tanah }}">
</td> </td>
<td class="text-center"> <input type="text" name="fisik_luas_bangunan[]" <td class="text-center"> <input type="text" name="fisik_luas_bangunan[]"
class="input number-format"></td> class="input number-format" value="{{ $luas_bangunan }}"></td>
<td class="text-center"> <td class="text-center">
<input type="text" name="fisik_nilai[]" class="input number-format"> <input type="text" name="fisik_nilai[]"
class="input currency-format nilai-pasar"
onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="likuidasi[]" class="input likuidasi"
onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="total_nilai_likuidasi[]"
class="input currency-format total-likuidasi" readonly>
</td> </td>
</tr> </tr>
@endif @endif
@@ -240,7 +306,8 @@
<th class="text-center">Luas Tanah</th> <th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th> <th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th> <th class="text-center">Nilai Pasar Wajar</th>
<th class="text-center">Nilai Likuidasi (%)</th>
<th class="text-center">Total Nilai Likuidasi</th>
</tr> </tr>
</thead> </thead>
</thead> </thead>
@@ -262,7 +329,18 @@
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="sesuai_nilai[]" <input type="text" name="sesuai_nilai[]"
class="input number-format" value="{{ $item['nilai'] }}"> class="input currency-format nilai-pasar"
value="{{ $item['nilai'] }}" onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="sesuai_likuidasi[]"
class="input likuidasi" value="{{ $item['likuidasi'] ?? '' }}"
onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="sesuai_total_likuidasi[]"
class="input currency-format total-likuidasi"
value="{{ $item['total_likuidasi'] ?? 0 }}">
</td> </td>
</tr> </tr>
@endforeach @endforeach
@@ -281,7 +359,17 @@
class="input number-format"> class="input number-format">
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="sesuai_nilai[]" class="input number-format"> <input type="text" name="sesuai_nilai[]" class="input currency-format"
onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="sesuai_likuidasi[]" class="input likuidasi"
value="{{ $item['likuidasi'] ?? 0 }}" onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="sesuai_total_likuidasi[]"
class="input currency-format total-likudasi"
value="{{ $item['total_likuidasi'] ?? 0 }}">
</td> </td>
</tr> </tr>
@endif @endif
@@ -291,7 +379,7 @@
</div> </div>
@if (!empty($resumeData['tambahan'])) @if (!empty($resumeData['tambahan']))
@foreach ($resumeData['tambahan'] as $item) @foreach ($resumeData['tambahan'] as $counter => $item)
<div id="kesimpulan" class="gird gap-5"> <div id="kesimpulan" class="gird gap-5">
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@@ -299,7 +387,8 @@
<table <table
class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5"> class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5">
<input class="input" name="tambahan_nama_kesimpulan[]" <input class="input" name="tambahan_nama_kesimpulan[]"
placeholder="Masukkan Nama Kesimpulan" type="text" value="{{ $item['tambahan_nama_kesimpulan'] ?? ''}}"> placeholder="Masukkan Nama Kesimpulan" type="text"
value="{{ $item['tambahan_nama_kesimpulan'] ?? '' }}">
<thead> <thead>
@@ -309,43 +398,50 @@
<th class="text-center">Luas Tanah</th> <th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th> <th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th> <th class="text-center">Nilai Pasar Wajar</th>
<th class="text-center">Nilai Likuidasi (%)</th>
<th class="text-center">Total Nilai Likuidasi</th>
</tr> </tr>
</thead> </thead>
</thead> </thead>
<tbody> <tbody>
@if (!empty($resumeData['tambahan']))
{{-- @foreach ($resumeData['tambahan'] as $item) --}} <tr>
<td class="text-center">
<tr> <input type="text" name="tambahan_sertifikat[]"
<td class="text-center"> class="input number-format" value="{{ $item['sertifikat'] }}">
<input type="text" name="tambahan_sertifikat[]" </td>
class="input number-format" <td class="text-center">
value="{{ $item['sertifikat'] }}"> <input type="text" name="tambahan_luas_tanah[]"
</td> class="input number-format" value="{{ $item['luas_tanah'] }}">
<td class="text-center"> </td>
<input type="text" name="tambahan_luas_tanah[]" <td class="text-center">
class="input number-format" <input type="text" name="tambahan_luas_bangunan[]"
value="{{ $item['luas_tanah'] }}"> class="input number-format" value="{{ $item['luas_bangunan'] }}">
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="tambahan_luas_bangunan[]" <input type="text" name="tambahan_nilai[]"
class="input number-format" class="input currency-format nilai-pasar"
value="{{ $item['luas_bangunan'] }}"> value="{{ $item['nilai'] }}" onkeyup="calculateTotal(this)">
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="tambahan_nilai[]" <input type="text" name="tambahan_nilai_likuidasi[]"
class="input number-format" value="{{ $item['nilai'] }}"> class="input likuidasi " value="{{ $item['likuidasi'] ?? 0 }}"
</td> onkeyup="calculateTotal(this)">
</tr> </td>
@endif <td class="text-center">
<input type="text" name="tambahan_total_likuidasi[]"
class="input currency-format total-likuidasi"
value="{{ $item['total_likuidasi'] ?? 0 }}">
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
@endforeach @endforeach
@endif @endif
<div id="kesimpulans" class="grid gap-5 w-full"></div>
<div> <div>
<button type="button" class="btn btn-primary btn-sm mt-5" onclick="tambahKesimpulanNilai()"> <button type="button" class="btn btn-primary btn-sm mt-5" onclick="tambahKesimpulanNilai()">
<i class="ki-outline ki-plus"></i> <i class="ki-outline ki-plus"></i>
@@ -353,7 +449,7 @@
</button> </button>
</div> </div>
<div id="kesimpulan" class="grid gap-5 w-full"></div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
@@ -393,13 +489,19 @@
</div> </div>
<div class="flex card-footer justify-end gap-5"> <div class="flex card-footer justify-end gap-5">
<button type="button" class="btn btn-success" onclick="saveResume()">Save</button> <button type="button" class="btn btn-primary" onclick="saveResume()">
@if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal'])) <i class="ki-filled ki-save-2"></i>
Save</button>
@if (Auth::user()->hasAnyRole(['senior-officer', 'EO Appraisal', 'DD Appraisal', 'administrator']))
<a class="btn btn-info" <a class="btn btn-info"
href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1"> href="{{ route('penilai.lampiran') }}?permohonanId={{ request('permohonanId') }}&documentId={{ request('documentId') }}&inspeksiId={{ request('inspeksiId') }}&jaminanId={{ request('jaminanId') }}&statusLpj=1">
LAMPIRAN FOTO DAN DOKUMEN LAMPIRAN FOTO DAN DOKUMEN
</a> </a>
<a class="btn btn-primary" <a href="{{ route('surveyor.print_out_inspeksi', ['permohonan_id' => $permohonan->id, 'dokument_id' => request('documentId'), 'jenis_jaminan_id' => request('jaminanId')]) }}"
class="btn btn-light">
<i class="ki-filled ki-printer"></i> Hasil Inspeksi
</a>
<a class="btn btn-success"
onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )"> onclick="checkLaporan('{{ $permohonan->id }}', '{{ request('documentId') }}', '{{ request('inspeksiId') }}', {{ request('jaminanId') }}, )">
<i class="ki-filled ki-printer"></i> Print <i class="ki-filled ki-printer"></i> Print
</a> </a>
@@ -412,13 +514,15 @@
@endsection @endsection
@include('lpj::surveyor.js.utils') @include('lpj::surveyor.js.utils')
<script type="text/javascript"> <script type="text/javascript">
let data = @json($resumeData ?? 0);
console.log(data);
let counter = 3; let counter = 3;
function tambahKesimpulanNilai() { function tambahKesimpulanNilai() {
const kesimpulan = document.getElementById('kesimpulan'); const kesimpulan = document.getElementById('kesimpulans');
kesimpulan.innerHTML += ` kesimpulan.innerHTML += `
<div class="grid gap-5 w-full" id="kesimpulan-${counter}"> <div class="grid gap-5 w-full mt-5" id="kesimpulan-${counter}">
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@@ -426,7 +530,9 @@
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5"> <table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5">
<input type="text" name="tambahan_nama_kesimpulan[]" <input type="text" name="tambahan_nama_kesimpulan[]"
class="input number-format"> class="input number-format"
placeholder="Masukkan Nama Kesimpulan.."
>
<thead> <thead>
@@ -435,6 +541,8 @@
<th class="text-center">Luas Tanah</th> <th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th> <th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th> <th class="text-center">Nilai Pasar Wajar</th>
<th class="text-center">Nilai Likuidasi (%)</th>
<th class="text-center">Total Nilai Likuidasi</th>
<th class="text-center">Aksi</th> <th class="text-center">Aksi</th>
</tr> </tr>
</thead> </thead>
@@ -454,8 +562,17 @@
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="tambahan_nilai[]" <input type="text" name="tambahan_nilai[]"
class="input number-format"> class="input currency-format nilai-pasar">
</td> </td>
<td class="text-center">
<input type="text" name="tambahan_nilai_likuidasi[]"
class="input likuidasi"
onkeyup="calculateTotal(this)">
</td>
<td class="text-center">
<input type="text" name="tambahan_total_likuidasi[]"
class="input currency-format total-likuidasi" >
</td>
<td class="text-center"> <td class="text-center">
<button type="button" class="btn btn-danger" onclick="deleteRow(this)">Delete</button> <button type="button" class="btn btn-danger" onclick="deleteRow(this)">Delete</button>
</td> </td>
@@ -466,6 +583,18 @@
</div> </div>
</div> </div>
`; `;
const newCurrencyInputs = kesimpulan.querySelectorAll(`#kesimpulan-${counter} .currency-format`);
newCurrencyInputs.forEach(input => {
input.addEventListener('input', function() {
handleCurrencyInput(this);
});
// Format initial value jika ada
if (input.value) {
input.value = formatCurrency(input.value);
}
});
counter++; counter++;
} }
@@ -488,7 +617,7 @@
const formElement = document.querySelector('form'); const formElement = document.querySelector('form');
const jsonData = formToJson(formElement); const jsonData = formToJson(formElement);
console.log('Data dalam format JSON:', JSON.stringify(jsonData, null, 2)); console.log('Data dalam format JSON:', JSON.stringify(formElement, null, 2));
const urlParams = new URLSearchParams(window.location.search); // Mengambil query parameters dari URL const urlParams = new URLSearchParams(window.location.search); // Mengambil query parameters dari URL
const permohonanId = urlParams.get('permohonanId'); const permohonanId = urlParams.get('permohonanId');
@@ -568,7 +697,7 @@
keterangan: "" keterangan: ""
}; };
// Ambil fakta positif // Ambil fakta positif
document.querySelectorAll('textarea[name="fakta_positif[]"]').forEach(textarea => { document.querySelectorAll('textarea[name="fakta_positif[]"]').forEach(textarea => {
jsonData.fakta.fakta_positif.push(textarea.value); jsonData.fakta.fakta_positif.push(textarea.value);
@@ -585,7 +714,10 @@
sertifikat: row.querySelector('input[name="fisik_sertifikat[]"]')?.value || "", sertifikat: row.querySelector('input[name="fisik_sertifikat[]"]')?.value || "",
luas_tanah: row.querySelector('input[name="fisik_luas_tanah[]"]')?.value || "", luas_tanah: row.querySelector('input[name="fisik_luas_tanah[]"]')?.value || "",
luas_bangunan: row.querySelector('input[name="fisik_luas_bangunan[]"]')?.value || "", luas_bangunan: row.querySelector('input[name="fisik_luas_bangunan[]"]')?.value || "",
nilai: row.querySelector('input[name="fisik_nilai[]"]')?.value || "" nilai: cleanCurrencyValue(row.querySelector('input[name="fisik_nilai[]"]')?.value || ""),
likuidasi: row.querySelector('input[name="likuidasi[]"]')?.value || "",
total_likuidasi: cleanCurrencyValue(row.querySelector(
'input[name="total_nilai_likuidasi[]"]')?.value || "")
}; };
if (fisikData.sertifikat) { if (fisikData.sertifikat) {
jsonData.fisik.push(fisikData); jsonData.fisik.push(fisikData);
@@ -598,7 +730,10 @@
sertifikat: row.querySelector('input[name="sesuai_sertifikat[]"]')?.value || "", sertifikat: row.querySelector('input[name="sesuai_sertifikat[]"]')?.value || "",
luas_tanah: row.querySelector('input[name="sesuai_luas_tanah[]"]')?.value || "", luas_tanah: row.querySelector('input[name="sesuai_luas_tanah[]"]')?.value || "",
luas_bangunan: row.querySelector('input[name="sesuai_luas_bangunan[]"]')?.value || "", luas_bangunan: row.querySelector('input[name="sesuai_luas_bangunan[]"]')?.value || "",
nilai: row.querySelector('input[name="sesuai_nilai[]"]')?.value || "" nilai: cleanCurrencyValue(row.querySelector('input[name="sesuai_nilai[]"]')?.value || ""),
likuidasi: row.querySelector('input[name="sesuai_likuidasi[]"]')?.value || "",
total_likuidasi: cleanCurrencyValue(row.querySelector(
'input[name="sesuai_total_likuidasi[]"]')?.value || "")
}; };
if (imbData.sertifikat) { if (imbData.sertifikat) {
jsonData.sesuai_imb.push(imbData); jsonData.sesuai_imb.push(imbData);
@@ -612,7 +747,10 @@
sertifikat: row.querySelector('input[name="tambahan_sertifikat[]"]')?.value || "", sertifikat: row.querySelector('input[name="tambahan_sertifikat[]"]')?.value || "",
luas_tanah: row.querySelector('input[name="tambahan_luas_tanah[]"]')?.value || "", luas_tanah: row.querySelector('input[name="tambahan_luas_tanah[]"]')?.value || "",
luas_bangunan: row.querySelector('input[name="tambahan_luas_bangunan[]"]')?.value || "", luas_bangunan: row.querySelector('input[name="tambahan_luas_bangunan[]"]')?.value || "",
nilai: row.querySelector('input[name="tambahan_nilai[]"]')?.value || "" nilai: cleanCurrencyValue(row.querySelector('input[name="tambahan_nilai[]"]')?.value || ""),
likuidasi: row.querySelector('input[name="tambahan_nilai_likuidasi[]"]')?.value || "",
total_likuidasi: cleanCurrencyValue(row.querySelector(
'input[name="tambahan_total_likuidasi[]"]')?.value || "")
}; };
console.log(imbData); console.log(imbData);
if (imbData.sertifikat) { if (imbData.sertifikat) {
@@ -630,5 +768,53 @@
return jsonData; return jsonData;
} }
// Cara Penggunaan document.addEventListener('DOMContentLoaded', function() {
// Initialize currency format for existing inputs
document.querySelectorAll('.currency-format').forEach(input => {
input.addEventListener('input', function() {
handleCurrencyInput(this);
});
// Format initial values if they exist
if (input.value) {
input.value = formatCurrency(input.value);
}
});
});
function calculateTotal(element) {
const row = element.closest('tr');
const nilaiPasarInput = row.querySelector('.nilai-pasar');
let likuidasiInput = row.querySelector('.likuidasi');
const totalLikuidasiInput = row.querySelector('.total-likuidasi');
const cleanNilaiPasar = cleanCurrencyValue(nilaiPasarInput.value);
let cleanLikuidasi = cleanCurrencyValue(likuidasiInput.value);
// Batasi likuidasi maksimal hingga 100
cleanLikuidasi = Math.min(parseFloat(cleanLikuidasi) || 0, 100);
// Format nilai likuidasi dengan simbol %
likuidasiInput.value = cleanLikuidasi;
// Konversi ke angka untuk perhitungan
const nilaiPasar = parseFloat(cleanNilaiPasar) || 0;
const likuidasi = cleanLikuidasi / 100; // Konversi persentase ke desimal
// Hitung total likuidasi
const totalLikuidasi = nilaiPasar * likuidasi;
// Tampilkan hasil dengan format yang benar
totalLikuidasiInput.value = formatCurrency(totalLikuidasi.toString());
}
</script> </script>

View File

@@ -0,0 +1,72 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('penilai.edit') }}
@endsection
@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">
Upload File Paparan
</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">
<form action="{{ route('penilai.storePaparan',['id'=> $permohonan->id]) }}" 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">
File Paparan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="file_paparan" id="file_paparan" class="file-input w-full @error('file_paparan') border-danger bg-danger-light @enderror" accept=".pdf,.jpg,.jpeg,.png">
@error('file_paparan')
<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')
@endpush

View File

@@ -68,6 +68,10 @@
<span class="sort"> <span class="sort-label"> Due Date SLA </span> <span class="sort"> <span class="sort-label"> Due Date SLA </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status</span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th> <th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr> </tr>
</thead> </thead>
@@ -178,10 +182,16 @@
return `${formatDate(new Date(data.created_at))}`; return `${formatDate(new Date(data.created_at))}`;
}, },
}, },
status: {
title: 'Status',
render: (item, data) => {
return `<span class="badge badge-sm badge-default uppercase flex justify-center">${data.status.replace(/-/g, ' ')}</span>`;
},
},
actions: { actions: {
title: 'Action', title: 'Action',
render: (item, data) => { render: (item, data) => {
if (data.status === 'done' || data.status === 'proses-laporan') { if (data.status === 'survey-completed' || data.status === 'proses-laporan' || data.status === 'paparan' || data.status === 'proses-paparan' || data.status === 'paparan') {
return ` return `
<div class="flex flex-nowrap justify-center gap-1.5"> <div class="flex flex-nowrap justify-center gap-1.5">
<a class="btn btn-sm btn-outline btn-info" href="penilai/${data.id}/show"> <a class="btn btn-sm btn-outline btn-info" href="penilai/${data.id}/show">

View File

@@ -7,19 +7,17 @@
@section('content') @section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@if (Auth::user()->hasAnyRole(['senior-officer'])) @if (Auth::user()->hasAnyRole(['senior-officer']))
@include('lpj::component.detail-jaminan', [ @include('lpj::component.detail-jaminan', [
'backLink' => 'otorisator.view-laporan', 'backLink' => 'otorisator.view-laporan',
'queryParams' => [ 'queryParams' => [
'permohonanId' => request()->query('permohonanId'), 'permohonanId' => request()->query('permohonanId'),
'documentId' => request()->query('documentId'), 'documentId' => request()->query('documentId'),
'inspeksiId' => request()->query('inspeksiId'), 'inspeksiId' => request()->query('inspeksiId'),
'jaminanId' => request()->query('jaminanId'), 'jaminanId' => request()->query('jaminanId'),
'statusLpj' => 1, 'statusLpj' => 1,
], ],
'title' => 'Paparan dokument', 'title' => 'Paparan dokument',
]) ])
@else @else
@include('lpj::component.detail-jaminan', [ @include('lpj::component.detail-jaminan', [
'backLink' => 'penilai.show', 'backLink' => 'penilai.show',
@@ -29,5 +27,86 @@
@endif @endif
@include('lpj::penilai.components.foto-lampiran') @include('lpj::penilai.components.foto-lampiran')
@if (isset($formDenah['denahs']) && is_array($formDenah['denahs']) && count($formDenah['denahs']) > 0)
<div class="card ">
<div class="card-header bg-agi-50 uppercase">
Denah
</div>
@foreach ($formDenah['denahs'] as $index => $denah)
<div class="card-body ">
<div class="w-full grid gap-5 ">
<!-- Preview Container -->
<div class="preview-container-{{ $index }}">
@if (isset($denah['foto_denah']))
@php
$fileExtension = pathinfo($denah['foto_denah'], PATHINFO_EXTENSION);
@endphp
@if (in_array($fileExtension, ['jpg', 'jpeg', 'png']))
<img src="{{ asset('storage/' . $denah['foto_denah']) }}" style="max-width: 30rem;">
@elseif($fileExtension === 'pdf')
<embed src="{{ asset('storage/' . $denah['foto_denah']) }}" type="application/pdf"
width="100%" height="500px">
@endif
@endif
</div>
<div class="flex flex-wrap lg:flex-nowrap w-full gap-4 text-start">
<div class="w-full">
<div class="flex flex-wrap gap-4">
<div class="flex w-full items-center justify-start gap-4">
<label class="form-label max-w-56">
<span class="form-label">Nama Denah</span>
</label>
<p class="text-md text-gray-700">
{{ isset($denah['nama_denah']) ? $denah['nama_denah'] : '' }}</p>
</div>
</div>
<div class="flex flex-wrap gap-4">
<div class="flex w-full items-center justify-start gap-4">
<label class="form-label max-w-56">
<span class="form-label">Total Luas</span>
</label>
<p class="text-md text-gray-700">
{{ isset($denah['luas_denah']) ? $denah['luas_denah'] . ' m²' : '' }}</p>
</div>
</div>
</div>
</div>
</div>
<div class="border-b border-b-gray-200 mt-5"></div>
</div>
@endforeach
</div>
@endif
<div class="card">
<div class="card-header bg-agi-50 uppercase">
Kertas Kerja
</div>
<div class="card-body flex items-center justify-between">
@php
$url = '';
$fileName = '';
if ($penilai && $penilai->kertas_kerja) {
$url = asset('storage/' . $penilai->kertas_kerja);
$fileName = basename($penilai->kertas_kerja);
}
@endphp
@if ($penilai && $penilai->kertas_kerja)
<button type="button" class="btn btn-primary" onclick="window.open('{{ $url }}', '_blank')">
<i class="ki-outline ki-cloud-download"></i>
Lihat Kertas Kerja</button>
<p class="text-2sm text-gray-700">{{ $fileName }}</p>
@else
<p class="text-2sm text-gray-700">Belum ada kertas kerja</p>
@endif
</div>
</div>
</div> </div>
@endsection @endsection

View File

@@ -110,7 +110,7 @@
</div> </div>
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
<div class="card"> <div class="card">
<div class="card-body grid gap-5"> <div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -155,7 +155,7 @@
Jenis Jaminan Jenis Jaminan
</label> </label>
<p class="flex text-gray-600 font-medium text-sm w-full"> <p class="flex text-gray-600 font-medium text-sm w-full">
@foreach ($permohonan->debiture->documents as $document) @foreach ($permohonan->documents as $document)
{{ $document->jenisjaminan->name }} {{ $document->jenisjaminan->name }}
@endforeach @endforeach
</p> </p>
@@ -282,6 +282,21 @@
@endif @endif
@endif @endif
{{-- @if ($permohonan->penilaian->jenis_penilaian_id == 2 && $permohonan->tujuanPenilaian->id == 4) --}}
<div class="menu-item">
<a class="menu-link"
onclick="callReport('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-profile-circle">
</i>
</span>
<span class="menu-title">
CALL REPORT
</span>
</a>
</div>
{{-- @endif --}}
</div> </div>
</div> </div>
</div> </div>
@@ -292,7 +307,7 @@
<a class="btn btn-outline btn-info " <a class="btn btn-outline btn-info "
onclick="checkLaporan('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }}, 1 )"> onclick="checkLaporan('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }}, 1 )">
<i class="ki-filled ki-eye"></i> <i class="ki-filled ki-eye"></i>
PRIVIEW PREVIEW
</a> </a>
<a class="btn btn-success" <a class="btn btn-success"
@@ -331,20 +346,28 @@
$jenisJaminanId = null; $jenisJaminanId = null;
$inspeksiId = null; $inspeksiId = null;
$documentId = null; $documentId = null;
foreach ($permohonan->debiture->documents as $item) { $firstDocument = $permohonan->documents->first(); // Ambil dokumen pertama
$documentId = $item->id;
} if ($firstDocument) {
foreach ($dokumen->inspeksi as $item) { $documentId = $firstDocument->id;
$inspeksiId = $item->id;
// Ambil ID inspeksi pertama (jika ada)
if ($firstDocument->inspeksi->isNotEmpty()) {
$inspeksiId = $firstDocument->inspeksi->first()->id;
}
// Ambil jenis jaminan jika ada
if ($firstDocument->jenisjaminan) {
$jenisJaminanId = $firstDocument->jenisjaminan->id;
}
} else {
$documentId = 'Tidak ada dokumen';
$inspeksiId = 'Tidak ada inspeksi';
$jenisJaminanId = 'Tidak ada jenis jaminan';
} }
@endphp @endphp
@foreach ($permohonan->debiture->documents as $document)
@if ($document->jenisjaminan)
@php
$jenisJaminanId = $document->jenisjaminan->id;
@endphp
@endif
@endforeach
<div class="flex items-baseline w-full"> <div class="flex items-baseline w-full">
<label for="" class="form-label max-w-56">Import Kertas Kerja</label> <label for="" class="form-label max-w-56">Import Kertas Kerja</label>
<div class="flex justify-center items-center gap-2"> <div class="flex justify-center items-center gap-2">
@@ -560,48 +583,19 @@
cancelButtonColor: '#d33', cancelButtonColor: '#d33',
confirmButtonText: 'Yes' confirmButtonText: 'Yes'
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
$.ajax({ window.location.href = `/penilai/${permohonanId}/edit`;
url: `/penilai/storePaparan/${permohonanId}`,
type: "PUT",
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
if (response.success) {
// window.location.reload();
hideLoadingSwal();
Swal.fire({
title: 'Berhasil!',
text: response.message,
icon: 'success',
confirmButtonText: 'OK'
}).then((response) => {
if (response.isConfirmed) {
window.location.reload();
}
});
}
},
error: function(xhr, status, error) {
console.log('Error checking button status:', error, status, xhr);
if (xhr.responseJSON.message) {
// window.location.reload();
hideLoadingSwal();
} else {
// window.location.reload();
hideLoadingSwal();
}
}
})
} }
}); });
} }
function callReport(permohonanId, documentId, inspeksiId, jaminanId) {
showLoadingSwal('Tunggu ...');
window.location.href =
`{{ route('penilai.call-report') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
}
function savePenilai() { function savePenilai() {
showLoadingSwal('Mengirim data keserver ...'); showLoadingSwal('Mengirim data keserver ...');
$.ajax({ $.ajax({

View File

@@ -4,7 +4,7 @@
{{ Breadcrumbs::render(request()->route()->getName()) }} {{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection @endsection
@section('content') @section('content')
@include('lpj::assetsku.includenya') @include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@include('lpj::component.detail-jaminan', ['backLink' => 'penilaian.index']) @include('lpj::component.detail-jaminan', ['backLink' => 'penilaian.index'])
@@ -16,7 +16,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<form id="form-assignment" class=""> <form id="form-assignment" class="">
@if (isset($penilaian->nomor_registrasi)) @if (isset($penilaian->nomor_registrasi))
@method('PUT') @method('PUT')
@endif @endif
@@ -67,7 +67,7 @@
<option value="berbeda">Berbeda</option> <option value="berbeda">Berbeda</option>
</select> </select>
</div> </div>
<em id="error-surveyor_selection" class="alert text-danger text-sm"></em> <em id="error-surveyor_selection" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -85,15 +85,42 @@
@foreach ($teamPenilai as $item) @foreach ($teamPenilai as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option> <option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach @endforeach
@if ($penilaianTeam->isEmpty())
<option value="pilih_dari_region">Pilih Surveyor dan Penilai Dari Region
</option>
@endif
</select> </select>
</div> </div>
<em id="error-penilai_surveyor_id" class="alert text-danger text-sm"></em> <em id="error-penilai_surveyor_id" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
</div> </div>
<div id="surveyorPenilaiRegion" class="hidden items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Pilih Region
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="input-group w-full">
<select id="surveyor_penilai_region_id" name="surveyor_penilai_region_id"
class="tomselect input @error('surveyor_penilai_region_id') border-danger bg-danger-light @enderror w-full">
<option value="">Pilih Region</option>
@if (isset($updateTeamPenilai))
@foreach ($updateTeamPenilai as $item)
<option value="{{ $item->regions->id }}">
{{ $item->regions->name }}</option>
@endforeach
@endif
</select>
</div>
<em id="error-surveyor_penilai_region_id" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="different_surveyor_penilai" class="{{ $penilaianTeam->isNotEmpty() ? '' : 'hidden' }}"> <div id="different_surveyor_penilai" class="{{ $penilaianTeam->isNotEmpty() ? '' : 'hidden' }}">
<div class="grid gap-2.5"> <div class="grid gap-2.5">
@@ -121,7 +148,7 @@
</select> </select>
</div> </div>
<em id="error-surveyor_id" class="alert text-danger text-sm"></em> <em id="error-surveyor_id" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -146,7 +173,7 @@
</select> </select>
</div> </div>
<em id="error-surveyor_id" class="alert text-danger text-sm"></em> <em id="error-surveyor_id" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -172,7 +199,7 @@
</select> </select>
</div> </div>
<em id="error-surveyor_region_id" class="alert text-danger text-sm"></em> <em id="error-surveyor_region_id" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -221,7 +248,7 @@
@endif @endif
</select> </select>
</div> </div>
<em id="error-penilai_id" class="alert text-danger text-sm"></em> <em id="error-penilai_id" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@endif @endif
@@ -243,7 +270,7 @@
@endif @endif
</select> </select>
</div> </div>
<em id="error-penilai_region_id" class="alert text-danger text-sm"></em> <em id="error-penilai_region_id" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
</div> </div>
@@ -259,7 +286,7 @@
type="datetime-local" name="tanggal_kunjungan" type="datetime-local" name="tanggal_kunjungan"
value="{{ isset($penilaian->tanggal_kunjungan) ? \Carbon\Carbon::createFromTimestamp($penilaian->tanggal_kunjungan)->format('Y-m-d\TH:i') : '' }}"> value="{{ isset($penilaian->tanggal_kunjungan) ? \Carbon\Carbon::createFromTimestamp($penilaian->tanggal_kunjungan)->format('Y-m-d\TH:i') : '' }}">
<em id="error-tanggal_kunjungan" class="alert text-danger text-sm"></em> <em id="error-tanggal_kunjungan" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -269,10 +296,11 @@
Catatan Catatan
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('keterangan') border-danger bg-danger-light @enderror" rows="3" name="keterangan">{{ $permohonan->registrasi_catatan ? $permohonan->registrasi_catatan . "\n\n" : "" }}{{ $penilaian->keterangan ?? '' }}</textarea> <textarea class="textarea @error('keterangan') border-danger bg-danger-light @enderror" rows="3"
name="keterangan">{{ $permohonan->registrasi_catatan ? $permohonan->registrasi_catatan . "\n\n" : '' }}{{ $penilaian->keterangan ?? '' }}</textarea>
</div> </div>
<em id="error-keterangan" class="alert text-danger text-sm"></em> <em id="error-keterangan" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -355,20 +383,37 @@
const selectedValue = this.value; const selectedValue = this.value;
const sameSurveyorPenilai = document.getElementById('same_surveyor_penilai'); const sameSurveyorPenilai = document.getElementById('same_surveyor_penilai');
const differentSurveyorPenilai = document.getElementById('different_surveyor_penilai'); const differentSurveyorPenilai = document.getElementById('different_surveyor_penilai');
const surveyorPenilaiRegion = document.getElementById('surveyorPenilaiRegion');
if (selectedValue === 'penilai_dan_surveyor') { if (selectedValue === 'penilai_dan_surveyor') {
sameSurveyorPenilai.classList.remove('hidden'); sameSurveyorPenilai.classList.remove('hidden');
differentSurveyorPenilai.classList.add('hidden'); differentSurveyorPenilai.classList.add('hidden');
surveyorPenilaiRegion.classList.add('hidden');
} else if (selectedValue === 'berbeda') { } else if (selectedValue === 'berbeda') {
sameSurveyorPenilai.classList.add('hidden'); sameSurveyorPenilai.classList.add('hidden');
differentSurveyorPenilai.classList.remove('hidden'); differentSurveyorPenilai.classList.remove('hidden');
surveyorPenilaiRegion.classList.add('hidden');
} else { } else {
sameSurveyorPenilai.classList.add('hidden'); sameSurveyorPenilai.classList.add('hidden');
differentSurveyorPenilai.classList.add('hidden'); differentSurveyorPenilai.classList.add('hidden');
surveyorPenilaiRegion.classList.add('hidden');
} }
}); });
document.getElementById('penilai_surveyor_id').addEventListener('change', function() {
const selectedValue = this.value;
const surveyorPenilaiRegion = document.getElementById('surveyorPenilaiRegion');
if (selectedValue === 'pilih_dari_region') {
surveyorPenilaiRegion.classList.remove('hidden');
surveyorPenilaiRegion.classList.add('flex');
} else {
surveyorPenilaiRegion.classList.add('hidden');
}
});
document.getElementById('surveyor_id').addEventListener('change', function() { document.getElementById('surveyor_id').addEventListener('change', function() {
const selectedValue = this.value; const selectedValue = this.value;

View File

@@ -66,6 +66,11 @@
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="jenis_laporan">
<span class="sort"> <span class="sort-label"> Jenis Laporan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id"> <th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Status Bayar </span> <span class="sort"> <span class="sort-label"> Status Bayar </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
@@ -211,6 +216,15 @@
return ''; return '';
}, },
}, },
jenis_laporan: {
title: 'Jenis laporan',
render: (item, data) => {
if(data.penilai.type_penilai){
return `<span class="text-md font-bold capitalize">${data.penilai.type_penilai}</span>`;
}
return '';
},
},
status_bayar: { status_bayar: {
title: 'Status Bayar', title: 'Status Bayar',
render: (item, data) => { render: (item, data) => {

View File

@@ -13,7 +13,7 @@
@include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.' . $dataHeader . '.index']) @include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.' . $dataHeader . '.index'])
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
<div class="card border border-agi-100 pb-2.5"> <div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings"> <div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title"> <h3 class="card-title">
@@ -95,7 +95,7 @@
</td> </td>
</tr> </tr>
@endif @endif
@if (in_array($permohonan->nilai_plafond_id, [1, 4]) && $permohonan->approval_dd != null) @if (in_array($permohonan->nilai_plafond_id, [1,2, 4]) && $permohonan->approval_dd != null)
<tr> <tr>
<td>Disetujui Oleh (DD)</td> <td>Disetujui Oleh (DD)</td>
<td>{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }}</td> <td>{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }}</td>
@@ -115,7 +115,7 @@
$inspeksiId = null; $inspeksiId = null;
$documentId = null; $documentId = null;
$jenisJaminanId = null; $jenisJaminanId = null;
foreach ($permohonan->debiture->documents as $item) { foreach ($permohonan->documents as $item) {
foreach ($item->inspeksi as $key => $value) { foreach ($item->inspeksi as $key => $value) {
$inspeksiId = $value->id; $inspeksiId = $value->id;
} }
@@ -151,7 +151,7 @@
@if (Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) && @if (Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) &&
$permohonan->approval_eo && $permohonan->approval_eo &&
$permohonan->approval_dd == null && $permohonan->approval_dd == null &&
in_array($permohonan->nilai_plafond_id, [1, 4])) in_array($permohonan->nilai_plafond_id, [1, 2, 4]))
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary"> <button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
<i class="ki-filled ki-double-check"></i> <i class="ki-filled ki-double-check"></i>
Otorisator {{ $header ?? '' }} Otorisator {{ $header ?? '' }}
@@ -159,13 +159,13 @@
@endif @endif
@elseif($dataHeader == 'paparan') @elseif($dataHeader == 'paparan')
<a class="btn btn-success" @if($permohonan->penilai->file_paparan)
href="{{ route('penilai.paparan') }}?permohonanId={{ $permohonan->id }}&documentId={{ $documentId }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $jenisJaminanId }}&statusLpj={{ true }}"> <span class="btn btn-success"
Lihat Data Paparan onclick="viewPDF('{{ Storage::url($permohonan->penilai->file_paparan) }}')"><i
</a> class="ki-filled ki-eye mr-2"></i>Lihat Data Paparan</span>
@endif
@if(Auth::user()->hasAnyRole(['administrator','senior-officer']) && $authorization->approve_so==null) @if(Auth::user()->hasAnyRole(['administrator','senior-officer']) && $authorization->approve_so==null)
<button onclick="otorisatorData({{ $authorization->id }})" type="button" class="btn btn-primary"> <button onclick="otorisatorData({{ $authorization->id }},'SO')" type="button" class="btn btn-primary">
<i class="ki-filled ki-double-check"></i> <i class="ki-filled ki-double-check"></i>
Otorisator {{ $header ?? '' }} Otorisator {{ $header ?? '' }}
</button> </button>
@@ -173,8 +173,7 @@
@if(Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) && @if(Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) &&
$authorization->approve_so && $authorization->approve_so &&
$authorization->approve_dd == null && $authorization->approve_dd == null)
in_array($permohonan->nilai_plafond_id, [1, 4]))
<button onclick="otorisatorData({{ $authorization->id }},'DD')" type="button" class="btn btn-primary"> <button onclick="otorisatorData({{ $authorization->id }},'DD')" type="button" class="btn btn-primary">
<i class="ki-filled ki-double-check"></i> <i class="ki-filled ki-double-check"></i>
Otorisator {{ $header ?? '' }} Otorisator {{ $header ?? '' }}
@@ -191,7 +190,7 @@
function otorisatorData(dataId, role='') { function otorisatorData(dataId, role='') {
const dataHeader = @json($header); const dataHeader = @json($header);
if(dataHeader == 'Paparan'){ if(dataHeader == 'Paparan'){
if(role == 'DD'){ if(role == 'SO'){
Swal.fire({ Swal.fire({
title: 'Apakah Anda yakin?', title: 'Apakah Anda yakin?',
text: `Untuk melakukan otorisator ${dataHeader}!`, text: `Untuk melakukan otorisator ${dataHeader}!`,
@@ -252,8 +251,8 @@
}); });
}else{ }else{
Swal.fire({ Swal.fire({
title: 'Apakah Anda yakin?', title: 'Apakah Yakin?',
text: `Untuk melakukan otorisator ${dataHeader}!`, text: `Pastikan bahwa paparan sudah dilakukan!`,
icon: 'warning', icon: 'warning',
input: 'textarea', input: 'textarea',
inputLabel: 'Keterangan', inputLabel: 'Keterangan',
@@ -282,7 +281,7 @@
}, },
success: (response) => { success: (response) => {
Swal.fire('Berhasil!', Swal.fire('Berhasil!',
'Data berhasil diotorisasi. Menunggu Approval dan Tanggal Paparan dari DD', 'Data berhasil diotorisasi',
'success').then(() => { 'success').then(() => {
window.location.reload(); window.location.reload();
}); });
@@ -373,7 +372,7 @@
}, },
}); });
$.ajax({ $.ajax({
url: `/otorisator/revisi/${dataId}/`, url: `/otorisator/revisi/${dataId}`,
type: 'POST', type: 'POST',
data: { data: {
message: userMessage message: userMessage

View File

@@ -19,7 +19,7 @@
@include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.' . $dataHeader . '.index']) @include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.' . $dataHeader . '.index'])
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
<div class="card border border-agi-100 pb-2.5"> <div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings"> <div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title"> <h3 class="card-title">
@@ -146,7 +146,7 @@
$inspeksiId = null; $inspeksiId = null;
$documentId = null; $documentId = null;
$jenisJaminanId = null; $jenisJaminanId = null;
foreach ($permohonan->debiture->documents as $item) { foreach ($permohonan->documents as $item) {
foreach ($item->inspeksi as $key => $value) { foreach ($item->inspeksi as $key => $value) {
$inspeksiId = $item->id; $inspeksiId = $item->id;
} }

View File

@@ -74,6 +74,18 @@
<span class="sort"> <span class="sort-label">Nilai Plafond </span> <span class="sort"> <span class="sort-label">Nilai Plafond </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tanggal_paparan">
<span class="sort"> <span class="sort-label"> Tanggal Paparan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="approval_so">
<span class="sort"> <span class="sort-label"> Approval SO </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="approval_dd">
<span class="sort"> <span class="sort-label"> Approval DD </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th> <th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
@@ -220,6 +232,34 @@
return `${data.nilai_plafond.name}`; return `${data.nilai_plafond.name}`;
}, },
}, },
tanggal_paparan:{
title: 'Tanggal Paparan',
render: (item, data) => {
if(data.tanggal_paparan) {
return `${window.formatTanggalIndonesia(data.tanggal_paparan)}`;
}
return "-";
},
},
approval_so: {
title: 'Approval SO',
render: (item, data) => {
if(data?.authorization?.approve_so) {
return `${data?.authorization?.approve_so?.name} | ${window.formatTanggalIndonesia(data?.authorization?.approve_so_at)}`;
}
return '';
},
},
approval_dd: {
title: 'Approval DD',
render: (item, data) => {
if(data?.authorization?.approve_dd) {
return `${data?.authorization?.approve_dd?.name} | ${window.formatTanggalIndonesia(data?.authorization?.approve_dd_at)}`;
}
return '';
},
},
actions: { actions: {
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {

View File

@@ -8,7 +8,7 @@
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" <div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('permohonan.datatables') }}"> data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('permohonan.datatables') }}">
<div class="card-header bg-agi-50 py-5 flex-wrap"> <div class="card-header bg-agi-50 py-5 flex-wrap">
<h3 class="card-title"> <h3 class="card-title">
Daftar Permohonan Daftar Permohonan
@@ -29,46 +29,46 @@
<div class="card-body"> <div class="card-body">
<div class="scrollable-x-auto"> <div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" <table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true"> data-datatable-table="true">
<thead> <thead>
<tr> <tr>
<th class="w-14"> <th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/> <input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th> </th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi"> <th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span> <span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan"> <th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span> <span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="user_id"> <th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span> <span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="branch_id"> <th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span> <span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="debitur_id"> <th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span> <span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id"> <th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span> <span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px] text-center" data-datatable-column="status"> <th class="min-w-[150px] text-center" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span> <span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="keterangan"> <th class="min-w-[150px]" data-datatable-column="keterangan">
<span class="sort"> <span class="sort-label"> Keterangan </span> <span class="sort"> <span class="sort-label"> Keterangan </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[50px] text-right" data-datatable-column="actions">Action</th> <th class="min-w-[50px] text-right" data-datatable-column="actions">Action</th>
</tr> </tr>
</thead> </thead>
</table> </table>
</div> </div>
@@ -189,7 +189,7 @@
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {
console.log(data.documents.length); console.log(data.documents.length);
if(data.documents.length > 0) { if (data.documents.length > 0) {
return `<span class="badge badge-sm badge-default uppercase flex justify-center">${data.status}</span>`; return `<span class="badge badge-sm badge-default uppercase flex justify-center">${data.status}</span>`;
} }
return `<span class="badge badge-sm badge-danger uppercase flex justify-center">Lengkapi Aset Jaminan</span>`; return `<span class="badge badge-sm badge-danger uppercase flex justify-center">Lengkapi Aset Jaminan</span>`;
@@ -204,8 +204,15 @@
render: (item, data) => { render: (item, data) => {
let actionHtml = `<div class="flex flex-nowrap justify-end gap-1.5">`; let actionHtml = `<div class="flex flex-nowrap justify-end gap-1.5">`;
if (data.status === 'proses-survey' || data.status == 'rejected-reschedule') {
actionHtml += `
<a onclick="surveyorRescheduleJadwalSurvey(${data.id},${data.penilaian.id},'${data.nomor_registrasi}', '${data.debiture.name}', '${data.penilaian.waktu_penilaian}', ${JSON.stringify(data.penilaian.rejected_note)})" class="delete btn btn-sm btn-outline btn-light" title="Reschedule Jadwal Survey">
<i class="ki-filled ki-calendar-remove"></i>
</a>`;
}
if (data && data.penilaian && data.penilaian.waktu_penilaian !== null && data.status !== if (data && data.penilaian && data.penilaian.waktu_penilaian !== null && data.status !==
'done' && data.penilaian.authorized_status == null) { 'done' && data.penilaian.authorized_status == null || data.status === 'approved-reschedule') {
actionHtml += ` actionHtml += `
<a class="btn btn-sm btn-outline btn-primary" href="javascript:void(0)" onclick="surveyorApproveKunjungan(${data.id},${data.penilaian.id},'${data.nomor_registrasi}', '${data.debiture.name}', '${data.penilaian.waktu_penilaian}')" title="Approve Jadwal Kunjungan No Reg ${data.nomor_registrasi}" > <a class="btn btn-sm btn-outline btn-primary" href="javascript:void(0)" onclick="surveyorApproveKunjungan(${data.id},${data.penilaian.id},'${data.nomor_registrasi}', '${data.debiture.name}', '${data.penilaian.waktu_penilaian}')" title="Approve Jadwal Kunjungan No Reg ${data.nomor_registrasi}" >
<i class="ki-filled ki-calendar-edit"></i> <i class="ki-filled ki-calendar-edit"></i>
@@ -225,12 +232,15 @@
<a class="btn btn-sm btn-outline btn-info" href="permohonan/${data.id}/edit" title="Edit Permohonan"> <a class="btn btn-sm btn-outline btn-info" href="permohonan/${data.id}/edit" title="Edit Permohonan">
<i class="ki-outline ki-notepad-edit"></i> <i class="ki-outline ki-notepad-edit"></i>
</a>`; </a>`;
if(data.status !== 'batal') { if (data.status !== 'batal') {
actionHtml += ` actionHtml += `
<a onclick="deleteData(${data.id}, '${data.nomor_registrasi}','${data.debiture.name}')" class="delete btn btn-sm btn-outline btn-danger" title="Batalkan Permohonan"> <a onclick="deleteData(${data.id}, '${data.nomor_registrasi}','${data.debiture.name}')" class="delete btn btn-sm btn-outline btn-danger" title="Batalkan Permohonan">
<i class="ki-outline ki-cross-square"></i> <i class="ki-outline ki-cross-square"></i>
</a>`; </a>`;
} }
actionHtml += `</div>`; actionHtml += `</div>`;
return actionHtml; return actionHtml;
@@ -241,14 +251,14 @@
let dataTable = new KTDataTable(element, dataTableOptions); let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality // Custom search functionality
searchInput.addEventListener('input', function () { searchInput.addEventListener('input', function() {
const searchValue = this.value.trim(); const searchValue = this.value.trim();
dataTable.search(searchValue, true); dataTable.search(searchValue, true);
}); });
</script> </script>
<script type="text/javascript"> <script type="text/javascript">
function surveyorApproveKunjungan(permohonanId,idPenilaian, noReg, debitur, waktuPenilaian) { function surveyorApproveKunjungan(permohonanId, idPenilaian, noReg, debitur, waktuPenilaian) {
Swal.fire({ Swal.fire({
title: ' ', title: ' ',
text: "Yakin akan Menyetujui Jadwal Kunjungan " + noReg + " untuk Debitur " + debitur + text: "Yakin akan Menyetujui Jadwal Kunjungan " + noReg + " untuk Debitur " + debitur +
@@ -263,7 +273,7 @@
//define variable //define variable
// $id ==> penilaian.id // $id ==> penilaian.id
let token = "{{ csrf_token() }}"; let token = "{{ csrf_token() }}";
let useURL = "{{ URL::to('/surveyor/storeAproved') }}" + "/" + idPenilaian; let useURL = "{{ URL::to('/permohonan/store-approved') }}" + "/" + idPenilaian;
var input_data = new Object(); var input_data = new Object();
input_data._token = token; input_data._token = token;
@@ -276,7 +286,7 @@
cache: false, cache: false,
data: input_data, data: input_data,
dataType: "json", dataType: "json",
success: function (response) { success: function(response) {
console.log(response); console.log(response);
if ('success' == response.status) { if ('success' == response.status) {
swal.fire('Sukses Menyetujui!', response.message, 'success').then( swal.fire('Sukses Menyetujui!', response.message, 'success').then(
@@ -288,7 +298,7 @@
} }
}, },
error: function (response, textStatus, errorThrown) { error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors; // var errors = response.responseJSON.errors;
// console.log(errors); // console.log(errors);
console.log(response); console.log(response);
@@ -300,6 +310,96 @@
} }
function surveyorRescheduleJadwalSurvey(permohonanId, idPenilaian, noReg, debitur, waktuPenilaian, rejectedNote) {
rejectedNote = JSON.parse(rejectedNote);
Swal.fire({
title: 'Reschedule Jadwal Kunjungan',
html: `
<div class="text-left space-y-4">
<p class="text-gray-700">
Yakin akan Reschedule Jadwal Kunjungan
<span class="font-semibold text-blue-600">${noReg}</span>
untuk Debitur
<span class="font-semibold text-blue-600">${debitur}</span>
pada waktu
<span class="font-semibold">${window.formatTanggalWaktuIndonesia(waktuPenilaian)}</span>?
</p>
<div>
<label for="reschedule_date" class="block text-sm font-medium text-gray-700 mb-1">Tanggal Baru</label>
<input type="datetime-local" id="reschedule_date"
class="block w-full px-4 py-2 border border-gray-300 rounded-lg shadow-sm focus:ring-blue-500 focus:border-blue-500 sm:text-sm">
</div>
<div>
<label for="reschedule_note" class="block text-sm font-medium text-gray-700 mb-1">Catatan</label>
<textarea id="reschedule_note"
class="block w-full px-4 py-2 border border-gray-300 rounded-lg shadow-sm focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
placeholder="Masukkan alasan reschedule..."></textarea>
</div>
${rejectedNote && rejectedNote.trim() ? `
<p class="text-gray-700"><strong>Catatan Reject:</strong> ${rejectedNote}</p>
` : ''}
</div>
`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Reschedule',
preConfirm: () => {
const rescheduleDate = document.getElementById('reschedule_date').value;
const rescheduleNote = document.getElementById('reschedule_note').value;
if (!rescheduleDate || !rescheduleNote) {
Swal.showValidationMessage('Semua inputan wajib diisi!');
return false;
}
return { rescheduleDate, rescheduleNote };
}
}).then((result) => {
if (result.isConfirmed) {
const { rescheduleDate, rescheduleNote } = result.value;
// Data to send
const data = {
_token: "{{ csrf_token() }}",
penilaian_id: idPenilaian,
nomor_registrasi: noReg,
permohonan_id: permohonanId,
reschedule_date: rescheduleDate,
reschedule_note: rescheduleNote
};
$.ajax({
url: `{{ URL::to('/permohonan/store-reschedule-survey') }}/${idPenilaian}`,
type: "PUT",
cache: false,
data: data,
dataType: "json",
success: function(response) {
if (response.status === 'success') {
Swal.fire('Sukses Reschedule!', response.message, 'success').then(() => {
location.reload();
});
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(response) {
const errorMessage = response.responseJSON?.message || 'Terjadi kesalahan saat memproses data.';
Swal.fire('Error!', errorMessage, 'error');
}
});
}
});
}
// window.formatTanggalIndonesia(date) // window.formatTanggalIndonesia(date)
</script> </script>
@endpush @endpush

View File

@@ -157,7 +157,7 @@
</h3> </h3>
</div> </div>
<div class="card-table scrollable-x-auto pb-3"> <div class="card-table scrollable-x-auto pb-3">
@foreach($permohonan->debiture->documents as $dokumen) @foreach($permohonan->documents as $dokumen)
<div class="card-body lg:py-7.5"> <div class="card-body lg:py-7.5">
<span class="text-base text-gray-900 font-bold mb-5"> <span class="text-base text-gray-900 font-bold mb-5">
Jaminan {{ $loop->index + 1 }} Jaminan {{ $loop->index + 1 }}

View File

@@ -6,7 +6,8 @@
@section('content') @section('content')
<div class="grid"> <div class="grid">
<div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}"> <div class="card border border-agi-100 card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}">
<div class="card-header bg-agi-50 py-5 flex-wrap"> <div class="card-header bg-agi-50 py-5 flex-wrap">
<h3 class="card-title"> <h3 class="card-title">
Daftar Registrasi Daftar Registrasi
@@ -25,46 +26,48 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="scrollable-x-auto"> <div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true"> <table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead> <thead>
<tr> <tr>
<th class="w-14"> <th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/> <input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th> </th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi"> <th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span> <span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan"> <th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span> <span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="user_id"> <th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span> <span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="branch_id"> <th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span> <span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="debitur_id"> <th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span> <span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id"> <th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span> <span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="status"> <th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span> <span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th> <th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr> </tr>
</thead> </thead>
</table> </table>
</div> </div>
<div class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium"> <div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
Show Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page <select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page
@@ -82,10 +85,9 @@
@push('scripts') @push('scripts')
<script type="text/javascript"> <script type="text/javascript">
function showPermohonanData(regId) function showPermohonanData(regId) {
{ var url = "{{ url('registrasi') }}/" + regId;
var url = "{{ url('registrasi') }}/"+regId; $(location).attr('href', url);
$(location).attr('href',url);
} }
</script> </script>
<script type="module"> <script type="module">
@@ -143,27 +145,38 @@
actions: { actions: {
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {
return `<div class="flex flex-nowrap justify-center"> const detailButton = `
<a onclick="showPermohonanData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-warning" title="Detail"> <a onclick="showPermohonanData(${data.id})"
<i class="ki-outline ki-eye"></i> class="btn btn-sm btn-icon btn-clear btn-warning"
</a> title="Detail">
<a class="btn btn-sm btn-icon btn-clear btn-info" title="Register" href="registrasi/${data.id}/edit"> <i class="ki-outline ki-eye"></i>
<i class="ki-outline ki-notepad-edit"></i> </a>`;
</a>
const registerButton = `
<a class="btn btn-sm btn-icon btn-clear btn-info"
title="Register"
href="registrasi/${data.id}/edit">
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
return `
<div class="flex flex-nowrap justify-center">
${detailButton}
${data.status !== 'revisi' ? registerButton : ''}
</div>`; </div>`;
}, },
} }
}, },
}; };
let dataTable = new KTDataTable(element, dataTableOptions); let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality // Custom search functionality
searchInput.addEventListener('input', function () { searchInput.addEventListener('input', function() {
const searchValue = this.value.trim(); const searchValue = this.value.trim();
dataTable.search(searchValue, true); dataTable.search(searchValue, true);
}); });
</script> </script>
@endpush @endpush

View File

@@ -1,103 +1,141 @@
@extends('layouts.main') @extends('layouts.main')
@section('breadcrumbs') @section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }} {{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection @endsection
@php @php
// $route = Route::currentRouteName(); // $route = Route::currentRouteName();
// dd($route); registrasi.show // dd($route); registrasi.show
$route = explode('.', Route::currentRouteName()); $route = explode('.', Route::currentRouteName());
@endphp @endphp
@section('content') @section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@include('lpj::component.detail-jaminan',['backLink' => 'registrasi.index']) @include('lpj::component.detail-jaminan', ['backLink' => 'registrasi.index'])
<div class="card border border-agi-100 pb-2.5"> <div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings"> @if ($permohonan->status !== 'revisi')
<h3 class="card-title"> <div class="card-header bg-agi-50" id="basic_settings">
Registrasi <h3 class="card-title">
</h3> Registrasi
</div> </h3>
<div class="card-body lg:py-7.5"> </div>
<form id="{{$route[0]}}_form" name="{{$route[0]}}_form" method="POST"> <div class="card-body lg:py-7.5">
<input type="hidden" id="id" name="id" value="{{ $id }}"> <form id="{{ $route[0] }}_form" name="{{ $route[0] }}_form" method="POST">
@method('PUT') <input type="hidden" id="id" name="id" value="{{ $id }}">
@csrf @method('PUT')
@csrf
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Tindakan Tindakan
</label> </label>
<div class="flex gap-12"> <div class="flex gap-12">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="radio" name="{{$route[0]}}_tindakan" type="radio" value="0" id="{{ $route[0] }}_tindakan_yes" /> <input class="radio" name="{{ $route[0] }}_tindakan" type="radio" value="0"
Yes id="{{ $route[0] }}_tindakan_yes" />
</label>&nbsp;&nbsp; Yes
<label class="form-label flex items-center gap-2.5 text-nowrap"> </label>&nbsp;&nbsp;
<input class="radio" name="{{$route[0]}}_tindakan" type="radio" value="1" id="{{ $route[0] }}_tindakan_no" /> <label class="form-label flex items-center gap-2.5 text-nowrap">
No <input class="radio" name="{{ $route[0] }}_tindakan" type="radio" value="1"
</label> id="{{ $route[0] }}_tindakan_no" />
</div> No
</div> </label>
<div id="{{$route[0]}}_div_jenis_pilihan" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mt-5"> </div>
<label class="form-label max-w-56"> </div>
Data Jenis Penilaian (Pilihan registrasi) <div id="{{ $route[0] }}_div_jenis_pilihan"
</label> class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mt-5">
<div class="flex flex-wrap items-baseline w-full"> <label class="form-label max-w-56">
<select class="inputku select" id="{{$route[0]}}_jenis_penilaian" name="{{$route[0]}}_jenis_penilaian"> Data Jenis Penilaian (Pilihan registrasi)
<option></option> </label>
</select> <div class="flex flex-wrap items-baseline w-full">
<em id="{{$route[0]}}_jenis_penilaian_msg" class="alert text-danger text-sm"></em> <select class="inputku select" id="{{ $route[0] }}_jenis_penilaian"
</div> name="{{ $route[0] }}_jenis_penilaian">
</div> <option></option>
<div id="{{ $route[0] }}_div_catatan" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mt-5"> </select>
<label class="form-label max-w-56"> <em id="{{ $route[0] }}_jenis_penilaian_msg" class="alert text-danger text-sm"></em>
Catatan </div>
</label> </div>
<div class="flex flex-wrap items-baseline w-full"> <div id="{{ $route[0] }}_div_catatan"
<textarea class="inputku textarea" name="{{$route[0]}}_catatan" id="{{$route[0]}}_catatan" placeholder="Catatan..." rows="6"></textarea> class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mt-5">
<em id="{{$route[0]}}_catatan_msg" class="alert text-danger text-sm"></em> <label class="form-label max-w-56">
</div> Catatan
</div> </label>
<div id="{{ $route[0] }}_div_sla" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex flex-wrap items-baseline w-full">
<label class="form-label max-w-56"> <textarea class="inputku textarea" name="{{ $route[0] }}_catatan" id="{{ $route[0] }}_catatan"
SLA (dalam satuan hari) placeholder="Catatan..." rows="6"></textarea>
</label> <em id="{{ $route[0] }}_catatan_msg" class="alert text-danger text-sm"></em>
<div class="flex flex-wrap items-baseline w-full"> </div>
<input class="inputku input" name="{{$route[0]}}_sla" id="{{$route[0]}}_sla" placeholder="dalam satuan hari" type="text" /> </div>
<em id="{{$route[0]}}_sla_msg" class="alert text-danger text-sm"></em> <div id="{{ $route[0] }}_div_sla" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
</div> <label class="form-label max-w-56">
</div> SLA (dalam satuan hari)
<div id="{{ $route[0] }}_div_region" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> </label>
<label class="form-label max-w-56"> <div class="flex flex-wrap items-baseline w-full">
Region <input class="inputku input" name="{{ $route[0] }}_sla" id="{{ $route[0] }}_sla"
</label> placeholder="dalam satuan hari" type="text" />
<div class="flex flex-wrap items-baseline w-full"> <em id="{{ $route[0] }}_sla_msg" class="alert text-danger text-sm"></em>
<select class="inputku select" id="{{$route[0]}}_region" name="{{$route[0]}}_region"> </div>
<option></option> </div>
</select> <div id="{{ $route[0] }}_div_region"
<em id="{{$route[0]}}_region_msg" class="alert text-danger text-sm"></em> class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
</div> <label class="form-label max-w-56">
</div><br /> Region
<div id="{{ $route[0] }}_div_catatan2" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> </label>
<label class="form-label max-w-56"> <div class="flex flex-wrap items-baseline w-full">
Catatan <select class="inputku select" id="{{ $route[0] }}_region"
</label> name="{{ $route[0] }}_region">
<div class="flex flex-wrap items-baseline w-full"> <option></option>
<textarea class="inputku textarea" name="{{$route[0]}}_catatan2" id="{{$route[0]}}_catatan2" placeholder="Catatan..." rows="6"></textarea> </select>
<em id="{{$route[0]}}_catatan2_msg" class="alert text-danger text-sm"></em> <em id="{{ $route[0] }}_region_msg" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div><br />
<div class="flex justify-end mt-5"> <div id="{{ $route[0] }}_div_catatan2"
<button type="button" class="btn btn-primary" id="toEdit"> class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
Save <label class="form-label max-w-56">
</button> Catatan
</div> </label>
</form> <div class="flex flex-wrap items-baseline w-full">
</div> <textarea class="inputku textarea" name="{{ $route[0] }}_catatan2" id="{{ $route[0] }}_catatan2"
</div> placeholder="Catatan..." rows="6"></textarea>
</div> <em id="{{ $route[0] }}_catatan2_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div class="flex justify-end mt-5">
<button type="button" class="btn btn-primary" id="toEdit">
Save
</button>
</div>
</form>
</div>
@endif
@if ($permohonan->status === 'revisi')
<div class="card-header bg-agi-50" id="basic_settings">
<h3 class="card-title">
Dokument
</h3>
</div>
<div class="card-body">
@include('lpj::debitur.components.jaminan')
</div>
<div class="card-footer">
<div class="flex justify-end mt-5">
<form action="{{ route('storeRevisi', $id) }}" method="post">
@method('PUT')
@csrf
<input type="hidden" id="id" name="id" value="{{ $id }}">
<button class="btn btn-primary" >
Submit Revision
</button>
</form>
</div>
</div>
@endif
</div>
</div>
@endsection @endsection
@include('lpj::registrasi.js.editjs') @include('lpj::registrasi.js.editjs')

View File

@@ -412,7 +412,7 @@
@if (!empty($forminspeksi['fakta_positif'])) @if (!empty($forminspeksi['fakta_positif']))
@foreach ($forminspeksi['fakta_positif'] as $index => $positif) @foreach ($forminspeksi['fakta_positif'] as $index => $positif)
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea> <textarea class="textarea mt-2" name="fakta_positif[]" rows="10">{{ old("fakta_positif.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -421,7 +421,7 @@
@endforeach @endforeach
@else @else
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', '') }}</textarea> <textarea class="textarea mt-2" name="fakta_positif[]" rows="10">{{ old('fakta_positif.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
</button> </button>
@@ -441,7 +441,7 @@
@if (!empty($forminspeksi['fakta_negatif'])) @if (!empty($forminspeksi['fakta_negatif']))
@foreach ($forminspeksi['fakta_negatif'] as $index => $negatif) @foreach ($forminspeksi['fakta_negatif'] as $index => $negatif)
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</textarea> <textarea class="textarea mt-2" name="fakta_negatif[]" rows="10">{{ old("fakta_negatif.$index", $negatif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -450,7 +450,7 @@
@endforeach @endforeach
@else @else
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $forminspeksi['fakta_negatif'][0] ?? '') }}</textarea> <textarea class="textarea mt-2" name="fakta_negatif[]" rows="10">{{ old('fakta_negatif.0', $forminspeksi['fakta_negatif'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
</button> </button>
@@ -468,7 +468,7 @@
<label class="form-label max-w-56">Catatan Yang Perlu Diperhatikan</label> <label class="form-label max-w-56">Catatan Yang Perlu Diperhatikan</label>
<div id="catatan-container" class="flex flex-wrap items-baseline w-full"> <div id="catatan-container" class="flex flex-wrap items-baseline w-full">
<div class="catatan flex items-center gap-2 mt-2 textarea-group w-full"> <div class="catatan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="catatan[]" rows="3">{{ old('catatan.0', $forminspeksi['catatan'][0] ?? '') }}</textarea> <textarea class="textarea mt-2" name="catatan[]" rows="10">{{ old('catatan.0', $forminspeksi['catatan'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
</button> </button>

View File

@@ -10,8 +10,8 @@
<!-- Luas tanah --> <!-- Luas tanah -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Luas Unit</label> <label class="form-label max-w-56">Luas Unit</label>
@if (isset($permohonan->debiture->documents)) @if (isset($permohonan->documents))
@foreach ($permohonan->debiture->documents as $item) @foreach ($permohonan->documents as $item)
@php @php
$luas_units = 'N/A'; $luas_units = 'N/A';
if ($item->detail) { if ($item->detail) {

View File

@@ -10,26 +10,26 @@
<label class="form-label max-w-56">Luas Bangunan</label> <label class="form-label max-w-56">Luas Bangunan</label>
<div class="mt-2"> <div class="mt-2">
@if (isset($permohonan->debiture->documents)) @if (isset($permohonan->documents))
@foreach ($permohonan->debiture->documents as $item) @foreach ($permohonan->documents as $item)
@php @php
$luas_bangunan = 'N/A'; $luas_bangunan = 0;
if ($item->detail) { if ($item->detail) {
foreach ($item->detail as $luas) { foreach ($item->detail as $luas) {
if (isset($luas->name) && $luas->name === 'IMB') { if (isset($luas->name) && $luas->jenis_legalitas_jaminan_id === 10) {
$details = json_decode($luas->details, true); $details = json_decode($luas->details, true);
$luas_bangunan = isset($details['luas_bangunan']) ? $details['luas_bangunan'] : 'N/A'; $luas_bangunan = isset($details['luas_bangunan']) ? $details['luas_bangunan'] : 0;
break; break;
} }
} }
} }
@endphp @endphp
<input type="hidden" name="luas_bangunan_sesuai" class="input" value="{{ $luas_bangunan }}"> <input type="hidden" name="luas_bangunan_sesuai" class="input" value="{{ $luas_bangunan }}">
<p class="text-2sm text-gray-700">{{ $luas_bangunan }} m<sup>2</sup></p> <p class="text-2sm text-gray-700">{{ $luas_bangunan }} m<sup>2</sup></p>
@endforeach @endforeach
@endif @endif
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <label class="form-label flex items-center gap-3 text-nowrap">

View File

@@ -1,10 +1,9 @@
<div class="grid grid-cols-1 lg:grid-cols-2 gap-5 lg:gap-7.5"> <div class="grid grid-cols-1 lg:grid-cols-2 gap-5 lg:gap-7.5">
@foreach ($permohonan->documents as $dokumen)
@foreach ($permohonan->debiture->documents as $dokumen)
@php @php
$jaminanId = $dokumen->id; $jaminanId = $dokumen->id;
$currentInspeksi = $inspeksiData[$jaminanId] ?? null; $currentInspeksi = $inspeksiData[$jaminanId] ?? null;
$tanahBangunanTypes = ['KAPAL', 'PESAWAT', 'KENDARAAN', 'ALAT BERAT', 'MESIN']; $tanahBangunanTypes = ['KAPAL', 'PESAWAT', 'KENDARAAN', 'ALAT BERAT', 'MESIN'];
@@ -15,8 +14,7 @@
'url' => 'url' =>
route('surveyor.inspeksi', [ route('surveyor.inspeksi', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) . "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
"?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['data_form']), 'icon' => !empty($currentInspeksi['data_form']),
], ],
@@ -29,8 +27,7 @@
'url' => 'url' =>
route('surveyor.denah', [ route('surveyor.denah', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) . "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
"?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['denah_form']), 'icon' => !empty($currentInspeksi['denah_form']),
]; ];
@@ -42,8 +39,7 @@
'url' => 'url' =>
route('surveyor.foto', [ route('surveyor.foto', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) . "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
"?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['foto_form']), 'icon' => !empty($currentInspeksi['foto_form']),
], ],
@@ -52,8 +48,7 @@
'url' => 'url' =>
route('surveyor.data-pembanding', [ route('surveyor.data-pembanding', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) . "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
"?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['data_pembanding']), 'icon' => !empty($currentInspeksi['data_pembanding']),
], ],
@@ -103,8 +98,10 @@
</div> </div>
<div class="flex items-center gap-5"> <div class="flex items-center gap-5">
<div class="flex gap-0.5"> <div class="flex gap-0.5">
<div class="btn btn-sm btn-icon btn-clear {{ !empty($currentInspeksi['data_form']) ? '' : 'btn-light' }}"> <div
<i class="ki-filled {{ !empty($currentInspeksi['data_form']) ? 'ki-check-circle' : 'ki-notepad-edit' }}"></i> class="btn btn-sm btn-icon btn-clear {{ !empty($currentInspeksi['data_form']) ? '' : 'btn-light' }}">
<i
class="ki-filled {{ !empty($currentInspeksi['data_form']) ? 'ki-check-circle' : 'ki-notepad-edit' }}"></i>
</div> </div>
</div> </div>
</div> </div>
@@ -125,8 +122,10 @@
</div> </div>
<div class="flex items-center gap-5"> <div class="flex items-center gap-5">
<div class="flex gap-0.5"> <div class="flex gap-0.5">
<div class="btn btn-sm btn-icon btn-clear {{ !empty($currentInspeksi['foto_form']) ? '' : 'btn-light' }}"> <div
<i class="ki-filled {{ !empty($currentInspeksi['foto_form']) ? 'ki-check-circle' : 'ki-notepad-edit' }}"></i> class="btn btn-sm btn-icon btn-clear {{ !empty($currentInspeksi['foto_form']) ? '' : 'btn-light' }}">
<i
class="ki-filled {{ !empty($currentInspeksi['foto_form']) ? 'ki-check-circle' : 'ki-notepad-edit' }}"></i>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -21,8 +21,9 @@
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}"> <input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="type" value="tanah"> <input type="hidden" name="type" value="tanah">
<input type="hidden" name="dokument_id" value="{{ request('dokument') }}"> <input type="hidden" name="dokument_id" value="{{ request('dokument') }}">
<input type="hidden" name="nomor_registrasi" value="{{ $permohonan->nomor_registrasi }}">
<div class="card"> <div class="card">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@if ($dokumen->jenisJaminan) @if ($dokumen->jenisJaminan)
@php @php
$dokumentName = $dokumen->jenisJaminan->name; $dokumentName = $dokumen->jenisJaminan->name;
@@ -124,8 +125,8 @@
} }
} else { } else {
// Format currency untuk input harga // Format currency untuk input harga
if (name.includes('harga') || name.includes('total') || name.includes('diskon')) { if (name.includes('diskon')) {
element.value = value ? value.toString() : '0'; element.value = value || '0';
} else { } else {
element.value = value || ''; element.value = value || '';
} }
@@ -363,16 +364,16 @@
input.value = ''; input.value = '';
} }
if (input.classList.contains('currency')) { if (input.classList.contains('currency-format')) {
input.addEventListener('input', function() { input.addEventListener('input', function() {
handleCurrencyInput(this);
// Calculate prices if needed
// Special handling for price-related inputs
if (input.name.includes('harga_pembanding') || if (input.name.includes('harga_pembanding') ||
input.name.includes('diskon_pembanding')) { input.name.includes('diskon_pembanding')) {
const inputs = document.getElementsByName(input.name); const inputs = document.getElementsByName(input.name);
const index = Array.from(inputs).indexOf(this); const index = Array.from(inputs).indexOf(this);
calculatePrices(index); calculatePrices('pembanding', index);
} }
}); });
} }
@@ -381,7 +382,7 @@
if (input.name.includes('diskon_pembanding')) { if (input.name.includes('diskon_pembanding')) {
input.addEventListener('input', function() { input.addEventListener('input', function() {
let value = let value =
this.value = value.toString(); this.value = value.toString();
}); });
} }
}); });
@@ -393,7 +394,10 @@
} }
function handleCurrencyInput(input) {
const value = input.value.replace(/[^\d]/g, '');
input.value = formatCurrency(value);
}
function removeColumn() { function removeColumn() {
if (columnCount > 1) { if (columnCount > 1) {
@@ -444,6 +448,13 @@
ensureLocationEventListeners(); ensureLocationEventListeners();
} }
function initializeCurrencyFormat() {
document.querySelectorAll('.currency-format').forEach(input => {
input.addEventListener('input', function() {
formatCurrency(this);
});
});
}
function initializeFirstPembandingListeners() { function initializeFirstPembandingListeners() {
const firstProvinceSelect = document.getElementById('province_code_pembanding'); const firstProvinceSelect = document.getElementById('province_code_pembanding');
@@ -657,5 +668,18 @@
} }
}); });
} }
document.addEventListener('DOMContentLoaded', function() {
// Initialize currency format for existing inputs
document.querySelectorAll('.currency-format').forEach(input => {
input.addEventListener('input', function() {
handleCurrencyInput(this);
});
// Format initial values if they exist
if (input.value) {
input.value = formatCurrency(input.value);
}
});
});
</script> </script>
@endpush @endpush

View File

@@ -20,7 +20,7 @@
<div class="card-header bg-agi-50"> <div class="card-header bg-agi-50">
<h3 class="card-title">Denah</h3> <h3 class="card-title">Denah</h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('surveyor.show', ['id' => $permohonan->id ]) }}?form=denah" class="btn btn-xs btn-info"> <a href="{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=denah" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
</div> </div>
@@ -98,7 +98,7 @@
</label> </label>
<input type="text" name="luas_denah[]" <input type="text" name="luas_denah[]"
class="input w-full number-format" class="input w-full number-format"
value="{{ $denah['luas_denah'] ?? '' }}" value="{{ isset($denah['luas_denah']) ? $denah['luas_denah'] . ' m²' : '' }}"
onkeyup="formatNumber(this)"> onkeyup="formatNumber(this)">
</div> </div>
</div> </div>
@@ -191,14 +191,34 @@
input.addEventListener('input', function() { input.addEventListener('input', function() {
formatNumber(this); formatNumber(this);
}); });
input.addEventListener('focus', function() {
if (this.value === 'm²') {
this.setSelectionRange(0, 0); // Kursor di awal
}
});
}); });
// Tambah Denah // Tambah Denah
document.getElementById('tambahDenah').addEventListener('click', function() { document.getElementById('tambahDenah').addEventListener('click', function() {
const denahContainer = document.getElementById('denah-container'); const denahContainer = document.getElementById('denah-container');
const newDenah = createDenahElement(denahIndex); const newDenah = createDenahElement(denahIndex);
denahContainer.appendChild(newDenah); denahContainer.appendChild(newDenah);
denahIndex++; denahIndex++;
const newInputs = newDenah.querySelectorAll('.number-format');
newInputs.forEach(input => {
input.addEventListener('input', function() {
formatNumber(this);
});
input.addEventListener('focus', function() {
if (this.value === 'm²') {
this.setSelectionRange(0, 0); // Kursor di awal
}
});
});
}); });
// Event delegation untuk tombol hapus denah // Event delegation untuk tombol hapus denah
@@ -303,6 +323,12 @@
function submitDenah() { function submitDenah() {
showLoadingSwal('Mengirim data ke server...'); showLoadingSwal('Mengirim data ke server...');
document.querySelectorAll('.number-format').forEach(input => {
if (input.value.includes('m²')) {
input.value = input.value.replace('m²', '').trim();
}
});
const formElement = $('#formDenah')[0]; const formElement = $('#formDenah')[0];
const formData = new FormData(formElement); const formData = new FormData(formElement);

View File

@@ -14,7 +14,7 @@
@if (!empty($forminspeksi['fakta']['fakta_positif'])) @if (!empty($forminspeksi['fakta']['fakta_positif']))
@foreach ($forminspeksi['fakta']['fakta_positif'] as $index => $positif) @foreach ($forminspeksi['fakta']['fakta_positif'] as $index => $positif)
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea> <textarea class="textarea mt-2" name="fakta_positif[]" rows="10">{{ old("fakta_positif.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -23,7 +23,7 @@
@endforeach @endforeach
@else @else
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', '') }}</textarea> <textarea class="textarea mt-2" name="fakta_positif[]" rows="10">{{ old('fakta_positif.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
</button> </button>
@@ -44,7 +44,7 @@
@if (!empty($forminspeksi['fakta']['fakta_negatif'])) @if (!empty($forminspeksi['fakta']['fakta_negatif']))
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif) @foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif)
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</textarea> <textarea class="textarea mt-2" name="fakta_negatif[]" rows="10">{{ old("fakta_negatif.$index", $negatif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -53,7 +53,7 @@
@endforeach @endforeach
@else @else
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full"> <div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $forminspeksi['fakta']['fakta_negatif'][0] ?? '') }}</textarea> <textarea class="textarea mt-2" name="fakta_negatif[]" rows="10">{{ old('fakta_negatif.0', $forminspeksi['fakta']['fakta_negatif'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
</button> </button>
@@ -71,7 +71,7 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Rute Menuju</label> <label class="form-label max-w-56">Rute Menuju</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea mt-2" name="rute_menuju" rows="3">{{ old('rute_menuju.0', $forminspeksi['fakta']['rute_menuju'] ?? '') }}</textarea> <textarea class="textarea mt-2" name="rute_menuju" rows="10">{{ old('rute_menuju.0', $forminspeksi['fakta']['rute_menuju'] ?? '') }}</textarea>
<em id="error-rute_menuju" class="alert text-danger text-sm"></em> <em id="error-rute_menuju" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -119,7 +119,7 @@
@if (!empty($forminspeksi['fakta']['kondisi_lingkungan'])) @if (!empty($forminspeksi['fakta']['kondisi_lingkungan']))
@foreach ($forminspeksi['fakta']['kondisi_lingkungan'] as $index => $kondisi_lingkungan) @foreach ($forminspeksi['fakta']['kondisi_lingkungan'] as $index => $kondisi_lingkungan)
<div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full"> <div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="3">{{ old("kondisi_lingkungan.$index", $kondisi_lingkungan) }}</textarea> <textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="10">{{ old("kondisi_lingkungan.$index", $kondisi_lingkungan) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -128,7 +128,7 @@
@endforeach @endforeach
@else @else
<div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full"> <div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="3" placeholder="Tambahkan keterangan"> <textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="10" placeholder="Tambahkan keterangan">
{{ old('kondisi_lingkungan.0', $forminspeksi['fakta']['kondisi_lingkungan'][0] ?? '') }} {{ old('kondisi_lingkungan.0', $forminspeksi['fakta']['kondisi_lingkungan'][0] ?? '') }}
</textarea> </textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
@@ -152,7 +152,7 @@
@if (!empty($forminspeksi['fakta']['kondisi_lain_bangunan'])) @if (!empty($forminspeksi['fakta']['kondisi_lain_bangunan']))
@foreach ($forminspeksi['fakta']['kondisi_lain_bangunan'] as $index => $kondisi_lain_bangunan) @foreach ($forminspeksi['fakta']['kondisi_lain_bangunan'] as $index => $kondisi_lain_bangunan)
<div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full"> <div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="3">{{ old("kondisi_lain_bangunan.$index", $kondisi_lain_bangunan) }}</textarea> <textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="10">{{ old("kondisi_lain_bangunan.$index", $kondisi_lain_bangunan) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -161,7 +161,7 @@
@endforeach @endforeach
@else @else
<div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full"> <div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="3">{{ old('kondisi_lain_bangunan.0', $forminspeksi['fakta']['kondisi_lain_bangunan'][0] ?? '') }}</textarea> <textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="10">{{ old('kondisi_lain_bangunan.0', $forminspeksi['fakta']['kondisi_lain_bangunan'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -191,7 +191,7 @@
@foreach ($informasi_dokument as $index => $document) @foreach ($informasi_dokument as $index => $document)
<div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full"> <div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="informasi_dokument[]" rows="3">{{ old("informasi_dokument.$index", $document) }}</textarea> <textarea class="textarea mt-2" name="informasi_dokument[]" rows="10">{{ old("informasi_dokument.$index", $document) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
@@ -200,7 +200,7 @@
@endforeach @endforeach
@else @else
<div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full"> <div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="informasi_dokument[]" rows="3">{{ old('informasi_dokument.0', isset($forminspeksi['fakta']['informasi_dokument'][0]) ? $forminspeksi['fakta']['informasi_dokument'][0] : '') }} <textarea class="textarea mt-2" name="informasi_dokument[]" rows="10">{{ old('informasi_dokument.0', isset($forminspeksi['fakta']['informasi_dokument'][0]) ? $forminspeksi['fakta']['informasi_dokument'][0] : '') }}
</textarea> </textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" <button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;"> style="display: none;">

File diff suppressed because it is too large Load Diff

View File

@@ -1,21 +1,33 @@
<div class=" card w-full bg-white rounded-lg shadow-md "> <div class=" card w-full bg-white rounded-lg shadow-md ">
<div class="card-header bg-agi-50"> <div class="card-header bg-agi-50">
@php @php
$title = $title ?? 'Form Inspeksi'; $title = $title ?? 'Form Inspeksi';
@endphp @endphp
<h3 class="card-title uppercase"> <h3 class="card-title uppercase">
{{ $title }} {{ $title }}
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
@php
use Illuminate\Support\Facades\Route;
@endphp
@if (isset($id)) @if (isset($id))
<a href="{{ route($backLink, ['id' => $id]) }}" class="btn btn-xs btn-info"> <a href="{{ route($backLink, ['id' => $id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@else
@if (Auth::user()->hasAnyRole(['administrator', 'senior-officer', 'EO Appraisal', 'DD Appraisal']) &&
Route::currentRouteName('otorisator.show'))
<a href="{{ route('otorisator.show', ['id' => $permohonan->id, 'type' => 'Pelaporan']) }}"
class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
@else @elseif (Auth::user()->hasAnyRole(['administrator', 'surveyor']) && Route::currentRouteName('penilai.show'))
<a href="{{ url()->previous() }}" class="btn btn-xs btn-info"> <a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
@endif @endif
@endif
{{-- <a href="{{ route('surveyor.show', ['id' => request('inspeksi')]) }}" class="btn btn-xs btn-info"> {{-- <a href="{{ route('surveyor.show', ['id' => request('inspeksi')]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> --}} </a> --}}
@@ -135,8 +147,8 @@
<label class="form-label max-w-56">Jenis Aset</label> <label class="form-label max-w-56">Jenis Aset</label>
<div> <div>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->debiture->documents)) @if (isset($permohonan->documents))
@foreach ($permohonan->debiture->documents as $item) @foreach ($permohonan->documents as $item)
<p class="text-2sm text-gray-700">{{ $item->jenisJaminan->name }}</p> <p class="text-2sm text-gray-700">{{ $item->jenisJaminan->name }}</p>
<input type="hidden" name="jenis_asset_name" value="{{ $item->jenisJaminan->name }}"> <input type="hidden" name="jenis_asset_name" value="{{ $item->jenisJaminan->name }}">
@endforeach @endforeach
@@ -260,12 +272,14 @@
</div> </div>
</div> </div>
<div class="card"> <div class="card">
<div class="card-header bg-agi-50"> <div class="card-header bg-agi-50">
<h1 class="text-md font-medium text-gray-900 uppercase">Status</h1> <h1 class="text-md font-medium text-gray-900 uppercase">Status</h1>
</div> </div>
<div class="card-body"> <div class="card-body w-full">
@include('lpj::component.detail-jaminan', ['status' => true]) @include('lpj::component.detail-jaminan', ['status' => true])
<div class=" mx-auto rounded-lg overflow-hidden"> <div class=" mx-auto rounded-lg overflow-hidden">
<div class="py-4 "> <div class="py-4 ">
<h1 class="text-md font-medium text-gray-900">Hubungan cadeb/debitur dengan Pemilik Jaminan</h1> <h1 class="text-md font-medium text-gray-900">Hubungan cadeb/debitur dengan Pemilik Jaminan</h1>
@@ -275,7 +289,7 @@
<label class="form-label max-w-56">Pemilik Jaminan</label> <label class="form-label max-w-56">Pemilik Jaminan</label>
<div> <div>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->documents as $dokumen)
@php @php
$hubCadebPemilik = $dokumen->pemilik->hubungan_pemilik->name ?? 'N/A'; $hubCadebPemilik = $dokumen->pemilik->hubungan_pemilik->name ?? 'N/A';
@endphp @endphp
@@ -544,7 +558,7 @@
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="village_code" class="form-label max-w-56">Kelurahan</label> <label for="village_code" class="form-label max-w-56">Desa/Kelurahan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<select id="village_code" name="village_code" class="select w-full"> <select id="village_code" name="village_code" class="select w-full">
<option value="">Pilih Kelurahan</option> <option value="">Pilih Kelurahan</option>
@@ -557,9 +571,10 @@
} }
} }
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
loadSavedLocationData(); loadSavedLocationData();
}); });
// Fungsi untuk memuat data lokasi yang tersimpan
</script> </script>
@include('lpj::surveyor.js.utils') @include('lpj::surveyor.js.utils')

Some files were not shown because too many files have changed in this diff Show More