Merge remote-tracking branch 'origin/tender' into staging

# Conflicts:
#	module.json
#	routes/breadcrumbs.php
This commit is contained in:
Daeng Deni Mardaeni
2024-10-05 11:13:35 +07:00
11 changed files with 617 additions and 134 deletions

View File

@@ -2,19 +2,22 @@
namespace Modules\Lpj\Http\Controllers;
use Exception;
use Illuminate\Http\Request;
use Modules\Lpj\Models\KJPP;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Penawaran;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Permohonan;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Exports\PenawaranTenderExport;
use Modules\Lpj\Http\Requests\TenderPenawaranRequest;
use Modules\Lpj\Models\JenisLaporan;
use Modules\Lpj\Models\KJPP;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaianKJPP;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Exports\PenawaranTenderExport;
use Modules\Lpj\Http\Requests\TenderPenawaranRequest;
class TenderController extends Controller
{
@@ -38,6 +41,7 @@ class TenderController extends Controller
$status = StatusPermohonan::all();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all();
$jenis_laporan = JenisLaporan::all();
$kjpp = KJPP::all();
return view('lpj::penawaran/create', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'id'));
@@ -50,27 +54,38 @@ class TenderController extends Controller
{
$validated = $request->validated();
if ($validated) {
DB::beginTransaction();
try {
$penawaran = PenawaranTender::find($id);
$validated['nomor_registrasi'] = $penawaran->nomor_registrasi;
// Mengatasi null untuk nama_kjpp_sebelumnya, biaya_kjpp_sebelumnya, dan tanggal_penilaian_sebelumnya
$validated['nama_kjpp_sebelumnya'] = json_encode($request->input('nama_kjpp_sebelumnya') ?? []);
$validated['biaya_kjpp_sebelumnya'] = $request->input('biaya_kjpp_sebelumnya') ?? '';
$validated['tanggal_penilaian_sebelumnya'] = $request->input('tanggal_penilaian_sebelumnya') ?? '';
$validated['status'] = $request->input('status') ?? 'Tender';
// dd($validated);
$penawaranId = PenawaranTender::create($validated);
PenawaranTender::create($validated);
$kjpps = $request->input('kjpp', []);
foreach ($kjpps as $kjpp) {
PenawaranDetailTender::create([
'penawaran_id' => $penawaranId->id,
'kjpp_rekanan_id' => $kjpp
]);
}
// Commit the transaction
DB::commit();
return redirect()
->route('tender.penawaran.index')
->with('success', 'Data Penawaran created successfully');
} else {
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('tender.penawaran.createPenawaran', $id)
->with('error', 'Validation failed');
->with('error', 'Validation failed: ' . $e);
}
}
@@ -80,27 +95,86 @@ class TenderController extends Controller
public function penawaran_show($id)
{
$penawaran = PenawaranTender::find($id);
$kjpps = KJPP::find($id);
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran)->get();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::where('id', $penawaran->tujuan_penilaian_kjpp_id)->get();
$jenis_laporan = JenisLaporan::where('id', $penawaran->jenis_laporan_id)->get();
return view('lpj::penawaran.show', compact('id', 'penawaran', 'kjpps'));
// dd($kjpps);
return view('lpj::penawaran.show', compact('id', 'penawaran', 'kjpps', 'tujuan_penilaian_kjpp', 'jenis_laporan'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
public function penawaran_edit($id)
{
return view('lpj::edit');
// Find the specific penawaran by its ID
$penawaran = PenawaranTender::find($id);
$status = StatusPermohonan::all();
$tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all();
$jenis_laporan = JenisLaporan::all();
$detail_penawaran = PenawaranDetailTender::where('penawaran_id', '=', $id)->pluck('kjpp_rekanan_id')->toArray();
$kjpps = KJPP::whereIn('id', $detail_penawaran)->pluck('id')->toArray();
$kjpp = KJPP::all();
return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'id', 'kjpps'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
public function penawaran_update(TenderPenawaranRequest $request, $id)
{
//
$validated = $request->validated();
// dd($validated);
DB::beginTransaction();
try {
$penawaran = PenawaranTender::find($id);
$validated['nomor_registrasi'] = $penawaran->nomor_registrasi;
$validated['status'] = $request->input('status') ?? 'Tender';
$penawaran->update($validated);
$kjpps = $request->input('kjpp', []);
foreach ($penawaran->penawaranKjpp as $kjpp) {
$kjpp->delete(); // Assuming penawaranKjpp is a relationship on the PenawaranTender model
}
foreach ($kjpps as $kjpp) {
PenawaranDetailTender::create([
'penawaran_id' => $penawaran->id,
'kjpp_rekanan_id' => $kjpp
]);
}
// Commit the transaction
DB::commit();
return redirect()
->route('tender.penawaran.index')
->with('success', 'Data Penawaran created successfully');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('tender.penawaran.createPenawaran', $id)
->with('error', 'Validation failed: ' . $e);
}
}
/**
* Remove the specified resource from storage.
*/

View File

@@ -12,17 +12,17 @@ class TenderPenawaranRequest extends FormRequest
public function rules(): array
{
$rules = [
'nama_kjpp_sebelumnya' => 'nullable|array',
'nama_kjpp_sebelumnya.*' => 'exists:kjpp,name',
'nama_kjpp_sebelumnya' => 'nullable',
'biaya_kjpp_sebelumnya' => 'nullable|numeric',
'tanggal_penilaian_sebelumnya' => 'nullable',
'nomor_registrasi' => 'required',
'kjpp.*' => 'exists:kjpp,id',
'tujuan_penilaian_kjpp_id' => 'required',
'jenis_laporan_id' => 'required',
'start_date' => 'required',
'end_date' => 'required',
'catatan' => 'nullable',
'status' => 'required'
'status' => 'nullable'
];
if ($this->method() == 'PUT') {
@@ -53,7 +53,6 @@ class TenderPenawaranRequest extends FormRequest
'jenis_laporan_id.required' => 'Jenis Laporan Wajib diisi!',
'start_date.required' => 'Tanggal Awal Wajib diisi!',
'end_date.required' => 'Tanggal Akhir Wajib diisi!',
'status.required' => 'Status Wajib diisi!'
];
}
@@ -67,12 +66,12 @@ class TenderPenawaranRequest extends FormRequest
$validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.');
}
// Validasi minimal 3 pilihan pada nama_kjpp_sebelumnya
$namaKjppSebelumnya = $this->input('nama_kjpp_sebelumnya', []);
// Validasi minimal 3 pilihan pada nama_kjpp
$namaKjpp = $this->input('kjpp', []);
// Abaikan jika array kosong, tetapi validasi jika terisi kurang dari 3 item
if (!empty($namaKjppSebelumnya) && is_array($namaKjppSebelumnya) && count($namaKjppSebelumnya) < 3) {
$validator->errors()->add('nama_kjpp_sebelumnya', 'Nama KJPP Sebelumnya harus memiliki minimal 3 pilihan jika diisi.');
// jika terisi kurang dari 3 item
if (is_array($namaKjpp) && count($namaKjpp) < 3) {
$validator->errors()->add('kjpp', 'Nama KJPP Sebelumnya harus memiliki minimal 3 pilihan jika diisi.');
}
});
}

View File

@@ -0,0 +1,19 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\PenawaranDetailTenderFactory;
class PenawaranDetailTender extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*/
protected $table = 'detail_penawaran';
protected $guarded = ['id'];
}

View File

@@ -3,6 +3,7 @@
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Models\PenawaranDetailTender;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class PenawaranTender extends Model
@@ -15,4 +16,9 @@ class PenawaranTender extends Model
protected $table = 'penawaran';
protected $guarded = ['id'];
public function penawaranKjpp()
{
return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id');
}
}

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('penawaran', function (Blueprint $table) {
$table->string('status')->nullable()->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penawaran', function (Blueprint $table) {
$table->string('status')->change();
});
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('detail_penawaran', function (Blueprint $table) {
$table->string('biaya_penawaran')->nullable()->change();
$table->string('attachment')->nullable()->change();
$table->string('dokumen_persetujuan')->nullable()->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('detail_penawaran', function (Blueprint $table) {
$table->string('biaya_penawaran')->change();
$table->string('attachment')->change();
$table->string('dokumen_persetujuan')->change();
});
}
};

View File

@@ -28,11 +28,34 @@
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" value="{{ $penawaran->nomor_registrasi ?? '-' }}" name="nomor_registrasi"
class="flex w-full text-gray-600 font-medium text-sm input-custom" readonly>
@error('nomor_registrasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="nomor_registrasi" readonly value="{{ $penawaran->nomor_registrasi ?? '-' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama KJPP Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="nama_kjpp_sebelumnya" readonly value="{{ $penawaran->nama_kjpp_sebelumnya ?? '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Biaya KJPP Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="biaya_kjpp_sebelumnya" readonly value="{{ $penawaran->biaya_kjpp_sebelumnya ?? '' }}">
</div>
<label class="form-label max-w-56">
Tanggal Penilaian Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="tanggal_penilaian_sebelumnya" readonly
value="{{ $penawaran->tanggal_penilaian_sebelumnya ?? '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -49,44 +72,22 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama KJPP Sebelumnya
Data KJPP
</label>
<div class="flex flex-wrap items-baseline w-full">
<select name="nama_kjpp_sebelumnya[]" multiple="multiple"
class="input tomselect w-full @error('nama_kjpp_sebelumnya') border-danger @enderror"
id="nama_kjpp_sebelumnya_select">
<option value="">Pilih Nama KJPP Sebelumnya</option>
<select name="kjpp[]" multiple="multiple"
class="input tomselect w-full @error('kjpp') border-danger @enderror" id="kjpp_select">
<option value="">Pilih Nama KJPP</option>
@foreach ($kjpp as $row)
<option value="{{ $row->name }}"
{{ in_array($row->name, old('nama_kjpp_sebelumnya', [])) ? 'selected' : '' }}>
{{ $row->name }}
</option>
@if (isset($kjpp))
<option value="{{ $row->id }}"
{{ in_array($row->id, old('kjpp', [])) ? 'selected' : '' }}>
{{ $row->name }}
</option>
@endif
@endforeach
</select>
@error('nama_kjpp_sebelumnya')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Biaya KJPP Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('biaya_kjpp_sebelumnya') border-danger @enderror" type="text"
name="biaya_kjpp_sebelumnya" value="{{ old('biaya_kjpp_sebelumnya') }}">
@error('biaya_kjpp_sebelumnya')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<label class="form-label max-w-56">
Tanggal Penilaian Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('tanggal_penilaian_sebelumnya') border-danger @enderror"
type="date" name="tanggal_penilaian_sebelumnya"
value="{{ old('tanggal_penilaian_sebelumnya') }}">
@error('tanggal_penilaian_sebelumnya')
@error('kjpp')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
@@ -113,6 +114,39 @@
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Batas Waktu
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('start_date') border-danger @enderror" type="date"
name="start_date" value="{{ old('start_date') }}">
@error('start_date')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
-
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('end_date') border-danger @enderror" type="date" name="end_date"
value="{{ old('end_date') }}">
@error('end_date')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('catatan') border-danger @enderror" name="catatan" rows="3" id="address">{{ old('catatan') }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Jenis Laporan
</label>
@@ -137,39 +171,8 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Awal
Status
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('start_date') border-danger @enderror" type="date"
name="start_date" value="{{ old('start_date') }}">
@error('start_date')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<label class="form-label max-w-56">
Tanggal Akhir
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('end_date') border-danger @enderror" type="date" name="end_date"
value="{{ old('end_date') }}">
@error('end_date')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('catatan') border-danger @enderror" name="catatan" rows="3" id="address">{{ old('catatan') }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Status</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="select w-full @error('status') border-danger @enderror" name="status">
<option value="">Pilih Status</option>

View File

@@ -0,0 +1,213 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName(), request()->route('id')) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<form action="{{ route('tender.penawaran.updatePenawaran', $id) }}" method="POST">
@csrf
@method('PUT')
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Data Penawaran Ulang
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('tender.penawaran.show', $id) }}" class="btn btn-xs btn-primary" title="Detail">
<i class="ki-outline ki-abstract-26"></i> Detail
</a>
<a href="{{ route('tender.penawaran.index') }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="nomor_registrasi" readonly value="{{ $penawaran->nomor_registrasi ?? '-' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama KJPP Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="nama_kjpp_sebelumnya" readonly value="{{ $penawaran->nama_kjpp_sebelumnya ?? '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Biaya KJPP Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="biaya_kjpp_sebelumnya" readonly value="{{ $penawaran->biaya_kjpp_sebelumnya ?? '' }}">
</div>
<label class="form-label max-w-56">
Tanggal Penilaian Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="flex w-full text-gray-600 font-medium text-sm input-custom" type="text"
name="tanggal_penilaian_sebelumnya" readonly
value="{{ $penawaran->tanggal_penilaian_sebelumnya ?? '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Penawaran
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input border-warning bg-warning-light @error('code') border-danger @enderror"
type="text" name="code" value="{{ old('code', $penawaran->code) }}" readonly>
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Data KJPP
</label>
<div class="flex flex-wrap items-baseline w-full">
<!-- Multi-select for KJPP -->
<select name="kjpp[]" multiple="multiple"
class="input tomselect w-full @error('kjpp') border-danger @enderror" id="kjpp_select">
<option value="">Pilih Nama KJPP</option>
@foreach ($kjpp as $row)
<option value="{{ $row->id }}"
{{ in_array($row->id, old('kjpp', $kjpps ?? [])) ? 'selected' : '' }}>
{{ $row->name }}
</option>
@endforeach
</select>
@error('kjpp')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tujuan Penilaian KJPP
</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="tujuan_penilaian_kjpp_id"
class="select w-full @error('tujuan_penilaian_kjpp_id') border-danger @enderror"
name="tujuan_penilaian_kjpp_id">
<option value="">Pilih Tujuan Penilaian KJPP</option>
@if (isset($tujuan_penilaian_kjpp))
@foreach ($tujuan_penilaian_kjpp as $tp)
<option value="{{ $tp->id }}"
{{ old('tujuan_penilaian_kjpp_id', $penawaran->tujuan_penilaian_kjpp_id) == $tp->id ? 'selected' : '' }}>
{{ $tp->name }}
</option>
@endforeach
@endif
</select>
@error('tujuan_penilaian_kjpp_id')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Batas Waktu
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('start_date') border-danger @enderror" type="date"
name="start_date" value="{{ old('start_date', $penawaran->start_date) }}">
@error('start_date')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
-
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('end_date') border-danger @enderror" type="date" name="end_date"
value="{{ old('end_date', $penawaran->end_date) }}">
@error('end_date')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('catatan') border-danger @enderror" name="catatan" rows="3" id="address">{{ old('catatan', $penawaran->catatan) }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Jenis Laporan
</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="jenis_laporan_id"
class="select w-full @error('jenis_laporan_id') border-danger @enderror"
name="jenis_laporan_id">
<option value="">Pilih Jenis Laporan</option>
@if (isset($jenis_laporan))
@foreach ($jenis_laporan as $jl)
<option value="{{ $jl->id }}"
{{ old('jenis_laporan_id', $penawaran->jenis_laporan_id) == $jl->id ? 'selected' : '' }}>
{{ $jl->name }}
</option>
@endforeach
@endif
</select>
@error('jenis_laporan_id')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Status
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="select w-full @error('status') border-danger @enderror" name="status">
<option value="">Pilih Status</option>
@if (isset($status))
@foreach ($status as $s)
<option value="{{ $s->name }}"
{{ $penawaran->status == $s->name ? 'selected' : '' }}>
{{ $s->name }}
</option>
@endforeach
@endif
</select>
@error('status')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Penawaran Ulang
</button>
</div>
</div>
</div>
</form>
</div>
@endsection
@push('styles')
<style>
input.input-custom:focus {
outline: none;
box-shadow: none;
}
</style>
@endpush

View File

@@ -115,14 +115,12 @@
nama_kjpp_sebelumnya: {
title: 'Nama KJPP Sebelumnya',
render: (item, data) => {
let nama = data.nama_kjpp_sebelumnya;
if (typeof nama === 'string') {
nama = JSON.parse(nama);
const nama = data.nama_kjpp_sebelumnya;
if (nama === null || nama === '') {
return 'Tidak Ada'
} else {
return nama;
}
if (nama.length === 0) {
return `<span class="badge badge-danger badge-xs">Tidak Ada</span>`;
}
return nama.map(n => `<span class="badge badge-primary badge-xs">${n}</span>`).join(' ');
}
},
tanggal_penilaian_sebelumnya: {

View File

@@ -1,3 +1,35 @@
@php
function formatTanggalIndonesia($date)
{
$carbonDate = \Carbon\Carbon::parse($date);
$indonesianMonths = [
'Januari',
'Februari',
'Maret',
'April',
'Mei',
'Juni',
'Juli',
'Agustus',
'September',
'Oktober',
'November',
'Desember',
];
$month = $indonesianMonths[$carbonDate->month - 1];
return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y');
}
function formatRupiah($number)
{
// Convert to float if the input is a string
$number = (float) $number;
return 'Rp ' . number_format($number, 2, ',', '.');
}
@endphp
@extends('layouts.main')
@section('breadcrumbs')
@@ -12,6 +44,8 @@
Detail Penawaran
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('tender.penawaran.editPenawaran', $id) }}" class="btn btn-xs btn-danger"
title="Penawaran"><i class="ki-filled ki-arrow-circle-left"></i> Penawaran Ulang</a>
<a href="{{ route('tender.penawaran.createPenawaran', $id) }}" class="btn btn-xs btn-primary"
title="Penawaran"><i class="ki-filled ki-arrow-circle-right"></i> Penawaran</a>
<a href="{{ route('tender.penawaran.index') }}" class="btn btn-xs btn-info"><i
@@ -25,7 +59,7 @@
</label>
<div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $penawaran->nomor_registrasi }}
{{ $penawaran->nomor_registrasi ?? '' }}
</p>
</div>
<label class="form-label max-w-56">
@@ -33,7 +67,7 @@
</label>
<div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $penawaran->code }}
{{ $penawaran->code ?? '' }}
</p>
</div>
</div>
@@ -42,19 +76,9 @@
Nama KJPP Sebelumnya
</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($penawaran->nama_kjpp_sebelumnya) && !empty(json_decode($penawaran->nama_kjpp_sebelumnya, true)))
<div class="flex flex-row space-x-4 text-gray-600 font-medium text-sm gap-1">
@foreach (json_decode($penawaran->nama_kjpp_sebelumnya, true) as $penawaran_code)
@php
$kjpp = $kjpps->firstWhere('name', $penawaran_code);
@endphp
@if ($kjpp)
<div
class="flex flex-row space-x-4 text-white font-medium text-sm badge badge-dark dark-mode:badge dark-mode:text-gray-600 badge-xs">
{{ $kjpp->name }}
</div>
@endif
@endforeach
@if (isset($penawaran->nama_kjpp_sebelumnya) && !empty($penawaran->nama_kjpp_sebelumnya))
<div class="flex flex-row space-x-4 text-gray-600 font-medium text-sm">
{{ $penawaran->nama_kjpp_sebelumnya }}
</div>
@else
<div class="flex flex-row space-x-4 text-gray-600 font-medium text-sm">
@@ -66,15 +90,6 @@
Biaya KJPP Sebelumnya
</label>
<p class="flex w-full text-gray-600 font-medium text-sm">
@php
function formatRupiah($number)
{
// Convert to float if the input is a string
$number = (float) $number;
return 'Rp ' . number_format($number, 2, ',', '.');
}
@endphp
@if (isset($penawaran->biaya_kjpp_sebelumnya))
{{ formatRupiah($penawaran->biaya_kjpp_sebelumnya) }}
@else
@@ -82,7 +97,100 @@
@endif
</p>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Penilaian Sebelumnya
</label>
@if (isset($penawaran->tanggal_penilaian_sebelumnya) && !empty($penawaran->tanggal_penilaian_sebelumnya))
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ formatTanggalIndonesia($penawaran->tanggal_penilaian_sebelumnya) }}
</p>
@else
<p class="flex w-full text-gray-600 font-medium text-sm">
Tidak Ada
</p>
@endif
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tujuan Penilaian KJPP
</label>
<p class="flex w-full text-gray-600 font-medium text-sm">
@if (isset($tujuan_penilaian_kjpp))
@foreach ($tujuan_penilaian_kjpp as $tpk)
{{ $tpk->name }}
@endforeach
@else
Tidak Ada
@endif
</p>
<label class="form-label max-w-56">
Jenis Laporan
</label>
<p class="flex w-full text-gray-600 font-medium text-sm">
@if (isset($jenis_laporan))
@foreach ($jenis_laporan as $jl)
{{ $jl->name }}
@endforeach
@else
Tidak Ada
@endif
</p>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Batas Waktu
</label>
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ formatTanggalIndonesia($penawaran->start_date) }} -
{{ formatTanggalIndonesia($penawaran->end_date) }}
</p>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
@if (isset($penawaran->catatan))
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $penawaran->catatan }}
</p>
@else
<p class="flex w-full text-gray-600 font-medium text-sm">
Tidak Ada
</p>
@endif
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama KJPP
</label>
<div class="flex flex-row space-x-4 text-gray-600 font-medium text-sm gap-1">
@if (isset($kjpps) && !empty(json_decode($kjpps, true)))
@foreach ($kjpps as $kjpp)
@if (isset($kjpp))
<div
class="flex flex-row space-x-4 text-white font-medium text-sm badge badge-dark dark-mode:badge dark-mode:text-gray-600 badge-xs">
{{ $kjpp->name }}</div>
@endif
@endforeach
@else
<div class="flex flex-row space-x-4 text-gray-600 font-medium text-sm">Tidak Ada</div>
@endif
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Status
</label>
@if (isset($penawaran->status))
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $penawaran->status }}
</p>
@else
<p class="flex w-full text-gray-600 font-medium text-sm">
Tidak Ada
</p>
@endif
</div>
</div>
</div>
</div>
@endsection
@endsection

View File

@@ -417,7 +417,10 @@ Route::middleware(['auth'])->group(function () {
Route::post('penawaran/{id}/store', [TenderController::class, 'penawaran_store'])->name(
'penawaran.storePenawaran',
);
Route::post('penawaran/{id}/update', [TenderController::class, 'penawaran_store'])->name(
Route::get('penawaran/{id}/edit', [TenderController::class, 'penawaran_edit'])->name(
'penawaran.editPenawaran',
);
Route::put('penawaran/{id}/update', [TenderController::class, 'penawaran_update'])->name(
'penawaran.updatePenawaran',
);
Route::get('penawaran/exportPenawaran', [TenderController::class, 'exportPenawaran'])->name(