Merge branch 'staging' into feature/senior-officer

This commit is contained in:
majid
2024-11-06 09:45:37 +07:00
17 changed files with 1427 additions and 296 deletions

View File

@@ -18,6 +18,8 @@
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
@@ -223,53 +225,62 @@
$document = DokumenJaminan::find($jaminan); $document = DokumenJaminan::find($jaminan);
$document->update($validate); $document->update($validate);
// Get existing detail documents
$existingDetails = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get()->keyBy('id');
if ($request->detail_dokumen_jaminan_id) { if($request->jenis_legalitas_jaminan_id){
foreach ($request->detail_dokumen_jaminan_id as $key => $value) { foreach($request->jenis_legalitas_jaminan_id as $key => $value){
if (isset($request->dokumen_jaminan[$key])) { $detailData = [
$file = $request->dokumen_jaminan[$key]; 'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $value,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
$dokumenJaminan = [];
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
foreach($request->dokumen_jaminan[$key] as $file) {
if ($file) { if ($file) {
$file_name = $file->getClientOriginalName(); $file_name = $file->getClientOriginalName();
}
if (isset($file_name)) {
$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;
$detail = [
'dokumen_jaminan_id' => $document->id,
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name,
'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key],
];
if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailDocument = DetailDokumenJaminan::find(
$request->detail_dokumen_jaminan_id[$key],
);
$detailDocument->update($detail);
$detailDocument->save();
} }
} }
}
if (!empty($dokumenJaminan)) {
$detailData['dokumen_jaminan'] = json_encode($dokumenJaminan);
}
if (isset($request->detail_dokumen_jaminan_id[$key])) {
$detailId = $request->detail_dokumen_jaminan_id[$key];
$detailDocument = $existingDetails->get($detailId);
if ($detailDocument) {
// Merge new files with existing ones
if (!empty($dokumenJaminan)) {
$existingFiles = json_decode($detailDocument->dokumen_jaminan, true) ?: [];
$mergedFiles = array_merge($existingFiles, $dokumenJaminan);
$detailData['dokumen_jaminan'] = json_encode($mergedFiles);
}
$detailDocument->update($detailData);
$existingDetails->forget($detailId);
}
} else { } else {
$detail = [ DetailDokumenJaminan::create($detailData);
'dokumen_jaminan_id' => $document->id, }
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key], }
'name' => $request->name[$key], }
'keterangan' => $request->keterangan[$key],
];
if (isset($request->detail_dokumen_jaminan_id[$key])) { // Delete any remaining existing details that weren't updated
$detailDocument = DetailDokumenJaminan::find( foreach ($existingDetails as $detail) {
$request->detail_dokumen_jaminan_id[$key], $files = json_decode($detail->dokumen_jaminan, true) ?: [];
); foreach ($files as $file) {
$detailDocument->update($detail); Storage::delete('public/' . $file);
}
}
} }
$detail->delete();
} }
DB::commit(); DB::commit();
@@ -290,13 +301,29 @@
) { ) {
$document = DokumenJaminan::find($jaminan); $document = DokumenJaminan::find($jaminan);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get(); $details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get();
$debitur = Debiture::find($document->debiture_id); $debitur = Debiture::find($document->debiture_id);
$provinces = Province::all(); $provinces = Province::all();
$cities = City::where('province_code', $document->province_code)->get(); $cities = City::where('province_code', $document->province_code)->get();
$districts = District::where('city_code', $document->city_code)->get(); $districts = District::where('city_code', $document->city_code)->get();
$villages = Village::where('district_code', $document->district_code)->get(); $villages = Village::where('district_code', $document->district_code)->get();
$jenisJaminan = JenisJaminan::all(); $jenisJaminan = JenisJaminan::all();
$jenisLegalitasJaminan = JenisLegalitasJaminan::all(); $jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn('id',$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray())->get();
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
$legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray());
$legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get();
$pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get(); $pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get();
$hubunganPemilik = HubunganPemilikJaminan::all(); $hubunganPemilik = HubunganPemilikJaminan::all();
@@ -314,6 +341,7 @@
'villages', 'villages',
'pemilikJaminan', 'pemilikJaminan',
'hubunganPemilik', 'hubunganPemilik',
'legalitas'
), ),
); );
} }
@@ -379,10 +407,11 @@
{ {
$dokumen = request()->get('dokumen'); $dokumen = request()->get('dokumen');
$document = DetailDokumenJaminan::find($dokumen); $document = DetailDokumenJaminan::find($dokumen);
return response()->download(storage_path('app/public/' . $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')]));
} }
public function legalitasJaminan($id, $jaminan) public function legalitasJaminan($id)
{ {
$jenisJaminan = JenisJaminan::find($id); $jenisJaminan = JenisJaminan::find($id);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id; $legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
@@ -390,4 +419,60 @@
$legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get(); $legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
echo json_encode($legalitas); echo json_encode($legalitas);
} }
public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1) : JsonResponse
{
$jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
$newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
$existingLegalitas = [];
$newLegalitas = [];
// Create a set of new jenis_legalitas_jaminan_ids for quick lookup
$newLegalitasIds = $newLegalitasJaminan->pluck('id')->toArray();
if($id>0) {
$document = DokumenJaminan::findOrFail($id);
if ($document && $document->detail) {
foreach ($document->detail as $detail) {
// Only include existing legalitas if its id is in the new set
if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) {
$existingLegalitas[] = [
'id' => $detail->id,
'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id,
'name' => $detail->jenisLegalitasJaminan->name,
'dokumen_jaminan' => json_decode($detail->dokumen_jaminan) ?? $detail->dokumen_jaminan,
'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type,
'details' => $detail->details,
'keterangan' => $detail->keterangan,
'is_existing' => true
];
}
}
}
}
foreach ($newLegalitasJaminan as $legalitas) {
if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) {
$newLegalitas[] = [
'id' => null,
'jenis_legalitas_jaminan_id' => $legalitas->id,
'name' => $legalitas->name,
'dokumen_jaminan' => null,
'custom_field' => $legalitas->custom_field,
'custom_field_type' => $legalitas->custom_field_type,
'details' => null,
'keterangan' => null,
'is_existing' => false
];
}
}
$combinedLegalitas = array_merge($existingLegalitas, $newLegalitas);
return response()->json($combinedLegalitas);
}
} }

View File

@@ -33,25 +33,20 @@
public function store(PermohonanRequest $request) public function store(PermohonanRequest $request)
{ {
$validate = $request->validated(); $validate = $request->validated();
if ($validate) { if ($validate) {
try { try {
// Save to database // Save to database
Permohonan::create($validate); Permohonan::create($validate);
return redirect() return redirect()
->route('permohonan.index') ->route('permohonan.index')->with('success', 'Permohonan created successfully');
->with('success', 'Permohonan created successfully');
} catch (Exception $e) { } catch (Exception $e) {
return redirect() return redirect()
->route('permohonan.create') ->route('permohonan.create')->with('error', 'Failed to create permohonan' . $e->getMessage());
->with('error', 'Failed to create permohonan' . $e->getMessage());
} }
} else { } else {
return redirect() return redirect()
->route('permohonan.create') ->route('permohonan.create')->with('success', 'error naon iye')->withInput();
->with('success', 'error naon iye')
->withInput();
} }
} }
@@ -118,14 +113,15 @@
try { try {
// Update in database // Update in database
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
if ($permohonan->status == 'revisi') {
$validate['status'] = 'order';
}
$permohonan->update($validate); $permohonan->update($validate);
return redirect() return redirect()
->route('permohonan.index') ->route('permohonan.index')->with('success', 'Permohonan updated successfully');
->with('success', 'Permohonan updated successfully');
} catch (Exception $e) { } catch (Exception $e) {
return redirect() return redirect()
->route('permohonan.edit', $id) ->route('permohonan.edit', $id)->with('error', 'Failed to update permohonan');
->with('error', 'Failed to update permohonan');
} }
} }
} }
@@ -313,7 +309,8 @@
return view('lpj::permohonan.show', compact('permohonan')); return view('lpj::permohonan.show', compact('permohonan'));
} }
public function print($id){ public function print($id)
{
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
return view('lpj::permohonan.print', compact('permohonan')); return view('lpj::permohonan.print', compact('permohonan'));

View File

@@ -2,13 +2,21 @@
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use Carbon\Carbon;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf;
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
// use Modules\Lpj\Exports\TujuanPenilaianExport; // use Modules\Lpj\Exports\TujuanPenilaianExport;
// use Modules\Lpj\Http\Requests\TujuanPenilaianRequest; // use Modules\Lpj\Http\Requests\TujuanPenilaianRequest;
// use Modules\Lpj\Models\TujuanPenilaian; // use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Models\PenawaranTender;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\Permohonan;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Auth;
class SpkController extends Controller class SpkController extends Controller
{ {
@@ -19,10 +27,212 @@
return view('lpj::spk.index'); return view('lpj::spk.index');
} }
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
// Retrieve data from the database
$query =Permohonan::query()
->leftJoin('penawaran', 'penawaran.nomor_registrasi','=','permohonan.nomor_registrasi')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->where('permohonan.status','=','spk')
->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name', 'permohonan.dokumen as dokumenSPK');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->get();
$i=0;
foreach($data as $obj)
{
if($obj->tanggal_penilaian_sebelumnya)
{
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
}
if($obj->biaya_kjpp_sebelumnya)
{
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya);
}
// date_range
if($obj->start_date && $obj->end_date)
{
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y');
}
$i++;
}
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data
]);
}
public function viewSpk() public function viewSpk()
{ {
// return Excel::download(new TujuanPenilaianExport, 'tujuan_penilaian.xlsx'); // return Excel::download(new TujuanPenilaianExport, 'tujuan_penilaian.xlsx');
return view('lpj::spk.view'); return view('lpj::spk.view');
} }
public function show($id)
{
$penawaran = PenawaranTender::find($id);
// return view('lpj::spk.show', compact('id','permohonan'));
}
public function edit($id)
{
$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')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'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'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
return view('lpj::spk.edit', compact('data', 'penawaran'));
}
public function update(Request $request, $id): JsonResponse
{
// init
$data1 = array();
$dataPermohonan = array();
// data
$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')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
->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();
$folderPath = 'uploads/spk/';
$extension = '.pdf';
$newFileName = "SPK_".$penawaran->nomor_registrasi."_".Auth::user()->id."_".time(). $extension;
$newFileNameWithPath = $folderPath . $newFileName;
// update table permohonan
$dataPermohonan=['dokumen' => $newFileNameWithPath];
$data->update($dataPermohonan);
// update table permohonan
// pdf path
$spkpenawaran_path = Storage::url($newFileNameWithPath);
$pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran'));
$content = $pdf->download()->getOriginalContent();
Storage::put('public/'.$newFileNameWithPath,$content);
$data1['status'] = 'success';
$data1['spkpenawaran_path'] = $spkpenawaran_path;
$data1['message']['message_success'] = array('Generate SPK PDF successfully');
return response()->json($data1);
}
public function dokumennya()
{
// return view('lpj::spk.dokumennya');
$id="3";
$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')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'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'
)->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
->leftJoin('dokumen_jaminan', 'dokumen_jaminan.permohonan_id','=','permohonan.id')
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
return view('lpj::spk.dokumennya', compact('data', 'penawaran'));
}
} }

View File

@@ -20,7 +20,7 @@
'branch_id' => 'required|exists:branches,id', 'branch_id' => 'required|exists:branches,id',
'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id', 'tujuan_penilaian_id' => 'required|exists:tujuan_penilaian,id',
'debiture_id' => 'required|exists:debitures,id', 'debiture_id' => 'required|exists:debitures,id',
'status' => 'required|string', 'status' => 'nullable|string',
'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id', 'jenis_fasilitas_kredit_id' => 'required|exists:jenis_fasilitas_kredit,id',
'nilai_plafond_id' => 'required|exists:nilai_plafond,id', 'nilai_plafond_id' => 'required|exists:nilai_plafond,id',
'status_bayar' => 'required|string', 'status_bayar' => 'required|string',

View File

@@ -31,7 +31,7 @@ class Teams extends Model
} }
public function penilaianTeam(){ public function penilaianTeam(){
return $this->hasMany(penilaianTeam::class, 'team_id', 'id'); return $this->hasMany(PenilaianTeam::class, 'team_id', 'id');
} }

View File

@@ -89,6 +89,15 @@
} }
] ]
}, },
{
"title": "SPK",
"path": "spk",
"icon": "ki-filled ki-file-added text-lg",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator", "admin"]
},
{ {
"title": "Registrasi Final", "title": "Registrasi Final",
"path": "registrasifinal", "path": "registrasifinal",
@@ -141,7 +150,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["senior-officer"] "roles": ["administrator","senior-officer"]
}, },
{ {
"title": "Otorisator", "title": "Otorisator",
@@ -150,7 +159,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["senior-officer"], "roles": ["administrator","senior-officer"],
"sub": [ "sub": [
{ {
"title": "Pelaporan", "title": "Pelaporan",
@@ -158,7 +167,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["senior-officer"] "roles": ["administrator","senior-officer"]
}, },
{ {
"title": "Pembayaran", "title": "Pembayaran",
@@ -166,7 +175,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["senior-officer"] "roles": ["administrator","senior-officer"]
}, },
{ {
"title": "Pembatalan", "title": "Pembatalan",
@@ -174,7 +183,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["senior-officer"] "roles": ["administrator","senior-officer"]
}, },
{ {
"title": "SLA", "title": "SLA",
@@ -182,7 +191,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["senior-officer"] "roles": ["administrator","senior-officer"]
} }
] ]
}, },
@@ -193,7 +202,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
@@ -218,7 +227,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Laporan", "title": "Laporan",
@@ -435,7 +444,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Kontur Tanah", "title": "Kontur Tanah",
@@ -443,7 +452,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Posisi Kavling", "title": "Posisi Kavling",
@@ -451,7 +460,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Ketinggian Tanah", "title": "Ketinggian Tanah",
@@ -459,7 +468,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Kondisi Fisik Tanah", "title": "Kondisi Fisik Tanah",
@@ -467,7 +476,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Jenis Bangunan", "title": "Jenis Bangunan",
@@ -475,7 +484,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Kondisi Bangunan", "title": "Kondisi Bangunan",
@@ -483,7 +492,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Sifat Bangunan", "title": "Sifat Bangunan",
@@ -491,7 +500,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
@@ -500,7 +509,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
@@ -509,7 +518,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Tingkat Keramaian", "title": "Tingkat Keramaian",
@@ -517,7 +526,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Masyarakat Sekitar", "title": "Masyarakat Sekitar",
@@ -525,7 +534,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Lantai Unit", "title": "Lantai Unit",
@@ -533,7 +542,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "View unit", "title": "View unit",
@@ -541,7 +550,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Spesifikasi Bangunan", "title": "Spesifikasi Bangunan",
@@ -549,7 +558,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
}, },
{ {
"title": "Kategori Speksikasi Bangunan", "title": "Kategori Speksikasi Bangunan",
@@ -557,7 +566,7 @@
"classes": "", "classes": "",
"attributes": [], "attributes": [],
"permission": "", "permission": "",
"roles": ["surveyor"] "roles": ["administrator","surveyor"]
} }

View File

@@ -69,16 +69,28 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="py-3 max-w-[100px]"> <td class="py-3 max-w-[100px] align-top" >
Dokumen Jaminan Dokumen Jaminan
</td> </td>
<td class="py-3 text-gray-700 text-2sm font-normal"> <td class="py-3 text-gray-700 text-2sm font-normal">
@if(isset($detail->dokumen_jaminan)) @if(isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
@endphp
@foreach($dokumen_jaminan as $index => $dokumen)
@if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo'])) @if(in_array(Auth::user()->roles[0]->name,['administrator','pemohon-eo']))
<a href="{{ route('debitur.jaminan.download',['id'=>$permohonan->debiture->id,'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline mt-2 badge-info"><i class="ki-filled ki-cloud-download mr-2"></i> Download</a> <a href="{{ route('debitur.jaminan.download', ['id' => $permohonan->debiture->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
) @endif class="badge badge-sm badge-outline mt-2 mr-2">
<span class="badge badge-sm badge-outline badge-warning mt-2" onclick="viewPDF('{{ Storage::url($detail->dokumen_jaminan) }}')"><i class="ki-filled ki-eye mr-2"></i>Preview</span> {{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</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>
<br>
@endforeach
@endif
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@@ -132,13 +132,14 @@
@enderror @enderror
</div> </div>
</div> </div>
<div id="doctainer" class="grid gap-5">
@if(isset($document->id)) @if(isset($document->id))
@php $n = 0; @endphp
@foreach($document->detail as $detail) @foreach($document->detail as $detail)
<input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}"> <input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}">
<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 font-bold"> <label class="form-label max-w-56 font-bold">
{{ $loop->index + 1 }}. {{ $detail->jenisLegalitasJaminan->name }} {{ $n + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</label> </label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}"> <input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}">
</div> </div>
@@ -157,10 +158,25 @@
Dokumen Jaminan Dokumen Jaminan
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input class="file-input" type="file" name="dokumen_jaminan[]" value=""> <div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" multiple>
<button type="button" class="btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
@if(isset($detail->dokumen_jaminan)) @if(isset($detail->dokumen_jaminan))
<a href="{{ route('debitur.jaminan.download',['id'=>$debitur->id,'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline mt-2">{{ basename($detail->dokumen_jaminan) }} @php
<i class="ki-filled ki-cloud-download"></i></a> $dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
@endphp
@foreach($dokumen_jaminan as $index => $dokumen)
<a href="{{ route('debitur.jaminan.download', ['id' => $debitur->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
@endforeach
@endif @endif
</div> </div>
</div> </div>
@@ -175,6 +191,27 @@
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}"> <input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}">
</div> </div>
</div> </div>
@else
@if($detail->jenisLegalitasJaminan->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($detail->jenisLegalitasJaminan->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
@endif @endif
<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">
@@ -185,10 +222,65 @@
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea> <textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
</div> </div>
</div> </div>
@php $n++; @endphp
@endforeach @endforeach
@else @foreach($legalitas as $item)
<div id="doctainer" class="grid gap-5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $item->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $item->id }}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama Dokumen
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="" placeholder="Nama Dokumen">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="file-input" type="file" name="dokumen_jaminan[]" value="">
</div>
</div>
@if($item->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$item->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($item->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
</div> </div>
@endif @endif
@@ -367,11 +459,14 @@
<script> <script>
function getLegalitasJaminan() { function getLegalitasJaminan() {
var legalitasJaminan = document.getElementById("jenis_jaminan_id").value; var legalitasJaminan = document.getElementById("jenis_jaminan_id").value;
var url = "/basic-data/jenis-jaminan/legalitas/" + legalitasJaminan; var documentId = "{{ $document->id ?? "0" }}";
var debiturId = "{{ $debitur->id }}";
var url = `/basic-data/jenis-jaminan/legalitas/${documentId}/${legalitasJaminan}`;
fetch(url, { fetch(url, {
method: "GET", method: "GET",
headers: { headers: {
"Content-Type": "application/json" "Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest"
} }
}) })
.then(response => { .then(response => {
@@ -389,7 +484,8 @@
<label class="form-label max-w-56 font-bold"> <label class="form-label max-w-56 font-bold">
${index + 1}. ${item.name} ${index + 1}. ${item.name}
</label> </label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value="${item.id}"> <input type="hidden" name="jenis_legalitas_jaminan_id[]" value="${item.jenis_legalitas_jaminan_id}">
${item.is_existing ? `<input type="hidden" name="detail_dokumen_jaminan_id[]" value="${item.id}">` : ''}
</div> </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">
@@ -397,7 +493,7 @@
Nama Dokumen Nama Dokumen
</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" name="name[]" value="${item.name || ''}" placeholder="Nama Dokumen">
</div> </div>
</div> </div>
@@ -405,46 +501,107 @@
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Dokumen Jaminan Dokumen Jaminan
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full" id="file-container-${index}">
<input class="file-input" type="file" name="dokumen_jaminan[]" value=""> ${item.dokumen_jaminan ? renderExistingFiles(item.dokumen_jaminan, debiturId, item.id) : ''}
<div class="flex items-center gap-2 my-2 w-full">
<input class="file-input" type="file" name="dokumen_jaminan[${index}][]" multiple>
<button type="button" class="btn btn-primary w-[100px] text-center" onclick="addFileInput(${index})">Add File</button>
</div>
</div> </div>
</div> </div>
${item.custom_field && item.custom_field.length > 0 ? ` ${item.custom_field ? `
<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 capitalize"> <label class="form-label max-w-56 capitalize">
${item.custom_field.replace(/_/g, " ")} ${item.custom_field.replace(/_/g, " ")}
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
${item.custom_field_type === "text" ? ` ${getCustomFieldInput(item.custom_field_type, item.custom_field, item.details)}
<input class="input" type="text" name="custom_field[][${item.custom_field}]">
` : item.custom_field_type === "number" ? `
<input class="input" type="number" name="custom_field[][${item.custom_field}]">
` : item.custom_field_type === "date" ? `
<input class="input" type="date" name="custom_field[][${item.custom_field}]">
` : item.custom_field_type === "textarea" ? `
<textarea class="textarea" rows="3" name="custom_field[][${item.custom_field}]"></textarea>
` : `
<input class="input" type="text" name="custom_field[][${item.custom_field}]">
`}
</div> </div>
</div> </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">
Keterangan Keterangan
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea> <textarea class="textarea" rows="3" name="keterangan[]">${item.keterangan || ''}</textarea>
</div> </div>
</div>`; </div>
`;
}); });
}) })
.catch(error => { .catch(error => console.error('Error:', error));
console.error("Error:", error); }
// Handle the error here
}); 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) {
const container = document.getElementById(`file-container-${index}`);
const newInput = document.createElement('div');
newInput.className = 'flex items-center gap-2 mb-2 w-full';
newInput.innerHTML = `
<input class="file-input" type="file" name="dokumen_jaminan[${index}][]" multiple>
<button type="button" class="btn btn-danger w-[100px] text-center" onclick="removeFileInput(this)">Remove</button>
`;
container.appendChild(newInput);
}
function removeFileInput(button) {
button.closest('.flex.items-center.gap-2.mb-2').remove();
}
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">
${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=${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 getCustomFieldInput(type, fieldName, value) {
value = value ? JSON.parse(value)[fieldName] || '' : '';
switch (type) {
case "text":
return `<input class="input" type="text" name="custom_field[][${fieldName}]" value="${value}">`;
case "number":
return `<input class="input" type="number" name="custom_field[][${fieldName}]" value="${value}">`;
case "date":
return `<input class="input" type="date" name="custom_field[][${fieldName}]" value="${value}">`;
case "textarea":
return `<textarea class="textarea" rows="3" name="custom_field[][${fieldName}]">${value}</textarea>`;
default:
return `<input class="input" type="text" name="custom_field[][${fieldName}]" value="${value}">`;
}
} }
</script> </script>
@endpush @endpush

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,27 +1,26 @@
@extends('layouts.main') @extends('layouts.main')
@section('breadcrumbs') @section('breadcrumbs')
{{ Breadcrumbs::render('basicdata.tujuan-penilaian') }} {{ Breadcrumbs::render('spk') }}
@endsection @endsection
@section('content') @section('content')
<div class="grid"> <div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}"> <div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="spk-table" data-api-url="{{ route('spk.datatables') }}">
<div class="card-header py-5 flex-wrap"> <div class="card-header py-5 flex-wrap">
<h3 class="card-title"> <h3 class="card-title">
SPK Menu Daftar SPK
</h3> </h3>
<div class="flex flex-wrap gap-2 lg:gap-5"> <div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex"> <div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i> <label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Doc SPK" id="search" type="text" value=""> <input placeholder="Search SPK" id="search" type="text" value="">
</label> </label>
</div> </div>
<!-- <div class="flex flex-wrap gap-2.5"> <div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div> <div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="{{ route('basicdata.tujuan-penilaian.export') }}"> Export to Excel </a> <a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
<a class="btn btn-sm btn-primary" href="{{ route('basicdata.tujuan-penilaian.create') }}"> Tambah Tujuan Penilaian </a> </div>
</div> -->
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -32,12 +31,28 @@
<th class="w-14"> <th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/> <input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th> </th>
<th class="min-w-[250px]" data-datatable-column="code"> <th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> No SPK </span> <span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[250px]" data-datatable-column="name"> <th class="min-w-[150px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Perihal </span> <span class="sort"> <span class="sort-label"> Kode Penawaran </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="start_date">
<span class="sort"> <span class="sort-label"> Tanggal Penawaran </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_kjpp_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nama_kjpp_sebelumnya">
<span class="sort"> <span class="sort-label">KJPP Data</span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th> <th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
@@ -62,41 +77,22 @@
@endsection @endsection
@push('scripts') @push('scripts')
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script type="text/javascript"> <script type="text/javascript">
function deleteData(data) { function spkShow(regId)
Swal.fire({ {
title: 'Are you sure?', var url = "{{ url('show') }}/"+regId;
text: "You won't be able to revert this!", $(location).attr('href',url);
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
} }
});
$.ajax(`basic-data/tujuan-penilaian/${data}`, { function spkCreate(regId)
type: 'DELETE' {
}).then((response) => { var url1 = "/spk/"+regId+"/edit";
swal.fire('Deleted!', 'User has been deleted.', 'success').then(() => { var url = "{{ url('/') }}"+url1;
window.location.reload(); $(location).attr('href',url);
});
}).catch((error) => {
console.error('Error:', error);
Swal.fire('Error!', 'An error occurred while deleting the file.', 'error');
});
}
})
} }
</script> </script>
<script type="module"> <script type="module">
const element = document.querySelector('#tujuan-penilaian-table'); const element = document.querySelector('#spk-table');
const searchInput = document.getElementById('search'); const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url'); const apiUrl = element.getAttribute('data-api-url');
@@ -114,23 +110,57 @@
return checkbox.outerHTML.trim(); return checkbox.outerHTML.trim();
}, },
}, },
code: { 'nomor_registrasi': {
title: 'Code', title: 'Nomor Registrasi',
}, },
name: { code: {
title: 'Kode Penawaran',
},
date_range: {
title: 'Tanggal Penawaran',
},
tujuan_penilaian_kjpp_name: {
title: 'Tujuan Penilaian', title: 'Tujuan Penilaian',
}, },
nama_kjpp_sebelumnya: {
title: 'Nama KJPP Terpilih',
render: (item, data) => {
return `${data.nama_kjpp_sebelumnya}`+'<br />'
+`${data.biaya_kjpp_sebelumnya}`+'<br /> '
+`${data.tanggal_penilaian_sebelumnya}`;
},
},
status: {
title: 'Status',
render: (item, data) => {
return `${data.status}`.toUpperCase();
},
},
actions: { actions: {
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {
return `<div class="flex flex-nowrap justify-center"> var spkShow ='';
<a class="btn btn-sm btn-icon btn-clear btn-info" href="basic-data/tujuan-penilaian/${data.id}/edit"> var spkCreate='';
if(!data.dokumenSPK)
{
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Proses Penawaran" onclick="spkCreate(${data.id})" >
<i class="ki-outline ki-notepad-edit"></i> <i class="ki-outline ki-notepad-edit"></i>
</a> </a>`;
<a onclick="deleteData(${data.id})" class="delete btn btn-sm btn-icon btn-clear btn-danger"> }
<i class="ki-outline ki-trash"></i> else
</a> {
</div>`; spkShow =`<div class="flex flex-nowrap justify-center">
<a onclick="spkShow(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Lihat SPK">
<i class="ki-outline ki-eye"></i>
</a> `;
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.id})" >
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
return `<div class="flex flex-nowrap justify-center">`
+spkShow+spkCreate+
`</div>`;
}, },
} }
}, },
@@ -143,6 +173,7 @@
dataTable.search(searchValue, true); dataTable.search(searchValue, true);
}); });
</script> </script>
@endpush @endpush

View File

@@ -0,0 +1,39 @@
@push('scripts')
@include('lpj::assetsku.includenya')
<script type="text/javascript">
function buildSPKPDF(penawaran_id) {
Swal.fire({
title: 'Are you sure?',
text: "Yakin Generate SPK ke PDF?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes'
}).then((result) => {
if (result.isConfirmed) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
$.ajax(`spk/${penawaran_id}`, {
type: 'PUT'
}).then((response) => {
// alert('ok Sukses');
swal.fire('Success!', 'File SPK berhasil di generate.', 'success').then(() => {
// window.location.reload();
});
$('#download-button').removeAttr('disabled');
$("#download-button").attr("href", response.spkpenawaran_path);
}).catch((error) => {
console.error('Error:', error);
Swal.fire('Error!', 'An error occurred while generate the PDF file.', 'error');
});
}
})
}
</script>
@endpush

View File

@@ -498,6 +498,15 @@ Breadcrumbs::for('otorisasitender.penawaran.show', function (BreadcrumbTrail $tr
$trail->push('Detail Data Otorisasi Penawaran'); $trail->push('Detail Data Otorisasi Penawaran');
}); });
// andy add Otorisasi Tender // andy add Otorisasi Tender
// spk
Breadcrumbs::for('spk', function (BreadcrumbTrail $trail) {
$trail->push('SPK', route('spk.index'));
});
Breadcrumbs::for('spk.edit', function (BreadcrumbTrail $trail) {
$trail->parent('spk');
$trail->push('Buat SPK');
});
// spk
// andy add registrasi final // andy add registrasi final
Breadcrumbs::for('registrasifinal', function (BreadcrumbTrail $trail) { Breadcrumbs::for('registrasifinal', function (BreadcrumbTrail $trail) {
$trail->push('Registrasi Final', route('registrasifinal.index')); $trail->push('Registrasi Final', route('registrasifinal.index'));

View File

@@ -4,6 +4,7 @@ use Modules\Lpj\Http\Controllers\RegistrasiController;
use Modules\Lpj\Http\Controllers\ProsesPenawaranController; use Modules\Lpj\Http\Controllers\ProsesPenawaranController;
use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController; use Modules\Lpj\Http\Controllers\ProsesPenawaranUlangController;
use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController; use Modules\Lpj\Http\Controllers\OtorisasiPenawaranController;
use Modules\Lpj\Http\Controllers\SpkController;
use Modules\Lpj\Http\Controllers\RegistrasiFinalController; use Modules\Lpj\Http\Controllers\RegistrasiFinalController;
Route::middleware(['auth'])->group(function () { Route::middleware(['auth'])->group(function () {
@@ -85,6 +86,15 @@ Route::middleware(['auth'])->group(function () {
}); });
}); });
Route::controller(SpkController::class)->group(function(){
Route::get('/spk/dokumennya', 'dokumennya')->name('spk.dokumennya');
Route::get('/spk', 'index')->name('spk.index');
Route::get('/spk/datatables', 'dataForDatatables')->name('spk.datatables');
Route::get('/spk/{spk}', 'show')->name('spk.show');
Route::get('/spk/{spk}/edit', 'edit')->name('spk.edit');
Route::put('/spk/{spk}', 'update')->name('spk.update');
});
Route::controller(RegistrasiFinalController::class)->group(function(){ Route::controller(RegistrasiFinalController::class)->group(function(){
Route::get('/registrasifinal', 'index')->name('registrasifinal.index'); Route::get('/registrasifinal', 'index')->name('registrasifinal.index');
Route::get('/registrasifinal/datatables', 'dataForDatatables')->name('registrasifinal.datatables'); Route::get('/registrasifinal/datatables', 'dataForDatatables')->name('registrasifinal.datatables');

View File

@@ -2,7 +2,6 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Modules\Lpj\Http\Controllers\SLAController; use Modules\Lpj\Http\Controllers\SLAController;
use Modules\Lpj\Http\Controllers\SpkController;
use Modules\Lpj\Http\Controllers\KJPPController; use Modules\Lpj\Http\Controllers\KJPPController;
use Modules\Lpj\Http\Controllers\TeamsController; use Modules\Lpj\Http\Controllers\TeamsController;
use Modules\Lpj\Http\Controllers\RegionController; use Modules\Lpj\Http\Controllers\RegionController;
@@ -67,7 +66,7 @@ Route::middleware(['auth'])->group(function () {
Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class); Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class);
Route::name('jenis-jaminan.')->prefix('jenis-jaminan')->group(function () { Route::name('jenis-jaminan.')->prefix('jenis-jaminan')->group(function () {
Route::get('legalitas/{id}', [JenisJaminanController::class, 'legalitasJaminan'])->name('legalitas'); Route::get('legalitas/{id}/{jenisJaminanId}', [DokumenJaminanController::class, 'getLegalitasJaminan'])->name('legalitas');
Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore'); Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables'])->name('datatables'); Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisJaminanController::class, 'export'])->name('export'); Route::get('export', [JenisJaminanController::class, 'export'])->name('export');
@@ -353,18 +352,6 @@ Route::middleware(['auth'])->group(function () {
Route::get('print/{id}', [PermohonanController::class, 'print'])->name('print'); Route::get('print/{id}', [PermohonanController::class, 'print'])->name('print');
}); });
Route::name('spk.')->prefix('spk')->group(function () {
// Route::get('download', [PermohonanController::class, 'createPermohonan'])->name('create.debitur');
Route::get('view', [SpkController::class, 'viewSpk'])->name('spk.view');
// Route::get('{id}/create', [PermohonanController::class, 'createPermohonan'])->name('create.debitur');
// Route::get('download/{id}', [PermohonanController::class, 'download'])->name('download');
// Route::get('restore/{id}', [PermohonanController::class, 'restore'])->name('restore');
// Route::get('datatables', [PermohonanController::class, 'dataForDatatables'])->name('datatables');
// Route::get('export', [PermohonanController::class, 'export'])->name('export');
});
Route::resource('spk', SpkController::class);
Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index'); Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index');
Route::resource('permohonan', PermohonanController::class); Route::resource('permohonan', PermohonanController::class);