Merge branch 'staging' into feature/senior-officer

This commit is contained in:
majid
2024-12-29 22:20:22 +07:00
4 changed files with 206 additions and 119 deletions

View File

@@ -23,6 +23,7 @@
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;
class PermohonanController extends Controller class PermohonanController extends Controller
{ {
@@ -180,6 +181,11 @@
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query(); $query = Permohonan::query();
if(!Auth::user()->hasAnyRole(['administrator'])) {
$query = $query->where('branch_id', Auth::user()->branch_id);
}
$query = $query->orderBy('nomor_registrasi', 'desc'); $query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {

View File

@@ -12,6 +12,90 @@
"app/Helpers/Lpj.php" "app/Helpers/Lpj.php"
], ],
"menu": { "menu": {
"otorisator": [
{
"title": "Permohonan",
"path": "authorization",
"icon": "ki-filled ki-security-user text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-eo"
]
},
{
"title": "Otorisasi Penawaran",
"path": "otorisasitender.penawaran",
"icon": "ki-filled ki-brifecase-tick text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin",
"EO Appraisal",
"DD Appraisal"
]
},
{
"title": "Pembayaran",
"path": "pembayaran.approval",
"icon": "ki-filled ki-ensure text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin",
"EO Appraisal",
"DD Appraisal"
]
},
{
"title": "Pelaporan",
"path": "otorisator.pelaporan",
"icon": "ki-filled ki-filter-tablet text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
]
},
{
"title": "Pembatalan",
"path": "otorisator.pembatalan",
"icon": "ki-filled ki-file-deleted text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
]
},
{
"title": "SLA",
"path": "otorisator.sla",
"icon": "ki-filled ki-calendar-tick text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
]
}
],
"main": [ "main": [
{ {
"title": "Permohonan", "title": "Permohonan",
@@ -110,35 +194,6 @@
} }
] ]
}, },
{
"title": "Otorisasi Tender",
"path": "otorisasitender",
"icon": "ki-filled ki-brifecase-tick text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin",
"EO Appraisal",
"DD Appraisal"
],
"sub": [
{
"title": "Otorisasi Penawaran",
"path": "otorisasitender.penawaran",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin",
"EO Appraisal",
"DD Appraisal"
]
}
]
},
{ {
"title": "SPK", "title": "SPK",
"path": "spk", "path": "spk",
@@ -175,18 +230,6 @@
"pemohon-ao" "pemohon-ao"
] ]
}, },
{
"title": "Approval Pembayaran",
"path": "pembayaran.approval",
"icon": "ki-filled ki-ensure text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{ {
"title": "Data Debitur", "title": "Data Debitur",
"path": "debitur", "path": "debitur",
@@ -200,18 +243,6 @@
"pemohon-eo" "pemohon-eo"
] ]
}, },
{
"title": "Authorization",
"path": "authorization",
"icon": "ki-filled ki-security-user text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-eo"
]
},
{ {
"title": "Assignment", "title": "Assignment",
"path": "penilaian", "path": "penilaian",
@@ -236,57 +267,6 @@
"senior-officer" "senior-officer"
] ]
}, },
{
"title": "Otorisator",
"path": "otorisator",
"icon": "ki-filled ki-security-user text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
],
"sub": [
{
"title": "Pelaporan",
"path": "otorisator.pelaporan",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
]
},
{
"title": "Pembatalan",
"path": "otorisator.pembatalan",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer"
]
},
{
"title": "SLA",
"path": "otorisator.sla",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer"
]
}
]
},
{ {
"title": "Surveyor", "title": "Surveyor",
"path": "surveyor", "path": "surveyor",

View File

@@ -127,8 +127,10 @@
render: (item, data) => { render: (item, data) => {
if(data.permohonan) { if(data.permohonan) {
return `${data.permohonan.nomor_registrasi}`; return `${data.permohonan.nomor_registrasi}`;
} else if(data.penawaran) {
return `${data.penawaran.permohonan.nomor_registrasi}`;
} }
return `${data.penawaran.permohonan.nomor_registrasi}`; return '';
}, },
}, },
nama_debitur: { nama_debitur: {
@@ -136,8 +138,11 @@
render: (item, data) => { render: (item, data) => {
if(data.permohonan) { if(data.permohonan) {
return `${data.permohonan.debiture.name}`; return `${data.permohonan.debiture.name}`;
} else if(data.penawaran) {
return `${data.penawaran.permohonan.debiture.name}`;
} }
return `${data.penawaran.permohonan.debiture.name}`; return '';
}, },
}, },
cabang: { cabang: {
@@ -145,8 +150,10 @@
render: (item, data) => { render: (item, data) => {
if(data.permohonan) { if(data.permohonan) {
return `${data.permohonan.branch.name}`; return `${data.permohonan.branch.name}`;
} else if(data.penawaran) {
return `${data.penawaran.permohonan.branch.name}`;
} }
return `${data.penawaran.permohonan.branch.name}`; return '';
}, },
}, },
tanggal_setor: { tanggal_setor: {

View File

@@ -113,8 +113,8 @@
<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">Faktor Negatif</label> <label class="form-label max-w-56">Faktor Negatif</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full"> <div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['fakta_negatif'])) @if (!empty($resumeData['fakta']['fakta_negatif']))
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif) @foreach ($resumeData['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="3">{{ 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"
@@ -125,7 +125,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="3">{{ old('fakta_negatif.0', $resumeData['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>
@@ -165,6 +165,23 @@
</thead> </thead>
</thead> </thead>
<tbody> <tbody>
@if(!empty($resumeData['fisik']))
@foreach($resumeData['fisik'] as $item)
<tr>
<td class="text-center">
<input type="text" name="fisik_sertifikat[]" class="input number-format" value="{{ $item['sertifikat'] }}">
</td>
<td class="text-center">
<input type="text" name="fisik_luas_tanah[]" class="input number-format" value="{{ $item['luas_tanah'] }}">
</td>
<td class="text-center"> <input type="text" name="fisik_luas_bangunan[]" value="{{ $item['luas_bangunan'] }}"
class="input number-format"></td>
<td class="text-center">
<input type="text" name="fisik_nilai[]" class="input number-format" value="{{ $item['nilai'] }}">
</td>
</tr>
@endforeach
@else
<tr> <tr>
<td class="text-center"> <td class="text-center">
<input type="text" name="fisik_sertifikat[]" class="input number-format"> <input type="text" name="fisik_sertifikat[]" class="input number-format">
@@ -173,11 +190,12 @@
<input type="text" name="fisik_luas_tanah[]" class="input number-format"> <input type="text" name="fisik_luas_tanah[]" class="input number-format">
</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"></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 number-format">
</td> </td>
</tr> </tr>
@endif
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -200,6 +218,25 @@
</thead> </thead>
</thead> </thead>
<tbody> <tbody>
@if(!empty($resumeData['fisik']))
@foreach($resumeData['fisik'] as $item)
<tr>
<td class="text-center">
<input type="text" name="sesuai_sertifikat[]" class="input number-format" value="{{ $item['sertifikat'] }}">
</td>
<td class="text-center">
<input type="text" name="sesuai_luas_tanah[]" class="input number-format" value="{{ $item['luas_tanah'] }}">
</td>
<td class="text-center">
<input type="text" name="sesuai_luas_bangunan[]"
class="input number-format" value="{{ $item['luas_bangunan'] }}">
</td>
<td class="text-center">
<input type="text" name="sesuai_nilai[]" class="input number-format" value="{{ $item['nilai'] }}">
</td>
</tr>
@endforeach
@else
<tr> <tr>
<td class="text-center"> <td class="text-center">
<input type="text" name="sesuai_sertifikat[]" class="input number-format"> <input type="text" name="sesuai_sertifikat[]" class="input number-format">
@@ -209,17 +246,61 @@
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="sesuai_luas_bangunan[]" <input type="text" name="sesuai_luas_bangunan[]"
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 number-format">
</td> </td>
</tr> </tr>
@endif
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
@if(!empty($resumeData['tambahan']))
<div class="gird gap-5">
<label class="form-label max-w-56">3. Tambahan</label>
<div class="flex flex-wrap items-baseline w-full">
<table
class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5">
<thead>
<tr>
<th class="text-center">Sertipikat</th>
<th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th>
</tr>
</thead>
</thead>
<tbody>
@if(!empty($resumeData['tambahan']))
@foreach($resumeData['tambahan'] as $item)
<tr>
<td class="text-center">
<input type="text" name="tambahan_sertifikat[]" class="input number-format" value="{{ $item['sertifikat'] }}">
</td>
<td class="text-center">
<input type="text" name="tambahan_luas_tanah[]" class="input number-format" value="{{ $item['luas_tanah'] }}">
</td>
<td class="text-center">
<input type="text" name="tambahan_luas_bangunan[]"
class="input number-format" value="{{ $item['luas_bangunan'] }}">
</td>
<td class="text-center">
<input type="text" name="tambahan_nilai[]" class="input number-format" value="{{ $item['nilai'] }}">
</td>
</tr>
@endforeach
@endif
</tbody>
</table>
</div>
</div>
@endif
<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>
@@ -250,15 +331,14 @@
@endsection @endsection
@include('lpj::surveyor.js.utils') @include('lpj::surveyor.js.utils')
<script type="text/javascript"> <script type="text/javascript">
console.log('LPJ Data:', @json($resumeData)); let counter = 3;
let counter = 1;
function tambahKesimpulanNilai() { function tambahKesimpulanNilai() {
const kesimpulan = document.getElementById('kesimpulan'); const kesimpulan = document.getElementById('kesimpulan');
kesimpulan.innerHTML += ` kesimpulan.innerHTML += `
<div class="grid gap-5 w-full" id="kesimpulan-${counter}"> <div class="grid gap-5 w-full" id="kesimpulan-${counter}">
<label class="form-label kesimpulan max-w-56">${counter}. SESUAI IMB</label> <label class="form-label kesimpulan max-w-56">${counter}. Tambahan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="tabel-container w-full"> <div class="tabel-container w-full">
<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">
@@ -274,19 +354,19 @@ console.log('LPJ Data:', @json($resumeData));
<tbody> <tbody>
<tr> <tr>
<td class="text-center"> <td class="text-center">
<input type="text" name="sertipikat[]" <input type="text" name="tambahan_sertifikat[]"
class="input number-format"> class="input number-format">
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="luas_tanah[]" <input type="text" name="tambahan_luas_tanah[]"
class="input number-format"> class="input number-format">
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="luat_bangunan[]" <input type="text" name="tambahan_luas_bangunan[]"
class="input number-format"> class="input number-format">
</td> </td>
<td class="text-center"> <td class="text-center">
<input type="text" name="nilai_pasar_wajar[]" <input type="text" name="tambahan_nilai[]"
class="input number-format"> class="input number-format">
</td> </td>
<td class="text-center"> <td class="text-center">
@@ -397,6 +477,7 @@ console.log('LPJ Data:', @json($resumeData));
}, },
fisik: [], fisik: [],
sesuai_imb: [], sesuai_imb: [],
tambahan:[],
keterangan: "" keterangan: ""
}; };
@@ -436,6 +517,19 @@ console.log('LPJ Data:', @json($resumeData));
} }
}); });
document.querySelectorAll('table tbody tr').forEach(row => {
const imbData = {
sertifikat: row.querySelector('input[name="tambahan_sertifikat[]"]')?.value || "",
luas_tanah: row.querySelector('input[name="tambahan_luas_tanah[]"]')?.value || "",
luas_bangunan: row.querySelector('input[name="tambahan_luas_bangunan[]"]')?.value || "",
nilai: row.querySelector('input[name="tambahan_nilai[]"]')?.value || ""
};
console.log(imbData);
if (imbData.sertifikat) {
jsonData.tambahan.push(imbData);
}
});
// Ambil keterangan // Ambil keterangan
const keterangan = formElement.querySelector('textarea[name="keterangan"]')?.value || ""; const keterangan = formElement.querySelector('textarea[name="keterangan"]')?.value || "";
jsonData.keterangan = keterangan; jsonData.keterangan = keterangan;