diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index 90c8000..e46dcec 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -225,58 +225,64 @@ $document = DokumenJaminan::find($jaminan); $document->update($validate); + // Get existing detail documents + $existingDetails = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get()->keyBy('id'); + if($request->jenis_legalitas_jaminan_id){ foreach($request->jenis_legalitas_jaminan_id as $key => $value){ - if (isset($request->dokumen_jaminan[$key])) { - $file = $request->dokumen_jaminan[$key]; - if ($file) { - $file_name = $file->getClientOriginalName(); - } + $detailData = [ + 'dokumen_jaminan_id' => $document->id, + 'jenis_legalitas_jaminan_id' => $value, + 'name' => $request->name[$key], + 'keterangan' => $request->keterangan[$key], + ]; - if (isset($file_name)) { - $file->storeAs( - 'public/jaminan/' . $debitur->id . '/' . $document->id . '/', - $file_name, - ); - - $detail = [ - 'dokumen_jaminan_id' => $document->id, - 'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key], - 'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name, - 'name' => $request->name[$key], - 'keterangan' => $request->keterangan[$key], - ]; - - if (isset($request->detail_dokumen_jaminan_id[$key])) { - $detailDocument = DetailDokumenJaminan::find( - $request->detail_dokumen_jaminan_id[$key], + $dokumenJaminan = []; + if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) { + foreach($request->dokumen_jaminan[$key] as $file) { + if ($file) { + $file_name = $file->getClientOriginalName(); + $file->storeAs( + 'public/jaminan/' . $debitur->id . '/' . $document->id . '/', + $file_name ); - - $detailDocument->update($detail); - $detailDocument->save(); - } else { - $detailDocument = DetailDokumenJaminan::create($detail); - $detailDocument->save(); + $dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; } } - } else { - $detail = [ - 'dokumen_jaminan_id' => $document->id, - 'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key], - 'name' => $request->name[$key], - 'keterangan' => $request->keterangan[$key], - ]; + } - if (isset($request->detail_dokumen_jaminan_id[$key])) { - $detailDocument = DetailDokumenJaminan::find( - $request->detail_dokumen_jaminan_id[$key], - ); - $detailDocument->update($detail); + if (!empty($dokumenJaminan)) { + $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan); + } + + if (isset($request->detail_dokumen_jaminan_id[$key])) { + $detailId = $request->detail_dokumen_jaminan_id[$key]; + $detailDocument = $existingDetails->get($detailId); + if ($detailDocument) { + // Merge new files with existing ones + if (!empty($dokumenJaminan)) { + $existingFiles = json_decode($detailDocument->dokumen_jaminan, true) ?: []; + $mergedFiles = array_merge($existingFiles, $dokumenJaminan); + $detailData['dokumen_jaminan'] = json_encode($mergedFiles); + } + $detailDocument->update($detailData); + $existingDetails->forget($detailId); } + } else { + DetailDokumenJaminan::create($detailData); } } } + // Delete any remaining existing details that weren't updated + foreach ($existingDetails as $detail) { + $files = json_decode($detail->dokumen_jaminan, true) ?: []; + foreach ($files as $file) { + Storage::delete('public/' . $file); + } + $detail->delete(); + } + DB::commit(); return redirect()->route('debitur.jaminan.index', $id)->with( 'success', @@ -436,8 +442,8 @@ $existingLegalitas[] = [ 'id' => $detail->id, 'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id, - 'name' => $detail->name, - 'dokumen_jaminan' => $detail->dokumen_jaminan, + 'name' => $detail->jenisLegalitasJaminan->name, + 'dokumen_jaminan' => json_decode($detail->dokumen_jaminan) ?? $detail->dokumen_jaminan, 'custom_field' => $detail->jenisLegalitasJaminan->custom_field, 'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type, 'details' => $detail->details, diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index be5c1c0..7e649a0 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -167,8 +167,16 @@ @if(isset($detail->dokumen_jaminan)) - {{ basename($detail->dokumen_jaminan) }} - + @php + $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan]; + @endphp + @foreach($dokumen_jaminan as $index => $dokumen) + + {{ basename($dokumen) }} + + + @endforeach @endif @@ -527,6 +535,25 @@ .catch(error => console.error('Error:', error)); } + function renderExistingFiles(dokumenJaminan, debiturId, itemId) { + if (typeof dokumenJaminan === 'string') { + return ` + + ${dokumenJaminan.split('/').pop()} + + + `; + } else if (Array.isArray(dokumenJaminan)) { + return dokumenJaminan.map(file => ` + + ${file.split('/').pop()} + + + `).join(''); + } + return ''; + } + function addFileInput(index) { const container = document.getElementById(`file-container-${index}`); const newInput = document.createElement('div');