diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 0855bb3..18d5a4b 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -46,8 +46,8 @@ function checkActiveDateRangePenawaran($id) $start_date = strtotime($penawaran->start_date); $end_date = strtotime($penawaran->end_date); - // $todays_date = strtotime(now()); - $todays_date = strtotime("+1 day", strtotime(now())); + $todays_date = strtotime(now()); + //$todays_date = strtotime("+1 day", strtotime(now())); $allow = true; if ($todays_date >= $start_date && $todays_date <= $end_date) { @@ -485,7 +485,7 @@ function calculateSLA($permohonan, $type) * @param int $jenisLegalitas * @return int */ -function calculateTotalLuas($detailsArray, $key, $jenisLegalitas) +function calculateTotalLuas($detailsArray, $key, $jenisLegalitas, $defaultJenisLegalitas) { $total = 0; @@ -503,7 +503,57 @@ function calculateTotalLuas($detailsArray, $key, $jenisLegalitas) } } } + + // Jika total masih 0, gunakan jenis jaminan ppjb + if ($total === 0) { + foreach ($detailsArray as $item) { + if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $defaultJenisLegalitas) { + $details = json_decode($item->details, true); + + if (is_array($details)) { + foreach ($details as $detail) { + if (isset($detail[$key]) && $detail[$key] !== null) { + $total += (int) $detail[$key]; + } + } + } + } + } + } + + // jika total masih kosong juga maka gunakan ppb + if ($total === 0 && $fallbackJenisLegalitas !== null) { + foreach ($detailsArray as $item) { + if (isset($item->jenis_legalitas_jaminan_id) && $item->jenis_legalitas_jaminan_id === $fallbackJenisLegalitas) { + $details = json_decode($item->details, true); + + if (is_array($details)) { + foreach ($details as $detail) { + if (isset($detail[$key]) && $detail[$key] !== null) { + $total += (int) $detail[$key]; + } + } + } + } + } + } } - return $total; + return $total > 0 ? $total : 0; +} + + +function ubahNomorHp($nomorHp) { + + $nomorHp = preg_replace('/\D/', '', $nomorHp); + if (strpos($nomorHp, '62') === 0) { + $nomorBaru = substr($nomorHp, 0, 5) . "xxxxx"; + return '+' . $nomorBaru; + } elseif (strpos($nomorHp, '0') === 0) { + + $nomorBaru = substr($nomorHp, 0, 5) . "xxxxxx"; + return $nomorBaru; + } else { + return "Nomor HP tidak valid"; + } } diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index d7bd597..f12ae72 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -9,6 +9,7 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; + use Illuminate\Http\UploadedFile; use Log; use Modules\Location\Models\City; use Modules\Location\Models\District; @@ -249,7 +250,7 @@ 'jenis_legalitas_jaminan_id' => $value, 'name' => $request->name[$key], 'keterangan' => $request->keterangan[$key], - 'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '' + 'details' => isset($request->custom_field[$key]) ? json_encode(array_values($request->custom_field[$key])) : '' ]; $dokumenJaminan = []; @@ -279,7 +280,6 @@ } - // Setelah loop, periksa apakah ada dokumen yang dihapus $existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null); @@ -287,32 +287,69 @@ $existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? []; $existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? []; + $newDokumenJaminan = []; + $newDokumenNomor = []; + $allFilesDeleted = true; - // Jika jumlah dokumen berkurang, berarti ada yang dihapus - if (count($existingDokumen) > count($dokumenJaminan)) { - $dokumenJaminan = $existingDokumen; - $dokumenNomor = $existingNomor; - foreach ($request->dokumen_jaminan[$key] as $index => $file) { - if ($file === null) { - // Hapus dokumen yang tidak ada lagi - unset($dokumenJaminan[$index]); - unset($dokumenNomor[$index]); + foreach ($existingDokumen as $index => $existingFile) { + if (isset($request->dokumen_jaminan[$key][$index])) { + $allFilesDeleted = false; + $file = $request->dokumen_jaminan[$key][$index]; + if ($file instanceof \Illuminate\Http\UploadedFile) { + // File baru diupload + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id . '/' . $document->id . '/', $file_name); + $newDokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; } elseif (is_string($file) && !empty($file)) { - // Update nomor dokumen untuk file yang tidak diubah - $dokumenNomor[$index] = $request->dokumen_nomor[$key][$index] ?? '-'; + // File tidak diubah + $newDokumenJaminan[] = $existingFile; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? $existingNomor[$index]; + } + } else { + // File dihapus, hapus dari storage jika ada + if (Storage::exists('public/' . $existingFile)) { + Storage::delete('public/' . $existingFile); } } - // Reset array keys - $dokumenJaminan = array_values($dokumenJaminan); - $dokumenNomor = array_values($dokumenNomor); + } + + // Tambahkan file baru yang mungkin ditambahkan + foreach ($request->dokumen_jaminan[$key] ?? [] as $index => $file) { + if ($file instanceof UploadedFile) { + $allFilesDeleted = false; + $file_name = $file->getClientOriginalName(); + $path = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; + if (!in_array($path, $newDokumenJaminan)) { + $file->storeAs('public/' . dirname($path), $file_name); + $newDokumenJaminan[] = $path; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; + } + } elseif (is_string($file) && !empty($file) && !in_array($file, $newDokumenJaminan)) { + $allFilesDeleted = false; + $newDokumenJaminan[] = $file; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; + } + } + + if ($allFilesDeleted) { + $dokumenJaminan = []; + $dokumenNomor = []; + } else { + $dokumenJaminan = $newDokumenJaminan; + $dokumenNomor = $newDokumenNomor; } } + if (!empty($dokumenJaminan)) { $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan); $detailData['dokumen_nomor'] = json_encode($dokumenNomor); + } else if(empty($dokumenJaminan)){ + $detailData['dokumen_jaminan'] = null; + $detailData['dokumen_nomor'] = null; } if (isset($request->detail_dokumen_jaminan_id[$key])) { diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 5d32d87..8eb6ead 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -144,10 +144,10 @@ class PenilaiController extends Controller } } - return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'cekAlamat', 'cities', 'districts', 'villages')); + return view('lpj::penilai.components.lpj-sederhana-standar', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'cekAlamat', 'cities', 'districts', 'villages')); } - public function standard(Request $request, $id) + public function standar(Request $request, $id) { $documentId = $request->query('documentId'); @@ -167,7 +167,7 @@ class PenilaiController extends Controller 'inspeksi_id' => $inspeksiId, ], [ - 'type_penilai' => 'standard', + 'type_penilai' => 'standar', ] ); @@ -212,7 +212,7 @@ class PenilaiController extends Controller } } - return view('lpj::penilai.components.lpj-sederhana-standard', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'cekAlamat', 'cities', 'districts', 'villages')); + return view('lpj::penilai.components.lpj-sederhana-standar', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'cekAlamat', 'cities', 'districts', 'villages')); } public function resume(Request $request) @@ -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','unfreeze-sla']); 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, @@ -1387,7 +1358,7 @@ class PenilaiController extends Controller { $viewMap = [ 'sederhana' => 'penilai.components.print-out-sederhana', - 'standard' => 'penilai.components.print-out-standard', + 'standar' => 'penilai.components.print-out-standar', 'resume' => 'penilai.components.print-resume', 'memo' => 'penilai.components.print-memo', 'rap' => 'penilai.components.print-out-rap', @@ -1450,7 +1421,7 @@ class PenilaiController extends Controller } - if ($type === 'standard' || $type === 'sederhana') { + if ($type === 'standar' || $type === 'sederhana') { return $this->checkDataLpj($type, $statusLpj); } diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 4655298..78849d4 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' || $context === 'Unfreeze 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', @@ -595,6 +595,14 @@ class PenilaianController extends Controller ]); } break; + case 'unfreeze sla': + $authorization->update([ + 'request' => 'unfreeze-sla', + ]); + $permohonan->update([ + 'status' => 'unfreeze-sla', + ]); + break; default: return response()->json([ @@ -633,7 +641,7 @@ class PenilaianController extends Controller 'Pelaporan' => 'proses-laporan', 'Pembayaran' => 'proses', 'Pembatalan' => 'batal', - 'SLA' => 'freeze', + 'SLA' => 'request-freeze', 'Paparan' => 'proses-paparan', default => '', }; @@ -665,7 +673,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']); @@ -825,8 +833,8 @@ class PenilaianController extends Controller private function getViewLaporan($tipe) { $viewMap = [ - 'sederhana' => 'penilai.components.lpj-sederhana-standard', - 'standard' => 'penilai.components.lpj-sederhana-standard', + 'sederhana' => 'penilai.components.lpj-sederhana-standar', + 'standar' => 'penilai.components.lpj-sederhana-standar', 'resume' => 'penilai.components.resume', 'memo' => 'penilai.components.memo', 'rap' => 'penilai.components.rap-penilai', @@ -891,7 +899,8 @@ class PenilaianController extends Controller public function revisiLaporan(Request $request, $id) { - if($request->dataHeader=='Paparan'){ + // dd($id); + if($request->dataHeader=='Paparan' || $request->dataHeader=='Freze SLA'){ $authorization = Authorization::find($id); $permohonan = Permohonan::find($authorization->permohonan_id); } else { @@ -905,7 +914,13 @@ class PenilaianController extends Controller } $status = 'revisi-paparan'; - } elseif ($permohonan->status === 'proses-laporan' && $userRole === 'EO Appraisal') { + }else if($permohonan->status === 'request-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/SLAController.php b/app/Http/Controllers/SLAController.php index 3256aee..159995c 100644 --- a/app/Http/Controllers/SLAController.php +++ b/app/Http/Controllers/SLAController.php @@ -71,7 +71,7 @@ class SLAController extends Controller // abort(403, 'Sorry! You are not allowed to view users.'); } - $query = Authorization::query()->with('permohonan.debiture','user','approveSo','approveEo','approveDd')->where('jenis','sla'); + $query = Authorization::query()->with('permohonan.debiture', 'user', 'approveSo', 'approveEo', 'approveDd')->where('jenis', 'sla')->where('request', 'freeze'); // Pencarian berdasarkan parameter search if ($request->has('search') && !empty($request->get('search'))) { diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 9dbf481..2b86604 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -766,9 +766,15 @@ class SurveyorController extends Controller $permohonan->update([ 'status' => 'survey-completed', - 'submitted_at' => now() ]); + $penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first(); + + $penilaian->update([ + 'status' => 'survey-completed', + ]); + + if($permohonan->jenisPenilaian->name=="External") { LaporanExternal::updateOrCreate( ['permohonan_id' => $permohonan->id], @@ -916,10 +922,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 ]); @@ -2424,7 +2436,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' ]); @@ -2531,7 +2543,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/app/Models/LampiranDokumen.php b/app/Models/LampiranDokumen.php index 9c98eaa..af514f5 100644 --- a/app/Models/LampiranDokumen.php +++ b/app/Models/LampiranDokumen.php @@ -27,18 +27,16 @@ class LampiranDokumen extends Base { $user = Auth::user(); - if ($user && ($user->hasRole('penilai') || $user->hasRole('administrator'))) { + if ($user && $user->hasAnyRole(['penilai', 'administrator', 'Penilai', 'admin','surveyor'])) { $file = $fileData['file']; - $keterangan = $fileData['keterangan'] ?? null; - $fileName = $fileData['nama_file'] ?? time() . '_' . $file->getClientOriginalName(); $filePath = $file->storeAs('lampiran_dokumen', $fileName, 'public'); return self::create([ 'permohonan_id' => $fileData['permohonan_id'] ?? null, - 'nama_file' => $fileName, - 'path_file' => $filePath, - 'keterangan' => $keterangan, + 'nama_file' => $fileName, + 'path_file' => $filePath, + 'keterangan' => $fileData['keterangan'] ?? null, ]); } diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index b1c1825..d7d2882 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -390,7 +390,7 @@ @endforelse - @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin'])) + @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin','surveyor']))