fix(dokumen_jaminan): perbaiki pengambilan dan penyimpanan data dokumen jaminan
- Memperbaiki pengecekan kondisi saat mengambil detail dokumen. - Menambahkan penanganan untuk file yang diupload dan yang tidak diubah. - Memastikan nomor dokumen selalu diperbarui, baik saat file diubah atau tidak. - Menghapus dokumen yang tidak ada lagi dari daftar jika ada perubahan.
This commit is contained in:
@@ -104,7 +104,7 @@
|
||||
$file_name,
|
||||
);
|
||||
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
|
||||
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
|
||||
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -249,7 +249,7 @@
|
||||
'jenis_legalitas_jaminan_id' => $value,
|
||||
'name' => $request->name[$key],
|
||||
'keterangan' => $request->keterangan[$key],
|
||||
'details' => isset($request->custom_field[$value]) ? json_encode($request->custom_field[$value]) : ''
|
||||
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : ''
|
||||
];
|
||||
|
||||
$dokumenJaminan = [];
|
||||
@@ -257,60 +257,75 @@
|
||||
|
||||
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
|
||||
foreach ($request->dokumen_jaminan[$key] as $index => $file) {
|
||||
if ($file) {
|
||||
if ($file instanceof \Illuminate\Http\UploadedFile) {
|
||||
// Jika file baru diupload
|
||||
$file_name = $file->getClientOriginalName();
|
||||
$file->storeAs(
|
||||
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
|
||||
$file_name,
|
||||
);
|
||||
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
|
||||
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
|
||||
} elseif (is_string($file) && !empty($file)) {
|
||||
// Jika file tidak diubah, gunakan path yang sudah ada
|
||||
$dokumenJaminan[] = $file;
|
||||
} else {
|
||||
// Jika file kosong atau null, tambahkan placeholder atau skip
|
||||
$dokumenJaminan[] = null; // atau skip dengan continue;
|
||||
}
|
||||
|
||||
// Selalu update dokumen_nomor, baik file diubah atau tidak
|
||||
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Setelah loop, periksa apakah ada dokumen yang dihapus
|
||||
$existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null);
|
||||
|
||||
if ($existingDetail) {
|
||||
$existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? [];
|
||||
$existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? [];
|
||||
|
||||
|
||||
|
||||
// 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]);
|
||||
} elseif (is_string($file) && !empty($file)) {
|
||||
// Update nomor dokumen untuk file yang tidak diubah
|
||||
$dokumenNomor[$index] = $request->dokumen_nomor[$key][$index] ?? '-';
|
||||
}
|
||||
}
|
||||
// Reset array keys
|
||||
$dokumenJaminan = array_values($dokumenJaminan);
|
||||
$dokumenNomor = array_values($dokumenNomor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!empty($dokumenJaminan)) {
|
||||
$detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
|
||||
$detailData['dokumen_nomor'] = json_encode($dokumenNomor);
|
||||
$detailData['dokumen_nomor'] = json_encode($dokumenNomor);
|
||||
}
|
||||
|
||||
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,
|
||||
) ?: [];
|
||||
$existingNomor = json_decode(
|
||||
$detailDocument->dokumen_nomor,
|
||||
true,
|
||||
) ?: [];
|
||||
$mergedFiles = array_merge($existingFiles, $dokumenJaminan);
|
||||
$mergedNomor = array_merge($existingNomor, $dokumenNomor);
|
||||
$detailData['dokumen_jaminan'] = json_encode($mergedFiles);
|
||||
$detailData['dokumen_nomor'] = json_encode($mergedNomor);
|
||||
}
|
||||
$detailDocument->update($detailData);
|
||||
$existingDetails->forget($detailId);
|
||||
}
|
||||
$detailDocument->update($detailData);
|
||||
|
||||
} 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',
|
||||
@@ -342,6 +357,7 @@
|
||||
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
|
||||
|
||||
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
|
||||
|
||||
$legalitas = '';
|
||||
if ($_jenisJaminan) {
|
||||
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
|
||||
|
||||
Reference in New Issue
Block a user