Mengubah Tujuan Penilaian KJPP sebelumnya diambil dari tabel penawaran.tujuan_penilaian_kjpp_id menjadi tabel tujuan_penilaian_kjpp.name di proses_penawaran

This commit is contained in:
2024-10-18 10:32:05 +07:00
parent 82d5b54d04
commit f8867005af
3 changed files with 133 additions and 148 deletions

View File

@@ -38,15 +38,15 @@ class ProsesPenawaranController extends Controller
}
// Retrieve data from the database
$query =PenawaranTender::query()->where('status','=','tender')->withCount('penawarandetails');
$query = PenawaranTender::query()->where('status', '=', '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->orWhereRelation('tujuanPenilaianKJPP', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
@@ -75,7 +75,7 @@ class ProsesPenawaranController extends Controller
// Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->get();
$data = $query->with(['tujuanPenilaianKJPP'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
@@ -109,26 +109,24 @@ class ProsesPenawaranController extends Controller
if (request()->ajax()) {
$id = $request->id;
$penawaran = PenawaranTender::findOrFail($id);
$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();
$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();
$data['status'] = 'success';
if ($penawaran) {
$i=0;
foreach($penawrandetails as $obj)
{
$i = 0;
foreach ($penawrandetails as $obj) {
// dd($obj->dokumen_persetujuan);
if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan))
{
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++;
}
}
$kjpp=null;
$kjpp = null;
$kjpp = KJPP::pluck('name', 'id');
$data['penawaran'] = $penawaran;
$data['penawrandetails'] = $penawrandetails;
@@ -157,33 +155,30 @@ class ProsesPenawaranController extends Controller
$tindakan = null;
if (request()->ajax()) {
$validator = ProsesPenawaranController::rulesEditnya($request, $id);
if ($validator['fails']) {
$data['message'] = $validator['errors'];
$data['status'] = 'error';
}
else
{
} else {
try {
$dataku = ['updated_by' => Auth::id(),
'updated_at' => now(),
'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran)
];
$dataku = [
'updated_by' => Auth::id(),
'updated_at' => now(),
'biaya_penawaran' => str_replace(".", "", $request->biaya_penawaran)
];
if ($request->hasFile('dokumen_persetujuan'))
{
if ($request->hasFile('dokumen_persetujuan')) {
$file_tmp = $request->file('dokumen_persetujuan');
$folderPath = 'uploads/penawaran/';
if ($file_tmp->isValid())
{
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension
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));
$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;
$dataku['attachment'] = $myFile;
@@ -195,26 +190,20 @@ class ProsesPenawaranController extends Controller
$data['status'] = 'success';
$data['detailpenawaran_id'] = $id;
$data['message'] = 'Proses Penawarn KJPP successfully';
}
else
{
} else {
$data['status'] = 'error';
$data['message'] = 'Silahkan upload file pdf';
}
}
else
{
} else {
$data['status'] = 'error';
$data['message'] = 'Silahkan upload file';
}
} catch (Exception $e) {
$data['status'] = 'error';
$data['message'] = 'Proses Penawarn KJPP failed.';
}
}
} else {
$data['status'] = 'error';
$data['message'] = 'no ajax request';
@@ -251,58 +240,51 @@ class ProsesPenawaranController extends Controller
*/
public function updateAll(Request $request, $id): JsonResponse
{
// init
// init
$data = array();
$dataku = array();
$model = PenawaranTender::findOrFail($id);
$checkActiveDateRange = $this->checkActiveDateRangePenawaran($model->start_date, $model->end_date);
// cek masa aktif penawaran
if($checkActiveDateRange)
{
$checkKelengkapanDetailKJPP = $this->checkKelengkapanDetailKJPP($id);
if($checkKelengkapanDetailKJPP)
{
if ($checkActiveDateRange) {
$checkKelengkapanDetailKJPP = $this->checkKelengkapanDetailKJPP($id);
if ($checkKelengkapanDetailKJPP) {
DB::beginTransaction();
try {
$dataku = ['status' => 'tendered',
$dataku = [
'status' => 'tendered',
'updated_by' => Auth::id(),
'updated_at' => now()
];
$dataPermohonan = ['status' => 'tendered',
$dataPermohonan = [
'status' => 'tendered',
'updated_by' => Auth::id(),
'updated_at' => now()
];
$permohonan = Permohonan::where('nomor_registrasi','=', $model->nomor_registrasi)->first();
$model->update($dataku);
$permohonan->update($dataPermohonan);
$permohonan = Permohonan::where('nomor_registrasi', '=', $model->nomor_registrasi)->first();
$model->update($dataku);
$permohonan->update($dataPermohonan);
DB::commit();
$data['message'] = "Sukses melakukan Proses Penawaran";
$data['status'] = 'success';
} catch (Exception $e) {
DB::rollBack();
// dd($e);
$data['message'] = "Gagal melakukan Proses Penawaran";
$data['status'] = 'error';
}
}
else
{
} else {
$data['message'] = "Silahkan lengkapi data KJPP";
$data['status'] = 'error';
}
}
else
{
} else {
$data['message'] = "Penawaran sudah di tutup";
$data['status'] = 'error';
}
@@ -316,57 +298,48 @@ class ProsesPenawaranController extends Controller
$end_date = strtotime($end_date1);
$todays_date = strtotime(now());
$allow=true;
if ($todays_date >= $start_date && $todays_date <= $end_date)
{
$allow = true;
if ($todays_date >= $start_date && $todays_date <= $end_date) {
//Penawaran dibuka
$allow=true;
}
else
{
if($todays_date < $start_date)
{
$allow = true;
} else {
if ($todays_date < $start_date) {
//Penawaran Belum dibuka
$allow=true;
}
else
{
$allow = true;
} else {
//Penawaran sudah ditutup
$allow=false;
$allow = false;
}
}
return $allow;
return $allow;
}
public function checkKelengkapanDetailKJPP($id)
{
$allow=true;
$allow = true;
// DB::enableQueryLog();
// detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap?
$query = PenawaranDetailTender::select('id')
->where('penawaran_id','=',$id)
->where(function($query) {
$query->orWhere('biaya_penawaran', '', "");
$query->orWhereNull('biaya_penawaran');
$query->orWhere('attachment', '', "");
$query->orWhereNull('attachment');
->where('penawaran_id', '=', $id)
->where(function ($query) {
$query->orWhere('biaya_penawaran', '', "");
$query->orWhereNull('biaya_penawaran');
$query->orWhere('dokumen_persetujuan', '', "");
$query->orWhereNull('dokumen_persetujuan');
})->get();
// $sql = DB::getQueryLog();
if (sizeof($query)>0)
{
$allow=false;
}
$query->orWhere('attachment', '', "");
$query->orWhereNull('attachment');
$query->orWhere('dokumen_persetujuan', '', "");
$query->orWhereNull('dokumen_persetujuan');
})->get();
// $sql = DB::getQueryLog();
if (sizeof($query) > 0) {
$allow = false;
}
return $allow;
}
public function updateStatusPenawaranKJPP(Request $request, $id): JsonResponse
@@ -377,19 +350,20 @@ class ProsesPenawaranController extends Controller
try {
$model = PenawaranDetailTender::findOrFail($id);
$data['id']=$id;
$data['id'] = $id;
$dataku = ['status' => '0',
$dataku = [
'status' => '0',
'updated_by' => Auth::id(),
'updated_at' => now()
];
$model->update($dataku);
$model->update($dataku);
$data['message'] = "Sukses delete Penawaran KJPP";
$data['status'] = 'success';
} catch (Exception $e) {
// dd($e);
$data['message'] = "Gagal delete Penawaran KJPP";
$data['status'] = 'error';
@@ -400,6 +374,6 @@ class ProsesPenawaranController extends Controller
public function show($id)
{
$prosespenawaran = PenawaranTender::find($id);
return view('lpj::prosespenawaran.show', compact('id','prosespenawaran'));
return view('lpj::prosespenawaran.show', compact('id', 'prosespenawaran'));
}
}

View File

@@ -3,6 +3,7 @@
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
use Modules\Lpj\Models\PenawaranDetailTender;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany; // andy add
@@ -17,7 +18,7 @@ class PenawaranTender extends Model
protected $table = 'penawaran';
protected $guarded = ['id'];
// andy add
public function penawarandetails(): HasMany
{
@@ -29,4 +30,10 @@ class PenawaranTender extends Model
{
return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id');
}
// menambahkan relasi tujuan penilaian KJPP
public function tujuanPenilaianKJPP()
{
return $this->hasMany(TujuanPenilaianKJPP::class, 'id', 'tujuan_penilaian_kjpp_id');
}
}

View File

@@ -6,7 +6,9 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="prosespenawaran-table" data-api-url="{{ route('tender.prosespenawaran.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="prosespenawaran-table"
data-api-url="{{ route('tender.prosespenawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Proses Penawaran
@@ -25,42 +27,44 @@
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Kode Penawaran </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="start_date">
<span class="sort"> <span class="sort-label"> Tanggal Penawaran </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_kjpp_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="penawarandetails_count">
<span class="sort"> <span class="sort-label"> Total KJPP </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Kode Penawaran </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="start_date">
<span class="sort"> <span class="sort-label"> Tanggal Penawaran </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_kjpp_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian KJPP </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="penawarandetails_count">
<span class="sort"> <span class="sort-label"> Total KJPP </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page
@@ -78,10 +82,9 @@
@push('scripts')
<script type="text/javascript">
function showPenawaranData(regId)
{
var url = "{{ url('tender/prosespenawaran') }}/"+regId;
$(location).attr('href',url);
function showPenawaranData(regId) {
var url = "{{ url('tender/prosespenawaran') }}/" + regId;
$(location).attr('href', url);
}
</script>
<script type="module">
@@ -112,8 +115,11 @@
start_date: {
title: 'Tanggal Penawaran',
},
tujuan_penilaian_kjpp_id: {
title: 'Tujuan Penilaian',
tujuan_penilaian_k_j_p_p: {
title: 'Tujuan Penilaian KJPP',
render: (item, data) => {
return data.tujuan_penilaian_k_j_p_p[0].name
}
},
penawarandetails_count: {
title: 'Total KJPP',
@@ -142,12 +148,10 @@
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
searchInput.addEventListener('input', function() {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush