diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index 496f1b4..1008d7d 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -35,28 +35,41 @@ class ActivityController extends Controller // Ambil user yang sedang login $user = auth()->user(); $roles = $user->load('roles'); - $regionId = null; - // Cek apakah user memiliki role 'senior officer' - if ($roles->roles->pluck('name')->contains('senior officer')) { - $regionId = TeamsUsers::with('team.regions') + // Inisialisasi regionId dan teamId sebagai null agar bisa dinamis + $regionId = null; + $teamId = null; + + if ($roles->roles->pluck('name')->contains('senior-officer')) { + $userTeam = TeamsUsers::with('team') ->where('user_id', $user->id) - ->first()?->team->regions_id; + ->first(); + $regionId = $userTeam?->team->regions_id; + $teamId = $userTeam?->teams_id; + } - $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions']) - ->whereHas('team', function ($q) use ($regionId) { + $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles']) + ->whereHas('team', function ($q) use ($regionId, $teamId) { if ($regionId) { $q->where('regions_id', $regionId); } + if ($teamId) { + $q->where('id', $teamId); // Hanya tim yang sama + } }) ->where('user_id', '!=', $user->id) + ->whereHas('user.roles', function ($query) { + // Filter hanya peran 'surveyor' atau 'surveyor-penilai' + $query->whereIn('name', ['surveyor', 'surveyor-penilai']); + }) ->get(); return view('lpj::activity.progres_activity.index', compact('teamsActivity')); } + public function senior() { return view('lpj::activity.senior_officer.index'); @@ -106,6 +119,10 @@ class ActivityController extends Controller * Update the specified resource in storage. */public function dataForDatatables(Request $request) { + + $user = auth()->user(); + + // Check permissions if (is_null($this->user) || !$this->user->can('debitur.view')) { // abort(403, 'Sorry! You are not allowed to view users.'); @@ -157,7 +174,23 @@ class ActivityController extends Controller $filteredRecords = $query->count(); // Get data - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + + $data = null; + $userRole = $user->roles[0]->name ?? null; + + if (in_array($userRole, ['surveyor', 'surveyor-penilai'])) { + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian',]) + ->whereHas('penilaian.userPenilai', function ($q) use ($user) { + $q->where('user_id', $user->id); + }) + ->get(); + } else { + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian']) + ->get(); + } + + + // Calculate total pages $pageCount = ceil($totalRecords / $request->get('size', 10)); @@ -194,13 +227,23 @@ class ActivityController extends Controller public function dataTablesForActivity(Request $request, $id) { + + if (is_null($this->user) || !$this->user->can('debitur.view')) { + // abort(403, 'Sorry! You are not allowed to view users.'); + } // Query Penilaian dengan relasi yang diperlukan - $query = Penilaian::with(['permohonan', 'permohonan.debiture', 'permohonan.tujuanPenilaian']) - ->where(function($q) use ($id) { - $q->where('surveyor_id', $id) - ->orWhere('penilaian_id', $id) - ->orWhere('penilai_surveyor_id', $id); - }); + $query = Penilaian::with([ + 'permohonan', + 'permohonan.debiture', + 'permohonan.tujuanPenilaian', + 'permohonan.debiture.documents.jenisJaminan', + 'userPenilai' + ]) + ->whereHas('userPenilai', function ($q) use ($id) { + $q->where('user_id', $id); + }); + + // Filter pencarian if ($request->has('search') && !empty($request->get('search'))) { diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index dc4ac6e..60ff7a8 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -18,6 +18,8 @@ use Modules\Lpj\Models\JenisJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\PemilikJaminan; + use Illuminate\Http\JsonResponse; + use Illuminate\Support\Collection; use ZipArchive; class DokumenJaminanController extends Controller @@ -223,55 +225,64 @@ $document = DokumenJaminan::find($jaminan); $document->update($validate); + // Get existing detail documents + $existingDetails = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get()->keyBy('id'); - if ($request->detail_dokumen_jaminan_id) { - foreach ($request->detail_dokumen_jaminan_id as $key => $value) { - if (isset($request->dokumen_jaminan[$key])) { - $file = $request->dokumen_jaminan[$key]; - if ($file) { - $file_name = $file->getClientOriginalName(); - } + if($request->jenis_legalitas_jaminan_id){ + foreach($request->jenis_legalitas_jaminan_id as $key => $value){ + $detailData = [ + 'dokumen_jaminan_id' => $document->id, + 'jenis_legalitas_jaminan_id' => $value, + 'name' => $request->name[$key], + 'keterangan' => $request->keterangan[$key], + ]; - if (isset($file_name)) { - $file->storeAs( - 'public/jaminan/' . $debitur->id . '/' . $document->id . '/', - $file_name, - ); - - $detail = [ - 'dokumen_jaminan_id' => $document->id, - 'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key], - 'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name, - 'name' => $request->name[$key], - 'keterangan' => $request->keterangan[$key], - ]; - if (isset($request->detail_dokumen_jaminan_id[$key])) { - $detailDocument = DetailDokumenJaminan::find( - $request->detail_dokumen_jaminan_id[$key], + $dokumenJaminan = []; + if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) { + foreach($request->dokumen_jaminan[$key] as $file) { + if ($file) { + $file_name = $file->getClientOriginalName(); + $file->storeAs( + 'public/jaminan/' . $debitur->id . '/' . $document->id . '/', + $file_name ); - - $detailDocument->update($detail); - $detailDocument->save(); + $dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; } } - } else { - $detail = [ - 'dokumen_jaminan_id' => $document->id, - 'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key], - 'name' => $request->name[$key], - 'keterangan' => $request->keterangan[$key], - ]; + } - if (isset($request->detail_dokumen_jaminan_id[$key])) { - $detailDocument = DetailDokumenJaminan::find( - $request->detail_dokumen_jaminan_id[$key], - ); - $detailDocument->update($detail); + if (!empty($dokumenJaminan)) { + $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan); + } + + if (isset($request->detail_dokumen_jaminan_id[$key])) { + $detailId = $request->detail_dokumen_jaminan_id[$key]; + $detailDocument = $existingDetails->get($detailId); + if ($detailDocument) { + // Merge new files with existing ones + if (!empty($dokumenJaminan)) { + $existingFiles = json_decode($detailDocument->dokumen_jaminan, true) ?: []; + $mergedFiles = array_merge($existingFiles, $dokumenJaminan); + $detailData['dokumen_jaminan'] = json_encode($mergedFiles); + } + $detailDocument->update($detailData); + $existingDetails->forget($detailId); } + } else { + DetailDokumenJaminan::create($detailData); } } } + // Delete any remaining existing details that weren't updated + foreach ($existingDetails as $detail) { + $files = json_decode($detail->dokumen_jaminan, true) ?: []; + foreach ($files as $file) { + Storage::delete('public/' . $file); + } + $detail->delete(); + } + DB::commit(); return redirect()->route('debitur.jaminan.index', $id)->with( 'success', @@ -290,13 +301,29 @@ ) { $document = DokumenJaminan::find($jaminan); $details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get(); + $debitur = Debiture::find($document->debiture_id); $provinces = Province::all(); $cities = City::where('province_code', $document->province_code)->get(); $districts = District::where('city_code', $document->city_code)->get(); $villages = Village::where('district_code', $document->district_code)->get(); + + $jenisJaminan = JenisJaminan::all(); $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); + + $_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id); + $legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true); + + $currentLegalitasJaminan = JenisLegalitasJaminan::whereIn('id',$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray())->get(); + + + + // Remove values from $legalitasJaminan that are in $currentLegalitasJaminan + $legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray()); + + $legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get(); + $pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get(); $hubunganPemilik = HubunganPemilikJaminan::all(); @@ -314,6 +341,7 @@ 'villages', 'pemilikJaminan', 'hubunganPemilik', + 'legalitas' ), ); } @@ -350,12 +378,16 @@ if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) { foreach ($documents as $document) { - $filePath = storage_path('app/public/' . $document->dokumen_jaminan); - if (file_exists($filePath)) { - $zip->addFile($filePath, basename($filePath)); - } else { - // Log or display an error message for missing files - return redirect()->back()->with('error', 'File not found: ' . $filePath); + $files = is_array(json_decode($document->dokumen_jaminan)) ? json_decode($document->dokumen_jaminan) : [$document->dokumen_jaminan]; + + foreach ($files as $file) { + $filePath = storage_path('app/public/' . $file); + if (file_exists($filePath)) { + $zip->addFile($filePath, basename($filePath)); + } else { + // Log or display an error message for missing files + return redirect()->back()->with('error', 'File not found: ' . $filePath); + } } } $zip->close(); @@ -379,10 +411,11 @@ { $dokumen = request()->get('dokumen'); $document = DetailDokumenJaminan::find($dokumen); - return response()->download(storage_path('app/public/' . $document->dokumen_jaminan)); + $file = is_array(json_decode($document->dokumen_jaminan)) ? json_decode($document->dokumen_jaminan) : [$document->dokumen_jaminan]; + return response()->download(storage_path('app/public/' . $file[request()->get('index')])); } - public function legalitasJaminan($id, $jaminan) + public function legalitasJaminan($id) { $jenisJaminan = JenisJaminan::find($id); $legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id; @@ -390,4 +423,60 @@ $legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get(); echo json_encode($legalitas); } + + + public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1) : JsonResponse + { + + $jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId); + $legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id; + $newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get(); + + $existingLegalitas = []; + $newLegalitas = []; + + // Create a set of new jenis_legalitas_jaminan_ids for quick lookup + $newLegalitasIds = $newLegalitasJaminan->pluck('id')->toArray(); + + if($id>0) { + $document = DokumenJaminan::findOrFail($id); + if ($document && $document->detail) { + foreach ($document->detail as $detail) { + // Only include existing legalitas if its id is in the new set + if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) { + $existingLegalitas[] = [ + 'id' => $detail->id, + 'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id, + 'name' => $detail->jenisLegalitasJaminan->name, + 'dokumen_jaminan' => json_decode($detail->dokumen_jaminan) ?? $detail->dokumen_jaminan, + 'custom_field' => $detail->jenisLegalitasJaminan->custom_field, + 'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type, + 'details' => $detail->details, + 'keterangan' => $detail->keterangan, + 'is_existing' => true + ]; + } + } + } + } + + foreach ($newLegalitasJaminan as $legalitas) { + if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) { + $newLegalitas[] = [ + 'id' => null, + 'jenis_legalitas_jaminan_id' => $legalitas->id, + 'name' => $legalitas->name, + 'dokumen_jaminan' => null, + 'custom_field' => $legalitas->custom_field, + 'custom_field_type' => $legalitas->custom_field_type, + 'details' => null, + 'keterangan' => null, + 'is_existing' => false + ]; + } + } + + $combinedLegalitas = array_merge($existingLegalitas, $newLegalitas); + return response()->json($combinedLegalitas); + } } diff --git a/app/Http/Controllers/OtorisasiPenawaranController.php b/app/Http/Controllers/OtorisasiPenawaranController.php index 91762f2..66180ed 100644 --- a/app/Http/Controllers/OtorisasiPenawaranController.php +++ b/app/Http/Controllers/OtorisasiPenawaranController.php @@ -42,16 +42,16 @@ class OtorisasiPenawaranController extends Controller $query =PenawaranTender::query() ->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') - ->where('penawaran.status','=','persetujuan-penawaran') - ->withCount('penawarandetails'); - + ->where('penawaran.status','=','proposal-tender') + ->withCount('penawarandetails'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -114,19 +114,19 @@ class OtorisasiPenawaranController extends Controller if (request()->ajax()) { $id = $request->id; - $penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->find($id); - + $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id); + if ($penawaran) { $penawarandetailLogs = PenawaranDetailTenderLog::where('penawaran_id',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id') + ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id') ->select('detail_penawaran_logs.*', DB::raw("DATE_FORMAT(detail_penawaran_logs.created_at, '%d-%m-%Y %H:%i') AS created_at2"),'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') ->get(); $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_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(); - + if(sizeof($penawarandetailLogs)>0) { $h=0; @@ -139,8 +139,8 @@ class OtorisasiPenawaranController extends Controller } $h++; } - - } + + } $i=0; foreach($penawrandetails as $obj) @@ -149,17 +149,17 @@ class OtorisasiPenawaranController extends Controller { $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; - } + } $kjpp=null; $kjpp = KJPP::pluck('name', 'id'); @@ -202,11 +202,11 @@ class OtorisasiPenawaranController extends Controller // update status Penawaran menjadi SPK // update status Permohonan menjadi SPK // insert detail_permohonan_log - + PenawaranDetailTender::where('status', 1) ->where('penawaran_id', $request->penawaran_id) ->whereNotIn('id', [$id]) - ->update(['status' => 2, + ->update(['status' => 2, 'updated_by' => Auth::id(), 'updated_at' => now() ]); @@ -228,12 +228,12 @@ class OtorisasiPenawaranController extends Controller 'updated_by' => Auth::id(), 'updated_at' => now() ]); - + // log $detailPenawaran = PenawaranDetailTender::where('penawaran_id', $request->penawaran_id)->get(); if(sizeof($detailPenawaran)>0) { - + foreach ($detailPenawaran as $model) { array_push($dataDetailPenawaranLog, [ 'detail_penawaran_id' =>$model->id, @@ -248,12 +248,12 @@ class OtorisasiPenawaranController extends Controller 'authorized_at' =>$model->authorized_at, 'created_at' =>$model->created_at, 'updated_at' =>$model->updated_at, - 'deleted_at' =>$model->deleted_at, + 'deleted_at' =>$model->deleted_at, 'created_by' =>$model->created_by, 'updated_by' =>$model->updated_by, 'deleted_by' =>$model->deleted_by ]); - + } PenawaranDetailTenderLog::insert($dataDetailPenawaranLog); diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index f273b0a..ea1c261 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -5,14 +5,18 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; use Exception; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use Modules\Lpj\Http\Requests\PenilaianRequest; use Modules\Lpj\Models\JenisPenilaian; use Modules\Lpj\Models\Penilaian; +use Modules\Lpj\Models\PenilaianTeam; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\Teams; +use Modules\Lpj\Models\Regions; use Modules\Lpj\Models\TeamsUsers; use Modules\Usermanagement\Models\User; +use Illuminate\Support\Facades\Auth; class PenilaianController extends Controller { @@ -37,16 +41,95 @@ class PenilaianController extends Controller if ($validatedData) { try { - $penilaian = Penilaian::create($validatedData); + DB::beginTransaction(); + + $penilaian = Penilaian::create($validatedData); + $validatedData['penilaian_id'] = $penilaian->id; + + $teams_ids = []; + $user_ids = []; + $roles = []; + + if ($validatedData['surveyor_id'] === 'pilih_dari_region') { + $surveyor_region_id = $validatedData['surveyor_region_id']; + + // Hapus team_id sebelumnya di Permohonan jika ada + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + if ($permohonan) { + $permohonan->update([ + 'region_id' => $surveyor_region_id, + ]); + } + + $teams_ids[] = $surveyor_region_id; + $user_ids[] = null; + $roles[] = 'surveyor'; + } else { + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + $teams_ids[] = $validatedData['teams_id']; + + if (isset($validatedData['penilai_surveyor_id'])) { + $user_ids[] = $validatedData['penilai_surveyor_id']; + } else { + $user_ids[] = $validatedData['surveyor_id']; + } + + $roles[] = 'surveyor'; + + } + + if ($validatedData['penilai_id'] === 'pilih_dari_region') { + $penilaian_region_id = $validatedData['penilai_region_id']; + + // Hapus team_id sebelumnya di Permohonan jika ada + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + if ($permohonan) { + $permohonan->update([ + 'region_id' => $penilaian_region_id, + ]); + } + + $teams_ids[] = $penilaian_region_id; + $user_ids[] = null; + $roles[] = 'penilai'; + } else { + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + $teams_ids[] = $validatedData['teams_id']; + + if (isset($validatedData['penilai_surveyor_id'])) { + $user_ids[] = $validatedData['penilai_surveyor_id']; + }else { + $user_ids[] = $validatedData['penilai_id']; + } + + $roles[] = 'penilai'; + + } + + foreach ($teams_ids as $key => $teams_id) { + PenilaianTeam::create([ + 'penilaian_id' => $validatedData['penilaian_id'], + 'team_id' => $teams_id, + 'user_id' => $user_ids[$key], + 'role' => $roles[$key], + ]); + } + + if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { + $status = 'registered'; + } else { + $status = 'assign'; + } - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); $permohonan->update([ - 'status' => 'assign', + 'status' => $status, ]); + DB::commit(); + return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan'); } catch (Exception $e) { - + DB::rollBack(); return redirect()->route('penilaian.index')->with('error', $e->getMessage()); } } @@ -63,22 +146,43 @@ class PenilaianController extends Controller /** * Update the specified resource in storage. */ - public function update(PenilaianRequest $request, $id) + public function update(Request $request, $id) { - $validate = $request->validated(); - if ($validate) { - try { - $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->firstOrFail(); - $penilaian->update($validate); - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); - $permohonan->update([ - 'status' => 'assign', - ]); + try { + DB::beginTransaction(); + $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first(); + + $penilaianId = $penilaian->id; + + $penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get(); + + + foreach ($penilainTeam as $item) { + if ($item->role === 'surveyor' && $item->user_id === null) { + $item->update([ + 'user_id' => $request->surveyor_id, + 'role' => 'surveyor', + ]); + } + + if ($item->role === 'penilai' && $item->user_id === null) { + $item->update([ + 'user_id' => $request->penilai_id, + 'role' => 'penilai', + ]); + } - return redirect()->route('penilaian.index', $id)->with('success', 'Penilaian berhasil diubah'); - } catch (Exception $e) { - return redirect()->route('penilaian.index', $id)->with('error', $e->getMessage()); } + + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); + $permohonan->update([ + 'status' => 'assign', + ]); + DB::commit(); + return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan'); + } catch (Exception $e) { + DB::rollBack(); + return redirect()->route('penilaian.index')->with('error', $e->getMessage()); } } @@ -87,42 +191,66 @@ class PenilaianController extends Controller */ public function assignment($id) { - $permohonan = Permohonan::with( - [ - 'user', - 'debiture.province', - 'debiture.city', - 'debiture.district', - 'debiture.village', - 'branch', - 'tujuanPenilaian', - ], - )->findOrFail($id); + $permohonan = Permohonan::with([ + 'user', + 'debiture.province', + 'debiture.city', + 'debiture.district', + 'debiture.village', + 'branch', + 'tujuanPenilaian', + ])->findOrFail($id); - $idPenilaian = $permohonan->jenis_penilaian_id; + $idPenilaian = $permohonan->jenis_penilaian_id; $idRegion = $permohonan->region_id; $jenisPenilaian = JenisPenilaian::find($idPenilaian); + $userTeam = Teams::with(['regions', 'teamsUsers.user']) + ->whereHas('regions', function ($q) use ($idRegion) { + $q->where('id', $idRegion); + }) + ->get(); - $teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user', ]) - ->whereHas('regions', function ($q) use ($idRegion) { - $q->where('id', $idRegion); - })->get(); + $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'; + }); + })->map(function ($teamUser) { + return $teamUser->user; + }); + })->unique('id'); + $existingTeamIds = $teamPenilai->pluck('id')->toArray(); + + $updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user']) + ->whereNotIn('id', $existingTeamIds) + ->get(); $regionName = null; - foreach ($teamPenilai as $item) { + foreach ($userTeam as $item) { $regionName = $item->regions; } + // $regionName = $userTeam->first()?->regions->name; + - // dd($teamPenilai); $penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first(); - return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName')); - } + $penilaianTeam = collect(); + if ($penilaian && $penilaian->id) { + $penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get(); + } + + // return response()->json([ + // 'penilaianTeam' => $penilaianTeam + // ]); + + + return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai', 'penilaianTeam')); + } /** * Remove the specified resource from storage. */ @@ -160,8 +288,9 @@ class PenilaianController extends Controller public function dataForDatatables(Request $request) { + if (is_null($this->user) || !$this->user->can('debitur.view')) { - // abort(403, 'Sorry! You are not allowed to view users.'); + } $query = Permohonan::query(); @@ -180,6 +309,9 @@ class PenilaianController extends Controller } $query->whereRaw('LOWER(status) = ?', ['registered']); + $query->whereHas('region.teams.teamsUsers.user', function ($q) { + $q->where('id', Auth::user()->id); + }); if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); @@ -202,7 +334,7 @@ class PenilaianController extends Controller } $filteredRecords = $query->count(); - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'])->get(); $pageCount = ceil($totalRecords / $size); @@ -222,7 +354,8 @@ class PenilaianController extends Controller - public function otorisator(Request $request){ + public function otorisator(Request $request) + { $type = $request->route('type'); $header = ''; @@ -248,7 +381,8 @@ class PenilaianController extends Controller return view('lpj::penilaian.otorisator.index', compact('header')); } - public function show($id){ + public function show($id) + { $permohonan = Permohonan::find($id); @@ -272,7 +406,10 @@ class PenilaianController extends Controller $status = 'proses paparan'; break; case 'Pembayaran': - $status = 'proses pembayaran'; + $status = 'proses'; + break; + case 'Pembatalan': + $status = 'order'; break; default: $status = ''; @@ -298,7 +435,11 @@ class PenilaianController extends Controller if (!empty($otorisator)) { - $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + if ($status == 'proses') { + $query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']); + } else { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } } // Sorting berdasarkan sortField dan sortOrder diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php index e2a3da4..6bd6bfb 100644 --- a/app/Http/Controllers/PermohonanController.php +++ b/app/Http/Controllers/PermohonanController.php @@ -33,25 +33,20 @@ public function store(PermohonanRequest $request) { - $validate = $request->validated(); if ($validate) { try { // Save to database Permohonan::create($validate); return redirect() - ->route('permohonan.index') - ->with('success', 'Permohonan created successfully'); + ->route('permohonan.index')->with('success', 'Permohonan created successfully'); } catch (Exception $e) { return redirect() - ->route('permohonan.create') - ->with('error', 'Failed to create permohonan' . $e->getMessage()); + ->route('permohonan.create')->with('error', 'Failed to create permohonan' . $e->getMessage()); } } else { return redirect() - ->route('permohonan.create') - ->with('success', 'error naon iye') - ->withInput(); + ->route('permohonan.create')->with('success', 'error naon iye')->withInput(); } } @@ -113,19 +108,20 @@ public function update(PermohonanRequest $request, $id) { $validate = $request->validated(); - if ($validate) { try { // Update in database $permohonan = Permohonan::find($id); + if ($permohonan->status == 'revisi') { + $validate['status'] = 'order'; + } + $permohonan->update($validate); return redirect() - ->route('permohonan.index') - ->with('success', 'Permohonan updated successfully'); + ->route('permohonan.index')->with('success', 'Permohonan updated successfully'); } catch (Exception $e) { return redirect() - ->route('permohonan.edit', $id) - ->with('error', 'Failed to update permohonan'); + ->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan'); } } } @@ -313,11 +309,12 @@ return view('lpj::permohonan.show', compact('permohonan')); } - public function print($id){ + public function print($id) + { $permohonan = Permohonan::find($id); return view('lpj::permohonan.print', compact('permohonan')); -// $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan')); - // return $pdf->stream(); + // $pdf = Pdf::loadView('lpj::permohonan.print', compact('permohonan')); + // return $pdf->stream(); } } diff --git a/app/Http/Controllers/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index a37669b..d8a5e9b 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -75,7 +75,7 @@ class ProsesPenawaranController extends Controller // Get the data for the current page //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - $data = $query->with(['tujuanPenilaianKJPP'])->get(); + $data = $query->with(['tujuanPenilaianKJPP','permohonan','permohonan.debiture'])->get(); // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); @@ -110,13 +110,13 @@ class ProsesPenawaranController extends Controller $id = $request->id; $penawaran = PenawaranTender::find($id); $penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id) - ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_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(); - + if ($penawaran) { - + $i=0; foreach($penawrandetails as $obj) { @@ -156,11 +156,11 @@ class ProsesPenawaranController extends Controller $dataPenawaranDetail = array(); if (request()->ajax()) { $validator = ProsesPenawaranController::rulesEditnya($request, $id); - + if ($validator['fails']) { $data['message'] = $validator['errors']; $data['status'] = 'error'; - } + } else { try { @@ -174,9 +174,9 @@ class ProsesPenawaranController extends Controller { $file_tmp = $request->file('dokumen_persetujuan'); $folderPath = 'uploads/penawaran/'; - if ($file_tmp->isValid()) + if ($file_tmp->isValid()) { - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension $extension = $file_tmp->getClientOriginalExtension(); @@ -205,16 +205,16 @@ class ProsesPenawaranController extends Controller { $data['status'] = 'error'; $data['message'] ['check_file'] = array("Silahkan upload file"); - + } - + } catch (Exception $e) { - + $data['status'] = 'error'; $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); } } - + } else { $data['status'] = 'error'; $data['message'] ['message_ajax'] = array("no ajax request"); @@ -257,57 +257,52 @@ class ProsesPenawaranController extends Controller $dataPenawaran = array(); $penawaran = PenawaranTender::find($id); $checkActiveDateRange = checkActiveDateRangePenawaran($id); - + // cek masa aktif penawaran if($checkActiveDateRange) { - - $checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id); + + $checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id); if($checkKelengkapanDetailKJPP) { DB::beginTransaction(); try { - $dataPenawaran = ['status' => 'persetujuan-penawaran', + $_updatestatus = ['status' => 'proposal-tender', 'updated_by' => Auth::id(), 'updated_at' => now() ]; - - $dataPermohonan = ['status' => 'persetujuan-penawaran', - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]; - + $permohonan = Permohonan::where('nomor_registrasi','=', $penawaran->nomor_registrasi)->first(); - - $penawaran->update($dataPenawaran); - $permohonan->update($dataPermohonan); - + + $penawaran->update($_updatestatus); + $permohonan->update($_updatestatus); + DB::commit(); - + $data['message'] ['message_success'] = array('Sukses melakukan Proses Penawaran'); $data['status'] = 'success'; - + } catch (Exception $e) { DB::rollBack(); // dd($e); $data['message'] ['message_error_try_catch'] = array("Gagal melakukan Proses Penawaran"); $data['status'] = 'error'; } - + } else { $data['message'] ['cek_kelengkapan_data'] = array("Silahkan lengkapi data KJPP"); $data['status'] = 'error'; } - + } else { $data['message'] ['active_date_range'] = array("Penawaran sudah di tutup"); $data['status'] = 'error'; } - + return response()->json($data); } @@ -326,12 +321,12 @@ class ProsesPenawaranController extends Controller 'updated_at' => now() ]; - $detailpenawaran->update($dataDetailPenawaran); + $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); } diff --git a/app/Http/Controllers/ProsesPenawaranUlangController.php b/app/Http/Controllers/ProsesPenawaranUlangController.php index f34ee70..c6aa41b 100644 --- a/app/Http/Controllers/ProsesPenawaranUlangController.php +++ b/app/Http/Controllers/ProsesPenawaranUlangController.php @@ -41,16 +41,16 @@ class ProsesPenawaranUlangController extends Controller $query =PenawaranTender::query() ->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') - ->where('penawaran.status','=','persetujuan-penawaran') - ->withCount('penawarandetails'); - + ->where('penawaran.status','=','proposal-tender') + ->withCount('penawarandetails'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -118,11 +118,11 @@ class ProsesPenawaranUlangController extends Controller if (request()->ajax()) { $id = $request->id; - $penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->find($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') + ->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(); @@ -143,7 +143,7 @@ class ProsesPenawaranUlangController extends Controller { $penawaranString = convertSlug($penawaran->status); $penawaran->status = $penawaranString; - } + } $data['penawaran'] = $penawaran; $data['penawrandetails'] = $penawrandetails; @@ -176,7 +176,7 @@ class ProsesPenawaranUlangController extends Controller if ($validator['fails']) { $data['message'] = $validator['errors']; $data['status'] = 'error'; - } + } else { // cek masa aktif penawaran @@ -187,7 +187,7 @@ class ProsesPenawaranUlangController extends Controller { DB::beginTransaction(); try { - + $dataDetailPenawaranLog = [ 'detail_penawaran_id' =>$detailpenawaran->id, 'kjpp_rekanan_id' =>$detailpenawaran->kjpp_rekanan_id, @@ -201,15 +201,15 @@ class ProsesPenawaranUlangController extends Controller 'authorized_at' =>$detailpenawaran->authorized_at, 'created_at' =>$detailpenawaran->created_at, 'updated_at' =>$detailpenawaran->updated_at, - 'deleted_at' =>$detailpenawaran->deleted_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); @@ -222,9 +222,9 @@ class ProsesPenawaranUlangController extends Controller { $file_tmp = $request->file('dokumen_persetujuan'); $folderPath = 'uploads/penawaran/'; - if ($file_tmp->isValid()) + if ($file_tmp->isValid()) { - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension $extension = $file_tmp->getClientOriginalExtension(); @@ -247,9 +247,9 @@ class ProsesPenawaranUlangController extends Controller { $data['status'] = 'error'; $data['message']['check_file'] = array("Silahkan upload file"); - + } - + $detailpenawaran->update($dataDetailPenawaran); if($pleaseCommit) @@ -279,7 +279,7 @@ class ProsesPenawaranUlangController extends Controller $data['status'] = 'error'; $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); } - + } } else { @@ -288,7 +288,7 @@ class ProsesPenawaranUlangController extends Controller } return response()->json($data); - } + } // delete KJPP di detail_penawaran (status di buat 0) public function updateKJPPStatus(Request $request, $id): JsonResponse @@ -316,16 +316,16 @@ class ProsesPenawaranUlangController extends Controller 'authorized_at' =>$model->authorized_at, 'created_at' =>$model->created_at, 'updated_at' =>$model->updated_at, - 'deleted_at' =>$model->deleted_at, + 'deleted_at' =>$model->deleted_at, 'created_by' =>$model->created_by, 'updated_by' =>$model->updated_by, 'deleted_by' =>$model->deleted_by ]; - + PenawaranDetailTenderLog::create($dataDetailPenawaranLog); // log - + $data['id']=$id; $dataku = ['status' => '0', @@ -333,7 +333,7 @@ class ProsesPenawaranUlangController extends Controller 'updated_at' => now() ]; - $model->update($dataku); + $model->update($dataku); DB::commit(); $data['status'] = 'success'; diff --git a/app/Http/Controllers/RegistrasiController.php b/app/Http/Controllers/RegistrasiController.php index adc0f3e..99e5f4f 100644 --- a/app/Http/Controllers/RegistrasiController.php +++ b/app/Http/Controllers/RegistrasiController.php @@ -167,6 +167,8 @@ $dataku['jenis_penilaian_id'] =$request->jenis_penilaian; $dataku['region_id'] =$request->region; $dataku['status'] = 'registered'; + if($request->catatan2) + $dataku['registrasi_catatan'] =$request->catatan2; } else { diff --git a/app/Http/Controllers/RegistrasiFinalController.php b/app/Http/Controllers/RegistrasiFinalController.php index 2561079..4ccb0e7 100644 --- a/app/Http/Controllers/RegistrasiFinalController.php +++ b/app/Http/Controllers/RegistrasiFinalController.php @@ -27,7 +27,8 @@ use Exception; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; - + use Illuminate\Support\Facades\Storage; + use Modules\Lpj\Models\PenawaranTender; class RegistrasiFinalController extends Controller @@ -50,15 +51,15 @@ use Modules\Lpj\Models\PenawaranTender; ->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') ->where('penawaran.status','=','spk') - ->withCount('penawarandetails'); - + ->withCount('penawarandetails'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - + $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); } @@ -84,10 +85,10 @@ use Modules\Lpj\Models\PenawaranTender; // Get the filtered count of records $filteredRecords = $query->count(); - + // Get the data for the current page //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - $data = $query->get(); + $data = $query->with(['permohonan'])->get(); // dd($data); $i=0; foreach($data as $obj) @@ -96,18 +97,18 @@ use Modules\Lpj\Models\PenawaranTender; { $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); } - + if($obj->biaya_kjpp_sebelumnya) { $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); - + } // date_range if($obj->start_date && $obj->end_date) { $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); - + } $i++; @@ -135,6 +136,13 @@ use Modules\Lpj\Models\PenawaranTender; public function show($id) { $permohonan = Permohonan::find($id); + if($permohonan->dokumen) + { + $pdfSPK_path = Storage::url($permohonan->dokumen); + $permohonan->dokumen = $pdfSPK_path; + $permohonan->dokumen = '| Dokumen SPK.pdf   '; + } + return view('lpj::registrasifinal.show', compact('id','permohonan')); } @@ -151,7 +159,7 @@ use Modules\Lpj\Models\PenawaranTender; if (request()->ajax()) { $id = $request->id; $datas = Permohonan::find($id); - + if ($datas) { $penawaran=null; $regions=null; @@ -163,7 +171,13 @@ use Modules\Lpj\Models\PenawaranTender; { $penawaranString = convertSlug($penawaran->status); $penawaran->status = $penawaranString; - } + } + + if($datas->dokumen) + { + $pdfSPK_path = Storage::url($datas->dokumen); + $datas->dokumen = $pdfSPK_path; + } $data['status'] = 'success'; $data['regions'] = $regions; @@ -189,14 +203,14 @@ use Modules\Lpj\Models\PenawaranTender; $data = array(); $dataPermohonan = array(); $dataPenawaran = array(); - + if (request()->ajax()) { $validator = RegistrasiFinalController::rulesEditnya($request, $id); - + if ($validator['fails']) { $data['message'] = $validator['errors']; $data['status'] = 'error'; - } + } else { DB::beginTransaction(); @@ -210,18 +224,18 @@ use Modules\Lpj\Models\PenawaranTender; 'keterangan' => $request->catatan, 'authorized_at' => now(), 'authorized_status' =>1, - 'authorized_by' => Auth::id() + 'authorized_by' => Auth::id() ]; $dataPenawaran = ['status' => 'registrasi-final']; - + $permohonan = Permohonan::find($id); - $penawaran = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); - + $penawaran = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); + $permohonan->update($dataPermohonan); $penawaran->update($dataPenawaran); - // + // DB::commit(); $data['status'] = 'success'; @@ -232,7 +246,7 @@ use Modules\Lpj\Models\PenawaranTender; $data['message']['message_try_catch'] = array('Regitrasi Final '.$permohonan->nomor_registrasi.' failed.'); } } - + } else { $data['status'] = 'error'; $data['message']['message_ajax'] = array("no ajax request"); @@ -245,7 +259,7 @@ use Modules\Lpj\Models\PenawaranTender; public function rulesEditnya($request, $id) { $validate_catatan=''; - + $validateIt = [ // 'name' diambil dari definisi parameter yang di kirim pada POST Data 'region' => 'required', diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index 5b4d9de..60568f9 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -1,14 +1,22 @@ user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp']) + ->where('permohonan.status','=','spk'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('penawaran.tanggal_permohonan', 'LIKE', '%' . $search . '%'); + + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + + $data = $query->get(); + + $i=0; + foreach($data as $obj) + { + if($obj->tanggal_penilaian_sebelumnya) + { + $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); + } + + if($obj->biaya_kjpp_sebelumnya) + { + $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); + + } + + // date_range + if($obj->start_date && $obj->end_date) + { + $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); + + } + + $i++; + } + + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data + ]); + } + public function viewSpk() { // return Excel::download(new TujuanPenilaianExport, 'tujuan_penilaian.xlsx'); return view('lpj::spk.view'); } + + public function show($id) + { + $penawaran = PenawaranTender::find($id); + // return view('lpj::spk.show', compact('id','permohonan')); + } + + public function edit($id) + { + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->where('detail_penawaran.status','=',1) + ->where('penawaran.id','=', $id) + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', + 'kjpp.name as kjpp_name', + 'kjpp.address as kjpp_address', + 'jenis_laporan.name as jenis_laporan_name' + )->first(); + + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) + ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') + ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', + 'dokumen_jaminan.address as dokumen_jaminan_address'); + + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + return view('lpj::spk.edit', compact('data', 'penawaran')); + } + + public function update(Request $request, $id): JsonResponse + { + // init + $data1 = array(); + $dataPermohonan = array(); + // data + + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->where('detail_penawaran.status','=',1) + ->where('penawaran.id','=', $id) + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'kjpp.name as kjpp_name', + 'kjpp.address as kjpp_address', + 'jenis_laporan.name as jenis_laporan_name' + )->first(); + + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) + ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') + ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); + + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + $folderPath = 'uploads/spk/'; + $extension = '.pdf'; + $newFileName = "SPK_".$penawaran->nomor_registrasi."_".Auth::user()->id."_".time(). $extension; + $newFileNameWithPath = $folderPath . $newFileName; + + // update table permohonan + $dataPermohonan=['dokumen' => $newFileNameWithPath]; + $data->update($dataPermohonan); + // update table permohonan + + // pdf path + $spkpenawaran_path = Storage::url($newFileNameWithPath); + + $pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran')); + + $content = $pdf->download()->getOriginalContent(); + Storage::put('public/'.$newFileNameWithPath,$content); + + $data1['status'] = 'success'; + $data1['spkpenawaran_path'] = $spkpenawaran_path; + $data1['message']['message_success'] = array('Generate SPK PDF successfully'); + + return response()->json($data1); + } + + public function dokumennya() + { + // return view('lpj::spk.dokumennya'); + $id="3"; + $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') + ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') + ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') + ->where('detail_penawaran.status','=',1) + ->where('penawaran.id','=', $id) + ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', + 'kjpp.name as kjpp_name', + 'kjpp.address as kjpp_address', + 'jenis_laporan.name as jenis_laporan_name' + )->first(); + + $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) + ->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id') + ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') + ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', + 'dokumen_jaminan.address as dokumen_jaminan_address'); + + $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + return view('lpj::spk.dokumennya', compact('data', 'penawaran')); + } + + public function download($id) { + $document = Permohonan::find($id); + + return response()->download(storage_path('app/public/' .$document->dokumen)); + } } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 36b9ae2..f19d4c9 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; use Illuminate\Http\Response; use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Branch; @@ -32,9 +33,14 @@ use Modules\Lpj\Models\Denah; use Modules\Lpj\Models\FotoJaminan; use Modules\Lpj\Models\Lingkungan; use Modules\Lpj\Models\LantaiUnit; +use Modules\Lpj\Models\Lantai; +use Modules\Lpj\Models\ViewUnit; use Modules\Lpj\Models\ObjekJaminan; use Modules\Lpj\Models\RuteJaminan; use Modules\Lpj\Models\AnalisaUnit; +use Modules\Lpj\Models\GolonganMasySekitar; +use Modules\Lpj\Models\TingkatKeramaian; +use Modules\Lpj\Models\LaluLintasLokasi; use Modules\Lpj\Models\SpekBagunanAnalisaDetail; use Modules\Lpj\Http\Requests\SurveyorRequest; use Modules\Lpj\Http\Requests\FormSurveyorRequest; @@ -42,6 +48,7 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest; class SurveyorController extends Controller { public $user; + /** * Display a listing of the resource. */ @@ -113,6 +120,8 @@ class SurveyorController extends Controller ->where('permohonan_id', $id) ->get(); + + return view('lpj::surveyor.detail', compact( 'buttonDisable', 'fotojaminan', @@ -508,6 +517,11 @@ class SurveyorController extends Controller $query->whereRaw('LOWER(status) = ?', ['assign']); + $query->whereHas('region.teams.teamsUsers.user', function ($q) { + $q->where('id', Auth::user()->id); + }); + + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { $order = $request->get('sortOrder'); $column = $request->get('sortField'); @@ -552,6 +566,8 @@ class SurveyorController extends Controller { $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + + $branches = Branch::all(); $provinces = Province::all(); @@ -570,6 +586,11 @@ class SurveyorController extends Controller $spekBangunan = SpekBangunan::all(); $saranaPelengkap = SaranaPelengkap::all(); $arahMataAngin = ArahMataAngin::all(); + $lantai = Lantai::all(); + $viewUnit = ViewUnit::all(); + $golMasySekitar = GolonganMasySekitar::all(); + $tingkatKeramaian = TingkatKeramaian::all(); + $laluLintasLokasi = LaluLintasLokasi::all(); $analisa = Analisa::with('analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan') @@ -597,6 +618,11 @@ class SurveyorController extends Controller 'spekBangunan', 'saranaPelengkap', 'arahMataAngin', + 'lantai', + 'viewUnit', + 'golMasySekitar', + 'tingkatKeramaian', + 'laluLintasLokasi' )); } @@ -625,10 +651,6 @@ class SurveyorController extends Controller $provinces = Province::all(); $fotoJaminan = FotoJaminan::with(['objekJaminan', 'lantaiUnit' ,'ruteJaminan', 'lingkungan'])->where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); - - // return response()->json([ - // 'data' => $fotoJaminan, - // ]); return view('lpj::surveyor.components.foto', compact('permohonan', 'surveyor', 'branches', 'provinces', 'fotoJaminan')); } @@ -658,25 +680,18 @@ class SurveyorController extends Controller } + + + private function getHeader(string $type): array + { + return self::HEADERS[$type] ?? []; + } + public function data(Request $request) { $type = $request->route('type'); - - $headers = [ - 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], - 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], - 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], - 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], - 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], - 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], - 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], - 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], - 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], - ]; - - $header = $headers[$type] ?? ''; - + $header = $this->getHeader($request->route('type')); return view('lpj::surveyor.data.index', compact('header')); } @@ -684,21 +699,9 @@ class SurveyorController extends Controller public function createData($type) { - $headers = [ - 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], - 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], - 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], - 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], - 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], - 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], - 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], - 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], - 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], - ]; - - - $header = $headers[$type] ?? ''; - return view('lpj::surveyor.data.form', compact('header')); + $spekKategoriBagunan = SpekKategoritBangunan::all(); + $header = $this->getHeader($type); + return view('lpj::surveyor.data.form', compact('header', 'spekKategoriBagunan')); } @@ -708,37 +711,37 @@ class SurveyorController extends Controller $validate = $request->validated(); if ($validate) { - $type = $request->route('type'); + try { + $type = $request->route('type'); - $modelClasses = [ - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'ketinggian-tanah' => KetinggianTanah::class, - 'kondisi-fisik-tanah' => KondisiFisikTanah::class, - 'jenis-bangunan' => JenisBangunan::class, - 'kondisi-bangunan' => KondisiBangunan::class, - 'sifat-bangunan' => SifatBangunan::class, - 'sarana-pelengkap' => SaranaPelengkap::class, - ]; + $modelClass = $this->getModelClass($type); - if (!array_key_exists($type, $modelClasses)) { + if (!$modelClass) { return redirect() ->route('basicdata.'. $type .'.index') ->with('error', 'Invalid type specified.'); } - $modelClass = $modelClasses[$type]; - $data = $request->all(); - $data['status'] = true; + if ($type == 'spek-bangunan') { + $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; + + } + + + $data = array_merge($validate, ['status' => true]); $modelClass::create($data); return redirect() ->route('basicdata.' . $type .'.index') ->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()); + } } } @@ -757,6 +760,9 @@ class SurveyorController extends Controller 'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan', SpekBangunan::class], 'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan', SpekKategoritBangunan::class], 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap', SaranaPelengkap::class], + 'lantai-unit' => ['Lantai Unit', 'lantai-unit', Lantai::class], + 'view-unit' => ['View Unit', 'view-unit', ViewUnit::class], + 'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar', GolonganMasySekitar::class], ]; @@ -769,7 +775,13 @@ class SurveyorController extends Controller $header = $dataMap[$type] ?? ''; $model = $modelClass::findOrFail($id); - return view('lpj::surveyor.data.form', compact('header', 'model')); + if ($type == 'spek-bangunan') { + $spekKategoriBagunan = SpekKategoritBangunan::all(); + + } + + + return view('lpj::surveyor.data.form', compact('header', 'model', 'spekKategoriBagunan')); } @@ -777,26 +789,22 @@ class SurveyorController extends Controller { $validate = $request->validated(); if ($validate) { - $modelClasses = [ - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'ketinggian-tanah' => KetinggianTanah::class, - 'kondisi-fisik-tanah' => KondisiFisikTanah::class, - 'jenis-bangunan' => JenisBangunan::class, - 'kondisi-bangunan' => KondisiBangunan::class, - 'sifat-bangunan' => SifatBangunan::class, - 'sarana-pelengkap' => SaranaPelengkap::class, + $modelClass = $this->getModelClass($type); - ]; + if ($type == 'spek-bangunan') { + $validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id; + + } // Check if the provided type exists in the modelClasses - if (!array_key_exists($type, $modelClasses)) { + if (!$modelClass) { return redirect() ->route('basicdata.' . $type . '.index') ->with('error', 'Invalid type specified.'); } - $modelClass = $modelClasses[$type]; + + + $model = $modelClass::findOrFail($id); $model->update($validate); @@ -817,8 +825,6 @@ class SurveyorController extends Controller //abort(403, 'Sorry! You are not allowed to view users.'); } - // Retrieve data from the database - $models = [ 'Bentuk Tanah' => BentukTanah::class, 'Kontur Tanah' => KonturTanah::class, @@ -828,9 +834,14 @@ class SurveyorController extends Controller 'Jenis Bangunan' => JenisBangunan::class, 'Kondisi Bangunan' => KondisiBangunan::class, 'Sifat Bangunan' => SifatBangunan::class, - // 'Spek Kategori Bangunan' => SpekKategoritBangunan::class, - // 'Spek Bangunan' => SpekBangunan::class, + 'Spek Kategori Bangunan' => SpekKategoritBangunan::class, + 'Spek Bangunan' => SpekBangunan::class, 'Sarana Pelengkap' => SaranaPelengkap::class, + 'Lalu Lintas Depan Lokasi' => LaluLintasLokasi::class, + 'Tingkat Keramaian' => TingkatKeramaian::class, + 'Golongan Masyarakat Sekitar' => GolonganMasySekitar::class, + 'Lantai Unit' => Lantai::class, + 'View Unit' => ViewUnit::class, ]; @@ -840,8 +851,6 @@ class SurveyorController extends Controller throw new InvalidArgumentException("Invalid type: $type"); } - - // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { @@ -897,24 +906,13 @@ class SurveyorController extends Controller { try { - $modelClasses = [ - 'bentuk-tanah' => BentukTanah::class, - 'kontur-tanah' => KonturTanah::class, - 'posisi-kavling' => PosisiKavling::class, - 'ketinggian-tanah' => KetinggianTanah::class, - 'kondisi-fisik-tanah' => KondisiFisikTanah::class, - 'jenis-bangunan' => JenisBangunan::class, - 'kondisi-bangunan' => KondisiBangunan::class, - 'sifat-bangunan' => SifatBangunan::class, - 'sarana-pelengkap' => SaranaPelengkap::class, - ]; + $modelClass = $this->getModelClass($type); - - if (!array_key_exists($type, $modelClasses)) { + if (!$modelClass) { return response()->json(['success' => false, 'message' => 'Invalid type specified.'], 400); } - $modelClass = $modelClasses[$type]; + $model = $modelClass::findOrFail($id); $model->delete(); @@ -948,6 +946,55 @@ class SurveyorController extends Controller ->findOrFail($id); } + public function submitSurveyor(Request $request, $id) + { + + + $permohonan = Permohonan::find($id); + $permohonan->update([ + 'status' => 'done', + ]); + return redirect() + ->route('surveyor.index') + ->with('success', 'form surveyor submitted successfully'); + + } + + + public function validateSubmit(){ + + } + + + private function getModelClass(string $type): ?string + { + return $this->modelClasses[$type] ?? null; + } + + + + private $modelClasses = [ + 'bentuk-tanah' => BentukTanah::class, + 'kontur-tanah' => KonturTanah::class, + 'posisi-kavling' => PosisiKavling::class, + 'ketinggian-tanah' => KetinggianTanah::class, + 'kondisi-fisik-tanah' => KondisiFisikTanah::class, + 'jenis-bangunan' => JenisBangunan::class, + 'kondisi-bangunan' => KondisiBangunan::class, + 'sifat-bangunan' => SifatBangunan::class, + 'sarana-pelengkap' => SaranaPelengkap::class, + 'lalu-lintas-lokasi' => LaluLintasLokasi::class, + 'tingkat-keramaian' => TingkatKeramaian::class, + 'gol-mas-sekitar' => GolonganMasySekitar::class, + 'spek-kategori-bangunan' => SpekKategoritBangunan::class, + 'spek-bangunan' => SpekBangunan::class, + 'lantai-unit' => Lantai::class, + 'view-unit' => ViewUnit::class, + ]; + + + + private function getCommonData() { return [ @@ -964,21 +1011,34 @@ class SurveyorController extends Controller 'spekKategoriBangunan' => SpekKategoritBangunan::all(), 'spekBangunan' => SpekBangunan::all(), 'saranaPelengkap' => SaranaPelengkap::all(), - 'arahMataAngin' => ArahMataAngin::all() + 'arahMataAngin' => ArahMataAngin::all(), + 'lantai' => Lantai::all(), + 'viewUnit' => ViewUnit::all(), + 'golMasySekitar' => GolonganMasySekitar::all(), + 'tingkatKeramaian' => TingkatKeramaian::all(), + 'laluLintasLokasi' => LaluLintasLokasi::all(), + ]; } - public function submitSurveyor(Request $request, $id) - { - $permohonan = Permohonan::find($id); - $permohonan->update([ - 'status' => 'done', - ]); - return redirect() - ->route('surveyor.index') - ->with('success', 'form surveyor submitted successfully'); - - } + private const HEADERS = [ + 'bentuk-tanah' => ['Bentuk Tanah', 'bentuk-tanah'], + 'kontur-tanah' => ['Kontur Tanah', 'kontur-tanah'], + 'posisi-kavling' => ['Posisi Kavling', 'posisi-kavling'], + 'ketinggian-tanah' => ['Ketinggian Tanah', 'ketinggian-tanah'], + 'kondisi-fisik-tanah' => ['Kondisi Fisik Tanah', 'kondisi-fisik-tanah'], + 'jenis-bangunan' => ['Jenis Bangunan', 'jenis-bangunan'], + 'kondisi-bangunan' => ['Kondisi Bangunan', 'kondisi-bangunan'], + 'sifat-bangunan' => ['Sifat Bangunan', 'sifat-bangunan'], + 'sarana-pelengkap' => ['Sarana Pelengkap', 'sarana-pelengkap'], + 'lalu-lintas-lokasi' => ['Lalu Lintas Depan Lokasi', 'lalu-lintas-lokasi'], + 'tingkat-keramaian' => ['Tingkat Keramaian', 'tingkat-keramaian'], + 'gol-mas-sekitar' => ['Golongan Masyarakat Sekitar', 'gol-mas-sekitar'], + 'spek-kategori-bangunan' => ['Spek Kategori Bangunan', 'spek-kategori-bangunan'], + 'spek-bangunan' => ['Spek Bangunan', 'spek-bangunan'], + 'lantai-unit' => ['Lantai Unit', 'lantai-unit'], + 'view-unit' => ['View Unit', 'view-unit'], + ]; } diff --git a/app/Http/Controllers/TeamsController.php b/app/Http/Controllers/TeamsController.php index e360132..9efc3ca 100644 --- a/app/Http/Controllers/TeamsController.php +++ b/app/Http/Controllers/TeamsController.php @@ -31,20 +31,25 @@ class TeamsController extends Controller * Show the form for creating a new resource. */ public function create() - { +{ - // cek region apakah sudah ada di tabel teams - $regionTeam = Teams::pluck('regions_id')->toArray(); - $region = Regions::whereNotIn('id', $regionTeam)->get(); + $regionTeam = Teams::pluck('regions_id')->toArray(); - // cek user apakah sudah ada di tabel teams_users - $userTeam = TeamsUsers::pluck('user_id')->toArray(); - $user = User::whereNotIn('id', $userTeam) - ->with('roles') - ->get(); + $regions = Regions::whereNotIn('id', $regionTeam)->get(); - return view('lpj::teams.form', compact('region', 'user')); - } + $userTeam = TeamsUsers::pluck('user_id')->toArray(); + $usersWithRole = User::whereNotIn('id', $userTeam) + ->with('roles') // Eager load roles + ->get(); + + $user = $usersWithRole->filter(function ($user) { + return $user->roles->contains(function ($role) { + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer'; + }); + }); + + return view('lpj::teams.form', compact('regions', 'user')); +} /** * Store a newly created resource in storage. @@ -97,16 +102,23 @@ class TeamsController extends Controller { $teams = Teams::find($id); - - $region = Regions::all(); + $regions = Regions::all(); $usedUsers = TeamsUsers::where('teams_id', '!=', $id)->pluck('user_id')->toArray(); - $user = User::whereNotIn('id', $usedUsers) + $usersWithRole = User::whereNotIn('id', $usedUsers) ->with('roles') ->get(); + + + $user = $usersWithRole->filter(function ($user) { + return $user->roles->contains(function ($role) { + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer'; + }); + }); + // Ambil user yang sudah ada di tim ini $selectedUsers = $teams->teamsUsers->pluck('user_id')->toArray(); - return view('lpj::teams.form', compact('teams', 'region', 'user', 'selectedUsers')); + return view('lpj::teams.form', compact('teams', 'regions', 'user', 'selectedUsers')); } /** diff --git a/app/Http/Requests/PenilaianRequest.php b/app/Http/Requests/PenilaianRequest.php index 0d9c1bf..a3c1db0 100644 --- a/app/Http/Requests/PenilaianRequest.php +++ b/app/Http/Requests/PenilaianRequest.php @@ -33,11 +33,16 @@ class PenilaianRequest extends FormRequest 'tanggal_kunjungan' => 'required|max:255', 'status' => 'required|string', 'nomor_registrasi' => 'required|string', - 'surveyor_id' => 'nullable|required_without:penilai_surveyor_id', - 'penilaian_id' => 'nullable|required_without:penilai_surveyor_id', - 'penilai_surveyor_id' => 'nullable|required_without_all:surveyor_id,penilaian_id', + + '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', + 'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id', + 'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id', + 'keterangan' => 'nullable', ]; + } diff --git a/app/Http/Requests/PermohonanRequest.php b/app/Http/Requests/PermohonanRequest.php index 8d6ef20..3f2f252 100644 --- a/app/Http/Requests/PermohonanRequest.php +++ b/app/Http/Requests/PermohonanRequest.php @@ -17,10 +17,10 @@ 'nomor_registrasi' => 'nullable|string|max:10', 'tanggal_permohonan' => 'nullable|date', 'user_id' => 'nullable|exists:users,id', - 'branch_id' => 'required|exists:branches,id', + 'branch_id' => 'nullable|exists:branches,id', 'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id', 'debiture_id' => 'required|exists:debitures,id', - 'status' => 'required|string', + 'status' => 'nullable|string', 'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id', 'nilai_plafond_id' => 'required|exists:nilai_plafond,id', 'status_bayar' => 'required|string', @@ -49,6 +49,7 @@ 'tanggal_permohonan' => date('Y-m-d'), 'user_id' => auth()->user()->id, 'branch_id' => auth()->user()->branch_id, + 'status' => 'order' ]); } } diff --git a/app/Http/Requests/SurveyorRequest.php b/app/Http/Requests/SurveyorRequest.php index b986f8e..0762ad9 100644 --- a/app/Http/Requests/SurveyorRequest.php +++ b/app/Http/Requests/SurveyorRequest.php @@ -4,62 +4,138 @@ namespace Modules\Lpj\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; + class SurveyorRequest extends FormRequest { /** - * Get the validation rules that apply to the request. + * Table mapping for different actionszz */ - public function rules() - : array - { - - $action = $this->input('action'); - - $uniqueTable = [ - 'bentuk-tanah' => 'bentuk_tanah', - 'kontur-tanah' => 'kontur_tanah', - 'posisi-kavling' => 'posisi_kavling', - 'ketinggian-tanah' => 'ketinggian_tanah', - 'kondisi-fisik-tanah' => 'kondisi_fisik_tanah', - 'kondisi-bangunan' => 'kondisi_bangunan', - 'jenis-bangunan' => 'jenis_bangunan', - 'sifat-bangunan' => 'sifat_bangunan', - 'sarana-pelengkap' => 'sarana_pelengkap', - 'lalu_lintas_lokasi' => 'lalu_lintas_lokasi', - 'tingkat-keramaian' => 'tingkat_keramaian', - ]; - - - - $rules = [ - 'name' => 'required|max:255', - - ]; - - $id = $this->route('id'); - - if ($this->method() == 'PUT' || $this->method() == 'PATCH') { - $rules['code'] = 'required|max:50|unique:' . $uniqueTable[$action] . ',code,' . $id; - } else { - - $rules['code'] = 'required|max:50|unique:' . $uniqueTable[$action] . ',code'; - } - return $rules; - } + private const TABLE_MAPPING = [ + 'bentuk-tanah' => 'bentuk_tanah', + 'kontur-tanah' => 'kontur_tanah', + 'posisi-kavling' => 'posisi_kavling', + 'ketinggian-tanah' => 'ketinggian_tanah', + 'kondisi-fisik-tanah' => 'kondisi_fisik_tanah', + 'kondisi-bangunan' => 'kondisi_bangunan', + 'jenis-bangunan' => 'jenis_bangunan', + 'sifat-bangunan' => 'sifat_bangunan', + 'sarana-pelengkap' => 'sarana_pelengkap', + 'lalu-lintas-lokasi' => 'lalu_lintas_lokasi', + 'tingkat-keramaian' => 'tingkat_keramaian', + 'gol-mas-sekitar' => 'gol_mas_sekitar', + 'spek-kategori-bangunan' => 'spek_kategori_bangunan', + 'spek-bangunan' => 'spek_bangunan', + 'lantai-unit' => 'lantai', + 'view-unit' => 'view_unit', + ]; /** * Determine if the user is authorized to make this request. */ - public function authorize() - : bool + public function authorize(): bool { return true; } - protected function prepareForValidation() + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return array_merge( + $this->getBaseRules(), + $this->getActionSpecificRules(), + $this->getCodeValidationRules() + ); + } + + /** + * Get base validation rules + */ + private function getBaseRules(): array + { + return [ + 'name' => 'required|max:255', + ]; + } + + /** + * Get action specific validation rules + */ + private function getActionSpecificRules(): array + { + $action = $this->input('action'); + + return match ($action) { + 'spek-bangunan' => [ + 'spek_kategori_bangunan_id' => [ + 'required', + + ], + ], + // Add more action specific rules here + default => [], + }; + } + + /** + * Get code validation rules + */ + private function getCodeValidationRules(): array + { + $action = $this->input('action'); + $table = self::TABLE_MAPPING[$action] ?? null; + + if (!$table) { + return []; + } + + $rules = ['required', 'max:50']; + + if ($this->isMethod('PUT') || $this->isMethod('PATCH')) { + $rules[] = Rule::unique($table, 'code')->ignore($this->route('id')); + } else { + $rules[] = Rule::unique($table, 'code'); + } + + return ['code' => $rules]; + } + + /** + * Prepare the data for validation. + */ + protected function prepareForValidation(): void { $this->merge([ 'status' => true, ]); } + + /** + * Get custom messages for validator errors. + */ + public function messages(): array + { + return [ + 'name.required' => 'Nama harus diisi', + 'name.max' => 'Nama tidak boleh lebih dari 255 karakter', + 'code.required' => 'Kode harus diisi', + 'code.max' => 'Kode tidak boleh lebih dari 50 karakter', + 'code.unique' => 'Kode sudah digunakan', + 'spek_kategori_bangunan_id.required' => 'Kategori bangunan harus dipilih', + ]; + } + + /** + * Get custom attributes for validator errors. + */ + public function attributes(): array + { + return [ + 'name' => 'Nama', + 'code' => 'Kode', + 'spek_kategori_bangunan_id' => 'Kategori Bangunan', + ]; + } } diff --git a/app/Models/GolonganMasySekitar.php b/app/Models/GolonganMasySekitar.php index 5140710..a4d1f9a 100644 --- a/app/Models/GolonganMasySekitar.php +++ b/app/Models/GolonganMasySekitar.php @@ -10,10 +10,12 @@ class GolonganMasySekitar extends Model { use HasFactory; + protected $table = 'gol_mas_sekitar'; /** * The attributes that are mass assignable. */ - protected $fillable = []; + protected $fillable = ['code', 'name', 'status']; + protected static function newFactory(): GolonganMasySekitarFactory { diff --git a/app/Models/KondisiBangunan.php b/app/Models/KondisiBangunan.php index 131c0fa..0fa0f86 100644 --- a/app/Models/KondisiBangunan.php +++ b/app/Models/KondisiBangunan.php @@ -14,7 +14,7 @@ class KondisiBangunan extends Model /** * The attributes that are mass assignable. */ - protected $fillable = []; + protected $fillable = ['code','name']; protected static function newFactory(): KondisiBangunanFactory { diff --git a/app/Models/Lantai.php b/app/Models/Lantai.php new file mode 100644 index 0000000..3330df1 --- /dev/null +++ b/app/Models/Lantai.php @@ -0,0 +1,23 @@ +hasMany(TujuanPenilaianKJPP::class, 'id', 'tujuan_penilaian_kjpp_id'); + return $this->belongsTo(TujuanPenilaianKJPP::class, 'tujuan_penilaian_kjpp_id','id'); } public function permohonan() @@ -46,4 +46,6 @@ class PenawaranTender extends Model { return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id'); } + + } diff --git a/app/Models/Penilaian.php b/app/Models/Penilaian.php index cb2f44c..1de2dc5 100644 --- a/app/Models/Penilaian.php +++ b/app/Models/Penilaian.php @@ -17,7 +17,7 @@ class Penilaian extends Model */ protected $table = 'penilaian'; protected $fillable = [ - 'jenis_penilaian_id', 'teams_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi','penilaian_id','surveyor_id','penilai_surveyor_id', + 'jenis_penilaian_id', 'penilaian_id', 'tanggal_kunjungan', 'keterangan','nomor_registrasi', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by' ]; @@ -39,23 +39,12 @@ class Penilaian extends Model public function userPenilai() { - return $this->belongsTo(User::class, 'penilaian_id', 'id'); + return $this->hasMany(PenilaianTeam::class, 'penilaian_id', 'id'); } - public function userSurveyor() - { - return $this->belongsTo(User::class, 'surveyor_id', 'id'); - } - - public function userPenilaiSurveyor() - { - return $this->belongsTo(User::class, 'penilai_surveyor_id', 'id'); - } public function permohonan() { return $this->belongsTo(Permohonan::class, 'nomor_registrasi', 'nomor_registrasi'); } - - } diff --git a/app/Models/PenilaianTeam.php b/app/Models/PenilaianTeam.php new file mode 100644 index 0000000..808d0de --- /dev/null +++ b/app/Models/PenilaianTeam.php @@ -0,0 +1,39 @@ +belongsTo(User::class, 'user_id', 'id'); + } + + public function team(){ + + return $this->belongsTo(Team::class, 'team_id', 'id'); + } + + public function penilaian(){ + + return $this->hasMany(Penilaian::class, 'penilaian_id', 'id'); + } + + protected static function newFactory(): PenilaianTeamFactory + { + //return PenilaianTeamFactory::new(); + } +} diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index ae61e24..1dd7bdd 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -84,4 +84,13 @@ class Permohonan extends Base { return $this->hasMany(PenawaranTender::class, 'nomor_registrasi'); } + + public function region() + { + return $this->belongsTo(Regions::class, 'region_id'); + } + + public function penawaran(){ + return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi'); + } } diff --git a/app/Models/SpekBangunan.php b/app/Models/SpekBangunan.php index 6d6f077..c471440 100644 --- a/app/Models/SpekBangunan.php +++ b/app/Models/SpekBangunan.php @@ -15,7 +15,7 @@ class SpekBangunan extends Model /** * The attributes that are mass assignable. */ - protected $fillable = []; + protected $fillable = ['code','name','status','spek_kategori_bangunan_id','authorized_status']; diff --git a/app/Models/SpekKategoritBangunan.php b/app/Models/SpekKategoritBangunan.php index 78b91e1..b756be0 100644 --- a/app/Models/SpekKategoritBangunan.php +++ b/app/Models/SpekKategoritBangunan.php @@ -14,7 +14,7 @@ class SpekKategoritBangunan extends Model /** * The attributes that are mass assignable. */ - protected $fillable = []; + protected $fillable = ['code','name','status','authorized_status']; public function bangunan() diff --git a/app/Models/Teams.php b/app/Models/Teams.php index 0fd48a8..57c0775 100644 --- a/app/Models/Teams.php +++ b/app/Models/Teams.php @@ -30,8 +30,8 @@ class Teams extends Model return $this->hasMany(TeamsUsers::class, 'teams_id', 'id'); } - public function penilaian(){ - return $this->hasMany(Penilaian::class, 'teams_id', 'id'); + public function penilaianTeam(){ + return $this->hasMany(PenilaianTeam::class, 'team_id', 'id'); } diff --git a/app/Models/TingkatKeramaian.php b/app/Models/TingkatKeramaian.php index 19e6221..2c82169 100644 --- a/app/Models/TingkatKeramaian.php +++ b/app/Models/TingkatKeramaian.php @@ -10,6 +10,7 @@ class TingkatKeramaian extends Model { use HasFactory; + protected $table = 'tingkat_keramaian'; /** * The attributes that are mass assignable. */ diff --git a/app/Models/ViewUnit.php b/app/Models/ViewUnit.php new file mode 100644 index 0000000..f72e3e8 --- /dev/null +++ b/app/Models/ViewUnit.php @@ -0,0 +1,23 @@ +unsignedBigInteger('permohonan_id'); $table->foreign('permohonan_id')->references('id')->on('permohonan'); $table->string('luas'); + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_16_153841_create_denah_table.php b/database/migrations/2024_10_16_153841_create_denah_table.php index 308a7ad..71475ff 100644 --- a/database/migrations/2024_10_16_153841_create_denah_table.php +++ b/database/migrations/2024_10_16_153841_create_denah_table.php @@ -18,7 +18,7 @@ return new class () extends Migration { $table->string('foto_denah'); $table->string('luas'); - + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php b/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php index f0e1000..3c7f514 100644 --- a/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php +++ b/database/migrations/2024_10_16_153902_create_foto_jaminan_table.php @@ -16,7 +16,7 @@ return new class () extends Migration { $table->foreign('permohonan_id')->references('id')->on('permohonan'); $table->string('pendamping'); - + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php b/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php index b55f7eb..3d02a38 100644 --- a/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php +++ b/database/migrations/2024_10_16_153918_create_objek_jaminan_table.php @@ -19,6 +19,7 @@ return new class () extends Migration { $table->string('name'); $table->string('foto_objek'); + $table->unsignedBigInteger('jenis_jaminan_id'); $table->char('authorized_status', 1)->nullable(); $table->timestamp('authorized_at')->nullable(); $table->unsignedBigInteger('authorized_by')->nullable(); diff --git a/database/migrations/2024_10_25_014340_create_lokasi_unit_table.php b/database/migrations/2024_10_25_014340_create_lokasi_unit_table.php new file mode 100644 index 0000000..cc51e6d --- /dev/null +++ b/database/migrations/2024_10_25_014340_create_lokasi_unit_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $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('lokasi_unit'); + } +}; diff --git a/database/migrations/2024_10_25_014428_create_view_unit_table.php b/database/migrations/2024_10_25_014428_create_view_unit_table.php new file mode 100644 index 0000000..5a99cfe --- /dev/null +++ b/database/migrations/2024_10_25_014428_create_view_unit_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('code')->unique()->index(); + $table->string('name'); + $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('view_unit'); + } +}; diff --git a/database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php b/database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php new file mode 100644 index 0000000..50b5cb3 --- /dev/null +++ b/database/migrations/2024_10_31_024227_create_kategori_jenis_aset_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('name'); + $table->string('code'); + $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('kategori_jenis_aset'); + } +}; diff --git a/database/migrations/2024_10_31_032505_update_penilaian_table.php b/database/migrations/2024_10_31_032505_update_penilaian_table.php new file mode 100644 index 0000000..53d1715 --- /dev/null +++ b/database/migrations/2024_10_31_032505_update_penilaian_table.php @@ -0,0 +1,38 @@ +dropColumn('teams_id'); + + + $table->dropColumn('surveyor_id'); + $table->dropColumn('penilaian_id'); + + $table->dropColumn('penilai_surveyor_id'); + + }); + } + + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penilaian', function (Blueprint $table) { + $table->foreignIdFor(Teams::class); + $table->foreignIdFor(User::class); + }); + } +}; diff --git a/database/migrations/2024_10_31_032940_create_penilai_team_table.php b/database/migrations/2024_10_31_032940_create_penilai_team_table.php new file mode 100644 index 0000000..db287b2 --- /dev/null +++ b/database/migrations/2024_10_31_032940_create_penilai_team_table.php @@ -0,0 +1,38 @@ +id(); + $table->unsignedBigInteger('penilaian_id'); + $table->unsignedBigInteger('team_id'); + $table->unsignedBigInteger('user_id'); + $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('penilai_team'); + } +}; diff --git a/database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php b/database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php new file mode 100644 index 0000000..7b14758 --- /dev/null +++ b/database/migrations/2024_11_01_081201_create_kategori_form_analisa_inspeksi_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('name'); + $table->string('code'); + $table->foreign('kategori_jenis_aset_id')->references('id')->on('kategori_jenis_aset'); + $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('kategori_form_analisa_inspeksi'); + } +}; diff --git a/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php b/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php new file mode 100644 index 0000000..814024d --- /dev/null +++ b/database/migrations/2024_11_01_081225_create_label_name_inspeksi_table.php @@ -0,0 +1,28 @@ +id(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('label_name_inspeksi'); + } +}; diff --git a/module.json b/module.json index 332dcce..572fe59 100644 --- a/module.json +++ b/module.json @@ -89,6 +89,15 @@ } ] }, + { + "title": "SPK", + "path": "spk", + "icon": "ki-filled ki-file-added text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator", "admin"] + }, { "title": "Registrasi Final", "path": "registrasifinal", @@ -141,7 +150,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["senior-officer"] + "roles": ["administrator","senior-officer"] }, { "title": "Otorisator", @@ -150,7 +159,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["senior-officer"], + "roles": ["administrator","senior-officer"], "sub": [ { "title": "Pelaporan", @@ -158,7 +167,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["senior-officer"] + "roles": ["administrator","senior-officer"] }, { "title": "Pembayaran", @@ -166,7 +175,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["senior-officer"] + "roles": ["administrator","senior-officer"] }, { "title": "Pembatalan", @@ -174,7 +183,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["senior-officer"] + "roles": ["administrator","senior-officer"] }, { "title": "SLA", @@ -182,7 +191,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["senior-officer"] + "roles": ["administrator","senior-officer"] } ] }, @@ -193,7 +202,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { @@ -218,7 +227,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Laporan", @@ -430,12 +439,12 @@ "roles": ["administrator", "admin"] }, { - "title": "Bentuk Tanah", + "title": "Bentuk", "path": "basicdata.bentuk-tanah", "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Kontur Tanah", @@ -443,7 +452,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Posisi Kavling", @@ -451,7 +460,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Ketinggian Tanah", @@ -459,7 +468,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Kondisi Fisik Tanah", @@ -467,7 +476,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Jenis Bangunan", @@ -475,7 +484,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Kondisi Bangunan", @@ -483,7 +492,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { "title": "Sifat Bangunan", @@ -491,7 +500,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] + "roles": ["administrator","surveyor"] }, { @@ -500,8 +509,67 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["surveyor"] - } + "roles": ["administrator","surveyor"] + }, + + { + "title": "Lalu Lintas Sekitar", + "path": "basicdata.lalu-lintas-lokasi", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + }, + { + "title": "Tingkat Keramaian", + "path": "basicdata.tingkat-keramaian", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + }, + { + "title": "Masyarakat Sekitar", + "path": "basicdata.gol-mas-sekitar", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + }, + { + "title": "Lantai Unit", + "path": "basicdata.lantai-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + }, + { + "title": "View unit", + "path": "basicdata.view-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + }, + { + "title": "Spesifikasi Bangunan", + "path": "basicdata.spek-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + }, + { + "title": "Kategori Speksikasi Bangunan", + "path": "basicdata.spek-kategori-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator","surveyor"] + } + + ] } ], diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index 7f824da..6bf9a2b 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -46,14 +46,14 @@ @php $sortedTeamsActivity = $teamsActivity->sortBy(function ($item) { - return $item->team->penilaian - ->filter(function ($penilaian) use ($item) { - return $penilaian->penilaian_id == $item->user->id || - $penilaian->surveyor_id == $item->user->id || - $penilaian->penilai_surveyor_id == $item->user->id; + + return $item->team->penilaianTeam + ->filter(function ($penilaianTeam) use ($item) { + return $penilaianTeam->user_id == $item->user->id; }) ->count(); }); + @endphp @foreach ($sortedTeamsActivity as $index => $item) @@ -70,11 +70,9 @@ @php - $totalTasks = $item->team->penilaian - ->filter(function ($penilaian) use ($item) { - return $penilaian->penilaian_id == $item->user->id || - $penilaian->surveyor_id == $item->user->id || - $penilaian->penilai_surveyor_id == $item->user->id; + $totalTasks = $item->team->penilaianTeam + ->filter(function ($penilaianTeam) use ($item) { + return $penilaianTeam->user_id == $item->user->id; }) ->count(); @endphp @@ -156,8 +154,6 @@ const apiUrl = accordion.querySelector('.card-grid').getAttribute( 'data-api-url'); - console.log("This is the API URL: " + apiUrl); - const dataTableOptions = { apiEndpoint: apiUrl, pageSize: 5, @@ -180,7 +176,7 @@ }, jenis_asset: { title: 'Jenis Asset', - render: (item, data) => `${data.jenis_asset || ''}`, + render: (item, data) => `${data.permohonan.debiture.documents.map(d => d.jenis_jaminan.name) || ''}`, }, jenis_report: { title: 'Jenis Report', diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index bc2ee80..cc5a114 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -69,16 +69,28 @@ - + Dokumen Jaminan + @if(isset($detail->dokumen_jaminan)) - @if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo'])) - Download - ) @endif - Preview + @php + $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan]; + @endphp + @foreach($dokumen_jaminan as $index => $dokumen) + @if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo'])) + + {{ basename($dokumen) }} + + + @endif + Preview +
+ @endforeach @endif + diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index b3038ed..4278656 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -132,41 +132,57 @@ @enderror - - @if(isset($document->id)) - @foreach($document->detail as $detail) - -
- - -
- -
- -
- +
+ @if(isset($document->id)) + @php $n = 0; @endphp + @foreach($document->detail as $detail) + +
+ +
-
-
- -
- - @if(isset($detail->dokumen_jaminan)) - {{ basename($detail->dokumen_jaminan) }} - - @endif +
+ +
+ +
-
- @if($detail->details) - @php $custom_field = json_decode($detail->details,true) @endphp +
+ +
+
+
+ + +
+
+
+ + @if(isset($detail->dokumen_jaminan)) + @php + $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan]; + @endphp + @foreach($dokumen_jaminan as $index => $dokumen) + + {{ basename($dokumen) }} + + + @endforeach + @endif +
+
+ + @if($detail->details) + @php $custom_field = json_decode($detail->details,true) @endphp
- @endif + @else + @if($detail->jenisLegalitasJaminan->custom_field) +
+ +
+ @if($detail->jenisLegalitasJaminan->custom_field_type === "text") + + @elseif($detail->jenisLegalitasJaminan->custom_field_type === "number") + + @elseif($detail->jenisLegalitasJaminan->custom_field_type === "date") + + @elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea") + + @else + + @endif +
+
+ @endif + @endif -
- -
- +
+ +
+ +
+
+ @php $n++; @endphp + @endforeach + @foreach($legalitas as $item) +
+ +
-
- @endforeach - @else -
-
+
+ +
+ +
+
+ +
+ +
+
+
+ + +
+
+
+
+
+ + @if($item->custom_field) +
+ +
+ @if($item->custom_field_type === "text") + + @elseif($item->custom_field_type === "number") + + @elseif($item->custom_field_type === "date") + + @elseif($item->custom_field_type === "textarea") + + @else + + @endif +
+
+ @endif + +
+ +
+ +
+
+ @php $n++; @endphp + @endforeach +
@endif
@@ -311,13 +409,13 @@ @push('scripts') {{--Pemilik Jaminan--}} @endpush diff --git a/resources/views/penilaian/form.blade.php b/resources/views/penilaian/form.blade.php index 8d39097..9782132 100644 --- a/resources/views/penilaian/form.blade.php +++ b/resources/views/penilaian/form.blade.php @@ -183,15 +183,14 @@ +
- + + type="text" value="{{ $jenisPenilaian->name }}" readonly> @error('jenis_penilaian_id') {{ $message }} @enderror @@ -203,9 +202,7 @@ Tim Penilai yang di tunjuk
- + @error('teams_id') @@ -214,62 +211,217 @@
-
+ {{-- @php + var_dump($penilaianTeam); + @endphp --}} + +
- +
+ +
- @error('surveyor_id') + @error('surveyor_selection') {{ $message }} @enderror
-
- -
- - @error('penilaian_id') - {{ $message }} - @enderror + -
- -
- - @error('penilai_surveyor_id') - {{ $message }} - @enderror + +
+
+ + @if ( + $penilaianTeam->isNotEmpty() && + $penilaianTeam->contains(fn($item) => $item->role == 'surveyor' && is_null($item->user_id)) + ) +
+ +
+
+ +
+ @error('surveyor_id') + {{ $message }} + @enderror +
+
+ @elseif($penilaianTeam->isEmpty()) +
+ +
+
+ +
+ @error('surveyor_id') + {{ $message }} + @enderror +
+
+ @endif + + + + + + @if ( + $penilaianTeam->isNotEmpty() && + $penilaianTeam->contains(fn($item) => $item->role == 'penilai' && is_null($item->user_id)) +) + +
+ +
+
+ +
+ @error('penilai_id') + {{ $message }} + @enderror +
+
+ @elseif($penilaianTeam->isEmpty()) +
+ +
+
+ +
+ @error('penilai_id') + {{ $message }} + @enderror +
+
+ @endif +
-
- -
- -
- - -
@@ -376,8 +521,57 @@
@endsection @push('scripts') - + + + + +@endpush diff --git a/resources/views/permohonan/form.blade.php b/resources/views/permohonan/form.blade.php index cfb066b..1336330 100644 --- a/resources/views/permohonan/form.blade.php +++ b/resources/views/permohonan/form.blade.php @@ -34,6 +34,7 @@
@if(isset($permohonan->id)) @method('PUT') + @endif @csrf @@ -52,19 +53,14 @@ Tujuan Penilaian
- @if(isset($tujuanPenilaian)) @foreach($tujuanPenilaian as $row) - @if(isset($permohonan)) - - @else - - @endif + @endforeach @endif @@ -83,19 +79,14 @@ @if(isset($fasilitasKredit)) @foreach($fasilitasKredit as $row) - @if(isset($permohonan)) - - @else - - @endif + @endforeach @endif - @error('status') + @error('jenis_fasilitas_kredit_id') {{ $message }} @enderror
@@ -107,22 +98,17 @@
- @error('status') + @error('nilai_plafond_id') {{ $message }} @enderror
@@ -135,10 +121,10 @@
- @error('status') + @error('status_bayar') {{ $message }} @enderror
@@ -149,12 +135,16 @@ Nilai NJOP
- + @error('nilai_njop') {{ $message }} @enderror
+ @if($permohonan->status=='revisi')
Catatan :
@@ -211,19 +201,14 @@ Tujuan Penilaian
- @if(isset($tujuanPenilaian)) @foreach($tujuanPenilaian as $row) - @if(isset($permohonan)) - - @else - - @endif + @endforeach @endif @@ -242,19 +227,14 @@ @if(isset($fasilitasKredit)) @foreach($fasilitasKredit as $row) - @if(isset($permohonan)) - - @else - - @endif + @endforeach @endif - @error('status') + @error('jenis_fasilitas_kredit_id') {{ $message }} @enderror
@@ -266,22 +246,17 @@
- @error('status') + @error('nilai_plafond_id') {{ $message }} @enderror
@@ -294,10 +269,10 @@
- @error('status') + @error('status_bayar') {{ $message }} @enderror
@@ -308,41 +283,16 @@ Nilai NJOP
- + @error('nilai_njop') {{ $message }} @enderror
-
- -
- - @error('status') - {{ $message }} - @enderror -
-
- -
+
+
+ +
+ +
diff --git a/resources/views/registrasi/js/editjs.blade.php b/resources/views/registrasi/js/editjs.blade.php index 1863f78..80bc38d 100644 --- a/resources/views/registrasi/js/editjs.blade.php +++ b/resources/views/registrasi/js/editjs.blade.php @@ -13,6 +13,7 @@ $("#{{ $route[0] }}_div_jenis_pilihan").show(); $("#{{ $route[0] }}_div_catatan").hide(); $("#{{ $route[0] }}_div_region").hide(); + $("#{{ $route[0] }}_div_catatan2").show(); // prepare data setData(); } @@ -94,12 +95,14 @@ $("#{{ $route[0] }}_div_jenis_pilihan").show(); $("#{{ $route[0] }}_catatan").val(''); $("#{{ $route[0] }}_div_catatan").hide(); + $("#{{ $route[0] }}_div_catatan2").show(); } else { $("#{{$route[0]}}_jenis_penilaian option[value=0]").prop('selected', true); $("#{{ $route[0] }}_div_jenis_pilihan").hide(); $("#{{ $route[0] }}_div_catatan").show(); + $("#{{ $route[0] }}_div_catatan2").hide(); } }); @@ -115,6 +118,7 @@ let jenis_penilaian = $("#{{$route[0]}}_jenis_penilaian").val(); let region = $("#{{$route[0]}}_region").val(); let catatan = $("#{{$route[0]}}_catatan").val(); + let catatan2 = $("#{{$route[0]}}_catatan2").val(); if(jenis_penilaian==0) jenis_penilaian=''; @@ -129,6 +133,7 @@ input_data.jenis_penilaian= jenis_penilaian; input_data.region= region; input_data.catatan = catatan; + input_data.catatan2 = catatan2; let useURL= '{{ route($route[0].'.update', $id) }}'; $.ajax({ diff --git a/resources/views/registrasi/show.blade.php b/resources/views/registrasi/show.blade.php index 9ff7791..22cc87f 100644 --- a/resources/views/registrasi/show.blade.php +++ b/resources/views/registrasi/show.blade.php @@ -199,7 +199,7 @@
-
+
@@ -208,6 +208,15 @@ +
+

+
+ +
+ +
diff --git a/resources/views/registrasifinal/edit.blade.php b/resources/views/registrasifinal/edit.blade.php index ddaead8..a2e15e7 100644 --- a/resources/views/registrasifinal/edit.blade.php +++ b/resources/views/registrasifinal/edit.blade.php @@ -69,7 +69,7 @@
diff --git a/resources/views/registrasifinal/index.blade.php b/resources/views/registrasifinal/index.blade.php index 4e50882..b25be3f 100644 --- a/resources/views/registrasifinal/index.blade.php +++ b/resources/views/registrasifinal/index.blade.php @@ -133,10 +133,10 @@ title: 'Status', render: (item, data) => { return ``; diff --git a/resources/views/registrasifinal/js/editjs.blade.php b/resources/views/registrasifinal/js/editjs.blade.php index 9464649..c46596d 100644 --- a/resources/views/registrasifinal/js/editjs.blade.php +++ b/resources/views/registrasifinal/js/editjs.blade.php @@ -43,6 +43,8 @@ $("#textCodePenawaran").text(response.penawaran.code); $("#textStatusPenawaran").text(response.penawaran.status); setRegionList(response.regions,0); + // alert(response.datas.dokumen); + $("#pdfSPK").attr("href", response.datas.dokumen); // success // var message = response.message; diff --git a/resources/views/registrasifinal/show.blade.php b/resources/views/registrasifinal/show.blade.php index 7592d0d..b9471ad 100644 --- a/resources/views/registrasifinal/show.blade.php +++ b/resources/views/registrasifinal/show.blade.php @@ -45,10 +45,9 @@ Tujan Permohonan: - {{ $permohonan->tujuanPenilaian->name }} + {{ $permohonan->tujuanPenilaian->name }} {!! $permohonan->dokumen !!}
-
diff --git a/resources/views/spk/documentSPK.blade.php b/resources/views/spk/documentSPK.blade.php new file mode 100644 index 0000000..a262e02 --- /dev/null +++ b/resources/views/spk/documentSPK.blade.php @@ -0,0 +1,182 @@ + + +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/spk/dokumennya.blade.php b/resources/views/spk/dokumennya.blade.php new file mode 100644 index 0000000..3bfbd22 --- /dev/null +++ b/resources/views/spk/dokumennya.blade.php @@ -0,0 +1,185 @@ +@php + use Nwidart\Modules\Module; +@endphp +@vite(Module::getAssets()) + @stack('styles') +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/spk/edit.blade.php b/resources/views/spk/edit.blade.php new file mode 100644 index 0000000..80b780a --- /dev/null +++ b/resources/views/spk/edit.blade.php @@ -0,0 +1,211 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection +@php + // $route = Route::currentRouteName(); + // dd($route); + $route = explode('.', Route::currentRouteName()); +@endphp + +@section('content') +
+
+
+

Buat SPK

+
+ +
+ +
+
+
+ +
+
+
+
+@endsection +@include('lpj::spk.js.editjs') diff --git a/resources/views/spk/index.blade.php b/resources/views/spk/index.blade.php index fb973a3..eb06f5c 100644 --- a/resources/views/spk/index.blade.php +++ b/resources/views/spk/index.blade.php @@ -1,27 +1,26 @@ @extends('layouts.main') @section('breadcrumbs') - {{ Breadcrumbs::render('basicdata.tujuan-penilaian') }} + {{ Breadcrumbs::render('spk') }} @endsection @section('content')
-
+

- SPK Menu + Daftar SPK

@@ -32,12 +31,28 @@ - - No SPK + + Nomor Registrasi - - Perihal + + Kode Penawaran + + + + Tanggal Penawaran + + + + Tujuan Penilaian + + + + KJPP Data + + + + Status Action @@ -62,87 +77,131 @@ @endsection @push('scripts') - - - + + return '-'; + }, + }, + nama_kjpp_sebelumnya: { + title: 'Nama KJPP Terpilih', + render: (item, data) => { + return `${data.penawaran.nama_kjpp_sebelumnya}`+'
' + +`${data.penawaran.biaya_kjpp_sebelumnya}`+'
' + +`${data.penawaran.tanggal_penilaian_sebelumnya}`; + }, + }, + status: { + title: 'Status', + render: (item, data) => { + return `${data.penawaran.status}`.toUpperCase(); + }, + }, + actions: { + title: 'Status', + render: (item, data) => { + var spkShow =''; + var spkCreate=''; + if(!data.dokumen) + { + spkCreate=` + + `; + } + else + { + spkShow =`
+ + + `; + spkCreate=` + + `; + } + + return `
` + +spkShow+spkCreate+ + `
`; + }, + } + }, + }; + + let dataTable = new KTDataTable(element, dataTableOptions); + // Custom search functionality + searchInput.addEventListener('input', function () { + const searchValue = this.value.trim(); + dataTable.search(searchValue, true); + + }); + + @endpush diff --git a/resources/views/spk/js/editjs.blade.php b/resources/views/spk/js/editjs.blade.php new file mode 100644 index 0000000..813e378 --- /dev/null +++ b/resources/views/spk/js/editjs.blade.php @@ -0,0 +1,39 @@ +@push('scripts') + @include('lpj::assetsku.includenya') + +@endpush \ No newline at end of file diff --git a/resources/views/surveyor/components/alat-berat.blade.php b/resources/views/surveyor/components/alat-berat.blade.php new file mode 100644 index 0000000..c010e38 --- /dev/null +++ b/resources/views/surveyor/components/alat-berat.blade.php @@ -0,0 +1,192 @@ + + +
+ + +
+

Identitas Debitur

+
+
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ +
+

Lokasi Jaminan

+
+
+ @php + $inputDataLoaksi = []; + + $inputDataLoaksi = [ + ['label' => 'Nama Jalan', 'index' => 0], + ['label' => 'Perumahan/Gang', 'index' => 1], + ['label' => 'Blok/Nomor', 'index' => 2], + ['label' => 'Desa/Kelurahan', 'index' => 3], + ['label' => 'Kecamatan', 'index' => 4], + ['label' => 'Kota/Kotamadya', 'index' => 5], + ['label' => 'Provinsi', 'index' => 6] + ]; + + @endphp + + @if (count($inputDataLoaksi) > 0) + @foreach ($inputDataLoaksi as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
+ + +
+
+

Data Data Jaminan

+
+
+
+ +
+ + + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ + @php + $inputDataJaminan = []; + + $inputDataJaminan = [ + ['label' => 'Nomor Lambung', 'index' => 0], + ['label' => 'Model Unit', 'index' => 1], + ['label' => 'Tahun Pembuatan', 'index' => 2], + ['label' => 'Merk', 'index' => 3], + ['label' => 'Negara Pembuat', 'index' => 4], + ['label' => 'Tahun Pembelian', 'index' => 5], + ['label' => 'Nomor Faktur/Invoice', 'index' => 6], + ['label' => 'Nomor Kontrak Pembelian', 'index' => 7], + ['label' => 'Nama Pemilik', 'index' => 8], + ['label' => 'Alamaat Pemilik', 'index' => 9], + ['label' => 'Nomor Asuransi', 'index' => 10], + ['label' => 'Nomor Rangka', 'index' => 11], + ['label' => 'Nomor Mesin', 'index' => 12], + ['label' => 'Hour Mesin', 'index' => 13], + ['label' => 'Overhaul Mesin', 'index' => 14], + ]; + + @endphp + + @if (count($inputDataJaminan) > 0) + @foreach ($inputDataJaminan as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
+ + + +
+
+

Kondisi Objek Jaminan

+
+
+
+ +
+ + + @error('hadapMataAngin') + {{ $message }} + @enderror +
+
+ + @php + $kondisiObjeck = []; + + $kondisiObjeck = [ + ['label' => 'Mesin dan Panel Instrument', 'index' => 0], + ['label' => 'Fungsi mesin dan panel instrument', 'index' => 1], + ['label' => 'Interior (jok, dll)', 'index' => 2], + ['label' => 'Rangka dan Karoseri', 'index' => 3], + ['label' => 'Ban', 'index' => 4], + ['label' => 'Velg', 'index' => 5], + ['label' => 'Air Conditioner', 'index' => 6], + ['label' => 'Aksesoris Tambahan lainnya', 'index' => 7], + ['label' => 'LCD', 'index' => 8], + ['label' => 'Perlengkapan Keamanan', 'index' => 9], + ['label' => 'Asuransi', 'index' => 10], + ]; + + @endphp + + @if (count($kondisiObjeck) > 0) + @foreach ($kondisiObjeck as $item) + +
+ +
+ + + @error('bentuk_tanah') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+
diff --git a/resources/views/surveyor/components/apartemen-kantor.blade.php b/resources/views/surveyor/components/apartemen-kantor.blade.php index 05e0adb..28cb7e8 100644 --- a/resources/views/surveyor/components/apartemen-kantor.blade.php +++ b/resources/views/surveyor/components/apartemen-kantor.blade.php @@ -1,5 +1,5 @@
-
+

Analisa Unit

@@ -104,8 +104,8 @@ class="input tomselect w-full @error('lantai') border-danger bg-danger-light @enderror" name="lantai"> - @if (isset($posisiKavling)) - @foreach ($posisiKavling as $item) + @if (isset($lantai)) + @foreach ($lantai as $item) @endforeach @endif @@ -126,8 +126,8 @@ class="input tomselect w-full @error('view') border-danger bg-danger-light @enderror" name="view"> - @if (isset($kondisiFisikTanah)) - @foreach ($kondisiFisikTanah as $item) + @if (isset($viewUnit)) + @foreach ($viewUnit as $item) @endforeach @endif @@ -146,8 +146,8 @@ class="input tomselect w-full @error('bentuk_unit') border-danger bg-danger-light @enderror" name="bentuk_unit"> - @if (isset($kondisiFisikTanah)) - @foreach ($kondisiFisikTanah as $item) + @if (isset($bentukTanah)) + @foreach ($bentukTanah as $item) @endforeach @endif diff --git a/resources/views/surveyor/components/bangunan.blade.php b/resources/views/surveyor/components/bangunan.blade.php new file mode 100644 index 0000000..524aace --- /dev/null +++ b/resources/views/surveyor/components/bangunan.blade.php @@ -0,0 +1,232 @@ + +{{-- @if ($analisaType == 'tanah_bangunan') --}} +
+
+

Analisa Bangunan

+
+
+
+ +
+
+ + +
+ + @error('luas_tanah_bagunan') + {{ $message }} + @enderror +
+
+ + + +
+ +
+ + + @error('jenis_bangunan') + {{ $message }} + @enderror +
+
+ + +
+ +
+ + + @error('kondisi_bangunan') + {{ $message }} + @enderror +
+
+ + +
+ +
+ + + @error('sifat_bangunan') + {{ $message }} + @enderror +
+
+ + +
+
+ + +
+
+ +
+ @if (@isset($spekKategoriBagunan)) + @foreach ($spekKategoriBagunan as $item) +
+ +
+ + + @error('name') + {{ $message }} + @enderror +
+
+ @endforeach + @endif +
+ +
+
+
+ +
+ +
+
+ + + + +
+ +
+ + + @error('sarana_pelengkap') + {{ $message }} + @enderror +
+
+
+
+{{-- @endif --}} + +@push('scripts') + +@endpush diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index 62bf070..0293a06 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -5,6 +5,7 @@ @endsection --}} @section('content') +
@@ -120,7 +121,6 @@
-
+ +

Rute Menuju Lokasi

@@ -177,25 +179,33 @@ @if (isset($fotoJaminan)) @foreach ($fotoJaminan->ruteJaminan as $item) - + @if (isset($item->foto_rute)) + Gambar Pendamping + @endif
- @if (isset($item->foto_rute)) - Gambar Pendamping - @endif - - - -
+ +
+ + + +
+ + +
@error('foto_rute.*') {{ $message }} @@ -211,9 +221,17 @@ - - + +
+ + + +
+
+
@@ -289,7 +314,7 @@
-
+
@@ -336,10 +361,16 @@ - - +
+ + + +
+
+
+ +
+
+ + + + + @endsection @push('scripts') + @include('lpj::surveyor.js.camera-editor') + + -@endpush diff --git a/resources/views/surveyor/data/form.blade.php b/resources/views/surveyor/data/form.blade.php index 26c6d14..46050df 100644 --- a/resources/views/surveyor/data/form.blade.php +++ b/resources/views/surveyor/data/form.blade.php @@ -1,8 +1,8 @@ @extends('layouts.main') -{{-- @section('breadcrumbs') +@section('breadcrumbs') {{ Breadcrumbs::render(request()->route()->getName()) }} -@endsection --}} +@endsection @section('content')
@@ -33,7 +33,7 @@
+ name="code" value="{{ $model->code ?? '' }}"> @error('code') {{ $message }} @enderror @@ -51,6 +51,41 @@ @enderror
+ + @if (isset($header[1]) && $header[1] == 'spek-bangunan') +
+ +
+ + @error('spek_kategori_bangunan_id') + {{ $message }} + @enderror +
+
+ @endif + +