diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index c51457b..f519025 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -25,6 +25,13 @@ function formatTanggalIndonesia($date) return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y'); } +function formatTanggalIndonesia2($date) +{ + \Carbon\Carbon::setLocale('id'); + $waktu = \Carbon\Carbon::parse($date); + return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; +} + function formatRupiah($number) { @@ -96,8 +103,9 @@ function checkKelengkapanDetailKJPP($id) } // convert -function convertSlug($slug) { - +function convertSlug($slug) +{ + $words = explode('-', $slug); foreach ($words as $index => $word) { @@ -107,4 +115,3 @@ function convertSlug($slug) { return implode(' ', $words); } // andy add - diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 6dd992f..f57a513 100644 --- a/app/Http/Controllers/TenderController.php +++ b/app/Http/Controllers/TenderController.php @@ -3,13 +3,20 @@ namespace Modules\Lpj\Http\Controllers; use Exception; +use Barryvdh\DomPDF\PDF; use Illuminate\Http\Request; use Modules\Lpj\Models\KJPP; +use Modules\Location\Models\City; use Illuminate\Support\Facades\DB; use Modules\Lpj\Models\Permohonan; use App\Http\Controllers\Controller; +use Illuminate\Support\Facades\Auth; use Maatwebsite\Excel\Facades\Excel; +use Modules\Location\Models\Village; use Modules\Lpj\Models\JenisLaporan; +use Modules\Location\Models\District; +use Modules\Location\Models\Province; +use Illuminate\Support\Facades\Storage; use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\TujuanPenilaianKJPP; @@ -66,12 +73,14 @@ class TenderController extends Controller $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); // Add created_by/updated_by from the authenticated user - $userId = auth()->user()->id; + $userId = Auth::user()->id; $validated['nomor_registrasi'] = $permohonan->nomor_registrasi; $validated['status'] = $request->input('status') ?? 'tender'; $validated['updated_by'] = $userId; // Updating the record + $validated['end_date'] = $request->input('end_date') . ' 17:00:00'; + // dd($validated['end_date']); $permohonan->update($validated); // Adding created_by for the new PenawaranTender record @@ -117,6 +126,11 @@ class TenderController extends Controller $penawaranExists = PenawaranTender::where('nomor_registrasi', $noreg)->exists(); $penawaran1 = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran1->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + // dd($penawaran1->id); if ($penawaran1) { $penawaran = $penawaran1; @@ -143,6 +157,14 @@ class TenderController extends Controller $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + if (!$penawaran) { + return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!'); + } + + if ($penawaran->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); $jenis_laporan = JenisLaporan::all(); @@ -152,6 +174,8 @@ class TenderController extends Controller $kjpp = KJPP::all(); + // dd($penawaran); + return view('lpj::penawaran.edit', compact('status', 'tujuan_penilaian_kjpp', 'jenis_laporan', 'kjpp', 'penawaran', 'noreg', 'kjpps', 'permohonan')); } @@ -171,13 +195,15 @@ class TenderController extends Controller $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); // Ambil ID user yang sedang login - $userId = auth()->user()->id; + $userId = Auth::user()->id; // Jangan ubah created_by untuk data yang sudah ada $validated['nomor_registrasi'] = $penawaran->nomor_registrasi; $validated['status'] = $request->input('status') ?? 'tender'; $validated['created_by'] = $userId; $validated['updated_by'] = $userId; // Hanya update 'updated_by' + $validated['end_date'] = $request->input('end_date') . ' 17:00:00'; + // dd($validated['end_date']); // Update data penawaran dan permohonan $penawaran->update($validated); @@ -247,19 +273,46 @@ class TenderController extends Controller public function showSuratTender($noreg) { $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + + // Kalau tidak ada dokumen jaminan maka di arahkan ke halaman dokumen jaminan + if ($permohonan->debiture->documents->isEmpty()) { + return redirect()->route('debitur.jaminan.create', ['id' => $permohonan->debiture->id]) + ->with('error', 'Anda Belum Membuat Dokumen Jaminan. Silahkan isi terlebih dahulu!'); + } + + foreach ($permohonan->debiture->documents as $document) { + $village_permohonan = $document->village_code; + $district_permohonan = $document->district_code; + $city_permohonan = $document->city_code; + $province_permohonan = $document->province_code; + } + + $villages = Village::where('code', $village_permohonan)->get(); + $districts = District::where('code', $district_permohonan)->get(); + $cities = City::where('code', $city_permohonan)->get(); + $provinces = Province::where('code', $province_permohonan)->get(); // Kalau tidak ketemu nomor registrasi dengan tabel penawaran if (!$penawaran) { return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg]) ->with('error', 'Anda Belum Membuat Penawaran. Silahkan isi terlebih dahulu!'); } + + date_default_timezone_set('Asia/Jakarta'); + + $now = date('Y-m-d H:i:s'); // Jika batas tanggal penawaran sudah lewat - if ($penawaran->end_date < date('Y-m-d')) { + if ($penawaran->end_date < $now) { return redirect()->route('tender.penawaran.editPenawaran', ['noreg' => $noreg]) ->with('error', 'Sudah Kadaluarsa. Silahkan perpanjang tanggal penawaran terlebih dahulu!'); } - return view('lpj::penawaran.surat_tender', compact('penawaran', 'noreg')); + return view('lpj::penawaran.surat_tender', compact('penawaran', 'noreg', 'permohonan', 'villages', 'districts', 'cities', 'provinces')); } public function datatablesPenawaran(Request $request) @@ -414,4 +467,31 @@ class TenderController extends Controller // Kembalikan hasil pengecekan sebagai JSON return response()->json(['exists' => $exists]); } + + public function downloadSuratTender($noreg) + { + $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); + + if ($penawaran->status != 'tender') { + return redirect()->route('spk.index')->with('error', 'Penawaran dengan nomor registrasi ini sudah masuk SPK tidak bisa masuk penawaran lagi!'); + } + + foreach ($permohonan->debiture->documents as $document) { + $village_permohonan = $document->village_code; + $district_permohonan = $document->district_code; + $city_permohonan = $document->city_code; + $province_permohonan = $document->province_code; + } + + $villages = Village::where('code', $village_permohonan)->get(); + $districts = District::where('code', $district_permohonan)->get(); + $cities = City::where('code', $city_permohonan)->get(); + $provinces = Province::where('code', $province_permohonan)->get(); + + $pdf = app('dompdf.wrapper'); // create an instance of the PDF class + $pdf->loadView('lpj::penawaran.surat_tender_download', compact('penawaran', 'permohonan', 'villages', 'districts', 'cities', 'provinces')); + + return $pdf->download('surat_tender' . time() . '.pdf'); + } } diff --git a/app/Models/PenawaranDetailTender.php b/app/Models/PenawaranDetailTender.php index 8b65a91..619f9e2 100644 --- a/app/Models/PenawaranDetailTender.php +++ b/app/Models/PenawaranDetailTender.php @@ -22,4 +22,9 @@ class PenawaranDetailTender extends Model { return $this->belongsTo(PenawaranTender::class, 'penawaran_id', 'id'); } + + public function kjpp(): BelongsTo + { + return $this->belongsTo(KJPP::class, 'kjpp_rekanan_id', 'id'); + } } diff --git a/app/Models/PenawaranTender.php b/app/Models/PenawaranTender.php index c78d00e..f38d42e 100644 --- a/app/Models/PenawaranTender.php +++ b/app/Models/PenawaranTender.php @@ -34,7 +34,7 @@ class PenawaranTender extends Model // menambahkan relasi tujuan penilaian KJPP public function tujuanPenilaianKjpp() { - return $this->belongsTo(TujuanPenilaianKJPP::class, 'tujuan_penilaian_kjpp_id','id'); + return $this->belongsTo(TujuanPenilaianKJPP::class, 'tujuan_penilaian_kjpp_id', 'id'); } public function permohonan() @@ -46,6 +46,4 @@ class PenawaranTender extends Model { return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id'); } - - } diff --git a/database/migrations/2024_11_13_015203_update_penawaran_table.php b/database/migrations/2024_11_13_015203_update_penawaran_table.php new file mode 100644 index 0000000..545d623 --- /dev/null +++ b/database/migrations/2024_11_13_015203_update_penawaran_table.php @@ -0,0 +1,28 @@ +datetime('end_date')->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penawaran', function (Blueprint $table) { + $table->date('end_date')->change(); + }); + } +}; diff --git a/database/seeders/LpjDatabaseSeeder.php b/database/seeders/LpjDatabaseSeeder.php index 0377451..53a1b25 100644 --- a/database/seeders/LpjDatabaseSeeder.php +++ b/database/seeders/LpjDatabaseSeeder.php @@ -12,34 +12,34 @@ class LpjDatabaseSeeder extends Seeder public function run(): void { $this->call([ - BranchSeeder::class, - CurrencySeeder::class, - JenisFasilitasKreditSeeder::class, - JenisLegalitasJaminanSeeder::class, - JenisJaminanSeeder::class, - JenisDokumenSeeder::class, - TujuanPenilaianSeeder::class, - NilaiPlatformSeeder::class, - HubunganPemilikJaminanSeeder::class, - HubunganPenghuniJaminanSeeder::class, - ArahMataAnginSeeder::class, - StatusPermohonanSeeder::class, - RegionSeeder::class, - TeamsSeeder::class, - TeamUsersSeeder::class, - JenisPenilaianSeeder::class, - TujuanPenilaianKJPPSeeder::class, - IjinUsahaSeeder::class, - JenisLaporanSeeder::class, - DebitureSeeder::class, - PermohonanSeeder::class, + // BranchSeeder::class, + // CurrencySeeder::class, + // JenisFasilitasKreditSeeder::class, + // JenisLegalitasJaminanSeeder::class, + // JenisJaminanSeeder::class, + // JenisDokumenSeeder::class, + // TujuanPenilaianSeeder::class, + // NilaiPlatformSeeder::class, + // HubunganPemilikJaminanSeeder::class, + // HubunganPenghuniJaminanSeeder::class, + // ArahMataAnginSeeder::class, + // StatusPermohonanSeeder::class, + // RegionSeeder::class, + // TeamsSeeder::class, + // TeamUsersSeeder::class, + // JenisPenilaianSeeder::class, + // TujuanPenilaianKJPPSeeder::class, + // IjinUsahaSeeder::class, + // JenisLaporanSeeder::class, + // DebitureSeeder::class, + // PermohonanSeeder::class, PemilikJaminanSeeder::class, - DokumenJaminanSeeder::class, - DetailDokumenJaminanSeeder::class, - KJPPSeeder::class, - PenawaranSeeder::class, - DetailPenawaranSeeder::class, - PenilaianSeeder::class, + // DokumenJaminanSeeder::class, + // DetailDokumenJaminanSeeder::class, + // KJPPSeeder::class, + // PenawaranSeeder::class, + // DetailPenawaranSeeder::class, + // PenilaianSeeder::class, ]); } } diff --git a/resources/views/penawaran/edit.blade.php b/resources/views/penawaran/edit.blade.php index d49a6bd..a2d1c4e 100644 --- a/resources/views/penawaran/edit.blade.php +++ b/resources/views/penawaran/edit.blade.php @@ -39,8 +39,13 @@ Nama KJPP Sebelumnya
Dear - {{ ucwords(auth()->user()->name) ?? 'Tidak Ada' }} + + @php + $allPeople = []; + + foreach ($penawaran->penawaranKjpp as $kjpp) { + if ($kjpp->kjpp->nama_pic_admin) { + $allPeople[] = ucwords($kjpp->kjpp->nama_pic_admin); + } + + if ($kjpp->kjpp->detail_nama_pic_admin) { + try { + $decoded = json_decode($kjpp->kjpp->detail_nama_pic_admin); + if ($decoded) { + foreach ($decoded as $admin) { + if (isset($admin->nama_pic_admin)) { + $allPeople[] = ucwords($admin->nama_pic_admin); + } + } + } + } catch (\Exception $e) { + // Handle invalid JSON silently + } + } + } + + $allPeople = array_filter($allPeople); + $totalPeople = count($allPeople); + @endphp + @if ($totalPeople > 0) + @foreach ($allPeople as $index => $person) + {{ $person }}{{ $index === $totalPeople - 2 ? ' dan ' : ($index < $totalPeople - 2 ? ' , ' : '') }} + @endforeach + @else + Tidak Ada + @endif +
Mohon untuk dibuatkan proposal jasa appraisal atas nama {{ ucwords($penawaran->permohonan->user->name) }}, tujuan penilaian + class="font-bold">{{ ucwords($permohonan->user->name) }}, tujuan penilaian untuk - @foreach ($penawaran->tujuanPenilaianKJPP as $tujuanPenilaianKJPP) - {{ $tujuanPenilaianKJPP->name }} - @endforeach + {{ $penawaran->tujuanPenilaianKJPP->name }} , laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut :
Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
Mohon proposal dapat saya terima segera, sebelum - {{ formatTanggalIndonesia($penawaran->end_date) }} pukul 17.00 WIB + {{ formatTanggalIndonesia2($penawaran->end_date) }}
Best Regards, - [otomasi dari nama dan tanda tangan user penginput] - Sub Direktorat Appraisal +
+ {{ $permohonan->user->name }} +
+PT. Bank Artha Graha Internasional, Tbk.
Gedung Bank Artha Graha, Lantai 3
diff --git a/resources/views/penawaran/surat_tender_download.blade.php b/resources/views/penawaran/surat_tender_download.blade.php
new file mode 100644
index 0000000..af28ad7
--- /dev/null
+++ b/resources/views/penawaran/surat_tender_download.blade.php
@@ -0,0 +1,148 @@
+
+
+
+
+ {{ $permohonan->user->name }} +
+