From dffaadda3b52a740d3ef31a5f55ea75ae5c09dff Mon Sep 17 00:00:00 2001 From: majid Date: Fri, 24 Jan 2025 09:44:59 +0700 Subject: [PATCH] feat(signature): penambahan tanda tangan di surveyor --- app/Http/Controllers/SurveyorController.php | 214 ++++++++++-- .../views/component/signature-pad.blade.php | 5 +- .../surveyor/components/inspeksi.blade.php | 307 +++++++++++++++--- routes/web.php | 6 + 4 files changed, 459 insertions(+), 73 deletions(-) diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index a675b10..fe80ee4 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -165,17 +165,34 @@ class SurveyorController extends Controller $request ); - // Find or create inspeksi record - $inspeksi = Inspeksi::updateOrCreate( - [ + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) + ->where('dokument_id', $request->input('dokument_id')) + ->first(); + + if ($inspeksi) { + // Jika data sudah ada, merge dengan data yang baru + $existingData = json_decode($inspeksi->data_form, true) ?: []; + + $mergedData = $this->arrayMergeRecursive($existingData, $processedData); + + // Update record + $inspeksi->update([ + 'data_form' => json_encode($mergedData), + 'name' => $request->input('type') + ]); + + $responseData = $mergedData; + } else { + // Jika belum ada data, buat record baru + $inspeksi = Inspeksi::create([ 'permohonan_id' => $request->input('permohonan_id'), - 'dokument_id' => $request->input('dokument_id') - ], - [ + 'dokument_id' => $request->input('dokument_id'), 'data_form' => json_encode($processedData), 'name' => $request->input('type') - ] - ); + ]); + + $responseData = $processedData; + } return response()->json([ 'success' => true, @@ -192,6 +209,7 @@ class SurveyorController extends Controller } } + private function getActionSpecificRules($data, $action, $request): array { $allowedActions = [ @@ -3280,13 +3298,9 @@ class SurveyorController extends Controller } - public function signature() - { - - } - public function signatureStore(Request $request) { + $validator = Validator::make($request->all(), [ 'signature' => 'required', 'type' => 'required|in:penilai,cabang,debitur,kjjp', @@ -3300,34 +3314,168 @@ class SurveyorController extends Controller ], 422); } - // Hapus prefix data:image/png;base64, - $image = explode(',', $request->signature)[1]; - $imageName = 'signatures/' . $request->type . '_' . time() . '.png'; + try { - // Simpan file - Storage::disk('public')->put($imageName, base64_decode($image)); - $existingData = $inspeksi->exists && $inspeksi->foto_form - ? json_decode($inspeksi->foto_form, true) - : []; + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) + ->where('dokument_id', $request->input('document_id')) + ->first(); - $formatFotojson = $existingData; - $inspeksi = Inspeksi::save( - [ - 'permohonan_id' => $request->input('permohonan_id'), - 'dokument_id' => $request->input('dokument_id') - ], - [ - 'data_form' => json_encode($processedData), - ] - ); + if (!$inspeksi) { + return response()->json([ + 'success' => false, + 'message' => 'Data inspeksi tidak ditemukan' + ], 404); + } + + // Decode data form yang ada + $dataForm = json_decode($inspeksi->data_form, true) ?: []; + + // Inisialisasi array signature jika belum ada + if (!isset($dataForm['signature'])) { + $dataForm['signature'] = []; + } + + // Simpan atau update signature berdasarkan type + $dataForm['signature'][$request->type] = [ + 'image' => $request->signature, + 'created_at' => now()->toDateTimeString(), + 'updated_at' => now()->toDateTimeString() + ]; + + // Update data form di database + $inspeksi->data_form = json_encode($dataForm); + $inspeksi->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Tanda tangan berhasil disimpan' + ]); + + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan: ' . $e->getMessage() + ], 500); + } } - public function signatureShow() + public function signatureShow($type) { + try { + $inspeksi = Inspeksi::where('permohonan_id', request()->input('permohonan_id')) + ->where('dokument_id', request()->input('document_id')) + ->first(); + if (!$inspeksi) { + return response()->json([ + 'success' => false, + 'message' => 'Data inspeksi tidak ditemukan', + 'error_code' => '404' + ], 404); + } + + $dataForm = json_decode($inspeksi->data_form, true) ?: []; + + if (isset($dataForm['signature'][$type])) { + return response()->json([ + 'success' => true, + 'data' => [ + 'signature' => $dataForm['signature'][$type]['image'], + 'type' => $type, + 'created_at' => $dataForm['signature'][$type]['created_at'], + 'updated_at' => $dataForm['signature'][$type]['updated_at'] + ] + ]); + } + + return response()->json([ + 'success' => false, + 'message' => 'Tanda tangan tidak ditemukan', + 'error_code' => '404' + ], 404); + + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan: ' . $e->getMessage(), + 'error_code' => '500' + ], 500); + } } - public function signatureDestroy() + + public function signatureDestroy(Request $request) { + try { + $validator = Validator::make($request->all(), [ + 'type' => 'required|in:penilai,cabang,debitur,kjjp' + ]); + if ($validator->fails()) { + return response()->json([ + 'success' => false, + 'message' => 'Validation error', + 'errors' => $validator->errors() + ], 422); + } + + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) + ->where('dokument_id', $request->input('document_id')) + ->first(); + + if (!$inspeksi) { + return response()->json([ + 'success' => false, + 'message' => 'Data inspeksi tidak ditemukan', + 'error_code' => '404' + ], 404); + } + + $dataForm = json_decode($inspeksi->data_form, true) ?: []; + + if (isset($dataForm['signature'][$request->type])) { + unset($dataForm['signature'][$request->type]); + + $inspeksi->data_form = json_encode($dataForm); + $inspeksi->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Tanda tangan berhasil dihapus', + 'data' => [ + 'type' => $request->type, + 'deleted_at' => now()->toDateTimeString() + ] + ]); + } + + return response()->json([ + 'success' => false, + 'message' => 'Tanda tangan tidak ditemukan', + 'error_code' => '404' + ], 404); + + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan: ' . $e->getMessage(), + 'error_code' => '500' + ], 500); + } } + private function arrayMergeRecursive($arr1, $arr2) + { + foreach ($arr2 as $key => $value) { + if (is_array($value) && isset($arr1[$key]) && is_array($arr1[$key])) { + $arr1[$key] = $this->arrayMergeRecursive($arr1[$key], $value); + } else { + // Jika nilai baru adalah null, pertahankan nilai lama + if (!is_null($value)) { + $arr1[$key] = $value; + } elseif (!isset($arr1[$key])) { + $arr1[$key] = $value; + } + } + } + return $arr1; + } } diff --git a/resources/views/component/signature-pad.blade.php b/resources/views/component/signature-pad.blade.php index 9a77cbf..ab69e15 100644 --- a/resources/views/component/signature-pad.blade.php +++ b/resources/views/component/signature-pad.blade.php @@ -3,8 +3,9 @@

{{ ucfirst($type) }}

- - + + +
diff --git a/resources/views/surveyor/components/inspeksi.blade.php b/resources/views/surveyor/components/inspeksi.blade.php index fad34f5..e7d1b84 100644 --- a/resources/views/surveyor/components/inspeksi.blade.php +++ b/resources/views/surveyor/components/inspeksi.blade.php @@ -9,50 +9,62 @@
@csrf - - + + @if (strtolower($permohonan->tujuanPenilaian->name) == 'rap') - - - - @include('lpj::surveyor.components.header') - @include('lpj::surveyor.components.rap') - @else - @foreach ($permohonan->debiture->documents as $dokumen) - @if ($dokumen->jenisJaminan) - @php - $formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true); - @endphp - @if (isset($formKategori) && $formKategori) - @php - $kategoriArray = is_array($formKategori) ? $formKategori : [$formKategori]; - $kategoriUnik = array_unique($kategoriArray); - @endphp - - - @if (array_intersect($kategoriUnik, ['tanah', 'bangunan', 'apartemen-kantor'])) - @include('lpj::surveyor.components.header') - @endif + + - @foreach ($kategoriUnik as $kategori) - {{-- Tampilkan komponen sesuai kategori --}} - @include('lpj::surveyor.components.' . str_replace('-', '-', $kategori), [ - 'dokumen' => $dokumen, - ]) - @endforeach + @include('lpj::surveyor.components.header') + @include('lpj::surveyor.components.rap') + @else + @foreach ($permohonan->debiture->documents as $dokumen) + @if ($dokumen->jenisJaminan) + @php + $formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true); + @endphp + @if (isset($formKategori) && $formKategori) + @php + $kategoriArray = is_array($formKategori) ? $formKategori : [$formKategori]; + $kategoriUnik = array_unique($kategoriArray); + @endphp + + + @if (array_intersect($kategoriUnik, ['tanah', 'bangunan', 'apartemen-kantor'])) + @include('lpj::surveyor.components.header') + @endif + + @foreach ($kategoriUnik as $kategori) + {{-- Tampilkan komponen sesuai kategori --}} + @include('lpj::surveyor.components.' . str_replace('-', '-', $kategori), [ + 'dokumen' => $dokumen, + ]) + @endforeach + @endif @endif - @endif - @endforeach - @endif -
-
@@ -60,7 +72,226 @@ @endsection @push('scripts') +