diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 5d32d87..a09c926 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -570,7 +570,7 @@ class PenilaiController extends Controller }); } - $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?,?, ?)', ['assign', 'survey-completed', 'proses-laporan', 'paparan', 'proses-paparan', 'paparan', 'revisi-laporan', 'revisi-paparan']); + $query->whereRaw('LOWER(status) IN (?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?)', ['assign', 'survey-completed', 'proses-laporan', 'paparan', 'proses-paparan', 'paparan', 'revisi-laporan', 'revisi-paparan', 'request-freeze', 'freeze', 'reject-freeze']); if (!Auth::user()->hasRole('administrator')) { $query->whereHas('penilaian.userPenilai', function ($q) { @@ -963,41 +963,6 @@ class PenilaiController extends Controller } - public function storeMemo(Request $request) - { - try { - - $validatedData = $request->validate([ - 'permohonan_id' => 'required|integer', - 'document_id' => 'required|integer', - 'inspeksi_id' => 'required|integer', - 'memo' => 'required', - ]); - Penilai::updateOrCreate( - [ - 'permohonan_id' => $validatedData['permohonan_id'], - 'dokument_id' => $validatedData['document_id'], - 'inspeksi_id' => $validatedData['inspeksi_id'], - ], - [ - 'memo' => json_encode($validatedData['memo']), - ] - ); - - - return response()->json([ - 'success' => true, - 'message' => 'Berhasil saved memo' - ], 200); - } catch (\Exception $e) { - return response()->json([ - 'success' => false, - 'message' => 'Terjadi kesalahan', - 'error' => $e->getMessage() - ], 500); - } - } - public function storeMemoWithPhotos(Request $request) { try { @@ -1021,6 +986,8 @@ class PenilaiController extends Controller ] ); + $existingPhotos = isset($memo->memo) ? json_decode($memo->memo)->foto : []; + dd($existingPhotos); // Simpan foto-foto if ($request->hasFile('foto_0')) { $photoUrls = []; @@ -1033,11 +1000,15 @@ class PenilaiController extends Controller $index++; } - // Tambahkan URL foto ke data memo - $memoData['foto'] = $photoUrls; - $memo->memo = json_encode($memoData); - $memo->save(); + $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->save(); return response()->json([ 'success' => true, diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 4655298..aabb59b 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -450,7 +450,7 @@ class PenilaianController extends Controller public function otorisatorUpdate(Request $request, $id, $context) { - if ($context === 'SLA') { + if ($context === 'Freze SLA') { $authorization = Authorization::with(['user'])->find($id); if (!$authorization) { return response()->json([ @@ -513,7 +513,7 @@ class PenilaianController extends Controller } break; - case 'sla': + case 'freze sla': if (Auth::user()->roles[0]->name === 'senior-officer' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so === null) { $authorization->update([ 'status' => '3', @@ -633,7 +633,7 @@ class PenilaianController extends Controller 'Pelaporan' => 'proses-laporan', 'Pembayaran' => 'proses', 'Pembatalan' => 'batal', - 'SLA' => 'freeze', + 'SLA' => 'request-freeze', 'Paparan' => 'proses-paparan', default => '', }; @@ -665,7 +665,7 @@ class PenilaianController extends Controller $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); } elseif ($status == 'batal') { $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); - } elseif ($status == 'freeze') { + } elseif ($status == 'request-freeze') { $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); } elseif ($status == 'proses-paparan') { $query->whereRaw('LOWER(status) IN (?, ?)', ['proses-paparan', 'paparan']); @@ -891,7 +891,8 @@ class PenilaianController extends Controller public function revisiLaporan(Request $request, $id) { - if($request->dataHeader=='Paparan'){ + // dd($request->all()); + if($request->dataHeader=='Paparan' || $request->dataHeader=='Freze SLA'){ $authorization = Authorization::find($id); $permohonan = Permohonan::find($authorization->permohonan_id); } else { @@ -905,7 +906,13 @@ class PenilaianController extends Controller } $status = 'revisi-paparan'; - } elseif ($permohonan->status === 'proses-laporan' && $userRole === 'EO Appraisal') { + }else if($permohonan->status === 'freeze'){ + if ($authorization) { + $authorization->delete(); + } + + $status = 'reject-freeze'; + }elseif ($permohonan->status === 'proses-laporan' && $userRole === 'EO Appraisal') { $permohonan->update([ 'approval_so' => 0, 'approval_so_at' => null, diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 2b22ff9..cbd8afc 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -914,10 +914,16 @@ class SurveyorController extends Controller try { $permohonan = Permohonan::findOrFail($id); + $permohonan->update([ + 'keterangan' => $request->keterangan, + 'status' => 'request-freeze', + ]); + Authorization::updateOrCreate([ 'permohonan_id' => $permohonan->id, - 'jenis' => 'sla' + 'jenis' => 'sla', ], [ + 'keterangan' => $request->keterangan, 'request' => 'freeze', 'user_id' => Auth::user()->id ]); @@ -2422,7 +2428,7 @@ class SurveyorController extends Controller $validator = Validator::make($request->all(), [ 'signature' => 'required', - 'type' => 'required|in:penilai,cabang,debitur,kjjp', + 'type' => 'required|in:penilai,cabang,debitur,kjpp', 'name' => 'nullable|string', 'document_id' => 'nullable|string' ]); @@ -2529,7 +2535,7 @@ class SurveyorController extends Controller { try { $validator = Validator::make($request->all(), [ - 'type' => 'required|in:penilai,cabang,debitur,kjjp' + 'type' => 'required|in:penilai,cabang,debitur,kjpp' ]); if ($validator->fails()) { diff --git a/resources/views/penilai/components/print-memo.blade.php b/resources/views/penilai/components/print-memo.blade.php index 9f9d27e..635fe5f 100644 --- a/resources/views/penilai/components/print-memo.blade.php +++ b/resources/views/penilai/components/print-memo.blade.php @@ -295,9 +295,11 @@
+@if (isset($memo['foto'])) + @foreach ($memo['foto'] as $item) - @php + @php $cleanedPath = str_replace('/storage/', '', $item); $imagePath = storage_path('app/public/' . $cleanedPath); @endphp @@ -307,7 +309,7 @@ @endforeach -
+@endif @include('lpj::penilai.components.footer') diff --git a/resources/views/penilai/index.blade.php b/resources/views/penilai/index.blade.php index cd076ef..ecfa4c7 100644 --- a/resources/views/penilai/index.blade.php +++ b/resources/views/penilai/index.blade.php @@ -232,7 +232,7 @@ actions: { title: 'Action', render: (item, data) => { - if (data.status === 'survey-completed' || data.status === 'proses-laporan' || data.status === 'paparan' || data.status === 'proses-paparan' || data.status === 'paparan' || data.status == 'revisi-laporan' || data.status === 'done' || data.status === 'revisi-paparan') { + if (data.status === 'survey-completed' || data.status === 'proses-laporan' || data.status === 'paparan' || data.status === 'proses-paparan' || data.status === 'paparan' || data.status == 'revisi-laporan' || data.status === 'done' || data.status === 'revisi-paparan' || data.status === 'reject-freeze' || data.status === 'freeze' || data.status === 'request-freeze') { return `
@@ -298,7 +298,7 @@ Swal.fire({ url: `/surveyor/storeFreeze/${permohonanId}`, type: 'POST', data: { - message: userMessage + keterangan: userMessage }, success: (response) => { Swal.fire('Berhasil!', diff --git a/resources/views/penilaian/otorisator/index-sla.blade.php b/resources/views/penilaian/otorisator/index-sla.blade.php index a6b91b2..37fd065 100644 --- a/resources/views/penilaian/otorisator/index-sla.blade.php +++ b/resources/views/penilaian/otorisator/index-sla.blade.php @@ -183,7 +183,7 @@ return `${data.permohonan.debiture.name}`; }, }, - alasan: { + keterangan: { title: 'Alasan', }, request: { diff --git a/resources/views/penilaian/otorisator/sla.blade.php b/resources/views/penilaian/otorisator/sla.blade.php index f6f1375..c0e960e 100644 --- a/resources/views/penilaian/otorisator/sla.blade.php +++ b/resources/views/penilaian/otorisator/sla.blade.php @@ -78,7 +78,7 @@
- {{ $authorization->alasan ?? ''}} + {{ $authorization->keterangan ?? ''}} @@ -87,7 +87,7 @@ - + @@ -163,21 +163,21 @@ @endif @if(Auth::user()->hasAnyRole(['administrator','senior-officer']) && $authorization->approve_so==null) - @endif @if(Auth::user()->hasAnyRole(['administrator','EO Appraisal']) && $authorization->approve_so && $authorization->approve_eo==null) - @endif - @if(Auth::user()->hasAnyRole(['administrator','DD Appraisal']) && $authorization->approve_eo && $authorization->approve_dd==null && in_array($permohonan->nilai_plafond_id,[1,4])) - @@ -188,52 +188,149 @@ @endsection @push('scripts') - + return alasan; + } + }).then((rejectResult) => { + if (rejectResult.isConfirmed) { + handleAjaxRequest( + `/otorisator/revisi-laporan/${dataId}`, { + keterangan: rejectResult.value, + dataHeader: dataHeader + }, + 'Data berhasil ditolak.', + 'Terjadi kesalahan saat melakukan penolakan.' + ); + } + }); + }; + + const showSwalConfirmation = ( + title, text, html, confirmText, denyText, cancelText, preConfirm, icon = 'question' + ) => { + return Swal.fire({ + title: title, + text: text, + html: html, + icon: icon, + focusConfirm: false, + preConfirm: preConfirm, + showCancelButton: true, + showDenyButton: !!denyText, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + denyButtonColor: '#f39c12', + confirmButtonText: confirmText, + denyButtonText: denyText, + cancelButtonText: cancelText, + }); + }; + + const handleAjaxRequest = (url, data, successMessage, errorMessage) => { + $.ajaxSetup({ + headers: { + 'X-CSRF-TOKEN': '{{ csrf_token() }}' + }, + }); + $.ajax({ + url: url, + type: 'POST', + data: data, + success: () => { + Swal.fire('Berhasil!', successMessage, 'success').then(() => { + const dataHeader = @json($header); + const redirectUrl = `/otorisator/sla`; + window.location.href = redirectUrl; + }); + }, + error: (error) => { + console.error('Error:', error); + Swal.fire('Gagal!', errorMessage, 'error'); + } + }); + }; + + function otorisatorData(dataId, role = '') { + const dataHeader = @json($header); + const isPaparanSO = dataHeader === 'SLA' && role === 'SO'; + + const swalHtml = isPaparanSO ? ` +
+

Untuk melakukan otorisasi ${dataHeader}!

+
+ + +
+
+ + +
+
` : ''; + + showSwalConfirmation( + 'Apakah Anda yakin?', + `Untuk melakukan otorisasi ${dataHeader}!`, + swalHtml, + 'Ya, Lanjutkan!', + 'Tolak', + 'Batal', + () => { + if (isPaparanSO) { + const message = document.getElementById('swal-keterangan')?.value; + const tanggalPaparan = document.getElementById('swal-tanggal-paparan').value; + + if (!message || !tanggalPaparan) { + Swal.showValidationMessage('Keterangan dan Tanggal Paparan harus diisi!'); + return false; + } + + return { + message, + tanggalPaparan + }; + } else { + return { + message: 'Ya, lanjutkan.' + }; + } + }, + 'question' + ).then((result) => { + if (result.isConfirmed) { + const requestData = isPaparanSO ? { + keterangan: result.value.message, + tanggalPaparan: result.value.tanggalPaparan + } : { + keterangan: result.value.message + }; + + handleAjaxRequest( + `/otorisator/otorisator/${dataId}/${dataHeader}`, + requestData, + 'Data berhasil diotorisasi.', + 'Terjadi kesalahan saat melakukan otorisasi.' + ); + } else if (result.isDenied) { + handleRejection(dataId,dataHeader); + } + }); + } + @endpush diff --git a/resources/views/surveyor/components/inspeksi.blade.php b/resources/views/surveyor/components/inspeksi.blade.php index 108249e..9bcef2a 100644 --- a/resources/views/surveyor/components/inspeksi.blade.php +++ b/resources/views/surveyor/components/inspeksi.blade.php @@ -54,7 +54,7 @@
- @foreach (['penilai', 'cabang', 'debitur', 'kjjp'] as $type) + @foreach (['penilai', 'cabang', 'debitur', 'kjpp'] as $type) @include('lpj::component.signature-pad', ['type' => $type]) @endforeach @@ -95,7 +95,7 @@ console.log(datas); document.addEventListener('DOMContentLoaded', function() { const signaturePads = {}; - const types = ['penilai', 'cabang', 'debitur', 'kjjp']; + const types = ['penilai', 'cabang', 'debitur', 'kjpp']; // Initialize all signature pads types.forEach(type => initSignaturePad(type)); diff --git a/resources/views/surveyor/components/print-out/main.blade.php b/resources/views/surveyor/components/print-out/main.blade.php index e7401a4..7f69ede 100644 --- a/resources/views/surveyor/components/print-out/main.blade.php +++ b/resources/views/surveyor/components/print-out/main.blade.php @@ -574,10 +574,10 @@ @endif - @if (isset($forminspeksi['signature']['kjjp'])) + @if (isset($forminspeksi['signature']['kjpp']))
@endif @@ -605,9 +605,9 @@ {{ ucwords(strtolower('DEBITUR/PERWAKILAN')) }} @endif - @if (isset($forminspeksi['signature']['kjjp']['name'])) + @if (isset($forminspeksi['signature']['kjpp']['name']))
Alasan{{ $authorization->alasan }}{{ $authorization->keterangan }}
Tanggal Permohonan KJPP + src="{{ $forminspeksi['signature']['kjpp']['image'] }}" alt="KJPP">
- {{ ucwords(strtolower($forminspeksi['signature']['kjjp']['name'])) }} + {{ ucwords(strtolower($forminspeksi['signature']['kjpp']['name'])) }}
{{ strtoupper('K.J.P.P') }}