Merge branch 'staging' of https://git.putrakuningan.com/daengdeni/lpj into tender

This commit is contained in:
2024-11-07 15:39:30 +07:00
17 changed files with 351 additions and 252 deletions

View File

@@ -4,6 +4,8 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Modules\Location\Models\City; use Modules\Location\Models\City;
@@ -18,8 +20,6 @@
use Modules\Lpj\Models\JenisJaminan; use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan; use Modules\Lpj\Models\JenisLegalitasJaminan;
use Modules\Lpj\Models\PemilikJaminan; use Modules\Lpj\Models\PemilikJaminan;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
use ZipArchive; use ZipArchive;
class DokumenJaminanController extends Controller class DokumenJaminanController extends Controller
@@ -72,45 +72,41 @@
$document = DokumenJaminan::create($validate); $document = DokumenJaminan::create($validate);
try { if ($request->jenis_legalitas_jaminan_id) {
foreach ($request->dokumen_jaminan as $key => $value) { foreach ($request->jenis_legalitas_jaminan_id as $key => $value) {
$file_name = $value->getClientOriginalName(); $detailData = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
if ($file_name) { $dokumenJaminan = [];
try { $dokumenNomor = [];
$file_name = $value->getClientOriginalName(); if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
$value->storeAs( foreach ($request->dokumen_jaminan[$key] as $index => $file) {
if ($file) {
$file_name = $file->getClientOriginalName();
$file->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/', 'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name, $file_name,
); );
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
}
}
}
$detail = [ if (!empty($dokumenJaminan)) {
'dokumen_jaminan_id' => $document->id, $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key], $detailData['dokumen_nomor'] = json_encode($dokumenNomor);
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name, }
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key], DetailDokumenJaminan::create($detailData);
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '',
];
DetailDokumenJaminan::create($detail);
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'Gagal upload file dokumen jaminan ' . $key . ': ' . $e->getMessage(),
);
}
} }
} }
DB::commit(); DB::commit();
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'gg' . $e->getMessage(),
);
}
return redirect()->route('debitur.jaminan.index', $id)->with( return redirect()->route('debitur.jaminan.index', $id)->with(
'success', 'success',
'Dokumen Jaminan berhasil ditambahkan', 'Dokumen Jaminan berhasil ditambahkan',
@@ -149,6 +145,7 @@
$debitur = Debiture::find($id); $debitur = Debiture::find($id);
$validate = $request->validated(); $validate = $request->validated();
if ($validate) { if ($validate) {
try { try {
DB::beginTransaction(); DB::beginTransaction();
@@ -226,7 +223,9 @@
$document->update($validate); $document->update($validate);
// Get existing detail documents // Get existing detail documents
$existingDetails = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get()->keyBy('id'); $existingDetails = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get()->keyBy(
'id',
);
if ($request->jenis_legalitas_jaminan_id) { if ($request->jenis_legalitas_jaminan_id) {
foreach ($request->jenis_legalitas_jaminan_id as $key => $value) { foreach ($request->jenis_legalitas_jaminan_id as $key => $value) {
@@ -238,21 +237,25 @@
]; ];
$dokumenJaminan = []; $dokumenJaminan = [];
$dokumenNomor=[];
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) { if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
foreach($request->dokumen_jaminan[$key] as $file) { foreach ($request->dokumen_jaminan[$key] as $index => $file) {
if ($file) { if ($file) {
$file_name = $file->getClientOriginalName(); $file_name = $file->getClientOriginalName();
$file->storeAs( $file->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/', 'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name $file_name,
); );
$dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; $dokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name;
$dokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '';
} }
} }
} }
if (!empty($dokumenJaminan)) { if (!empty($dokumenJaminan)) {
$detailData['dokumen_jaminan'] = json_encode($dokumenJaminan); $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
$detailData['dokumen_nomor'] = json_encode($dokumenNomor);
} }
if (isset($request->detail_dokumen_jaminan_id[$key])) { if (isset($request->detail_dokumen_jaminan_id[$key])) {
@@ -261,9 +264,18 @@
if ($detailDocument) { if ($detailDocument) {
// Merge new files with existing ones // Merge new files with existing ones
if (!empty($dokumenJaminan)) { if (!empty($dokumenJaminan)) {
$existingFiles = json_decode($detailDocument->dokumen_jaminan, true) ?: []; $existingFiles = json_decode(
$detailDocument->dokumen_jaminan,
true,
) ?: [];
$existingNomor = json_decode(
$detailDocument->dokumen_nomor,
true,
) ?: [];
$mergedFiles = array_merge($existingFiles, $dokumenJaminan); $mergedFiles = array_merge($existingFiles, $dokumenJaminan);
$mergedNomor = array_merge($existingNomor, $dokumenNomor);
$detailData['dokumen_jaminan'] = json_encode($mergedFiles); $detailData['dokumen_jaminan'] = json_encode($mergedFiles);
$detailData['dokumen_nomor'] = json_encode($mergedNomor);
} }
$detailDocument->update($detailData); $detailDocument->update($detailData);
$existingDetails->forget($detailId); $existingDetails->forget($detailId);
@@ -315,8 +327,10 @@
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id); $_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true); $legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn('id',$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray())->get(); $currentLegalitasJaminan = JenisLegalitasJaminan::whereIn(
'id',
$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray(),
)->get();
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan // Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
@@ -341,7 +355,7 @@
'villages', 'villages',
'pemilikJaminan', 'pemilikJaminan',
'hubunganPemilik', 'hubunganPemilik',
'legalitas' 'legalitas',
), ),
); );
} }
@@ -378,7 +392,9 @@
if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) { if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) {
foreach ($documents as $document) { foreach ($documents as $document) {
$files = is_array(json_decode($document->dokumen_jaminan)) ? json_decode($document->dokumen_jaminan) : [$document->dokumen_jaminan]; $files = is_array(json_decode($document->dokumen_jaminan)) ? json_decode(
$document->dokumen_jaminan,
) : [$document->dokumen_jaminan];
foreach ($files as $file) { foreach ($files as $file) {
$filePath = storage_path('app/public/' . $file); $filePath = storage_path('app/public/' . $file);
@@ -411,7 +427,9 @@
{ {
$dokumen = request()->get('dokumen'); $dokumen = request()->get('dokumen');
$document = DetailDokumenJaminan::find($dokumen); $document = DetailDokumenJaminan::find($dokumen);
$file = is_array(json_decode($document->dokumen_jaminan)) ? json_decode($document->dokumen_jaminan) : [$document->dokumen_jaminan]; $file = is_array(json_decode($document->dokumen_jaminan)) ? json_decode(
$document->dokumen_jaminan,
) : [$document->dokumen_jaminan];
return response()->download(storage_path('app/public/' . $file[request()->get('index')])); return response()->download(storage_path('app/public/' . $file[request()->get('index')]));
} }
@@ -425,9 +443,8 @@
} }
public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1) : JsonResponse public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1)
{ : JsonResponse {
$jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId); $jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id; $legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
$newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get(); $newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
@@ -448,12 +465,17 @@
'id' => $detail->id, 'id' => $detail->id,
'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id, 'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id,
'name' => $detail->jenisLegalitasJaminan->name, 'name' => $detail->jenisLegalitasJaminan->name,
'dokumen_jaminan' => json_decode($detail->dokumen_jaminan) ?? $detail->dokumen_jaminan, 'dokumen_jaminan' => json_decode(
$detail->dokumen_jaminan,
) ?? $detail->dokumen_jaminan,
'dokumen_nomor' => json_decode(
$detail->dokumen_nomor,
) ?? $detail->dokumen_nomor,
'custom_field' => $detail->jenisLegalitasJaminan->custom_field, 'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type, 'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type,
'details' => $detail->details, 'details' => $detail->details,
'keterangan' => $detail->keterangan, 'keterangan' => $detail->keterangan,
'is_existing' => true 'is_existing' => true,
]; ];
} }
} }
@@ -467,11 +489,12 @@
'jenis_legalitas_jaminan_id' => $legalitas->id, 'jenis_legalitas_jaminan_id' => $legalitas->id,
'name' => $legalitas->name, 'name' => $legalitas->name,
'dokumen_jaminan' => null, 'dokumen_jaminan' => null,
'dokumen_nomor' => null,
'custom_field' => $legalitas->custom_field, 'custom_field' => $legalitas->custom_field,
'custom_field_type' => $legalitas->custom_field_type, 'custom_field_type' => $legalitas->custom_field_type,
'details' => null, 'details' => null,
'keterangan' => null, 'keterangan' => null,
'is_existing' => false 'is_existing' => false,
]; ];
} }
} }

View File

@@ -75,7 +75,7 @@ class ProsesPenawaranController extends Controller
// Get the data for the current page // Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->with(['tujuanPenilaianKJPP','permohonan','permohonan.debiture'])->get(); $data = $query->with(['tujuanPenilaianKjpp','permohonan','permohonan.debiture'])->get();
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size')); $pageCount = ceil($totalRecords / $request->get('size'));
@@ -116,7 +116,6 @@ class ProsesPenawaranController extends Controller
->get(); ->get();
if ($penawaran) { if ($penawaran) {
$i=0; $i=0;
foreach($penawrandetails as $obj) foreach($penawrandetails as $obj)
{ {

View File

@@ -5,8 +5,17 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Carbon\Carbon; use Carbon\Carbon;
use Exception; use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Regions;
// use Modules\Location\Models\City; // use Modules\Location\Models\City;
// use Modules\Location\Models\District; // use Modules\Location\Models\District;
// use Modules\Location\Models\Province; // use Modules\Location\Models\Province;
@@ -20,16 +29,6 @@ use Exception;
// use Modules\Lpj\Models\JenisJaminan; // use Modules\Lpj\Models\JenisJaminan;
// use Modules\Lpj\Models\JenisLegalitasJaminan; // use Modules\Lpj\Models\JenisLegalitasJaminan;
// use Modules\Lpj\Models\PemilikJaminan; // use Modules\Lpj\Models\PemilikJaminan;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Regions;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Modules\Lpj\Models\PenawaranTender;
class RegistrasiFinalController extends Controller class RegistrasiFinalController extends Controller
{ {
@@ -47,11 +46,12 @@ use Modules\Lpj\Models\PenawaranTender;
} }
// Retrieve data from the database // Retrieve data from the database
$query =PenawaranTender::query() $query = PenawaranTender::with(['permohonan', 'tujuanPenilaianKjpp'])->whereHas(
->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name') 'permohonan',
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id') function ($q) {
->where('penawaran.status','=','spk') $q->where('status', '=', 'spk');
->withCount('penawarandetails'); },
)->withCount('penawarandetails');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
@@ -91,24 +91,22 @@ use Modules\Lpj\Models\PenawaranTender;
$data = $query->with(['permohonan'])->get(); $data = $query->with(['permohonan'])->get();
// dd($data); // dd($data);
$i = 0; $i = 0;
foreach($data as $obj) foreach ($data as $obj) {
{ if ($obj->tanggal_penilaian_sebelumnya) {
if($obj->tanggal_penilaian_sebelumnya) $data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format(
{ 'd F Y H:i:s',
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); );
} }
if($obj->biaya_kjpp_sebelumnya) if ($obj->biaya_kjpp_sebelumnya) {
{
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); $data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya);
} }
// date_range // date_range
if($obj->start_date && $obj->end_date) if ($obj->start_date && $obj->end_date) {
{ $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . Carbon::parse(
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); $obj->end_date,
)->format('d M Y');
} }
$i++; $i++;
@@ -129,15 +127,14 @@ use Modules\Lpj\Models\PenawaranTender;
'pageCount' => $pageCount, 'pageCount' => $pageCount,
'page' => $currentPage, 'page' => $currentPage,
'totalCount' => $totalRecords, 'totalCount' => $totalRecords,
'data' => $data 'data' => $data,
]); ]);
} }
public function show($id) public function show($id)
{ {
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
if($permohonan->dokumen) if ($permohonan->dokumen) {
{
$pdfSPK_path = Storage::url($permohonan->dokumen); $pdfSPK_path = Storage::url($permohonan->dokumen);
$permohonan->dokumen = $pdfSPK_path; $permohonan->dokumen = $pdfSPK_path;
$permohonan->dokumen = '| <a download href="' . $pdfSPK_path . '" class="badge badge-sm badge-outline" target="_blank">Dokumen SPK.pdf &nbsp;&nbsp;<i class="ki-filled ki-cloud-download"></i></a>'; $permohonan->dokumen = '| <a download href="' . $pdfSPK_path . '" class="badge badge-sm badge-outline" target="_blank">Dokumen SPK.pdf &nbsp;&nbsp;<i class="ki-filled ki-cloud-download"></i></a>';
@@ -151,10 +148,10 @@ use Modules\Lpj\Models\PenawaranTender;
return view('lpj::registrasifinal.edit', compact('id')); return view('lpj::registrasifinal.edit', compact('id'));
} }
public function setData(Request $request): JsonResponse public function setData(Request $request)
{ : JsonResponse {
$data = array(); $data = [];
$datas = array(); $datas = [];
if (request()->ajax()) { if (request()->ajax()) {
$id = $request->id; $id = $request->id;
@@ -167,14 +164,12 @@ use Modules\Lpj\Models\PenawaranTender;
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $datas->nomor_registrasi)->first(); $penawaran = PenawaranTender::where('nomor_registrasi', '=', $datas->nomor_registrasi)->first();
$penawaranString = ""; $penawaranString = "";
if($penawaran->status) if ($penawaran->status) {
{
$penawaranString = convertSlug($penawaran->status); $penawaranString = convertSlug($penawaran->status);
$penawaran->status = $penawaranString; $penawaran->status = $penawaranString;
} }
if($datas->dokumen) if ($datas->dokumen) {
{
$pdfSPK_path = Storage::url($datas->dokumen); $pdfSPK_path = Storage::url($datas->dokumen);
$datas->dokumen = $pdfSPK_path; $datas->dokumen = $pdfSPK_path;
} }
@@ -183,26 +178,26 @@ use Modules\Lpj\Models\PenawaranTender;
$data['regions'] = $regions; $data['regions'] = $regions;
$data['penawaran'] = $penawaran; $data['penawaran'] = $penawaran;
$data['datas'] = $datas; $data['datas'] = $datas;
$data['message']['message_success'] = array("data successfully found"); $data['message']['message_success'] = ["data successfully found"];
} else { } else {
$data['status'] = 'error'; $data['status'] = 'error';
$data['datas'] = null; $data['datas'] = null;
$data['message']['message_data'] = array("data not found"); $data['message']['message_data'] = ["data not found"];
} }
} else { } else {
$data['status'] = 'error'; $data['status'] = 'error';
$data['message']['message_ajax'] = array("no ajax request"); $data['message']['message_ajax'] = ["no ajax request"];
} }
return response()->json($data); return response()->json($data);
} }
public function update(Request $request, $id): JsonResponse public function update(Request $request, $id)
{ : JsonResponse {
// init // init
$data = array(); $data = [];
$dataPermohonan = array(); $dataPermohonan = [];
$dataPenawaran = array(); $dataPenawaran = [];
if (request()->ajax()) { if (request()->ajax()) {
$validator = RegistrasiFinalController::rulesEditnya($request, $id); $validator = RegistrasiFinalController::rulesEditnya($request, $id);
@@ -210,12 +205,9 @@ use Modules\Lpj\Models\PenawaranTender;
if ($validator['fails']) { if ($validator['fails']) {
$data['message'] = $validator['errors']; $data['message'] = $validator['errors'];
$data['status'] = 'error'; $data['status'] = 'error';
} } else {
else
{
DB::beginTransaction(); DB::beginTransaction();
try { try {
// update table permohonan => status (registrasi-final), region_id, keterangan, authorized_at, authorized_status, authorized_by // update table permohonan => status (registrasi-final), region_id, keterangan, authorized_at, authorized_status, authorized_by
// update table penawaran => status (registrasi-final) // update table penawaran => status (registrasi-final)
$dataPermohonan = [ $dataPermohonan = [
@@ -224,14 +216,15 @@ use Modules\Lpj\Models\PenawaranTender;
'keterangan' => $request->catatan, 'keterangan' => $request->catatan,
'authorized_at' => now(), 'authorized_at' => now(),
'authorized_status' => 1, 'authorized_status' => 1,
'authorized_by' => Auth::id() 'authorized_by' => Auth::id(),
]; ];
$dataPenawaran = ['status' => 'registrasi-final']; $dataPenawaran = ['status' => 'registrasi-final'];
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
$penawaran = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first(); $penawaran = PenawaranTender::where('nomor_registrasi', '=', $permohonan->nomor_registrasi)
->first();
$permohonan->update($dataPermohonan); $permohonan->update($dataPermohonan);
$penawaran->update($dataPenawaran); $penawaran->update($dataPenawaran);
@@ -239,21 +232,19 @@ use Modules\Lpj\Models\PenawaranTender;
DB::commit(); DB::commit();
$data['status'] = 'success'; $data['status'] = 'success';
$data['message']['message_success'] = array('Regitrasi Final '.$permohonan->nomor_registrasi.' successfully'); $data['message']['message_success'] = ['Regitrasi Final ' . $permohonan->nomor_registrasi . ' successfully'];
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
$data['status'] = 'error'; $data['status'] = 'error';
$data['message']['message_try_catch'] = array('Regitrasi Final '.$permohonan->nomor_registrasi.' failed.'); $data['message']['message_try_catch'] = ['Regitrasi Final ' . $permohonan->nomor_registrasi . ' failed.'];
} }
} }
} else { } else {
$data['status'] = 'error'; $data['status'] = 'error';
$data['message']['message_ajax'] = array("no ajax request"); $data['message']['message_ajax'] = ["no ajax request"];
} }
return response()->json($data); return response()->json($data);
} }
public function rulesEditnya($request, $id) public function rulesEditnya($request, $id)
@@ -268,7 +259,7 @@ use Modules\Lpj\Models\PenawaranTender;
$messageIt = [ $messageIt = [
'region.required' => 'Silahkan pilih Region', 'region.required' => 'Silahkan pilih Region',
'catatan.required' => 'Silahkan isi Catatan' 'catatan.required' => 'Silahkan isi Catatan',
]; ];
$validator = Validator::make($request->all(), $validateIt, $messageIt); $validator = Validator::make($request->all(), $validateIt, $messageIt);

View File

@@ -96,6 +96,14 @@ use Illuminate\Support\Facades\Auth;
} }
// data dokumen_spk
if($obj->dokumen)
{
$spkpenawaran_path = Storage::url($obj->dokumen);
// dd($spkpenawaran_path);
$data[$i]->dokumen = $spkpenawaran_path;
}
$i++; $i++;
} }

View File

@@ -16,6 +16,7 @@
'jenis_legalitas_jaminan_id', 'jenis_legalitas_jaminan_id',
'name', 'name',
'dokumen_jaminan', 'dokumen_jaminan',
'dokumen_nomor',
'keterangan', 'keterangan',
'details', 'details',
'status', 'status',

View File

@@ -20,7 +20,7 @@ return new class extends Migration
$table->string('kontur_tanah'); $table->string('kontur_tanah');
$table->string('ketinggian_jalan'); $table->string('ketinggian_jalan');
$table->string('kontur_jalan'); $table->string('kontur_jalan');
$table->string('posis_kavling'); $table->string('posisi_kavling');
$table->enum('tusuk_sate', ['yes', 'no']); $table->enum('tusuk_sate', ['yes', 'no']);
$table->enum('lockland', ['yes', 'no']); $table->enum('lockland', ['yes', 'no']);
$table->string('kondisi_fisik_tanah'); $table->string('kondisi_fisik_tanah');

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('detail_dokumen_jaminan', function (Blueprint $table) {
$table->string('dokumen_nomor')->nullable()->after('dokumen_jaminan');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('detail_dokumen_jaminan', function (Blueprint $table) {
$table->dropColumn('dokumen_nomor');
});
}
};

View File

@@ -77,16 +77,22 @@
@if(isset($detail->dokumen_jaminan)) @if(isset($detail->dokumen_jaminan))
@php @php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan]; $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor ? [$detail->dokumen_nomor] : []);
@endphp @endphp
@foreach($dokumen_jaminan as $index => $dokumen) @foreach($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo'])) @if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo']))
@if(!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info">Nomor Dokumen : {{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $permohonan->debiture->id, 'dokumen' => $detail->id, 'index' => $index]) }}" <a href="{{ route('debitur.jaminan.download', ['id' => $permohonan->debiture->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="badge badge-sm badge-outline mt-2 mr-2"> class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }} {{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i> <i class="ki-filled ki-cloud-download"></i>
</a> </a>
@endif @endif
<span class="badge badge-sm badge-outline badge-warning mt-2" onclick="viewPDF('{{ Storage::url($dokumen_jaminan[$index]) }}')"><i class="ki-filled ki-eye mr-2"></i>Preview</span> <span class="flex-none badge badge-sm badge-outline badge-warning mt-2" onclick="viewPDF('{{ Storage::url($dokumen_jaminan[$index]) }}')"><i class="ki-filled ki-eye mr-2"></i>Preview</span>
</div>
<br> <br>
@endforeach @endforeach
@endif @endif

View File

@@ -146,10 +146,10 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Nama Dokumen Nomor
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nama Dokumen"> <input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nomor">
</div> </div>
</div> </div>
@@ -160,23 +160,34 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}"> <div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<input class="file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" multiple> <input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<button type="button" class="btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button> <input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]">
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div> </div>
<div id="additional-files-{{ $n }}"></div> <div id="additional-files-{{ $n }}"></div>
</div> </div>
@if(isset($detail->dokumen_jaminan))
@if(isset($detail->dokumen_jaminan)) @if(isset($detail->dokumen_jaminan))
@php @php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan]; $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor ? [$detail->dokumen_nomor] : []);
@endphp @endphp
<div class="flex flex-col w-full gap-2">
@foreach($dokumen_jaminan as $index => $dokumen) @foreach($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if(!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : {{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $debitur->id, 'dokumen' => $detail->id, 'index' => $index]) }}" <a href="{{ route('debitur.jaminan.download', ['id' => $debitur->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="badge badge-sm badge-outline mt-2 mr-2"> class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }} {{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i> <i class="ki-filled ki-cloud-download"></i>
</a> </a>
</div>
@endforeach @endforeach
</div>
@endif
@endif @endif
</div> </div>
</div> </div>
@@ -234,10 +245,10 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Nama Dokumen Nomor
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="" placeholder="Nama Dokumen"> <input class="input " type="text" id="name" name="name[]" value="" placeholder="Nomor">
</div> </div>
</div> </div>
@@ -248,8 +259,9 @@
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}"> <div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<input class="file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" multiple> <input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<button type="button" class="btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button> <input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" multiple>
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div> </div>
<div id="additional-files-{{ $n }}"></div> <div id="additional-files-{{ $n }}"></div>
</div> </div>
@@ -287,8 +299,8 @@
</div> </div>
@php $n++; @endphp @php $n++; @endphp
@endforeach @endforeach
</div>
@endif @endif
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
@@ -496,10 +508,10 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Nama Dokumen Nomor
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="name[]" value="${item.name || ''}" placeholder="Nama Dokumen"> <input class="input" type="text" name="name[]" value="${item.name || ''}" placeholder="Nomor">
</div> </div>
</div> </div>
@@ -508,10 +520,13 @@
Dokumen Jaminan Dokumen Jaminan
</label> </label>
<div class="flex flex-wrap items-baseline w-full" id="file-container-${index}"> <div class="flex flex-wrap items-baseline w-full" id="file-container-${index}">
${item.dokumen_jaminan ? renderExistingFiles(item.dokumen_jaminan, debiturId, item.id) : ''} <div class="flex flex-col w-full gap-2">
${item.dokumen_jaminan ? renderExistingFiles(item.dokumen_jaminan, debiturId, item.id, item.dokumen_nomor) : ''}
</div>
<div class="flex items-center gap-2 my-2 w-full"> <div class="flex items-center gap-2 my-2 w-full">
<input class="file-input" type="file" name="dokumen_jaminan[${index}][]" multiple> <input class="flex-1 input" type="text" name="dokumen_nomor[${index}][]" placeholder="Nomor Dokumen">
<button type="button" class="btn btn-primary w-[100px] text-center" onclick="addFileInput(${index})">Add File</button> <input class="flex-1 file-input" type="file" name="dokumen_jaminan[${index}][]" multiple>
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput(${index})">Add File</button>
</div> </div>
</div> </div>
</div> </div>
@@ -541,32 +556,14 @@
.catch(error => console.error('Error:', error)); .catch(error => console.error('Error:', error));
} }
function renderExistingFiles(dokumenJaminan, debiturId, itemId) {
if (typeof dokumenJaminan === 'string') {
return `
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}" class="badge badge-sm badge-outline mt-2 mr-2">
${dokumenJaminan.split('/').pop()}
<i class="ki-filled ki-cloud-download"></i>
</a>
`;
} else if (Array.isArray(dokumenJaminan)) {
return dokumenJaminan.map(file => `
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}&file=${encodeURIComponent(file)}" class="badge badge-sm badge-outline mt-2 mr-2">
${file.split('/').pop()}
<i class="ki-filled ki-cloud-download"></i>
</a>
`).join('');
}
return '';
}
function addFileInput(index) { function addFileInput(index) {
const container = document.getElementById(`file-container-${index}`); const container = document.getElementById(`file-container-${index}`);
const newInput = document.createElement('div'); const newInput = document.createElement('div');
newInput.className = 'flex items-center gap-2 mb-2 w-full'; newInput.className = 'flex items-center gap-2 mb-2 w-full';
newInput.innerHTML = ` newInput.innerHTML = `
<input class="file-input" type="file" name="dokumen_jaminan[${index}][]" multiple> <input class="flex-1 input" type="text" name="dokumen_nomor[${index}][]" placeholder="Nomor Dokumen">
<button type="button" class="btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button> <input class="flex-1 file-input" type="file" name="dokumen_jaminan[${index}][]" multiple>
<button type="button" class="flex-none btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button>
`; `;
container.appendChild(newInput); container.appendChild(newInput);
} }
@@ -575,20 +572,24 @@
button.closest('.flex.items-center.gap-2.mb-2').remove(); button.closest('.flex.items-center.gap-2.mb-2').remove();
} }
function renderExistingFiles(dokumenJaminan, debiturId, itemId) { function renderExistingFiles(dokumenJaminan, debiturId, itemId, dokumenNomor) {
if (typeof dokumenJaminan === 'string') { if (typeof dokumenJaminan === 'string' && typeof dokumenNomor === 'string') {
return ` return `
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}" class="badge badge-sm badge-outline mt-2"> <div class="flex w-full lg:w-[30%]">
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : ${dokumenNomor}</span>
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}" class="flex-none badge badge-sm badge-outline mt-2">
${dokumenJaminan.split('/').pop()} ${dokumenJaminan.split('/').pop()}
<i class="ki-filled ki-cloud-download"></i> <i class="ki-filled ki-cloud-download"></i>
</a> </a>
</div>
`; `;
} else if (Array.isArray(dokumenJaminan)) { } else if (Array.isArray(dokumenJaminan) && Array.isArray(dokumenNomor)) {
return dokumenJaminan.map(file => ` return dokumenJaminan.map((file, index) => `<div class="flex w-full lg:w-[30%]">
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}&file=${file}" class="badge badge-sm badge-outline mt-2 mr-2"> <span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : ${dokumenNomor[index] || 'N/A'}</span>
<a href="/debitur/${debiturId}/jaminan/download?dokumen=${itemId}&file=${file}" class="flex-none badge badge-sm badge-outline mt-2 mr-2">
${file.split('/').pop()} ${file.split('/').pop()}
<i class="ki-filled ki-cloud-download"></i> <i class="ki-filled ki-cloud-download"></i>
</a> </a></div>
`).join(''); `).join('');
} }
return ''; return '';

View File

@@ -149,10 +149,10 @@
return `${formatDate(new Date(data.start_date))} - ${formatDate(new Date(data.end_date))}` return `${formatDate(new Date(data.start_date))} - ${formatDate(new Date(data.end_date))}`
} }
}, },
tujuan_penilaian_k_j_p_p: { tujuan_penilaian_kjpp: {
title: 'Tujuan Penilaian KJPP', title: 'Tujuan Penilaian KJPP',
render: (item, data) => { render: (item, data) => {
return data.tujuan_penilaian_k_j_p_p[0].name return data.tujuan_penilaian_kjpp.name
} }
}, },
penawarandetails_count: { penawarandetails_count: {

View File

@@ -147,6 +147,38 @@
@include('lpj::component.detail-jaminan') @include('lpj::component.detail-jaminan')
<div class="card min-w-full">
<div class="card-header">
<h3 class="card-title">
Data Biaya
</h3>
</div>
<div class="card-table scrollable-x-auto pb-3">
<div class="grid grid-cols-1 xl:grid-cols-1 gap-5 lg:gap-7.5">
<div class="col-span-1">
<table class="table align-middle text-sm text-gray-500">
<tr>
<td width="10%" class="py-2 text-gray-600 font-normal">
Status Bayar
</td>
<td class="py-2 text-gray-800 font-normaltext-sm">
{{ strtoupper(str_replace('_',' ',$permohonan->status_bayar)) }}
</td>
</tr>
<tr>
<td class="py-3">
Nilai NJOP
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
{{ $permohonan->nilai_njop }}
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="card pb-2.5"> <div class="card pb-2.5">
<div class="card-header" id="basic_settings"> <div class="card-header" id="basic_settings">

View File

@@ -13,7 +13,8 @@
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<form id="{{$route[0]}}_form" name="{{$route[0]}}_form" method="POST"> <form id="{{$route[0]}}_form" name="{{$route[0]}}_form" method="POST">
<input type="hidden" id="id" name="id" value="{{ $id }}"> <!-- $id => penawaran.id -->
<input type="hidden" id="{{$route[0]}}_id" name="id" value="{{ $id }}">
@method('PUT') @method('PUT')
@csrf @csrf
<div class="card pb-2.5"> <div class="card pb-2.5">

View File

@@ -114,6 +114,9 @@
}, },
tujuan_penilaian_kjpp_name: { tujuan_penilaian_kjpp_name: {
title: 'Tujuan Penilaian', title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian_kjpp.name || ''}`;
},
}, },
nama_kjpp_sebelumnya: { nama_kjpp_sebelumnya: {
title: 'Nama KJPP Terpilih', title: 'Nama KJPP Terpilih',

View File

@@ -17,7 +17,8 @@
function setData() function setData()
{ {
let id = $("#id").val(); // id => penawaran.id
let id = $("#{{$route[0]}}_id").val();
let token = "{{ csrf_token() }}"; let token = "{{ csrf_token() }}";
// alert('token = ' + token); // alert('token = ' + token);
var useURL = "{{ route('registrasifinal.setData') }}"; var useURL = "{{ route('registrasifinal.setData') }}";
@@ -81,6 +82,7 @@
let token = "{{ csrf_token() }}"; let token = "{{ csrf_token() }}";
let _method = $('input[name=_method]').val(); let _method = $('input[name=_method]').val();
// id => penawaran.id
let id = $('#{{$route[0]}}_id').val(); let id = $('#{{$route[0]}}_id').val();
let region = $("#{{$route[0]}}_region").val(); let region = $("#{{$route[0]}}_region").val();
let catatan = $("#{{$route[0]}}_catatan").val(); let catatan = $("#{{$route[0]}}_catatan").val();

View File

@@ -1,5 +1,15 @@
<link rel="stylesheet" href="{{ public_path('build/assets/app-BEWyoHLE.css') }}" data-navigate-track="reload"> @php
<link rel="stylesheet" href="{{ public_path('build/assets/app-DqiwbDNQ.css') }}" data-navigate-track="reload"> $manifest = json_decode(file_get_contents(public_path('build/manifest.json')), true);
$cssFiles = array_filter($manifest, function($value) {
return strpos($value['file'], '.css') !== false;
});
@endphp
@foreach($cssFiles as $file)
<link rel="stylesheet" href="{{ public_path('build/'.$file['file']) }}" data-navigate-track="reload">
@endforeach
<div class="card-body"> <div class="card-body">
<div class="scrollable-x-auto"> <div class="scrollable-x-auto">
<div class="print-area"> <div class="print-area">
@@ -79,7 +89,7 @@
<tr> <tr>
<td>Jangka Waktu</td> <td>Jangka Waktu</td>
<td>:</td> <td>:</td>
<td></td> <td><span style="color: red;"> {{ formatTanggalIndonesia($penawaran->start_date) }} - {{ formatTanggalIndonesia($penawaran->end_date) }}</span></td>
</tr> </tr>
<tr> <tr>
<td colspan="2" style="text-align: center;">i</td> <td colspan="2" style="text-align: center;">i</td>

View File

@@ -104,7 +104,7 @@
<tr> <tr>
<td>Jangka Waktu</td> <td>Jangka Waktu</td>
<td>:</td> <td>:</td>
<td></td> <td><span style="color: red;"> {{ formatTanggalIndonesia($penawaran->start_date) }} - {{ formatTanggalIndonesia($penawaran->end_date) }}</span></td>
</tr> </tr>
<tr> <tr>
<td colspan="2" style="text-align: center;">i</td> <td colspan="2" style="text-align: center;">i</td>

View File

@@ -78,12 +78,6 @@
@push('scripts') @push('scripts')
<script type="text/javascript"> <script type="text/javascript">
function spkShow(regId)
{
var url = "{{ url('show') }}/"+regId;
$(location).attr('href',url);
}
function spkCreate(regId) function spkCreate(regId)
{ {
var url1 = "/spk/"+regId+"/edit"; var url1 = "/spk/"+regId+"/edit";