fix(dokumen): perbaiki logika penyimpanan dan penghapusan dokumen jaminan

- Memperbaiki penyimpanan dokumen baru yang diupload.
- Menangani penghapusan dokumen dari storage jika file dihapus.
- Menambahkan logika untuk memperbarui nomor dokumen yang tidak diubah.
- Memastikan detail dokumen yang diupload disimpan dengan benar.
- Menambahkan tombol untuk menghapus input file jika lebih dari satu.
This commit is contained in:
Daeng Deni Mardaeni
2025-03-11 10:35:25 +07:00
parent ea4d784182
commit ce792474c6
2 changed files with 46 additions and 17 deletions

View File

@@ -9,6 +9,7 @@
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\UploadedFile;
use Log;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
@@ -249,7 +250,7 @@
'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : ''
'details' => isset($request->custom_field[$key]) ? json_encode(array_values($request->custom_field[$key])) : ''
];
$dokumenJaminan = [];
@@ -279,7 +280,6 @@
}
// Setelah loop, periksa apakah ada dokumen yang dihapus
$existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null);
@@ -287,26 +287,53 @@
$existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? [];
$existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? [];
$newDokumenJaminan = [];
$newDokumenNomor = [];
// Jika jumlah dokumen berkurang, berarti ada yang dihapus
if (count($existingDokumen) > count($dokumenJaminan)) {
$dokumenJaminan = $existingDokumen;
$dokumenNomor = $existingNomor;
foreach ($request->dokumen_jaminan[$key] as $index => $file) {
if ($file === null) {
// Hapus dokumen yang tidak ada lagi
unset($dokumenJaminan[$index]);
unset($dokumenNomor[$index]);
foreach ($existingDokumen as $index => $existingFile) {
if (isset($request->dokumen_jaminan[$key][$index])) {
$file = $request->dokumen_jaminan[$key][$index];
if ($file instanceof \Illuminate\Http\UploadedFile) {
// File baru diupload
$file_name = $file->getClientOriginalName();
$file->storeAs('public/jaminan/' . $debitur->id . '/' . $document->id . '/', $file_name);
$newDokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
} elseif (is_string($file) && !empty($file)) {
// Update nomor dokumen untuk file yang tidak diubah
$dokumenNomor[$index] = $request->dokumen_nomor[$key][$index] ?? '-';
// File tidak diubah
$newDokumenJaminan[] = $existingFile;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? $existingNomor[$index];
}
// Jika $file adalah null, berarti file dihapus dan tidak perlu ditambahkan ke array baru
} else {
// File dihapus, hapus dari storage jika ada
if (Storage::exists('public/' . $existingFile)) {
Storage::delete('public/' . $existingFile);
}
}
// Reset array keys
$dokumenJaminan = array_values($dokumenJaminan);
$dokumenNomor = array_values($dokumenNomor);
}
//dd($request->dokumen_jaminan[$key]);
// Tambahkan file baru yang mungkin ditambahkan
foreach ($request->dokumen_jaminan[$key] ?? [] as $index => $file) {
if ($file instanceof UploadedFile) {
$file_name = $file->getClientOriginalName();
$path = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
if (!in_array($path, $newDokumenJaminan)) {
$file->storeAs('public/' . dirname($path), $file_name);
$newDokumenJaminan[] = $path;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
}
} elseif (is_string($file) && !empty($file) && !in_array($file, $newDokumenJaminan)) {
$newDokumenJaminan[] = $file;
$newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
}
}
$dokumenJaminan = $newDokumenJaminan;
$dokumenNomor = $newDokumenNomor;
}

View File

@@ -307,7 +307,9 @@
<i class="ki-filled ki-cloud-download"></i>
</a>
</span>
@if($loop->index > 0)
<button type="button" class="flex-none btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button>
@endif
</div>
@if($detail->details)