From 3e1ecc8031dd78db02019fdc022cfbdd29015a8c Mon Sep 17 00:00:00 2001 From: Andy Chaerudin Date: Wed, 23 Oct 2024 17:46:39 +0700 Subject: [PATCH] add feature Otorisasi Penawaran --- .../OtorisasiPenawaranController.php | 290 ++++++++++++++++++ .../ProsesPenawaranUlangController.php | 24 +- module.json | 19 ++ .../views/otorisasipenawaran/edit.blade.php | 121 ++++++++ .../views/otorisasipenawaran/index.blade.php | 151 +++++++++ .../otorisasipenawaran/js/editextjs.blade.php | 94 ++++++ .../otorisasipenawaran/js/editjs.blade.php | 188 ++++++++++++ .../views/otorisasipenawaran/show.blade.php | 43 +++ routes/breadcrumbs.php | 17 + routes/registrasi.php | 19 +- 10 files changed, 953 insertions(+), 13 deletions(-) create mode 100644 app/Http/Controllers/OtorisasiPenawaranController.php create mode 100644 resources/views/otorisasipenawaran/edit.blade.php create mode 100644 resources/views/otorisasipenawaran/index.blade.php create mode 100644 resources/views/otorisasipenawaran/js/editextjs.blade.php create mode 100644 resources/views/otorisasipenawaran/js/editjs.blade.php create mode 100644 resources/views/otorisasipenawaran/show.blade.php diff --git a/app/Http/Controllers/OtorisasiPenawaranController.php b/app/Http/Controllers/OtorisasiPenawaranController.php new file mode 100644 index 0000000..91762f2 --- /dev/null +++ b/app/Http/Controllers/OtorisasiPenawaranController.php @@ -0,0 +1,290 @@ +user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query =PenawaranTender::query() + ->select('penawaran.*',DB::raw("CONCAT(DATE_FORMAT(penawaran.start_date, '%d %M %Y'), ' - ', DATE_FORMAT(penawaran.end_date, '%d %M %Y')) AS date_range"), 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') + ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') + ->where('penawaran.status','=','persetujuan-penawaran') + ->withCount('penawarandetails'); + + // 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(); + + // 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) + { + return view('lpj::otorisasipenawaran.edit', compact('id')); + } + + public function setData(Request $request): JsonResponse + { + $data = array(); + $penawaran = array(); + $penawrandetails = array(); + $penawarandetailLogs = array(); + + if (request()->ajax()) { + $id = $request->id; + $penawaran = PenawaranTender::where('status','=','persetujuan-penawaran')->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++; + } + + } + + $i=0; + foreach($penawrandetails as $obj) + { + if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan)) + { + $penawrandetails_path = Storage::url($obj->dokumen_persetujuan); + $penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path; + + } + $i++; + } + + $penawaranString = ""; + if($penawaran->status) + { + $penawaranString = convertSlug($penawaran->status); + $penawaran->status = $penawaranString; + } + + $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"); + } + + return response()->json($data); + } + + public function otorisasiPenawaranKJPP(Request $request, $id): JsonResponse + { + $data = array(); + $dataDetailPenawaranLog=[]; + if (request()->ajax()) { + + // 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 { + + // update status KJPP yg tidak terpilih menjadi 2 -> kalah + // update status Penawaran menjadi SPK + // update status Permohonan menjadi SPK + // insert detail_permohonan_log + + PenawaranDetailTender::where('status', 1) + ->where('penawaran_id', $request->penawaran_id) + ->whereNotIn('id', [$id]) + ->update(['status' => 2, + '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'=>'spk', + '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, + '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'] ['active_date_range'] = array("Penawaran sudah di tutup"); + } + + } else { + $data['status'] = 'error'; + $data['message']['message_ajax'] = array("no ajax request"); + } + return response()->json($data); + } + + public function show($id) + { + $prosespenawaran = PenawaranTender::find($id); + return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran')); + } +} diff --git a/app/Http/Controllers/ProsesPenawaranUlangController.php b/app/Http/Controllers/ProsesPenawaranUlangController.php index 4cf278d..f34ee70 100644 --- a/app/Http/Controllers/ProsesPenawaranUlangController.php +++ b/app/Http/Controllers/ProsesPenawaranUlangController.php @@ -148,16 +148,16 @@ class ProsesPenawaranUlangController extends Controller $data['penawaran'] = $penawaran; $data['penawrandetails'] = $penawrandetails; $data['status'] = 'success'; - $data['message'] ['message_success'] = array("data successfully found"); + $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"); + $data['message']['message_data'] = array("data not found"); } } else { $data['status'] = 'error'; - $data['message'] ['message_ajax'] = array("no ajax request"); + $data['message']['message_ajax'] = array("no ajax request"); } return response()->json($data); @@ -240,13 +240,13 @@ class ProsesPenawaranUlangController extends Controller { $pleaseCommit=false; $data['status'] = 'error'; - $data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf"); + $data['message']['check_file_jenis'] = array("Silahkan upload file pdf"); } } else { $data['status'] = 'error'; - $data['message'] ['check_file'] = array("Silahkan upload file"); + $data['message']['check_file'] = array("Silahkan upload file"); } @@ -259,32 +259,32 @@ class ProsesPenawaranUlangController extends Controller $data['id'] = $id; $data['detailpenawaran'] = $detailpenawaran; $data['status'] = 'success'; - $data['message'] ['message_success'] = array('Proses Penawarn KJPP Ulang successfully'); + $data['message']['message_success'] = array('Proses Penawarn KJPP Ulang successfully'); } else { DB::rollBack(); $data['status'] = 'error'; - $data['message'] ['message_error'] = array("Proses Penawarn KJPP Ulang failed.."); + $data['message']['message_error'] = array("Proses Penawarn KJPP Ulang failed.."); } } catch (Exception $e) { DB::rollBack(); $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP Ulang failed.'); + $data['message']['message_error_try_catch'] = array('Proses Penawarn KJPP Ulang failed.'); } } else { $data['status'] = 'error'; - $data['message'] ['active_date_range'] = array("Penawaran sudah di tutup"); + $data['message']['active_date_range'] = array("Penawaran sudah di tutup"); } } } else { $data['status'] = 'error'; - $data['message'] ['message_ajax'] = array("no ajax request"); + $data['message']['message_ajax'] = array("no ajax request"); } return response()->json($data); @@ -337,12 +337,12 @@ class ProsesPenawaranUlangController extends Controller DB::commit(); $data['status'] = 'success'; - $data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName); + $data['message']['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName); } catch (Exception $e) { DB::rollBack(); // dd($e); $data['status'] = 'error'; - $data['message'] ['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); + $data['message']['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); } return response()->json($data); } diff --git a/module.json b/module.json index 0390201..625e542 100644 --- a/module.json +++ b/module.json @@ -72,6 +72,25 @@ } ] }, + { + "title": "Otorisasi Tender", + "path": "otorisasitender", + "icon": "ki-filled ki-category text-lg", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator", "admin"], + "sub": [ + { + "title": "Otorisasi Penawaran", + "path": "otorisasitender.penawaran", + "classes": "", + "attributes": [], + "permission": "", + "roles": ["administrator", "admin"] + } + ] + }, { "title": "Pembatalan", "path": "", diff --git a/resources/views/otorisasipenawaran/edit.blade.php b/resources/views/otorisasipenawaran/edit.blade.php new file mode 100644 index 0000000..2940e0c --- /dev/null +++ b/resources/views/otorisasipenawaran/edit.blade.php @@ -0,0 +1,121 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection +@php + // $route = Route::currentRouteName(); + // dd($route); + $route = explode('.', Route::currentRouteName()); +@endphp + +@section('content') +
+ +
+
+

+ Tambah Data Otorisasi Penawaran +

+ +
+
+
+

+ Nomor Register Permohonan: +

+ + + +
+ +
+

+ Kode Penawaran: +

+ + + +
+ +
+

+ Status Penawaran: +

+ + + +
+ +
+
+ +
+
+
+

Data KJPP

+
+
+ + + + + + + + + + + + +
NoKJPPBiaya PenawaranDokumen PenawaranAction
+
+
+
+ +
+   +
+
+
+ +
+
+
+

Data KJPP Sebelumnya

+
+
+ + + + + + + + + + + + +
NoKJPPBiaya PenawaranDokumen Penawarancreated_at
+
+
+
+ +
+   +
+
+
+
+@endsection +@include('lpj::otorisasipenawaran.js.editjs') \ No newline at end of file diff --git a/resources/views/otorisasipenawaran/index.blade.php b/resources/views/otorisasipenawaran/index.blade.php new file mode 100644 index 0000000..5156678 --- /dev/null +++ b/resources/views/otorisasipenawaran/index.blade.php @@ -0,0 +1,151 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('otorisasitender.penawaran') }} +@endsection + +@section('content') +
+
+
+

+ Daftar Otorisasi Penawaran +

+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Kode Penawaran + + + Tanggal Penawaran + + + Tujuan Penilaian + + + Total KJPP + + + Status + + Action
+
+ +
+
+
+@endsection + +@push('scripts') + + +@endpush diff --git a/resources/views/otorisasipenawaran/js/editextjs.blade.php b/resources/views/otorisasipenawaran/js/editextjs.blade.php new file mode 100644 index 0000000..cbf9ffa --- /dev/null +++ b/resources/views/otorisasipenawaran/js/editextjs.blade.php @@ -0,0 +1,94 @@ + \ No newline at end of file diff --git a/resources/views/otorisasipenawaran/js/editjs.blade.php b/resources/views/otorisasipenawaran/js/editjs.blade.php new file mode 100644 index 0000000..cc67d20 --- /dev/null +++ b/resources/views/otorisasipenawaran/js/editjs.blade.php @@ -0,0 +1,188 @@ +@push('scripts') + @include('lpj::assetsku.includenya') + @include('lpj::otorisasipenawaran.js.editextjs') + +@endpush \ No newline at end of file diff --git a/resources/views/otorisasipenawaran/show.blade.php b/resources/views/otorisasipenawaran/show.blade.php new file mode 100644 index 0000000..0e6d2e1 --- /dev/null +++ b/resources/views/otorisasipenawaran/show.blade.php @@ -0,0 +1,43 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} +@endsection +@php + $route = explode('.', Route::currentRouteName()); +@endphp +@section('content') +
+
+
+

+ Detail Data Otorisasi Penawaran +

+ +
+
+
+

+ Nomor Register Permohonan: +

+ + {{ $prosespenawaran->nomor_registrasi }} + +
+
+

+ Kode Penawaran: +

+ + {{ $prosespenawaran->code }} + +
+
+
+
+ + +@endsection diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 5ae30ec..562b021 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -498,6 +498,23 @@ Breadcrumbs::for('tender.prosespenawaranulang.show', function (BreadcrumbTrail $ $trail->push('Detail Data Proses Penawaran Ulang'); }); // andy add Proses Penawaran Ulang +// andy add Otorisasi Tender +Breadcrumbs::for('otorisasitender', function (BreadcrumbTrail $trail) { + $trail->push('Otorisasi Tender'); +}); +Breadcrumbs::for('otorisasitender.penawaran', function (BreadcrumbTrail $trail) { + $trail->parent('otorisasitender'); + $trail->push('Data Otorisasi Penawaran', route('otorisasitender.penawaran.index')); +}); +Breadcrumbs::for('otorisasitender.penawaran.edit', function (BreadcrumbTrail $trail) { + $trail->parent('otorisasitender.penawaran'); + $trail->push('Tambah Data Otorisasi Penawaran '); +}); +Breadcrumbs::for('otorisasitender.penawaran.show', function (BreadcrumbTrail $trail) { + $trail->parent('otorisasitender.penawaran'); + $trail->push('Detail Data Otorisasi Penawaran'); +}); +// andy add Otorisasi Tender Breadcrumbs::for('otorisator.pelaporan.index', function (BreadcrumbTrail $trail) { diff --git a/routes/registrasi.php b/routes/registrasi.php index dd14aa5..b205ce1 100644 --- a/routes/registrasi.php +++ b/routes/registrasi.php @@ -3,6 +3,7 @@ use Modules\Lpj\Http\Controllers\RegistrasiController; use Modules\Lpj\Http\Controllers\ProsesPenawaranController; use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController; +use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController; Route::middleware(['auth'])->group(function () { @@ -65,6 +66,22 @@ Route::middleware(['auth'])->group(function () { Route::put('/prosespenawaranulangKJPPStatus/{prosespenawaranulangKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaranulang.updateKJPPStatus'); }); - }); + }); + + Route::name('otorisasitender.')->prefix('otorisasitender')->group(function () { + Route::controller(OtorisasiPenawaranController::class)->group(function(){ + Route::get('penawaran', 'index')->name('penawaran.index'); + Route::get('penawaran/datatables', 'dataForDatatables')->name('penawaran.datatables'); + Route::get('penawaran/{penawaran}/edit', 'edit')->name('penawaran.edit'); + + // show data + Route::get('/penawaran/{penawaran}', 'show')->name('penawaran.show'); + Route::post('penawaran/setData', 'setData')->name('penawaran.setData'); + + // update KJPP data, detail penawaran + Route::put('/otorisasiPenawaranKJPP/{penawaran}', 'otorisasiPenawaranKJPP')->name('penawaran.otorisasiPenawaranKJPP'); + + }); + }); });