From b6e71ac86590f2ab5b0b535cff14497c597d1225 Mon Sep 17 00:00:00 2001 From: majid Date: Fri, 21 Mar 2025 09:55:43 +0700 Subject: [PATCH] fix(memo): perbaikkan upload foto di memo, foto existing hilang ketika upload ulang --- app/Http/Controllers/PenilaiController.php | 113 ++++--- .../views/penilai/components/memo.blade.php | 291 ++++++++++-------- resources/views/penilai/data.json | 25 ++ routes/web.php | 1 + 4 files changed, 268 insertions(+), 162 deletions(-) create mode 100644 resources/views/penilai/data.json diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 74ac7e5..b0e494a 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -834,13 +834,13 @@ class PenilaiController extends Controller } - $cekLpj =$this->checkDataLpj($type, $statusLpj) - if ($permohonan->status_bayar === 'sudah_bayar' && $cekLpj) { - return response()->json([ - 'success' => false, - 'message' => 'Harap mengisi LPJ terlebih dahulu', - ]) - } + // $cekLpj = $this->checkDataLpj($type, $statusLpj); + // if ($permohonan->status_bayar === 'sudah_bayar' && $cekLpj) { + // return response()->json([ + // 'success' => false, + // 'message' => 'Harap mengisi LPJ terlebih dahulu', + // ]); + // } $permohonan->update([ @@ -862,14 +862,69 @@ class PenilaiController extends Controller public function uploadTempPhoto(Request $request) { + $validatedData = $request->validate([ + 'permohonan_id' => 'required|integer', + 'dokument_id' => 'required|integer', + ]); + + $memo = Penilai::firstOrNew([ + 'permohonan_id' => $validatedData['permohonan_id'], + 'dokument_id' => $validatedData['dokument_id'], + ]); + + $existingData = $memo->exists && $memo->memo ? json_decode($memo->memo, true) : []; + $existingData['foto'] = $existingData['foto'] ?? []; + if ($request->hasFile('file')) { - $file = $request->file('file'); - $filename = time() . '_' . $file->getClientOriginalName(); - $path = $file->storeAs('temp_photos', $filename, 'public'); - return response()->json(['success' => true, 'id' => $path]); + + $files = $request->file('file'); + + if (!is_array($files)) { + $files = [$files]; + } + foreach ($files as $file) { + + $filename = time() . '_' . $file->getClientOriginalName(); + $path = $file->storeAs('temp_photos', $filename, 'public'); + $existingData['foto'][] = $path; + + } + // Simpan data memo + $memo->memo = json_encode($existingData); + $memo->save(); + + return response()->json(['success' => true, 'data' => $existingData]); + } + return response()->json(['success' => false], 400); + } + + + public function deleteTempPhoto(Request $request) + { + $validatedData = $request->validate([ + 'permohonan_id' => 'required|integer', + 'dokument_id' => 'required|integer', + 'path' => 'required|string', + ]); + + $memo = Penilai::firstOrNew([ + 'permohonan_id' => $validatedData['permohonan_id'], + 'dokument_id' => $validatedData['dokument_id'], + ]); + + $fotoMemo = json_decode($memo->memo, true); + if (isset($fotoMemo['foto']) && is_array($fotoMemo['foto'])) { + $fotoMemo['foto'] = array_filter($fotoMemo['foto'], function ($photo) use ($validatedData) { + return basename($photo) !== basename($validatedData['path']); + }); + + $fotoMemo['foto'] = array_values($fotoMemo['foto']); + $memo->memo = json_encode($fotoMemo); + $memo->save(); + return response()->json(['success' => true, 'message' => 'Foto berhasil dihapus']); } - return response()->json(['success' => false], 400); + return response()->json(['success' => false, 'message' => 'Foto tidak ditemukan'], 400); } public function storeResume(Request $request) @@ -964,42 +1019,20 @@ class PenilaiController extends Controller 'memo' => 'required', ]); - $memoData = json_decode($validatedData['memo'], true); + $newMemoData = json_decode($validatedData['memo'], true); - $memo = Penilai::updateOrCreate( + $memo = Penilai::firstOrNew( [ 'permohonan_id' => $validatedData['permohonan_id'], 'dokument_id' => $validatedData['document_id'], - - ], - [ - 'memo' => json_encode($memoData), ] ); - // $existingPhotos = isset($memo->memo) ? json_decode($memo->memo) : []; - // dd($existingPhotos); - // Simpan foto-foto - if ($request->hasFile('foto_0')) { - $photoUrls = []; - $index = 0; - while ($request->hasFile("foto_$index")) { - $file = $request->file("foto_$index"); - $fileName = time() . '_' . $file->getClientOriginalName(); - $filePath = $file->storeAs('public/memo_photos', $fileName); - $photoUrls[] = Storage::url($filePath); - $index++; - } + $existingMemoData = isset($memo->memo) ? json_decode($memo->memo, true) : []; + $mergedMemoData = array_merge($existingMemoData, $newMemoData); - // $memoData['foto'] = array_merge($existingPhotos, $photoUrls); - - // }else{ - // $memoData['foto'] = $existingPhotos; - // Tambahkan URL foto ke data memo - $memoData['foto'] = $photoUrls; - $memo->memo = json_encode($memoData); + $memo->memo = json_encode($mergedMemoData); $memo->save(); - } return response()->json([ 'success' => true, @@ -1077,7 +1110,7 @@ class PenilaiController extends Controller 'message' => 'Berhasil menyimpan LPJ', 'data' => $result ], 200); - }catch (\Throwable $e) { + } catch (\Throwable $e) { DB::rollBack(); return response()->json([ 'success' => false, diff --git a/resources/views/penilai/components/memo.blade.php b/resources/views/penilai/components/memo.blade.php index 6fa599a..4bf608d 100644 --- a/resources/views/penilai/components/memo.blade.php +++ b/resources/views/penilai/components/memo.blade.php @@ -186,7 +186,8 @@
+ value="{{ $permohonan->penilaian->updated_at ?? old('tanggal_survey') }}" + @readonly(true)>
@@ -315,10 +316,11 @@