Merge branch 'staging' into feature/senior-officer
This commit is contained in:
@@ -1,119 +1,150 @@
|
||||
<?php
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Modules\Lpj\Models\PenawaranDetailTender;
|
||||
use Modules\Lpj\Models\PenawaranTender;
|
||||
|
||||
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');
|
||||
}
|
||||
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');
|
||||
foreach ($words as $index => $word) {
|
||||
$words[$index] = strtoupper($word);
|
||||
}
|
||||
|
||||
// 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 implode(' ', $words);
|
||||
}
|
||||
|
||||
return $allow;
|
||||
}
|
||||
// andy add
|
||||
|
||||
// convert
|
||||
function convertSlug($slug) {
|
||||
|
||||
$words = explode('-', $slug);
|
||||
function hitungHariKerja($tanggalMulai, $tanggalSelesai)
|
||||
{
|
||||
$tanggalMulai = Carbon::parse($tanggalMulai)->startOfDay();
|
||||
$tanggalSelesai = Carbon::parse($tanggalSelesai)->endOfDay();
|
||||
|
||||
foreach ($words as $index => $word) {
|
||||
$words[$index] = strtoupper($word);
|
||||
$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
|
||||
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
10
app/Models/HolidayCalendar.php
Normal file
10
app/Models/HolidayCalendar.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Lpj\Models;
|
||||
|
||||
use Modules\Basicdata\Models\HolidayCalendar as BasicdataHolidayCalendar;
|
||||
|
||||
class HolidayCalendar extends BasicdataHolidayCalendar
|
||||
{
|
||||
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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->datetime('end_date')->change();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('penawaran', function (Blueprint $table) {
|
||||
$table->date('end_date')->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
Tambah Data Penawaran
|
||||
</h3>
|
||||
<div class="flex items-center gap-2">
|
||||
<a href="{{ route('tender.penawaran.show', $noreg) }}" 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>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<a href="{{ route('tender.penawaran.show', $noreg) }}" 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">
|
||||
<a href="{{ route('tender.penawaran.ulang.index') }}" class="btn btn-xs btn-info">
|
||||
<i class="ki-filled ki-exit-left"></i> Back
|
||||
</a>
|
||||
</div>
|
||||
@@ -39,8 +39,13 @@
|
||||
Nama KJPP Sebelumnya
|
||||
</label>
|
||||
<div class="flex flex-wrap items-baseline w-full">
|
||||
@php
|
||||
$nama_kjpp = $penawaran->nama_kjpp_sebelumnya;
|
||||
$nama = explode(' - ', $nama_kjpp)[1] ?? '';
|
||||
@endphp
|
||||
|
||||
<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 ?? '' }}">
|
||||
name="nama_kjpp_sebelumnya" readonly value="{{ $nama !== null ? $nama : '' }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
|
||||
@@ -49,7 +54,8 @@
|
||||
</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 ?? '' }}">
|
||||
name="biaya_kjpp_sebelumnya" readonly
|
||||
value="{{ $penawaran->biaya_kjpp_sebelumnya !== null ? formatRupiah($penawaran->biaya_kjpp_sebelumnya) : '' }}">
|
||||
</div>
|
||||
<label class="form-label max-w-56">
|
||||
Tanggal Penilaian Sebelumnya
|
||||
@@ -57,7 +63,7 @@
|
||||
<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 ?? '' }}">
|
||||
value="{{ $penawaran->tanggal_penilaian_sebelumnya !== null ? formatTanggalIndonesia($penawaran->tanggal_penilaian_sebelumnya) : '' }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
|
||||
@@ -132,8 +138,8 @@
|
||||
</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) }}">
|
||||
<input class="input @error('end_date') border-danger @enderror" type="date" name="end_date"
|
||||
value="{{ old('end_date', $penawaran->end_date ? date('Y-m-d', strtotime($penawaran->end_date)) : '') }}">
|
||||
@error('end_date')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
|
||||
@@ -134,9 +134,6 @@
|
||||
} else {
|
||||
// Jika tidak ada, tampilkan tombol "Tambah Penawaran"
|
||||
actionDiv.innerHTML = `
|
||||
<a class="btn btn-sm btn-icon btn-clear btn-warning" title="Detail" href="/tender/penawaran/${nomor_registrasi}/show">
|
||||
<i class="ki-outline ki-eye"></i>
|
||||
</a>
|
||||
<a href="/tender/penawaran/${nomor_registrasi}/create" class="btn btn-sm btn-icon btn-clear btn-primary" title="Penawaran">
|
||||
<i class="ki-outline ki-notepad-edit"></i>
|
||||
</a>
|
||||
|
||||
@@ -20,8 +20,14 @@
|
||||
<a href="{{ route('tender.penawaran.createPenawaran', $noreg) }}" class="btn btn-xs btn-primary"
|
||||
title="Penawaran"><i class="ki-filled ki-arrow-circle-right"></i> Tambah Penawaran</a>
|
||||
@endif
|
||||
<a href="{{ route('tender.penawaran.index') }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@if ($penawaranExists)
|
||||
<a href="{{ route('tender.penawaran.ulang.index') }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@endif
|
||||
@if (!$penawaranExists)
|
||||
<a href="{{ route('tender.penawaran.index') }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body grid gap-5">
|
||||
|
||||
@@ -12,43 +12,148 @@
|
||||
Surat Tender
|
||||
</h3>
|
||||
<div class="flex items-center gap-2">
|
||||
@if (isset($penawaran->nomor_registrasi))
|
||||
<a href="{{ route('tender.penawaran.editPenawaran', $noreg) }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@else
|
||||
<a href="{{ route('tender.penawaran.createPenawaran', $noreg) }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@endif
|
||||
<a href="{{ route('tender.penawaran.downloadSuratTender', $noreg) }}" class="btn btn-xs btn-light">
|
||||
<img src="{{ asset('img/pdf.png') }}" width="25" alt="pdf"></img>Download
|
||||
</span>
|
||||
@if (isset($penawaran->nomor_registrasi))
|
||||
<a href="{{ route('tender.penawaran.editPenawaran', $noreg) }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@else
|
||||
<a href="{{ route('tender.penawaran.createPenawaran', $noreg) }}" class="btn btn-xs btn-info"><i
|
||||
class="ki-filled ki-exit-left"></i> Back</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body grid gap-5">
|
||||
<p>Dear
|
||||
<span class="font-bold">{{ ucwords(auth()->user()->name) ?? 'Tidak Ada' }}</span>
|
||||
<span class="font-bold">
|
||||
@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
|
||||
</span>
|
||||
</p>
|
||||
<p>Mohon untuk dibuatkan proposal jasa appraisal atas nama <span
|
||||
class="font-bold">{{ ucwords($penawaran->permohonan->user->name) }}</span>, tujuan penilaian
|
||||
class="font-bold">{{ ucwords($permohonan->debiture->name) }}</span>, tujuan penilaian
|
||||
untuk <span class="font-bold">
|
||||
@foreach ($penawaran->tujuanPenilaianKJPP as $tujuanPenilaianKJPP)
|
||||
{{ $tujuanPenilaianKJPP->name }}
|
||||
@endforeach
|
||||
{{ $penawaran->tujuanPenilaianKJPP->name }}
|
||||
</span>, laporan dalam bentuk <span class="font-bold">{{ $penawaran->jenisLaporan->name }}</span>,
|
||||
dengan data-data sebagai berikut :</p>
|
||||
<ul>
|
||||
<li>Aset Jaminan: <span class="font-bold">[otomasi dari tabel permohonan]</span></li>
|
||||
<li>Lokasi Jaminan: <span class="font-bold">[otomasi dari tabel permohonan]</span></li>
|
||||
<li>LT / LB: <span class="font-bold">[otomasi dari tabel permohonan]</span></li>
|
||||
<li>Aset Jaminan:
|
||||
<span class="font-bold">
|
||||
@foreach ($permohonan->debiture->documents as $document)
|
||||
{{ $document->jenisJaminan->name }}
|
||||
@endforeach
|
||||
</span>
|
||||
</li>
|
||||
<li>Lokasi Jaminan:
|
||||
<span class="font-bold">
|
||||
@foreach ($permohonan->debiture->documents as $document)
|
||||
{{ $document->address }}
|
||||
@if (isset($document->jenisJaminan))
|
||||
, 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
|
||||
@endif
|
||||
@endforeach
|
||||
</span>
|
||||
</li>
|
||||
<li>Luas Tanah / Luas Bangunan:
|
||||
<span class="font-bold">
|
||||
@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 }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
|
||||
@elseif ($luas_tanah !== null)
|
||||
{{ $luas_tanah }} m<sup>2</sup>
|
||||
@elseif ($luas_bangunan !== null)
|
||||
{{ $luas_bangunan }} m<sup>2</sup>
|
||||
@endif
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi.</p>
|
||||
<p>Mohon proposal dapat saya terima segera, sebelum
|
||||
<span class="font-bold">{{ formatTanggalIndonesia($penawaran->end_date) }} pukul 17.00 WIB</span>
|
||||
<span class="font-bold">{{ formatTanggalIndonesia2($penawaran->end_date) }}</span>
|
||||
</p>
|
||||
<p>Best Regards,
|
||||
<span class="font-bold">[otomasi dari nama dan tanda tangan user penginput]</span>
|
||||
Sub Direktorat Appraisal
|
||||
<div class="font-bold">
|
||||
<img src="{{ asset('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}"
|
||||
alt="{{ $permohonan->user->name }}" width="200">
|
||||
<p>
|
||||
{{ $permohonan->user->name }}
|
||||
</p>
|
||||
</div>
|
||||
Sub Direktorat Appraisal
|
||||
</p>
|
||||
<p>PT. Bank Artha Graha Internasional, Tbk.<br>
|
||||
Gedung Bank Artha Graha, Lantai 3<br>
|
||||
Jl. Kwiitang Raya No 24-26, Jakarta Pusat - 10420.<br>
|
||||
Jl. Kwitang Raya No 24-26, Jakarta Pusat - 10420.<br>
|
||||
Telp. 021 - 3903040 (H)</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
178
resources/views/penawaran/surat_tender_download.blade.php
Normal file
178
resources/views/penawaran/surat_tender_download.blade.php
Normal file
@@ -0,0 +1,178 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Surat Tender | {{ formatTanggalIndonesia(now()) }}</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Calibri;
|
||||
margin: 20px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: 20px;
|
||||
white-space: pre-line;
|
||||
/* To handle line breaks in text */
|
||||
}
|
||||
|
||||
.content-max {
|
||||
margin-top: 20px;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
.flex-wrap {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.important {
|
||||
font-weight: bold;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.signature {
|
||||
margin-top: 40px;
|
||||
font-family: 'Brush Script MT', cursive;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top: 20px;
|
||||
font-size: 0.9em;
|
||||
color: #555;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
Dear <span class="important">
|
||||
@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
|
||||
</span>
|
||||
|
||||
<div class="content">
|
||||
Mohon untuk dibuatkan proposal jasa appraisal atas nama <span
|
||||
class="important">{{ $permohonan->debiture->name }}</span>, tujuan penilaian untuk <span
|
||||
class="important">{{ $penawaran->tujuanPenilaianKJPP->name }}</span>, laporan dalam bentuk <span
|
||||
class="important">{{ $penawaran->jenisLaporan->name }}</span>, dengan data-data sebagai berikut:
|
||||
</div>
|
||||
|
||||
<div class="content-max">
|
||||
Aset Jaminan: @foreach ($permohonan->debiture->documents as $document)
|
||||
{{ $document->jenisJaminan->name }}
|
||||
@endforeach
|
||||
<span class="flex-wrap">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
|
||||
</span>
|
||||
|
||||
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 }} m<sup>2</sup> / {{ $luas_bangunan }} m<sup>2</sup>
|
||||
@elseif ($luas_tanah !== null)
|
||||
{{ $luas_tanah }} m<sup>2</sup>
|
||||
@elseif ($luas_bangunan !== null)
|
||||
{{ $luas_bangunan }} m<sup>2</sup>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
Harap proposal dibuat dengan harga yang minimal sehingga tidak perlu tawar menawar lagi. <br />
|
||||
Mohon proposal dapat saya terima segera, sebelum <span
|
||||
class="important">{{ formatTanggalIndonesia2($penawaran->end_date) }}</span>
|
||||
</div>
|
||||
|
||||
<div class="signature">
|
||||
Best Regards,<br />
|
||||
<img src="{{ public_path('storage/signatures/' . $permohonan->user->id . '/' . $permohonan->user->sign) }}"
|
||||
alt="{{ $permohonan->user->name }}" width="200">
|
||||
<p>
|
||||
{{ $permohonan->user->name }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
PT. Bank Artha Graha Internasional, Tbk.<br>
|
||||
Gedung Bank Artha Graha, Lantai 3<br>
|
||||
Jl. Kwitang Raya No 24-26, Jakarta Pusat - 10420.<br>
|
||||
Telp. 021 - 3903040 (H)
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -9,7 +9,7 @@
|
||||
@include('lpj::component.detail-jaminan',['backLink' => 'authorization.index'])
|
||||
|
||||
<div class="card">
|
||||
<form action="{{ route('authorization.update', $permohonan->id) }}" method="POST" id="authorizationForm">
|
||||
<form action="{{ route('authorization.update', $permohonan->id) }}" method="POST" id="authorizationForm" enctype="multipart/form-data">
|
||||
<input type="hidden" name="_method" value="PUT">
|
||||
@csrf
|
||||
<div class="card-body lg:py-7.5">
|
||||
@@ -27,7 +27,7 @@
|
||||
Upload File Revisi
|
||||
</label>
|
||||
<div class="flex flex-wrap items-baseline w-full">
|
||||
<input type="file" class="file-input" id="revisionFile" name="revisionFile">
|
||||
<input type="file" class="file-input" id="revisionFile" name="attachment">
|
||||
<em class="alert text-danger text-sm hidden" id="file-message"></em>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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');
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
@section('content')
|
||||
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
|
||||
@include('lpj::component.detail-jaminan',['backLink' => 'prmohonan.index'])
|
||||
@include('lpj::component.detail-jaminan', ['backLink' => 'permohonan.index'])
|
||||
|
||||
<div class="card">
|
||||
<form action="{{ route('permohonan.print', $permohonan->id) }}" method="GET">
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Modules\Lpj\Http\Controllers\SpkController;
|
||||
use Modules\Lpj\Http\Controllers\RegistrasiController;
|
||||
use Modules\Lpj\Http\Controllers\ProsesPenawaranController;
|
||||
use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController;
|
||||
use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController;
|
||||
use Modules\Lpj\Http\Controllers\SpkController;
|
||||
use Modules\Lpj\Http\Controllers\RegistrasiFinalController;
|
||||
use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController;
|
||||
use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController;
|
||||
|
||||
Route::middleware(['auth'])->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');
|
||||
@@ -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');
|
||||
Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show');
|
||||
Route::get('prosespenawaran/{prosespenawaran}/edit', 'edit')->name('prosespenawaran.edit');
|
||||
|
||||
// show data
|
||||
Route::get('/prosespenawaran/{prosespenawaran}', 'show')->name('prosespenawaran.show');
|
||||
Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData');
|
||||
Route::post('prosespenawaran/setData', 'setData')->name('prosespenawaran.setData');
|
||||
|
||||
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');
|
||||
|
||||
// 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');
|
||||
// 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');
|
||||
@@ -78,12 +75,11 @@ Route::middleware(['auth'])->group(function () {
|
||||
Route::put('/prosespenawaranulang/{prosespenawaranulang}', 'update')->name('prosespenawaranulang.update');
|
||||
// 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,11 +90,10 @@ 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');
|
||||
@@ -110,7 +105,7 @@ Route::middleware(['auth'])->group(function () {
|
||||
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');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user