diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 970fcc7..ec2aaf3 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -1,16 +1,16 @@ translatedFormat('d F Y'); } return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; @@ -19,7 +19,7 @@ use Modules\Lpj\Models\HolidayCalendar; function formatRupiah($number) { - $number = (float)$number; + $number = (float) $number; return 'Rp ' . number_format($number, 2, ',', '.'); } @@ -34,9 +34,10 @@ use Modules\Lpj\Models\HolidayCalendar; { $penawaran = PenawaranTender::find($id); - $start_date = strtotime($penawaran->start_date); - $end_date = strtotime($penawaran->end_date); - $todays_date = strtotime(now()); + $start_date = strtotime($penawaran->start_date); + $end_date = strtotime($penawaran->end_date); + // $todays_date = strtotime(now()); + $todays_date = strtotime("+1 day", strtotime(now())); $allow = true; if ($todays_date >= $start_date && $todays_date <= $end_date) { @@ -61,25 +62,25 @@ use Modules\Lpj\Models\HolidayCalendar; // DB::enableQueryLog(); // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap? $query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where( - function ($query) { - // no_proposal - $query->orWhere('no_proposal', '', ""); - $query->orWhereNull('no_proposal'); + function ($query) { + // no_proposal + $query->orWhere('no_proposal', '', ""); + $query->orWhereNull('no_proposal'); - // tgl_proposal - $query->orWhere('tgl_proposal', '', ""); - $query->orWhereNull('tgl_proposal'); + // tgl_proposal + $query->orWhere('tgl_proposal', '', ""); + $query->orWhereNull('tgl_proposal'); - $query->orWhere('biaya_penawaran', '', ""); - $query->orWhereNull('biaya_penawaran'); + $query->orWhere('biaya_penawaran', '', ""); + $query->orWhereNull('biaya_penawaran'); - $query->orWhere('attachment', '', ""); - $query->orWhereNull('attachment'); + $query->orWhere('attachment', '', ""); + $query->orWhereNull('attachment'); - $query->orWhere('dokumen_persetujuan', '', ""); - $query->orWhereNull('dokumen_persetujuan'); - }, - )->get(); + $query->orWhere('dokumen_persetujuan', '', ""); + $query->orWhereNull('dokumen_persetujuan'); + }, + )->get(); // $sql = DB::getQueryLog(); @@ -102,28 +103,28 @@ use Modules\Lpj\Models\HolidayCalendar; return implode(' ', $words); } - // generate last penawaran.code - function onLastnumberCodePenawaran(): string + // generate last penawaran.code + function onLastnumberCodePenawaran() + : string { // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC $maxCode = PenawaranTender::max('code'); // $penawaran = PenawaranTender::latest()->first(); - $penawaran = PenawaranTender::where('code','=',$maxCode)->first(); - $code_penawaran_last=''; - $noUrutAkhirString = sprintf("%04s", 1); - if($penawaran) - { - $code_penawaran_last = substr ($maxCode, -4); + $penawaran = PenawaranTender::where('code', '=', $maxCode)->first(); + $code_penawaran_last = ''; + $noUrutAkhirString = sprintf("%04s", 1); + if ($penawaran) { + $code_penawaran_last = substr($maxCode, -4); $year_penawaran_last = Carbon::parse($penawaran->created_at)->year; - $year_now = Carbon::now()->year; - if($year_now == $year_penawaran_last) - { - $noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1)); + $year_now = Carbon::now()->year; + if ($year_now == $year_penawaran_last) { + $noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1)); } } - - return 'NP'.Carbon::now()->format('y').$noUrutAkhirString; + + return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString; } + // andy add @@ -135,16 +136,9 @@ use Modules\Lpj\Models\HolidayCalendar; $hariKerja = 0; $tanggalSekarang = $tanggalMulai->copy(); - // Ambil semua tanggal libur dari tabel holiday calendar - $tanggalLibur = HolidayCalendar::whereBetween('date', [$tanggalMulai, $tanggalSelesai])->pluck('date')->map( - function ($item) { - return Carbon::parse($item)->format('Y-m-d'); - }, - )->toArray(); - while ($tanggalSekarang <= $tanggalSelesai) { // Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur - if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), $tanggalLibur)) { + if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), holidays())) { $hariKerja++; } $tanggalSekarang->addDay(); @@ -152,3 +146,12 @@ use Modules\Lpj\Models\HolidayCalendar; return $hariKerja; } + + function holidays() + { + return HolidayCalendar::pluck('date')->map( + function ($item) { + return Carbon::parse($item)->format('Y-m-d'); + }, + )->toArray(); + } diff --git a/app/Http/Controllers/OtorisasiPenawaranController.php b/app/Http/Controllers/OtorisasiPenawaranController.php index 82f6fff..ca25549 100644 --- a/app/Http/Controllers/OtorisasiPenawaranController.php +++ b/app/Http/Controllers/OtorisasiPenawaranController.php @@ -1,323 +1,430 @@ user) || !$this->user->can('debitur.view')) { - //abort(403, 'Sorry! You are not allowed to view users.'); + public $user; + + /** + * Display a listing of the resource. + */ + public function index() + { + // dd('hai otorisasi'); + return view('lpj::otorisasipenawaran.index'); } - // Retrieve data from the database - $query =PenawaranTender::query() - ->select('penawaran.*', - 'debitures.name as debitures_name', - 'permohonan.tanggal_permohonan', - 'users.name as user_pemohon', - 'branches.name as branches_name', - 'tujuan_penilaian.name as tujuan_penilaian_name', - 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') - ->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi') - ->leftJoin('debitures', 'debitures.id', '=', 'permohonan.debiture_id') - ->leftJoin('users', 'users.id', '=', 'permohonan.user_id') - ->leftJoin('branches', 'branches.id', '=', 'permohonan.branch_id') - ->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id') - ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') - ->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 . '%'); - }); - } - - // 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(); - - // format date - $i = 0; - foreach ($data as $obj) { - - // tanggal_permohonan - if ($obj->tanggal_permohonan) { - $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); + 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.'); } - // date_range - $data[$i]->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'); + // Retrieve data from the database + $query = PenawaranTender::query()->select( + 'penawaran.*', + 'debitures.name as debitures_name', + 'permohonan.tanggal_permohonan', + 'users.name as user_pemohon', + 'branches.name as branches_name', + 'tujuan_penilaian.name as tujuan_penilaian_name', + 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name', + )->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi')->leftJoin( + 'debitures', + 'debitures.id', + '=', + 'permohonan.debiture_id', + )->leftJoin('users', 'users.id', '=', 'permohonan.user_id')->leftJoin( + 'branches', + 'branches.id', + '=', + 'permohonan.branch_id', + )->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id', '=', 'permohonan.tujuan_penilaian_id')->leftJoin( + 'tujuan_penilaian_kjpp', + 'tujuan_penilaian_kjpp.id', + '=', + 'penawaran.tujuan_penilaian_kjpp_id', + )->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 . '%'); + }); } - $i++; - } - // format date + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } - // Calculate the page count - $pageCount = ceil($totalRecords / $request->get('size')); + // Get the total count of records + $totalRecords = $query->count(); - // Calculate the current page number - $currentPage = 0 + 1; + // 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 - // 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 - ]); - } + $query->skip($offset)->take($size); + } - public function edit($id) - { - return view('lpj::otorisasipenawaran.edit', compact('id')); - } + // Get the filtered count of records + $filteredRecords = $query->count(); - public function setData(Request $request): JsonResponse - { - $data = array(); - $penawaran = array(); - $penawrandetails = array(); - $penawarandetailLogs = array(); - - if (request()->ajax()) { - $id = $request->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') - ->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') - ->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; - foreach($penawarandetailLogs as $obj1) - { - if($obj1->dokumen_persetujuan && Storage::disk('public')->exists($obj1->dokumen_persetujuan)) - { - $penawarandetailLogs_path = Storage::url($obj1->dokumen_persetujuan); - $penawarandetailLogs[$h]->dokumen_persetujuan = $penawarandetailLogs_path; - } - $h++; - } + // Get the data for the current page + //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + $data = $query->get(); + // format date + $i = 0; + foreach ($data as $obj) { + // tanggal_permohonan + if ($obj->tanggal_permohonan) { + $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); } - $i=0; - foreach($penawrandetails as $obj) - { - if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan)) - { - $penawrandetails_path = Storage::url($obj->dokumen_persetujuan); - $penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path; - - } - $i++; + // date_range + $data[$i]->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'); } - $penawaranString = ""; - if($penawaran->status) - { - $penawaranString = convertSlug($penawaran->status); - $penawaran->status = $penawaranString; - } - - $kjpp=null; - $kjpp = KJPP::pluck('name', 'id'); - $data['penawaran'] = $penawaran; - $data['penawrandetails'] = $penawrandetails; - $data['penawarandetailLogs'] = $penawarandetailLogs; - $data['status'] = 'success'; - $data['message']['message_success'] = array("data successfully found"); - } else { - $data['status'] = 'error'; - $data['penawaran'] = null; - $data['penawrandetails'] = null; - $data['message']['message_data'] = array("data not found"); + $i++; } - } else { - $data['status'] = 'error'; - $data['message']['message_ajax'] = array("no ajax request"); + // format date + + // 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 edit($id) + { + // id ==> penawaran.id + return view('lpj::otorisasipenawaran.edit', compact('id')); + } + + public function setData(Request $request): JsonResponse + { + $data = []; + $penawaran = []; + $penawrandetails = []; + $penawarandetailLogs = []; - return response()->json($data); - } + if (request()->ajax()) { + $id = $request->id; + $penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id); - public function otorisasiPenawaranKJPP(Request $request, $id): JsonResponse - { - $data = array(); - $dataDetailPenawaranLog=[]; - if (request()->ajax()) { + if ($penawaran) { + $penawarandetailLogs = PenawaranDetailTenderLog::where('penawaran_id',$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') + ->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name') + ->where('detail_penawaran.status','=',1) + ->get(); - // cek masa aktif penawaran - $detailpenawaran = PenawaranDetailTender::find($id); - $penawaran = PenawaranTender::findOrFail($detailpenawaran->penawaran_id); - $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id); - // cek masa aktif penawaran - if($checkActiveDateRange) - { - DB::beginTransaction(); - try { + if(sizeof($penawarandetailLogs)>0) + { + $h=0; + foreach($penawarandetailLogs as $obj1) + { + // tgl_proposal + if ($obj1->tgl_proposal) { + $penawarandetailLogs[$h]->tgl_proposal = Carbon::parse($obj1->tgl_proposal)->format('d M Y'); + } - // update status KJPP yg tidak terpilih menjadi 2 -> kalah - // update status Penawaran menjadi SPK - // update status Permohonan menjadi SPK - // insert detail_permohonan_log + if($obj1->dokumen_persetujuan && Storage::disk('public')->exists($obj1->dokumen_persetujuan)) + { + $penawarandetailLogs_path = Storage::url($obj1->dokumen_persetujuan); + $penawarandetailLogs[$h]->dokumen_persetujuan = $penawarandetailLogs_path; + } + $h++; + } - PenawaranDetailTender::where('status', 1) - ->where('penawaran_id', $request->penawaran_id) - ->whereNotIn('id', [$id]) - ->update(['status' => 2, - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]); + } - PenawaranTender::where('id', $request->penawaran_id) - ->update(['status'=>'spk', - 'nama_kjpp_sebelumnya'=>$request->kjppName, - 'biaya_kjpp_sebelumnya'=>$request->biaya_penawaran, - 'tanggal_penilaian_sebelumnya'=>now(), - 'authorized_status'=>1, - 'authorized_at'=>now(), - 'authorized_by'=>Auth::id(), - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]); + $i=0; + foreach($penawrandetails as $obj) + { + // tgl_proposal + if ($obj->tgl_proposal) { + $penawrandetails[$i]->tgl_proposal = Carbon::parse($obj->tgl_proposal)->format('d M Y'); + } - Permohonan::where('nomor_registrasi',$request->noReg) - ->update(['status'=>'spk', - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]); + if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan)) + { + $penawrandetails_path = Storage::url($obj->dokumen_persetujuan); + $penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path; - // log - $detailPenawaran = PenawaranDetailTender::where('penawaran_id', $request->penawaran_id)->get(); - if(sizeof($detailPenawaran)>0) - { + } + $i++; + } - foreach ($detailPenawaran as $model) { - array_push($dataDetailPenawaranLog, [ - 'detail_penawaran_id' =>$model->id, - 'kjpp_rekanan_id' =>$model->kjpp_rekanan_id, - 'penawaran_id' =>$model->penawaran_id, - '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 - ]); + $penawaranString = ""; + if($penawaran->status) + { + $penawaranString = convertSlug($penawaran->status); + $penawaran->status = $penawaranString; + } - } + $kjpp=null; + $kjpp = KJPP::pluck('name', 'id'); + $data['penawaran'] = $penawaran; + $data['penawrandetails'] = $penawrandetails; + $data['penawarandetailLogs'] = $penawarandetailLogs; + $data['status'] = 'success'; + $data['message']['message_success'] = array("data successfully found"); + } else { + $data['status'] = 'error'; + $data['penawaran'] = null; + $data['penawrandetails'] = null; + $data['message']['message_data'] = array("data not found"); + } + } else { + $data['status'] = 'error'; + $data['message']['message_ajax'] = array("no ajax request"); + } - PenawaranDetailTenderLog::insert($dataDetailPenawaranLog); - } - // log + return response()->json($data); + } + + public function otorisasiPenawaranKJPP(Request $request, $id): JsonResponse + { + $data = []; + $dataDetailPenawaranLog = []; + if (request()->ajax()) { - DB::commit(); - $data['status'] = 'success'; - $data['message']['message_success'] = array('Otorisasi Penawaran KJPP '.$request->kjppName.' successfully'); - } catch (Exception $e) { - DB::rollBack(); - $data['status'] = 'error'; - $data['message']['message_error'] = array("Otorisasi Penawaran KJPP failed.."); - } - } - else - { - $data['status'] = 'error'; - $data['message'] ['active_date_range'] = array("Penawaran sudah di tutup"); - } + // cek masa aktif penawaran + $detailpenawaran = PenawaranDetailTender::find($id); + $penawaran = PenawaranTender::findOrFail($detailpenawaran->penawaran_id); + $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id); + // cek masa aktif penawaran + if($checkActiveDateRange) + { + DB::beginTransaction(); + try { - } else { - $data['status'] = 'error'; - $data['message']['message_ajax'] = array("no ajax request"); - } - return response()->json($data); - } + // update status KJPP yg tidak terpilih menjadi 2 -> kalah + // update status Penawaran menjadi SPK + // update status Permohonan menjadi SPK + // insert detail_permohonan_log - public function show($id) - { - $prosespenawaran = PenawaranTender::find($id); - return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran')); - } -} + PenawaranDetailTender::where('status', 1) + ->where('penawaran_id', $request->penawaran_id) + ->whereNotIn('id', [$id]) + ->update(['status' => 2, + 'updated_by' => Auth::id(), + 'updated_at' => now() + ]); + + PenawaranTender::where('id', $request->penawaran_id) + ->update(['status'=>'spk', + 'nama_kjpp_sebelumnya'=>$request->kjppName, + 'biaya_kjpp_sebelumnya'=>$request->biaya_penawaran, + 'tanggal_penilaian_sebelumnya'=>now(), + 'authorized_status'=>1, + 'authorized_at'=>now(), + 'authorized_by'=>Auth::id(), + 'updated_by' => Auth::id(), + 'updated_at' => now() + ]); + + Permohonan::where('nomor_registrasi',$request->noReg) + ->update(['status'=>'persetujuan-penawaran', + '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, + '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); + } + // log + + DB::commit(); + $data['status'] = 'success'; + $data['message']['message_success'] = array('Otorisasi Penawaran KJPP '.$request->kjppName.' successfully'); + } catch (Exception $e) { + DB::rollBack(); + $data['status'] = 'error'; + $data['message']['message_error'] = array("Otorisasi Penawaran KJPP failed.."); + } + } + else + { + $data['status'] = 'error'; + $data['message']['message_error'] = array("Penawaran sudah di tutup"); + } + + } else { + $data['status'] = 'error'; + $data['message']['message_error'] = array("no ajax request"); + } + return response()->json($data); + } + + public function show($id) + { + $prosespenawaran = PenawaranTender::find($id); + return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran')); + } + + public function penawaranulang(Request $request, $id): JsonResponse + { + // $id ==> penawaran.id + $data = []; + $dataDetailPenawaranLog=[]; + if (request()->ajax()) { + + + DB::beginTransaction(); + try { + + // update detail_penawaran => detail_penawaran.status = 1 (untuk all KJPP) + // 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 + + PenawaranDetailTender::where('penawaran_id', $id) + ->update(['status' => 1, + 'updated_by' => Auth::id(), + 'updated_at' => now() + ]); + + PenawaranTender::where('id', $id) + ->update(['status'=>'tender', + 'updated_by' => Auth::id(), + 'updated_at' => now() + ]); + + Permohonan::where('nomor_registrasi',$request->noReg) + ->update(['status'=>'tender', + 'updated_by' => Auth::id(), + 'updated_at' => now() + ]); + + $detailPenawaran = PenawaranDetailTender::where('penawaran_id', $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 + ]); + + } + + PenawaranDetailTenderLog::insert($dataDetailPenawaranLog); + } + // log + + DB::commit(); + $data['detailPenawaran'] = $detailPenawaran; + $data['status'] = 'success'; + $data['message']['message_success'] = array('Penawaran ulang successfully'); + } catch (Exception $e) { + DB::rollBack(); + $data['status'] = 'error'; + $data['message']['message_error'] = array("Penawaran ulang failed.."); + } + + + } else { + $data['status'] = 'error'; + $data['message']['message_error'] = array("no ajax request"); + } + return response()->json($data); + } + } \ No newline at end of file diff --git a/app/Http/Controllers/PersetujuanPenawaranController.php b/app/Http/Controllers/PersetujuanPenawaranController.php new file mode 100644 index 0000000..1af71bf --- /dev/null +++ b/app/Http/Controllers/PersetujuanPenawaranController.php @@ -0,0 +1,190 @@ +validated(); + $validated['created_by'] = Auth::id(); + + $persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate( + ['penawaran_id' => $validated['penawaran_id']], + $validated, + ); + + $folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id']; + + if ($request->hasFile('file_persetujuan_penawaran')) { + $persetujuanPenawaran->file_persetujuan_penawaran = $request->file('file_persetujuan_penawaran')->store( + $folderPath, + 'public', + ); + } + + if ($request->hasFile('surat_representasi')) { + $persetujuanPenawaran->surat_representasi = $request->file('surat_representasi')->store( + $folderPath, + 'public', + ); + } + + if ($request->hasFile('bukti_bayar')) { + $persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->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 = 'spk'; + $permohonan->save(); + } + + return redirect() + ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.'); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('lpj::persetujuan_penawaran.create'); + } + + /** + * Display the specified resource. + */ + public function show($id) + { + $permohonan = Permohonan::find($id); + $permohonan->status='tender'; + return $permohonan->save(); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $permohonan = Permohonan::with(['debiture', 'penawaranTender.detail'])->find($id); + + 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. + */ + public function destroy(PersetujuanPenawaran $persetujuanPenawaran) + { + $persetujuanPenawaran->delete(); + + return redirect() + ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran deleted successfully'); + } + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('persetujuan_penawaran.view')) { + //abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.'); + } + + // Retrieve data from the database + $query = Permohonan::query()->where(['status' => 'persetujuan-penawaran']); + + // 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(['debiture', 'penawaranTender.detail', 'penawaranTender.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/ProsesPenawaranController.php b/app/Http/Controllers/ProsesPenawaranController.php index f457660..a0d313a 100644 --- a/app/Http/Controllers/ProsesPenawaranController.php +++ b/app/Http/Controllers/ProsesPenawaranController.php @@ -168,6 +168,7 @@ class ProsesPenawaranController extends Controller public function edit($id) { + // $id => penawaran.id return view('lpj::prosespenawaran.edit', compact('id')); } @@ -232,56 +233,70 @@ class ProsesPenawaranController extends Controller */ public function update(Request $request, $id): JsonResponse { + // $id => detail_penawaran.id // init $data = array(); $dataPenawaranDetail = array(); if (request()->ajax()) { - try { + $penawarandetail = PenawaranDetailTender::find($id); + // cek masa aktif penawaran + $checkActiveDateRange = checkActiveDateRangePenawaran($penawarandetail->penawaran_id); + // cek status (penawaran.status = tender) + $penawaran = PenawaranTender::find($penawarandetail->penawaran_id); + if($checkActiveDateRange && ('tender'==$penawaran->status)) + { + try { - $dataPenawaranDetail = ['updated_by' => Auth::id(), - 'updated_at' => now(), - 'no_proposal' => $request->no_proposal, - 'tgl_proposal' => $request->tgl_proposal, - 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) - ]; + $dataPenawaranDetail = ['updated_by' => Auth::id(), + 'updated_at' => now(), + 'no_proposal' => $request->no_proposal, + 'tgl_proposal' => $request->tgl_proposal, + 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) + ]; - if ($request->hasFile('dokumen_persetujuan')) - { - $file_tmp = $request->file('dokumen_persetujuan'); - $folderPath = 'uploads/penawaran/'; - if ($file_tmp->isValid()) + if ($request->hasFile('dokumen_persetujuan')) { - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension - $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension + $file_tmp = $request->file('dokumen_persetujuan'); + $folderPath = 'uploads/penawaran/'; + if ($file_tmp->isValid()) + { + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension - $extension = $file_tmp->getClientOriginalExtension(); - // kjppID_penawaranID_namaFile_userID_time - $newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; - Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); + $extension = $file_tmp->getClientOriginalExtension(); + // kjppID_penawaranID_namaFile_userID_time + $newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; + Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); - $newFileNameWithPath = $folderPath . $newFileName; - $dataPenawaranDetail['attachment'] = $myFile; - $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; + $newFileNameWithPath = $folderPath . $newFileName; + $dataPenawaranDetail['attachment'] = $myFile; + $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; + } + else + { + $data['status'] = 'error'; + $data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf"); + } } - else - { - $data['status'] = 'error'; - $data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf"); - } - } - $penawarandetail = PenawaranDetailTender::findOrFail($id); - $penawarandetail->update($dataPenawaranDetail); + $penawarandetail = PenawaranDetailTender::findOrFail($id); + $penawarandetail->update($dataPenawaranDetail); - $data['detailpenawaran_id'] = $id; - $data['status'] = 'success'; - $data['message'] ['message_success'] = array('Proses Penawarn KJPP successfully'); - } catch (Exception $e) { + $data['detailpenawaran_id'] = $id; + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Penawarn KJPP successfully'); + } catch (Exception $e) { + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); + } + } + else + { $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); - } + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); + } } else { $data['status'] = 'error'; @@ -319,15 +334,17 @@ class ProsesPenawaranController extends Controller */ public function updateAll(Request $request, $id): JsonResponse { + // $id = penawaran.id // init $data = array(); $dataPermohonan = array(); $dataPenawaran = array(); - $penawaran = PenawaranTender::find($id); - $checkActiveDateRange = checkActiveDateRangePenawaran($id); - + // cek masa aktif penawaran - if($checkActiveDateRange) + $checkActiveDateRange = checkActiveDateRangePenawaran($id); + // cek status (penawaran.status = tender) + $penawaran = PenawaranTender::find($id); + if($checkActiveDateRange && ('tender'==$penawaran->status)) { $checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id); @@ -376,27 +393,41 @@ class ProsesPenawaranController extends Controller public function updateKJPPStatus(Request $request, $id): JsonResponse { + // $id => detail_penawaran.id // init $data = array(); $dataDetailPenawaran = array(); - try { - $detailpenawaran = PenawaranDetailTender::findOrFail($id); - $data['id']=$id; + $detailpenawaran = PenawaranDetailTender::find($id); + // cek masa aktif penawaran + $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id); + // cek status (penawaran.status = tender) + $penawaran = PenawaranTender::find($detailpenawaran->penawaran_id); + if($checkActiveDateRange && ('tender'==$penawaran->status)) + { + try { + + // $data['id']=$id; - $dataDetailPenawaran = ['status' => '0', - 'updated_by' => Auth::id(), - 'updated_at' => now() - ]; + $dataDetailPenawaran = ['status' => '0', + 'updated_by' => Auth::id(), + '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'] = 'success'; + $data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName); + } catch (Exception $e) { + $data['status'] = 'error'; + $data['message'] ['message_error'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); + } + } + else + { $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); + $data['message']['message_error'] = array("Penawaran sudah di tutup"); } return response()->json($data); @@ -416,90 +447,102 @@ class ProsesPenawaranController extends Controller $dataPenawaranDetail = array(); $failed = 0; - DB::beginTransaction(); - try + // cek masa aktif penawaran + $checkActiveDateRange = checkActiveDateRangePenawaran($id); + // cek status (penawaran.status = tender) + $penawaran = PenawaranTender::find($id); + if($checkActiveDateRange && ('tender'==$penawaran->status)) { - // update detail_penawaran - $detail_penawaran_ids = $request->input('prosespenawaran_penawarandetail_id', []); - $no_proposals = $request->input('prosespenawaran_no_proposal', []); - $tgl_proposals = $request->input('prosespenawaran_tgl_proposal', []); - $biaya_penawarans = $request->input('prosespenawaran_biayaPenawaran', []); - $dokumen_penawarans = $request->file('prosespenawaran_dokumenPersetujuan'); - - $tot_kjpp = sizeof($detail_penawaran_ids); - if($tot_kjpp>0) + DB::beginTransaction(); + try { - // loop - for($i=0;$i<$tot_kjpp;$i++) + // update detail_penawaran + $detail_penawaran_ids = $request->input('prosespenawaran_penawarandetail_id', []); + $no_proposals = $request->input('prosespenawaran_no_proposal', []); + $tgl_proposals = $request->input('prosespenawaran_tgl_proposal', []); + $biaya_penawarans = $request->input('prosespenawaran_biayaPenawaran', []); + $dokumen_penawarans = $request->file('prosespenawaran_dokumenPersetujuan'); + + $tot_kjpp = sizeof($detail_penawaran_ids); + if($tot_kjpp>0) { - $detail_penawaran_id= $detail_penawaran_ids[$i]; - $dataPenawaranDetail = [ - 'no_proposal' => $no_proposals[$i], - 'tgl_proposal' => $tgl_proposals[$i], - 'biaya_penawaran' => str_replace(".","",$biaya_penawarans[$i]), // 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) - 'updated_by' => Auth::id(), - 'updated_at' => now(), - ]; - - $penawarandetail = PenawaranDetailTender::find($detail_penawaran_id); - if ($dokumen_penawarans) + // loop + for($i=0;$i<$tot_kjpp;$i++) { - if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans)) + $detail_penawaran_id= $detail_penawaran_ids[$i]; + $dataPenawaranDetail = [ + 'no_proposal' => $no_proposals[$i], + 'tgl_proposal' => $tgl_proposals[$i], + 'biaya_penawaran' => str_replace(".","",$biaya_penawarans[$i]), // 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) + 'updated_by' => Auth::id(), + 'updated_at' => now(), + ]; + + $penawarandetail = PenawaranDetailTender::find($detail_penawaran_id); + if ($dokumen_penawarans) { - $file_tmp = $dokumen_penawarans[$i]; - if($file_tmp->isValid()) - { - $folderPath = 'uploads/penawaran/'; + if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans)) + { + $file_tmp = $dokumen_penawarans[$i]; + if($file_tmp->isValid()) + { + $folderPath = 'uploads/penawaran/'; - $myFile=$file_tmp->getClientOriginalName(); // nama file with extension - $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension + $myFile=$file_tmp->getClientOriginalName(); // nama file with extension + $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension - $extension = $file_tmp->getClientOriginalExtension(); - // kjppID_penawaranID_namaFile_userID_time - $newFileName = $penawarandetail->kjpp_rekanan_id.'_'.$penawarandetail->penawaran_id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; - Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); + $extension = $file_tmp->getClientOriginalExtension(); + // kjppID_penawaranID_namaFile_userID_time + $newFileName = $penawarandetail->kjpp_rekanan_id.'_'.$penawarandetail->penawaran_id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; + Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); - $newFileNameWithPath = $folderPath . $newFileName; - $dataPenawaranDetail['attachment'] = $myFile; - $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; + $newFileNameWithPath = $folderPath . $newFileName; + $dataPenawaranDetail['attachment'] = $myFile; + $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; + } + } - + } + $checkStatus = $penawarandetail->update($dataPenawaranDetail); + if(!$checkStatus) + $failed++; + } + + if($failed>0) + { + DB::rollBack(); + $data['status'] = 'error'; + $data['message'] ['message_error'] = array('Proses Draft Penawaran KJPP failed'); + } + else + { + DB::commit(); + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Draft Penawaran KJPP successfully'); } - $checkStatus = $penawarandetail->update($dataPenawaranDetail); - if(!$checkStatus) - $failed++; - } - - if($failed>0) - { - DB::rollBack(); - $data['status'] = 'error'; - $data['message'] ['message_error'] = array('Proses Draft Penawaran KJPP failed'); } else { - DB::commit(); - $data['status'] = 'success'; - $data['message'] ['message_success'] = array('Proses Draft Penawaran KJPP successfully'); + $data['status'] = 'error'; + $data['message'] ['message_error'] = array('Data inti tidak ada.'); } - - } - else + + } + catch (Exception $e) { + // dd($e); + DB::rollBack(); $data['status'] = 'error'; - $data['message'] ['message_error'] = array('Data inti tidak ada.'); + $data['message'] ['message_error_try_catch'] = array('Proses Draft Penawaran KJPP failed.'); } - - } - catch (Exception $e) + } + else { - // dd($e); - DB::rollBack(); $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array('Proses Draft Penawaran KJPP failed.'); + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); } return response()->json($data); @@ -511,26 +554,38 @@ class ProsesPenawaranController extends Controller $data = array(); // $data['request']=$request->all(); $dataPenawaranDetail = array(); - try + // cek masa aktif penawaran + $checkActiveDateRange = checkActiveDateRangePenawaran($request->penawaran_id); + // cek status (penawaran.status = tender) + $penawaran = PenawaranTender::find($request->penawaran_id); + if($checkActiveDateRange && ('tender'==$penawaran->status)) { - $dataPenawaranDetail = [ - 'penawaran_id' => $request->penawaran_id, - 'kjpp_rekanan_id' => $request->kjpp_id, - 'created_by' => Auth::id(), - 'created_at' => Carbon::now() - ]; + try + { + $dataPenawaranDetail = [ + 'penawaran_id' => $request->penawaran_id, + 'kjpp_rekanan_id' => $request->kjpp_id, + 'created_by' => Auth::id(), + 'created_at' => Carbon::now() + ]; - PenawaranDetailTender::create($dataPenawaranDetail); - - $data['status'] = 'success'; - $data['message'] ['message_success'] = array('Proses Tambah KJPP successfully'); + PenawaranDetailTender::create($dataPenawaranDetail); + + $data['status'] = 'success'; + $data['message'] ['message_success'] = array('Proses Tambah KJPP successfully'); + } + catch (Exception $e) + { + // dd($e); + $data['status'] = 'error'; + $data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP failed.'); + } } - catch (Exception $e) + else { - // dd($e); $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP failed.'); - } + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); + } return response()->json($data); } @@ -964,6 +1019,7 @@ class ProsesPenawaranController extends Controller public function showPermohonan($id) { + // $id => permohonan.id $permohonan = Permohonan::find($id); return view('lpj::prosespenawaran.showPermohonan', compact('id', 'permohonan')); } diff --git a/app/Http/Controllers/SpkController.php b/app/Http/Controllers/SpkController.php index ee191db..d5ce566 100644 --- a/app/Http/Controllers/SpkController.php +++ b/app/Http/Controllers/SpkController.php @@ -34,8 +34,10 @@ use Illuminate\Support\Facades\Auth; } // Retrieve data from the database - $query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp']) - ->where('permohonan.status','=','spk'); + // $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'); + // Apply search filter if provided if ($request->has('search') && !empty($request->get('search'))) { @@ -78,21 +80,27 @@ use Illuminate\Support\Facades\Auth; $i=0; foreach($data as $obj) { - if($obj->tanggal_penilaian_sebelumnya) + // tanggal_permohonan + if ($obj->tanggal_permohonan) { + $data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y'); + } + + if($obj->penawaran->tanggal_penilaian_sebelumnya) { - $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); + $data[$i]->penawaran->tanggal_penilaian_sebelumnya = Carbon::parse($obj->penawaran->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); } - if($obj->biaya_kjpp_sebelumnya) + if($obj->penawaran->biaya_kjpp_sebelumnya) { - $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); + $data[$i]->penawaran->biaya_kjpp_sebelumnya = formatRupiah($obj->penawaran->biaya_kjpp_sebelumnya); } // date_range - if($obj->start_date && $obj->end_date) + if($obj->penawaran->start_date && $obj->penawaran->end_date) { - $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); + $data[$i]->date_range = Carbon::parse($obj->penawaran->start_date)->format('d M Y').' - '. + Carbon::parse($obj->penawaran->end_date)->format('d M Y'); } @@ -107,7 +115,6 @@ use Illuminate\Support\Facades\Auth; $i++; } - // Calculate the page count $pageCount = ceil($totalRecords / $request->get('size')); @@ -147,6 +154,8 @@ use Illuminate\Support\Facades\Auth; ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'detail_penawaran.no_proposal as detail_penawaran_no_proposal', + 'detail_penawaran.tgl_proposal as detail_penawaran_tgl_proposal', 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'kjpp.name as kjpp_name', 'kjpp.address as kjpp_address', @@ -161,6 +170,9 @@ use Illuminate\Support\Facades\Auth; $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + if($penawaran->detail_penawaran_tgl_proposal) + $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); + return view('lpj::spk.edit', compact('data', 'penawaran')); } @@ -177,6 +189,9 @@ use Illuminate\Support\Facades\Auth; ->where('detail_penawaran.status','=',1) ->where('penawaran.id','=', $id) ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', + 'detail_penawaran.no_proposal as detail_penawaran_no_proposal', + 'detail_penawaran.tgl_proposal as detail_penawaran_tgl_proposal', + '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' @@ -188,6 +203,9 @@ use Illuminate\Support\Facades\Auth; ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); + + if($penawaran->detail_penawaran_tgl_proposal) + $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); $folderPath = 'uploads/spk/'; $extension = '.pdf'; diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index f4edb45..9a2e05e 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -23,6 +23,7 @@ use Modules\Lpj\Exports\PenawaranTenderExport; use Modules\Lpj\Http\Requests\TenderPenawaranRequest; use Modules\Lpj\Jobs\SendPenawaranKJPPTenderJob; use Modules\Lpj\Jobs\SendPenawaranTenderJob; +use Modules\Lpj\Models\PenawaranEmailTenderLog; class TenderController extends Controller { @@ -618,7 +619,9 @@ class TenderController extends Controller $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); // Retrieve data from the database - $query = PenawaranDetailTender::query()->where('penawaran_id', '=', $penawaran->id)->with(['kjpp', 'penawaran', 'emailTenderLog']); + $query = PenawaranDetailTender::query()->where('penawaran_id', '=', $penawaran->id)->with(['kjpp', 'penawaran', 'penawaran.emailTenderLog']); + + // dd($query); // Apply sorting if provided if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { @@ -641,23 +644,8 @@ class TenderController extends Controller } } - // 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(['kjpp', 'penawaran', 'emailTenderLog'])->get(); + $data = $query->get(); // add column "No" $i = 0; @@ -670,20 +658,9 @@ class TenderController extends Controller $j++; } - // 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, ]); } @@ -800,8 +777,6 @@ class TenderController extends Controller $dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first(); - // dd($dp1->kjpp); - foreach ($permohonan->debiture->documents as $document) { $village_permohonan = $document->village_code; $district_permohonan = $document->district_code; @@ -814,21 +789,89 @@ class TenderController extends Controller $cities = City::where('code', $city_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get(); - try { - $balikan = SendPenawaranKJPPTenderJob::dispatch( - $kjpps, - $dp1, - $penawaran, - $permohonan, - $villages, - $districts, - $cities, - $provinces - ); - } catch (\Exception $e) { - return redirect()->route('tender.penawaran.ulang.index')->with('error', 'Email Penawaran Gagal Terkirim!'); - } + $subject = 'Send Penawaran K J P P Email'; - return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!'); + $body_pdf = view('lpj::penawaran.kirimEmailKJPP', [ + 'dp1' => $dp1, + 'penawaran' => $penawaran, + 'permohonan' => $permohonan, + 'kjpps' => $kjpps, + 'villages' => $villages, + 'districts' => $districts, + 'cities' => $cities, + 'provinces' => $provinces + ])->render(); + + SendPenawaranKJPPTenderJob::dispatch( + $kjpps, + $dp1, + $penawaran, + $permohonan, + $villages, + $districts, + $cities, + $provinces + ); + + try { + // Proses log email + foreach ($kjpps as $email) { + // Cek apakah sudah ada log dengan status 'failed' untuk email ini + $log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'failed') + ->first(); + + $log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id) + ->where('to_email', $email) + ->where('status', 'success') + ->first(); + + if ($log) { + // Jika log ditemukan dan statusnya 'failed', update status menjadi 'success' + $log->update([ + 'status' => 'success', + 'error_message' => null, // Reset error_message saat status diubah menjadi success + 'updated_at' => now(), + ]); + } else if ($log1) { + // Jika log ditemukan dan statusnya 'success' biarkan saja + $log1->update([ // Reset error_message saat status diubah menjadi success + 'updated_at' => now(), + ]); + } else { + // Jika tidak ada log gagal, buat log baru dengan status 'success' + PenawaranEmailTenderLog::create([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'success', + 'error_message' => null, // Tidak ada error message + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } + + return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!'); + } catch (\Exception $e) { + // Log email gagal + foreach ($kjpps as $email) { + PenawaranEmailTenderLog::create([ + 'penawaran_id' => $penawaran->id, + 'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name, + 'to_email' => $email, + 'subject' => $subject, + 'body_pdf' => $body_pdf, + 'status' => 'failed', + 'error_message' => $e->getMessage(), + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with('error', 'Email Penawaran Gagal Terkirim!'); + } } } diff --git a/app/Http/Requests/PersetujuanPenawaranRequest.php b/app/Http/Requests/PersetujuanPenawaranRequest.php new file mode 100644 index 0000000..53315db --- /dev/null +++ b/app/Http/Requests/PersetujuanPenawaranRequest.php @@ -0,0 +1,70 @@ + 'nullable|exists:penawaran,id', + 'nomor_proposal_penawaran' => 'nullable|string|max:255', + 'tanggal_proposal_penawaran' => 'nullable|date', + 'biaya_final' => 'nullable|numeric|min:0', + 'sla_resume' => 'nullable|date', + 'sla_final' => 'nullable|date|after_or_equal:sla_resume', + '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', + 'status' => 'nullable|boolean', + 'authorized_status' => 'boolean', + 'authorized_at' => 'nullable|date', + 'authorized_by' => 'nullable|exists:users,id', + 'catatan' => 'nullable|string', + ]; + } + + public function messages() + { + return [ + 'penawaran_id.required' => 'Penawaran ID wajib diisi.', + 'penawaran_id.exists' => 'Penawaran ID tidak valid.', + 'nomor_proposal_penawaran.required' => 'Nomor proposal penawaran wajib diisi.', + 'tanggal_proposal_penawaran.required' => 'Tanggal proposal penawaran wajib diisi.', + 'tanggal_proposal_penawaran.date' => 'Tanggal proposal penawaran harus berupa tanggal yang valid.', + 'biaya_final.required' => 'Biaya final wajib diisi.', + 'biaya_final.numeric' => 'Biaya final harus berupa angka.', + 'biaya_final.min' => 'Biaya final tidak boleh kurang dari 0.', + 'sla_resume.required' => 'SLA Resume wajib diisi.', + 'sla_resume.date' => 'SLA Resume harus berupa tanggal yang valid.', + 'sla_final.required' => 'SLA Final wajib diisi.', + 'sla_final.date' => 'SLA Final harus berupa tanggal yang valid.', + 'sla_final.after_or_equal' => 'SLA Final harus sama dengan atau setelah SLA Resume.', + 'file_persetujuan_penawaran.file' => 'File Persetujuan Penawaran harus berupa file.', + 'file_persetujuan_penawaran.mimes' => 'File Persetujuan Penawaran harus berupa file PDF, DOC, atau DOCX.', + 'file_persetujuan_penawaran.max' => 'Ukuran File Persetujuan Penawaran tidak boleh lebih dari 10MB.', + 'surat_representasi.file' => 'Surat Representasi harus berupa file.', + 'surat_representasi.mimes' => 'Surat Representasi harus berupa file PDF, DOC, atau DOCX.', + 'surat_representasi.max' => 'Ukuran Surat Representasi tidak boleh lebih dari 10MB.', + 'bukti_bayar.file' => 'Bukti Bayar harus berupa file.', + 'bukti_bayar.mimes' => 'Bukti Bayar harus berupa file PDF, JPG, JPEG, atau PNG.', + 'bukti_bayar.max' => 'Ukuran Bukti Bayar tidak boleh lebih dari 10MB.', + 'region_id.required' => 'Region ID wajib diisi.', + 'region_id.exists' => 'Region ID tidak valid.', + 'status.required' => 'Status wajib diisi.', + 'status.boolean' => 'Status harus berupa nilai boolean.', + 'authorized_status.boolean' => 'Status otorisasi harus berupa nilai boolean.', + 'authorized_at.date' => 'Tanggal otorisasi harus berupa tanggal yang valid.', + 'authorized_by.exists' => 'ID pengguna yang mengotorisasi tidak valid.', + 'status_bayar.required' => 'Status bayar wajib diisi.', + 'status_bayar.in' => 'Status bayar harus berupa "sudah_bayar" atau "belum_bayar".', + ]; + } + } diff --git a/app/Models/PenawaranDetailTender.php b/app/Models/PenawaranDetailTender.php index cbe3286..619f9e2 100644 --- a/app/Models/PenawaranDetailTender.php +++ b/app/Models/PenawaranDetailTender.php @@ -27,9 +27,4 @@ class PenawaranDetailTender extends Model { return $this->belongsTo(KJPP::class, 'kjpp_rekanan_id', 'id'); } - - public function emailTenderLog(): BelongsTo - { - return $this->belongsTo(PenawaranEmailTenderLog::class, 'penawaran_id', 'id', PenawaranTender::class); - } } diff --git a/app/Models/PenawaranEmailTenderLog.php b/app/Models/PenawaranEmailTenderLog.php index 9048405..224c351 100644 --- a/app/Models/PenawaranEmailTenderLog.php +++ b/app/Models/PenawaranEmailTenderLog.php @@ -15,4 +15,9 @@ class PenawaranEmailTenderLog extends Model * The attributes that are mass assignable. */ protected $guarded = ['id']; + + public function penawaran() + { + return $this->belongsTo(PenawaranTender::class, 'penawaran_id', 'id'); + } } diff --git a/app/Models/PenawaranTender.php b/app/Models/PenawaranTender.php index f38d42e..1c2832c 100644 --- a/app/Models/PenawaranTender.php +++ b/app/Models/PenawaranTender.php @@ -24,8 +24,17 @@ class PenawaranTender extends Model { return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id', 'id')->where('status', '=', 1); } + + public function detail(){ + return $this->belongsTo(PenawaranDetailTender::class, 'id', 'penawaran_id')->where('status', 1); + } // andy add + public function emailTenderLog(): HasMany + { + return $this->hasMany(PenawaranEmailTenderLog::class, 'penawaran_id', 'id'); + } + public function penawaranKjpp() { return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id'); @@ -46,4 +55,8 @@ class PenawaranTender extends Model { return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id'); } + + public function persetujuan(){ + return $this->belongsTo(PersetujuanPenawaran::class, 'id', 'penawaran_id'); + } } diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index 0255e63..81b94b7 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -136,7 +136,7 @@ public function penawaranTender() { - return $this->hasMany(PenawaranTender::class, 'nomor_registrasi'); + return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi'); } public function region() diff --git a/app/Models/PersetujuanPenawaran.php b/app/Models/PersetujuanPenawaran.php new file mode 100644 index 0000000..15176de --- /dev/null +++ b/app/Models/PersetujuanPenawaran.php @@ -0,0 +1,57 @@ + 'date', + 'sla_resume' => 'date', + 'sla_final' => 'date', + 'biaya_final' => 'decimal:2', + 'status' => 'boolean', + 'authorized_status' => 'boolean', + 'authorized_at' => 'datetime', + ]; + + // Relationship with Penawaran + public function penawaran() + { + return $this->belongsTo(PenawaranTender::class, 'penawaran_id'); + } + + // Relationship with Region + public function region() + { + return $this->belongsTo(Region::class); + } + + // Relationship with User (for authorized_by) + public function authorizedBy() + { + return $this->belongsTo(User::class, 'authorized_by'); + } + } diff --git a/database/migrations/2024_11_20_073420_update_penawaran_email_tender_log.php b/database/migrations/2024_11_20_073420_update_penawaran_email_tender_log.php new file mode 100644 index 0000000..3300063 --- /dev/null +++ b/database/migrations/2024_11_20_073420_update_penawaran_email_tender_log.php @@ -0,0 +1,28 @@ +text('error_message')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penawaran_email_tender_log', function (Blueprint $table) { + $table->text('error_message')->change(); + }); + } +}; diff --git a/database/migrations/2024_11_20_073530_update_persetujuan_penawaran_table.php b/database/migrations/2024_11_20_073530_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..5428933 --- /dev/null +++ b/database/migrations/2024_11_20_073530_update_persetujuan_penawaran_table.php @@ -0,0 +1,47 @@ +string('nomor_proposal_penawaran')->nullable()->change(); + $table->date('tanggal_proposal_penawaran')->nullable()->change(); + $table->string('biaya_final')->nullable()->change(); + $table->renameColumn('sls_resume', 'sla_resume'); + $table->datetime('sla_resume')->nullable()->change(); + $table->datetime('sla_final')->nullable()->change(); + $table->string('catatan')->nullable()->change(); + $table->string('attachment')->nullable()->change(); + $table->foreignId('region_id')->nullable()->change(); + $table->boolean('status')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + : void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->string('nomor_proposal_penawaran')->nullable(false)->change(); + $table->date('tanggal_proposal_penawaran')->nullable(false)->change(); + $table->string('biaya_final')->nullable(false)->change(); + $table->renameColumn('sla_resume', 'sls_resume'); + $table->datetime('sls_resume')->nullable(false)->change(); + $table->datetime('sla_final')->nullable(false)->change(); + $table->string('catatan')->nullable(false)->change(); + $table->string('attachment')->nullable(false)->change(); + $table->foreignId('region_id')->nullable(false)->change(); + $table->boolean('status')->nullable(false)->change(); + }); + } + }; diff --git a/database/migrations/2024_11_21_054047_update_persetujuan_penawaran_table.php b/database/migrations/2024_11_21_054047_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..04681db --- /dev/null +++ b/database/migrations/2024_11_21_054047_update_persetujuan_penawaran_table.php @@ -0,0 +1,30 @@ +unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + $table->dropColumn('created_by'); + $table->dropColumn('updated_by'); + }); + } +}; diff --git a/database/migrations/2024_11_21_113855_update_persetujuan_penawaran_table.php b/database/migrations/2024_11_21_113855_update_persetujuan_penawaran_table.php new file mode 100644 index 0000000..4502039 --- /dev/null +++ b/database/migrations/2024_11_21_113855_update_persetujuan_penawaran_table.php @@ -0,0 +1,44 @@ +dropForeign(['region_id']); + $table->dropColumn('attachment'); + + // Add new columns for file attachments + $table->string('file_persetujuan_penawaran')->nullable(); + $table->string('surat_representasi')->nullable(); + $table->string('bukti_bayar')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('persetujuan_penawaran', function (Blueprint $table) { + // Reverse the changes + $table->string('attachment')->nullable(); + + $table->dropColumn('file_persetujuan_penawaran'); + $table->dropColumn('surat_representasi'); + $table->dropColumn('bukti_bayar'); + }); + } + } diff --git a/module.json b/module.json index 194247f..e6530f2 100644 --- a/module.json +++ b/module.json @@ -1,500 +1,680 @@ { - "name": "Lpj", - "alias": "lpj", - "database": "", - "description": "", - "keywords": [], - "priority": 0, - "providers": ["Modules\\Lpj\\Providers\\LpjServiceProvider"], - "files": ["app/Helpers/Lpj.php"], - "menu": { - "main": [ - { - "title": "Permohonan", - "path": "permohonan", - "icon": "ki-filled ki-questionnaire-tablet text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Registrasi", - "path": "registrasi", - "icon": "ki-filled ki-file-added text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Tender", - "path": "tender", - "icon": "ki-filled ki-category text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"], - "sub": [ - { - "title": "Data Proses Penawaran", - "path": "tender.prosespenawaran", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Data Penawaran Ulang", - "path": "tender.penawaran.ulang", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - } - ] - }, - { - "title": "Otorisasi Tender", - "path": "otorisasitender", - "icon": "ki-filled ki-category text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin","EO Appraisal","DD Appraisal"], - "sub": [ - { - "title": "Otorisasi Penawaran", - "path": "otorisasitender.penawaran", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin","EO Appraisal","DD Appraisal"] - } - ] - }, - { - "title": "SPK", - "path": "spk", - "icon": "ki-filled ki-file-added text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Registrasi Final", - "path": "registrasifinal", - "icon": "ki-filled ki-file-added text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "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", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Authorization", - "path": "authorization", - "icon": "ki-filled ki-security-user text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-eo"] - }, - { - "title": "Assignment", - "path": "penilaian", - "icon": "ki-filled ki-badge text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "senior-officer"] - }, - { - "title": "Team Activity", - "path": "activity.progres", - "icon": "ki-filled ki-questionnaire-tablet text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","senior-officer"] - }, - { - "title": "Otorisator", - "path": "otorisator", - "icon": "ki-filled ki-security-user text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","senior-officer"], - "sub": [ - { - "title": "Pelaporan", - "path": "otorisator.pelaporan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","senior-officer"] - }, - { - "title": "Pembayaran", - "path": "otorisator.pembayaran", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","senior-officer"] - }, - { - "title": "Pembatalan", - "path": "otorisator.pembatalan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","senior-officer"] - }, - { - "title": "SLA", - "path": "otorisator.sla", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","senior-officer"] - } - ] - }, - { - "title": "Surveyor", - "path": "surveyor", - "icon": "ki-filled ki-questionnaire-tablet text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - - { - "title": "Activity", - "path": "activity", - "icon": "ki-filled ki-calendar-edit text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "pemohon-eo", - "admin", - "surveyor" - ] - }, - { - "title": "Penilai", - "path": "penilai", - "icon": "ki-filled ki-brush text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Laporan", - "path": "laporan", - "icon": "ki-filled ki-filter-tablet text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "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", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - } + "name": "Lpj", + "alias": "lpj", + "database": "", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Lpj\\Providers\\LpjServiceProvider" ], - "master": [ - { - "title": "Basic Data", - "path": "basicdata", - "icon": "ki-filled ki-category text-lg", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "pemohon-ao", - "pemohon-eo", - "admin", - "surveyor" + "files": [ + "app/Helpers/Lpj.php" + ], + "menu": { + "main": [ + { + "title": "Permohonan", + "path": "permohonan", + "icon": "ki-filled ki-questionnaire-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Persetujuan Penawaran", + "path": "persetujuan-penawaran", + "icon": "ki-filled ki-questionnaire-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao" + ] + }, + { + "title": "Registrasi", + "path": "registrasi", + "icon": "ki-filled ki-file-added text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Tender", + "path": "tender", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ], + "sub": [ + { + "title": "Data Proses Penawaran", + "path": "tender.prosespenawaran", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Data Penawaran Ulang", + "path": "tender.penawaran.ulang", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + } + ] + }, + { + "title": "Otorisasi Tender", + "path": "otorisasitender", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin", + "EO Appraisal", + "DD Appraisal" + ], + "sub": [ + { + "title": "Otorisasi Penawaran", + "path": "otorisasitender.penawaran", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin", + "EO Appraisal", + "DD Appraisal" + ] + } + ] + }, + { + "title": "SPK", + "path": "spk", + "icon": "ki-filled ki-file-added text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Registrasi Final", + "path": "registrasifinal", + "icon": "ki-filled ki-file-added text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "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", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Authorization", + "path": "authorization", + "icon": "ki-filled ki-security-user text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-eo" + ] + }, + { + "title": "Assignment", + "path": "penilaian", + "icon": "ki-filled ki-badge text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Team Activity", + "path": "activity.progres", + "icon": "ki-filled ki-questionnaire-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Otorisator", + "path": "otorisator", + "icon": "ki-filled ki-security-user text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ], + "sub": [ + { + "title": "Pelaporan", + "path": "otorisator.pelaporan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Pembayaran", + "path": "otorisator.pembayaran", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Pembatalan", + "path": "otorisator.pembatalan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "SLA", + "path": "otorisator.sla", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + } + ] + }, + { + "title": "Surveyor", + "path": "surveyor", + "icon": "ki-filled ki-questionnaire-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Activity", + "path": "activity", + "icon": "ki-filled ki-calendar-edit text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "surveyor" + ] + }, + { + "title": "Penilai", + "path": "penilai", + "icon": "ki-filled ki-brush text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Laporan", + "path": "laporan", + "icon": "ki-filled ki-filter-tablet text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "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", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + } ], - "sub": [ - { - "title": "Jenis Fasilitas Kredit", - "path": "basicdata.jenis-fasilitas-kredit", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Jenis Legalitas Jaminan", - "path": "basicdata.jenis-legalitas-jaminan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Jenis Aset", - "path": "basicdata.jenis-jaminan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Jenis Dokumen", - "path": "basicdata.jenis-dokumen", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Tujuan Penilaian", - "path": "basicdata.tujuan-penilaian", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Nilai Plafond", - "path": "basicdata.nilai-plafond", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Hubungan Pemilik Jaminan", - "path": "basicdata.hubungan-pemilik-jaminan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Hubungan Penghuni Jaminan", - "path": "basicdata.hubungan-penghuni-jaminan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "pemohon-ao", "pemohon-eo"] - }, - { - "title": "Arah Mata Angin", - "path": "basicdata.arah-mata-angin", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator"] - }, - { - "title": "Status Permohonan", - "path": "basicdata.status-permohonan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator"] - }, - { - "title": "Region", - "path": "basicdata.region", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin", "senior-officer"] - }, - { - "title": "Staff Appraisal", - "path": "basicdata.teams", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "senior-officer"] - }, - { - "title": "Jenis Penilaian", - "path": "basicdata.jenis-penilaian", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin", "senior-officer"] - }, - { - "title": "KJPP", - "path": "basicdata.kjpp", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Jenis Laporan", - "path": "basicdata.jenis_laporan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Tujuan Penilaian KJPP", - "path": "basicdata.tujuan_penilaian_kjpp", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Ijin Usaha", - "path": "basicdata.ijin_usaha", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "SLA", - "path": "basicdata.sla", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator", "admin"] - }, - { - "title": "Bentuk", - "path": "basicdata.bentuk-tanah", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Kontur Tanah", - "path": "basicdata.kontur-tanah", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Posisi Kavling", - "path": "basicdata.posisi-kavling", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Ketinggian Tanah", - "path": "basicdata.ketinggian-tanah", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Kondisi Fisik Tanah", - "path": "basicdata.kondisi-fisik-tanah", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Jenis Bangunan", - "path": "basicdata.jenis-bangunan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Kondisi Bangunan", - "path": "basicdata.kondisi-bangunan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Sifat Bangunan", - "path": "basicdata.sifat-bangunan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - - { - "title": "Sarana Pelengkap", - "path": "basicdata.sarana-pelengkap", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, + "master": [ + { + "title": "Basic Data", + "path": "basicdata", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "surveyor" + ], + "sub": [ + { + "title": "Jenis Fasilitas Kredit", + "path": "basicdata.jenis-fasilitas-kredit", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Jenis Legalitas Jaminan", + "path": "basicdata.jenis-legalitas-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Jenis Aset", + "path": "basicdata.jenis-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Jenis Dokumen", + "path": "basicdata.jenis-dokumen", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Tujuan Penilaian", + "path": "basicdata.tujuan-penilaian", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Nilai Plafond", + "path": "basicdata.nilai-plafond", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Hubungan Pemilik Jaminan", + "path": "basicdata.hubungan-pemilik-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Hubungan Penghuni Jaminan", + "path": "basicdata.hubungan-penghuni-jaminan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo" + ] + }, + { + "title": "Arah Mata Angin", + "path": "basicdata.arah-mata-angin", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator" + ] + }, + { + "title": "Status Permohonan", + "path": "basicdata.status-permohonan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator" + ] + }, + { + "title": "Region", + "path": "basicdata.region", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin", + "senior-officer" + ] + }, + { + "title": "Staff Appraisal", + "path": "basicdata.teams", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Jenis Penilaian", + "path": "basicdata.jenis-penilaian", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin", + "senior-officer" + ] + }, + { + "title": "KJPP", + "path": "basicdata.kjpp", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Jenis Laporan", + "path": "basicdata.jenis_laporan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Tujuan Penilaian KJPP", + "path": "basicdata.tujuan_penilaian_kjpp", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Ijin Usaha", + "path": "basicdata.ijin_usaha", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "SLA", + "path": "basicdata.sla", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "admin" + ] + }, + { + "title": "Bentuk", + "path": "basicdata.bentuk-tanah", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Kontur Tanah", + "path": "basicdata.kontur-tanah", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Posisi Kavling", + "path": "basicdata.posisi-kavling", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Ketinggian Tanah", + "path": "basicdata.ketinggian-tanah", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Kondisi Fisik Tanah", + "path": "basicdata.kondisi-fisik-tanah", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Jenis Bangunan", + "path": "basicdata.jenis-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Kondisi Bangunan", + "path": "basicdata.kondisi-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Sifat Bangunan", + "path": "basicdata.sifat-bangunan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Sarana Pelengkap", + "path": "basicdata.sarana-pelengkap", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, { "title": "Jenis Unit", @@ -538,103 +718,138 @@ "permission": "", "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"] - }, - { - "title": "Perkerasan jalan", - "path": "basicdata.perkerasan-jalan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Jenis Pesawat", - "path": "basicdata.jenis-pesawat", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Jenis kapal", - "path": "basicdata.jenis-kapal", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Jenis Kendaraan", - "path": "basicdata.jenis-kendaraan", - "classes": "", - "attributes": [], - "permission": "", - "roles": ["administrator","surveyor"] - }, - { - "title": "Model Alat Berat", - "path": "basicdata.model-alat-berat", - "classes": "", - "attributes": [], - "permission": "", - "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" + ] + }, + { + "title": "Perkerasan jalan", + "path": "basicdata.perkerasan-jalan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Jenis Pesawat", + "path": "basicdata.jenis-pesawat", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Jenis kapal", + "path": "basicdata.jenis-kapal", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Jenis Kendaraan", + "path": "basicdata.jenis-kendaraan", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, + { + "title": "Model Alat Berat", + "path": "basicdata.model-alat-berat", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "surveyor" + ] + }, { "title": "Terletak Di Area", "path": "basicdata.terletak-area", @@ -643,9 +858,9 @@ "permission": "", "roles": ["administrator","surveyor"] } - ] - } - ], - "system": [] - } + ] + } + ], + "system": [] + } } diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index e69de29..c095698 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -0,0 +1,35 @@ +function hitungHariKerja(tanggalMulai, tanggalSelesai) { + tanggalMulai = new Date(tanggalMulai); + tanggalMulai.setHours(0, 0, 0, 0); + tanggalSelesai = new Date(tanggalSelesai); + tanggalSelesai.setHours(23, 59, 59, 999); + + let hariKerja = 0; + let tanggalSekarang = new Date(tanggalMulai); + + // You'll need to implement a way to get holiday dates from your server + // For this example, we'll assume you have a global variable holidayDates + // that contains an array of holiday date strings in 'YYYY-MM-DD' format + const tanggalLibur = window.holidayDates || []; + + while (tanggalSekarang <= tanggalSelesai) { + const dayOfWeek = tanggalSekarang.getDay(); + const dateString = tanggalSekarang.toISOString().split("T")[0]; + + // Check if it's not Saturday (6) or Sunday (0) and not a holiday + if ( + dayOfWeek !== 0 && + dayOfWeek !== 6 && + !tanggalLibur.includes(dateString) + ) { + hariKerja++; + } + + tanggalSekarang.setDate(tanggalSekarang.getDate() + 1); + } + + return hariKerja; +} + +// Make the function available globally +window.hitungHariKerja = hitungHariKerja; diff --git a/resources/views/debitur/components/dokumen.blade.php b/resources/views/debitur/components/dokumen.blade.php index 8c95b61..0cae77e 100644 --- a/resources/views/debitur/components/dokumen.blade.php +++ b/resources/views/debitur/components/dokumen.blade.php @@ -193,15 +193,18 @@ @if($detail->details) - @php $custom_field = json_decode($detail->details,true) @endphp -
| + + | ++ Nomor Registrasi + + | ++ Nama Debitur + + | ++ Nomor Proposal + + | ++ Tanggal Proposal + + | ++ Dokumen Persetujuan + + | ++ Biaya Final + + | ++ SLA Resume + + | ++ SLA Final + + | ++ Catatan + + | +Action | +
|---|
|
- |
+ |
- PT BANK ARTHA GRAHA INTERNASIONAL-- Sub Direktorat Appraisal - -- Jl. Kwitang Raya No. 24-26, Jakarta – 10420, Indonesia - -- Telp. (021) 3903040 - + + |
+
+ PT BANK ARTHA GRAHA INTERNASIONAL++ Sub Direktorat Appraisal + ++ Jl. Kwitang Raya No. 24-26, Jakarta – 10420, Indonesia + ++ Telp. (021) 3903040 + |
- Berdasarkan surat penawaran Saudara [No proposal penawaran sesuai data pemeriksaan persetujuan penawaran] tanggal [Tgl proposal penawaran sesuai data pemeriksaan persetujuan penawaran] atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini. + Berdasarkan surat penawaran Saudara [{{$penawaran->persetujuan->nomor_proposal_penawaran}}] tanggal [{{ formatTanggalIndonesia($penawaran->persetujuan->tanggal_proposal_penawaran) }}] atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini.
|
- PT Bank Artha Graha Internasional. Sub Direktorat Appraisal |
- - {{ $penawaran->kjpp_name }} - | -
|
- - |
- |
|
- - |
- |
|
- - |
- |
|
- - |
- |
|
- - |
-
- |
-
|
- {{ $data->user->name }} - {{ $data->user->getRoleNames()[0] }} - |
- (……………………………………..) | -
| PT Bank Artha Graha Internasional. Sub Direktorat Appraisal |
+ {{ $penawaran->kjpp_name }} | +
|
+
+ Meterai 10.000
+
+ |
+ |
|
+ {{ $data->user->name }} + {{ $data->user->getRoleNames()[0] }} + |
+ (……………………………………..) | +
|
- |
+ |
+ + | +
+
PT BANK ARTHA GRAHA INTERNASIONALSub Direktorat Appraisal @@ -43,6 +61,7 @@ Telp. (021) 3903040 + |
- Berdasarkan surat penawaran Saudara [No proposal penawaran sesuai data pemeriksaan persetujuan penawaran] tanggal [Tgl proposal penawaran sesuai data pemeriksaan persetujuan penawaran] atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini. + Berdasarkan surat penawaran Saudara [{{$penawaran->persetujuan->nomor_proposal_penawaran}}] tanggal [{{ formatTanggalIndonesia($penawaran->persetujuan->tanggal_proposal_penawaran) }}] atas nama {{ $data->debiture->name }}, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini.
|
- PT Bank Artha Graha Internasional. Sub Direktorat Appraisal |
- - {{ $penawaran->kjpp_name }} - | -
|
- - |
- |
|
- - |
- |
|
- - |
- |
|
- - |
- |
|
- - |
-
- |
-
|
- {{ $data->user->name }} - {{ $data->user->getRoleNames()[0] }} - |
- (……………………………………..) | -
| PT Bank Artha Graha Internasional. Sub Direktorat Appraisal |
+ {{ $penawaran->kjpp_name }} | +
|
+
+ Meterai 10.000
+
+ |
+ |
|
+ {{ $data->user->name }} + {{ $data->user->getRoleNames()[0] }} + |
+ (……………………………………..) | +