Merge branch 'feature/senior-officer' into fix/save-penilai

This commit is contained in:
majid
2025-03-13 08:29:33 +07:00
30 changed files with 649 additions and 439 deletions

View File

@@ -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";
}
}

View File

@@ -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])) {

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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'))) {

View File

@@ -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()) {

View File

@@ -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,
]);
}