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\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Http\UploadedFile;
use Log; use Log;
use Modules\Location\Models\City; use Modules\Location\Models\City;
use Modules\Location\Models\District; use Modules\Location\Models\District;
@@ -249,7 +250,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[$key]) ? json_encode(array_values($request->custom_field[$key])) : ''
]; ];
$dokumenJaminan = []; $dokumenJaminan = [];
@@ -279,7 +280,6 @@
} }
// Setelah loop, periksa apakah ada dokumen yang dihapus // Setelah loop, periksa apakah ada dokumen yang dihapus
$existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null); $existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null);
@@ -287,26 +287,53 @@
$existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? []; $existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? [];
$existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? []; $existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? [];
$newDokumenJaminan = [];
$newDokumenNomor = [];
foreach ($existingDokumen as $index => $existingFile) {
// Jika jumlah dokumen berkurang, berarti ada yang dihapus if (isset($request->dokumen_jaminan[$key][$index])) {
if (count($existingDokumen) > count($dokumenJaminan)) { $file = $request->dokumen_jaminan[$key][$index];
$dokumenJaminan = $existingDokumen; if ($file instanceof \Illuminate\Http\UploadedFile) {
$dokumenNomor = $existingNomor; // File baru diupload
foreach ($request->dokumen_jaminan[$key] as $index => $file) { $file_name = $file->getClientOriginalName();
if ($file === null) { $file->storeAs('public/jaminan/' . $debitur->id . '/' . $document->id . '/', $file_name);
// Hapus dokumen yang tidak ada lagi $newDokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
unset($dokumenJaminan[$index]); $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
unset($dokumenNomor[$index]);
} elseif (is_string($file) && !empty($file)) { } elseif (is_string($file) && !empty($file)) {
// Update nomor dokumen untuk file yang tidak diubah // File tidak diubah
$dokumenNomor[$index] = $request->dokumen_nomor[$key][$index] ?? '-'; $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> <i class="ki-filled ki-cloud-download"></i>
</a> </a>
</span> </span>
@if($loop->index > 0)
<button type="button" class="flex-none btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button> <button type="button" class="flex-none btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button>
@endif
</div> </div>
@if($detail->details) @if($detail->details)