diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php index 6c9d611..044c3f6 100644 --- a/app/Helpers/Lpj.php +++ b/app/Helpers/Lpj.php @@ -1,119 +1,150 @@ month - 1]; - return $carbonDate->format('d') . ' ' . $month . ' ' . $carbonDate->format('Y'); -} + use Carbon\Carbon; + use Modules\Lpj\Models\HolidayCalendar; + use Modules\Lpj\Models\PenawaranDetailTender; + use Modules\Lpj\Models\PenawaranTender; -function formatRupiah($number) -{ - $number = (float) $number; - return 'Rp ' . number_format($number, 2, ',', '.'); -} + function formatTanggalIndonesia($date) + { + $carbonDate = 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 formatTanggalIndonesia2($date) + { + Carbon::setLocale('id'); + $waktu = Carbon::parse($date); + return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; + } -function formatAlamat($alamat) -{ - return ($alamat->address ? $alamat->address . ', ' : '') . - (isset($alamat->village) ? $alamat->village->name . ', ' : '') . - (isset($alamat->city) ? $alamat->city->name . ', ' : '') . - (isset($alamat->province) ? $alamat->province->name . ', ' : '') . - ($alamat->postal_code ?? ''); -} + function formatRupiah($number) + { + $number = (float)$number; + return 'Rp ' . number_format($number, 2, ',', '.'); + } -// andy add -function checkActiveDateRangePenawaran($id) -{ - $penawaran = PenawaranTender::find($id); - $start_date = strtotime($penawaran->start_date); - $end_date = strtotime($penawaran->end_date); - $todays_date = strtotime(now()); + function formatAlamat($alamat) + { + return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->postal_code ?? ''); + } + + // andy add + function checkActiveDateRangePenawaran($id) + { + $penawaran = PenawaranTender::find($id); + + $start_date = strtotime($penawaran->start_date); + $end_date = strtotime($penawaran->end_date); + $todays_date = strtotime(now()); - $allow = true; - if ($todays_date >= $start_date && $todays_date <= $end_date) { - //Penawaran dibuka $allow = true; - } else { - if ($todays_date < $start_date) { - //Penawaran Belum dibuka + if ($todays_date >= $start_date && $todays_date <= $end_date) { + //Penawaran dibuka $allow = true; } else { - //Penawaran sudah ditutup + if ($todays_date < $start_date) { + //Penawaran Belum dibuka + $allow = true; + } else { + //Penawaran sudah ditutup + $allow = false; + } + } + + return $allow; + } + + function checkKelengkapanDetailKJPP($id) + { + $allow = true; + // 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'); + + // tgl_proposal + $query->orWhere('tgl_proposal', '', ""); + $query->orWhereNull('tgl_proposal'); + + $query->orWhere('biaya_penawaran', '', ""); + $query->orWhereNull('biaya_penawaran'); + + $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; } - return $allow; -} + // convert + function convertSlug($slug) + { + $words = explode('-', $slug); -function checkKelengkapanDetailKJPP($id) -{ - $allow = true; - // 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'); - - // tgl_proposal - $query->orWhere('tgl_proposal', '', ""); - $query->orWhereNull('tgl_proposal'); - - $query->orWhere('biaya_penawaran', '', ""); - $query->orWhereNull('biaya_penawaran'); + foreach ($words as $index => $word) { + $words[$index] = strtoupper($word); + } - $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 implode(' ', $words); } - return $allow; -} + // andy add -// convert -function convertSlug($slug) { - - $words = explode('-', $slug); - foreach ($words as $index => $word) { - $words[$index] = strtoupper($word); + function hitungHariKerja($tanggalMulai, $tanggalSelesai) + { + $tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay(); + $tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay(); + + $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)) { + $hariKerja++; + } + $tanggalSekarang->addDay(); + } + + return $hariKerja; } - - return implode(' ', $words); -} -// andy add - diff --git a/app/Http/Controllers/TenderController.php b/app/Http/Controllers/TenderController.php index 6dd992f..8f2c7d2 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,15 @@ class TenderController extends Controller $penawaranExists = PenawaranTender::where('nomor_registrasi', $noreg)->exists(); $penawaran1 = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + + if (!$penawaran1) { + return redirect()->route('tender.penawaran.createPenawaran', ['noreg' => $noreg])->with('error', 'Penawaran dengan nomor registrasi ini belum dibuat. Silahkan isi terlebih dahulu!'); + } + + 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; @@ -141,8 +159,18 @@ class TenderController extends Controller { // Find the specific penawaran by its ID $penawaran = PenawaranTender::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!'); + } + $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!'); + } + $status = StatusPermohonan::all(); $tujuan_penilaian_kjpp = TujuanPenilaianKJPP::all(); $jenis_laporan = JenisLaporan::all(); @@ -152,6 +180,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 +201,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); @@ -228,7 +260,7 @@ class TenderController extends Controller DB::commit(); return redirect() - ->route('tender.penawaran.index') + ->route('tender.penawaran.ulang.index') ->with('success', 'Data Penawaran updated successfully'); } catch (Exception $e) { // Rollback jika ada kesalahan @@ -247,19 +279,46 @@ class TenderController extends Controller public function showSuratTender($noreg) { $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); + $permohonan = Permohonan::where('nomor_registrasi', '=', $noreg)->first(); // 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!'); } + + 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(); + + 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 +473,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/HolidayCalendar.php b/app/Models/HolidayCalendar.php new file mode 100644 index 0000000..ec721d6 --- /dev/null +++ b/app/Models/HolidayCalendar.php @@ -0,0 +1,10 @@ +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/app/Models/Permohonan.php b/app/Models/Permohonan.php index 60c9303..a3b35c1 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -2,6 +2,7 @@ namespace Modules\Lpj\Models; +use Illuminate\Support\Facades\Storage; use Modules\Lpj\Database\Factories\PermohonanFactory; use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Usermanagement\Models\User; @@ -39,7 +40,6 @@ class Permohonan extends Base 'registrasi_at', 'jenis_penilaian_id', 'region_id', - 'attachment' ]; protected static function boot() @@ -70,12 +70,7 @@ class Permohonan extends Base $fileName = time() . '_' . $file->getClientOriginalName(); $filePath = $file->storeAs('permohonan_attachments', $fileName, 'public'); - // Delete old file if it exists - if ($permohonan->attachment) { - Storage::disk('public')->delete($permohonan->attachment); - } - - $permohonan->attachment = $filePath; + $permohonan->dokumen = $filePath; } } @@ -87,7 +82,7 @@ class Permohonan extends Base $keterangan = request()->input('keterangan'); // Get keterangan from request $beforeRequest = $action === 'updated' ? $permohonan->getOriginal() : []; $afterRequest = $permohonan->toArray(); - $file = $permohonan->attachment ? Storage::disk('public')->path($permohonan->attachment) : null; + $file = $permohonan->dokumen ? Storage::disk('public')->path($permohonan->dokumen) : null; $historyService->createHistory( $permohonan, diff --git a/app/Services/PermohonanHistoryService.php b/app/Services/PermohonanHistoryService.php index 783d41b..3b9e60c 100644 --- a/app/Services/PermohonanHistoryService.php +++ b/app/Services/PermohonanHistoryService.php @@ -7,15 +7,8 @@ use Modules\Lpj\Models\PermohonanHistory; class PermohonanHistoryService { - public function createHistory(Permohonan $permohonan, string $status, ?string $keterangan, array $beforeRequest, array $afterRequest, ?string $file = null) + public function createHistory(Permohonan $permohonan, string $status, ?string $keterangan, array $beforeRequest, array $afterRequest, ?string $filePath = null) { - - $filePath = null; - if ($file) { - $filePath = $file->store('permohonan_history_files', 'public'); - } - - try { $history = PermohonanHistory::create([ 'permohonan_id' => $permohonan->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/module.json b/module.json index 406f42d..4f82cdf 100644 --- a/module.json +++ b/module.json @@ -59,7 +59,7 @@ "attributes": [], "permission": "", "roles": ["administrator", "admin"] - } + } ] }, { @@ -69,7 +69,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["administrator", "admin"], + "roles": ["administrator", "admin","EO Appraisal","DD Appraisal"], "sub": [ { "title": "Otorisasi Penawaran", @@ -77,7 +77,7 @@ "classes": "", "attributes": [], "permission": "", - "roles": ["administrator", "admin"] + "roles": ["administrator", "admin","EO Appraisal","DD Appraisal"] } ] }, diff --git a/resources/views/penawaran/create.blade.php b/resources/views/penawaran/create.blade.php index d8b2b5c..225c174 100644 --- a/resources/views/penawaran/create.blade.php +++ b/resources/views/penawaran/create.blade.php @@ -15,8 +15,6 @@ Tambah Data Penawaran
- Detail Back diff --git a/resources/views/penawaran/edit.blade.php b/resources/views/penawaran/edit.blade.php index d49a6bd..9d5603a 100644 --- a/resources/views/penawaran/edit.blade.php +++ b/resources/views/penawaran/edit.blade.php @@ -19,7 +19,7 @@ Detail - + Back
@@ -39,8 +39,13 @@ Nama KJPP Sebelumnya
+ @php + $nama_kjpp = $penawaran->nama_kjpp_sebelumnya; + $nama = explode(' - ', $nama_kjpp)[1] ?? ''; + @endphp + + name="nama_kjpp_sebelumnya" readonly value="{{ $nama !== null ? $nama : '' }}">
@@ -49,7 +54,8 @@
+ name="biaya_kjpp_sebelumnya" readonly + value="{{ $penawaran->biaya_kjpp_sebelumnya !== null ? formatRupiah($penawaran->biaya_kjpp_sebelumnya) : '' }}">
@@ -132,8 +138,8 @@
-
- + @error('end_date') {{ $message }} @enderror diff --git a/resources/views/penawaran/index.blade.php b/resources/views/penawaran/index.blade.php index 405332a..a8f1d64 100644 --- a/resources/views/penawaran/index.blade.php +++ b/resources/views/penawaran/index.blade.php @@ -134,9 +134,6 @@ } else { // Jika tidak ada, tampilkan tombol "Tambah Penawaran" actionDiv.innerHTML = ` - - - diff --git a/resources/views/penawaran/show.blade.php b/resources/views/penawaran/show.blade.php index 1e7b935..f2f9938 100644 --- a/resources/views/penawaran/show.blade.php +++ b/resources/views/penawaran/show.blade.php @@ -20,8 +20,14 @@ Tambah Penawaran @endif - Back + @if ($penawaranExists) + Back + @endif + @if (!$penawaranExists) + Back + @endif
diff --git a/resources/views/penawaran/surat_tender.blade.php b/resources/views/penawaran/surat_tender.blade.php index ee65e8c..7db7b5c 100644 --- a/resources/views/penawaran/surat_tender.blade.php +++ b/resources/views/penawaran/surat_tender.blade.php @@ -12,43 +12,148 @@ Surat Tender
- @if (isset($penawaran->nomor_registrasi)) - Back - @else - Back - @endif + + pdfDownload + + @if (isset($penawaran->nomor_registrasi)) + Back + @else + Back + @endif

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->debiture->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 }} +

+ {{ $permohonan->user->name }} +

+
+ Sub Direktorat Appraisal

PT. Bank Artha Graha Internasional, Tbk.
Gedung Bank Artha Graha, Lantai 3
- Jl. Kwiitang Raya No 24-26, Jakarta Pusat - 10420.
+ Jl. Kwitang Raya No 24-26, Jakarta Pusat - 10420.
Telp. 021 - 3903040 (H)

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..0f058bc --- /dev/null +++ b/resources/views/penawaran/surat_tender_download.blade.php @@ -0,0 +1,178 @@ + + + + + + + + Surat Tender | {{ formatTanggalIndonesia(now()) }} + + + + +
+ Dear + @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 {{ $permohonan->debiture->name }}, tujuan penilaian untuk {{ $penawaran->tujuanPenilaianKJPP->name }}, laporan dalam bentuk {{ $penawaran->jenisLaporan->name }}, dengan data-data sebagai berikut: +
+ +
+ Aset Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->jenisJaminan->name }} + @endforeach + Lokasi Jaminan: @foreach ($permohonan->debiture->documents as $document) + {{ $document->address }}, Kel. @foreach ($villages as $village) + {{ $village->name }} + @endforeach, Kec. @foreach ($districts as $district) + {{ $district->name }} + @endforeach,@foreach ($cities as $city) + {{ ucwords(strtolower($city->name)) }} + @endforeach,@foreach ($provinces as $province) + {{ $province->name }} + @endforeach + @endforeach + + + Luas Tanah / Luas Bangunan: + @php + $luas_tanah = null; + $luas_bangunan = null; + @endphp + + @foreach ($permohonan->debiture->documents as $document) + @foreach ($document->detail as $detail) + @php + $details = json_decode($detail->details); + @endphp + + @if (is_object($details)) + @if (isset($details->luas_tanah) && is_numeric($details->luas_tanah)) + @php $luas_tanah = $details->luas_tanah; @endphp + @endif + + @if (isset($details->luas_bangunan) && is_numeric($details->luas_bangunan)) + @php $luas_bangunan = $details->luas_bangunan; @endphp + @endif + @endif + @endforeach + @endforeach + + @if ($luas_tanah !== null && $luas_bangunan !== null) + {{ $luas_tanah }} m2 / {{ $luas_bangunan }} m2 + @elseif ($luas_tanah !== null) + {{ $luas_tanah }} m2 + @elseif ($luas_bangunan !== null) + {{ $luas_bangunan }} m2 + @endif +
+ +
+ Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.
+ Mohon proposal dapat saya terima segera, sebelum {{ formatTanggalIndonesia2($penawaran->end_date) }} +
+ +
+ Best Regards,
+ {{ $permohonan->user->name }} +

+ {{ $permohonan->user->name }} +

+
+ + +
+ + + diff --git a/resources/views/permohonan/authorization/show.blade.php b/resources/views/permohonan/authorization/show.blade.php index c5d1d56..193999a 100644 --- a/resources/views/permohonan/authorization/show.blade.php +++ b/resources/views/permohonan/authorization/show.blade.php @@ -9,7 +9,7 @@ @include('lpj::component.detail-jaminan',['backLink' => 'authorization.index'])
-
+ @csrf
@@ -27,7 +27,7 @@ Upload File Revisi
- +
@@ -65,7 +65,7 @@ keteranganMessage.textContent = ''; } - if (!revisionFile.files.length) { + if (event.submitter === revisiBtn && !revisionFile.files.length) { event.preventDefault(); fileMessage.textContent = 'File revisi harus diunggah.'; fileMessage.classList.remove('hidden'); diff --git a/resources/views/permohonan/show.blade.php b/resources/views/permohonan/show.blade.php index 3ccb967..69b2018 100644 --- a/resources/views/permohonan/show.blade.php +++ b/resources/views/permohonan/show.blade.php @@ -6,7 +6,7 @@ @section('content')
- @include('lpj::component.detail-jaminan',['backLink' => 'prmohonan.index']) + @include('lpj::component.detail-jaminan', ['backLink' => 'permohonan.index'])
diff --git a/routes/registrasi.php b/routes/registrasi.php index db344be..f07265c 100644 --- a/routes/registrasi.php +++ b/routes/registrasi.php @@ -1,21 +1,22 @@ group(function () { - + // andy add // Route::name('registrasi.')->prefix('registrasi')->group(function () { - Route::controller(RegistrasiController::class)->group(function(){ + Route::controller(RegistrasiController::class)->group(function () { // Route::get('/', [RegistrasiController::class, 'index'])->name('registrasi.index'); Route::get('/registrasi', 'index')->name('registrasi.index'); Route::get('/registrasi/datatables', 'dataForDatatables')->name('registrasi.datatables'); - + // show data Route::get('/registrasi/{registrasi}', 'show')->name('registrasi.show'); Route::post('registrasi/showData', 'setData')->name('registrasi.showData'); @@ -23,49 +24,45 @@ Route::middleware(['auth'])->group(function () { Route::post('registrasi/setData', 'setData')->name('registrasi.setData'); Route::get('/registrasi/{registrasi}/edit', 'edit')->name('registrasi.edit'); Route::put('/registrasi/{registrasi}', 'update')->name('registrasi.update'); - }); // andy add Route::name('tender.')->prefix('tender')->group(function () { - // Proses Penawaran - Route::controller(ProsesPenawaranController::class)->group(function(){ - + // Proses Penawaran + Route::controller(ProsesPenawaranController::class)->group(function () { + Route::get('prosespenawaran', 'index')->name('prosespenawaran.index'); Route::get('prosespenawaran/datatables', 'dataForDatatables')->name('prosespenawaran.datatables'); Route::get('prosespenawaran/datatableskjppList_1', 'dataForDatatablesKJPPList_1')->name('prosespenawaran.datatableskjppList_1'); - - // show data - Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show'); - Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData'); - - Route::get('prosespenawaran/{prosespenawaran}/edit', 'edit')->name('prosespenawaran.edit'); + Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show'); + Route::get('prosespenawaran/{prosespenawaran}/edit', 'edit')->name('prosespenawaran.edit'); - // update one - Route::put('/prosespenawaran/{prosespenawaran}', 'update')->name('prosespenawaran.update'); - // update all - Route::put('/prosespenawaranAll/{prosespenawaranAll}', 'updateAll')->name('prosespenawaran.updateAll'); - // update draft - Route::put('/prosespenawaranDraft/{prosespenawaranDraft}', 'updateDraft')->name('prosespenawaran.updateDraft'); - // delete KJPP, status set = 0 - Route::put('/prosespenawaranKJPPStatus/{prosespenawaranKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaran.updateKJPPStatus'); - - // add KJPP to detail_penawaran - Route::post('prosespenawaran/store', 'store')->name('prosespenawaran.store'); - Route::post('prosespenawaran/storeUlang', 'storeUlang')->name('prosespenawaran.storeUlang'); + Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData'); - // edit proses penawaran ulang - Route::get('prosespenawaran/{prosespenawaran}/editulang', 'editulang')->name('prosespenawaran.editulang'); - Route::post('prosespenawaran/setDataUlang', 'setDataUlang')->name('prosespenawaran.setDataUlang'); - Route::put('/prosespenawaran2/{prosespenawaran2}', 'updateulang')->name('prosespenawaran.updateulang'); - Route::put('/prosespenawaranKJPPStatusUlang/{prosespenawaranKJPPStatusUlang}', 'updateKJPPStatusUlang')->name('prosespenawaran.updateKJPPStatusUlang'); - + // update one + Route::put('/prosespenawaran/{prosespenawaran}', 'update')->name('prosespenawaran.update'); + // update all + Route::put('/prosespenawaranAll/{prosespenawaranAll}', 'updateAll')->name('prosespenawaran.updateAll'); + // update draft + Route::put('/prosespenawaranDraft/{prosespenawaranDraft}', 'updateDraft')->name('prosespenawaran.updateDraft'); + // delete KJPP, status set = 0 + Route::put('/prosespenawaranKJPPStatus/{prosespenawaranKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaran.updateKJPPStatus'); + + // add KJPP to detail_penawaran + Route::post('prosespenawaran/store', 'store')->name('prosespenawaran.store'); + Route::post('prosespenawaran/storeUlang', 'storeUlang')->name('prosespenawaran.storeUlang'); + + // edit proses penawaran ulang + Route::get('prosespenawaran/{prosespenawaran}/editulang', 'editulang')->name('prosespenawaran.editulang'); + Route::post('prosespenawaran/setDataUlang', 'setDataUlang')->name('prosespenawaran.setDataUlang'); + Route::put('/prosespenawaran2/{prosespenawaran2}', 'updateulang')->name('prosespenawaran.updateulang'); + Route::put('/prosespenawaranKJPPStatusUlang/{prosespenawaranKJPPStatusUlang}', 'updateKJPPStatusUlang')->name('prosespenawaran.updateKJPPStatusUlang'); }); // Proses Penawaran Ulang - Route::controller(ProsesPenawaranUlangController::class)->group(function(){ + Route::controller(ProsesPenawaranUlangController::class)->group(function () { Route::get('prosespenawaranulang', 'index')->name('prosespenawaranulang.index'); Route::get('prosespenawaranulang/datatables', 'dataForDatatables')->name('prosespenawaranulang.datatables'); Route::get('prosespenawaranulang/{prosespenawaranulang}/edit', 'edit')->name('prosespenawaranulang.edit'); @@ -76,14 +73,13 @@ Route::middleware(['auth'])->group(function () { // update KJPP data, detail penawaran Route::put('/prosespenawaranulang/{prosespenawaranulang}', 'update')->name('prosespenawaranulang.update'); - // delete KJPP, status set = 0 + // delete KJPP, status set = 0 Route::put('/prosespenawaranulangKJPPStatus/{prosespenawaranulangKJPPStatus}', 'updateKJPPStatus')->name('prosespenawaranulang.updateKJPPStatus'); - }); - }); - + }); + Route::name('otorisasitender.')->prefix('otorisasitender')->group(function () { - Route::controller(OtorisasiPenawaranController::class)->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'); @@ -94,23 +90,22 @@ Route::middleware(['auth'])->group(function () { // update KJPP data, detail penawaran Route::put('/otorisasiPenawaranKJPP/{penawaran}', 'otorisasiPenawaranKJPP')->name('penawaran.otorisasiPenawaranKJPP'); - }); }); - Route::controller(SpkController::class)->group(function(){ + Route::controller(SpkController::class)->group(function () { Route::get('/spk/dokumennya', 'dokumennya')->name('spk.dokumennya'); - + Route::get('/spk', 'index')->name('spk.index'); Route::get('/spk/datatables', 'dataForDatatables')->name('spk.datatables'); Route::get('/spk/{spk}', 'show')->name('spk.show'); Route::get('/spk/{spk}/edit', 'edit')->name('spk.edit'); - Route::put('/spk/{spk}', 'update')->name('spk.update'); - + Route::put('/spk/{spk}', 'update')->name('spk.update'); + Route::get('spk/{spk}/download', 'download')->name('spk.download'); }); - Route::controller(RegistrasiFinalController::class)->group(function(){ + Route::controller(RegistrasiFinalController::class)->group(function () { Route::get('/registrasifinal', 'index')->name('registrasifinal.index'); Route::get('/registrasifinal/datatables', 'dataForDatatables')->name('registrasifinal.datatables'); Route::get('/registrasifinal/{registrasifinal}', 'show')->name('registrasifinal.show'); @@ -121,4 +116,3 @@ Route::middleware(['auth'])->group(function () { Route::put('/registrasifinal/{registrasifinal}', 'update')->name('registrasifinal.update'); }); }); - diff --git a/routes/web.php b/routes/web.php index c95935a..39a80e2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -393,6 +393,7 @@ Route::middleware(['auth'])->group(function () { Route::get('penawaran/{noreg}/suratTender', [TenderController::class, 'showSuratTender'])->name( 'penawaran.showSuratTender' ); + Route::get('penawaran/{noreg}/suratTender/downloadpdf', [TenderController::class, 'downloadSuratTender'])->name('penawaran.downloadSuratTender'); // Penawaran Ulang Route::get('penawaran/ulang', [TenderController::class, 'penawaran_ulang_index'])->name(