feat(lpj): Tingkatkan kontrol akses, query pembayaran, upload, dan UI

- Izinkan penghapusan dokumen jaminan untuk status 'order'/'revisi'
- Longgarkan guard admin sementara (comment response 403) pada aksi hapus
- Tambah transaksi DB saat hapus dokumen (begin/commit/rollback)
- Sesuaikan filter daftar pembayaran; hilangkan blok where `belum_bayar`/`jenis_penilaian=1`
- Tambah metode `handleUpload()` dengan `storeAs` ke disk `public`
- Rap-penilai: tambah tombol Back; peran 'penilai' diizinkan menyimpan
- Authorization: rapikan kelas Tailwind dan validasi keterangan saat revisi
- Persetujuan penawaran: gunakan optional chaining saat render nominal bayar
- Surveyor/tanah: gunakan `detail` alih-alih `details` saat hitung luas
- Komponen lampiran-dokumen: perbaiki atribut `textarea` dan penataan id
This commit is contained in:
Daeng Deni Mardaeni
2025-11-05 16:46:52 +07:00
parent e773b82218
commit 25011d1798
8 changed files with 37 additions and 24 deletions

View File

@@ -61,7 +61,7 @@
</div>
<div class="md:col-span-2">
<label for="keterangan" class="block text-sm font-medium text-gray-700">Keterangan</label>
<textarea name="keterangan" id="keterangan" rows="3" class="textarea mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md"></textarea>
<textarea name="keterangan" rows="3" class="textarea mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 rounded-md"></textarea>
</div>
</div>
<div class="mt-4">

View File

@@ -19,8 +19,11 @@
<h3 class="uppercase card-title">
RAP
</h3>
<div class="flex gap-2 items-center">
<a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="grid gap-5 card-body">
<div class="flex flex-wrap gap-2.5 items-baseline lg:flex-nowrap">
@@ -66,7 +69,7 @@
@include('lpj::surveyor.components.header')
@include('lpj::surveyor.components.rap')
<div class="flex gap-2 justify-end" style="margin-right: 20px; margin-top: 20px">
@if (Auth::user()->hasAnyRole(['senior-officer', 'surveyor', 'administrator']))
@if (Auth::user()->hasAnyRole(['senior-officer', 'penilai', 'administrator']))
<button type="button" class="btn btn-primary" id="saveButton" onclick="submitData()"
{{ $permohonan->status == 'proses-paparan' || ($permohonan->status == 'proses-laporan' && Auth::user()->hasAnyRole(['surveyor'])) ? 'disabled' : '' }}>
<i class="ki-filled ki-save-2"></i>

View File

@@ -5,7 +5,7 @@
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="grid gap-5 mx-auto w-full lg:gap-7.5">
@include('lpj::component.detail-jaminan',['backLink' => 'authorization.index'])
<div class="card">
@@ -13,30 +13,30 @@
<input type="hidden" name="_method" value="PUT">
@csrf
<div class="card-body lg:py-7.5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="flex flex-wrap gap-2.5 items-baseline lg:flex-nowrap">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" id="keterangan" name="keterangan"></textarea>
<em class="alert text-danger text-sm" id="keterangan-message"></em>
<em class="text-sm alert text-danger" id="keterangan-message"></em>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mt-2" id="fileUploadSection">
<div class="flex flex-wrap gap-2.5 items-baseline mt-2 lg:flex-nowrap" id="fileUploadSection">
<label class="form-label max-w-56">
Upload File Revisi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" class="file-input" id="revisionFile" name="attachment">
<em class="alert text-danger text-sm hidden" id="file-message"></em>
<em class="hidden text-sm alert text-danger" id="file-message"></em>
</div>
</div>
</div>
<div class="card-footer flex justify-end">
<div class="flex justify-end card-footer">
<button type="submit" name="status" value="preregister" class="btn btn-success">
Approve
</button>
<button type="submit" name="status" value="revisi" id="revisi" class="btn btn-warning ml-3">
<button type="submit" name="status" value="revisi" id="revisi" class="ml-3 btn btn-warning">
Revisi
</button>
</div>
@@ -58,7 +58,7 @@
form.addEventListener('submit', function(event) {
if (event.submitter === revisiBtn && keterangan.value === '') {
if (event.submitter === revisiBtn && keterangan.text === '') {
event.preventDefault();
keteranganMessage.textContent = 'Catatan harus diisi.';
} else {

View File

@@ -193,9 +193,9 @@
nominal_bayar: {
title: 'Nominal Bayar',
render: (item, data) => {
return data.penawaran_tender.persetujuan.nominal_bayar ?
`${window.formatRupiah(data.penawaran_tender.persetujuan.nominal_bayar)}` :
`${window.formatRupiah(data.penawaran_tender.persetujuan.biaya_final)}`;
return data.penawaran_tender?.persetujuan?.nominal_bayar ?
`${window.formatRupiah(data.penawaran_tender.persetujuan?.nominal_bayar)}` :
`${window.formatRupiah(data.penawaran_tender.persetujuan?.biaya_final)}`;
},
},
catatan: {

View File

@@ -13,11 +13,11 @@
@if (isset($permohonan->documents))
@foreach ($permohonan->documents as $item)
@php
@php
$total_luas_tanah = 0;
$jenis_legalitas_jaminan_id = 0;
if (isset($item->details)) {
$total_luas_tanah = calculateTotalLuas($item->details, 'luas_tanah', 1, 27, 3);
if (isset($item->detail)) {
$total_luas_tanah = calculateTotalLuas($item->detail, 'luas_tanah', 1, 27, 3);
}
@endphp
<input type="hidden" id="jenis_legalistas_jaminan_tanah_id"