Feature Registrasi menambahkan inputan SLA (kebutuhan SPK PDF), Feature SPK menambahkan parameter SLA generate number SPK

This commit is contained in:
Andy Chaerudin
2024-11-25 11:14:31 +07:00
parent c08b93aa81
commit f8415939ea
12 changed files with 367 additions and 79 deletions

View File

@@ -106,11 +106,14 @@ use Modules\Lpj\Models\HolidayCalendar;
// generate last penawaran.code
function onLastnumberCodePenawaran(): string
{
// chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
// ambil code terakhir
$maxCode = PenawaranTender::max('code');
// chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
// $penawaran = PenawaranTender::latest()->first();
$penawaran = PenawaranTender::where('code','=',$maxCode)->first();
$code_penawaran_last='';
// nomor di set 0001
$noUrutAkhirString = sprintf("%04s", 1);
if($penawaran)
{
@@ -121,10 +124,124 @@ use Modules\Lpj\Models\HolidayCalendar;
{
$noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
}
// jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 0001
}
return 'NP'.Carbon::now()->format('y').$noUrutAkhirString;
}
// generate last penawaran.no_spk
function onLastnumberCodePenawaranSPK($jenis_laporan_code): string
{
// 20241124_001 ==> spk_no_core
// XXX / PJ / JKT / MONTH-ROM / FR|SR / 2024
// 001 / PJ / JKT / XI / FR / 2024
$maxCode = PenawaranTender::max('spk_no_core');
$penawaran = PenawaranTender::where('spk_no_core','=',$maxCode)->first();
$no_spk_penawaran_last='';
$year_penawaran_last='';
$year_now = Carbon::now()->year;
// nomor di set 001
$noUrutAkhirString = sprintf("%03s", 1);
if($penawaran)
{
$no_spk_penawaran_last = substr ($maxCode, -3);
$year_penawaran_last = substr ($maxCode, 0, 4);
if($year_now == $year_penawaran_last)
{
$noUrutAkhirString = sprintf("%03s", abs($no_spk_penawaran_last + 1));
}
// jika ternyata tahun tdk sama (kurang dari tahun sekarang), maka nomor di set 001
}
$month = onRomawi(Carbon::now()->month);
$lastSPK = $noUrutAkhirString.' / PJ / JKT / '. $month .' / ' .$jenis_laporan_code.' / '.$year_now;
return $lastSPK;
}
function onRomawi(int $bln): string
{
switch ($bln){
case 1:
return "I";
break;
case 2:
return "II";
break;
case 3:
return "III";
break;
case 4:
return "IV";
break;
case 5:
return "V";
break;
case 6:
return "VI";
break;
case 7:
return "VII";
break;
case 8:
return "VIII";
break;
case 9:
return "IX";
break;
case 10:
return "X";
break;
case 11:
return "XI";
break;
case 12:
return "XII";
break;
}
}
function penyebut($nilai) {
$nilai = abs($nilai);
$huruf = array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas");
$temp = "";
if ($nilai < 12) {
$temp = " ". $huruf[$nilai];
} else if ($nilai <20) {
$temp = penyebut($nilai - 10). " belas";
} else if ($nilai < 100) {
$temp = penyebut($nilai/10)." puluh". penyebut($nilai % 10);
} else if ($nilai < 200) {
$temp = " seratus" . penyebut($nilai - 100);
} else if ($nilai < 1000) {
$temp = penyebut($nilai/100) . " ratus" . penyebut($nilai % 100);
} else if ($nilai < 2000) {
$temp = " seribu" . penyebut($nilai - 1000);
} else if ($nilai < 1000000) {
$temp = penyebut($nilai/1000) . " ribu" . penyebut($nilai % 1000);
} else if ($nilai < 1000000000) {
$temp = penyebut($nilai/1000000) . " juta" . penyebut($nilai % 1000000);
} else if ($nilai < 1000000000000) {
$temp = penyebut($nilai/1000000000) . " milyar" . penyebut(fmod($nilai,1000000000));
} else if ($nilai < 1000000000000000) {
$temp = penyebut($nilai/1000000000000) . " trilyun" . penyebut(fmod($nilai,1000000000000));
}
return $temp;
}
function terbilang($nilai) {
if($nilai<0) {
$hasil = "minus ". trim(penyebut($nilai));
} else {
$hasil = trim(penyebut($nilai));
}
return $hasil;
}
// andy add

View File

@@ -120,7 +120,7 @@
}
} else {
$data['status'] = 'error';
$data['message'] ['message_ajax'] = ["no ajax request"];
$data['message']['message_ajax'] = ["no ajax request"];
}
return response()->json($data);
@@ -149,6 +149,7 @@
if ($tindakan == 0) {
$dataku['jenis_penilaian_id'] = $request->jenis_penilaian;
$dataku['region_id'] = $request->region;
$dataku['sla'] = $request->sla;
$dataku['status'] = 'registered';
if ($request->catatan2) {
$dataku['registrasi_catatan'] = $request->catatan2;
@@ -205,6 +206,12 @@
$validateIt['region'] = ['required'];
$messageIt ['region.required'] = 'Silahkan pilih Region';
}
else
{
$validateIt['sla'] = ['required'];
$messageIt ['sla.required'] = 'Silahkan isi SLA';
}
} elseif ($tindakan == 1) {
$validateIt['catatan'] = ['required'];
$messageIt ['catatan.required'] = 'Silahkan isi Catatan';

View File

@@ -104,12 +104,11 @@ use Illuminate\Support\Facades\Auth;
}
// data dokumen_spk
if($obj->dokumen)
// data spk_dokumen_path
if($obj->penawaran->spk_dokumen_path)
{
$spkpenawaran_path = Storage::url($obj->dokumen);
// dd($spkpenawaran_path);
$data[$i]->dokumen = $spkpenawaran_path;
$spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path);
$data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path;
}
$i++;
@@ -151,6 +150,7 @@ use Illuminate\Support\Facades\Auth;
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
@@ -159,7 +159,9 @@ use Illuminate\Support\Facades\Auth;
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
'jenis_laporan.name as jenis_laporan_name',
'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name',
'jenis_laporan.code as jenis_laporan_code'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
@@ -168,19 +170,30 @@ use Illuminate\Support\Facades\Auth;
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first();
if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
// generate no spk
$spk_no_last=$penawaran->spk_no;
if(!$spk_no_last)
{
$spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code);
$penawaran->spk_no = $spk_no_last;
}
// generate no spk
return view('lpj::spk.edit', compact('data', 'penawaran'));
}
public function update(Request $request, $id): JsonResponse
{
// init
$data1 = array();
$dataPermohonan = array();
$data1 = [];
// $dataPermohonan = array();
$dataPenawaran = [];
// data
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
@@ -194,7 +207,8 @@ use Illuminate\Support\Facades\Auth;
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
'jenis_laporan.name as jenis_laporan_name',
'jenis_laporan.code as jenis_laporan_code'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
@@ -202,7 +216,7 @@ use Illuminate\Support\Facades\Auth;
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first();
if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
@@ -213,15 +227,33 @@ use Illuminate\Support\Facades\Auth;
$newFileNameWithPath = $folderPath . $newFileName;
// update table permohonan
$dataPermohonan=['dokumen' => $newFileNameWithPath];
$data->update($dataPermohonan);
// $dataPermohonan=['dokumen' => $newFileNameWithPath];
// $data->update($dataPermohonan);
// update table permohonan
// update table penawaran
$dataPenawaran['spk_dokumen_path'] = $newFileNameWithPath;
if(!$penawaran->spk_no)
{
$spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code);
// $penawaran->no_spk = $no_spk_last;
$date_now = Carbon::now()->format('Ymd');// 20240124
$spk_number = substr ($spk_no_last, 0, 3);
$dataPenawaran['spk_no'] = $spk_no_last;
$dataPenawaran['spk_no_core'] = $date_now.'_'.$spk_number;
$penawaran->spk_no = $spk_no_last;
}
$penawaranM = PenawaranTender::find($penawaran->id);
$penawaranM->update($dataPenawaran);
// update table penawaran
// pdf path
$spkpenawaran_path = Storage::url($newFileNameWithPath);
$pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran'));
$pdf->setPaper('A4', 'portrait');
$content = $pdf->download()->getOriginalContent();
Storage::put('public/'.$newFileNameWithPath,$content);
@@ -260,8 +292,10 @@ use Illuminate\Support\Facades\Auth;
}
public function download($id) {
$document = Permohonan::find($id);
// dokumen pdf diambil dari penawaran.spk_dokumen_path
$permohonan = Permohonan::find($id);
$document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first();
return response()->download(storage_path('app/public/' .$document->dokumen));
return response()->download(storage_path('app/public/' .$document->spk_dokumen_path));
}
}

View File

@@ -40,6 +40,7 @@
'registrasi_at',
'jenis_penilaian_id',
'region_id',
'sla'
];
protected static function boot()
@@ -153,4 +154,9 @@
{
return $this->hasMany(PermohonanHistory::class, 'permohonan_id', 'id')->orderBy('created_at', 'desc');
}
public function dokumenjaminan()
{
return $this->hasMany(DokumenJaminan::class);
}
}

View File

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

View File

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

View File

@@ -72,6 +72,15 @@
<em id="{{$route[0]}}_catatan_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="{{ $route[0] }}_div_sla" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA (dalam satuan hari)
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="inputku input" name="{{$route[0]}}_sla" id="{{$route[0]}}_sla" placeholder="dalam satuan hari" type="text" />
<em id="{{$route[0]}}_sla_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="{{ $route[0] }}_div_region" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Region

View File

@@ -13,6 +13,7 @@
$("#{{ $route[0] }}_div_jenis_pilihan").show();
$("#{{ $route[0] }}_div_catatan").hide();
$("#{{ $route[0] }}_div_region").hide();
$("#{{ $route[0] }}_div_sla").hide();
$("#{{ $route[0] }}_div_catatan2").show();
// prepare data
setData();
@@ -95,6 +96,7 @@
$("#{{ $route[0] }}_div_jenis_pilihan").show();
$("#{{ $route[0] }}_catatan").val('');
$("#{{ $route[0] }}_div_catatan").hide();
$("#{{ $route[0] }}_div_catatan2").show();
}
else
@@ -103,6 +105,7 @@
$("#{{ $route[0] }}_div_jenis_pilihan").hide();
$("#{{ $route[0] }}_div_catatan").show();
$("#{{ $route[0] }}_div_catatan2").hide();
$("#{{ $route[0] }}_div_sla").hide();
}
});
@@ -119,6 +122,7 @@
let region = $("#{{$route[0]}}_region").val();
let catatan = $("#{{$route[0]}}_catatan").val();
let catatan2 = $("#{{$route[0]}}_catatan2").val();
let sla = $("#{{$route[0]}}_sla").val();
if(jenis_penilaian==0)
jenis_penilaian='';
@@ -134,6 +138,7 @@
input_data.region= region;
input_data.catatan = catatan;
input_data.catatan2 = catatan2;
input_data.sla = sla;
let useURL= '{{ route($route[0].'.update', $id) }}';
$.ajax({
@@ -164,6 +169,11 @@
$("#{{$route[0]}}_region").addClass(" border-danger");
$("#{{$route[0]}}_region_msg").text(value);
}
if ("sla" === index) {
$("#{{$route[0]}}_sla").addClass(" border-danger");
$("#{{$route[0]}}_sla_msg").text(value);
}
});
}
else
@@ -204,11 +214,18 @@
{
// INTERNAL, show region
$("#{{ $route[0] }}_div_region").show();
$("#{{ $route[0] }}_div_sla").hide();
}
else
else if('2' == idNya)
{
$("#{{ $route[0] }}_div_sla").show();
$("#{{ $route[0] }}_div_region").hide();
}
else if('0' == idNya)
{
// selain INTERNAL, hide region
$("#{{ $route[0] }}_div_region").hide();
$("#{{ $route[0] }}_div_sla").hide();
}
});

View File

@@ -60,6 +60,15 @@
<em id="{{$route[0]}}_catatan_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="{{ $route[0] }}_div_sla" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA (dalam satuan hari)
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="inputku input" name="{{$route[0]}}_sla" id="{{$route[0]}}_sla" placeholder="dalam satuan hari" type="text" />
<em id="{{$route[0]}}_sla_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="{{ $route[0] }}_div_region" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Region

View File

@@ -52,8 +52,7 @@
<center>
<h2 style="text-decoration: underline;">SURAT PERINTAH KERJA</h2>
<p>
No. XXX / PJ / JKT / <?php echo date('M'); ?>
/ FR / <?php echo date('Y'); ?>
No. {{ $penawaran->spk_no }}
<data id="date"></data>
</p>
<p>Tanggal: <?php echo date('d F Y'); ?></p>
@@ -72,82 +71,98 @@
<h3>Rincian Penilaian</h3>
<table border="2" width="100%">
<tr>
<td></td>
</tr>
<tr>
<td>Tujuan Penilaian</td>
<td width="25%">Tujuan Penilaian</td>
<td>:</td>
<td>
<td width="75%">
<span style="color: red;">{{ $data->tujuanPenilaian->name }}</span>
</td>
</tr>
<tr>
<td>Jenis Laporan</td>
<td width="20%">Jenis Laporan</td>
<td>:</td>
<td>
<span style="color: red;">{{ $penawaran->jenis_laporan_name }}</span>
</td>
</tr>
<tr>
<td>Data Jaminan</td>
@php $i=1; @endphp
@foreach ($data->debiture->documents as $dokumen)
<tr valign="top">
<td width="25%">Lokasi Jaminan {{ $i }}</td>
<td>:</td>
<td>
<span style="color: red;">{{ $data->jenis_jaminan_name }}, {{ $data->dokumen_jaminan_address }}</span>
<td width="75%">
<span style="color: red;">{{ formatAlamat($dokumen) }}</span>
</td>
</tr>
<tr valign="top">
<td>Dokumen Jaminan {{ $i }}</td>
<td>:</td>
<td>
<span style="color: red;">
@foreach ($data->dokumenjaminan as $dokumen_jaminans)
@if ($dokumen->id== $dokumen_jaminans->id)
@foreach ($dokumen_jaminans->detail as $detailku)
{{ $detailku->name.', ' }}
@endforeach
@endif
@endforeach
</span>
</td>
</tr>
@php $i++; @endphp
@endforeach
<tr>
<td>Fee / Harga Penilaian</td>
<td>:</td>
<td>
<span style="color: red;">{{ formatRupiah($penawaran->detail_penawaran_biaya_penawaran) }}</span>
<span style="color: red;">{{ formatRupiah($penawaran->detail_penawaran_biaya_penawaran) }}</span> (include ppn 11%)
</td>
</tr>
<tr>
<td>Jangka Waktu</td>
<td>:</td>
<td><span style="color: red;"> {{ formatTanggalIndonesia($penawaran->start_date) }} - {{ formatTanggalIndonesia($penawaran->end_date) }}</span></td>
<td><span style="color: red;"> </span></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">i</td>
<td>
Resume akan disampaikan dalam <span style="color: red;">[SLA Resume - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak.
Resume akan disampaikan dalam <span style="color: red;">{{ round(($data->sla)/2) }} ({{ ucfirst(terbilang(round(($data->sla)/2))) }})</span> hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak.
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">ii</td>
<td>
Laporan penilaian lengkap akan disampaikan dalam <span style="color: red;">[SLA Final - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja sesuai proposal penawaran.
Laporan penilaian lengkap akan disampaikan dalam <span style="color: red;">{{ $data->sla }} ({{ ucfirst(terbilang($data->sla)) }})</span> hari kerja sesuai proposal penawaran.
</td>
</tr>
</table>
<br/>
<h3>Dengan ketentuan dalam melaksanakan pekerjaan sebagai berikut:</h3>
<table border="0" width="100%">
<tr>
<tr valign="top">
<td>1.</td>
<td>
Pembayaran sebesar 100% dari total jasa dibayarkan setelah Bank menerima buku laporan dan bukti penagihan asli (invoice / kwitansi dan faktur pajak).
</td>
</tr>
<tr>
<tr valign="top">
<td>2.</td>
<td>
Segala bentuk aktivitas komunikasi lisan atau tertulis antara lain kelengkapan dokumen, imbalan jasa, laporan penilaian dan lainnya baik dari Nasabah atau KJPP harus melalui Bank.
</td>
</tr>
<tr>
<tr valign="top">
<td>3.</td>
<td>
Selanjutnya sebagai tanda persetujuan, setelah saudara tandatangani di atas materai Rp 10.000,- (materai sesuai ketentuan yang berlaku) agar dikembalikan kepada kami selambat-lambatnya 1 (satu) hari kerja setelah tanggal surat ini.
</td>
</tr>
<tr>
<tr valign="top">
<td>4.</td>
<td>
Apabila diperlukan surat representasi wajib diberikan bersamaan dengan dikembalikannya SPK kepada kami.
</td>
</tr>
<tr>
<tr valign="top">
<td>5.</td>
<td>
Ketentuan lain mengacu pada perjanjian kerjasama yang telah disepakati.

File diff suppressed because one or more lines are too long

View File

@@ -100,6 +100,6 @@ Breadcrumbs::for('registrasifinal.show', function (BreadcrumbTrail $trail) {
});
Breadcrumbs::for('registrasifinal.edit', function (BreadcrumbTrail $trail) {
$trail->parent('registrasifinal');
$trail->push('Tambah registrasifinal');
$trail->push('Tambah Registrasi Final');
});
// registrasi final