diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index f519025..355c589 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -82,7 +82,16 @@ function checkKelengkapanDetailKJPP($id) // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap? $query = PenawaranDetailTender::select('id') ->where('penawaran_id', '=', $id) + ->where('status','=',1) ->where(function ($query) { + // no_proposal + $query->orWhere('no_proposal', '', ""); + $query->orWhereNull('no_proposal'); + + // tgl_proposal + $query->orWhere('tgl_proposal', '', ""); + $query->orWhereNull('tgl_proposal'); + $query->orWhere('biaya_penawaran', '', ""); $query->orWhereNull('biaya_penawaran'); diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index 1d62ef3..6c2411f 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -79,6 +79,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]) : '' ]; $dokumenJaminan = []; @@ -234,6 +235,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]) : '' ]; $dokumenJaminan = []; diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 2b5a894..8f6ae47 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -215,7 +215,7 @@ class PenilaianController extends Controller $teamPenilai = $userTeam->flatMap(function ($team) { return $team->teamsUsers->filter(function ($teamUser) { return $teamUser->user->roles->contains(function ($role) { - return $role->name === 'surveyor' || $role->name === 'surveyor-penilai'; + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'administrator'; }); })->map(function ($teamUser) { return $teamUser->user; diff --git a/app/Http/Controllers/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index bbd3fab..05b199c 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -5,6 +5,7 @@ namespace Modules\Lpj\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use App\Http\Controllers\Controller; +use Carbon\Carbon; use Exception; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\JsonResponse; @@ -14,6 +15,7 @@ use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\DB; use Modules\Lpj\Models\KJPP; use Modules\Lpj\Models\PenawaranDetailTender; +use Modules\Lpj\Models\PenawaranDetailTenderLog; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\Permohonan; @@ -38,7 +40,7 @@ class ProsesPenawaranController extends Controller } // Retrieve data from the database - $query = PenawaranTender::query()->where('status', '=', 'tender')->withCount('penawarandetails'); + $query = PenawaranTender::query()->whereIn('status', ['tender', 'proposal-tender'])->withCount('penawarandetails'); // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { @@ -126,7 +128,18 @@ class ProsesPenawaranController extends Controller } $i++; } - + DB::enableQueryLog(); + $kjpps = KJPP::whereNotIn('id', function($query) use ($id) { + $query->select('kjpp_rekanan_id') + ->from('detail_penawaran') + ->where('penawaran_id', '=', $id) + ->where('status','=',1); // status=1 (masih aktif) + }) + ->select('id', 'name', 'code') // Pilih beberapa kolom sekaligus + ->get(); + $sql=DB::getQueryLog(); + $data['sql'] = $sql; + $data['kjpps'] = $kjpps; $data['penawaran'] = $penawaran; $data['penawrandetails'] = $penawrandetails; $data['status'] = 'success'; @@ -154,65 +167,52 @@ class ProsesPenawaranController extends Controller $data = array(); $dataPenawaranDetail = array(); if (request()->ajax()) { - $validator = ProsesPenawaranController::rulesEditnya($request, $id); + + try { - if ($validator['fails']) { - $data['message'] = $validator['errors']; - $data['status'] = 'error'; - } - else - { - try { + $dataPenawaranDetail = ['updated_by' => Auth::id(), + 'updated_at' => now(), + 'no_proposal' => $request->no_proposal, + 'tgl_proposal' => $request->tgl_proposal, + 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) + ]; - $dataPenawaranDetail = ['updated_by' => Auth::id(), - 'updated_at' => now(), - 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) - ]; - - if ($request->hasFile('dokumen_persetujuan')) + if ($request->hasFile('dokumen_persetujuan')) + { + $file_tmp = $request->file('dokumen_persetujuan'); + $folderPath = 'uploads/penawaran/'; + if ($file_tmp->isValid()) { - $file_tmp = $request->file('dokumen_persetujuan'); - $folderPath = 'uploads/penawaran/'; - if ($file_tmp->isValid()) - { - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension - $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension - $extension = $file_tmp->getClientOriginalExtension(); - // kjppID_penawaranID_namaFile_userID_time - $newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; - Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); + $extension = $file_tmp->getClientOriginalExtension(); + // kjppID_penawaranID_namaFile_userID_time + $newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; + Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); - $newFileNameWithPath = $folderPath . $newFileName; - $dataPenawaranDetail['attachment'] = $myFile; - $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; - - $penawarandetail = PenawaranDetailTender::findOrFail($id); - $penawarandetail->update($dataPenawaranDetail); - - $data['detailpenawaran_id'] = $id; - $data['status'] = 'success'; - $data['message'] ['message_success'] = array('Proses Penawarn KJPP successfully'); - } - else - { - $data['status'] = 'error'; - $data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf"); - } + $newFileNameWithPath = $folderPath . $newFileName; + $dataPenawaranDetail['attachment'] = $myFile; + $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; } else { $data['status'] = 'error'; - $data['message'] ['check_file'] = array("Silahkan upload file"); - + $data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf"); } - - } catch (Exception $e) { - - $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); } - } + + $penawarandetail = PenawaranDetailTender::findOrFail($id); + $penawarandetail->update($dataPenawaranDetail); + + $data['detailpenawaran_id'] = $id; + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Penawarn KJPP successfully'); + } catch (Exception $e) { + + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); + } } else { $data['status'] = 'error'; @@ -338,4 +338,492 @@ class ProsesPenawaranController extends Controller $prosespenawaran = PenawaranTender::find($id); return view('lpj::prosespenawaran.show', compact('id', 'prosespenawaran')); } + + public function updateDraft(Request $request, $id): JsonResponse + { + // $id = penawaran.id + // init + $data = array(); + $dataPenawaranDetail = array(); + $failed = 0; + + DB::beginTransaction(); + try + { + // update detail_penawaran + $detail_penawaran_ids = $request->input('prosespenawaran_penawarandetail_id', []); + $no_proposals = $request->input('prosespenawaran_no_proposal', []); + $tgl_proposals = $request->input('prosespenawaran_tgl_proposal', []); + $biaya_penawarans = $request->input('prosespenawaran_biayaPenawaran', []); + $dokumen_penawarans = $request->file('prosespenawaran_dokumenPersetujuan'); + + $tot_kjpp = sizeof($detail_penawaran_ids); + if($tot_kjpp>0) + { + // loop + for($i=0;$i<$tot_kjpp;$i++) + { + $detail_penawaran_id= $detail_penawaran_ids[$i]; + $dataPenawaranDetail = [ + 'no_proposal' => $no_proposals[$i], + 'tgl_proposal' => $tgl_proposals[$i], + 'biaya_penawaran' => str_replace(".","",$biaya_penawarans[$i]), // 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]; + + $penawarandetail = PenawaranDetailTender::find($detail_penawaran_id); + if ($dokumen_penawarans) + { + if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans)) + { + $file_tmp = $dokumen_penawarans[$i]; + if($file_tmp->isValid()) + { + $folderPath = 'uploads/penawaran/'; + + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension + + $extension = $file_tmp->getClientOriginalExtension(); + // kjppID_penawaranID_namaFile_userID_time + $newFileName = $penawarandetail->kjpp_rekanan_id.'_'.$penawarandetail->penawaran_id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; + Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); + + $newFileNameWithPath = $folderPath . $newFileName; + $dataPenawaranDetail['attachment'] = $myFile; + $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; + } + + } + + } + + $checkStatus = $penawarandetail->update($dataPenawaranDetail); + if(!$checkStatus) + $failed++; + } + + if($failed>0) + { + DB::rollBack(); + $data['status'] = 'error'; + $data['message'] ['message_error'] = array('Proses Draft Penawaran KJPP failed'); + } + else + { + DB::commit(); + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Draft Penawaran KJPP successfully'); + } + + } + else + { + $data['status'] = 'error'; + $data['message'] ['message_error'] = array('Data inti tidak ada.'); + } + + } + catch (Exception $e) + { + // dd($e); + DB::rollBack(); + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array('Proses Draft Penawaran KJPP failed.'); + } + + return response()->json($data); + } + + public function store(Request $request): JsonResponse + { + // init + $data = array(); + // $data['request']=$request->all(); + $dataPenawaranDetail = array(); + try + { + $dataPenawaranDetail = [ + 'penawaran_id' => $request->penawaran_id, + 'kjpp_rekanan_id' => $request->kjpp_id, + 'created_by' => Auth::id(), + 'created_at' => Carbon::now() + ]; + + PenawaranDetailTender::create($dataPenawaranDetail); + + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Tambah KJPP successfully'); + } + catch (Exception $e) + { + // dd($e); + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP failed.'); + } + + return response()->json($data); + } + + public function editulang($id) + { + // id ==> penawaran.id + return view('lpj::prosespenawaran.editulang', compact('id')); + } + + public function setDataUlang(Request $request): JsonResponse + { + $data = array(); + $penawaran = array(); + $penawrandetails = array(); + + if (request()->ajax()) { + $id = $request->id; + $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id); + + if ($penawaran) { + $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) + ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id') + ->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') + ->where('detail_penawaran.status','=',1) + ->get(); + + $i=0; + foreach($penawrandetails as $obj) + { + if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan)) + { + $penawrandetails_path = Storage::url($obj->dokumen_persetujuan); + $penawrandetails[$i]['dokumen_persetujuan']=$penawrandetails_path; + } + $i++; + } + + $penawaranString = ""; + if($penawaran->status) + { + $penawaranString = convertSlug($penawaran->status); + $penawaran->status = $penawaranString; + } + + $kjpps = KJPP::whereNotIn('id', function($query) use ($id) { + $query->select('kjpp_rekanan_id') + ->from('detail_penawaran') + ->where('penawaran_id', '=', $id) + ->where('status','=',1); // status=1 (masih aktif) + }) + ->select('id', 'name', 'code') // Pilih beberapa kolom sekaligus + ->get(); + + $data['kjpps'] = $kjpps; + $data['penawaran'] = $penawaran; + $data['penawrandetails'] = $penawrandetails; + $data['status'] = 'success'; + $data['message']['message_success'] = array("data successfully found"); + } else { + $data['status'] = 'error'; + $data['penawaran'] = null; + $data['penawrandetails'] = null; + $data['message']['message_data'] = array("data not found"); + } + } else { + $data['status'] = 'error'; + $data['message']['message_ajax'] = array("no ajax request"); + } + + return response()->json($data); + } + + public function updateKJPPStatusUlang(Request $request, $id): JsonResponse + { + // message menggunakan SweetAlert2 + // init + $data = array(); + $dataDetailPenawaran = array(); + // cek masa aktif penawaran + $detailpenawaran = PenawaranDetailTender::find($id); + $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id); + // cek masa aktif penawaran + + // cek apakah blm di approve (penawaran.status = proposal-tender) + $penawaran = PenawaranTender::find($detailpenawaran->penawaran_id); + // cek apakah blm di approve (penawaran.status = proposal-tender) + if($checkActiveDateRange && ('proposal-tender'==$penawaran->status)) + { + try { + + $data['id']=$id; + + $dataDetailPenawaran = ['status' => '0', + 'updated_by' => Auth::id(), + 'updated_at' => now() + ]; + + $detailpenawaran->update($dataDetailPenawaran); + + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName); + } catch (Exception $e) { + + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); + // $data['message']['message_error'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); + } + } + else + { + $data['status'] = 'error'; + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); + // $data['message']['message_error'] = array("Penawaran sudah di tutup"); + } + + return response()->json($data); + } + + public function updateulang(Request $request, $id): JsonResponse + { + // id ==> detail_penawaran.id + // init + $data = array(); + $dataDetailPenawaranLog = array(); + $dataDetailPenawaran = array(); + $pleaseCommit= true; + if (request()->ajax()) { + + $validator = ProsesPenawaranController::rulesEditUlangnya($request, $id); + + if ($validator['fails']) { + $data['message'] = $validator['errors']; + $data['status'] = 'error'; + } + else + { + // cek masa aktif penawaran + $detailpenawaran = PenawaranDetailTender::find($id); + $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id); + // cek masa aktif penawaran + + // cek apakah blm di approve (penawaran.status = proposal-tender) + $penawaran = PenawaranTender::find($detailpenawaran->penawaran_id); + // cek apakah blm di approve (penawaran.status = proposal-tender) + if($checkActiveDateRange && ('proposal-tender'==$penawaran->status)) + { + DB::beginTransaction(); + try { + + $dataDetailPenawaranLog = [ + 'detail_penawaran_id' =>$detailpenawaran->id, + 'kjpp_rekanan_id' =>$detailpenawaran->kjpp_rekanan_id, + 'penawaran_id' =>$detailpenawaran->penawaran_id, + 'biaya_penawaran' =>$detailpenawaran->biaya_penawaran, + 'no_proposal' =>$detailpenawaran->no_proposal, + 'tgl_proposal' =>$detailpenawaran->tgl_proposal, + 'attachment' =>$detailpenawaran->attachment, + 'dokumen_persetujuan' =>$detailpenawaran->dokumen_persetujuan, + 'status' =>$detailpenawaran->status, + 'authorized_status' =>$detailpenawaran->authorized_status, + 'authorized_at' =>$detailpenawaran->authorized_at, + 'authorized_at' =>$detailpenawaran->authorized_at, + 'created_at' =>$detailpenawaran->created_at, + 'updated_at' =>$detailpenawaran->updated_at, + 'deleted_at' =>$detailpenawaran->deleted_at, + 'created_by' =>$detailpenawaran->created_by, + 'updated_by' =>$detailpenawaran->updated_by, + 'deleted_by' =>$detailpenawaran->deleted_by + + ]; + + PenawaranDetailTenderLog::create($dataDetailPenawaranLog); + + $biaya_penawaran=""; + if($request->biaya_penawaran) + $biaya_penawaran= str_replace(".","",$request->biaya_penawaran); + $dataDetailPenawaran = ['updated_by' => Auth::id(), + 'updated_at' => now(), + 'no_proposal' => $request->no_proposal, + 'tgl_proposal' => $request->tgl_proposal, + 'biaya_penawaran' => $biaya_penawaran + ]; + + if ($request->hasFile('dokumen_persetujuan')) + { + $file_tmp = $request->file('dokumen_persetujuan'); + $folderPath = 'uploads/penawaran/'; + if ($file_tmp->isValid()) + { + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension + + $extension = $file_tmp->getClientOriginalExtension(); + // kjppID_penawaranID_namaFile_userID_time + $newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; + Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); + + $newFileNameWithPath = $folderPath . $newFileName; + $dataDetailPenawaran['attachment'] = $myFile; + $dataDetailPenawaran['dokumen_persetujuan'] = $newFileNameWithPath; + } + else + { + $pleaseCommit=false; + $data['status'] = 'error'; + $data['message']['check_file_jenis'] = array("Silahkan upload file pdf"); + } + } + else + { + $data['status'] = 'error'; + $data['message']['check_file'] = array("Silahkan upload file"); + + } + + $detailpenawaran->update($dataDetailPenawaran); + + if($pleaseCommit) + { + DB::commit(); + + $data['id'] = $id; + $data['detailpenawaran'] = $detailpenawaran; + $data['status'] = 'success'; + $data['message']['message_success'] = array('Proses Penawarn KJPP Ulang successfully'); + } + else + { + DB::rollBack(); + $data['status'] = 'error'; + $data['message']['message_error'] = array("Proses Penawarn KJPP Ulang failed.."); + } + + } catch (Exception $e) { + DB::rollBack(); + $data['status'] = 'error'; + $data['message']['message_error_try_catch'] = array('Proses Penawarn KJPP Ulang failed.'); + } + } + else + { + $data['status'] = 'error'; + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); + } + + } + + } else { + $data['status'] = 'error'; + $data['message']['message_ajax'] = array("no ajax request"); + } + + return response()->json($data); + } + + public function rulesEditUlangnya($request, $id) + { + $validateIt = [ + // 'name' diambil dari definisi parameter yang di kirim pada POST Data + 'no_proposal' => 'required', + 'tgl_proposal' => 'required', + 'biaya_penawaran' => 'required', + 'dokumen_persetujuan' => 'required|file|mimes:pdf' + ]; + + $messageIt = [ + 'no_proposal.required' => 'Silahkan isi No Proposal', + 'tgl_proposal.required' => 'Silahkan isi Tanggal Penawaran', + 'biaya_penawaran.required' => 'Silahkan isi Biaya Penawaran', + 'dokumen_persetujuan.required' => 'Silahkan isi dokumen', + 'dokumen_persetujuan.file' => 'Silahkan isi file', + 'dokumen_persetujuan.mimes' => 'Silahkan upload pdf' + ]; + + $validator = Validator::make($request->all(), $validateIt, $messageIt); + + $data['fails'] = $validator->fails(); + $data['errors'] = $validator->errors(); + + return $data; + } + + public function storeUlang(Request $request): JsonResponse + { + // init + $data = array(); + // $data['request']=$request->all(); + $dataDetailPenawaran = array(); + // cek masa aktif penawaran + $checkActiveDateRange = checkActiveDateRangePenawaran($request->penawaran_id); + // cek masa aktif penawaran + + // cek apakah blm di approve (penawaran.status = proposal-tender) + $penawaran = PenawaranTender::find($request->penawaran_id); + // cek apakah blm di approve (penawaran.status = proposal-tender) + if($checkActiveDateRange && ('proposal-tender'==$penawaran->status)) + { + try + { + $biaya_penawaran=""; + if($request->biaya_penawaran) + $biaya_penawaran= str_replace(".","",$request->biaya_penawaran); + $dataDetailPenawaran = [ + 'kjpp_rekanan_id' => $request->kjpp_rekanan_id, + 'no_proposal' => $request->no_proposal, + 'tgl_proposal' => $request->tgl_proposal, + 'biaya_penawaran' => $biaya_penawaran, + 'penawaran_id' => $request->penawaran_id, + 'created_by' => Auth::id(), + 'created_at' => Carbon::now() + ]; + + if ($request->hasFile('dokumen_persetujuan')) + { + $file_tmp = $request->file('dokumen_persetujuan'); + $folderPath = 'uploads/penawaran/'; + if ($file_tmp->isValid()) + { + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension + + $extension = $file_tmp->getClientOriginalExtension(); + // kjppID_penawaranID_namaFile_userID_time + $newFileName = $request->kjpp_rekanan_id.'_'.$request->penawaran_id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; + Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); + + $newFileNameWithPath = $folderPath . $newFileName; + $dataDetailPenawaran['attachment'] = $myFile; + $dataDetailPenawaran['dokumen_persetujuan'] = $newFileNameWithPath; + } + else + { + $pleaseCommit=false; + $data['status'] = 'error'; + $data['message']['check_file_jenis'] = array("Silahkan upload file pdf"); + } + } + else + { + $data['status'] = 'error'; + $data['message']['check_file'] = array("Silahkan upload file"); + + } + PenawaranDetailTender::create($dataDetailPenawaran); + + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Tambah KJPP Ulang successfully'); + } + catch (Exception $e) + { + dd($e); + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP Ulang failed.'); + } + } + else + { + $data['status'] = 'error'; + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); + } + + return response()->json($data); + } } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 0c936a0..3d68811 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -34,7 +34,9 @@ use Modules\Lpj\Models\Denah; use Modules\Lpj\Models\FotoJaminan; use Modules\Lpj\Models\Lingkungan; use Modules\Lpj\Models\LantaiUnit; +use Modules\Lpj\Models\Teams; use Modules\Lpj\Models\Lantai; +use Modules\Lpj\Models\Inspeksi; use Modules\Lpj\Models\ViewUnit; use Modules\Lpj\Models\ObjekJaminan; use Modules\Lpj\Models\RuteJaminan; @@ -121,6 +123,8 @@ class SurveyorController extends Controller ->where('permohonan_id', $id) ->get(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->get(); + $forminspeksi = json_decode($inpeksi[0]->data_form, true); return view('lpj::surveyor.detail', compact( @@ -151,38 +155,123 @@ class SurveyorController extends Controller */ public function store(FormSurveyorRequest $request) { - $validatedData = $request->validated(); - DB::beginTransaction(); - try { - $analisa = Analisa::create($validatedData); - if ($analisa) { - $validatedData['analisa_id'] = $analisa->id; + $data = $request->validated(); + if ($data) { + try { - switch ($validatedData['action']) { - case 'tanah_bangunan': - $this->handleTanahBangunan($validatedData, $request); - break; - case 'unit': - $this->handleUnit($validatedData); - break; - default: - throw new \Exception('Invalid action type'); - } - AnalisaLingkungan::create($validatedData); - $validatedData['foto_tempat'] = $this->uploadFile($request->file('foto_tempat'), 'foto_tempat'); - AnalisaFakta::create($validatedData); + + $formatTanahJson = [ + 'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [], + 'jenis_asset' => $data['jenis_asset'] ?? null, + 'jenis_asset_tidak_sesuai' => $data['jenis_asset_tidak_sesuai'] ?? null, + 'alamat_sesuai' => $data['alamat_sesuai'] ?? null, + 'alamat_tidak_sesuai' => $data['alamat_tidak_sesuai'] ?? null, + 'nama_jalan' => $data['nama_jalan'] ?? null, + 'desa_kelurahan' => $data['desa_kelurahan'] ?? null, + 'kecamatan' => $data['kecamatan'] ?? null, + 'kota_kabupaten' => $data['kota_kabupaten'] ?? null, + 'provinsi' => $data['provinsi'] ?? null, + 'kordinat_lng' => $data['kordinat_lng'] ?? null, + 'kordinat_lat' => $data['kordinat_lat'] ?? null, + 'luas_tanah' => $data['luas_tanah'] ?? null, + 'luas_tanah_tidak_sesuai' => $data['luas_tanah_tidak_sesuai'] ?? null, + 'hadap_mata_angin' => $data['hadap_mata_angin'] ?? null, + 'hadap_mata_angin_tidak_sesuai' => $data['hadap_mata_angin_tidak_sesuai'] ?? null, + 'bentuk_tanah' => $data['bentuk_tanah'] ?? null, + 'bentuk_tanah_lainnya' => $data['bentuk_tanah_lainnya'] ?? null, + 'kontur_tanah' => $data['kontur_tanah'] ?? [], + 'ketinggian_tanah' => $data['ketinggian_tanah'] ?? [], + 'ketinggian_tanah_tidak_sesuai' => $data['ketinggian_tanah_tidak_sesuai'] ?? [], + 'posisi_kavling' => $data['posisi_kavling'] ?? [], + 'posisi_kavling_lainnya' => $data['posisi_kavling_lainnya'] ?? null, + 'tusuk_sate' => $data['tusuk_sate'] ?? null, + 'lockland' => $data['lockland'] ?? null, + 'kondisi_fisik_tanah' => $data['kondisi_fisik_tanah'] ?? [], + 'kondisi_fisik_tanah_lainnya' => $data['kondisi_fisik_tanah_lainnya'] ?? null, + ]; + + + $formatBangunanJson = [ + 'luas_tanah_bangunan' => $data['luas_tanah_bangunan'] ?? null, + 'jenis_bangunan' => $data['jenis_bangunan'] ?? null, + 'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null, + 'sifat_bangunan' => $data['sifat_bangunan'] ?? null, + 'sifat_bangunan_input' => $data['sifat_bagunan_input'] ?? null, + 'spek_kategori_bagunan' => $data['spek_kategori_bagunan'] ?? null, + 'spek_bangunan' => $data['spek_bangunan'] ?? null, + 'sarana_pelengkap' => $data['sarana_pelengkap'] ?? [], + 'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null, + ]; + + + $formatLingkunganJson = [ + 'jarak_jalan_utama' => $data['jarak_jalan_utama'] ?? null, + 'jalan_linkungan' => $data['jalan_linkungan'] ?? null, + 'jarak_cbd_point' => $data['jarak_cbd_point'] ?? null, + 'nama_cbd_point' => $data['nama_cbd_point'] ?? null, + 'lebar_perkerasan_jalan' => $data['lebar_perkerasan_jalan'] ?? null, + 'perkerasan_jalan' => $data['perkerasan_jalan'] ?? null, + 'lalu_lintas' => $data['lalu_lintas'] ?? null, + 'gol_mas_sekitar' => $data['gol_mas_sekitar'] ?? null, + 'tingkat_keramaian' => $data['tingkat_keramaian'] ?? null, + 'terletak_diarea' => $data['terletak_diarea'] ?? null, + 'disekitar_lokasi' => $data['disekitar_lokasi'] ?? null, + 'kondisi_bangunan_sekitar' => $data['kondisi_bangunan_sekitar'] ?? null, + 'sifat_bangunan_sekitar' => $data['sifat_bangunan_sekitar'] ?? null, + 'dekat_makam' => $data['dekat_makam'] ?? null, + 'jarak_makam' => $data['jarak_makam'] ?? null, + 'nama_makam' => $data['nama_makam'] ?? null, + 'dekat_tps' => $data['dekat_tps'] ?? null, + 'jarak_tps' => $data['jarak_tps'] ?? null, + 'nama_tps' => $data['nama_tps'] ?? null, + 'merupakan_daerah' => $data['merupakan_daerah'] ?? null, + 'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null, + + ]; + + + $formatFaktaJson = [ + 'fakta_positif' => $data['fakta_positif'] ?? null, + 'fakta_negatif' => $data['fakta_negatif'] ?? null, + 'rute_menuju' => $data['rute_menuju'] ?? null, + 'batas_batas' => $data['batas_batas'] ?? null, + 'kondisi_lingkungan' => $data['kondisi_lingkungan'] ?? null, + 'kondisi_lain_bangunan' => $data['kondisi_lain_bangunan'] ?? null, + 'informasi_dokument' => $data['informasi_dokument'] ?? null, + 'peruntukan' => $data['peruntukan'] ?? null, + 'kdb' => $data['kdb'] ?? null, + 'kdh' => $data['kdh'] ?? null, + 'gsb' => $data['gsb'] ?? null, + 'max_lantai' => $data['max_lantai'] ?? null, + 'klb' => $data['klb'] ?? null, + 'gss' => $data['gss'] ?? null, + 'pelebaran_jalan' => $data['pelebaran_jalan'] ?? null, + 'nama_petugas' => $data['nama_petugas'] ?? null, + 'lat' => $data['lat'] ?? null, + 'lng' => $data['lng'] ?? null, + 'foto_gistaru' => $data['foto_gistaru'] = $this->uploadFile($request->file('foto_gistaru'), $request->type) ?? null, + 'foto_bhumi' => $data['foto_bhumi'] = $this->uploadFile($request->file('foto_bhumi'), $request->type) ?? null, + 'foto_argis_region' => $data['foto_argis_region'] = $this->uploadFile($request->file('foto_argis_region'), $request->type) ?? null, + 'foto_tempat' => $data['foto_tempat'] = $this->uploadFile($request->file('foto_tempat'), $request->type) ?? null, + 'keterangan' => $data['keterangan'] ?? null, + ]; + + $mergeData = array_merge($formatTanahJson, $formatBangunanJson, $formatLingkunganJson, $formatFaktaJson); + + Inspeksi::create([ + 'permohonan_id' => $request->permohonan_id, + 'data_form' => json_encode($mergeData), + 'name' => $request->type, + + ]); + return response()->json(['success' => true, 'message' => 'Data berhasil disimpan', + 'data' => $mergeData], 200); + } catch (Exception $e) { + + return response()->json(['success' => false, 'message' => 'Data gagal disimpan: ' . $e->getMessage()], 500); } - - DB::commit(); - return redirect()->route('surveyor.show', [ - 'id' => $validatedData['permohonan_id'], - 'form' => 'inspeksi' - ])->with('success', 'Data form surveyor berhasil disimpan'); - } catch (Exception $e) { - DB::rollback(); - return response()->json(['error' => 'Failed to save data', 'details' => $e->getMessage()], 500); } } @@ -271,31 +360,117 @@ class SurveyorController extends Controller 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 'name_lantai_unit.*' => 'nullable|string|max:255', 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'name_rute_lainnya.*' => 'nullable|string', + 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'name_lantai_lainnya.*' => 'nullable|string|max:255', + 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'name_basement.*' => 'nullable|string|max:255', + 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', + 'name_gerbang' => 'nullable|string|max:255', ]); - DB::beginTransaction(); + // DB::beginTransaction(); try { - $pendampingPath = $this->uploadFile($request->file('pendamping'), 'pendamping'); - $fotojaminan = FotoJaminan::create([ - 'pendamping' => $pendampingPath, - 'permohonan_id' => $validatedData['permohonan_id'], - 'jenis_jaminan_id' => $validatedData['jenis_jaminan_id'], - ]); + $rute_menuju_lokasi = []; + $object_jaminan = []; + $lingkungan = []; + $foto_lantai_unit = []; + $foto_lantai_lainnya = []; + $foto_rute_lainnya = []; - $this->processObjekUploads($request, $fotojaminan); - $this->processLantaiUnitUploads($request, $fotojaminan); - $this->processUploads('rute', $request, $fotojaminan); - $this->processUploads('lingkungan', $request, $fotojaminan); - DB::commit(); - return redirect()->route('surveyor.show', [ - 'id' => $validatedData['permohonan_id'], - 'form' => 'foto' - ])->with('success', 'Data foto berhasil disimpan'); + foreach ($request->file('foto_rute', []) as $key => $value) { + $fotoRutePath = $this->uploadFile($request->file('foto_rute.' . $key), 'foto_rute.' . $key); + + $rute_menuju_lokasi[] = [ + 'name_rute' => $request->input('name_rute.' . $key), + 'foto_rute' => $fotoRutePath, + ]; + } + + foreach ($request->file('foto_objek', []) as $key => $value) { + $fotoObjekPath = $this->uploadFile($request->file('foto_objek.' . $key), 'foto_objek.' . $key); + $object_jaminan[] = [ + 'nama_objek' => $request->input('name_objek.' . $key), + 'foto_object' => $fotoObjekPath, + 'deskripsi_objek' => $request->input('deskripsi_objek.' . $key), + ]; + } + + foreach ($request->file('foto_lingkungan', []) as $key => $value) { + $fotoLingkunganPath = $this->uploadFile($request->file('foto_lingkungan.' . $key), 'foto_lingkungan.' . $key); + $lingkungan[] = [ + 'name_lingkungan' => $request->input('name_lingkungan.' . $key), + 'foto_lingkungan' => $fotoLingkunganPath, + + ]; + } + + foreach ($request->file('foto_lantai_unit', []) as $key => $value) { + $foto_lantai_unit_Path = $this->uploadFile($request->file('foto_lantai_unit.' . $key), 'foto_lantai_unit.' . $key); + $foto_lantai_unit[] = [ + 'name_lantai_unit' => $request->input('name_lantai_unit.' . $key), + 'foto_lantai_unit' => $foto_lantai_unit_Path, + + ]; + } + + foreach ($request->file('foto_rute_lainnya', []) as $key => $value) { + $foto_rute_lainnya_path = $this->uploadFile($request->file('foto_rute_lainnya.' . $key), 'foto_rute_lainnya.' . $key); + $foto_rute_lainnya[] = [ + 'name_rute_lainnya' => $request->input('name_rute_lainnya.' . $key), + 'foto_rute_lainnya' => $foto_rute_lainnya_path, + + ]; + } + + + foreach ($request->file('foto_lantai_lainnya', []) as $key => $value) { + $foto_lantai_lainnya_path = $this->uploadFile($request->file('foto_lantai_lainnya.' . $key), 'foto_lantai_lainnya.' . $key); + $foto_lantai_lainnya[] = [ + 'name_lantai_lainnya' => $request->input('name_lantai_lainnya.' . $key), + 'foto_lantai_lainnya' => $foto_lantai_lainnya_path, + + ]; + } + + + $basement = $this->uploadFile($request->file('foto_basement'), 'foto_basement'); + $gerbang = $this->uploadFile($request->file('foto_gerbang'), 'foto_gerbang'); + + + $formatFotojson = [ + 'rute_menuju_lokasi' => $rute_menuju_lokasi, + 'object_jaminan' => $object_jaminan, + 'lingkungan' => $lingkungan + ,'foto_lantai_unit' => $foto_lantai_unit, + 'foto_lantai_lainnya' => $foto_lantai_lainnya, + 'foto_rute_lainnya' => $foto_rute_lainnya, + 'basement' => $basement, + 'gerbang' => $gerbang + ]; + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->first(); + if($request->input('permohonan_id') == $inspeksi->permohonan_id){ + $inspeksi->update([ + 'foto_form' => json_encode($formatFotojson) + ]); + }else { + + Inspeksi::create([ + 'permohonan_id' => $request->input('permohonan_id'), + 'foto_form' => json_encode($formatFotojson) + ]); + } + + + // DB::commit(); + + return response()->json(['success' => true, 'message' => 'Data berhasil disimpan', 'data' => $formatFotojson], 200); } catch (Exception $e) { - DB::rollBack(); + return response()->json(['success' => false, 'message' => 'Failed to upload: ' . $e->getMessage()], 500); } } @@ -518,8 +693,9 @@ class SurveyorController extends Controller $query->whereRaw('LOWER(status) = ?', ['assign']); - $query->whereHas('region.teams.teamsUsers.user', function ($q) { - $q->where('id', Auth::user()->id); + $query->whereHas('penilaian.userPenilai', function ($q) { + $q->where('user_id', Auth::user()->id); + $q->where('role', 'surveyor'); }); @@ -544,7 +720,7 @@ class SurveyorController extends Controller } $filteredRecords = $query->count(); - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'jenisFasilitasKredit'])->get(); + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'jenisFasilitasKredit'])->get(); $pageCount = ceil($totalRecords / $size); @@ -567,8 +743,14 @@ class SurveyorController extends Controller { $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + // Auth::user()->id + $link_url_region = Teams::with('regions', 'teamsUsers') + ->whereHas('teamsUsers', function ($query) { + $query->where('user_id', Auth::user()->id); + })->first(); + $branches = Branch::all(); $provinces = Province::all(); @@ -600,7 +782,9 @@ class SurveyorController extends Controller ->where('jenis_jaminan_id', $jaminanId) ->first(); - // return response()->json($permohonan); + + $inpeksi = Inspeksi::where('permohonan_id', $id)->get(); + $forminspeksi = json_decode($inpeksi[0]->data_form, true); return view('lpj::surveyor.components.inspeksi', compact( @@ -626,7 +810,9 @@ class SurveyorController extends Controller 'golMasySekitar', 'tingkatKeramaian', 'laluLintasLokasi', - 'perkerasanJalan' + 'perkerasanJalan', + 'link_url_region', + 'forminspeksi' )); } @@ -654,7 +840,10 @@ class SurveyorController extends Controller $branches = Branch::all(); $provinces = Province::all(); - $fotoJaminan = FotoJaminan::with(['objekJaminan', 'lantaiUnit' ,'ruteJaminan', 'lingkungan'])->where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + // $fotoJaminan = FotoJaminan::with(['objekJaminan', 'lantaiUnit' ,'ruteJaminan', 'lingkungan'])->where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + + $fotoJaminan = null; + return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan')); } @@ -740,11 +929,9 @@ class SurveyorController extends Controller ->with('success', 'created successfully'); } catch (Exeception $e) { - - return response()->json(array('error' => $e->getMessage()), 400); - // return redirect() - // ->route('basicdata.' . $type .'.index') - // ->with('error', $th->getMessage()); + return redirect() + ->route('basicdata.' . $type .'.index') + ->with('error', $th->getMessage()); } } } @@ -779,6 +966,7 @@ class SurveyorController extends Controller $header = $dataMap[$type] ?? ''; $model = $modelClass::findOrFail($id); + $spekKategoriBagunan = null; if ($type == 'spek-bangunan') { $spekKategoriBagunan = SpekKategoritBangunan::all(); diff --git a/app/Http/Controllers/TeamsController.php b/app/Http/Controllers/TeamsController.php index 9efc3ca..d83184d 100644 --- a/app/Http/Controllers/TeamsController.php +++ b/app/Http/Controllers/TeamsController.php @@ -196,6 +196,9 @@ class TeamsController extends Controller ->leftJoin('teams_users', 'teams.id', '=', 'teams_users.teams_id') ->leftJoin('users', 'teams_users.user_id', '=', 'users.id') ->addSelect('users.id as user_id', 'users.name as user_name'); + + + // Filter pencarian if ($request->has('search') && !empty($request->get('search'))) { diff --git a/app/Http/Requests/FormSurveyorRequest.php b/app/Http/Requests/FormSurveyorRequest.php index b79014a..e003a36 100644 --- a/app/Http/Requests/FormSurveyorRequest.php +++ b/app/Http/Requests/FormSurveyorRequest.php @@ -19,10 +19,11 @@ class FormSurveyorRequest extends FormRequest */ public function rules(): array { - $commonRules = $this->getCommonRules(); + $commonRules = $this->getBangunanRules(); $actionSpecificRules = $this->getActionSpecificRules(); return array_merge($commonRules, $actionSpecificRules); + return $actionSpecificRules; } /** @@ -31,44 +32,29 @@ class FormSurveyorRequest extends FormRequest private function getCommonRules(): array { return [ - 'jenis_jaminan_id' => 'required', - 'type' => 'required', - 'permohonan_id' => 'required', - 'luas' => 'required', - 'jarak_jalan_utama' => 'required', - 'alamat' => 'required', - 'jarak_cbd_point' => 'required', - 'lebar_perkerasan_jalan' => 'required', - 'perkerasan_jalan' => 'required', - 'lalu_lintas' => 'required', - 'gol_mas_sekitar' => 'required', - 'tingkat_keramaian' => 'required', - 'terletak_diarea' => 'required', - 'disekitar_lokasi' => 'required', - 'dekat_makam' => 'required', - 'dekat_tps' => 'required', - 'merupakan_daerah' => 'required', - 'fasilitas_dekat_object' => 'required', - 'fakta_positif' => 'required', - 'fakta_negatif' => 'required', - 'rute_menuju' => 'required', - 'batas_batas' => 'required', - 'kondisi_linkungan' => 'required', - 'kondisi_lain_bangunan' => 'required', - 'informasi_dokument' => 'required', - 'peruntukan' => 'required', - 'kdb' => 'required', - 'kdh' => 'required', - 'gsb' => 'required', - 'max_lantai' => 'required', - 'klb' => 'required', - 'gss' => 'required', - 'pelebaran_jalan' => 'required', - 'nama_petugas' => 'required', - 'lat' => 'required|numeric', - 'lng' => 'required|numeric', - 'foto_tempat' => 'required', - 'keterangan' => 'required', + 'fakta_positif' => 'nullable|array', + 'fakta_negatif' => 'nullable|array', + 'rute_menuju' => 'nullable', + 'batas_batas' => 'nullable|array', + 'kondisi_linkungan' => 'nullable|array', + 'kondisi_lain_bangunan' => 'nullable|array', + 'informasi_dokument' => 'nullable', + 'peruntukan' => 'nullable', + 'kdb' => 'nullable', + 'kdh' => 'nullable', + 'gsb' => 'nullable', + 'max_lantai' => 'nullable', + 'klb' => 'nullable', + 'gss' => 'nullable', + 'pelebaran_jalan' => 'nullable', + 'nama_petugas' => 'nullable', + 'lat' => 'nullable|numeric', + 'lng' => 'nullable|numeric', + 'foto_gistaru' => 'nullable', + 'foto_bhumi' => 'nullable', + 'foto_argis_region' => 'nullable', + 'foto_tempat' => 'nullable', + 'keterangan' => 'nullable', ]; } @@ -80,54 +66,181 @@ class FormSurveyorRequest extends FormRequest $action = $this->input('action'); switch ($action) { - case 'tanah_bangunan': - return $this->getTanahBangunanRules(); + case 'tanah': + return $this->getTanahRules(); case 'unit': return $this->getUnitRules(); + case 'kapal': + return $this->getUnitRules(); + case 'kendaraan': + return $this->getUnitRules(); + case 'mesin': + return $this->getUnitRules(); + case 'bangunan': + return $this->getTanahBangunanRules(); + case 'tanah_bangunan': + return array_merge($this->getAssetDescriptionRules(),$this->getTanahRules(), $this->getBangunanRules(), $this->getLinkunganRules(), $this->getCommonRules()); + + case 'alat-berat': + return $this->getUnitRules(); default: return []; } } /** - * Get rules specific to tanah_bangunan action. + * Get rules specific to tanah action. */ - private function getTanahBangunanRules(): array + + public function getTanahRules(): array { - return [ - 'action' => 'required', - 'bentuk_tanah' => 'required', - 'kontur_tanah' => 'required', - 'posisi_kavling' => 'required', - 'ketinggian_jalan' => 'required', - 'kondisi_fisik_tanah' => 'required', + return [ + 'luas_tanah' => 'required', + 'luas_tanah_tidak_sesuai' => 'nullable', + 'hadap_mata_angin' => 'required', + 'hadap_mata_angin_tidak_sesuai' => 'nullable', + 'bentuk_tanah' => 'nullable|array', + 'bentuk_tanah_lainnya' => 'nullable', + 'kontur_tanah' => 'required|array', + 'ketinggian_jalan' => 'required|array', 'kontur_jalan' => 'required', - 'kondisi_bangunan' => 'required', - 'sifat_bangunan' => 'required', - 'sarana_pelengkap' => 'required', - 'luas_tanah_bagunan' => 'required', + 'posisi_kavling' => 'required|array', + 'posisi_kavling_lainnya' => 'nullable', 'tusuk_sate' => 'required', - 'name.*' => 'required|string', - 'kategori.*' => 'required|string', 'lockland' => 'required', - 'jenis_bangunan' => 'required', - 'kondisi_bangunan' => 'required', + 'kondisi_fisik_tanah' => 'required|array', ]; } /** + * Get rules specific to Bangunan action. + */ + + private function getBangunanRules(): array + { + return [ + 'action' => 'required', + 'luas_tanah_bagunan' => 'required', + 'jenis_bangunan' => 'required', + 'kondisi_bangunan' => 'nullable', + 'sifat_bangunan' => 'required|array', + 'sifat_bangunan_input' => 'nullable|array', + 'nama_bagunan' => 'required|array', + 'spek_kategori_bangunan' => 'required|array', + 'spek_kategori_bangunan.*' => 'required|string', + 'sarana_pelengkap' => 'required', + 'sarana_pelengkap_input' => 'nullable|array', + ]; + } + + /** * Get rules specific to unit action. */ private function getUnitRules(): array { - return [ + return [ 'action' => 'required', - 'jenis_unit' => 'required', - 'kondisi_unit' => 'required', - 'posisi_unit' => 'required', - 'lantai' => 'required', - 'view' => 'required', - 'bentuk_unit' => 'required', + 'luas_unit' => 'required', + 'luas_unit_tidak_sesuai' => 'nullable', + 'jenis_unit' => 'required|array', + 'kondisi_unit' => 'required|array', + 'posisi_unit' => 'required|array', + 'lantai' => 'required|array', + 'view' => 'required|array', + 'bentuk_unit' => 'required|array', ]; } + + /** + * Get rules specific to Linkungan action. + */ + + private function getLinkunganRules(): array + { + return [ + 'action' => 'required', + 'jarak_jalan_utama' => 'nullable', + 'jalan_linkungan' => 'nullable', + 'jarak_cbd_point' => 'nullable', + 'nama_cbd_point' => 'nullable', + 'lebar_perkerasan_jalan' => 'nullable', + 'perkerasan_jalan' => 'nullable', + 'lalu_lintas' => 'nullable', + 'gol_mas_sekitar' => 'nullable', + 'tingkat_keramaian' => 'nullable', + 'terletak_diarea' => 'nullable', + 'disekitar_lokasi' => 'nullable', + 'kondisi_bangunan_sekitar' => 'nullable', + 'sifat_bangunan_sekitar' => 'nullable', + 'dekat_makam' => 'nullable', + 'jarak_makam' => 'nullable', + 'nama_makam' => 'nullable', + 'dekat_tps' => 'nullable', + 'jarak_tps' => 'nullable', + 'nama_tpu' => 'nullable', + 'merupakan_daerah' => 'nullable', + 'fasilitas_dekat_object' => 'nullable', + ]; + } + + private function getKapalRules(): array + { + return [ + 'action' => 'required', + 'kondisi_kapal' => 'required', + 'kondisi_kapal_lain' => 'required', + ]; + } + + public function getKendaraanRules(): array + { + return [ + 'action' => 'required', + 'kondisi_kendaraan' => 'required', + 'kondisi_kendaraan_lain' => 'required', + ]; + } + + + public function getMesinRules(): array + { + return [ + 'action' => 'required', + 'kondisi_mesin' => 'required', + 'kondisi_mesin_lain' => 'required', + ]; + } + + + public function getAlatBeratRules(): array + { + return [ + 'action' => 'required', + 'kondisi_alat_berat' => 'required', + 'kondisi_alat_berat_lain' => 'required', + ]; + } + + + private function getAssetDescriptionRules(): array +{ + return [ + 'permohonan_id' => 'required', + 'type' => 'required', + 'debitur_perwakilan' => 'required|array', + 'jenis_asset' => 'required', + 'jenis_asset_tidak_sesuai' => 'nullable', + 'alamat_sesuai' => 'required', + 'alamat_tidak_sesuai' => 'nullable', + 'nama_jalan' => 'nullable', + 'desa_kelurahan' => 'nullable', + 'kecamatan' => 'nullable', + 'kota_kabupaten' => 'nullable', + 'provinsi' => 'nullable', + 'kordinat_lng' => 'nullable', + 'kordinat_lat' => 'nullable', + ]; +} + + } diff --git a/app/Http/Requests/PenilaianRequest.php b/app/Http/Requests/PenilaianRequest.php index a3c1db0..99e979a 100644 --- a/app/Http/Requests/PenilaianRequest.php +++ b/app/Http/Requests/PenilaianRequest.php @@ -25,15 +25,12 @@ class PenilaianRequest extends FormRequest ]; } - - return [ 'jenis_penilaian_id' => 'required|max:255', 'teams_id' => 'required|max:255', 'tanggal_kunjungan' => 'required|max:255', 'status' => 'required|string', 'nomor_registrasi' => 'required|string', - 'surveyor_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_region_id,penilai_id', 'penilai_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_region_id,surveyor_id', 'penilai_surveyor_id' => 'nullable', diff --git a/app/Http/Requests/RegionRequest.php b/app/Http/Requests/RegionRequest.php index fd9ab1d..250d926 100644 --- a/app/Http/Requests/RegionRequest.php +++ b/app/Http/Requests/RegionRequest.php @@ -14,6 +14,8 @@ class RegionRequest extends FormRequest $rules = [ 'name' => 'required|string|max:255', 'status' => 'nullable|boolean', + 'url' => 'nullable|string|max:255', + 'name_url' => 'nullable|string|max:255', 'authorized_at' => 'nullable|datetime', 'authorized_status' => 'nullable|string|max:1', 'authorized_by' => 'nullable|exists:users,id', diff --git a/app/Models/Inspeksi.php b/app/Models/Inspeksi.php new file mode 100644 index 0000000..16c3629 --- /dev/null +++ b/app/Models/Inspeksi.php @@ -0,0 +1,23 @@ +hasMany(Penilaian::class, 'penilaian_id', 'id'); + return $this->belongsTo(Penilaian::class, 'penilaian_id', 'id'); } protected static function newFactory(): PenilaianTeamFactory diff --git a/app/Models/Regions.php b/app/Models/Regions.php index 28836b5..7b5519c 100644 --- a/app/Models/Regions.php +++ b/app/Models/Regions.php @@ -17,7 +17,7 @@ class Regions extends Model protected $table = 'regions'; protected $fillable = [ - 'code', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by' + 'code', 'name', 'status', 'name_url','url','authorized_status', 'authorized_at', 'authorized_by' ]; public function teams(){ diff --git a/database/migrations/2024_11_08_065701_update_regions_table.php b/database/migrations/2024_11_08_065701_update_regions_table.php new file mode 100644 index 0000000..5c40384 --- /dev/null +++ b/database/migrations/2024_11_08_065701_update_regions_table.php @@ -0,0 +1,30 @@ +string('url')->nullable()->after('name'); + $table->string('name_url')->nullable()->after('url'); + + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('regions', function (Blueprint $table) { + $table->dropColumn('url'); + $table->dropColumn('name_url'); + }); + } +}; diff --git a/database/migrations/2024_11_08_085002_update_detail_penawaran_table.php b/database/migrations/2024_11_08_085002_update_detail_penawaran_table.php new file mode 100644 index 0000000..5a788a1 --- /dev/null +++ b/database/migrations/2024_11_08_085002_update_detail_penawaran_table.php @@ -0,0 +1,30 @@ +string('no_proposal')->nullable()->after('penawaran_id'); + $table->date('tgl_proposal')->nullable()->after('no_proposal'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('detail_penawaran', function (Blueprint $table) { + $table->dropColumn('no_proposal'); + $table->dropColumn('tgl_proposal'); + }); + } +}; diff --git a/database/migrations/2024_11_11_153532_create_inspeksi_table.php b/database/migrations/2024_11_11_153532_create_inspeksi_table.php new file mode 100644 index 0000000..e291dd2 --- /dev/null +++ b/database/migrations/2024_11_11_153532_create_inspeksi_table.php @@ -0,0 +1,42 @@ +id(); + $table->string('name'); + $table->json('data_form')->nullable(); + $table->json('foto_form')->nullable(); + $table->json('denah_form')->nullable(); + $table->unsignedBigInteger('permohonan_id'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + + $table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('inspeksi'); + } +}; diff --git a/database/migrations/2024_11_12_191108_update_detail_penawaran_log_table.php b/database/migrations/2024_11_12_191108_update_detail_penawaran_log_table.php new file mode 100644 index 0000000..345fd9f --- /dev/null +++ b/database/migrations/2024_11_12_191108_update_detail_penawaran_log_table.php @@ -0,0 +1,30 @@ +string('no_proposal')->nullable()->after('penawaran_id'); + $table->date('tgl_proposal')->nullable()->after('no_proposal'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('detail_penawaran_logs', function (Blueprint $table) { + $table->dropColumn('no_proposal'); + $table->dropColumn('tgl_proposal'); + }); + } +}; diff --git a/database/migrations/2024_11_13_101804_create_penilaian_team_table.php b/database/migrations/2024_11_13_101804_create_penilaian_team_table.php new file mode 100644 index 0000000..30005af --- /dev/null +++ b/database/migrations/2024_11_13_101804_create_penilaian_team_table.php @@ -0,0 +1,38 @@ +id(); + $table->unsignedBigInteger('penilaian_id'); + $table->unsignedBigInteger('team_id'); + $table->unsignedBigInteger('user_id')->nullable(); + $table->string('role'); + $table->boolean('status')->default(true); + $table->char('authorized_status', 1)->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('penilaian_team'); + } + }; diff --git a/module.json b/module.json index 572fe59..406f42d 100644 --- a/module.json +++ b/module.json @@ -59,15 +59,7 @@ "attributes": [], "permission": "", "roles": ["administrator", "admin"] - }, - { - "title": "Data Proses Penawaran Ulang", - "path": "tender.prosespenawaranulang", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - } + } ] }, { @@ -567,6 +559,14 @@ "attributes": [], "permission": "", "roles": ["administrator","surveyor"] + }, + { + "title": "Perkerasan jalan", + "path": "basicdata.perkerasan-jalan", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] } diff --git a/resources/views/penilaian/form.blade.php b/resources/views/penilaian/form.blade.php index 8c21971..0433bfc 100644 --- a/resources/views/penilaian/form.blade.php +++ b/resources/views/penilaian/form.blade.php @@ -451,6 +451,7 @@ + diff --git a/resources/views/prosespenawaran/edit.blade.php b/resources/views/prosespenawaran/edit.blade.php index 53c318a..e757972 100644 --- a/resources/views/prosespenawaran/edit.blade.php +++ b/resources/views/prosespenawaran/edit.blade.php @@ -12,7 +12,7 @@ @section('content')
| No | +KJPP | +No Proposal | +Tanggal Proposal | +Biaya Penawaran | +Upload Penawaran | +Action | +
|---|
{{ $permohonan->debiture->name }}
+ @endif{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->branch->name }}
+ @endif +{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->user->name }}
+ @endif +