From f7c85fc24edcdc95a6f711efdc6bc76d4f8f4d6a Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Fri, 7 Mar 2025 09:53:55 +0700 Subject: [PATCH] feat(penilai): tambahkan fitur unggah foto dan simpan memo dengan foto - Menambahkan metode `uploadTempPhoto` untuk mengunggah foto sementara. - Menambahkan metode `storeMemoWithPhotos` untuk menyimpan memo beserta foto. - Memperbarui rute untuk mendukung pengunggahan foto dan penyimpanan memo. - Memperbarui tampilan untuk menampilkan foto yang sudah ada dan mengubah ID dropzone. --- app/Http/Controllers/PenilaiController.php | 72 ++++++++++- .../views/penilai/components/memo.blade.php | 116 +++++++++++++++--- routes/web.php | 4 + 3 files changed, 170 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index e7c8ef4..218ad3e 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -4,6 +4,7 @@ namespace Modules\Lpj\Http\Controllers; use Illuminate\Http\Request; use Barryvdh\DomPDF\Facade\Pdf; // https://github.com/barryvdh/laravel-dompdf +use Illuminate\Support\Facades\Storage; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Inspeksi; use Modules\Lpj\Models\Penilai; @@ -756,10 +757,10 @@ class PenilaiController extends Controller if (!$allComplete) { - $message = $rap - ? 'Harap Mengisi laporan terlebih dahulu' + $message = $rap + ? 'Harap Mengisi laporan terlebih dahulu' : 'Harap Mengisi laporan terlebih dahulu atau kertas kerja'; - + return response()->json([ 'success' => false, 'message' => $message, @@ -801,6 +802,18 @@ class PenilaiController extends Controller } } + public function uploadTempPhoto(Request $request) + { + 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]); + } + + return response()->json(['success' => false], 400); + } + public function storeResume(Request $request) { try { @@ -919,6 +932,59 @@ class PenilaiController extends Controller } } + public function storeMemoWithPhotos(Request $request) + { + try { + $validatedData = $request->validate([ + 'permohonan_id' => 'required|integer', + 'document_id' => 'required|integer', + 'inspeksi_id' => 'required|integer', + 'memo' => 'required', + ]); + + $memoData = json_decode($validatedData['memo'], true); + + $memo = Penilai::updateOrCreate( + [ + 'permohonan_id' => $validatedData['permohonan_id'], + 'dokument_id' => $validatedData['document_id'], + 'inspeksi_id' => $validatedData['inspeksi_id'], + ], + [ + 'memo' => json_encode($memoData), + ] + ); + + // 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++; + } + + // Tambahkan URL foto ke data memo + $memoData['foto'] = $photoUrls; + $memo->memo = json_encode($memoData); + $memo->save(); + } + + return response()->json([ + 'success' => true, + 'message' => 'Memo dan foto berhasil disimpan', + ]); + } catch (Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan: ' . $e->getMessage(), + ], 500); + } + } + public function storeLpjSederhanadanStandard(Request $request) { DB::beginTransaction(); diff --git a/resources/views/penilai/components/memo.blade.php b/resources/views/penilai/components/memo.blade.php index 8646e92..fb5db32 100644 --- a/resources/views/penilai/components/memo.blade.php +++ b/resources/views/penilai/components/memo.blade.php @@ -295,7 +295,7 @@

Upload Foto

-
+
@@ -306,6 +306,9 @@
+ {{-- @include('lpj::penilai.components.foto-lampiran') --}} @@ -337,7 +340,75 @@ @endsection @include('lpj::surveyor.js.utils') - + @endpush diff --git a/routes/web.php b/routes/web.php index 3ad1790..2a52e40 100644 --- a/routes/web.php +++ b/routes/web.php @@ -616,7 +616,11 @@ Route::middleware(['auth'])->group(function () { Route::post('/preoses-laporan/{id}', [PenilaiController::class, 'storePenilaian'])->name('proses.laporan'); Route::post('storeResume', [PenilaiController::class, 'storeResume'])->name('storeResume'); + Route::post('storeMemo', [PenilaiController::class, 'storeMemo'])->name('storeMemo'); + Route::post('store-memo-with-photos', [PenilaiController::class, 'storeMemoWithPhotos'])->name('storeMemoWithPhotos'); + Route::post('upload-temp-photo', [PenilaiController::class, 'uploadTempPhoto'])->name('uploadTempPhoto'); + Route::post('storeRap', [PenilaiController::class, 'storeRap'])->name('storeRap'); Route::post('storeLpjSederhanadanStandard', [PenilaiController::class, 'storeLpjSederhanadanStandard'])->name('storeLpjSederhanadanStandard'); Route::put('revisi-surveyor/{id}', [PenilaiController::class, 'revisiSurveyor'])->name('revisiSurveyor');