diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index 6c2411f..51364d9 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -383,7 +383,8 @@ public function bulkDownload() { $dokumenIds = request()->get('jaminan'); // Expecting an array of dokumen_jaminan_id - $documents = DetailDokumenJaminan::where('dokumen_jaminan_id', $dokumenIds)->get(); + $documents = DokumenJaminan::where('id', $dokumenIds)->with(['jenisJaminan', 'detail','debiture'])->get(); + if ($documents->isEmpty()) { return redirect()->back()->with('error', 'No documents found for the provided IDs.'); } @@ -394,18 +395,24 @@ if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) { foreach ($documents as $document) { - if($document->dokumen_jaminan) { - $files = is_array(json_decode($document->dokumen_jaminan)) ? json_decode( - $document->dokumen_jaminan, - ) : [$document->dokumen_jaminan]; + $jenisJaminan = $document->debiture->permohonan->nomor_registrasi ?? 'Uncategorized'; + $folderName = $this->sanitizeFolderName($jenisJaminan); - foreach ($files as $file) { - $filePath = storage_path('app/public/' . $file); - if (file_exists($filePath)) { - $zip->addFile($filePath, basename($filePath)); - } else { - // Log or display an error message for missing files - return redirect()->back()->with('error', 'File not found: ' . $filePath); + foreach ($document->detail as $detail) { + if($detail->dokumen_jaminan) { + $folderJaminanName = $this->sanitizeFolderName($detail->jenisLegalitasJaminan->name?? 'Uncategorized'); + $files = is_array(json_decode($detail->dokumen_jaminan)) + ? json_decode($detail->dokumen_jaminan) + : [$detail->dokumen_jaminan]; + + foreach ($files as $file) { + $filePath = storage_path('app/public/' . $file); + if (file_exists($filePath)) { + $zip->addFile($filePath, $folderName . '/' .$folderJaminanName.'/'.basename($filePath)); + } else { + // Log or display an error message for missing files + \Log::warning('File not found: ' . $filePath); + } } } } @@ -423,7 +430,13 @@ 'Content-Type' => 'application/zip', 'Content-Disposition' => 'attachment; filename="' . $zipFileName . '"', 'Content-Length' => filesize($zipFilePath), - ])->deleteFileAfterSend(false); + ])->deleteFileAfterSend(true); + } + + private function sanitizeFolderName($name) + { + // Remove any characters that are not allowed in folder names + return preg_replace('/[^a-zA-Z0-9_\-]/', '_', $name); }