diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index 51364d9..2e14fdf 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -327,18 +327,21 @@ $jenisLegalitasJaminan = JenisLegalitasJaminan::all(); $_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id); - $legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true); + $legalitas=''; + if($_jenisJaminan) { + $legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true); - $currentLegalitasJaminan = JenisLegalitasJaminan::whereIn( - 'id', - $document->detail->pluck('jenis_legalitas_jaminan_id')->toArray(), - )->get(); + $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()); + // Remove values from $legalitasJaminan that are in $currentLegalitasJaminan + $legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray()); - $legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get(); + $legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get(); + } $pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get(); $hubunganPemilik = HubunganPemilikJaminan::all(); diff --git a/app/Http/Controllers/KJPPController.php b/app/Http/Controllers/KJPPController.php index ce4b377..4e86a1a 100644 --- a/app/Http/Controllers/KJPPController.php +++ b/app/Http/Controllers/KJPPController.php @@ -44,8 +44,13 @@ class KJPPController extends Controller // Combine KJPP number with branch code $fullKjppNumber = $kjppNumber; + $detailJoinEmailKantor = json_encode([]); + $detailJoinPimpinan = json_encode([]); + $detailJoinPicReviewer = json_encode([]); + $detailJoinPicAdmin = json_encode([]); + $detailJoinPicMarketing = json_encode([]); - return view('lpj::kjpp.create', compact('ijin_usaha', 'jenis_aset', 'provinces', 'fullKjppNumber')); + return view('lpj::kjpp.create', compact('ijin_usaha', 'jenis_aset', 'provinces', 'fullKjppNumber', 'detailJoinEmailKantor', 'detailJoinPimpinan', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing')); } /** @@ -78,74 +83,56 @@ class KJPPController extends Controller $nomorHpPicMarketing = $request->input('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing', []); foreach ($emailKantor as $value) { - $detailEmailKantor[] = [ - 'email_kantor' => $value - ]; + $detailEmailKantor[] = $value; } // Encode to JSON and store $detailEmailKantorJson = json_encode($detailEmailKantor); // Process detail_nama_pimpinan foreach ($namaPimpinan as $value) { - $detailNamaPimpinan[] = [ - 'nama_pimpinan' => $value - ]; + $detailNamaPimpinan[] = $value; } $detailNamaPimpinanJson = json_encode($detailNamaPimpinan); // Process detail_nomor_pic_pimpinan foreach ($nomorHpPimpinan as $value) { - $detailNomorPicPimpinan[] = [ - 'nomor_hp_pimpinan' => $value - ]; + $detailNomorPicPimpinan[] = $value; } $detailNomorPicPimpinanJson = json_encode($detailNomorPicPimpinan); // Process detail_nama_pic_reviewer foreach ($namaPicReviewer as $value) { - $detailNamaPicReviewer[] = [ - 'nama_pic_reviewer' => $value - ]; + $detailNamaPicReviewer[] = $value; } $detailNamaPicReviewerJson = json_encode($detailNamaPicReviewer); // Process detail_nomor_hp_pic_reviewer foreach ($nomorHpPicReviewer as $value) { - $detailNomorHpPicReviewer[] = [ - 'nomor_hp_pic_reviewer' => $value - ]; + $detailNomorHpPicReviewer[] = $value; } $detailNomorHpPicReviewerJson = json_encode($detailNomorHpPicReviewer); // Process detail_nama_pic_admin foreach ($namaPicAdmin as $value) { - $detailNamaPicAdmin[] = [ - 'nama_pic_admin' => $value - ]; + $detailNamaPicAdmin[] = $value; } $detailNamaPicAdminJson = json_encode($detailNamaPicAdmin); // Process detail_nomor_hp_pic_admin foreach ($nomorHpPicAdmin as $value) { - $detailNomorHpPicAdmin[] = [ - 'nomor_hp_pic_admin' => $value - ]; + $detailNomorHpPicAdmin[] = $value; } $detailNomorHpPicAdminJson = json_encode($detailNomorHpPicAdmin); // Process detail_nama_pic_marketing foreach ($namaPicMarketing as $value) { - $detailNamaPicMarketing[] = [ - 'nama_pic_marketing' => $value - ]; + $detailNamaPicMarketing[] = $value; } $detailNamaPicMarketingJson = json_encode($detailNamaPicMarketing); // Process detail_nomor_hp_pic_marketing foreach ($nomorHpPicMarketing as $value) { - $detailNomorHpPicMarketing[] = [ - 'nomor_hp_pic_marketing' => $value - ]; + $detailNomorHpPicMarketing[] = $value; } $detailNomorHpPicMarketingJson = json_encode($detailNomorHpPicMarketing); @@ -217,15 +204,18 @@ class KJPPController extends Controller $detailNamaPicMarketing = json_decode($kjpp->detail_nama_pic_marketing); $detailNomorHpPicMarketing = json_decode($kjpp->detail_nomor_hp_pic_marketing); - $detailJoinPimpinan = []; - if($detailNamaPimpinan) { - $detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) { - return [ - 'nama_pimpinan' => $nama, - 'nomor_hp_pimpinan' => $nomor - ]; - }, $detailNamaPimpinan, $detailNomorHpPimpinan)); - } + $detailJoinEmailKantor = json_encode(array_map(function ($email) { + return [ + 'email_kantor' => $email + ]; + }, $detailEmailKantor)); + + $detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) { + return [ + 'nama_pimpinan' => $nama, + 'nomor_hp_pimpinan' => $nomor + ]; + }, $detailNamaPimpinan, $detailNomorHpPimpinan)); $detailJoinPicReviewer = json_encode(array_map(function ($nama, $nomor) { @@ -249,7 +239,7 @@ class KJPPController extends Controller ]; }, $detailNamaPicMarketing, $detailNomorHpPicMarketing)); - return view('lpj::kjpp.show', compact('jenis_jaminan', 'ijin_usahas', 'ijin_usaha', 'kjpp', 'provinces', 'cities', 'districts', 'villages', 'detailEmailKantor', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailJoinPimpinan')); + return view('lpj::kjpp.show', compact('jenis_jaminan', 'ijin_usahas', 'ijin_usaha', 'kjpp', 'provinces', 'cities', 'districts', 'villages', 'detailJoinEmailKantor', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailJoinPimpinan')); } /** @@ -274,19 +264,19 @@ class KJPPController extends Controller $detailNamaPicMarketing = json_decode($kjpp->detail_nama_pic_marketing); $detailNomorHpPicMarketing = json_decode($kjpp->detail_nomor_hp_pic_marketing); - //dd($detailNamaPimpinan); + $detailJoinEmailKantor = json_encode(array_map(function ($email) { + return [ + 'email_kantor' => $email + ]; + }, $detailEmailKantor)); - $detailJoinPimpinan = []; - if($detailNamaPimpinan) { - $detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) { - return [ - 'nama_pimpinan' => $nama, - 'nomor_hp_pimpinan' => $nomor - ]; - }, $detailNamaPimpinan, $detailNomorHpPimpinan)); - } + $detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) { + return [ + 'nama_pimpinan' => $nama, + 'nomor_hp_pimpinan' => $nomor + ]; + }, $detailNamaPimpinan, $detailNomorHpPimpinan)); - //dd($detailNamaPicReviewer ); $detailJoinPicReviewer = json_encode(array_map(function ($nama, $nomor) { return [ @@ -309,7 +299,7 @@ class KJPPController extends Controller ]; }, $detailNamaPicMarketing, $detailNomorHpPicMarketing)); - return view('lpj::kjpp.create', compact('kjpp', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailEmailKantor', 'detailJoinPimpinan')); + return view('lpj::kjpp.create', compact('kjpp', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailJoinEmailKantor', 'detailJoinPimpinan')); } /** @@ -343,74 +333,56 @@ class KJPPController extends Controller $nomorHpPicMarketing = $request->input('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing', []); foreach ($emailKantor as $value) { - $detailEmailKantor[] = [ - 'email_kantor' => $value - ]; + $detailEmailKantor[] = $value; } // Encode to JSON and store $detailEmailKantorJson = json_encode($detailEmailKantor); // Process detail_nama_pimpinan foreach ($namaPimpinan as $value) { - $detailNamaPimpinan[] = [ - 'nama_pimpinan' => $value - ]; + $detailNamaPimpinan[] = $value; } $detailNamaPimpinanJson = json_encode($detailNamaPimpinan); // Process detail_nomor_hp_pimpinan foreach ($nomorHpPimpinan as $value) { - $detailNomorHpPimpinan[] = [ - 'nomor_hp_pimpinan' => $value - ]; + $detailNomorHpPimpinan[] = $value; } $detailNomorHpPimpinanJson = json_encode($detailNomorHpPimpinan); // Process detail_nama_pic_reviewer foreach ($namaPicReviewer as $value) { - $detailNamaPicReviewer[] = [ - 'nama_pic_reviewer' => $value - ]; + $detailNamaPicReviewer[] = $value; } $detailNamaPicReviewerJson = json_encode($detailNamaPicReviewer); // Process detail_nomor_hp_pic_reviewer foreach ($nomorHpPicReviewer as $value) { - $detailNomorHpPicReviewer[] = [ - 'nomor_hp_pic_reviewer' => $value - ]; + $detailNomorHpPicReviewer[] = $value; } $detailNomorHpPicReviewerJson = json_encode($detailNomorHpPicReviewer); // Process detail_nama_pic_admin foreach ($namaPicAdmin as $value) { - $detailNamaPicAdmin[] = [ - 'nama_pic_admin' => $value - ]; + $detailNamaPicAdmin[] = $value; } $detailNamaPicAdminJson = json_encode($detailNamaPicAdmin); // Process detail_nomor_hp_pic_admin foreach ($nomorHpPicAdmin as $value) { - $detailNomorHpPicAdmin[] = [ - 'nomor_hp_pic_admin' => $value - ]; + $detailNomorHpPicAdmin[] = $value; } $detailNomorHpPicAdminJson = json_encode($detailNomorHpPicAdmin); // Process detail_nama_pic_marketing foreach ($namaPicMarketing as $value) { - $detailNamaPicMarketing[] = [ - 'nama_pic_marketing' => $value - ]; + $detailNamaPicMarketing[] = $value; } $detailNamaPicMarketingJson = json_encode($detailNamaPicMarketing); // Process detail_nomor_hp_pic_marketing foreach ($nomorHpPicMarketing as $value) { - $detailNomorHpPicMarketing[] = [ - 'nomor_hp_pic_marketing' => $value - ]; + $detailNomorHpPicMarketing[] = $value; } $detailNomorHpPicMarketingJson = json_encode($detailNomorHpPicMarketing); @@ -449,7 +421,6 @@ class KJPPController extends Controller } else { $validated['jenis_aset_id'] = json_encode($validated['jenis_aset_id']); } - // Perbarui data di database KJPP::where('id', $id)->update($validated); diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index ec4cf45..c06db93 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -11,6 +11,12 @@ class LaporanController extends Controller /** * Display a listing of the resource. */ + + public function index() + { + return view('lpj::laporan.index'); + } + public function sederhana_index() { return view('lpj::laporan.sederhana_index'); diff --git a/app/Http/Controllers/NocController.php b/app/Http/Controllers/NocController.php new file mode 100644 index 0000000..b4dd9cc --- /dev/null +++ b/app/Http/Controllers/NocController.php @@ -0,0 +1,201 @@ +validated(); + $validated['updated_by'] = Auth::id(); + if (request()->get('status_bayar') == "sudah_bayar") { + $validated['status'] = '1'; + $status = "spk"; + } else { + $status = "persetujuan-penawaran"; + } + + + $persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate( + ['penawaran_id' => $validated['penawaran_id']], + $validated, + ); + + $folderPath = 'noc/' . $validated['penawaran_id']; + + if ($request->hasFile('bukti_ksl')) { + $persetujuanPenawaran->bukti_ksl = $request->file('bukti_ksl')->store( + $folderPath, + 'public', + ); + } + + $persetujuanPenawaran->save(); + + // Update the status of the related permohonan to 'spk' + $permohonan = Permohonan::find(request()->get('permohonan_id')); + if ($permohonan) { + $permohonan->status_bayar = request()->get('status_bayar'); + $permohonan->status = $status; + $permohonan->save(); + + // andy add, update status penawaran.status='spk' + // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); + PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ + 'status' => $status, + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); + // andy add, update status penawaran.status='spk' + } + + return redirect() + ->route('noc.index')->with('success', 'Penyelesaian KSL berhasil disimpan.'); + } + + /** + * Update the specified resource in storage. + */ + public function update(NocRequest $request, PersetujuanPenawaran $persetujuanPenawaran) + { + $validated = $request->validated(); + $validated['updated_by'] = Auth::id(); + + $persetujuanPenawaran->update($validated); + + return redirect() + ->route('noc.index')->with('success', 'Persetujuan Penawaran updated successfully'); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('lpj::noc.create'); + } + + /** + * Display the specified resource. + */ + public function show($id) {} + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->with( + ['penawaran.detail', 'penawaran.permohonan.debiture'], + )->first(); + return view('lpj::noc.form', compact('persetujuanPenawaran')); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(PersetujuanPenawaran $persetujuanPenawaran) + { + $persetujuanPenawaran->delete(); + + return redirect() + ->route('noc.index')->with('success', 'Persetujuan Penawaran deleted successfully'); + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('noc.view')) { + //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); + } + + // Retrieve data from the database + $query = PersetujuanPenawaran::query(); + + // 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%"); + }); + } + + // 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( + [ + 'penawaran.permohonan.debiture', + 'penawaran.permohonan.branch', + 'penawaran.detail', + 'penawaran.persetujuan', + ], + )->get(); + + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = $request->get('page', 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, + ]); + } + } diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 5515aaa..b7d4ed6 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -359,7 +359,7 @@ class PenilaianController extends Controller 'pembatalan' => 'Pembatalan', 'sla' => 'SLA', ]; - + $header = $headers[$type] ?? 'Pelaporan'; return view('lpj::penilaian.otorisator.index', compact('header')); @@ -380,7 +380,7 @@ class PenilaianController extends Controller return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header')); } - public function otorisatorUpdate($id, $context) + public function otorisatorUpdate(Request $request, $id, $context) { $permohonan = Permohonan::find($id); @@ -396,28 +396,30 @@ class PenilaianController extends Controller $newStatus = $permohonan->status_bayar === 'sudah_bayar' ? 'belum_bayar' : 'sudah_bayar'; $permohonan->update([ - 'status_bayar' => $newStatus + 'status_bayar' => $newStatus, + 'keterangan' => $request->message ]); break; case 'pembatalan': - $permohonan->update([ - 'authorized_status' => 1, + 'status' => 'batal', + 'keterangan' => $request->message ]); break; case 'pelaporan': - $permohonan->update([ - 'status' => 'disetujui', + 'status' => 'proses-laporan', + 'keterangan' => $request->message ]); break; case 'sla': $permohonan->update([ - 'status' => 'order', + 'status' => 'proses-sla', + 'keterangan' => $request->message ]); break; @@ -449,10 +451,10 @@ class PenilaianController extends Controller // Tentukan status berdasarkan otorisator $status = match ($otorisator) { - 'Pelaporan' => 'proses laporan', + 'Pelaporan' => 'proses-laporan', 'Pembayaran' => 'proses', - 'Pembatalan' => 'proses', - 'SLA' => 'proses', + 'Pembatalan' => 'batal', + 'SLA' => 'freeze', default => '', }; @@ -477,10 +479,13 @@ class PenilaianController extends Controller if (!empty($otorisator)) { if ($status == 'proses') { $query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']); + } elseif ($status == 'proses-laporan') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } elseif ($status == 'batal') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } elseif ($status == 'freeze') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); } - // else { - // $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); - // } } // Filter berdasarkan region user yang login diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php index 20a379b..0d6ebb0 100644 --- a/app/Http/Controllers/PermohonanController.php +++ b/app/Http/Controllers/PermohonanController.php @@ -179,7 +179,7 @@ // Retrieve data from the database $query = Permohonan::query(); - + $query = $query->orderBy('nomor_registrasi', 'desc'); // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); diff --git a/app/Http/Controllers/PersetujuanPenawaranController.php b/app/Http/Controllers/PersetujuanPenawaranController.php index be5896f..6172030 100644 --- a/app/Http/Controllers/PersetujuanPenawaranController.php +++ b/app/Http/Controllers/PersetujuanPenawaranController.php @@ -6,10 +6,10 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest; -use Modules\Lpj\Models\PenawaranDetailTender; -use Modules\Lpj\Models\PenawaranDetailTenderLog; -use Modules\Lpj\Models\PenawaranTender; -use Modules\Lpj\Models\Permohonan; + use Modules\Lpj\Models\PenawaranDetailTender; + use Modules\Lpj\Models\PenawaranDetailTenderLog; + use Modules\Lpj\Models\PenawaranTender; + use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\PersetujuanPenawaran; class PersetujuanPenawaranController extends Controller @@ -38,6 +38,7 @@ use Modules\Lpj\Models\Permohonan; { $validated = $request->validated(); $validated['created_by'] = Auth::id(); + $validated['status'] = '0'; $persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate( ['penawaran_id' => $validated['penawaran_id']], @@ -70,16 +71,16 @@ use Modules\Lpj\Models\Permohonan; $permohonan = Permohonan::find(request()->get('permohonan_id')); if ($permohonan) { $permohonan->status_bayar = request()->get('status_bayar'); - $permohonan->status = 'spk'; + $permohonan->status = 'noc'; $permohonan->save(); // andy add, update status penawaran.status='spk' // $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); - PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi) - ->update(['status'=>'spk', - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]); + PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([ + 'status' => 'noc', + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); // andy add, update status penawaran.status='spk' } @@ -88,6 +89,20 @@ use Modules\Lpj\Models\Permohonan; ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.'); } + /** + * Update the specified resource in storage. + */ + public function update(PersetujuanPenawaranRequest $request, PersetujuanPenawaran $persetujuanPenawaran) + { + $validated = $request->validated(); + $validated['updated_by'] = Auth::id(); + + $persetujuanPenawaran->update($validated); + + return redirect() + ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran updated successfully'); + } + /** * Show the form for creating a new resource. */ @@ -101,8 +116,8 @@ use Modules\Lpj\Models\Permohonan; */ public function show($id) { - $permohonan = Permohonan::find($id); - $permohonan->status='tender'; + $permohonan = Permohonan::find($id); + $permohonan->status = 'tender'; $dataDetailPenawaranLog = []; // andy add update status penawaran @@ -110,50 +125,45 @@ use Modules\Lpj\Models\Permohonan; // update penawaran => penawaran.status ="tender", penawaran.updated_at, penawaran.updated_by // update permohonan => permohonan.status ="tender", permohonan.updated_at, permohonan.updated_by // insert detail_permohonan_log - $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first(); + $penawaran = PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->first(); // dd($penawaran->id); - PenawaranDetailTender::where('penawaran_id', $penawaran->id) - ->update(['status' => 1, - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]); - - PenawaranTender::where('id', $penawaran->id) - ->update(['status'=>'tender', - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]); - - $detailPenawaran = PenawaranDetailTender::where('penawaran_id', $penawaran->id) - ->distinct() - ->get(); - - // log - if(sizeof($detailPenawaran)>0) - { + PenawaranDetailTender::where('penawaran_id', $penawaran->id)->update([ + 'status' => 1, + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); + PenawaranTender::where('id', $penawaran->id)->update([ + 'status' => 'tender', + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]); + + $detailPenawaran = PenawaranDetailTender::where('penawaran_id', $penawaran->id)->distinct()->get(); + + // log + if (sizeof($detailPenawaran) > 0) { foreach ($detailPenawaran as $model) { array_push($dataDetailPenawaranLog, [ - 'detail_penawaran_id' =>$model->id, - 'kjpp_rekanan_id' =>$model->kjpp_rekanan_id, - 'penawaran_id' =>$model->penawaran_id, - 'no_proposal' =>$model->no_proposal, - 'tgl_proposal' =>$model->tgl_proposal, - 'biaya_penawaran' =>$model->biaya_penawaran, - 'attachment' =>$model->attachment, - 'dokumen_persetujuan' =>$model->dokumen_persetujuan, - 'status' =>$model->status, - 'authorized_status' =>$model->authorized_status, - 'authorized_at' =>$model->authorized_at, - 'authorized_at' =>$model->authorized_at, - 'created_at' =>$model->created_at, - 'updated_at' =>$model->updated_at, - 'deleted_at' =>$model->deleted_at, - 'created_by' =>$model->created_by, - 'updated_by' =>$model->updated_by, - 'deleted_by' =>$model->deleted_by + 'detail_penawaran_id' => $model->id, + 'kjpp_rekanan_id' => $model->kjpp_rekanan_id, + 'penawaran_id' => $model->penawaran_id, + 'no_proposal' => $model->no_proposal, + 'tgl_proposal' => $model->tgl_proposal, + 'biaya_penawaran' => $model->biaya_penawaran, + 'attachment' => $model->attachment, + 'dokumen_persetujuan' => $model->dokumen_persetujuan, + 'status' => $model->status, + 'authorized_status' => $model->authorized_status, + 'authorized_at' => $model->authorized_at, + 'authorized_at' => $model->authorized_at, + 'created_at' => $model->created_at, + 'updated_at' => $model->updated_at, + 'deleted_at' => $model->deleted_at, + 'created_by' => $model->created_by, + 'updated_by' => $model->updated_by, + 'deleted_by' => $model->deleted_by, ]); - } PenawaranDetailTenderLog::insert($dataDetailPenawaranLog); @@ -174,20 +184,6 @@ use Modules\Lpj\Models\Permohonan; return view('lpj::persetujuan_penawaran.form', compact('permohonan')); } - /** - * Update the specified resource in storage. - */ - public function update(PersetujuanPenawaranRequest $request, PersetujuanPenawaran $persetujuanPenawaran) - { - $validated = $request->validated(); - $validated['updated_by'] = Auth::id(); - - $persetujuanPenawaran->update($validated); - - return redirect() - ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran updated successfully'); - } - /** * Remove the specified resource from storage. */ diff --git a/app/Http/Controllers/RegistrasiFinalController.php b/app/Http/Controllers/RegistrasiFinalController.php index 305310f..435496b 100644 --- a/app/Http/Controllers/RegistrasiFinalController.php +++ b/app/Http/Controllers/RegistrasiFinalController.php @@ -88,7 +88,7 @@ // Get the data for the current page //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - $data = $query->with(['permohonan'])->get(); + $data = $query->with(['permohonan.debiture'])->get(); // dd($data); $i = 0; foreach ($data as $obj) { diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index 9074567..828170e 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -36,15 +36,17 @@ use Illuminate\Support\Facades\Auth; // Retrieve data from the database // $query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk'); // $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian'])->get(); - $query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk'); + //$query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk'); + + $query = PenawaranTender::query()->with(['permohonan.user', 'permohonan.debiture', 'permohonan.branch', 'permohonan.tujuanPenilaian','permohonan.penilaian','tujuanPenilaianKjpp']); // 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->whereRelation('permohonan','nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); $q->orWhere('status', 'LIKE', '%' . $search . '%'); }); @@ -81,34 +83,34 @@ use Illuminate\Support\Facades\Auth; foreach($data as $obj) { // tanggal_permohonan - if ($obj->tanggal_permohonan) { - $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); + if ($obj->permohonan->tanggal_permohonan) { + $data[$i]->permohonan->tanggal_permohonan = Carbon::parse($obj->permohonan->tanggal_permohonan)->format('d M Y'); } - if($obj->penawaran->tanggal_penilaian_sebelumnya) + if($obj->tanggal_penilaian_sebelumnya) { - $data[$i]->penawaran->tanggal_penilaian_sebelumnya = Carbon::parse($obj->penawaran->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); + $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); } - if($obj->penawaran->biaya_kjpp_sebelumnya) + if($obj->biaya_kjpp_sebelumnya) { - $data[$i]->penawaran->biaya_kjpp_sebelumnya = formatRupiah($obj->penawaran->biaya_kjpp_sebelumnya); + $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); } // date_range - if($obj->penawaran->start_date && $obj->penawaran->end_date) + if($obj->start_date && $obj->end_date) { - $data[$i]->date_range = Carbon::parse($obj->penawaran->start_date)->format('d M Y').' - '. - Carbon::parse($obj->penawaran->end_date)->format('d M Y'); + $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '. + Carbon::parse($obj->end_date)->format('d M Y'); } // data spk_dokumen_path - if($obj->penawaran->spk_dokumen_path) + if($obj->spk_dokumen_path) { - $spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path); - $data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path; + $spk_dokumen_path = Storage::url($obj->spk_dokumen_path); + $data[$i]->spk_dokumen_path = $spk_dokumen_path; } $i++; @@ -207,8 +209,8 @@ use Illuminate\Support\Facades\Auth; $persetujuan_sla_final = '...'; if(null !==$penawaran->persetujuan) { - $sla_resume_text = $penawaran->persetujuan->sla_resume; - $sla_final_text = $penawaran->persetujuan->sla_final; + $sla_resume_text = ceil($data->sla/2); + $sla_final_text = $data->sla; $sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text)); $sla_final_text_terbilang = ucfirst(terbilang($sla_final_text)); @@ -324,8 +326,11 @@ use Illuminate\Support\Facades\Auth; $persetujuan_sla_final = '...'; if(null !==$penawaran->persetujuan) { - $sla_resume_text = $penawaran->persetujuan->sla_resume; - $sla_final_text = $penawaran->persetujuan->sla_final; + //$sla_resume_text = $penawaran->persetujuan->sla_resume; + //$sla_final_text = $penawaran->persetujuan->sla_final; + + $sla_resume_text = ceil($data->sla/2); + $sla_final_text = $data->sla; $sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text)); $sla_final_text_terbilang = ucfirst(terbilang($sla_final_text)); @@ -390,8 +395,7 @@ use Illuminate\Support\Facades\Auth; public function download($id) { // dokumen pdf diambil dari penawaran.spk_dokumen_path - $permohonan = Permohonan::find($id); - $document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); + $document = PenawaranTender::find($id); return response()->download(storage_path('app/public/' .$document->spk_dokumen_path)); } diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 445e095..f344f13 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -102,6 +102,7 @@ class SurveyorController extends Controller 'tujuanPenilaian', 'penilaian', 'documents.jenisJaminan', + 'documents', ])->findOrFail($id); $surveyor = $id; @@ -112,7 +113,7 @@ class SurveyorController extends Controller // Get all inspeksi data for this permohonan $inspeksiData = Inspeksi::where('permohonan_id', $id) ->get() - ->keyBy('jenis_jaminan_id') + ->keyBy('dokument_id') ->map(function ($item) { return [ 'data_form' => json_decode($item->data_form, true), @@ -153,7 +154,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::updateOrCreate( [ 'permohonan_id' => $request->input('permohonan_id'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id') + 'dokument_id' => $request->input('dokument_id') ], [ 'data_form' => json_encode($processedData), @@ -164,6 +165,7 @@ class SurveyorController extends Controller return response()->json([ 'success' => true, 'message' => 'Data berhasil disimpan', + 'data' => $processedData ], 200); } catch (\Exception $e) { @@ -195,7 +197,7 @@ class SurveyorController extends Controller $pisah = array_filter( explode(',', $action), - function($act) use ($allowedActions) { + function ($act) use ($allowedActions) { return isset($allowedActions[trim($act)]); } ); @@ -227,7 +229,7 @@ class SurveyorController extends Controller $validationRules = [ 'luas' => 'required|numeric', 'permohonan_id' => 'required', - 'jenis_jaminan_id' => 'required' + 'dokument_id' => 'required' ]; if ($request->hasFile('foto_denah')) { @@ -247,7 +249,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -261,7 +263,7 @@ class SurveyorController extends Controller } else { Inspeksi::create([ 'permohonan_id' => $request->input('permohonan_id'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id'), + 'dokument_id' => $request->input('dokument_id'), 'denah_form' => json_encode($formatJsonDenah) ]); } @@ -293,7 +295,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::firstOrNew([ 'permohonan_id' => $request->input('permohonan_id'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id') + 'dokument_id' => $request->input('dokument_id') ]); // Get existing foto_form data if it exists @@ -303,15 +305,19 @@ class SurveyorController extends Controller $formatFotojson = $existingData; - // Process each photo category foreach ($photoCategories as $category => $fields) { - // Only update if new files are provided - if ($this->categoryHasNewFiles($request, $fields)) { - // Delete old files for this category only - if (isset($existingData[$category])) { - $this->deleteFilesForCategory($existingData[$category]); - } - $formatFotojson[$category] = $this->processPhotoCategory($request, $fields); + $photoField = $fields[0]; + $nameField = $fields[1]; + $descriptionField = $fields[2] ?? null; + + if ($request->hasFile($photoField)) { + $newPhotos = $this->processPhotoCategory( + $request, + $fields, + $existingData[$category] ?? [] + ); + + $formatFotojson[$category] = $newPhotos; } } @@ -340,29 +346,40 @@ class SurveyorController extends Controller /** * Process a photo category and its subcategories */ - - private function processPhotoCategory(Request $request, array $fields) + private function processPhotoCategory(Request $request, array $fields, array $existingPhotos = []) { - $result = []; + $result = $existingPhotos; // Start with existing photos $photoField = $fields[0]; + $nameField = $fields[1]; + $descriptionField = $fields[2] ?? null; if ($request->hasFile($photoField)) { - foreach ($request->file($photoField, []) as $key => $value) { - $item = []; - $item[$fields[1]] = $request->input($fields[1] . '.' . $key); - $item[$photoField] = $this->uploadFile($value, $photoField . '.' . $key); + $newFiles = $request->file($photoField, []); + $newNames = $request->input($nameField, []); + $newDescriptions = $descriptionField ? $request->input($descriptionField, []) : []; - if (isset($fields[2])) { - $item[$fields[2]] = $request->input($fields[2] . '.' . $key); + // Process each new file + foreach ($newFiles as $key => $file) { + // Create new photo entry + $newPhotoEntry = [ + $nameField => $newNames[$key] ?? '', // Use new name if provided + $photoField => $this->uploadFile($file, $photoField . '.' . $key) + ]; + + // Add description if field exists + if ($descriptionField) { + $newPhotoEntry[$descriptionField] = $newDescriptions[$key] ?? ''; } - $result[] = $item; + // Add to result + $result[] = $newPhotoEntry; } } return $result; } + private function categoryHasNewFiles(Request $request, array $fields): bool { $photoField = $fields[0]; // First element is usually the photo field @@ -398,24 +415,24 @@ class SurveyorController extends Controller $maxSize = getMaxFileSize('Foto'); return $request->validate([ 'permohonan_id' => 'required', - 'jenis_jaminan_id' => 'required', - 'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, - 'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'dokument_id' => 'required', + 'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, + 'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_objek.*' => 'required|string|max:255', - 'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_lingkungan.*' => 'required|string|max:255', - 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_rute.*' => 'required|string|max:255', - 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_lantai_unit.*' => 'nullable|string|max:255', - 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_rute_lainnya.*' => 'nullable|string', - 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, - 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, + 'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_lantai_lainnya.*' => 'nullable|string|max:255', - 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_basement.*' => 'nullable|string|max:255', - 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize, + 'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize, 'name_gerbang' => 'nullable|string|max:255', ]); } @@ -463,7 +480,9 @@ class SurveyorController extends Controller { try { // Get all inspeksi records for this permohonan - $inspeksiRecords = Inspeksi::where('permohonan_id', $id)->get(); + $inspeksiRecords = Inspeksi::with(['dokument.jenisJaminan']) + ->where('permohonan_id', $id) + ->get(); if ($inspeksiRecords->isEmpty()) { return response()->json(['buttonDisable' => true]); @@ -475,23 +494,20 @@ class SurveyorController extends Controller $denahForm = json_decode($inspeksi->denah_form, true); $dataPembanding = json_decode($inspeksi->data_pembanding, true); - // Get jenis jaminan to check if it needs denah - $jenisJaminan = JenisJaminan::find($inspeksi->jenis_jaminan_id); + $jenisJaminan = $inspeksi->dokument->jenisJaminan->name ?? ''; + $isTanahBangunan = !in_array( strtoupper($jenisJaminan->name ?? ''), ['KAPAL', 'PESAWAT', 'KENDARAAN', 'ALAT BERAT'] ); - // Check if required forms are empty or incomplete - if (empty($dataForm) || empty($fotoForm)) { - return response()->json(['buttonDisable' => true]); - } + $isInvalid = + empty($dataForm) || + empty($fotoForm) || + (($isTanahBangunan && empty($denahForm)) || + empty($dataPembanding)); - if ($isTanahBangunan && empty($denahForm)) { - return response()->json(['buttonDisable' => true]); - } - - if (empty($dataPembanding)) { + if ($isInvalid) { return response()->json(['buttonDisable' => true]); } } @@ -557,7 +573,7 @@ class SurveyorController extends Controller ]); $data['status'] = 'success'; - $data['message']= 'Jadwal '.$request->noReg.' berhasil di aprove'; + $data['message'] = 'Jadwal '.$request->noReg.' berhasil di aprove'; } catch (\Exception $e) { $data['status'] = 'error'; $data['message'] = 'Gagal membuat jadwal: ' . $e->getMessage(); @@ -585,9 +601,9 @@ class SurveyorController extends Controller $fotoPembanding = $request->file('foto_objek_pembanding') ?? []; $existingData = null; - if ($request->has('permohonan_id') && $request->has('jenis_jaminan_id')) { + if ($request->has('permohonan_id') && $request->has('dokument_id')) { $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -682,7 +698,7 @@ class SurveyorController extends Controller ]; $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -699,12 +715,12 @@ class SurveyorController extends Controller $dataForm = json_decode($inspeksi->data_form, true) ?: []; // Inisialisasi struktur data jika belum ada - if(!isset($dataForm['bangunan'])) { + if (!isset($dataForm['bangunan'])) { $dataForm['bangunan'] = []; $needsSave = true; } - if(!isset($dataForm['tanah'])) { + if (!isset($dataForm['tanah'])) { $dataForm['tanah'] = []; $needsSave = true; } @@ -721,17 +737,35 @@ class SurveyorController extends Controller // Fields untuk tanah if (in_array($field, ['luas_tanah'])) { - $cekLuas = $dataForm['tanah']['luas_tanah'] == 'sesuai' ? 'sesuai' : 'tidak sesuai'; - $dataForm['tanah'][$field][$cekLuas] = $newValue; - } - // Fields untuk bangunan - else if (in_array($field, ['luas_tanah_bagunan'])) { + // Pastikan struktur array ada sebelum diakses + if (!isset($dataForm['tanah']['luas_tanah'])) { + $dataForm['tanah']['luas_tanah'] = []; + } - $cekBanguan = $dataForm['bangunan']['luas_tanah_bagunan'] == 'sesuai' ? 'sesuai' : 'tidak sesuai'; - $dataForm['bangunan'][$field][$cekBanguan] = $newValue; + $cekLuas = isset($dataForm['tanah']['luas_tanah']['sesuai']) && $dataForm['tanah']['luas_tanah']['sesuai'] === 'sesuai' + ? 'sesuai' + : 'tidak sesuai'; + + $dataForm['tanah']['luas_tanah'][$cekLuas] = $newValue; + $needsSave = true; } + + // Fields untuk bangunan + elseif (in_array($field, ['luas_tanah_bagunan'])) { + if (!isset($dataForm['bangunan']['luas_tanah_bagunan'])) { + $dataForm['bangunan']['luas_tanah_bagunan'] = []; + } + + $cekBanguan = isset($dataForm['bangunan']['luas_tanah_bagunan']['sesuai']) && $dataForm['bangunan']['luas_tanah_bagunan']['sesuai'] === 'sesuai' + ? 'sesuai' + : 'tidak sesuai'; + + $dataForm['bangunan']['luas_tanah_bagunan'][$cekBanguan] = $newValue; + $needsSave = true; + } + // Fields untuk alamat dalam asset - else if (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) { + elseif (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) { if (!isset($dataForm['asset']['alamat'])) { $dataForm['asset']['alamat'] = []; @@ -745,7 +779,7 @@ class SurveyorController extends Controller $dataForm['asset']['alamat'][$alamatStatus][$field] = $newValue; } // Jenis asset dalam asset - else if ($field === 'jenis_asset') { + elseif ($field === 'jenis_asset') { $assetStatus = $request->input('asset_status', 'sesuai'); $dataForm['asset']['jenis_asset'] = [ $assetStatus => $newValue @@ -809,7 +843,7 @@ class SurveyorController extends Controller $inspeksi = Inspeksi::updateOrCreate( [ 'permohonan_id' => $formattedData['permohonan_id'], - 'jenis_jaminan_id' => $formattedData['jenis_jaminan_id'] + 'dokument_id' => $formattedData['dokument_id'] ], [ 'data_pembanding' => json_encode($formattedData), @@ -828,7 +862,7 @@ class SurveyorController extends Controller $validator = $request->validate([ 'permohonan_id' => 'required|exists:permohonan,id', 'type' => 'required|string', - 'jenis_jaminan_id' => 'required', + 'dokument_id' => 'required', 'foto_objek' => 'nullable|image|max:'.$maxSize, 'foto_objek_pembanding.*' => 'nullable|image|max:'.$maxSize, ]); @@ -843,7 +877,7 @@ class SurveyorController extends Controller // Update foto_form $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id')) - ->where('jenis_jaminan_id', $request->input('jenis_jaminan_id')) + ->where('dokument_id', $request->input('dokument_id')) ->first(); if ($inspeksi) { @@ -868,7 +902,7 @@ class SurveyorController extends Controller $formattedData = [ 'permohonan_id' => $request->input('permohonan_id'), 'type' => $request->input('type'), - 'jenis_jaminan_id' => $request->input('jenis_jaminan_id'), + 'dokument_id' => $request->input('dokument_id'), 'objek_penilaian' => $objekPenilaian, 'data_pembanding' => $this->formatDataPembanding($request) ]; @@ -899,9 +933,21 @@ class SurveyorController extends Controller * Form inspeksi. */ - public function formInspeksi($id, $jaminanId) + public function formInspeksi(Request $request, $id) { - $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + + $validated = $request->validate([ + 'form' => 'required|in:create-inspeksi', + 'inspeksi' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); + $link_url_region = Teams::with('regions', 'teamsUsers') ->whereHas('teamsUsers', function ($query) { $query->where('user_id', Auth::user()->id); @@ -915,7 +961,7 @@ class SurveyorController extends Controller $surveyor = $id; $basicData = $this->getCommonData(); - $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first(); $forminspeksi = null; if ($inpeksi) { $forminspeksi = json_decode($inpeksi->data_form, true); @@ -962,13 +1008,23 @@ class SurveyorController extends Controller * Denah. */ - public function denah($id, $jaminanId) + public function denah(Request $request, $id) { - $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + $validated = $request->validate([ + 'form' => 'required|in:create-denah', + 'denah' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); $denah = null; - $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first(); $formDenah = null; if ($inpeksi) { $formDenah = json_decode($inpeksi->denah_form, true); @@ -982,14 +1038,25 @@ class SurveyorController extends Controller * Foto. */ - public function foto($id, $jaminanId) + public function foto(Request $request, $id) { - $permohonan = $this->getPermohonanJaminanId($id, $jaminanId); + $validated = $request->validate([ + 'form' => 'required|in:create-foto', + 'foto' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); + $surveyor = $id; $branches = Branch::all(); $provinces = Province::all(); - $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); + $inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first(); $formFoto = null; if ($inpeksi) { @@ -1003,25 +1070,28 @@ class SurveyorController extends Controller * Data pembanding. */ - public function dataPembanding($id, $jaminanId) + public function dataPembanding(Request $request, $id) { try { // Ambil data permohonan dengan eager loading - $permohonan = Permohonan::with([ - 'user', - 'debiture.province', - 'debiture.city', - 'debiture.district', - 'debiture.village', - 'branch', - 'tujuanPenilaian', - 'penilaian' - ])->findOrFail($id); + + $validated = $request->validate([ + 'form' => 'required|in:data-pembanding', + 'pembanding' => 'required|exists:permohonan,id', + 'dokument' => 'required', + 'jenisjaminan' => 'required' + ]); + + $dokumentId = $validated['dokument']; + $jaminanId = $validated['jenisjaminan']; + + $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); + // Ambil data inspeksi $inspeksi = Inspeksi::where([ 'permohonan_id' => $id, - 'jenis_jaminan_id' => $jaminanId + 'dokument_id' => $dokumentId ])->first(); // Inisialisasi variabel @@ -1496,7 +1566,7 @@ class SurveyorController extends Controller } - private function getPermohonanJaminanId($id, $jaminanId) + public function getPermohonanJaminanId($id, $dokumentId, $jaminanId) { return Permohonan::with([ 'user', @@ -1507,15 +1577,11 @@ class SurveyorController extends Controller 'branch', 'tujuanPenilaian', 'penilaian', - 'debiture.documents.jenisJaminan', - 'debiture.documents' => function ($query) use ($jaminanId) { - $query->where('jenis_jaminan_id', $jaminanId); + 'debiture.documents' => function ($query) use ($dokumentId, $jaminanId) { + $query->where('id', $dokumentId) + ->where('jenis_jaminan_id', $jaminanId); } - ]) - ->whereHas('debiture.documents', function ($query) use ($jaminanId) { - $query->where('jenis_jaminan_id', $jaminanId); - }) - ->findOrFail($id); + ])->findOrFail($id); } @@ -1763,10 +1829,8 @@ class SurveyorController extends Controller 'sifat_bangunan' => $data['sifat_bangunan'] ?? null, 'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null, 'spesifikasi_bangunan' => $result ?? null, - 'sarana_pelengkap' => $this->mapArrayWithInputs( - $data['sarana_pelengkap'] ?? [], - $data['sarana_pelengkap_input'] ?? [] - ), + 'sarana_pelengkap' => $data['sarana_pelengkap'] ?? null, + 'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null, ], ]; } @@ -1808,10 +1872,8 @@ class SurveyorController extends Controller 'jarak_tps' => $data['jarak_tps'] ?? null, 'nama_tps' => $data['nama_tps'] ?? null, 'merupakan_daerah' => $data['merupakan_daerah'] ?? null, - 'fasilitas_dekat_object' => $this->mapArrayWithInputs( - $data['fasilitas_dekat_object'] ?? [], - $data['fasilitas_dekat_object_input'] ?? [] - ), + 'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null, + 'fasilitas_dekat_object_input' => $data['fasilitas_dekat_object_input'] ?? null, ] ]; } @@ -1823,10 +1885,8 @@ class SurveyorController extends Controller 'fakta_positif' => $data['fakta_positif'] ?? null, 'fakta_negatif' => $data['fakta_negatif'] ?? null, 'rute_menuju' => $data['rute_menuju'] ?? null, - 'batas_batas' => $this->mapArrayWithInputs( - $data['batas_batas'] ?? [], - $data['batas_batas_input'] ?? [] - ), + 'batas_batas' => $data['batas_batas'] ?? null, + 'batas_batas_input' => $data['batas_batas_input'] ?? null, 'kondisi_lingkungan' => $data['kondisi_lingkungan'] ?? null, 'kondisi_lain_bangunan' => $data['kondisi_lain_bangunan'] ?? null, 'informasi_dokument' => $data['informasi_dokument'] ?? null, @@ -1844,7 +1904,7 @@ class SurveyorController extends Controller ]; - $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first(); + $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('dokument_id', $request->input('dokument_id'))->first(); $fotoTypes = [ @@ -2278,7 +2338,7 @@ class SurveyorController extends Controller */ - private function uploadFile($file, $type) + public function uploadFile($file, $type) { if (!$file->isValid()) { throw new Exception("Invalid file upload for {$type}"); @@ -2306,8 +2366,10 @@ class SurveyorController extends Controller { $result = []; - foreach ($keys as $index => $key) { - $result[$key] = $values[$index] ?? null; + foreach ($keys as $key) { + // Jika checkbox dicentang, ambil nilai input yang sesuai + // Gunakan nilai dari $values berdasarkan nama checkbox + $result[$key] = $values[$key] ?? null; } return $result; @@ -2315,6 +2377,7 @@ class SurveyorController extends Controller + /** * Helper method generic untuk mengambil data field * diff --git a/app/Http/Requests/KJPPRequest.php b/app/Http/Requests/KJPPRequest.php index 4ff5821..28f1e7e 100644 --- a/app/Http/Requests/KJPPRequest.php +++ b/app/Http/Requests/KJPPRequest.php @@ -24,22 +24,31 @@ class KJPPRequest extends FormRequest 'nomor_telepon_kantor' => 'nullable|numeric|digits_between:8,15', 'email_kantor' => 'required|email', 'detail_email_kantor' => 'nullable', + 'detail_email_kantor.email_kantor.*' => 'email', 'nama_pimpinan' => 'required|string|not_regex:/^\d+$/|max:255', 'detail_nama_pimpinan' => 'nullable', + 'detail_nama_pimpinan.nama_pimpinan.*' => 'string|not_regex:/^\d+$/|max:255', 'nomor_hp_pimpinan' => 'required|numeric|digits_between:10,15', - 'detail_nomor_pic_pimpinan' => 'nullable', + 'detail_nomor_hp_pimpinan' => 'nullable', + 'detail_nomor_hp_pimpinan.nomor_hp_pimpinan.*' => 'numeric|digits_between:10,15', 'nama_pic_reviewer' => 'nullable|string|not_regex:/^\d+$/|max:255', 'detail_nama_pic_reviewer' => 'nullable', + 'detail_nama_pic_reviewer.nama_pic_reviewer.*' => 'string|not_regex:/^\d+$/|max:255', 'nomor_hp_pic_reviewer' => 'nullable|numeric|digits_between:10,15', 'detail_nomor_hp_pic_reviewer' => 'nullable', + 'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.*' => 'numeric|digits_between:10,15', 'nama_pic_admin' => 'nullable|string|not_regex:/^\d+$/|max:255', 'detail_nama_pic_admin' => 'nullable', + 'detail_nama_pic_admin.nama_pic_admin.*' => 'string|not_regex:/^\d+$/|max:255', 'nomor_hp_pic_admin' => 'nullable|numeric|digits_between:10,15', 'detail_nomor_hp_pic_admin' => 'nullable', + 'detail_nomor_hp_pic_admin.nomor_hp_pic_admin.*' => 'numeric|digits_between:10,15', 'nama_pic_marketing' => 'nullable|string|not_regex:/^\d+$/|max:255', 'detail_nama_pic_marketing' => 'nullable', + 'detail_nama_pic_marketing.nama_pic_marketing.*' => 'string|not_regex:/^\d+$/|max:255', 'nomor_hp_pic_marketing' => 'nullable|numeric|digits_between:10,15', 'detail_nomor_hp_pic_marketing' => 'nullable', + 'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.*' => 'numeric|digits_between:10,15', 'ijin_usaha_id' => 'required|array', 'ijin_usaha_id.*' => 'exists:ijin_usaha,code', 'jenis_aset_id' => 'nullable|array', @@ -83,20 +92,33 @@ class KJPPRequest extends FormRequest 'nomor_telepon_kantor.digits_between' => 'Nomor Telepon Kantor minimum 8 digit dan maksimum 15 digit!', 'email_kantor.required' => 'Email Kantor Wajib diisi!', 'email_kantor.email' => 'Email Kantor tidak valid!', + 'detail_email_kantor.email_kantor.*.email' => 'Email Kantor tidak valid!', 'nama_pimpinan.required' => 'Nama Pimpinan Wajib diisi!', 'nama_pimpinan.not_regex' => 'Nama Pimpinan harus berupa huruf!', + 'detail_nama_pimpinan.nama_pimpinan.*.not_regex' => 'Nama Pimpinan harus berupa huruf!', 'nomor_hp_pimpinan.required' => 'Nomor HP Pimpinan Wajib diisi!', 'nomor_hp_pimpinan.numeric' => 'Nomor HP Pimpinan harus berupa angka!', 'nomor_hp_pimpinan.digits_between' => 'Nomor HP Pimpinan minimum 10 digit dan maksimum 15 digit!', + 'detail_nomor_hp_pimpinan.nomor_hp_pimpinan.*.numeric' => 'Nomor HP Pimpinan harus berupa angka!', + 'detail_nomor_hp_pimpinan.nomor_hp_pimpinan.*.digits_between' => 'Nomor HP Pimpinan minimum 10 digit dan maksimum 15 digit!', 'nama_pic_reviewer.not_regex' => 'Nama PIC Reviewer harus berupa huruf!', + 'detail_nama_pic_reviewer.nama_pic_reviewer.*.not_regex' => 'Nama PIC Reviewer harus berupa huruf!', 'nomor_hp_pic_reviewer.numeric' => 'Nomor HP PIC Reviewer harus berupa angka!', 'nomor_hp_pic_reviewer.digits_between' => 'Nomor HP PIC Reviewer minimum 10 digit dan maksimum 15 digit!', + 'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.*.numeric' => 'Nomor HP PIC Reviewer harus berupa angka!', + 'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.*.digits_between' => 'Nomor HP PIC Reviewer minimum 10 digit dan maksimum 15 digit!', 'nama_pic_admin.not_regex' => 'Nama PIC Admin harus berupa huruf!', + 'detail_nama_pic_admin.nama_pic_admin.*.not_regex' => 'Nama PIC Admin harus berupa huruf!', 'nomor_hp_pic_admin.numeric' => 'Nomor HP PIC Admin harus berupa angka!', 'nomor_hp_pic_admin.digits_between' => 'Nomor HP PIC Admin minimum 10 digit dan maksimum 15 digit!', + 'detail_nomor_hp_pic_admin.nomor_hp_pic_admin.*.numeric' => 'Nomor HP PIC Admin harus berupa angka!', + 'detail_nomor_hp_pic_admin.nomor_hp_pic_admin.*.digits_between' => 'Nomor HP PIC Admin minimum 10 digit dan maksimum 15 digit!', 'nama_pic_marketing.not_regex' => 'Nama PIC Marketing harus berupa huruf!', + 'detail_nama_pic_marketing.nama_pic_marketing.*.not_regex' => 'Nama PIC Marketing harus berupa huruf!', 'nomor_hp_pic_marketing.numeric' => 'Nomor HP PIC Marketing harus berupa angka!', 'nomor_hp_pic_marketing.digits_between' => 'Nomor HP PIC Marketing minimum 10 digit dan maksimum 15 digit!', + 'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.*.numeric' => 'Nomor HP PIC Marketing harus berupa angka!', + 'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.*.digits_between' => 'Nomor HP PIC Marketing minimum 10 digit dan maksimum 15 digit!', 'ijin_usaha_id.required' => 'Ijin Usaha Wajib diisi!', 'attachment.mimes' => 'Attachment harus berformat pdf!', 'attachment.max' => 'Attachment berukuran maksimum 1 MB!', diff --git a/app/Http/Requests/NocRequest.php b/app/Http/Requests/NocRequest.php new file mode 100644 index 0000000..0cb7e66 --- /dev/null +++ b/app/Http/Requests/NocRequest.php @@ -0,0 +1,23 @@ + 'nullable|exists:penawaran,id', + 'nominal_bayar' => 'nullable|numeric|min:0', + 'bukti_ksl' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240', + 'status' => 'nullable|boolean', + ]; + } + } diff --git a/app/Http/Requests/PersetujuanPenawaranRequest.php b/app/Http/Requests/PersetujuanPenawaranRequest.php index 5f85f6e..cc8a03d 100644 --- a/app/Http/Requests/PersetujuanPenawaranRequest.php +++ b/app/Http/Requests/PersetujuanPenawaranRequest.php @@ -23,6 +23,7 @@ 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240', + 'nominal_bayar' => 'nullable|numeric|min:0', 'status' => 'nullable|boolean', 'authorized_status' => 'boolean', 'authorized_at' => 'nullable|date', diff --git a/app/Models/DokumenJaminan.php b/app/Models/DokumenJaminan.php index 3454dc9..e3a958e 100644 --- a/app/Models/DokumenJaminan.php +++ b/app/Models/DokumenJaminan.php @@ -67,4 +67,8 @@ public function detail(){ return $this->hasMany(DetailDokumenJaminan::class, 'dokumen_jaminan_id', 'id'); } + public function inspeksi() + { + return $this->hasMany(Inspeksi::class, 'dokument_id', 'id'); + } } diff --git a/app/Models/Inspeksi.php b/app/Models/Inspeksi.php index 47e042a..e6d253d 100644 --- a/app/Models/Inspeksi.php +++ b/app/Models/Inspeksi.php @@ -14,20 +14,15 @@ class Inspeksi extends Model /** * The attributes that are mass assignable. */ - protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','jenis_jaminan_id','data_pembanding']; + protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding']; public function permohonan() { return $this->belongsTo(Permohonan::class, 'permohonan_id'); } - public function jenis_jaminan() + public function dokument() { - return $this->belongsTo(JenisJaminan::class, 'jenis_jaminan_id'); + return $this->belongsTo(DokumenJaminan::class, 'dokument_id'); } - - // protected static function newFactory(): InspeksiFactory - // { - // // return InspeksiFactory::new(); - // } } diff --git a/app/Models/Penilai.php b/app/Models/Penilai.php new file mode 100644 index 0000000..cc5eed5 --- /dev/null +++ b/app/Models/Penilai.php @@ -0,0 +1,42 @@ +belongsTo(DokumenJaminan::class); + } + public function permohonan(){ + return $this->belongsTo(Permohonan::class); + } + public function inspeksi(){ + return $this->belongsTo(Inspeksi::class); + } + +} diff --git a/app/Models/PersetujuanPenawaran.php b/app/Models/PersetujuanPenawaran.php index 6a58bc2..ebaf8af 100644 --- a/app/Models/PersetujuanPenawaran.php +++ b/app/Models/PersetujuanPenawaran.php @@ -19,6 +19,7 @@ 'file_persetujuan_penawaran', 'surat_representasi', 'bukti_bayar', + 'nominal_bayar', 'status', 'authorized_status', 'authorized_at', diff --git a/database/migrations/2024_12_17_025938_create_penilai_table.php b/database/migrations/2024_12_17_025938_create_penilai_table.php new file mode 100644 index 0000000..0a5fc7e --- /dev/null +++ b/database/migrations/2024_12_17_025938_create_penilai_table.php @@ -0,0 +1,44 @@ +id(); + $table->string('type')->nullable(); + $table->json('lpj')->nullable(); + $table->json('resume')->nullable(); + $table->json('memo')->nullable(); + $table->string('kertas_kerja')->nullable(); + $table->unsignedBigInteger('dokument_id')->nullable(); + $table->unsignedBigInteger('permohonan_id')->nullable(); + $table->unsignedBigInteger('inspeksi_id')->nullable(); + $table->timestamps(); + $table->timestamp('authorized_at')->nullable(); + $table->char('authorized_status', 1)->nullable(); + $table->softDeletes(); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->unsignedBigInteger('authorized_by')->nullable(); + $table->foreign('dokument_id')->references('id')->on('dokumen_jaminan')->onDelete('set null'); + $table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('set null'); + $table->foreign('inspeksi_id')->references('id')->on('inspeksi')->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('penilai'); + } +}; diff --git a/database/migrations/2024_12_17_074223_update_inspeksi_table.php b/database/migrations/2024_12_17_074223_update_inspeksi_table.php new file mode 100644 index 0000000..e17d9ab --- /dev/null +++ b/database/migrations/2024_12_17_074223_update_inspeksi_table.php @@ -0,0 +1,44 @@ +dropForeign(['jenis_jaminan_id']); + } + + if (Schema::hasColumn('inspeksi', 'jenis_jaminan_id')) { + $table->dropColumn('jenis_jaminan_id'); + } + + $table->unsignedBigInteger('dokument_id')->nullable()->after('permohonan_id'); + $table->foreign('dokument_id')->references('id')->on('dokumen_jaminan')->onDelete('cascade'); + + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + + Schema::table('inspeksi', function (Blueprint $table) { + + $table->dropForeign(['dokument_id']); + $table->dropColumn('dokument_id'); + + $table->unsignedBigInteger('jenis_jaminan_id')->nullable()->after('permohonan_id'); + $table->foreign('jenis_jaminan_id')->references('id')->on('jenis_jaminan')->onDelete('cascade'); + }); + + } +}; diff --git a/database/migrations/2024_12_19_040336_update_persetujuan_penawaran_table.php b/database/migrations/2024_12_19_040336_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..1c7fd29 --- /dev/null +++ b/database/migrations/2024_12_19_040336_update_persetujuan_penawaran_table.php @@ -0,0 +1,28 @@ +double('nominal_bayar')->nullable()->after('bukti_bayar'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->dropColumn('nominal_bayar'); + }); + } +}; diff --git a/database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php b/database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..a11d8df --- /dev/null +++ b/database/migrations/2024_12_19_043209_update_persetujuan_penawaran_table.php @@ -0,0 +1,31 @@ +string('bukti_ksl')->nullable()->after('nominal_bayar'); + $table->string('catatan_noc')->nullable()->after('bukti_ksl'); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->dropColumn('bukti_ksl'); + $table->dropColumn('catatan_noc'); + }); + } + }; diff --git a/module.json b/module.json index e6530f2..bf39dc9 100644 --- a/module.json +++ b/module.json @@ -16,7 +16,7 @@ { "title": "Permohonan", "path": "permohonan", - "icon": "ki-filled ki-questionnaire-tablet text-lg", + "icon": "ki-filled ki-questionnaire-tablet text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -29,7 +29,7 @@ { "title": "Persetujuan Penawaran", "path": "persetujuan-penawaran", - "icon": "ki-filled ki-questionnaire-tablet text-lg", + "icon": "ki-filled ki-double-check text-lg text-info", "classes": "", "attributes": [], "permission": "", @@ -38,10 +38,22 @@ "pemohon-ao" ] }, + { + "title": "NOC", + "path": "noc", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "noc" + ] + }, { "title": "Registrasi", "path": "registrasi", - "icon": "ki-filled ki-file-added text-lg", + "icon": "ki-filled ki-add-files text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -53,7 +65,7 @@ { "title": "Tender", "path": "tender", - "icon": "ki-filled ki-category text-lg", + "icon": "ki-filled ki-briefcase text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -89,7 +101,7 @@ { "title": "Otorisasi Tender", "path": "otorisasitender", - "icon": "ki-filled ki-category text-lg", + "icon": "ki-filled ki-brifecase-tick text-lg text-info", "classes": "", "attributes": [], "permission": "", @@ -118,7 +130,7 @@ { "title": "SPK", "path": "spk", - "icon": "ki-filled ki-file-added text-lg", + "icon": "ki-filled ki-document text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -130,7 +142,7 @@ { "title": "Registrasi Final", "path": "registrasifinal", - "icon": "ki-filled ki-file-added text-lg", + "icon": "ki-filled ki-file-added text-lg text-success", "classes": "", "attributes": [], "permission": "", @@ -139,23 +151,10 @@ "admin" ] }, - { - "title": "Pembatalan", - "path": "", - "icon": "ki-filled ki-file-deleted text-lg text-danger", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "pemohon-eo" - ] - }, { "title": "Data Debitur", "path": "debitur", - "icon": "ki-filled ki-people text-lg", + "icon": "ki-filled ki-people text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -168,7 +167,7 @@ { "title": "Authorization", "path": "authorization", - "icon": "ki-filled ki-security-user text-lg", + "icon": "ki-filled ki-security-user text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -180,7 +179,7 @@ { "title": "Assignment", "path": "penilaian", - "icon": "ki-filled ki-badge text-lg", + "icon": "ki-filled ki-badge text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -192,7 +191,7 @@ { "title": "Team Activity", "path": "activity.progres", - "icon": "ki-filled ki-questionnaire-tablet text-lg", + "icon": "ki-filled ki-calendar-tick text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -204,7 +203,7 @@ { "title": "Otorisator", "path": "otorisator", - "icon": "ki-filled ki-security-user text-lg", + "icon": "ki-filled ki-security-user text-lg text-info", "classes": "", "attributes": [], "permission": "", @@ -262,7 +261,7 @@ { "title": "Surveyor", "path": "surveyor", - "icon": "ki-filled ki-questionnaire-tablet text-lg", + "icon": "ki-filled ki-questionnaire-tablet text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -274,7 +273,7 @@ { "title": "Activity", "path": "activity", - "icon": "ki-filled ki-calendar-edit text-lg", + "icon": "ki-filled ki-calendar-edit text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -289,7 +288,7 @@ { "title": "Penilai", "path": "penilai", - "icon": "ki-filled ki-brush text-lg", + "icon": "ki-filled ki-brush text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -301,7 +300,7 @@ { "title": "Laporan", "path": "laporan", - "icon": "ki-filled ki-filter-tablet text-lg", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -311,39 +310,12 @@ "pemohon-eo", "admin", "senior-officer" - ], - "sub": [ - { - "title": "Sederhana", - "path": "laporan.sederhana", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "admin" - ] - }, - { - "title": "Standard", - "path": "laporan.standard", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "pemohon-eo", - "admin", - "senior-officer" - ] - } ] }, { "title": "Resume", "path": "resume", - "icon": "ki-filled ki-questionnaire-tablet text-lg", + "icon": "ki-filled ki-notepad text-lg text-primary", "classes": "", "attributes": [], "permission": "", @@ -358,16 +330,13 @@ { "title": "Basic Data", "path": "basicdata", - "icon": "ki-filled ki-category text-lg", + "icon": "ki-filled ki-category text-lg text-primary", "classes": "", "attributes": [], "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo", - "admin", - "surveyor" + "admin" ], "sub": [ { @@ -378,8 +347,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -390,8 +358,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -402,8 +369,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -414,8 +380,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -426,8 +391,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -438,8 +402,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -450,8 +413,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -462,8 +424,7 @@ "permission": "", "roles": [ "administrator", - "pemohon-ao", - "pemohon-eo" + "admin" ] }, { @@ -473,7 +434,8 @@ "attributes": [], "permission": "", "roles": [ - "administrator" + "administrator", + "admin" ] }, { @@ -483,7 +445,8 @@ "attributes": [], "permission": "", "roles": [ - "administrator" + "administrator", + "admin" ] }, { @@ -494,8 +457,7 @@ "permission": "", "roles": [ "administrator", - "admin", - "senior-officer" + "admin" ] }, { @@ -506,7 +468,7 @@ "permission": "", "roles": [ "administrator", - "senior-officer" + "admin" ] }, { @@ -517,8 +479,7 @@ "permission": "", "roles": [ "administrator", - "admin", - "senior-officer" + "admin" ] }, { @@ -584,7 +545,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -595,7 +556,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -606,7 +567,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -617,7 +578,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -628,7 +589,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -639,7 +600,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -650,7 +611,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -661,7 +622,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -672,52 +633,64 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" + ] + }, + { + "title": "Jenis Unit", + "path": "basicdata.jenis-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Bentuk Unit", + "path": "basicdata.bentuk-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Merupakan Daerah", + "path": "basicdata.merupakan-daerah", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Fasilitas Umum Dekat Objek", + "path": "basicdata.fasilitas-objek", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Posisi Unit", + "path": "basicdata.posisi-unit", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" ] }, - - { - "title": "Jenis Unit", - "path": "basicdata.jenis-unit", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Bentuk Unit", - "path": "basicdata.bentuk-unit", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Merupakan Daerah", - "path": "basicdata.merupakan-daerah", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - - { - "title": "Fasilitas Umum Dekat Objek", - "path": "basicdata.fasilitas-objek", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - - { - "title": "Posisi Unit", - "path": "basicdata.posisi-unit", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, { "title": "Lalu Lintas Sekitar", "path": "basicdata.lalu-lintas-lokasi", @@ -726,7 +699,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -737,7 +710,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -748,7 +721,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -759,7 +732,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -770,7 +743,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -781,7 +754,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -792,7 +765,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -803,7 +776,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -814,7 +787,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -825,7 +798,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -836,7 +809,7 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, { @@ -847,17 +820,20 @@ "permission": "", "roles": [ "administrator", - "surveyor" + "admin" ] }, - { - "title": "Terletak Di Area", - "path": "basicdata.terletak-area", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - } + { + "title": "Terletak Di Area", + "path": "basicdata.terletak-area", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + } ] } ], diff --git a/resources/views/Ijin_usaha/index.blade.php b/resources/views/Ijin_usaha/index.blade.php index f3c7564..27f9d64 100644 --- a/resources/views/Ijin_usaha/index.blade.php +++ b/resources/views/Ijin_usaha/index.blade.php @@ -6,7 +6,7 @@ @section('content')