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

This commit is contained in:
2024-11-28 16:14:49 +07:00
52 changed files with 3847 additions and 1693 deletions

View File

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

View File

@@ -9,6 +9,7 @@ use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\TeamsUsers; use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Exports\PermohonanExport; use Modules\Lpj\Exports\PermohonanExport;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
@@ -65,10 +66,33 @@ class ActivityController extends Controller
}) })
->get(); ->get();
return view('lpj::activity.progres_activity.index', compact('teamsActivity')); return view('lpj::activity.progres_activity.index', compact('teamsActivity'));
} }
function updateTeamAssingment(Request $request) {
try {
$id = $request->input('id');
$user = PenilaianTeam::where('penilaian_id', $id)->get();
if ($user) {
foreach ($user as $item) {
if($item->role == 'surveyor') {
$item->update(['user_id' => $request->surveyor_id]);
}
}
return redirect()->route('activity.progres.index')->with('success', 'Surveyor berhasil diganti');
}
} catch (\Throwable $th) {
return redirect()->route('activity.progres.index')->with('success', $th->getMessage());
}
}
public function senior() public function senior()
{ {

View File

@@ -4,6 +4,7 @@ namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Inspeksi;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
class PenilaiController extends Controller class PenilaiController extends Controller
@@ -21,6 +22,22 @@ class PenilaiController extends Controller
/** /**
* Show the form for creating a new resource. * Show the form for creating a new resource.
*/ */
public function lampiran($id){
$permohonan = Permohonan::with('debiture.documents')->find($id);
$jaminanId = $permohonan->debiture->documents->first()->jenis_jaminan_id;
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$formFoto = null;
if ($inpeksi) {
$formFoto = json_decode($inpeksi->foto_form, true);
}
return view('lpj::penilai.lampiran', compact('permohonan', 'formFoto'));
}
public function create() public function create()
{ {
return view('lpj::create'); return view('lpj::create');

View File

@@ -116,7 +116,7 @@ class PenilaianController extends Controller
} }
if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') {
$status = 'registered'; $status = $permohonan->status;
} else { } else {
$status = 'assign'; $status = 'assign';
} }

View File

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

View File

@@ -104,12 +104,11 @@ use Illuminate\Support\Facades\Auth;
} }
// data dokumen_spk // data spk_dokumen_path
if($obj->dokumen) if($obj->penawaran->spk_dokumen_path)
{ {
$spkpenawaran_path = Storage::url($obj->dokumen); $spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path);
// dd($spkpenawaran_path); $data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path;
$data[$i]->dokumen = $spkpenawaran_path;
} }
$i++; $i++;
@@ -148,9 +147,13 @@ use Illuminate\Support\Facades\Auth;
public function edit($id) public function edit($id)
{ {
// dd(Carbon::now()->addDays(1)->format('d F Y'));
// dd(Carbon::now()->subDays(1)->format('d F Y')); jenis_laporan_name
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi')
->where('detail_penawaran.status','=',1) ->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id) ->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
@@ -159,7 +162,10 @@ use Illuminate\Support\Facades\Auth;
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name', 'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address', 'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name' 'jenis_laporan.name as jenis_laporan_name',
'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name',
'jenis_laporan.code as jenis_laporan_code',
'penilaian.waktu_penilaian as penilaian_waktu_penilain'
)->first(); )->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
@@ -168,24 +174,77 @@ use Illuminate\Support\Facades\Auth;
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name', ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name',
'dokumen_jaminan.address as dokumen_jaminan_address'); 'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first();
if($penawaran->detail_penawaran_tgl_proposal) if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
return view('lpj::spk.edit', compact('data', 'penawaran')); // generate no spk
$spk_no_last=$penawaran->spk_no;
if(!$spk_no_last)
{
$spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code);
$penawaran->spk_no = $spk_no_last;
}
// pengecekan perubahan jenis report
$array_no_last = explode("/",$spk_no_last);
$jenis_report_old=trim($array_no_last[4]);
if($jenis_report_old!=$penawaran->jenis_laporan_code)
{
$penawaran->spk_no=str_replace($jenis_report_old,$penawaran->jenis_laporan_code,$spk_no_last);
}
// pengecekan perubahan jenis report
// generate no spk
// Jangka Waktu
// date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final)
$jangka_waktu='';
// Jangka Waktu
$persetujuan_no_proposal = $penawaran->detail_penawaran_no_proposal;
$persetujuan_tgl_proposal = $penawaran->detail_penawaran_tgl_proposal;
$persetujuan_sla_resume = '...';
$persetujuan_sla_final = '...';
if(null !==$penawaran->persetujuan)
{
$sla_resume_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_resume);
$sla_final_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_final);
$sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text));
$sla_final_text_terbilang = ucfirst(terbilang($sla_final_text));
$persetujuan_no_proposal = $penawaran->persetujuan->nomor_proposal_penawaran;
$persetujuan_tgl_proposal = Carbon::parse($penawaran->persetujuan->tanggal_proposal_penawaran)->format('d F Y');
$persetujuan_sla_resume = $sla_resume_text.' ('.$sla_resume_text_terbilang.')';
$persetujuan_sla_final = $sla_final_text.' ('.$sla_final_text_terbilang.')';
if($penawaran->penilaian_waktu_penilain)
{
$jangka_waktu_date_start=Carbon::parse($penawaran->penilaian_waktu_penilain)->addDays(1)->format('d F Y');
$jangka_waktu_date_end=Carbon::parse($penawaran->persetujuan->sla_final)->format('d F Y');
// Jangka Waktu
// date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final)
$jangka_waktu=$jangka_waktu_date_start.' - '.$jangka_waktu_date_end;
// Jangka Waktu
}
}
return view('lpj::spk.edit', compact('data', 'penawaran', 'persetujuan_no_proposal', 'persetujuan_tgl_proposal', 'persetujuan_sla_resume', 'persetujuan_sla_final', 'jangka_waktu'));
} }
public function update(Request $request, $id): JsonResponse public function update(Request $request, $id): JsonResponse
{ {
// init // init
$data1 = array(); $data1 = [];
$dataPermohonan = array(); // $dataPermohonan = array();
$dataPenawaran = [];
// data // data
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id') $penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id') ->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id') ->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi')
->where('detail_penawaran.status','=',1) ->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id) ->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
@@ -194,7 +253,9 @@ use Illuminate\Support\Facades\Auth;
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name', 'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address', 'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name' 'jenis_laporan.name as jenis_laporan_name',
'jenis_laporan.code as jenis_laporan_code',
'penilaian.waktu_penilaian as penilaian_waktu_penilain'
)->first(); )->first();
$permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi) $permohonan = Permohonan::where('nomor_registrasi','=',$penawaran->nomor_registrasi)
@@ -202,7 +263,12 @@ use Illuminate\Support\Facades\Auth;
->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id') ->leftJoin('jenis_jaminan', 'jenis_jaminan.id','=','dokumen_jaminan.jenis_jaminan_id')
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first();
// Jangka Waktu
// date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final)
$jangka_waktu='';
// Jangka Waktu
if($penawaran->detail_penawaran_tgl_proposal) if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y'); $penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
@@ -213,15 +279,78 @@ use Illuminate\Support\Facades\Auth;
$newFileNameWithPath = $folderPath . $newFileName; $newFileNameWithPath = $folderPath . $newFileName;
// update table permohonan // update table permohonan
$dataPermohonan=['dokumen' => $newFileNameWithPath]; // $dataPermohonan=['dokumen' => $newFileNameWithPath];
$data->update($dataPermohonan); // $data->update($dataPermohonan);
// update table permohonan // update table permohonan
// update table penawaran
$dataPenawaran['spk_dokumen_path'] = $newFileNameWithPath;
// $spk_no_last=$penawaran->spk_no;
if(!$penawaran->spk_no)
{
$spk_no_last = onLastnumberCodePenawaranSPK($penawaran->jenis_laporan_code);
// $penawaran->no_spk = $no_spk_last;
$date_now = Carbon::now()->format('Ymd');// 20240124
$spk_number = substr ($spk_no_last, 0, 3);
$dataPenawaran['spk_no'] = $spk_no_last;
$dataPenawaran['spk_no_core'] = $date_now.'_'.$spk_number;
$penawaran->spk_no = $spk_no_last;
}
// pengecekan perubahan jenis report
$spk_no_old=$penawaran->spk_no;
$array_no_last = explode("/",$spk_no_old);
$jenis_report_old=trim($array_no_last[4]);
if($jenis_report_old!=$penawaran->jenis_laporan_code)
{
$penawaran_spk_no_new=str_replace($jenis_report_old,$penawaran->jenis_laporan_code,$spk_no_old);
$penawaran->spk_no=$penawaran_spk_no_new;
$dataPenawaran['spk_no'] = $penawaran_spk_no_new;
}
// pengecekan perubahan jenis report
$penawaranM = PenawaranTender::find($penawaran->id);
$penawaranM->update($dataPenawaran);
// update table penawaran
// pdf path // pdf path
$spkpenawaran_path = Storage::url($newFileNameWithPath); $spkpenawaran_path = Storage::url($newFileNameWithPath);
$pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran')); $persetujuan_no_proposal = $penawaran->detail_penawaran_no_proposal;
$persetujuan_tgl_proposal = $penawaran->detail_penawaran_tgl_proposal;
$persetujuan_sla_resume = '...';
$persetujuan_sla_final = '...';
if(null !==$penawaran->persetujuan)
{
$sla_resume_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_resume);
$sla_final_text = hitungHariKerja($penawaran->persetujuan->created_at,$penawaran->persetujuan->sla_final);
$sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text));
$sla_final_text_terbilang = ucfirst(terbilang($sla_final_text));
$persetujuan_no_proposal = $penawaran->persetujuan->nomor_proposal_penawaran;
$persetujuan_tgl_proposal = Carbon::parse($penawaran->persetujuan->tanggal_proposal_penawaran)->format('d F Y');
$persetujuan_sla_resume = $sla_resume_text.' ('.$sla_resume_text_terbilang.')';
$persetujuan_sla_final = $sla_final_text.' ('.$sla_final_text_terbilang.')';
if($penawaran->penilaian_waktu_penilain)
{
$jangka_waktu_date_start=Carbon::parse($penawaran->penilaian_waktu_penilain)->addDays(1)->format('d F Y');
$jangka_waktu_date_end=Carbon::parse($penawaran->persetujuan->sla_final)->format('d F Y');
// Jangka Waktu
// date_start (penilaian.waktu_penilain + 1 day) - date_end (persetujuan_penawaran.sla_final)
$jangka_waktu=$jangka_waktu_date_start.' - '.$jangka_waktu_date_end;
// Jangka Waktu
}
}
$pdf =Pdf::loadView('lpj::spk.documentSPK', compact('data', 'penawaran', 'persetujuan_no_proposal', 'persetujuan_tgl_proposal', 'persetujuan_sla_resume', 'persetujuan_sla_final', 'jangka_waktu'));
$pdf->setPaper('A4', 'portrait');
$content = $pdf->download()->getOriginalContent(); $content = $pdf->download()->getOriginalContent();
Storage::put('public/'.$newFileNameWithPath,$content); Storage::put('public/'.$newFileNameWithPath,$content);
@@ -260,8 +389,10 @@ use Illuminate\Support\Facades\Auth;
} }
public function download($id) { public function download($id) {
$document = Permohonan::find($id); // dokumen pdf diambil dari penawaran.spk_dokumen_path
$permohonan = Permohonan::find($id);
$document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first();
return response()->download(storage_path('app/public/' .$document->dokumen)); return response()->download(storage_path('app/public/' .$document->spk_dokumen_path));
} }
} }

View File

@@ -39,12 +39,23 @@ use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Lantai; use Modules\Lpj\Models\Lantai;
use Modules\Lpj\Models\Inspeksi; use Modules\Lpj\Models\Inspeksi;
use Modules\Lpj\Models\ViewUnit; use Modules\Lpj\Models\ViewUnit;
use Modules\Lpj\Models\JenisUnit;
use Modules\Lpj\Models\BentukUnit;
use Modules\Lpj\Models\PosisiUnit;
use Modules\Lpj\Models\TerletakArea;
use Modules\Lpj\Models\FasilitasObjek;
use Modules\Lpj\Models\MerupakanDaerah;
use Modules\Lpj\Models\ObjekJaminan; use Modules\Lpj\Models\ObjekJaminan;
use Modules\Lpj\Models\ModelAlatBerat; use Modules\Lpj\Models\ModelAlatBerat;
use Modules\Lpj\Models\JenisPesawat; use Modules\Lpj\Models\JenisPesawat;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\JenisKapal; use Modules\Lpj\Models\JenisKapal;
use Modules\Lpj\Models\JenisKendaraan; use Modules\Lpj\Models\JenisKendaraan;
use Modules\Lpj\Models\RuteJaminan; use Modules\Lpj\Models\RuteJaminan;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\HubunganPemilikJaminan;
use Modules\Lpj\Models\HubunganPenghuniJaminan;
use Modules\Lpj\Models\AnalisaUnit; use Modules\Lpj\Models\AnalisaUnit;
use Modules\Lpj\Models\GolonganMasySekitar; use Modules\Lpj\Models\GolonganMasySekitar;
use Modules\Lpj\Models\TingkatKeramaian; use Modules\Lpj\Models\TingkatKeramaian;
@@ -105,8 +116,6 @@ class SurveyorController extends Controller
$modelAlatBerat = ModelAlatBerat::all(); $modelAlatBerat = ModelAlatBerat::all();
$denah = Denah::where('permohonan_id', $id)->get(); $denah = Denah::where('permohonan_id', $id)->get();
$fotojaminan = FotoJaminan::where('permohonan_id', $id)->get(); $fotojaminan = FotoJaminan::where('permohonan_id', $id)->get();
$analisa = Analisa::with('analisaUnit', 'analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan') $analisa = Analisa::with('analisaUnit', 'analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan')
@@ -170,6 +179,8 @@ class SurveyorController extends Controller
{ {
$data = $request->validated(); $data = $request->validated();
if (!$data) { if (!$data) {
return response()->json(['success' => false, 'message' => 'Invalid data'], 400); return response()->json(['success' => false, 'message' => 'Invalid data'], 400);
} }
@@ -181,20 +192,21 @@ class SurveyorController extends Controller
$rules = $this->getActionSpecificRules($data, $action, $request); $rules = $this->getActionSpecificRules($data, $action, $request);
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first(); $inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first();
if ($inspeksi) {
$inspeksi->update(['data_form' => json_encode($rules)]); if (!$inspeksi) {
} else {
Inspeksi::create([ Inspeksi::create([
'permohonan_id' => $request->permohonan_id, 'permohonan_id' => $request->input('permohonan_id'),
'data_form' => json_encode($rules), 'data_form' => json_encode($rules),
'name' => $request->type, 'name' => $request->input('type'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id'), 'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
]); ]);
} else {
$inspeksi->update(['data_form' => json_encode($rules)]);
} }
DB::commit(); DB::commit();
return response()->json(['success' => true, 'message' => 'Data saved successfully', 'data' => $rules], 200); return response()->json(['success' => true, 'message' => 'Data saved successfully', 'data' => $data], 200);
} catch (Exception $e) { } catch (Exception $e) {
DB::rollBack(); DB::rollBack();
return response()->json(['success' => false, 'message' => 'Failed to save data: ' . $e->getMessage()], 500); return response()->json(['success' => false, 'message' => 'Failed to save data: ' . $e->getMessage()], 500);
@@ -415,11 +427,11 @@ class SurveyorController extends Controller
try { try {
// $cekButton = $this->checkButtonStatus($id); // $cekButton = $this->checkButtonStatus($id);
// if (!$cekButton->buttonDisable) { // if (!$cekButton->buttonDisable) {
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
$permohonan->update([ $permohonan->update([
'status' => 'done', 'status' => 'done',
]); ]);
return response()->json(['success' => true, 'message' => 'Form surveyor submitted successfully'], 200); return response()->json(['success' => true, 'message' => 'Form surveyor submitted successfully'], 200);
// } else { // } else {
// return response()->json(['error' => 'Something went wrong'], 400); // return response()->json(['error' => 'Something went wrong'], 400);
// } // }
@@ -522,6 +534,43 @@ class SurveyorController extends Controller
->with('error', 'Gagal membuat jadwal: ' . $e->getMessage()); ->with('error', 'Gagal membuat jadwal: ' . $e->getMessage());
} }
} }
public function storeDataPembanding(Request $request)
{
$data = $request->all();
if (!$data) {
return response()->json(['success' => false, 'message' => 'Invalid data'], 400);
}
try {
DB::beginTransaction();
// $action = $request->input('type');
// $rules = $this->getActionSpecificRules($data, $action, $request);
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first();
if (!$inspeksi) {
Inspeksi::create([
'permohonan_id' => $request->input('permohonan_id'),
'data_pembanding' => json_encode($data),
'name' => $request->input('type'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
]);
} else {
$inspeksi->update(['data_pembanding' => json_encode($data)]);
}
DB::commit();
return response()->json(['success' => true, 'message' => 'Data saved successfully', 'data' => json_encode($data)], 200);
} catch (Exception $e) {
DB::rollBack();
return response()->json(['success' => false, 'message' => 'Failed to save data: ' . $e->getMessage()], 500);
}
}
/** /**
* Form inspeksi. * Form inspeksi.
*/ */
@@ -566,11 +615,14 @@ class SurveyorController extends Controller
$jenisKapal = JenisKapal::all(); $jenisKapal = JenisKapal::all();
$jenisPesawat = JenisPesawat::all(); $jenisPesawat = JenisPesawat::all();
$modelAlatBerat = ModelAlatBerat::all(); $modelAlatBerat = ModelAlatBerat::all();
$hubCadeb = HubunganPemilikJaminan::all();
// return response()->json([ $hubPenghuni = HubunganPenghuniJaminan::all();
// 'per'=> $jenisJaminan = JenisJaminan::all();
// $permohonan]); $fasilitasObjek = FasilitasObjek::all();
$merupakanDaerah = MerupakanDaerah::all();
$terletakDiArea = TerletakArea::all();
$posisiUnit = PosisiUnit::all();
$bentukUnit = BentukUnit::all();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
@@ -606,7 +658,15 @@ class SurveyorController extends Controller
'jenisKendaraan', 'jenisKendaraan',
'jenisKapal', 'jenisKapal',
'jenisPesawat', 'jenisPesawat',
'modelAlatBerat' 'modelAlatBerat',
'hubCadeb',
'jenisJaminan',
'fasilitasObjek',
'merupakanDaerah',
'terletakDiArea',
'posisiUnit',
'bentukUnit',
'hubPenghuni'
)); ));
} }
@@ -681,6 +741,7 @@ class SurveyorController extends Controller
$branches = Branch::all(); $branches = Branch::all();
$provinces = Province::all(); $provinces = Province::all();
$data = $this->getCommonData();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first(); $inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$forminspeksi = null; $forminspeksi = null;
@@ -690,7 +751,7 @@ class SurveyorController extends Controller
} }
// return response()->json($forminspeksi); // return response()->json($forminspeksi);
return view('lpj::surveyor.components.data-pembanding', compact('permohonan', 'surveyor', 'branches', 'provinces','forminspeksi')); return view('lpj::surveyor.components.data-pembanding', compact('permohonan', 'surveyor', 'branches', 'provinces', 'forminspeksi', 'data'));
} }
@@ -779,6 +840,12 @@ class SurveyorController extends Controller
'model-alat-berat' => ['Model Alat Berat', 'model-alat-berat', ModelAlatBerat::class], 'model-alat-berat' => ['Model Alat Berat', 'model-alat-berat', ModelAlatBerat::class],
'jenis-kapal' => ['Jenis Kapal', 'jenis-kapal', JenisKapal::class], 'jenis-kapal' => ['Jenis Kapal', 'jenis-kapal', JenisKapal::class],
'jenis-kendaraan' => ['Jenis Kendaraan', 'jenis-kendaraan', JenisKendaraan::class], 'jenis-kendaraan' => ['Jenis Kendaraan', 'jenis-kendaraan', JenisKendaraan::class],
'jenis-unit' => ['Jenis unit', 'jenis-unit', JenisUnit::class],
'terletak-area' => ['Terletak di Area', 'terletak-area', TerletakArea::class],
'merupakan-daerah' => ['Merupakan Daerah', 'merupakan-daerah', MerupakanDaerah::class],
'posisi-unit' => ['Posisi unit', 'posisi-unit', PosisiUnit::class],
'bentuk-unit' => ['Bentuk unit', 'bentuk-unit', BentukUnit::class],
'fasilitas-objek' => ['Fasilitas Umum Dekat Objek', 'fasilitas-objek', FasilitasObjek::class],
]; ];
@@ -830,8 +897,92 @@ class SurveyorController extends Controller
->route('basicdata.' . $type . '.index') ->route('basicdata.' . $type . '.index')
->with('success', 'Updated successfully'); ->with('success', 'Updated successfully');
} }
}
public function update_analisa($id, Request $request)
{
try {
$permohonan = Permohonan::with([
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
'penilaian',
'documents',
])->findOrFail($id);
$jenisAssetUpdated = false;
if ($request->input('types') == 'jenis_asset') {
$this->updateJenisAsset($permohonan, $request);
$jenisAssetUpdated = true;
}
if (in_array($request->input('types'), ['analisa_tanah', 'analisa_bangunan', 'analisa_unit'])) {
$key = match ($request->input('types')) {
'analisa_tanah' => 'luas_tanah',
'analisa_bangunan' => 'luas_bangunan',
'analisa_unit' => 'luas_unit',
};
$this->updateDetails($permohonan, $key, $request->input($key));
}
return response()->json([
'success' => true,
'message' => 'Data berhasil disimpan',
'jenis_asset' => $jenisAssetUpdated,
], 200);
} catch (\Exception $e) {
return response()->json(['error' => 'Something went wrong', 'message' => $e->getMessage()], 500);
}
}
private function updateJenisAsset($permohonan, $request)
{
$jenis_jaminan_id = $permohonan->debiture->documents->first()->jenis_jaminan_id;
DokumenJaminan::where('permohonan_id', $permohonan->id)
->where('jenis_jaminan_id', $jenis_jaminan_id)
->update([
'jenis_jaminan_id' => $request->input('jenis_asset'),
]);
}
private function updateDetails($permohonan, $key, $newValue)
{
$document = $permohonan->debiture->documents->first();
if (!$document) {
throw new \Exception("Document not found");
}
$detailsUpdate = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->first();
if (!$detailsUpdate) {
throw new \Exception("DetailDokumenJaminan not found");
}
$datas = json_decode($detailsUpdate->details, true) ?? [];
if (is_numeric($newValue)) {
$newValue = [$key => $newValue];
}
if (!is_array($newValue)) {
throw new \InvalidArgumentException("'{$key}' must be an array or valid JSON string");
}
foreach ($newValue as $subKey => $value) {
$datas[$subKey] = $value; // Update atau tambahkan key baru
}
$detailsUpdate->update([
'details' => json_encode($datas),
]);
} }
@@ -931,6 +1082,12 @@ class SurveyorController extends Controller
'Model alat berat' => ModelAlatBerat::class, 'Model alat berat' => ModelAlatBerat::class,
'Jenis kapal' => JenisKapal::class, 'Jenis kapal' => JenisKapal::class,
'Jenis kendaraan' => JenisKendaraan::class, 'Jenis kendaraan' => JenisKendaraan::class,
'Terletak di Area' => TerletakArea::class,
'Posisi unit' => PosisiUnit::class,
'Bentuk unit' => BentukUnit::class,
'Fasilitas Umum Dekat Objek' => FasilitasObjek::class,
'Merupakan Daerah' => MerupakanDaerah::class,
'Jenis unit' => JenisUnit::class,
]; ];
@@ -1067,6 +1224,12 @@ class SurveyorController extends Controller
'model-alat-berat' => ModelAlatBerat::class, 'model-alat-berat' => ModelAlatBerat::class,
'jenis-kapal' => JenisKapal::class, 'jenis-kapal' => JenisKapal::class,
'jenis-kendaraan' => JenisKendaraan::class, 'jenis-kendaraan' => JenisKendaraan::class,
'terletak-area' => TerletakArea::class,
'posisi-unit' => PosisiUnit::class,
'bentuk-unit' => BentukUnit::class,
'fasilitas-objek' => FasilitasObjek::class,
'merupakan-daerah' => MerupakanDaerah::class,
'jenis-unit' => JenisUnit::class,
]; ];
@@ -1098,6 +1261,13 @@ class SurveyorController extends Controller
'modelAlatBerat' => ModelAlatBerat::all(), 'modelAlatBerat' => ModelAlatBerat::all(),
'jenisKapal' => JenisKapal::all(), 'jenisKapal' => JenisKapal::all(),
'jenisKendaraan' => JenisKendaraan::all(), 'jenisKendaraan' => JenisKendaraan::all(),
'terletakArea' => TerletakArea::all(),
'posisiUnit' => PosisiUnit::all(),
'bentukUnit' => BentukUnit::all(),
'fasilitasObjek' => FasilitasObjek::all(),
'merupakanDaerah' => MerupakanDaerah::all(),
'jenisUnit' => JenisUnit::all(),
]; ];
} }
@@ -1125,11 +1295,18 @@ class SurveyorController extends Controller
'model-alat-berat' => ['Model alat berat', 'model-alat-berat'], 'model-alat-berat' => ['Model alat berat', 'model-alat-berat'],
'jenis-kapal' => ['Jenis kapal', 'jenis-kapal'], 'jenis-kapal' => ['Jenis kapal', 'jenis-kapal'],
'jenis-kendaraan' => ['Jenis kendaraan', 'jenis-kendaraan'], 'jenis-kendaraan' => ['Jenis kendaraan', 'jenis-kendaraan'],
'jenis-unit' => ['Jenis unit', 'jenis-unit'],
'terletak-area' => ['Terletak di Area', 'terletak-area'],
'merupakan-daerah' => ['Merupakan Daerah', 'merupakan-daerah'],
'posisi-unit' => ['Posisi unit', 'posisi-unit'],
'bentuk-unit' => ['Bentuk unit', 'bentuk-unit'],
'fasilitas-objek' => ['Fasilitas Umum Dekat Objek', 'fasilitas-objek'],
]; ];
private function getAssetData($data) private function getAssetData($data)
{ {
return [ return [
'asset' =>[
'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [], 'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [],
'jenis_asset' => $data['jenis_asset'] ?? null, 'jenis_asset' => $data['jenis_asset'] ?? null,
'jenis_asset_tidak_sesuai' => $data['jenis_asset_tidak_sesuai'] ?? null, 'jenis_asset_tidak_sesuai' => $data['jenis_asset_tidak_sesuai'] ?? null,
@@ -1142,13 +1319,15 @@ class SurveyorController extends Controller
'provinsi' => $data['provinsi'] ?? null, 'provinsi' => $data['provinsi'] ?? null,
'kordinat_lng' => $data['kordinat_lng'] ?? null, 'kordinat_lng' => $data['kordinat_lng'] ?? null,
'kordinat_lat' => $data['kordinat_lat'] ?? null, 'kordinat_lat' => $data['kordinat_lat'] ?? null,
]; ]];
} }
private function getTanahData($data, $request): array private function getTanahData($data, $request): array
{ {
return [ return [
'tanah' => [
'luas_tanah' => $data['luas_tanah'] ?? null, 'luas_tanah' => $data['luas_tanah'] ?? null,
'luas_tanah_tidak_sesuai' => $data['luas_tanah_tidak_sesuai'] ?? null, 'luas_tanah_tidak_sesuai' => $data['luas_tanah_tidak_sesuai'] ?? null,
'hadap_mata_angin' => $data['hadap_mata_angin'] ?? null, 'hadap_mata_angin' => $data['hadap_mata_angin'] ?? null,
@@ -1166,38 +1345,52 @@ class SurveyorController extends Controller
'lockland' => $data['lockland'] ?? null, 'lockland' => $data['lockland'] ?? null,
'kondisi_fisik_tanah' => $data['kondisi_fisik_tanah'] ?? [], 'kondisi_fisik_tanah' => $data['kondisi_fisik_tanah'] ?? [],
'kondisi_fisik_tanah_lainnya' => $data['kondisi_fisik_tanah_lainnya'] ?? null, 'kondisi_fisik_tanah_lainnya' => $data['kondisi_fisik_tanah_lainnya'] ?? null,
],
]; ];
} }
private function getBangunanData($data, $request): array private function getBangunanData($data, $request): array
{ {
// $kategori_bangunan = []; $data = $request->all();
// if ($request->has('spek_kategori_bagunan')) { $result = [];
// foreach ($request->input('spek_kategori_bagunan', []) as $value) {
// $kategori_bangunan[] = [ // foreach ($data['nama_bagunan'] as $index => $bangunan) {
// 'value' => [ // $bangunanData = [
// 'data' => $data['spek_bangunan'] ?? [], // 'bangunan' => $bangunan,
// ], // 'kategori' => []
// ]; // ];
// }
// } // foreach ($data['spek_kategori_bangunan'] as $kategoriIndex => $kategori) {
// if (isset($data['spek_bangunan'][$kategori])) {
// $bangunanData['kategori'][] = [
// 'kategori' => $kategori,
// 'spesifikasi' => $data['spek_bangunan'][$kategori]
// ];
// }
// }
// $result[] = $bangunanData;
// }
return [ return [
'bangunan' => [
'luas_tanah_bagunan' => $data['luas_tanah_bagunan'] ?? null, 'luas_tanah_bagunan' => $data['luas_tanah_bagunan'] ?? null,
'jenis_bangunan' => $data['jenis_bangunan'] ?? null, 'jenis_bangunan' => $data['jenis_bangunan'] ?? null,
'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null, 'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null,
'sifat_bangunan' => $data['sifat_bangunan'] ?? null, 'sifat_bangunan' => $data['sifat_bangunan'] ?? null,
'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null, 'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null,
'spek_kategori_bagunan' => $data['spek_kategori_bagunan'] ?? null, 'spesifikasi_bangunan' => $result ?? null,
'spek_bangunan' => $data['spek_bangunan'] ?? [], // 'spek_bangunan' => $data['spek_bangunan'] ?? [],
'sarana_pelengkap' => $data['sarana_pelengkap'] ?? [], 'sarana_pelengkap' => $data['sarana_pelengkap'] ?? [],
'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null, 'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null,
],
]; ];
} }
private function getLingkunganData($data, $request): array private function getLingkunganData($data, $request): array
{ {
return [ return [
'lingkungan' => [
'jarak_jalan_utama' => $data['jarak_jalan_utama'] ?? null, 'jarak_jalan_utama' => $data['jarak_jalan_utama'] ?? null,
'jalan_linkungan' => $data['jalan_linkungan'] ?? null, 'jalan_linkungan' => $data['jalan_linkungan'] ?? null,
'jarak_cbd_point' => $data['jarak_cbd_point'] ?? null, 'jarak_cbd_point' => $data['jarak_cbd_point'] ?? null,
@@ -1219,12 +1412,14 @@ class SurveyorController extends Controller
'nama_tps' => $data['nama_tps'] ?? null, 'nama_tps' => $data['nama_tps'] ?? null,
'merupakan_daerah' => $data['merupakan_daerah'] ?? null, 'merupakan_daerah' => $data['merupakan_daerah'] ?? null,
'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null, 'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null,
]
]; ];
} }
private function getFactData($data, $request): array private function getFactData($data, $request): array
{ {
$factData = [ $factData = [
'fakta' => [
'fakta_positif' => $data['fakta_positif'] ?? null, 'fakta_positif' => $data['fakta_positif'] ?? null,
'fakta_negatif' => $data['fakta_negatif'] ?? null, 'fakta_negatif' => $data['fakta_negatif'] ?? null,
'rute_menuju' => $data['rute_menuju'] ?? null, 'rute_menuju' => $data['rute_menuju'] ?? null,
@@ -1242,16 +1437,36 @@ class SurveyorController extends Controller
'gss' => $data['gss'] ?? null, 'gss' => $data['gss'] ?? null,
'pelebaran_jalan' => $data['pelebaran_jalan'] ?? null, 'pelebaran_jalan' => $data['pelebaran_jalan'] ?? null,
'nama_petugas' => $data['nama_petugas'] ?? null, 'nama_petugas' => $data['nama_petugas'] ?? null,
'lat' => $data['lat'] ?? null,
'lng' => $data['lng'] ?? null,
'keterangan' => $data['keterangan'] ?? null, 'keterangan' => $data['keterangan'] ?? null,
]
]; ];
$factData['foto_gistaru'] = $this->updateOrDeleteFile($data, $request, 'foto_gistaru');
$factData['foto_bhumi'] = $this->updateOrDeleteFile($data, $request, 'foto_bhumi');
$factData['foto_argis_region'] = $this->updateOrDeleteFile($data, $request, 'foto_argis_region');
$factData['foto_tempat'] = $this->updateOrDeleteFile($data, $request, 'foto_tempat');
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first();
$fotoTypes = [
'foto_gistaru',
'foto_bhumi',
'foto_argis_region',
'foto_tempat'
];
if ($inspeksi) {
$dataForm = json_decode($inspeksi->data_form, true);
foreach ($fotoTypes as $fotoType) {
// Jika ada file baru diupload
if ($request->hasFile($fotoType)) {
$factData[$fotoType] = $this->updateOrDeleteFile($dataForm, $request, $fotoType);
} else {
$factData[$fotoType] = $dataForm[$fotoType] ?? null;
}
}
}else{
foreach ($fotoTypes as $fotoType) {
$factData[$fotoType] = $this->updateOrDeleteFile($data, $request, $fotoType);
}
}
return $factData; return $factData;
} }
@@ -1262,6 +1477,7 @@ class SurveyorController extends Controller
if ($file->isValid()) { if ($file->isValid()) {
$fileName = time() . '_' . $file->getClientOriginalName(); $fileName = time() . '_' . $file->getClientOriginalName();
$path = $file->storeAs("public/surveyor/{$request->type}", $fileName); $path = $file->storeAs("public/surveyor/{$request->type}", $fileName);
if ($path === false) { if ($path === false) {
throw new Exception("Failed to store file for {$fileKey}"); throw new Exception("Failed to store file for {$fileKey}");
} }
@@ -1291,6 +1507,7 @@ class SurveyorController extends Controller
private function getKapalData($data, $request): array private function getKapalData($data, $request): array
{ {
return [ return [
'action' => $data['action'] ?? null, 'action' => $data['action'] ?? null,
'nama_wakil_debitur' => $data['nama_wakil_debitur'] ?? null, 'nama_wakil_debitur' => $data['nama_wakil_debitur'] ?? null,
'hub_calon_debitur' => $data['hub_calon_debitur'] ?? null, 'hub_calon_debitur' => $data['hub_calon_debitur'] ?? null,
@@ -1324,6 +1541,7 @@ class SurveyorController extends Controller
'depth' => $data['depth'] ?? null, 'depth' => $data['depth'] ?? null,
'draft' => $data['draft'] ?? null, 'draft' => $data['draft'] ?? null,
'lambung_kapal' => $data['lambung_kapal'] ?? null, 'lambung_kapal' => $data['lambung_kapal'] ?? null,
'dek' => $data['dek'] ?? null, 'dek' => $data['dek'] ?? null,
'struktur_rangka' => $data['struktur_rangka'] ?? null, 'struktur_rangka' => $data['struktur_rangka'] ?? null,
@@ -1377,6 +1595,7 @@ class SurveyorController extends Controller
'analisa_makro' => $data['analisa_makro'] ?? null, 'analisa_makro' => $data['analisa_makro'] ?? null,
'kesimpulan' => $data['kesimpulan'] ?? null, 'kesimpulan' => $data['kesimpulan'] ?? null,
'catatan' => $data['catatan'] ?? null, 'catatan' => $data['catatan'] ?? null,
]; ];
} }
public function getKendaraanData($data, $request): array public function getKendaraanData($data, $request): array
@@ -1666,3 +1885,4 @@ class SurveyorController extends Controller
} }
} }

View File

@@ -100,9 +100,9 @@ class FormSurveyorRequest extends FormRequest
'kondisi_bangunan' => 'nullable', 'kondisi_bangunan' => 'nullable',
'sifat_bangunan' => 'required|array', 'sifat_bangunan' => 'required|array',
'sifat_bangunan_input' => 'nullable|array', 'sifat_bangunan_input' => 'nullable|array',
'nama_bagunan' => 'required|array', 'nama_bagunan' => 'required',
'spek_kategori_bangunan' => 'required|array', 'spek_kategori_bangunan.*' => 'required',
'spek_kategori_bangunan.*' => 'required|string', 'spek_bangunan.*' => 'required',
'sarana_pelengkap' => 'required', 'sarana_pelengkap' => 'required',
'sarana_pelengkap_input' => 'nullable|array', 'sarana_pelengkap_input' => 'nullable|array',
]; ];

View File

@@ -3,7 +3,6 @@
namespace Modules\Lpj\Http\Requests; namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
class SurveyorRequest extends FormRequest class SurveyorRequest extends FormRequest
@@ -32,6 +31,12 @@ class SurveyorRequest extends FormRequest
'model-alat-berat' => 'model_alat_berat', 'model-alat-berat' => 'model_alat_berat',
'jenis-kapal' => 'jenis_kapal', 'jenis-kapal' => 'jenis_kapal',
'jenis-kendaraan' => 'jenis_kendaraan', 'jenis-kendaraan' => 'jenis_kendaraan',
'jenis-unit' => 'jenis_unit',
'terletak-area' => 'terletak_area',
'merupakan-daerah' => 'merupakan_daerah',
'posisi-unit' => 'posisi_unit',
'bentuk-unit' => 'bentuk_unit',
'fasilitas-objek' => 'fasilitas_objek',
]; ];
/** /**

24
app/Models/BentukUnit.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\BentukUnitFactory;
class BentukUnit extends Model
{
use HasFactory;
protected $table = 'bentuk_unit';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name', 'status'];
// protected static function newFactory(): BentukUnitFactory
// {
// // return BentukUnitFactory::new();
// }
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\FasilitasObjekFactory;
class FasilitasObjek extends Model
{
use HasFactory;
protected $table = 'fasilitas_objek';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name', 'status'];
// protected static function newFactory(): FasilitasObjekFactory
// {
// // return FasilitasObjekFactory::new();
// }
}

24
app/Models/JenisUnit.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\JenisUnitFactory;
class JenisUnit extends Model
{
use HasFactory;
protected $table = 'jenis_unit';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name', 'status'];
// protected static function newFactory(): JenisUnitFactory
// {
// // return JenisUnitFactory::new();
// }
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\MerupakanDaerahFactory;
class MerupakanDaerah extends Model
{
use HasFactory;
protected $table = 'merupakan_daerah';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name', 'status'];
// protected static function newFactory(): MerupakanDaerahFactory
// {
// // return MerupakanDaerahFactory::new();
// }
}

View File

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

24
app/Models/PosisiUnit.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\PosisiUnitFactory;
class PosisiUnit extends Model
{
use HasFactory;
protected $table = 'posisi_unit';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name', 'status'];
// protected static function newFactory(): PosisiUnitFactory
// {
// // return PosisiUnitFactory::new();
// }
}

View File

@@ -0,0 +1,25 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\TerletakAreaFactory;
class TerletakArea extends Model
{
use HasFactory;
protected $table = 'terletak_area';
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['code', 'name', 'status'];
// protected static function newFactory(): TerletakAreaFactory
// {
// // return TerletakAreaFactory::new();
// }
}

View File

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

View File

@@ -0,0 +1,37 @@
<?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::create('terletak_area', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('terletak_area');
}
};

View File

@@ -0,0 +1,37 @@
<?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::create('merupakan_daerah', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('merupakan_daerah');
}
};

View File

@@ -0,0 +1,37 @@
<?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::create('fasilitas_objek', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('fasilitas_objek');
}
};

View File

@@ -0,0 +1,37 @@
<?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::create('posisi_unit', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posisi_unit');
}
};

View File

@@ -0,0 +1,37 @@
<?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::create('jenis_unit', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('jenis_unit');
}
};

View File

@@ -0,0 +1,37 @@
<?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::create('bentuk_unit', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->index();
$table->string('name');
$table->boolean('status')->default(true);
$table->char('authorized_status', 1)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('bentuk_unit');
}
};

View File

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

View File

@@ -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('inspeksi', function (Blueprint $table) {
$table->json('data_pembanding')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('inspeksi', function (Blueprint $table) {
$table->dropColumn('data_pembanding');
});
}
};

View File

@@ -675,6 +675,49 @@
"surveyor" "surveyor"
] ]
}, },
{
"title": "Jenis Unit",
"path": "basicdata.jenis-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Bentuk Unit",
"path": "basicdata.bentuk-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Merupakan Daerah",
"path": "basicdata.merupakan-daerah",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Fasilitas Umum Dekat Objek",
"path": "basicdata.fasilitas-objek",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Posisi Unit",
"path": "basicdata.posisi-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{ {
"title": "Lalu Lintas Sekitar", "title": "Lalu Lintas Sekitar",
"path": "basicdata.lalu-lintas-lokasi", "path": "basicdata.lalu-lintas-lokasi",
@@ -806,7 +849,15 @@
"administrator", "administrator",
"surveyor" "surveyor"
] ]
} },
{
"title": "Terletak Di Area",
"path": "basicdata.terletak-area",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
}
] ]
} }
], ],

View File

@@ -118,12 +118,11 @@
<th class="min-w-[100px]">Paparan</th> <th class="min-w-[100px]">Paparan</th>
<th class="min-w-[100px]">Approve</th> <th class="min-w-[100px]">Approve</th>
<th class="min-w-[50px] text-center">Keterangan</th> <th class="min-w-[50px] text-center">Keterangan</th>
<th class="min-w-[50px] text-center">Action</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td colspan="12" class="text-center">No data available</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -151,6 +150,13 @@
@endsection @endsection
@push('scripts') @push('scripts')
<script>
function jadwal(id) {
document.getElementById('ids').value = id;
}
</script>
<script type="module"> <script type="module">
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const accordions = document.querySelectorAll('[data-accordion-item]'); const accordions = document.querySelectorAll('[data-accordion-item]');
@@ -224,10 +230,17 @@
title: 'Approve', title: 'Approve',
render: (item, data) => `${data.approve || ''}`, render: (item, data) => `${data.approve || ''}`,
}, },
actions: { keterangan: {
title: 'Keterangan', title: 'Keterangan',
render: (item, data) => `${data.keterangan || ''}`, render: (item, data) => `${data.keterangan || ''}`,
}, },
actions: {
title: 'Action',
render: (item, data) => `
<a class="btn btn-sm btn-icon btn-clear btn-primary" data-modal-toggle="#modal_jadwal" onclick="jadwal(${data.user_penilai[0].penilaian_id})">
<i class="ki-filled ki-calendar-edit"></i>
</a>`,
},
}, },
}; };
@@ -241,10 +254,6 @@
}); });
function formatDateFromISO(isoDateString) { function formatDateFromISO(isoDateString) {
const date = new Date(isoDateString); const date = new Date(isoDateString);
const day = String(date.getDate()).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0');
@@ -254,3 +263,46 @@
} }
</script> </script>
@endpush @endpush
<div class="modal" data-modal="true" id="modal_jadwal">
<div class="modal-content max-w-[600px] top-[10%]">
<div class="modal-header">
<h3 class="modal-title">Pilih</h3>
<button class="btn btn-xs btn-icon btn-light" data-modal-dismiss="true">
<i class="ki-outline ki-cross"></i>
</button>
</div>
<div class="modal-body">
<form action="{{ route('activity.update-team') }}" method="POST" enctype="multipart/form-data"
id="revisiForm">
@method('put')
@csrf
<input id="ids" type="hidden" name="id">
<div class="pl-1 grid gap-2.5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Pilih Team</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="input-group w-full">
<select id="surveyor_id" name="surveyor_id" class="input tomselect">
<option value="">Pilih Team</option>
@foreach ($teamsActivity as $item)
<option value="{{ $item->user->id }}">{{ $item->user->name }}</option>
@endforeach
</select>
</div>
</div>
<em id="error-surveyor_id" class="alert text-danger text-sm"></em>
</div>
</div>
<div class="modal-footer justify-end mt-2">
<div class="flex gap-4">
<button type="button" class="btn btn-light" data-modal-dismiss="true">Cancel</button>
<button id="btnSubmit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,259 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Lampiran foto dan dokument
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('penilai.show', $permohonan->id) }}" class="btn btn-xs btn-info"><i
class="ki-filled ki-exit-left"></i>
Back</a>
</div>
</div>
<div class="card-body grid gap-5">
@if (isset($permohonan))
<div data-accordion="true">
@foreach ($permohonan->debiture->documents as $dokumen)
<div class="accordion-item [&:not(:last-child)]:border-b border-b-gray-200"
data-accordion-item="true" id="accordion_detail_jaminan">
<button class="accordion-toggle py-4 group "
data-accordion-toggle="#accordion_detail_jaminan_{{ $loop->index }}">
<span class="text-base text-gray-900 font-medium">
Dokument
</span>
<i class="ki-outline ki-plus text-gray-600 text-2sm accordion-active:hidden block">
</i>
<i class="ki-outline ki-minus text-gray-600 text-2sm accordion-active:block hidden">
</i>
</button>
<div class="accordion-content hidden" id="accordion_detail_jaminan_{{ $loop->index }}">
<div class="card-table scrollable-x-auto pb-3">
<a href="{{ route('debitur.jaminan.bulk.download', ['id' => $permohonan->debiture->id, 'jaminan' => $dokumen->id]) }}"
class="ml-6 btn btn-dark dark:btn-light">
<i class="ki-outline ki-cloud-download"></i> Download Semua Dokumen
</a>
<table class="table align-middle text-sm text-gray-500">
@foreach ($dokumen->detail as $detail)
<tr>
<td class="py-2 text-gray-600 font-normal max-w-[100px]">
{{ $loop->index + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</td>
<td class="py-2 text-gray-800 font-normaltext-sm">
{{ $detail->name ?? '' }}
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px] align-top">
Dokumen Jaminan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
@if (isset($detail->dokumen_jaminan))
@php
$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
@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 (!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]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
@endif
<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>
@endforeach
@endif
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px]">
Keterangan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
{{ $detail->keterangan ?? '' }}
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
@endforeach
</div>
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Rute Menuju Lokasi
</h3>
</div>
<div class="card-body">
@if (isset($formFoto))
@foreach ($formFoto['rute_menuju_lokasi'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute'] . ' ' . $loop->index + 1 }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Object Jaminan
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['nama_objek'] }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_object']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@if (isset($formFoto['foto_basement']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Basement
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Basemnt
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Gerbang
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Gerbang
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Pendamping
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
</div>
@endsection

View File

@@ -91,120 +91,154 @@
</div> </div>
</div> </div>
@foreach($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->debiture->documents as $dokumen)
<div class="card"> <div class="card">
<div class="card-body grid gap-5"> <div class="card-body grid gap-5">
<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">
@php @php
$surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first(); $surveyor = $permohonan->penilaian->userPenilai->where('role', 'surveyor')->first();
$penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first(); $penilai = $permohonan->penilaian->userPenilai->where('role', 'penilai')->first();
@endphp @endphp
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Surveyor Surveyor
</label> </label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">{{ $surveyor->userPenilaiTeam->name }}</p> <p class="flex w-full text-gray-600 font-medium text-sm">{{ $surveyor->userPenilaiTeam->name }}
</p>
<p class="flex w-full text-gray-600 font-medium text-sm">{{ $permohonan->region->name }}</p> <p class="flex w-full text-gray-600 font-medium text-sm">{{ $permohonan->region->name }}</p>
</div>
<label class="form-label max-w-56">
Penilai
</label>
<div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">{{ $penilai->userPenilaiTeam->name }}
</p>
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $permohonan->region->name }}
</p>
</div>
</div> </div>
<label class="form-label max-w-56"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
Penilai <label class="form-label max-w-56">
</label> Tujuan Penilaian
<div class="flex flex-wrap items-baseline w-full"> </label>
<p class="flex text-gray-600 font-medium text-sm w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">{{ $penilai->userPenilaiTeam->name }}</p> {{ $permohonan->tujuanPenilaian->name }}</p>
<label class="form-label max-w-56">
<p class="flex w-full text-gray-600 font-medium text-sm"> Jenis Jaminan
{{ $permohonan->region->name }} </label>
<p class="flex text-gray-600 font-medium text-sm w-full">
@foreach ($permohonan->debiture->documents as $document)
{{ $document->jenisjaminan->name }}
@endforeach
</p> </p>
</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"> Tanggal Survei
Tujuan Penilaian </label>
</label> <div class="flex flex-wrap items-baseline w-full">
<p class="flex text-gray-600 font-medium text-sm w-full"> <p class="flex w-full text-gray-600 font-medium text-sm">
{{ $permohonan->tujuanPenilaian->name }}</p> {{ formatTanggalIndonesia($permohonan->created_at) }}</p>
<label class="form-label max-w-56"> </div>
Jenis Jaminan
</label>
<p class="flex text-gray-600 font-medium text-sm w-full">
@foreach ($permohonan->debiture->documents as $document)
{{ $document->jenisjaminan->name }}
@endforeach
</p>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Survei
</label>
<div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ formatTanggalIndonesia($permohonan->created_at) }}</p>
</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"> Tanggal Laporan
Tanggal Laporan </label>
</label> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-wrap items-baseline w-full"> <p class="flex w-full text-gray-600 font-medium text-sm">
<p class="flex w-full text-gray-600 font-medium text-sm"> {{ formatTanggalIndonesia($permohonan->created_at) }}</p>
{{ formatTanggalIndonesia($permohonan->created_at) }}</p> </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"> No. Laporan
No. Laporan </label>
</label> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-wrap items-baseline w-full"> <p class="flex w-full text-gray-600 font-medium text-sm">
<p class="flex w-full text-gray-600 font-medium text-sm"> PJ/001/001</p>
PJ/001/001</p> </div>
</div> </div>
</div> </div>
</div> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full card-footer mt-2 ">
<div class="flex gap-5">
<a class="btn btn-primary" href="{{ route('penilai.lampiran', $permohonan->id) }}">
LAMPIRAN FOTO DAN DOKUMEN
</a>
<a class="btn btn-primary" data-modal-toggle="#modal_2">
KERTAS KERJA
</a>
<a class="btn btn-primary" href="#">
PAPARAN
</a>
<a class="btn btn-primary" href="#">
WORKSHEET
</a>
</div>
<div class="flex justify-end gap-5">
<a class="btn btn-success" href="#">
SAVE
</a>
<a class="btn btn-success" href="#">
REPORT
</a>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full card-footer mt-2 "> <a class="btn btn-success" href="#">
<div class="flex gap-5"> PRINT OUT
<a class="btn btn-primary" href=""> </a>
LAMPIRAN FOTO DAN DOKUMEN </div>
</a>
<a class="btn btn-primary" href="">
KERTAS KERJA
</a>
<a class="btn btn-primary" href="">
PAPARAN
</a>
<a class="btn btn-primary" href="">
WORKSHEET
</a>
</div>
<div class="flex justify-end gap-5">
<a class="btn btn-success" href="">
SAVE
</a>
<a class="btn btn-success" href="">
REPORT
</a>
<a class="btn btn-success" href="">
PRINT OUT
</a>
</div> </div>
</div> </div>
</div>
@endforeach @endforeach
</div>
<div class="modal" data-modal="true" id="modal_2">
<div class="modal-content modal-center-y max-w-[600px]">
<div class="modal-header">
<h3 class="modal-title">
Kertas Kerja
</h3>
<button class="btn btn-xs btn-icon btn-light" data-modal-dismiss="true">
<i class="ki-outline ki-cross">
</i>
</button>
</div>
<div class="modal-body grid gap-5">
<div class="flex items-baseline w-full">
<label for="" class="form-label max-w-56">Import Kertas Kerja</label>
<div class="flex justify-center items-center gap-2">
<input type="file" name="" id="" class="file-input">
<button class="btn btn-outline btn-success">Upload</button>
</div>
</div>
<div class="form-group flex items-baseline flex-wrap">
<a class="btn btn-outline btn-primary w-full" href="#">Export Kertas Kerja</a>
</div>
</div>
<div class="modal-footer">
</div>
</div>
</div> </div>
@endsection @endsection

View File

@@ -16,7 +16,6 @@
<h3 class="card-title"> <h3 class="card-title">
Form Assignment Form Assignment
</h3> </h3>
</div> </div>
<div class="card-body"> <div class="card-body">

View File

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

View File

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

View File

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

View File

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

View File

@@ -43,7 +43,8 @@
<h3>Perihal: <b>Penunjukan sebagai Penyedia Jasa Penilaian Agunan</b></h3> <h3>Perihal: <b>Penunjukan sebagai Penyedia Jasa Penilaian Agunan</b></h3>
<br/> <br/>
<p style="text-align: justify;"> <p style="text-align: justify;">
Berdasarkan surat penawaran Saudara <span style="color: red;">[No proposal penawaran sesuai data pemeriksaan persetujuan penawaran]</span> tanggal <span style="color: red;">[Tgl proposal penawaran sesuai data pemeriksaan persetujuan penawaran]</span> atas nama <span style="color: red;">[Nama Debitur sesuai data register]</span>, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini. Berdasarkan surat penawaran Saudara <span style="color: red;">
[No proposal penawaran sesuai data pemeriksaan persetujuan penawaran]</span> tanggal <span style="color: red;">[Tgl proposal penawaran sesuai data pemeriksaan persetujuan penawaran]</span> atas nama <span style="color: red;">[Nama Debitur sesuai data register]</span>, dengan ini PT. Bank Artha Graha Internasional.Tbk., menunjuk Saudara untuk melakukan penilaian atas agunan sebagaimana rincian dibawah ini.
</p> </p>
<br/> <br/>
<h3>Rincian Penilaian</h3> <h3>Rincian Penilaian</h3>
@@ -87,13 +88,15 @@
<tr> <tr>
<td colspan="2" style="text-align: center;">i</td> <td colspan="2" style="text-align: center;">i</td>
<td> <td>
Resume akan disampaikan dalam <span style="color: red;">[SLA Resume - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak. Resume akan disampaikan dalam <span style="color: red;">
[SLA Resume - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak.
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2" style="text-align: center;">ii</td> <td colspan="2" style="text-align: center;">ii</td>
<td> <td>
Laporan penilaian lengkap akan disampaikan dalam <span style="color: red;">[SLA Final - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja sesuai proposal penawaran. Laporan penilaian lengkap akan disampaikan dalam <span style="color: red;">
[SLA Final - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja sesuai proposal penawaran.
</td> </td>
</tr> </tr>
</table> </table>

File diff suppressed because one or more lines are too long

View File

@@ -1,165 +1,153 @@
@include('lpj::surveyor.components.header') @include('lpj::surveyor.components.header')
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
<div class="card-body"> <div class="card-body">
<div class=" py-4 "> <div class=" py-4 ">
<h1 class="text-md font-medium text-gray-900">Analisa Unit</h1> <h1 class="text-md font-medium text-gray-900">Analisa Unit</h1>
</div> </div>
<div class="grid gap-5"> <div class="grid gap-5">
<!-- Luas tanah --> <!-- Luas tanah -->
<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">Luas Unit</label> <label class="form-label max-w-56">Luas Unit</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <label class="form-label flex items-center gap-3 text-nowrap">
<input type="radio" class="radio" name="luas_unit" value="sesuai" <input onclick="toggleFieldVisibility('luas_unit','luas_unit_tidak_sesuai', ['tidak sesuai'])" type="radio" class="radio" name="luas_unit" value="sesuai"
{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'sesuai' ? 'checked' : '' }}> {{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Sesuai</span> <span class="ml-2">Sesuai</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="luas_unit" value="tidak sesuai" <input onclick="toggleFieldVisibility('luas_unit','luas_unit_tidak_sesuai', ['tidak sesuai'])" type="radio" class="radio" name="luas_unit" value="tidak sesuai"
{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}> {{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span> <span class="ml-2">Tidak Sesuai</span>
</label> </label>
</div>
<div id="luas_unit_tidak_sesuai" class="flex items-baseline gap-2"
style="{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<input id="analisa_luas_unit_tidak_sesuai" type="text" name="luas_unit_tidak_sesuai" class="input w-full"
placeholder="Masukan Luas Tanah"
value="{{ old('luas_unit_tidak_sesuai', $forminspeksi['luas_unit_tidak_sesuai'] ?? '') }}">
<button type="button" class="btn btn-md btn-primary" onclick="updateAnalisa('analisa_unit')">Save</button>
</div>
</div>
<em id="error-luas_unit" class="alert text-danger text-sm"></em> <em id="error-luas_unit" class="alert text-danger text-sm"></em>
</div>
</div>
<!-- Jenis Unit -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Jenis Unit</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2">
@if (isset($jenisBangunan))
@foreach ($jenisBangunan as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="jenis_unit[]" type="checkbox"
value="{{ $item->name }}" {{ in_array($item->name, old('jenis_unit', $forminspeksi['jenis_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach
@endif
</div>
<em id="error-jenis_unit" class="alert text-danger text-sm"></em>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kondisi Unit</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2">
@if (isset($kondisiBangunan))
@foreach ($kondisiBangunan as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_unit[]" type="checkbox"
value="{{ $item->name }}" {{ in_array($item->name, old('kondisi_unit', $forminspeksi['kondisi_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach
@endif
</div>
<em id="error-kondisi_unit" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
</div>
<!-- Posisi Unit --> <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">Kondisi Unit</label>
<label class="form-label max-w-56">Posisi Unit</label> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-wrap items-baseline w-full"> <div class="flex-wrap items-stretch">
<div class="flex-wrap items-stretch"> <div class="flex flex-col items-start gap-2">
<div class="flex flex-col items-start gap-2"> @if (isset($kondisiBangunan))
@if (isset($ketinggianTanah)) @foreach ($kondisiBangunan as $item)
@foreach ($ketinggianTanah as $item) <label class="form-label flex items-center gap-2.5 text-nowrap">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <input class="checkbox" name="kondisi_unit[]" type="checkbox"
<input class="checkbox" name="posisi_unit[]" type="checkbox" value="{{ $item->name }}"
value="{{ $item->name }}" {{ in_array($item->name, old('posisi_unit', $forminspeksi['posisi_unit'] ?? [])) ? 'checked' : '' }} /> {{ in_array($item->name, old('kondisi_unit', $forminspeksi['kondisi_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@endforeach @endforeach
@endif @endif
</div> </div>
<em id="error-posisi_unit" class="alert text-danger text-sm"></em> <em id="error-kondisi_unit" class="alert text-danger text-sm"></em>
</div>
</div> </div>
</div> </div>
</div>
<!-- Posisi Unit -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Posisi Unit</label>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex flex-wrap items-baseline w-full">
<label class="form-label max-w-56">Lantai</label> <div class="flex-wrap items-stretch">
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-col items-start gap-2">
<div class="flex-wrap items-stretch"> @if (isset($posisiUnit))
@foreach ($posisiUnit as $item)
<div class="flex flex-col items-start gap-2"> <label class="form-label flex items-center gap-2.5 text-nowrap">
@if (isset($lantai)) <input class="checkbox" name="posisi_unit[]" type="checkbox"
@foreach ($lantai as $item) value="{{ $item->name }}"
<label class="form-label flex items-center gap-2.5 text-nowrap"> {{ in_array($item->name, old('posisi_unit', $forminspeksi['posisi_unit'] ?? [])) ? 'checked' : '' }} />
<input class="checkbox" name="lantai[]" type="checkbox" {{ $item->name }}
value="{{ $item->name }}" {{ in_array($item->name, old('lantai', $forminspeksi['lantai'] ?? [])) ? 'checked' : '' }} /> </label>
{{ $item->name }} @endforeach
</label> @endif
@endforeach </div>
@endif <em id="error-posisi_unit" class="alert text-danger text-sm"></em>
</div>
</div> </div>
<em id="error-lantai" class="alert text-danger text-sm"></em>
</div> </div>
</div>
</div>
<!-- Kondisi Fisik Tanah --> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Lantai</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex flex-col items-start gap-4">
<label class="form-label max-w-56">View</label> @if (isset($lantai))
<div class="flex flex-wrap items-baseline w-full"> @foreach ($lantai as $item)
<div class="flex-wrap items-stretch"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="flex flex-col items-start gap-2"> <label class="form-label max-w-56 gap-2.5" style="width: 500px">
@if (isset($viewUnit)) <input class="checkbox" name="lantai[]" type="checkbox"
@foreach ($viewUnit as $item) value="{{ $item->name }}"
<label class="form-label flex items-center gap-2.5 text-nowrap"> {{ in_array($item->name, old('lantai', $forminspeksi['lantai'] ?? [])) ? 'checked' : '' }} />
<input class="checkbox" name="view[]" type="checkbox" {{ $item->name }}
value="{{ $item->name }}" {{ in_array($item->name, old('view', $forminspeksi['view'] ?? [])) ? 'checked' : '' }} /> </label>
{{ $item->name }} <input type="text" name="lantai_input[]" class="input w-full"
</label> id="lantaiInput" placeholder="Masukkan {{ $item->name }}..."
@endforeach value="{{ old('lantai_input.' . $loop->index, $forminspeksi['lantai_input'][$loop->index] ?? '') }}">
@endif </div>
@endforeach
@endif
</div>
<em id="error-lantai" class="alert text-danger text-sm"></em>
</div> </div>
<em id="error-view" class="alert text-danger text-sm"></em>
</div> </div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <!-- Kondisi Fisik Tanah -->
<label class="form-label max-w-56">Bentuk Unit</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="flex-wrap items-stretch"> <label class="form-label max-w-56">View</label>
<div class="flex flex-col items-start gap-2"> <div class="flex flex-wrap items-baseline w-full">
@if (isset($bentukTanah)) <div class="flex-wrap items-stretch">
@foreach ($bentukTanah as $item) <div class="flex flex-col items-start gap-2">
<label class="form-label flex items-center gap-2.5 text-nowrap"> @if (isset($viewUnit))
<input class="checkbox" name="bentuk_unit[]" type="checkbox" @foreach ($viewUnit as $item)
value="{{ $item->name }}" {{ in_array($item->name, old('bentuk_unit', $forminspeksi['bentuk_unit'] ?? [])) ? 'checked' : '' }} /> <label class="form-label flex items-center gap-2.5 text-nowrap">
{{ $item->name }} <input class="checkbox" name="view[]" type="checkbox"
</label> value="{{ $item->name }}"
@endforeach {{ in_array($item->name, old('view', $forminspeksi['view'] ?? [])) ? 'checked' : '' }} />
@endif {{ $item->name }}
</label>
@endforeach
@endif
</div>
<em id="error-view" class="alert text-danger text-sm"></em>
</div>
</div> </div>
<em id="error-bentuk_unit" class="alert text-danger text-sm"></em>
</div> </div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Bentuk Unit</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-2">
@if (isset($bentukUnit))
@foreach ($bentukUnit as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="bentuk_unit[]" type="checkbox"
value="{{ $item->name }}"
{{ in_array($item->name, old('bentuk_unit', $forminspeksi['bentuk_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach
@endif
</div>
<em id="error-bentuk_unit" class="alert text-danger text-sm"></em>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>

View File

@@ -5,23 +5,49 @@
</div> </div>
<div class="grid gap-5"> <div class="grid gap-5">
<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">Luas Tanah</label> <label class="form-label max-w-56">Luas Bagunan</label>
<div class="mt-2">
@if (isset($permohonan->debiture->documents))
@foreach ($permohonan->debiture->documents as $item)
@php
$luas = $item->detail;
$details = json_decode($luas[0]->details, true);
$luas_bangunan = isset($details['luas_bangunan']) ? $details['luas_bangunan'] : 'N/A';
@endphp
<p class="text-2sm text-gray-700">{{ $luas_bangunan }} m<sup>2</sup></p>
@endforeach
@endif
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <label class="form-label flex items-center gap-3 text-nowrap">
<input type="radio" class="radio" name="luas_tanah_bagunan" value="sesuai" <input type="radio"
{{ old('luas_tanah_bagunan', $forminspeksi['luas_tanah_bagunan'] ?? '') == 'sesuai' ? 'checked' : '' }}> onclick="toggleFieldVisibility('luas_tanah_bagunan', 'luas_tanah_bagunan_tidak_sesuai', ['tidak sesuai'])"
class="radio" name="luas_tanah_bagunan" value="sesuai"
{{ old('luas_tanah_bagunan', $forminspeksi['bangunan']['luas_tanah_bagunan'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Sesuai</span> <span class="ml-2">Sesuai</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="luas_tanah_bagunan" value="tidak sesuai" <input type="radio" class="radio" name="luas_tanah_bagunan"
{{ old('luas_tanah_bagunan', $forminspeksi['luas_tanah_bagunan'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}> onclick="toggleFieldVisibility('luas_tanah_bagunan', 'luas_tanah_bagunan_tidak_sesuai', ['tidak sesuai'])"
value="tidak sesuai"
{{ old('luas_tanah_bagunan', $forminspeksi['bangunan']['luas_tanah_bagunan'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span> <span class="ml-2">Tidak Sesuai</span>
</label> </label>
<div id="luas_tanah_bagunan_tidak_sesuai" class="flex items-baseline gap-2"
style="{{ old('luas_tanah_bagunan_bagunan', $forminspeksi['bangunan']['luas_tanah_bagunan_bagunan'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<input type="text"id="analisa_bangunan_tidak_sesuai" name="luas_tanah_bagunan_tidak_sesuai" class="input w-full"
placeholder="Masukan Luas Bangunan Tidak Sesuai..."
value="{{ old('luas_tanah_bagunan_tidak_sesuai', $forminspeksi['bangunan']['luas_tanah_bagunan_tidak_sesuai'] ?? '') }}">
<button type="button" class="btn btn-md btn-primary" onclick="updateAnalisa('analisa_bangunan')">Save</button>
</div>
</div> </div>
<em id="error-luas_tanah_bagunan" class="alert text-danger text-sm"></em> <em id="error-luas_tanah_bagunan" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
</div>
<!-- Jenis Bangunan --> <!-- Jenis Bangunan -->
@@ -34,7 +60,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="jenis_bangunan[]" type="checkbox" <input class="checkbox" name="jenis_bangunan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ old('jenis_bangunan') == $item->name || isset($forminspeksi['jenis_bangunan']) == $item->name ? 'checked' : '' }} /> {{ old('jenis_bangunan') == $item->name || isset($forminspeksi['bangunan']['jenis_bangunan']) == $item->name ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@if (strcasecmp($item->name, 'lainnya') == 0) @if (strcasecmp($item->name, 'lainnya') == 0)
@@ -67,7 +93,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_bangunan[]" type="checkbox" <input class="checkbox" name="kondisi_bangunan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('kondisi_bangunan', $forminspeksi['kondisi_bangunan'] ?? [])) ? 'checked' : '' }} /> {{ in_array($item->name, old('kondisi_bangunan', $forminspeksi['bangunan']['kondisi_bangunan'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@if (strcasecmp($item->name, 'lainnya') == 0) @if (strcasecmp($item->name, 'lainnya') == 0)
@@ -75,12 +101,12 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_bangunan[]" type="checkbox" <input class="checkbox" name="kondisi_bangunan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('kondisi_bangunan', $forminspeksi['kondisi_bangunan'] ?? [])) ? 'checked' : '' }} /> {{ in_array($item->name, old('kondisi_bangunan', $forminspeksi['bangunan']['kondisi_bangunan'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
<input type="text" name="kondisi_bangunan_lainnya" class="input mt-2" <input type="text" name="kondisi_bangunan_lainnya" class="input mt-2"
id="bentukTanahInput" placeholder="Masukkan Kondisi Bangunan..." id="bentukTanahInput" placeholder="Masukkan Kondisi Bangunan..."
value="{{ old('kondisi_bangunan_lainnya', $forminspeksi['kondisi_bangunan_lainnya'] ?? '') }}"> value="{{ old('kondisi_bangunan_lainnya', $forminspeksi['bangunan']['kondisi_bangunan_lainnya'] ?? '') }}">
</div> </div>
@endif @endif
@endforeach @endforeach
@@ -101,12 +127,12 @@
<label class="form-label max-w-56 gap-2.5" style="width: 500px"> <label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="sifat_bangunan[]" type="checkbox" <input class="checkbox" name="sifat_bangunan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('sifat_bangunan', $forminspeksi['sifat_bangunan'] ?? [])) ? 'checked' : '' }} /> {{ in_array($item->name, old('sifat_bangunan', $forminspeksi['bangunan']['sifat_bangunan'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
<input type="text" name="sifat_bangunan_input[]" class="input w-full" <input type="text" name="sifat_bangunan_input[]" class="input w-full"
id="sifat_bangunan" placeholder="Masukkan {{ $item->name }}..." id="sifat_bangunan" placeholder="Masukkan {{ $item->name }}..."
value="{{ old('sifat_bangunan_input.' . $loop->index, $forminspeksi['sifat_bangunan_input'][$loop->index] ?? '') }}"> value="{{ old('sifat_bangunan_input.' . $loop->index, $forminspeksi['bangunan']['sifat_bangunan_input'][$loop->index] ?? '') }}">
</div> </div>
@endforeach @endforeach
@endif @endif
@@ -120,13 +146,14 @@
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Spek Bangunan</label> <label class="form-label max-w-56">Spek Bangunan</label>
<div class="flex flex-wrap items-baseline w-full" id="spek-bangunan-container"> <div class="flex flex-wrap items-baseline w-full" id="spek-bangunan-container">
<div class="spek-bangunan w-full gap-4"> <div class="spek-bangunan w-full gap-4 mt-5">
<input type="hidden" name="nama_bagunan[]" value="Bangunan"> <input type="hidden" name="nama_bagunan[]" value="Bangunan">
<label class="building-label form-label">Bangunan 1</label>
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2 w-full"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2 w-full">
@if (@isset($spekKategoriBagunan)) @if (@isset($spekKategoriBagunan))
@foreach ($spekKategoriBagunan as $item) @foreach ($spekKategoriBagunan as $item)
<div> <div>
<input type="hidden" name="spek_kategori_bangunan[]" <input type="hidden" name="spek_kategori_bangunan.[]"
value="{{ $item->name }}"> value="{{ $item->name }}">
<label <label
class="form-label flex items-center gap-3 text-nowrap">{{ $item->name }}</label> class="form-label flex items-center gap-3 text-nowrap">{{ $item->name }}</label>
@@ -136,7 +163,7 @@
@if ($spek->spek_kategori_bangunan_id == $item->id) @if ($spek->spek_kategori_bangunan_id == $item->id)
<label class="form-label flex items-center gap-2.5"> <label class="form-label flex items-center gap-2.5">
<input class="checkbox" <input class="checkbox"
name="spek_bangunan_{{ $item->name }}[]" name="spek_bangunan[{{ $item->name }}][]"
type="checkbox" value="{{ $spek->name }}" /> type="checkbox" value="{{ $spek->name }}" />
{{ $spek->name }} {{ $spek->name }}
</label> </label>
@@ -150,14 +177,14 @@
@endforeach @endforeach
@endif @endif
</div> </div>
<button type="button" <button type="button" class="mt-2 btn btn-danger btn-outline btn-xs delete-button"
class="mt-2 btn btn-danger btn-outline btn-xs remove-btn" style="display: none;">Hapus</button> style="display: none;">Hapus</button>
</div> </div>
</div> </div>
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
<button class="btn btn-xs btn-primary" type="button" onclick="addClonableItem('spek-bangunan-container', 'spek-bangunan')"> <button class="btn btn-xs btn-primary" type="button" id="addBagunan">
tambah bangunan tambah bangunan
<i class="ki-filled ki-plus"></i> <i class="ki-filled ki-plus"></i>
</button> </button>
@@ -176,12 +203,12 @@
<label class="form-label max-w-56 gap-2.5" style="width: 500px"> <label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="sarana_pelengkap[]" type="checkbox" <input class="checkbox" name="sarana_pelengkap[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('sarana_pelengkap', $forminspeksi['sarana_pelengkap'] ?? [])) ? 'checked' : '' }} /> {{ in_array($item->name, old('sarana_pelengkap', $forminspeksi['bangunan']['sarana_pelengkap'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
<input type="text" name="sarana_pelengkap_input[]" class="input w-full" <input type="text" name="sarana_pelengkap_input[]" class="input w-full"
id="bentukTanahInput" placeholder="Masukkan {{ $item->name }}..." id="bentukTanahInput" placeholder="Masukkan {{ $item->name }}..."
value="{{ old('sarana_pelengkap_input.' . $loop->index, $forminspeksi['sarana_pelengkap_input'][$loop->index] ?? '') }}"> value="{{ old('sarana_pelengkap_input.' . $loop->index, $forminspeksi['bangunan']['sarana_pelengkap_input'][$loop->index] ?? '') }}">
</div> </div>
@endforeach @endforeach
@endif @endif
@@ -192,13 +219,15 @@
</div> </div>
</div> </div>
</div> </div>
@push('scripts') @push('scripts')
<script> <script>
const spekBangunanContainer = document.getElementById('spek-bangunan-container'); const spekBangunanContainer = document.getElementById('spek-bangunan-container');
function updateDeleteButtonsVisibility() { function updateDeleteButtonsVisibility() {
const allDeleteButtons = spekBangunanContainer.querySelectorAll('.delete-button'); const allDeleteButtons = spekBangunanContainer.querySelectorAll('.delete-button');
// Only show the delete buttons if there are more than one form
allDeleteButtons.forEach(button => { allDeleteButtons.forEach(button => {
if (spekBangunanContainer.querySelectorAll('.spek-bangunan').length > 1) { if (spekBangunanContainer.querySelectorAll('.spek-bangunan').length > 1) {
button.style.display = 'inline-block'; button.style.display = 'inline-block';
@@ -208,29 +237,56 @@
}); });
} }
function updateBuildingLabels() {
const allSpekBangunan = spekBangunanContainer.querySelectorAll('.spek-bangunan');
allSpekBangunan.forEach((div, index) => {
const label = div.querySelector('.building-label');
if (label) {
label.textContent = `Bangunan ${index + 1}`;
}
});
}
document.getElementById('addBagunan').addEventListener('click', function() { document.getElementById('addBagunan').addEventListener('click', function() {
const newDiv = spekBangunanContainer.querySelector('.spek-bangunan').cloneNode(true); const newDiv = spekBangunanContainer.querySelector('.spek-bangunan').cloneNode(true);
// Clear the selected values of the cloned input fields // Update input fields
newDiv.querySelectorAll('select').forEach(select => { newDiv.querySelectorAll('select, input').forEach((input, index) => {
select.value = ''; if (input.type === 'checkbox' || input.type === 'radio') {
input.checked = false;
} else {
input.value = '';
}
// Update name attribute
if (input.name) {
const baseName = input.name.split('[')[0]; // Get the base name
const count = spekBangunanContainer.querySelectorAll('.spek-bangunan').length + 1;
input.name = `${baseName}[${count}]`;
}
}); });
// Append the cloned div to the container // Append the cloned div
spekBangunanContainer.appendChild(newDiv); spekBangunanContainer.appendChild(newDiv);
// Add event listener to the delete button in the cloned div // Add event listener to the delete button in the cloned div
newDiv.querySelector('.delete-button').addEventListener('click', function() { newDiv.querySelector('.delete-button').addEventListener('click', function() {
spekBangunanContainer.removeChild(newDiv); spekBangunanContainer.removeChild(newDiv);
updateDeleteButtonsVisibility(); updateDeleteButtonsVisibility();
updateBuildingLabels();
}); });
// Update delete buttons visibility // Update UI
updateDeleteButtonsVisibility(); updateDeleteButtonsVisibility();
updateBuildingLabels();
}); });
// Initial delete button visibility
updateDeleteButtonsVisibility(); // Initial setup: Ensure "Bangunan 1" is labeled
document.addEventListener('DOMContentLoaded', () => {
updateDeleteButtonsVisibility();
updateBuildingLabels(); // Ensure the first label is set
});
// Add delete functionality to the initial form // Add delete functionality to the initial form
spekBangunanContainer.querySelectorAll('.delete-button').forEach(button => { spekBangunanContainer.querySelectorAll('.delete-button').forEach(button => {
@@ -241,6 +297,7 @@
if (spekBangunanContainer.querySelectorAll('.spek-bangunan').length > 1) { if (spekBangunanContainer.querySelectorAll('.spek-bangunan').length > 1) {
spekBangunan.remove(); spekBangunan.remove();
updateDeleteButtonsVisibility(); updateDeleteButtonsVisibility();
updateBuildingLabels(); // Update the labels after removing
} }
}); });
}); });

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@
@endsection --}} @endsection --}}
@section('content') @section('content')
@include('lpj::assetsku.includenya')
<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">
<div class="card min-w-full"> <div class="card min-w-full">
<div class="card min-w-full"> <div class="card min-w-full">
@@ -234,6 +235,7 @@
if (response.success) { if (response.success) {
window.location.href = window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=denah'; '{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=denah';
toastrSuccessBuild(response.message);
} }
console.log(response); console.log(response);
}, },
@@ -249,6 +251,8 @@
console.log('Status:', status); console.log('Status:', status);
console.log('Response:', xhr.responseText); console.log('Response:', xhr.responseText);
console.log(errors); console.log(errors);
toastrErrorBuild(error);
}, },
complete: function() { complete: function() {
// Re-enable the button and hide the spinner // Re-enable the button and hide the spinner

View File

@@ -8,13 +8,23 @@
<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">Faktor Positif</label> <label class="form-label max-w-56">Faktor Positif</label>
<div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full"> <div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full">
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full"> @if (!empty($forminspeksi['fakta']['fakta_positif']))
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', $forminspeksi['fakta_positif'][0] ?? '') }}</textarea> @foreach ($forminspeksi['fakta']['fakta_positif'] as $index => $positif)
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<i class="ki-outline ki-trash"></i> <textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea>
</button> <button class="btn btn-danger btn-sm remove-btn" type="button">
<em id="error-fakta_positif" class="alert text-danger text-sm"></em> <i class="ki-outline ki-trash"></i>
</div> </button>
</div>
@endforeach
@else
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5" <button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-positif-container', 'fakta_positif')"> onclick="addClonableItem('fakta-positif-container', 'fakta_positif')">
<i class="ki-outline ki-plus"></i> <i class="ki-outline ki-plus"></i>
@@ -22,16 +32,30 @@
</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">Faktor Negatif</label> <label class="form-label max-w-56">Faktor Negatif</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full"> <div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $forminspeksi['fakta_negatif'][0] ?? '') }}</textarea> @if (!empty($forminspeksi['fakta']['fakta_negatif']))
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> @foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif)
<i class="ki-outline ki-trash"></i> <div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
</button> <textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</textarea>
<em id="error-fakta_negatif" class="alert text-danger text-sm"></em> <button class="btn btn-danger btn-sm remove-btn" type="button"
</div> style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $forminspeksi['fakta']['fakta_negatif'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-fakta_negatif" class="alert text-danger text-sm"></em>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5" <button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-negatif-container', 'fakta_negatif')"> onclick="addClonableItem('fakta-negatif-container', 'fakta_negatif')">
<i class="ki-outline ki-plus"></i> <i class="ki-outline ki-plus"></i>
@@ -43,7 +67,7 @@
<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">Rute Menuju</label> <label class="form-label max-w-56">Rute Menuju</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea mt-2" name="rute_menuju" rows="3">{{ old('rute_menuju.0', $forminspeksi['rute_menuju'][0] ?? '') }}</textarea> <textarea class="textarea mt-2" name="rute_menuju" rows="3">{{ old('rute_menuju.0', $forminspeksi['fakta']['rute_menuju'][0] ?? '') }}</textarea>
<em id="error-rute_menuju" class="alert text-danger text-sm"></em> <em id="error-rute_menuju" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@@ -59,12 +83,12 @@
<label class="form-label max-w-56 gap-2.5" style="width: 500px"> <label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="batas_batas[]" type="checkbox" <input class="checkbox" name="batas_batas[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('batas_batas', $forminspeksi['batas_batas'] ?? [])) ? 'checked' : '' }} /> {{ in_array($item->name, old('batas_batas', $forminspeksi['fakta']['batas_batas'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
<input type="text" name="batas_batas_input[]" class="input w-full" <input type="text" name="batas_batas_input[]" class="input w-full"
id="bentukTanahInput" placeholder="Masukkan Batas {{ $item->name }}..." id="bentukTanahInput" placeholder="Masukkan Batas {{ $item->name }}..."
value="{{ old('batas_batas_input.' . $loop->index, $forminspeksi['batas_batas_input'][$loop->index] ?? '') }}"> value="{{ old('batas_batas_input.' . $loop->index, $forminspeksi['fakta']['batas_batas_input'][$loop->index] ?? '') }}">
</div> </div>
@endforeach @endforeach
@endif @endif
@@ -77,14 +101,29 @@
<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">Kondisi lain terkait lingkungan</label> <label class="form-label max-w-56">Kondisi lain terkait lingkungan</label>
<div class="flex flex-wrap items-baseline w-full" id="kondisi-lingkungan-container"> <div class="flex flex-wrap items-baseline w-full" id="kondisi-lingkungan-container">
<div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="3" placeholder="Tambahkan keterangan"></textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-kondisi_lingkungan" class="alert text-danger text-sm"></em>
</div>
@if (!empty($forminspeksi['fakta']['kondisi_lingkungan']))
@foreach ($forminspeksi['fakta']['kondisi_lingkungan'] as $index => $kondisi_lingkungan)
<div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="3">{{ old("kondisi_lingkungan.$index", $kondisi_lingkungan) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="kondisi_lingkungan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lingkungan[]" rows="3" placeholder="Tambahkan keterangan">
{{ old('kondisi_lingkungan.0', $forminspeksi['fakta']['kondisi_lingkungan'][0] ?? '') }}
</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-kondisi_lingkungan" class="alert text-danger text-sm"></em>
</div>
@endif
<button class="btn btn-primary btn-sm mt-5" type="button" <button class="btn btn-primary btn-sm mt-5" type="button"
onclick="addClonableItem('kondisi-lingkungan-container', 'kondisi_lingkungan')"> onclick="addClonableItem('kondisi-lingkungan-container', 'kondisi_lingkungan')">
<i class="ki-outline ki-plus"></i> <i class="ki-outline ki-plus"></i>
@@ -97,14 +136,26 @@
<label class="form-label max-w-56">Kondisi lain terkait Bangunan</label> <label class="form-label max-w-56">Kondisi lain terkait Bangunan</label>
<div id="kondisi-lain-bangunan-container" class="flex flex-wrap items-baseline w-full"> <div id="kondisi-lain-bangunan-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['kondisi_lain_bangunan']))
<div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full"> @foreach ($forminspeksi['fakta']['kondisi_lain_bangunan'] as $index => $kondisi_lain_bangunan)
<textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="3">{{ old('kondisi_lain_bangunan.0', $forminspeksi['kondisi_lain_bangunan'][0] ?? '') }}</textarea> <div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full">
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="3">{{ old("kondisi_lain_bangunan.$index", $kondisi_lain_bangunan) }}</textarea>
<i class="ki-outline ki-trash"></i> <button class="btn btn-danger btn-sm remove-btn" type="button"
</button> style="display: none;">
<em id="error-kondisi_lain_bangunan" class="alert text-danger text-sm"></em> <i class="ki-outline ki-trash"></i>
</div> </button>
</div>
@endforeach
@else
<div class="kondisi_lain_bangunan flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kondisi_lain_bangunan[]" rows="3">{{ old('kondisi_lain_bangunan.0', $forminspeksi['fakta']['kondisi_lain_bangunan'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-kondisi_lain_bangunan" class="alert text-danger text-sm"></em>
</div>
@endif
<button type="button" <button type="button"
onclick="addClonableItem('kondisi-lain-bangunan-container', 'kondisi_lain_bangunan')" onclick="addClonableItem('kondisi-lain-bangunan-container', 'kondisi_lain_bangunan')"
class="btn btn-primary btn-sm mt-5 "> class="btn btn-primary btn-sm mt-5 ">
@@ -117,24 +168,37 @@
<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">Informasi Terkait Dokumen</label> <label class="form-label max-w-56">Informasi Terkait Dokumen</label>
<div id="informasi-dokument-container" class="flex flex-wrap items-baseline w-full"> <div id="informasi-dokument-container" class="flex flex-wrap items-baseline w-full">
@php
// Ensure $forminspeksi['fakta']['informasi_dokument'] is an array
$informasi_dokument = isset($forminspeksi['fakta']['informasi_dokument']) ? (array) $forminspeksi['fakta']['informasi_dokument'] : [];
@endphp
@foreach ($informasi_dokument as $index => $document)
<div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="informasi_dokument[]" rows="3">{{ old("informasi_dokument.$index", $document) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
<div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full"> <div class="informasi_dokument flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="informasi_dokument" rows="3">{{ old('informasi_dokument.0', $forminspeksi['informasi_dokument'][0] ?? '') }}</textarea> <textarea class="textarea mt-2" name="informasi_dokument" rows="3">
{{ old('informasi_dokument.0', isset($forminspeksi['fakta']['informasi_dokument'][0]) ? $forminspeksi['fakta']['informasi_dokument'][0] : '') }}
</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;"> <button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i> <i class="ki-outline ki-trash"></i>
</button> </button>
<em id="error-informasi_dokument" class="alert text-danger text-sm"></em> <em id="error-informasi_dokument" class="alert text-danger text-sm"></em>
</div> </div>
<button class="btn btn-primary btn-sm mt-5 " type="button"
onclick="addClonableItem('informasi-dokument-container', 'informasi_dokument')"> <button class="btn btn-primary btn-sm mt-5" type="button" onclick="addClonableItem('informasi-dokument-container', 'informasi_dokument')">
<i class="ki-outline ki-plus"></i> <i class="ki-outline ki-plus"></i>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -5,6 +5,7 @@
@endsection --}} @endsection --}}
@section('content') @section('content')
@include('lpj::assetsku.includenya')
<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">
<div class="card min-w-full"> <div class="card min-w-full">
<div class="card min-w-full"> <div class="card min-w-full">
@@ -588,104 +589,14 @@
</div> </div>
<!-- Modal Kamera --> <!-- Modal Kamera -->
<div class="modal fade" data-modal="true" id="cameraModal" data-backdrop="" data-keyboard="false"> @include('lpj::surveyor.components.modal-kamera')
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">Ambil Foto</h3>
<button class="btn btn-xs btn-icon btn-light" data-modal-dismiss="true" id="closeModal">
<i class="ki-outline ki-cross"></i>
</button>
</div>
<!-- Camera Interface -->
<div class="modal-body">
<div class="camera-container relative">
<video id="video" class="w-full h-auto" autoplay playsinline></video>
<canvas id="canvas" class="hidden w-full h-auto"></canvas>
<canvas id="drawingCanvas" class="hidden absolute top-0 left-0 w-full h-full"></canvas>
<div id="textOverlay" class="position-absolute top-0 left-0 w-100 h-100 pointer-events-none">
</div>
</div>
<div class="modal-footer mt-2">
<div id="cameraControls" class="flex justify-center gap-2 mt-4">
<button id="startButton" class="btn btn-primary">
<i class="ki-outline ki-camera"></i> Start Camera
</button>
<button id="takePhotoButton" class="btn btn-success" disabled>
<i class="ki-outline ki-photograph"></i> Ambil Foto
</button>
<button id="switchButton" class="btn btn-info" disabled>
<i class="ki-outline ki-arrows-circle"></i> Switch Camera
</button>
</div>
<!-- Editor Controls -->
<div id="editorControls" class=" flex flex-wrap gap-2 mt-4">
<div class="drawing-tools flex gap-2">
<button class="tool-btn btn btn-sm" data-tool="brush">
<i class="ki-filled ki-brush"></i>
</button>
<button class="tool-btn btn btn-sm" data-tool="rectangle">
<i class="ki-filled ki-frame"></i>
</button>
<button class="btn btn-light btn-sm tool-btn" data-tool="arrow">
<i class="ki-duotone ki-arrow-right fs-2"></i>
</button>
<button class="tool-btn btn btn-sm" data-tool="circle">
<i class="ki-filled ki-mouse-circle"></i>
</button>
<button class="tool-btn btn btn-sm" data-tool="text">
<i class="ki-filled ki-text"></i>
</button>
</div>
<div class="drawing-settings flex gap-2">
<input type="color" id="colorPicker" class="w-8 h-8 rounded">
<div class="flex items-center gap-2">
<input type="range" id="brushSize" min="1" max="20" value="5"
class="range range-sm">
<span id="brushSizeValue" class="text-sm">5px</span>
</div>
<input type="text" id="textInput" class="input" placeholder="Enter text">
<button type="button" class="btn btn-primary" id="confirmTextBtn">Add Text</button>
</div>
<div class="history-controls flex gap-2">
<button id="undoButton" class="btn btn-sm">
<i class="ki-filled ki-arrows-loop"></i>
</button>
<button id="resetButton" class="btn btn-sm">
<i class="ki-outline ki-trash"></i>
</button>
</div>
<div class="final-controls flex gap-2">
<button type="button" class="btn btn-light btn-sm" data-modal-dismiss="true">Cancel</button>
<button id="backButton" class="btn btn-warning btn-sm">
<i class="ki-outline ki-arrow-left"></i> Kembali
</button>
<button id="saveButton" class="btn btn-success btn-sm" data-modal-dismiss="true">
<i class="ki-outline ki-check"></i> Simpan
</button>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection @endsection
@push('scripts') @push('scripts')
<script> <script>
function submitFoto() { function submitFoto() {
const formElement = $('#formFoto')[0]; const formElement = $('#formFoto')[0];
const formData = new FormData(formElement); const formData = new FormData(formElement);
@@ -712,6 +623,7 @@
if (response.success) { if (response.success) {
window.location.href = window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=foto'; '{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=foto';
toastrSuccessBuild(response.message);
} }
}, },
@@ -727,6 +639,7 @@
console.log('Status:', status); console.log('Status:', status);
console.log('Response:', xhr.responseText); console.log('Response:', xhr.responseText);
console.log(errors); console.log(errors);
toastrErrorBuild(error);
}, },
complete: function() { complete: function() {
// Re-enable the button and hide the spinner // Re-enable the button and hide the spinner
@@ -738,307 +651,6 @@
} }
</script> </script>
@include('lpj::surveyor.js.camera-editor') @include('lpj::surveyor.js.camera-editor')
<script>
document.addEventListener("DOMContentLoaded", function() {
const ruteLainnyaDiv = document.getElementById("ruteLainnya");
const lantaiLainnyaDiv = document.getElementById("lantaiLainnya");
// Function to add delete event listeners to existing buttons
function addDeleteListeners(container) {
container.querySelectorAll(".delete-button").forEach(button => {
button.addEventListener("click", function() {
this.closest(
".flex.items-baseline.flex-wrap.lg\\:flex-nowrap.gap-2\\.5.mb-5"
).remove();
});
});
}
// Add delete listeners to existing buttons
addDeleteListeners(ruteLainnyaDiv);
addDeleteListeners(lantaiLainnyaDiv);
function createNewDiv(container, inputName) {
const newDiv = document.createElement("div");
newDiv.className = "flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mb-5";
newDiv.innerHTML = `
<label class="flex flex-col form-label max-w-56">
Masukkan nama ${inputName}
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="flex flex-wrap items-baseline px-2">
<input class="input" type="text" name="name_${inputName}[]">
</div>
<div class=" w-full flex flex-col gap-2">
<img id="foto_${inputName}-preview"
src="{{ isset($formFoto['gerbang']) ? asset('storage/' . $formFoto['gerbang']) : '' }}"
alt="Foto Gerbong" class="mt-2 max-w-full h-auto"
style="{{ isset($formFoto['gerbang']) ? '' : 'display: none;' }} width: 30rem;">
<div class="input-group w-full flex gap-2">
<input id="inputLainnya" type="file" name="foto_${inputName}[]"
class="file-input file-input-bordered w-full" accept="image/*" capture="camera"
onchange="previewImage(this, 'foto_${inputName}-preview')"
>
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
<i class="ki-outline ki-abstract-33"></i> Camera
</button>
</div>
</div>
<button type="button" class="btn btn-danger btn-sm delete-button">
<i class="ki-filled ki-trash"></i>
</button>
</div>
</div>
`;
container.appendChild(newDiv);
addDeleteListeners(container);
}
document.getElementById("btnAddMore").addEventListener("click", function() {
createNewDiv(ruteLainnyaDiv, "rute_lainnya");
});
document.getElementById("btnAddMoreObject").addEventListener("click", function() {
createNewDiv(lantaiLainnyaDiv, "lantai_lainnya");
});
});
const style = document.createElement('style');
style.textContent = `
.draggable-text {
z-index: 1000;
}
.draggable-text:hover {
outline: 1px dashed #666;
}
`;
document.head.appendChild(style);
document.addEventListener('DOMContentLoaded', function() {
const editor = new UniversalCameraEditor();
const cameraButtons = document.querySelectorAll('#btnCamera');
const modal = document.getElementById('cameraModal');
const closeModal = document.getElementById('closeModal');
// Current input field to update
let currentInputField = null;
// Handle camera button click
cameraButtons.forEach(button => {
button.addEventListener('click', function(e) {
e.preventDefault();
const inputContainer = this.closest('.input-group');
currentInputField = inputContainer.querySelector('input[type="file"]');
modal.classList.remove('hidden');
modal.classList.add('modal-open');
editor.startCamera();
});
});
closeModal.addEventListener('click', function() {
modal.classList.add('hidden');
editor.closeCamera();
});
// Override save function
editor.saveAndUpload = async function() {
try {
// Create final canvas
const finalCanvas = document.createElement('canvas');
finalCanvas.width = this.canvas.width;
finalCanvas.height = this.canvas.height;
const ctx = finalCanvas.getContext('2d');
// Draw original photo and edited result on final canvas
ctx.drawImage(this.canvas, 0, 0);
ctx.drawImage(this.drawingCanvas, 0, 0);
// Convert canvas to Blob and create file
finalCanvas.toBlob(async (blob) => {
const file = new File([blob], `camera_photo_${Date.now()}.jpg`, {
type: "image/jpeg"
});
// Create FileList and update input field
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
if (currentInputField) {
currentInputField.files = dataTransfer.files;
const event = new Event('change', {
bubbles: true
});
currentInputField.dispatchEvent(event);
const previewContainer = currentInputField.closest('.input-group')
.querySelector('.preview-container');
if (previewContainer) {
const img = document.createElement('img');
img.src = URL.createObjectURL(file);
img.className = 'w-full h-32 object-cover rounded-lg';
previewContainer.innerHTML = '';
previewContainer.appendChild(img);
}
}
// Close modal
modal.classList.remove('show');
modal.style.display = 'none';
modal.setAttribute('aria-hidden', 'true');
// document.body.classList.remove('modal-open');
// Remove modal backdrop if exists
const backdrop = document.querySelector('.modal-backdrop');
if (backdrop) {
backdrop.remove();
}
// Stop camera stream
if (editor.stream) {
editor.stream.getTracks().forEach(track => track.stop());
editor.stream = null;
}
// Reset camera to initial state
editor.closeCamera();
// Reset scroll if needed
window.scrollTo(0, 0); // Adjust as necessary
}, 'image/jpeg', 0.8);
} catch (error) {
console.error('Error saving photo:', error);
alert('Error saving photo. Please try again.');
}
};
// Handle escape key
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const modal = document.getElementById('cameraModal');
if (modal.classList.contains('modal-open')) {
modal.classList.remove('modal-open');
modal.classList.add('hidden');
if (editor.stream) {
editor.stream.getTracks().forEach(track => track.stop());
}
}
}
});
function setupInputHandlers(containerId, buttonId, labelText, inputDataClass, buttonDeleteClass) {
const inputContainer = document.getElementById(containerId);
const addButton = document.getElementById(buttonId);
function updateLabels() {
const labels = inputContainer.querySelectorAll('.form-label span');
labels.forEach((label, index) => {
label.textContent = `${labelText} ${index + 1}`;
});
}
function handleDeleteButtons() {
const deleteBtns = inputContainer.querySelectorAll(`.${buttonDeleteClass}`);
deleteBtns.forEach(btn => {
btn.style.display = inputContainer.children.length > 1 ? 'block' : 'none';
});
}
function createNewInput() {
const newDiv = inputContainer.children[0].cloneNode(true);
const inputFile = newDiv.querySelector(`.${inputDataClass}`);
inputFile.id = `inputRute-${inputContainer.children.length}`;
// Reset input file value
if (inputFile) {
inputFile.value = '';
}
// Update the camera button to set currentInputField
const cameraButton = newDiv.querySelector('#btnCamera');
if (cameraButton) {
cameraButton.addEventListener('click', function(e) {
e.preventDefault();
currentInputField = inputFile; // Set current input field to the new input
modal.classList.remove('hidden');
modal.classList.add('modal-open');
editor.startCamera();
});
}
// Add delete button functionality
const deleteBtn = newDiv.querySelector(`.${buttonDeleteClass}`);
if (deleteBtn) {
deleteBtn.addEventListener('click', function() {
inputContainer.removeChild(newDiv);
handleDeleteButtons();
updateLabels();
});
}
// Update preview container
const previewContainer = document.createElement('div');
previewContainer.className = 'preview-container';
const img = document.createElement('img');
img.id = `foto_rute-preview-${inputFile.id}`;
img.src = '';
img.className = 'mt-2 h-auto';
img.style.display = 'none';
img.style.width = '30rem';
previewContainer.appendChild(img);
// Append preview container to the new input group
const inputGroup = newDiv.querySelector('.input-group');
inputGroup.appendChild(previewContainer);
newDiv.style.marginTop = '10px';
inputContainer.appendChild(newDiv);
updateLabels();
handleDeleteButtons();
}
if (addButton) {
addButton.addEventListener('click', createNewInput);
}
const firstDeleteBtn = inputContainer.children[0].querySelector(`.${buttonDeleteClass}`);
if (firstDeleteBtn) {
firstDeleteBtn.addEventListener('click', function() {
if (inputContainer.children.length > 1) {
inputContainer.removeChild(this.closest('.flex'));
handleDeleteButtons();
updateLabels();
}
});
}
updateLabels();
}
setupInputHandlers('inputContainerRute', 'btnRute', 'Foto Rute Menuju Lokasi', 'file-input',
'delete-btn');
setupInputHandlers('inputContainerLantai', 'btnLantai', 'Foto Lantai', 'file-input', 'delete-btn');
setupInputHandlers('inputContainerLingkungan', 'btnLingkungan', 'Lingkungan', 'file-input',
'delete-btn');
});
</script>
@endpush @endpush

View File

@@ -1,4 +1,4 @@
<div class=" card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class=" card w-full bg-white rounded-lg shadow-md ">
<div class="card-body"> <div class="card-body">
<div class="py-4"> <div class="py-4">
<h1 class="text-md font-medium text-gray-900">Order Penilaian</h1> <h1 class="text-md font-medium text-gray-900">Order Penilaian</h1>
@@ -43,7 +43,7 @@
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5"> <div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5">
<div class="perwakilan flex flex-wrap w-full items-baseline gap-2 "> <div class="perwakilan flex flex-wrap w-full items-baseline gap-2 ">
<input type="text" class="input form-control" name="debitur_perwakilan[]" <input type="text" class="input form-control" name="debitur_perwakilan[]"
value="{{ old('debitur_perwakilan', isset($forminspeksi['debitur_perwakilan']) ? implode(', ', $forminspeksi['debitur_perwakilan']) : '') }}" value="{{ old('debitur_perwakilan', isset($forminspeksi['asset']['debitur_perwakilan']) ? implode(', ', $forminspeksi['asset']['debitur_perwakilan']) : '') }}"
placeholder="Masukkan Debitur/Perwakilan" /> placeholder="Masukkan Debitur/Perwakilan" />
<button type="button" class="btn btn-danger btn-outline btn-xs remove-btn" <button type="button" class="btn btn-danger btn-outline btn-xs remove-btn"
style="display: none">Hapus</button> style="display: none">Hapus</button>
@@ -61,7 +61,7 @@
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
<div class="card-body"> <div class="card-body">
<div class="py-4 px-6"> <div class="py-4">
<h1 class="text-md font-medium text-gray-900">Nama Cadeb/Debitur</h1> <h1 class="text-md font-medium text-gray-900">Nama Cadeb/Debitur</h1>
</div> </div>
@@ -79,7 +79,7 @@
</div> </div>
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden"> <div class="card w-full bg-white rounded-lg shadow-md ">
<div class="card-body"> <div class="card-body">
<div class="py-4 "> <div class="py-4 ">
<h1 class="text-md font-medium text-gray-900">Deskripsi Aset jaminan</h1> <h1 class="text-md font-medium text-gray-900">Deskripsi Aset jaminan</h1>
@@ -99,32 +99,37 @@
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <label class="form-label flex items-center gap-3 text-nowrap">
<input onclick="toggleJenisAsset('jenis_asset')" type="radio" class="radio" <input onclick="toggleFieldVisibility('jenis_asset', 'jenis_asset', ['tidak sesuai'])"
name="jenis_asset" value="sesuai" type="radio" class="radio" name="jenis_asset" value="sesuai"
{{ old('jenis_asset', $forminspeksi['jenis_asset'] ?? '') == 'sesuai' ? 'checked' : '' }}> {{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Ya</span> <span class="ml-2">Ya</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input onclick="toggleJenisAsset('jenis_asset')" type="radio" class="radio" <input onclick="toggleFieldVisibility('jenis_asset', 'jenis_asset', ['tidak sesuai'])"
name="jenis_asset" value="tidak sesuai" type="radio" class="radio" name="jenis_asset" value="tidak sesuai"
{{ old('jenis_asset', $forminspeksi['jenis_asset'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}> {{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak</span> <span class="ml-2">Tidak</span>
</label> </label>
<!-- Select dropdown untuk "Tidak Sesuai" --> <!-- Select dropdown untuk "Tidak Sesuai" -->
<select id="jenis_asset"
class="input w-full @error('jenis_asset_tidak_sesuai') border-danger bg-danger-light @enderror" <div id="jenis_asset" class="flex items-baseline gap-2"
name="jenis_asset_tidak_sesuai" style="{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
style="{{ old('jenis_asset', $forminspeksi['jenis_asset'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}"> <select id="jenis_asset_tidak_sesuai" class="input w-full"
<option value="">Select Jenis asset</option> name="jenis_asset_tidak_sesuai">
@if (isset($arahMataAngin)) <option value="">Select Jenis asset</option>
@foreach ($arahMataAngin as $item) @if (isset($jenisJaminan))
<option value="{{ $item->name }}" @foreach ($jenisJaminan as $item)
{{ old('jenis_asset_tidak_sesuai', $forminspeksi['jenis_asset_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}> <option value="{{ $item->id }}"
{{ $item->name }} {{ old('jenis_asset_tidak_sesuai', $forminspeksi['asset']['jenis_asset_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
</option> {{ $item->name }}
@endforeach </option>
@endif @endforeach
</select> @endif
</select>
<button type="button" class="btn btn-md btn-primary"
onclick="updateAnalisa('jenis_asset')">Save</button>
</div>
</div> </div>
<em id="error-jenis_asset" class="alert text-danger text-sm"></em> <em id="error-jenis_asset" class="alert text-danger text-sm"></em>
</div> </div>
@@ -134,7 +139,6 @@
<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">Alamat</label> <label class="form-label max-w-56">Alamat</label>
<div> <div>
@foreach ($permohonan->debiture->documents as $dokumen) @foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700"> <span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen) }} {{ formatAlamat($dokumen) }}
@@ -143,101 +147,136 @@
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<input onclick="toggleTidakSesuai('alamat_sesuai','alamat_tidak_sesuai')" type="radio" <label class="form-label flex items-center gap-3 text-nowrap">
class="radio" name="alamat_sesuai" value="sesuai" <input
{{ old('alamat_sesuai', $forminspeksi['alamat_sesuai'] ?? '') == 'sesuai' ? 'checked' : '' }}> onclick="toggleAlamatVisibility('alamat_sesuai', 'alamat_tidak_sesuai', 'sesuai')"
<span class="ml-2">Ya</span> type="radio" class="radio" name="alamat_sesuai" value="sesuai"
</label> {{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <span class="ml-2">Ya</span>
<input onclick="toggleTidakSesuai('alamat_sesuai','alamat_tidak_sesuai')" type="radio" </label>
class="radio" name="alamat_sesuai" value="tidak sesuai" <label class="form-label flex items-center gap-3 text-nowrap">
{{ old('alamat_sesuai', $forminspeksi['alamat_sesuai'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}> <input
<span class="ml-2">Tidak</span> onclick="toggleAlamatVisibility('alamat_sesuai', 'alamat_tidak_sesuai', 'tidak sesuai')"
</label> type="radio" class="radio" name="alamat_sesuai" value="tidak sesuai"
{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak</span>
</label>
</div>
<input type="text" name="alamat_tidak_sesuai" id="alamat_tidak_sesuai"
class="input w-full" placeholder="Masukan jenis asset Tanah"
value="{{ old('alamat_tidak_sesuai', $forminspeksi['alamat_tidak_sesuai'] ?? '') }}"
style="{{ old('alamat_sesuai', $forminspeksi['alamat_sesuai'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
</div> </div>
<em id="error-alamat" class="alert text-danger text-sm"></em> <em id="error-alamat" class="alert text-danger text-sm"></em>
</div> </div>
<div class="grid gap-2 mt-5">
@php
$inputDataLoaksi = []; {{-- Alamat Sesuai --}}
$inputDataLoaksi = [ <div id="alamat_sesuai" class="grid gap-2 mt-5" style="display: none;">
[ @foreach ($permohonan->debiture->documents as $dokumen)
'label' => 'Jl.', @php
'index' => 0, $fields = [
'name' => 'nama_jalan', [
'value' => old( 'label' => 'Jl.',
'nama_jalan', 'value' => $dokumen->address ?? '',
isset($forminspeksi['nama_jalan']) ? $forminspeksi['nama_jalan'] : '', 'name' => 'nama_jalan',
), 'readonly' => false,
], ],
[
[ 'label' => 'Provinsi',
'label' => 'Desa/Kelurahan', 'value' => $dokumen->province->name ?? '',
'index' => 3, 'name' => 'provinsi',
'name' => 'desa_kelurahan', 'readonly' => true,
'value' => old( ],
'desa_kelurahan', [
isset($forminspeksi['desa_kelurahan']) ? $forminspeksi['desa_kelurahan'] : '', 'label' => 'Kota/Kabupaten',
), 'value' => $dokumen->city->name ?? '',
], 'name' => 'kota_kabupaten',
[ 'readonly' => true,
'label' => 'Kecamatan', ],
'index' => 4, [
'name' => 'kecamatan', 'label' => 'Kecamatan',
'value' => old( 'value' => $dokumen->district->name ?? '',
'kecamatan', 'name' => 'kecamatan',
isset($forminspeksi['kecamatan']) ? $forminspeksi['kecamatan'] : '', 'readonly' => true,
), ],
], [
[ 'label' => 'Kelurahan',
'label' => 'Kota/Kabupaten', 'value' => $dokumen->village->name ?? '',
'index' => 5, 'name' => 'desa_kelurahan',
'name' => 'kota_kabupaten', 'readonly' => true,
'value' => old( ],
'kota_kabupaten', ];
isset($forminspeksi['kota_kabupaten']) ? $forminspeksi['kota_kabupaten'] : '', @endphp
), @foreach ($fields as $field)
],
[
'label' => 'Provinsi',
'index' => 6,
'name' => 'provinsi',
'value' => old(
'provinsi',
isset($forminspeksi['provinsi']) ? $forminspeksi['provinsi'] : '',
),
],
];
@endphp
@if (count($inputDataLoaksi) > 0)
@foreach ($inputDataLoaksi as $item)
<!-- Nomor Lambung -->
<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">{{ $item['label'] }}</label> <label class="form-label max-w-56">{{ $field['label'] }}</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<input type="text" name="{{ $item['name'] }}" class="input" <input type="text" class="input" name="{{ $field['name'] }}"
placeholder="Masukkan {{ $item['label'] }}" value="{{ $field['value'] }}" {{ $field['readonly'] ? 'readonly' : '' }}>
value="{{ $item['value'] }}">
<em id="error-{{ $item['name'] }}" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
@endforeach @endforeach
@endif @endforeach
</div> </div>
{{-- Alamat Tidak Sesuai --}}
<div id="alamat_tidak_sesuai" class="grid gap-2 mt-5" style="display: none;">
@php
$inputDataLokasi = [
['label' => 'Jl.', 'id' => 'address', 'name' => 'address', 'type' => 'text'],
[
'label' => 'Provinsi',
'id' => 'province_code',
'name' => 'provinsi',
'type' => 'select',
'options' => $provinces,
],
[
'label' => 'Kota/Kabupaten',
'id' => 'city_code',
'name' => 'kota_kabupaten',
'type' => 'select',
'options' => $provinces,
],
[
'label' => 'Kecamatan',
'id' => 'district_code',
'name' => 'kecamatan',
'type' => 'select',
'options' => $provinces,
],
[
'label' => 'Desa/Kelurahan',
'id' => 'village_code',
'name' => 'desa_kelurahan',
'type' => 'select',
'options' => $provinces,
],
];
@endphp
@foreach ($inputDataLokasi as $item)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">{{ $item['label'] }}</label>
<div class="flex flex-wrap items-baseline w-full">
@if ($item['type'] === 'text')
<input id="{{ $item['id'] }}" name="{{ $item['name'] }}" class="input">
@else
<select id="{{ $item['id'] }}" name="{{ $item['name'] }}"
class="select w-full">
<option value="">{{ $item['label'] }}</option>
@if ($item['id'] === 'province_code')
@foreach ($item['options'] as $option)
<option value="{{ $option->code }}">{{ $option->name }}</option>
@endforeach
@endif
</select>
@endif
</div>
</div>
@endforeach
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -249,16 +288,20 @@
<h1 class="text-md font-medium text-gray-900">Titik Koordinat Google Maps</h1> <h1 class="text-md font-medium text-gray-900">Titik Koordinat Google Maps</h1>
</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">Koordinat</label> <label class="form-label max-w-56">Kordinat</label>
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5"> <div id="perwakilan" class="flex items-baseline w-full gap-5">
<div class="grid grid-cols-2 gap-4 items-center w-full"> <div class="grid grid-cols-2 gap-4 items-center w-full">
<input class="input" type="text" name="kordinat_lat" id="lat" <input class="input" type="text" placeholder="Masukan Koordinat Latitude" type="text"
value="{{ old('kordinat_lat') }}" @readonly(true)> name="kordinat_lat" id="lat"
<input class="input" type="text" name="kordinat_lng" id="lng" value="{{ old('kordinat_lat', isset($forminspeksi['asset']['kordinat_lat']) ? $forminspeksi['asset']['kordinat_lat'] : '') }}">
value="{{ old('kordinat_lng') }}" @readonly(true)> <input class="input" type="text" placeholder="Masukan Koordinat Longitude"
name="kordinat_lng" id="lng"
value="{{ old('kordinat_lng', isset($forminspeksi['asset']['kordinat_lng']) ? $forminspeksi['asset']['kordinat_lng'] : '') }}">
</div> </div>
<button type="button" class="btn btn-sm btn-primary" onclick="getUserLocation()">Ambil <a target="_blank" href="https://www.google.com/maps"type="button"
Kordinat</button> class="btn btn-md btn-outline btn-primary">
<i class="ki-filled ki-map"></i>Ambil
Kordinat</a>
</div> </div>
</div> </div>
</div> </div>
@@ -362,10 +405,47 @@
<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">Pemilik Jaminan</label> <label class="form-label max-w-56">Pemilik Jaminan</label>
<div class="flex flex-wrap items-baseline w-full"> <div>
@foreach ($permohonan->debiture->documents as $dokumen) <div class="flex flex-wrap items-baseline w-full">
{{ $dokumen->pemilik->hubungan_pemilik->name?? "" }} @foreach ($permohonan->debiture->documents as $dokumen)
@endforeach {{ $dokumen->pemilik->hubungan_pemilik->name ?? '' }}
@endforeach
</div>
<div class="flex-wrap items-stretch">
<div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap">
<input
onclick="toggleFieldVisibility('hub_cadeb','hub_cadeb_tidak_sesuai', ['tidak sesuai'])"
type="radio" class="radio" name="hub_cadeb" value="sesuai"
{{ old('hub_cadeb', $forminspeksi['asset']['hub_cadeb'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Ya</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input
onclick="toggleFieldVisibility('hub_cadeb','hub_cadeb_tidak_sesuai', ['tidak sesuai'])"
type="radio" class="radio" name="hub_cadeb" value="tidak sesuai"
{{ old('hub_cadeb', $forminspeksi['asset']['hub_cadeb'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak</span>
</label>
<!-- Select dropdown untuk "Tidak Sesuai" -->
<select id="hub_cadeb_tidak_sesuai"
class="input w-full
name="hub_cadeb_tidak_sesuai"
style="{{ old('hub_cadeb', $forminspeksi['asset']['hub_cadeb'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<option value="">Select Hubungan Cadeb</option>
@if (isset($hubCadeb))
@foreach ($hubCadeb as $item)
<option value="{{ $item->name }}"
{{ old('hub_cadeb_tidak_sesuai', $forminspeksi['asset']['hub_cadeb_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endforeach
@endif
</select>
</div>
<em id="error-hub_cadeb" class="alert text-danger text-sm"></em>
</div>
</div> </div>
</div> </div>
@@ -376,10 +456,48 @@
<h1 class="text-md font-medium text-gray-900">Hubungan Cadeb/Debitur dengan Penghuni Jaminan</h1> <h1 class="text-md font-medium text-gray-900">Hubungan Cadeb/Debitur dengan Penghuni Jaminan</h1>
<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">Penghuni Jaminan</label> <label class="form-label max-w-56">Penghuni Jaminan</label>
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen) <div class="mt-2">
{{ $dokumen->penghuni->hubungan_penghuni->name?? "" }} <div class="flex flex-wrap items-baseline w-full text-sm">
@endforeach @foreach ($permohonan->debiture->documents as $dokumen)
{{ $dokumen->penghuni->hubungan_penghuni->name ?? 'N/A' }}
@endforeach
</div>
<div class="flex-wrap items-stretch">
<div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap">
<input
onclick="toggleFieldVisibility('hub_cadeb_penghuni','hub_cadeb_Penghuni_tidak_sesuai', ['tidak sesuai'])"
type="radio" class="radio" name="hub_cadeb_penghuni" value="sesuai"
{{ old('hub_cadeb_penghuni', $forminspeksi['asset']['hub_cadeb_penghuni'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Ya</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input
onclick="toggleFieldVisibility('hub_cadeb_penghuni', 'hub_cadeb_Penghuni_tidak_sesuai', ['tidak sesuai'])"
type="radio" class="radio" name="hub_cadeb_penghuni" value="tidak sesuai"
{{ old('hub_cadeb_penghuni', $forminspeksi['asset']['hub_cadeb_penghuni'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak</span>
</label>
<!-- Select dropdown untuk "Tidak Sesuai" -->
<select id="hub_cadeb_Penghuni_tidak_sesuai"
class="input w-full
name="hub_cadeb_Penghuni_tidak_sesuai"
style="{{ old('hub_cadeb', $forminspeksi['asset']['hub_cadeb'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<option value="">Select Hubungan Cadeb</option>
@if (isset($hubPenghuni))
@foreach ($hubPenghuni as $item)
<option value="{{ $item->name }}"
{{ old('hub_cadeb_Penghuni_tidak_sesuai', $forminspeksi['asset']['hub_cadeb_Penghuni_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endforeach
@endif
</select>
</div>
<em id="error-hub_cadeb" class="alert text-danger text-sm"></em>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -16,26 +16,26 @@
'index' => 0, 'index' => 0,
'value' => old( 'value' => old(
'peruntukan', 'peruntukan',
isset($forminspeksi['peruntukan']) ? $forminspeksi['peruntukan'] : '', isset($forminspeksi['fakta']['peruntukan']) ? $forminspeksi['fakta']['peruntukan'] : '',
), ),
], ],
[ [
'label' => 'KDB', 'label' => 'KDB',
'name' => 'kdb', 'name' => 'kdb',
'index' => 1, 'index' => 1,
'value' => old('kdb', isset($forminspeksi['kdb']) ? $forminspeksi['kdb'] : ''), 'value' => old('kdb', isset($forminspeksi['fakta']['kdb']) ? $forminspeksi['fakta']['kdb'] : ''),
], ],
[ [
'label' => 'KDH', 'label' => 'KDH',
'name' => 'kdh', 'name' => 'kdh',
'index' => 2, 'index' => 2,
'value' => old('kdh', isset($forminspeksi['kdh']) ? $forminspeksi['kdh'] : ''), 'value' => old('kdh', isset($forminspeksi['fakta']['kdh']) ? $forminspeksi['fakta']['kdh'] : ''),
], ],
[ [
'label' => 'gsb', 'label' => 'GSB',
'name' => 'gsb', 'name' => 'gsb',
'index' => 3, 'index' => 3,
'value' => old('gsb', isset($forminspeksi['gsb']) ? $forminspeksi['gsb'] : ''), 'value' => old('gsb', isset($forminspeksi['fakta']['gsb']) ? $forminspeksi['fakta']['gsb'] : ''),
], ],
[ [
'label' => 'Max Lantai', 'label' => 'Max Lantai',
@@ -43,20 +43,20 @@
'index' => 4, 'index' => 4,
'value' => old( 'value' => old(
'max_lantai', 'max_lantai',
isset($forminspeksi['max_lantai']) ? $forminspeksi['max_lantai'] : '', isset($forminspeksi['fakta']['max_lantai']) ? $forminspeksi['fakta']['max_lantai'] : '',
), ),
], ],
[ [
'label' => 'KLB', 'label' => 'KLB',
'name' => 'klb', 'name' => 'klb',
'index' => 5, 'index' => 5,
'value' => old('klb', isset($forminspeksi['klb']) ? $forminspeksi['klb'] : ''), 'value' => old('klb', isset($forminspeksi['fakta']['klb']) ? $forminspeksi['fakta']['klb'] : ''),
], ],
[ [
'label' => 'GSS', 'label' => 'GSS',
'name' => 'gss', 'name' => 'gss',
'index' => 6, 'index' => 6,
'value' => old('gss', isset($forminspeksi['gss']) ? $forminspeksi['gss'] : ''), 'value' => old('gss', isset($forminspeksi['fakta']['gss']) ? $forminspeksi['fakta']['gss'] : ''),
], ],
[ [
'label' => 'Pelebaran Jalan', 'label' => 'Pelebaran Jalan',
@@ -64,7 +64,7 @@
'index' => 7, 'index' => 7,
'value' => old( 'value' => old(
'pelebaran_jalan', 'pelebaran_jalan',
isset($forminspeksi['pelebaran_jalan']) ? $forminspeksi['pelebaran_jalan'] : '', isset($forminspeksi['fakta']['pelebaran_jalan']) ? $forminspeksi['fakta']['pelebaran_jalan'] : '',
), ),
], ],
[ [
@@ -73,7 +73,7 @@
'index' => 8, 'index' => 8,
'value' => old( 'value' => old(
'nama_petugas', 'nama_petugas',
isset($forminspeksi['nama_petugas']) ? $forminspeksi['nama_petugas'] : '', isset($forminspeksi['fakta']['nama_petugas']) ? $forminspeksi['fakta']['nama_petugas'] : '',
), ),
], ],
]; ];
@@ -112,7 +112,7 @@
</div> </div>
<a href="https://gistaru.atrbpn.go.id/rtronline" type="button" class="btn btn-light" <a href="https://gistaru.atrbpn.go.id/rtronline" type="button" class="btn btn-light"
target="_blank"> target="_blank">
<i class="ki-outline ki-abstract-33"></i> Gistaru <i class="ki-filled ki-map"></i> Gistaru
</a> </a>
</div> </div>
</div> </div>
@@ -134,7 +134,7 @@
</div> </div>
<a href="https://bhumi.atrbpn.go.id/peta" type="button" class="btn btn-light" <a href="https://bhumi.atrbpn.go.id/peta" type="button" class="btn btn-light"
target="_blank"> target="_blank">
<i class="ki-outline ki-abstract-33"></i> Bhumi <i class="ki-filled ki-map"></i> Bhumi
</a> </a>
</div> </div>
</div> </div>
@@ -157,53 +157,52 @@
</div> </div>
<a href="{{ $link_url_region->regions->url }}" type="button" class="btn btn-light" <a href="{{ $link_url_region->regions->url }}" type="button" class="btn btn-light"
target="_blank"> target="_blank">
<i class="ki-outline ki-abstract-33"></i> <i class="ki-filled ki-map"></i>
{{ $link_url_region->regions->name_url }} {{ $link_url_region->regions->name_url }}
</a> </a>
</div> </div>
</div> </div>
@endif @endif
</div> </div>
<!-- Peta Section -->
<div class="mt-2" style="margin-top: 20px">
<input type="hidden" name="lat" id="lat"
value="{{ old('lat', isset($analisa->analisaFakta) ? $analisa->analisaFakta->lat : '') }}">
<input type="hidden" name="lng" id="lng"
value="{{ old('lng', isset($analisa->analisaFakta) ? $analisa->analisaFakta->lng : '') }}">
<div class=" border p-6 rounded-lg shadow-lg flex items-center justify-center"
style="height: 300px">
<iframe id="mapFrame" frameborder="0" style="width: 100%; height: 100%;"></iframe>
</div>
</div>
<!-- Upload Photo Button --> <!-- Upload Photo Button -->
<div class=" flex w-full mt-2" style="margin-top: 20px">
<div class="flex flex-col input-group w-full">
<label for="" class="block text-sm font-medium text-gray-700">Upload Photo</label>
<div class="w-full"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
<label for="" class="form-label max-w-56 text-sm font-medium text-gray-700">Upload Photo</label>
<div class="w-full grid gap-5">
<div class="input-group w-full flex gap-2">
<input id="foto_tempat" type="file" name="foto_tempat" <input id="foto_tempat" type="file" name="foto_tempat"
class="file-input file-input-bordered w-full" accept="image/*" class="file-input file-input-bordered w-full" accept="image/*"
onchange="previewImage(this, 'foto_tempat-preview')"> onchange="previewImage(this, 'foto_tempat-preview')">
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
<i class="ki-outline ki-abstract-33"></i> Camera
</button>
</div>
<img id="foto_tempat-preview" <img id="foto_tempat-preview"
src="{{ asset('storage/' . (isset($forminspeksi['foto_tempat']) ? $forminspeksi['foto_tempat'] : '')) }}" src="{{ asset('storage/' . (isset($forminspeksi['foto_tempat']) ? $forminspeksi['foto_tempat'] : '')) }}"
alt="Foto Argis Region" class="mt-2 max-w-full h-auto" alt="Foto Argis Region" class="mt-2 max-w-full h-auto"
style="{{ isset($forminspeksi['foto_tempat']) ? '' : 'display: none;' }}"> style="{{ isset($forminspeksi['foto_tempat']) ? '' : 'display: none;' }}">
</div> </div>
</div> </div>
</div>
<!-- Notes Section --> <!-- Notes Section -->
<div class="mt-2" style="margin-top: 20px"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
<div class="bg-white p-6 rounded-lg">
<h4 class="block text-sm font-medium text-gray-700 mt-2">Catatan yang Perlu Diperhatikan <label class="form-label max-w-56">Catatan yang Perlu Diperhatikan
</h4> </label>
<textarea name="keterangan" class="textarea mt-2" placeholder="Masukkan catatan penting" rows="3">{{ old('keterangan', $forminspeksi['keterangan'] ?? '') }}</textarea> <div class="input-group w-full flex gap-2">
</div> <textarea name="keterangan" class="textarea mt-2" placeholder="Masukkan catatan penting" rows="3">{{ old('keterangan', $forminspeksi['fakta']['keterangan'] ?? '') }}</textarea>
</div>
</div> </div>
</div> </div>
</div> </div>
@include('lpj::surveyor.components.modal-kamera')
@push('scripts')
@include('lpj::surveyor.js.camera-editor')
@endpush

View File

@@ -5,6 +5,7 @@
@endsection --}} @endsection --}}
@section('content') @section('content')
@include('lpj::assetsku.includenya')
<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">
<div class="card min-w-full"> <div class="card min-w-full">
<div class="card min-w-full"> <div class="card min-w-full">
@@ -69,59 +70,78 @@
</div> </div>
@endsection @endsection
@push('scripts') @push('scripts')
<script>
// Fungsi untuk mengambil lokasi pengguna
function getUserLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
} else {
alert("Geolocation tidak didukung oleh browser ini.");
}
}
// Fungsi untuk menampilkan posisi
function showPosition(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
document.getElementById('lat').value = lat;
document.getElementById('lng').value = lng;
var mapUrl = `https://www.google.com/maps?q=${lat},${lng}&z=15&output=embed`;
document.getElementById('mapFrame').src = mapUrl;
}
// Fungsi untuk menangani error jika lokasi tidak bisa diambil
function showError(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
alert("Pengguna menolak permintaan geolokasi.");
break;
case error.POSITION_UNAVAILABLE:
alert("Informasi lokasi tidak tersedia.");
break;
case error.TIMEOUT:
alert("Permintaan lokasi pengguna berakhir.");
break;
case error.UNKNOWN_ERROR:
alert("Terjadi kesalahan yang tidak diketahui.");
break;
}
}
window.onload = getUserLocation;
</script>
<script type="text/javascript"> <script type="text/javascript">
function toggleTidakSesuai(field, inputId) { function toggleFieldVisibility(fieldName, inputId, visibleValues = []) {
const selectedValue = $(`[name="${field}"]:checked, [name="${field}"]:checked`).val(); const selectedValue = $(`[name="${fieldName}"]:checked`).val();
const inputField = $(`#${inputId}`); const inputField = $(`#${inputId}`);
if (selectedValue === 'tidak sesuai' || selectedValue === 'lainnya') { if (visibleValues.includes(selectedValue)) {
inputField.show(); inputField.show();
} else { } else {
inputField.hide().val(''); inputField.hide().val('');
} }
} }
function toggleCheckboxVisibility(fieldName, inputId, visibleValues = []) {
const selectedValues = $(`[name="${fieldName}[]"]:checked`)
.map(function() {
return $(this).val().toLowerCase(); // Konversi nilai ke huruf kecil
})
.get();
const inputField = $(`#${inputId}`);
// Cek apakah salah satu nilai yang dipilih cocok dengan visibleValues
const shouldShow = visibleValues.some(value => selectedValues.includes(value.toLowerCase()));
if (shouldShow) {
inputField.show();
} else {
inputField.hide().val('');
}
}
function toggleMultipleFields(fieldName, mappings) {
// Ambil semua nilai checkbox yang dicentang
const selectedValues = $(`[name="${fieldName}[]"]:checked`)
.map(function() {
return $(this).val().toLowerCase(); // Konversi nilai ke huruf kecil
})
.get();
// Iterasi melalui setiap mapping
for (const [key, inputId] of Object.entries(mappings)) {
const inputField = $(`#${inputId}`);
// Tampilkan input jika nilai yang relevan dipilih
if (selectedValues.includes(key.toLowerCase())) {
inputField.show();
} else {
inputField.hide().val(''); // Sembunyikan dan reset nilai
}
}
}
function toggleAlamatVisibility(idSesuai, idTidakSesuai, selectedValue) {
// Ambil elemen berdasarkan ID
const alamatSesuai = document.getElementById(idSesuai);
const alamatTidakSesuai = document.getElementById(idTidakSesuai);
// Periksa nilai yang dipilih dan tampilkan elemen yang sesuai
if (selectedValue === 'sesuai') {
alamatSesuai.style.display = 'grid'; // Tampilkan "Alamat Sesuai"
alamatTidakSesuai.style.display = 'none'; // Sembunyikan "Alamat Tidak Sesuai"
} else if (selectedValue === 'tidak sesuai') {
alamatSesuai.style.display = 'none'; // Sembunyikan "Alamat Sesuai"
alamatTidakSesuai.style.display = 'grid'; // Tampilkan "Alamat Tidak Sesuai"
}
}
function submitData() { function submitData() {
const formElement = $('#formInspeksi')[0]; const formElement = $('#formInspeksi')[0];
const formData = new FormData(formElement); const formData = new FormData(formElement);
@@ -141,10 +161,12 @@
'X-CSRF-TOKEN': '{{ csrf_token() }}' 'X-CSRF-TOKEN': '{{ csrf_token() }}'
}, },
success: function(response) { success: function(response) {
if (response.success) { // if (response.success) {
window.location.href = // toastrSuccessBuild(response.message)
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=inspeksi'; // window.location.href =
} // '{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=inspeksi';
// }
console.log(response); console.log(response);
}, },
error: function(xhr, status, error) { error: function(xhr, status, error) {
@@ -159,6 +181,7 @@
console.log('Status:', status); console.log('Status:', status);
console.log('Response:', xhr.responseText); console.log('Response:', xhr.responseText);
console.log(errors); console.log(errors);
toastrErrorBuild(error);
}, },
complete: function() { complete: function() {
// Re-enable the button and hide the spinner // Re-enable the button and hide the spinner
@@ -168,9 +191,7 @@
} }
}); });
} }
</script>
<script>
function previewImage(input, previewId) { function previewImage(input, previewId) {
if (input.files && input.files[0]) { if (input.files && input.files[0]) {
var reader = new FileReader(); var reader = new FileReader();
@@ -197,8 +218,10 @@
} }
const newElement = template.cloneNode(true); const newElement = template.cloneNode(true);
const inputs = newElement.querySelectorAll('input, textarea'); const textarea = newElement.querySelector('textarea');
inputs.forEach(input => (input.value = '')); if (textarea) {
textarea.value = '';
}
const deleteButton = newElement.querySelector('.remove-btn'); const deleteButton = newElement.querySelector('.remove-btn');
if (deleteButton) { if (deleteButton) {
@@ -208,5 +231,53 @@
container.appendChild(newElement); container.appendChild(newElement);
} }
function updateAnalisa(params) {
const inputMap = {
jenis_asset: 'jenis_asset_tidak_sesuai',
analisa_tanah: 'analisa_tanah_tidak_sesuai',
analisa_unit: 'analisa_luas_unit_tidak_sesuai',
analisa_bangunan: 'analisa_bangunan_tidak_sesuai',
};
// Pastikan elemen ID ada di inputMap
if (!inputMap[params]) {
console.error('Parameter tidak valid:', params);
return;
}
// Ambil nilai berdasarkan parameter
const inputValue = document.getElementById(inputMap[params]).value;
const data = {
[params === 'jenis_asset' ? 'jenis_asset' : params.replace('analisa_', 'luas_')]: inputValue,
types: params
};
$.ajax({
url: '{{ route('surveyor.update_analisa', ['id' => $permohonan->id]) }}',
type: 'POST',
data: data,
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
console.log(response);
if (response.success) {
if (response.jenis_asset) {
window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=inspeksi';
}
toastrSuccessBuild(response.message);
}
},
error: function(xhr, status, error) {
console.error('Terjadi error:', error);
console.log('Status:', status);
console.log('Response:', xhr.responseText);
toastrErrorBuild(error);
}
});
}
</script> </script>
@endpush @endpush

View File

@@ -14,43 +14,43 @@
<label class="block text-sm font-medium text-gray-700">Jarak Dari Jalan <label class="block text-sm font-medium text-gray-700">Jarak Dari Jalan
Utama</label> Utama</label>
<input type="text" class="input mt-2" name="jarak_jalan_utama" placeholder="Km" <input type="text" class="input mt-2" name="jarak_jalan_utama" placeholder="Km"
value="{{ old('jarak_jalan_utama', isset($forminspeksi['jarak_jalan_utama']) ? $forminspeksi['jarak_jalan_utama'] : '') }}"> value="{{ old('jarak_jalan_utama', isset($forminspeksi['lingkungan']['jarak_jalan_utama']) ? $forminspeksi['lingkungan']['jarak_jalan_utama'] : '') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700">Jalan</label> <label class="block text-sm font-medium text-gray-700">Jalan</label>
<input type="text" name="jalan_linkungan" class="input mt-2" <input type="text" name="jalan_linkungan" class="input mt-2"
placeholder="Masukkan Nama Jalan" placeholder="Masukkan Nama Jalan"
value="{{ old('jalan_linkungan', isset($forminspeksi['jalan_linkungan']) ? $forminspeksi['jalan_linkungan'] : '') }}"> value="{{ old('jalan_linkungan', isset($forminspeksi['lingkungan']['jalan_linkungan']) ? $forminspeksi['lingkungan']['jalan_linkungan'] : '') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700">Jarak ke CBD Point</label> <label class="block text-sm font-medium text-gray-700">Jarak ke CBD Point</label>
<input type="text" class="input mt-2" name="jarak_cbd_point" placeholder="Km" <input type="text" class="input mt-2" name="jarak_cbd_point" placeholder="Km"
value="{{ old('jarak_cbd_point', isset($forminspeksi['jarak_cbd_point']) ? $forminspeksi['jarak_cbd_point'] : '') }}"> value="{{ old('jarak_cbd_point', isset($forminspeksi['lingkungan']['jarak_cbd_point']) ? $forminspeksi['lingkungan']['jarak_cbd_point'] : '') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700">Nama CBD Point</label> <label class="block text-sm font-medium text-gray-700">Nama CBD Point</label>
<input type="text" class="input mt-2" name="nama_cbd_point" placeholder="Km" <input type="text" class="input mt-2" name="nama_cbd_point" placeholder="Km"
value="{{ old('nama_cbd_point', isset($forminspeksi['nama_cbd_point']) ? $forminspeksi['nama_cbd_point'] : '') }}"> value="{{ old('nama_cbd_point', isset($forminspeksi['lingkungan']['nama_cbd_point']) ? $forminspeksi['lingkungan']['nama_cbd_point'] : '') }}">
</div> </div>
</div> </div>
<div class="w-full mt-4"> <div class="w-full mt-4">
<label class="block text-sm font-medium text-gray-700">Lebar Perkerasan Jalan Depan <label class="block text-sm font-medium text-gray-700">Lebar Perkerasan Jalan Depan
objek</label> objek</label>
<input type="text" name="lebar_perkerasan_jalan" class="input mt-2" placeholder="Meter" <input type="text" name="lebar_perkerasan_jalan" class="input mt-2" placeholder="Meter"
value="{{ old('lebar_perkerasan_jalan', isset($forminspeksi['lebar_perkerasan_jalan']) ? $forminspeksi['lebar_perkerasan_jalan'] : '') }}"> value="{{ old('lebar_perkerasan_jalan', isset($forminspeksi['lingkungan']['lebar_perkerasan_jalan']) ? $forminspeksi['lingkungan']['lebar_perkerasan_jalan'] : '') }}">
</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">Perkerasan Jalan</label> <label class="form-label max-w-56">Perkerasan Jalan</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex gap-12"> <div class="flex flex-col items-start gap-4">
@if (isset($perkerasanJalan)) @if (isset($perkerasanJalan))
@foreach ($perkerasanJalan as $item) @foreach ($perkerasanJalan as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="perkerasan_jalan[]" type="checkbox" <input class="checkbox" name="perkerasan_jalan[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, isset($forminspeksi['perkerasan_jalan']) ? $forminspeksi['perkerasan_jalan'] : []) ? 'checked' : '' }} /> {{ in_array($item->name, isset($forminspeksi['lingkungan']['perkerasan_jalan']) ? $forminspeksi['lingkungan']['perkerasan_jalan'] : []) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@endforeach @endforeach
@@ -70,7 +70,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="lalu_lintas[]" type="checkbox" <input class="checkbox" name="lalu_lintas[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ isset($forminspeksi['lalu_lintas']) && in_array($item->name, explode(',', is_array(old('lalu_lintas', $forminspeksi['lalu_lintas'] ?? '')) ? implode(',', old('lalu_lintas', $forminspeksi['lalu_lintas'] ?? '')) : old('lalu_lintas', $forminspeksi['lalu_lintas'] ?? ''))) ? 'checked' : '' }} /> {{ isset($forminspeksi['lingkungan']['lalu_lintas']) && in_array($item->name, explode(',', is_array(old('lalu_lintas', $forminspeksi['lingkungan']['lalu_lintas'] ?? '')) ? implode(',', old('lalu_lintas', $forminspeksi['lingkungan']['lalu_lintas'] ?? '')) : old('lalu_lintas', $forminspeksi['lingkungan']['lalu_lintas'] ?? ''))) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
@@ -91,7 +91,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="gol_mas_sekitar[]" type="checkbox" <input class="checkbox" name="gol_mas_sekitar[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ isset($forminspeksi['gol_mas_sekitar']) && in_array($item->name, explode(',', is_array(old('gol_mas_sekitar', $forminspeksi['gol_mas_sekitar'] ?? '')) ? implode(',', old('gol_mas_sekitar', $forminspeksi['gol_mas_sekitar'] ?? '')) : old('gol_mas_sekitar', $forminspeksi['gol_mas_sekitar'] ?? ''))) ? 'checked' : '' }} /> {{ isset($forminspeksi['lingkungan']['gol_mas_sekitar']) && in_array($item->name, explode(',', is_array(old('gol_mas_sekitar', $forminspeksi['lingkungan']['gol_mas_sekitar'] ?? '')) ? implode(',', old('gol_mas_sekitar', $forminspeksi['lingkungan']['gol_mas_sekitar'] ?? '')) : old('gol_mas_sekitar', $forminspeksi['lingkungan']['gol_mas_sekitar'] ?? ''))) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@@ -112,7 +112,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="tingkat_keramaian[]" type="checkbox" <input class="checkbox" name="tingkat_keramaian[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ isset($forminspeksi['tingkat_keramaian']) && in_array($item->name, explode(',', is_array(old('tingkat_keramaian', $forminspeksi['tingkat_keramaian'] ?? '')) ? implode(',', old('tingkat_keramaian', $forminspeksi['tingkat_keramaian'] ?? '')) : old('tingkat_keramaian', $forminspeksi['tingkat_keramaian'] ?? ''))) ? 'checked' : '' }} /> {{ isset($forminspeksi['lingkungan']['tingkat_keramaian']) && in_array($item->name, explode(',', is_array(old('tingkat_keramaian', $forminspeksi['lingkungan']['tingkat_keramaian'] ?? '')) ? implode(',', old('tingkat_keramaian', $forminspeksi['lingkungan']['tingkat_keramaian'] ?? '')) : old('tingkat_keramaian', $forminspeksi['lingkungan']['tingkat_keramaian'] ?? ''))) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@@ -128,12 +128,12 @@
<label class="form-label max-w-56">Terletak Di Area</label> <label class="form-label max-w-56">Terletak Di Area</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($konturTanah)) @if (isset($terletakDiArea))
@foreach ($konturTanah as $item) @foreach ($terletakDiArea as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="terletak_diarea[]" type="checkbox" <input class="checkbox" name="terletak_diarea[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ isset($forminspeksi['terletak_diarea']) && in_array($item->name, explode(',', is_array(old('terletak_diarea', $forminspeksi['terletak_diarea'] ?? '')) ? implode(',', old('terletak_diarea', $forminspeksi['terletak_diarea'] ?? '')) : old('terletak_diarea', $forminspeksi['terletak_diarea'] ?? ''))) ? 'checked' : '' }} /> {{ isset($forminspeksi['lingkungan']['terletak_diarea']) && in_array($item->name, explode(',', is_array(old('terletak_diarea', $forminspeksi['lingkungan']['terletak_diarea'] ?? '')) ? implode(',', old('terletak_diarea', $forminspeksi['lingkungan']['terletak_diarea'] ?? '')) : old('terletak_diarea', $forminspeksi['lingkungan']['terletak_diarea'] ?? ''))) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@@ -143,36 +143,93 @@
<em id="error-terletak_diarea" class="alert text-danger text-sm"></em> <em id="error-terletak_diarea" class="alert text-danger text-sm"></em>
</div> </div>
</div> </div>
<!-- Disekitar Lokasi -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Disekitar Lokasi</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col gap-2 mt-2">
<label class="text-sm flex items-center gap-2.5 text-nowrap">
<input
onclick="toggleFieldVisibility('disekitar_lokasi', 'disekitar_lokasi_sesuai', ['ya'])"
type="radio" class="radio" name="disekitar_lokasi" value="ya"
{{ old('disekitar_lokasi', $forminspeksi['lingkungan']['disekitar_lokasi'] ?? '') == 'ya' ? 'checked' : '' }} />
<span class="ml-2">Telah ada bangunan</span>
</label>
<div class="flex w-full items-center gap-4">
<div id="disekitar_lokasi_sesuai" class="grid grid-cols-2 gap-4 mt-5 mb-5"
style="display: none;">
<div class="flex items-center gap-2">
<label for="" class="text-sm text-gray-700">Kondisi bangunan</label>
<select class="select" name="kondisi_bagunan_disekitar_lokasi" id="">
<option value="">pilih kondisi</option>
<option value="Cukup">Cukup</option>
<option value="Baik">Baik</option>
<option value="Kurang">Kurang</option>
</select>
</div>
<div class="flex items-center gap-2">
<label for="" class="text-sm text-gray-700">Sifat bangunan</label>
<select class="select" name="sifat_bagunan_disekitar_lokasi" id="">
<option value="">pilih sifat bagunan</option>
<option value="Permanen">Permanen</option>
<option value="Semi Permanen">Semi Permanen</option>
<option value="Tidak Permanen">Tidak Permanen</option>
</select>
</div>
</div>
</div>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input
onclick="toggleFieldVisibility('disekitar_lokasi', 'disekitar_lokasi_sesuai', ['ya'])"
type="radio" class="radio" name="disekitar_lokasi" value="tidak sesuai"
{{ old('disekitar_lokasi', $forminspeksi['lingkungan']['disekitar_lokasi'] ?? '') == 'tidak sesuai' ? 'checked' : '' }} />
<span class="ml-2">Belum ada bangunan</span>
</label>
</div>
<em id="error-terletak_diarea" class="alert text-danger text-sm"></em>
</div>
</div>
<!-- Dekat Makam --> <!-- Dekat Makam -->
<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">Dekat Makam</label> <label class="form-label max-w-56">Dekat Makam</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col gap-2 mt-2"> <div class="flex flex-col gap-2 mt-2">
<!-- Opsi Ya -->
<div class="flex w-full items-center gap-4"> <div class="flex w-full items-center gap-4">
<label class="text-sm flex items-center gap-2.5 text-nowrap"> <label class="text-sm flex items-center gap-2.5 text-nowrap">
<input onclick="toggledekatMakam(true)" type="radio" class="radio" <input onclick="toggleFieldVisibility('dekat_makam', 'dekat-makam', ['ya'])"
name="dekat_makam" value="ya" type="radio" class="radio" name="dekat_makam" value="ya"
{{ old('dekat_makam', $forminspeksi['dekat_makam'] ?? '') == 'ya' ? 'checked' : '' }} /> {{ old('dekat_makam', $forminspeksi['lingkungan']['dekat_makam'] ?? '') == 'ya' ? 'checked' : '' }} />
<span class="ml-2">Ya</span> <span class="ml-2">Ya</span>
</label> </label>
<div id="dekat-makam" class="grid grid-cols-2 gap-4" <div id="dekat-makam" class="flex items-baseline gap-4 w-full"
style="{{ old('dekat_makam', $forminspeksi['dekat_makam'] ?? '') == 'ya' ? 'visibility: visible; height: auto;' : 'visibility: hidden; height: 0;' }}"> style="{{ old('dekat_makam', $forminspeksi['lingkungan']['dekat_makam'] ?? '') == 'ya' ? 'display:block;' : 'display:none;' }}">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<label for="">Jarak</label> <label for="jarak_makam" class="form-label max-w-56">Jarak</label>
<input type="text" class="input mt-2" name="jarak_makam" <input type="number" class="input mt-2" name="jarak_makam"
value="{{ old('jarak_makam', $forminspeksi['jarak_makam'] ?? '') }}" value="{{ old('jarak_makam', $forminspeksi['lingkungan']['jarak_makam'] ?? '') }}"
placeholder="Km"> placeholder="Km" />
</div>
<div class="flex items-center gap-2">
<label for="nama_makam" class="form-label max-w-56">Nama TPU</label>
<input type="text" class="input mt-2 w-full" name="nama_makam"
value="{{ old('nama_makam', $forminspeksi['lingkungan']['nama_makam'] ?? '') }}"
placeholder="Nama TPU" />
</div> </div>
<input type="text" class="input mt-2" name="nama_makam"
value="{{ old('nama_makam', $forminspeksi['nama_makam'] ?? '') }}"
placeholder="Nama TPU">
</div> </div>
</div> </div>
<!-- Opsi Tidak -->
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input onclick="toggledekatMakam(false)" type="radio" class="radio" <input onclick="toggleFieldVisibility('dekat_makam', 'dekat-makam', ['ya'])"
name="dekat_makam" value="tidak" type="radio" class="radio" name="dekat_makam" value="tidak"
{{ old('dekat_makam', $forminspeksi['dekat_makam'] ?? '') == 'tidak' ? 'checked' : '' }} /> {{ old('dekat_makam', $forminspeksi['lingkungan']['dekat_makam'] ?? '') == 'tidak' ? 'checked' : '' }} />
<span class="ml-2">Tidak</span> <span class="ml-2">Tidak</span>
</label> </label>
</div> </div>
@@ -180,36 +237,62 @@
</div> </div>
</div> </div>
<!-- Dekat Tps --> <!-- Dekat Tps -->
<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">Dekat Tps</label> <label class="form-label max-w-56">Dekat TPS</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col gap-2 mt-2"> <div class="flex flex-col gap-2 mt-2">
<!-- Opsi Ya -->
<div class="flex w-full items-center gap-4"> <div class="flex w-full items-center gap-4">
<label onclick="toggledekatTps(true)" <label class="text-sm flex items-center gap-2.5 text-nowrap">
class="text-sm flex items-center gap-2.5 text-nowrap"> <input
<input type="radio" class="radio" name="dekat_tps" value="ya" onclick="toggleFieldVisibility('dekat_tps', 'dekat-tps', ['ya'])"
{{ old('dekat_tps', $forminspeksi['dekat_tps'] ?? '') == 'ya' ? 'checked' : '' }} /> type="radio" class="radio" name="dekat_tps" value="ya"
{{ old('dekat_tps', $forminspeksi['lingkungan']['dekat_tps'] ?? '') == 'ya' ? 'checked' : '' }}
/>
<span class="ml-2">Ya</span> <span class="ml-2">Ya</span>
</label> </label>
<div id="dekat-tps" class="grid grid-cols-2 gap-4" <div
style="{{ old('dekat_tps', $forminspeksi['dekat_tps'] ?? '') == 'ya' ? 'visibility: visible; height: auto;' : 'visibility: hidden; height: 0;' }}"> id="dekat-tps"
class="flex flex-wrap gap-4 w-full"
style="{{ old('dekat_tps', $forminspeksi['lingkungan']['dekat_tps'] ?? '') == 'ya' ? 'display:flex;' : 'display:none;' }}"
>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<label for="">Jarak</label> <label for="jarak_tps" class="form-label max-w-56">Jarak</label>
<input type="text" class="input mt-2" name="jarak_tps" <input
value="{{ old('jarak_tps', $forminspeksi['jarak_tps'] ?? '') }}" type="number"
placeholder="Km"> id="jarak_tps"
class="input mt-2"
name="jarak_tps"
value="{{ old('jarak_tps', $forminspeksi['lingkungan']['jarak_tps'] ?? '') }}"
placeholder="Km"
/>
</div>
<div class="flex items-center gap-2">
<label for="nama_tps" class="form-label max-w-56">Nama TPS</label>
<input
type="text"
id="nama_tps"
class="input mt-2"
name="nama_tps"
value="{{ old('nama_tps', $forminspeksi['lingkungan']['nama_tps'] ?? '') }}"
placeholder="Nama TPS"
/>
</div> </div>
<input type="text" class="input mt-2" name="nama_tps"
value="{{ old('nama_tps', $forminspeksi['nama_tps'] ?? '') }}"
placeholder="Nama TPS">
</div> </div>
</div> </div>
<!-- Opsi Tidak -->
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input onclick="toggledekatTps(false)" type="radio" class="radio" name="dekat_tps" <input
onclick="toggleFieldVisibility('dekat_tps', 'dekat-tps', ['ya'])"
type="radio" class="radio"
name="dekat_tps"
value="tidak" value="tidak"
{{ old('dekat_tps', $forminspeksi['dekat_tps'] ?? '') == 'tidak' ? 'checked' : '' }} /> {{ old('dekat_tps', $forminspeksi['lingkungan']['dekat_tps'] ?? '') == 'tidak' ? 'checked' : '' }}
/>
<span class="ml-2">Tidak</span> <span class="ml-2">Tidak</span>
</label> </label>
</div> </div>
@@ -217,17 +300,18 @@
</div> </div>
</div> </div>
<!-- Merupakan daerah --> <!-- Merupakan daerah -->
<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">Merupakan daerah</label> <label class="form-label max-w-56">Merupakan daerah</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($konturTanah)) @if (isset($merupakanDaerah))
@foreach ($konturTanah as $item) @foreach ($merupakanDaerah as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="merupakan_daerah[]" type="checkbox" <input class="checkbox" name="merupakan_daerah[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, isset($forminspeksi['merupakan_daerah']) ? $forminspeksi['merupakan_daerah'] : []) ? 'checked' : '' }} /> {{ in_array($item->name, isset($forminspeksi['lingkungan']['merupakan_daerah']) ? $forminspeksi['lingkungan']['merupakan_daerah'] : []) ? 'checked' : '' }} />
{{ $item->name }} {{ $item->name }}
</label> </label>
@endforeach @endforeach
@@ -238,24 +322,24 @@
</div> </div>
<!-- Fasilitas Umum Sekitar --> <!-- Fasilitas Umum Sekitar -->
<!-- Fasilitas Umum Sekitar -->
<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">Fasilitas Umum dekat Object</label> <label class="form-label max-w-56">Fasilitas Umum dekat Object</label>
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($konturTanah)) @if (isset($fasilitasObjek))
@foreach ($konturTanah as $item) @foreach ($fasilitasObjek as $item)
@php @php
$selectedFasilitas = is_array( $selectedFasilitas = is_array(
old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? []), old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? []),
) )
? old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? []) ? old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? [])
: explode( : explode(
',', ',',
old( old(
'fasilitas_dekat_object', 'fasilitas_dekat_object',
$forminspeksi['fasilitas_dekat_object'] ?? '', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? '',
), ),
); );
@endphp @endphp
@@ -264,9 +348,9 @@
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array( {{ in_array(
$item->name, $item->name,
is_array(old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? '')) is_array(old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? ''))
? old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? []) ? old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? [])
: explode(',', old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? '')), : explode(',', old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? '')),
) )
? 'checked' ? 'checked'
: '' }} /> : '' }} />
@@ -284,40 +368,3 @@
</div> </div>
</div> </div>
@push('scripts')
<script>
function toggledekatMakam(value) {
const selectElement = document.getElementById('dekat-makam');
if (value) {
selectElement.style.visibility = 'visible';
selectElement.style.height = 'auto';
} else {
selectElement.style.visibility = 'hidden';
selectElement.style.height = '0';
}
}
function toggledekatTps(value) {
const selectElement = document.getElementById('dekat-tps');
if (value) {
selectElement.style.visibility = 'visible';
selectElement.style.height = 'auto';
} else {
selectElement.style.visibility = 'hidden';
selectElement.style.height = '0';
}
}
function toggledisekitarLokasi(value) {
const selectElement = document.getElementById('disekitarLokasi');
if (value) {
selectElement.style.visibility = 'visible';
selectElement.style.height = 'auto';
} else {
selectElement.style.visibility = 'hidden';
selectElement.style.height = '0';
}
}
</script>
@endpush

View File

@@ -0,0 +1,88 @@
<div class="modal fade" data-modal="true" id="cameraModal" data-backdrop="" data-keyboard="false">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">Ambil Foto</h3>
<button class="btn btn-xs btn-icon btn-light" data-modal-dismiss="true" id="closeModal">
<i class="ki-outline ki-cross"></i>
</button>
</div>
<!-- Camera Interface -->
<div class="modal-body">
<div class="camera-container relative">
<video id="video" class="w-full h-auto" autoplay playsinline></video>
<canvas id="canvas" class="hidden w-full h-auto"></canvas>
<canvas id="drawingCanvas" class="hidden absolute top-0 left-0 w-full h-full"></canvas>
<div id="textOverlay" class="position-absolute top-0 left-0 w-100 h-100 pointer-events-none">
</div>
</div>
<div class="modal-footer mt-2">
<div id="cameraControls" class="flex justify-center gap-2 mt-4">
<button type="button" id="startButton" class="btn btn-primary">
<i class="ki-outline ki-camera"></i> Start Camera
</button>
<button type="button" id="takePhotoButton" class="btn btn-success" disabled>
<i class="ki-outline ki-photograph"></i> Ambil Foto
</button>
<button type="button" id="switchButton" class="btn btn-info" disabled>
<i class="ki-outline ki-arrows-circle"></i> Switch Camera
</button>
</div>
<!-- Editor Controls -->
<div id="editorControls" class=" flex flex-wrap gap-2 mt-4">
<div class="drawing-tools flex gap-2">
<button type="button" class="tool-btn btn btn-sm" data-tool="brush">
<i class="ki-filled ki-brush"></i>
</button>
<button type="button" class="tool-btn btn btn-sm" data-tool="rectangle">
<i class="ki-filled ki-frame"></i>
</button>
<button type="button" class="btn btn-light btn-sm tool-btn" data-tool="arrow">
<i class="ki-duotone ki-arrow-right fs-2"></i>
</button>
<button type="button" class="tool-btn btn btn-sm" data-tool="circle">
<i class="ki-filled ki-mouse-circle"></i>
</button>
<button type="button" class="tool-btn btn btn-sm" data-tool="text">
<i class="ki-filled ki-text"></i>
</button>
</div>
<div class="drawing-settings flex gap-2">
<input type="color" id="colorPicker" class="w-8 h-8 rounded">
<div class="flex items-center gap-2">
<input type="range" id="brushSize" min="1" max="20" value="5"
class="range range-sm">
<span id="brushSizeValue" class="text-sm">5px</span>
</div>
<input type="text" id="textInput" class="input" placeholder="Enter text">
<button type="button" class="btn btn-primary" id="confirmTextBtn">Add Text</button>
</div>
<div class="history-controls flex gap-2">
<button type="button" id="undoButton" class="btn btn-sm">
<i class="ki-filled ki-arrows-loop"></i>
</button>
<button type="button" id="resetButton" class="btn btn-sm">
<i class="ki-outline ki-trash"></i>
</button>
</div>
<div class="final-controls flex gap-2">
<button type="button" class="btn btn-light btn-sm" data-modal-dismiss="true">Cancel</button>
<button id="backButton" class="btn btn-warning btn-sm">
<i class="ki-outline ki-arrow-left"></i> Kembali
</button>
<button type="button" id="saveButton" class="btn btn-success btn-sm" data-modal-dismiss="true">
<i class="ki-outline ki-check"></i> Simpan
</button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -13,33 +13,38 @@
<label class="form-label max-w-56">Luas Tanah</label> <label class="form-label max-w-56">Luas Tanah</label>
<div class="mt-2"> <div class="mt-2">
@if (isset($permohonan->debiture->documents)) @if (isset($permohonan->debiture->documents))
@foreach ($permohonan->debiture->documents as $item) @foreach ($permohonan->debiture->documents as $item)
@php @php
$details = json_decode($item->detail); $luas = $item->detail;
$luas_tanah = isset($details['luas_tanah']) ? $details['luas_tanah'] : 'N/A'; $details = json_decode($luas[0]->details, true);
@endphp $luas_tanah = isset($details['luas_tanah']) ? $details['luas_tanah'] : 'N/A';
<p class="text-2sm text-gray-700">{{ $luas_tanah }} m2</p> @endphp
@endforeach <p class="text-2sm text-gray-700">{{ $luas_tanah }} m<sup>2</sup></p>
@endforeach
@endif @endif
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-wrap items-baseline w-full"> <div class="flex flex-wrap items-baseline w-full">
<div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <label class="form-label flex items-center gap-3 text-nowrap">
<input type="radio" class="radio" name="luas_tanah" value="sesuai" <input type="radio" class="radio" name="luas_tanah" value="sesuai"
onclick="toggleTidakSesuai('luas_tanah', 'luas_tanah_tidak_sesuai')" onclick="toggleFieldVisibility('luas_tanah', 'luas_tanah_tidak_sesuai', ['tidak sesuai'])"
{{ old('luas_tanah', $forminspeksi['luas_tanah'] ?? '') == 'sesuai' ? 'checked' : '' }}> {{ old('luas_tanah', $forminspeksi['tanah']['luas_tanah'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Sesuai</span> <span class="ml-2">Sesuai</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="luas_tanah" value="tidak sesuai" <input type="radio" class="radio" name="luas_tanah" value="tidak sesuai"
onclick="toggleTidakSesuai('luas_tanah', 'luas_tanah_tidak_sesuai')" onclick="toggleFieldVisibility('luas_tanah', 'luas_tanah_tidak_sesuai', ['tidak sesuai'])"
{{ old('luas_tanah', $forminspeksi['luas_tanah'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}> {{ old('luas_tanah', $forminspeksi['tanah']['luas_tanah'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span> <span class="ml-2">Tidak Sesuai</span>
</label> </label>
<input type="text" name="luas_tanah_tidak_sesuai" id="luas_tanah_tidak_sesuai" <div id="luas_tanah_tidak_sesuai" class="flex items-baseline gap-2"
class="input w-full" placeholder="Masukan Luas Tanah" style="{{ old('luas_tanah', $forminspeksi['tanah']['luas_tanah'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
value="{{ old('luas_tanah_tidak_sesuai', $forminspeksi['luas_tanah_tidak_sesuai'] ?? '') }}" <input id="analisa_tanah_tidak_sesuai" type="text" name="luas_tanah_tidak_sesuai" class="input w-full"
style="{{ old('luas_tanah', $forminspeksi['luas_tanah'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}"> placeholder="Masukan Luas Tanah"
value="{{ old('luas_tanah_tidak_sesuai', $forminspeksi['tanah']['luas_tanah_tidak_sesuai'] ?? '') }}">
<button type="button" class="btn btn-md btn-primary" onclick="updateAnalisa('analisa_tanah')">Save</button>
</div>
</div> </div>
<em id="error-luas_tanah" class="alert text-danger text-sm"></em> <em id="error-luas_tanah" class="alert text-danger text-sm"></em>
</div> </div>
@@ -54,33 +59,37 @@
<div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-3 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap"> <label class="form-label flex items-center gap-3 text-nowrap">
<input type="radio" class="radio" name="hadap_mata_angin" value="sesuai" <input type="radio" class="radio" name="hadap_mata_angin" value="sesuai"
onclick="toggleTidakSesuai('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai')" onclick="toggleFieldVisibility('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai' ,['tidak sesuai'])"
{{ old('hadap_mata_angin', $forminspeksi['hadap_mata_angin'] ?? '') == 'sesuai' ? 'checked' : '' }}> {{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Sesuai</span> <span class="ml-2">Sesuai</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="hadap_mata_angin" value="tidak sesuai" <input type="radio" class="radio" name="hadap_mata_angin" value="tidak sesuai"
onclick="toggleTidakSesuai('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai')" onclick="toggleFieldVisibility('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai' ,['tidak sesuai'])"
{{ old('hadap_mata_angin', $forminspeksi['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}> {{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span> <span class="ml-2">Tidak Sesuai</span>
</label> </label>
<!-- Select dropdown untuk "Tidak Sesuai" --> <!-- Select dropdown untuk "Tidak Sesuai" -->
<select id="hadap_mata_angin_tidak_sesuai" <div id="hadap_mata_angin_tidak_sesuai" class="flex items-baseline gap-2"
class="input w-full @error('hadap_mata_angin_tidak_sesuai') border-danger bg-danger-light @enderror" style="{{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
name="hadap_mata_angin_tidak_sesuai" <select
style="{{ old('hadap_mata_angin', $forminspeksi['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}"> class="input w-full
<option value="">Select Hadap Mata Angin</option> id="hadap_matangin_tidak_sesuai"
@if (isset($arahMataAngin)) name="analisa_tanah_hadap_mata_angin_tidak_sesuai">
@foreach ($arahMataAngin as $item) <option value="">Select Hadap Mata Angin</option>
<option value="{{ $item->name }}" @if (isset($arahMataAngin))
{{ old('hadap_mata_angin_tidak_sesuai', $forminspeksi['hadap_mata_angin_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}> @foreach ($arahMataAngin as $item)
{{ $item->name }} <option value="{{ $item->name }}"
</option> {{ old('hadap_mata_angin_tidak_sesuai', $forminspeksi['tanah']['hadap_mata_angin_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
@endforeach {{ $item->name }}
@endif </option>
</select> @endforeach
@endif
</select>
{{-- <button type="button" class="btn btn-md btn-primary" onclick="updateAnalisa('hadap_mata_angin')">Save</button> --}}
</div>
</div> </div>
<em id="error-hadap_mata_angin" class="alert text-danger text-sm"></em> <em id="error-hadap_mata_angin" class="alert text-danger text-sm"></em>
</div> </div>
@@ -88,34 +97,44 @@
<!-- Bentuk Tanah --> <!-- Bentuk Tanah -->
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Bentuk Tanah</label> <label class="form-label max-w-56">Bentuk Tanah</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($bentukTanah)) @if (isset($bentukTanah))
@foreach ($bentukTanah as $item) @foreach ($bentukTanah as $item)
@if (strcasecmp($item->name, 'lainnya') == 0) <div class="flex items-center">
<div class="flex items-center">
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="bentuk_tanah[]" type="checkbox"
value="{{ $item->name }}"
{{ in_array($item->name, old('bentuk_tanah', [])) || (isset($forminspeksi['bentuk_tanah']) && in_array($item->name, $forminspeksi['bentuk_tanah'])) ? 'checked' : '' }}
onclick="toggleTidakSesuai('bentuk_tanah', 'bentuk_tanah_lainnya')" />
{{ $item->name }}
</label>
<input id="bentuk_tanah_lainnya" type="text" name="bentuk_tanah_lainnya"
class="input w-full mt-2" placeholder="Masukkan bentuk tanah..."
onclick="toggleTidakSesuai('bentuk_tanah', 'bentuk_tanah_lainnya')">
</div>
@else
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="bentuk_tanah[]" type="checkbox" <input
class="checkbox"
name="bentuk_tanah[]"
type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('bentuk_tanah', [])) || (isset($forminspeksi['bentuk_tanah']) && in_array($item->name, $forminspeksi['bentuk_tanah'])) ? 'checked' : '' }} {{
onclick="toggleTidakSesuai('bentuk_tanah', 'bentuk_tanah_lainnya')" /> in_array($item->name, old('bentuk_tanah', [])) ||
(isset($forminspeksi['tanah']['bentuk_tanah']) &&
is_array($forminspeksi['tanah']['bentuk_tanah']) &&
in_array($item->name, $forminspeksi['tanah']['bentuk_tanah']))
? 'checked'
: ''
}}
onclick="toggleCheckboxVisibility('bentuk_tanah', 'bentuk_tanah_lainnya', ['lainnya'])"
/>
{{ $item->name }} {{ $item->name }}
</label> </label>
@endif @if (strcasecmp($item->name, 'lainnya') == 0)
<input
id="bentuk_tanah_lainnya"
type="text"
style="display: none;"
name="bentuk_tanah_lainnya"
class="input w-full mt-2"
placeholder="Masukkan bentuk tanah..."
value="{{ old('bentuk_tanah_lainnya', $forminspeksi['tanah']['bentuk_tanah_lainnya'] ?? '') }}"
/>
@endif
</div>
@endforeach @endforeach
@endif @endif
</div> </div>
@@ -123,19 +142,27 @@
</div> </div>
</div> </div>
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kontur Tanah</label> <label class="form-label max-w-56">Kontur Tanah</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($konturTanah)) @if (isset($konturTanah))
@foreach ($konturTanah as $item) @foreach ($konturTanah as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kontur_tanah[]" type="checkbox" <input
value="{{ $item->name }}" class="checkbox"
{{ in_array($item->name, old('kontur_tanah', isset($forminspeksi['kontur_tanah']) ? $forminspeksi['kontur_tanah'] : [])) ? 'checked' : '' }} /> name="kontur_tanah[]"
type="checkbox"
value="{{ $item->name }}"
{{
in_array(
$item->name,
old('kontur_tanah', $forminspeksi['tanah']['kontur_tanah'] ?? [])
)
? 'checked'
: ''
}}
/>
{{ $item->name }} {{ $item->name }}
</label> </label>
@endforeach @endforeach
@@ -146,22 +173,34 @@
</div> </div>
<!-- Beda Ketinggian Dengan Jalan --> <!-- Beda Ketinggian Dengan Jalan -->
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Beda Ketinggian Dengan Jalan</label> <label class="form-label max-w-56">Beda Ketinggian Dengan Jalan</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($ketinggianTanah)) @if (isset($ketinggianTanah))
@foreach ($ketinggianTanah as $item) @foreach ($ketinggianTanah as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <div class="flex flex-col gap-2">
<input class="checkbox" name="ketinggian_jalan[]" type="checkbox" <label class="form-label flex items-center gap-2.5 text-nowrap">
value="{{ $item->name }}" <input class="checkbox" name="ketinggian_jalan[]" type="checkbox"
{{ in_array($item->name, old('ketinggian_jalan', $forminspeksi['ketinggian_jalan'] ?? [])) ? 'checked' : '' }} /> value="{{ $item->name }}"
{{ $item->name }} {{ in_array($item->name, old('ketinggian_jalan', $forminspeksi['tanah']['ketinggian_jalan'] ?? [])) ? 'checked' : '' }}
</label> onclick="toggleMultipleFields('ketinggian_jalan', {
'Lebih Tinggi': 'input-lebih-tinggi',
'Lebih Rendah': 'input-lebih-rendah'
})" />
{{ $item->name }}
</label>
@if (strcasecmp($item->name, 'Lebih Tinggi') == 0)
<input id="input-lebih-tinggi" type="text" style="display: none;"
name="ketinggian_lebih_tinggi" class="input w-full mt-2"
placeholder="m2" />
@elseif (strcasecmp($item->name, 'Lebih Rendah') == 0)
<input id="input-lebih-rendah" type="text" style="display: none;"
name="ketinggian_lebih_rendah" class="input w-full mt-2"
placeholder="m2" />
@endif
</div>
@endforeach @endforeach
@endif @endif
</div> </div>
@@ -170,6 +209,8 @@
</div> </div>
<!-- Kontur Jalan Depan Objek --> <!-- Kontur Jalan Depan Objek -->
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kontur Jalan Depan Objek</label> <label class="form-label max-w-56">Kontur Jalan Depan Objek</label>
@@ -177,12 +218,12 @@
<div class="grid grid-cols-2 md:grid-cols-3 gap-4"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="kontur_jalan" value="menurun" <input type="radio" class="radio" name="kontur_jalan" value="menurun"
{{ old('kontur_jalan', $forminspeksi['kontur_jalan'] ?? '') == 'menurun' ? 'checked' : '' }}> {{ old('kontur_jalan', $forminspeksi['tanah']['kontur_jalan'] ?? '') == 'menurun' ? 'checked' : '' }}>
<span class="ml-2">Menurun</span> <span class="ml-2">Menurun</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="kontur_jalan" value="rata" <input type="radio" class="radio" name="kontur_jalan" value="rata"
{{ old('kontur_jalan', $forminspeksi['kontur_jalan'] ?? '') == 'rata' ? 'checked' : '' }}> {{ old('kontur_jalan', $forminspeksi['tanah']['kontur_jalan'] ?? '') == 'rata' ? 'checked' : '' }}>
<span class="ml-2">Rata</span> <span class="ml-2">Rata</span>
</label> </label>
</div> </div>
@@ -190,29 +231,36 @@
</div> </div>
</div> </div>
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Posisi Kavling</label> <label class="form-label max-w-56">Posisi Kavling</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4"> <div class="flex flex-col items-start gap-4">
@if (isset($posisiKavling)) @if (isset($posisiKavling))
@foreach ($posisiKavling as $item) @foreach ($posisiKavling as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap"> <div class="flex items-center">
<input class="checkbox" name="posisi_kavling[]" type="checkbox" <label class="form-label flex items-center gap-2.5 text-nowrap">
value="{{ $item->name }}" <input
{{ in_array($item->name, old('posisi_kavling', [])) || (isset($forminspeksi['posisi_kavling']) && in_array($item->name, $forminspeksi['posisi_kavling'])) ? 'checked' : '' }} /> class="checkbox"
{{ $item->name }} name="posisi_kavling[]"
</label> type="checkbox"
@if (strcasecmp($item->name, 'lainnya') == 0) value="{{ $item->name }}"
<div class="flex items-center"> {{ in_array($item->name, old('posisi_kavling', $forminspeksi['tanah']['posisi_kavling'] ?? [])) ? 'checked' : '' }}
<label class="form-label flex items-center gap-2.5 text-nowrap"> onclick="toggleCheckboxVisibility('posisi_kavling', 'posisi_kavling_lainnya', ['Lainnya'])"
<input class="checkbox" name="posisi_kavling[]" type="checkbox" />
value="{{ $item->name }}" /> {{ $item->name }}
{{ $item->name }} </label>
</label> @if (strcasecmp($item->name, 'Lainnya') == 0)
<input type="text" name="posisi_kavling_lainnya" class="input mt-2" <input
id="bentukTanahInput" placeholder="Masukkan Posisi Kavling"> id="posisi_kavling_lainnya"
</div> type="text"
@endif style="display: none;"
name="posisi_kavling_lainnya"
class="input w-full mt-2"
placeholder="Masukkan Posisi Kavling lainnya..."
/>
@endif
</div>
@endforeach @endforeach
@endif @endif
</div> </div>
@@ -228,12 +276,12 @@
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="tusuk_sate" value="yes" <input type="radio" class="radio" name="tusuk_sate" value="yes"
{{ old('tusuk_sate') == 'yes' || (isset($forminspeksi['tusuk_sate']) && $forminspeksi['tusuk_sate'] == 'yes') ? 'checked' : '' }}> {{ old('tusuk_sate') == 'yes' || (isset($forminspeksi['tanah']['tusuk_sate']) && $forminspeksi['tanah']['tusuk_sate'] == 'yes') ? 'checked' : '' }}>
<span class="ml-2">Ya</span> <span class="ml-2">Ya</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="tusuk_sate" value="no" <input type="radio" class="radio" name="tusuk_sate" value="no"
{{ old('tusuk_sate') == 'no' || (isset($forminspeksi['tusuk_sate']) && $forminspeksi['tusuk_sate'] == 'no') ? 'checked' : '' }}> {{ old('tusuk_sate') == 'no' || (isset($forminspeksi['tanah']['tusuk_sate']) && $forminspeksi['tanah']['tusuk_sate'] == 'no') ? 'checked' : '' }}>
<span class="ml-2">Tidak</span> <span class="ml-2">Tidak</span>
</label> </label>
</div> </div>
@@ -248,12 +296,12 @@
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="lockland" value="yes" <input type="radio" class="radio" name="lockland" value="yes"
{{ old('lockland') == 'yes' || (isset($forminspeksi['lockland']) && $forminspeksi['lockland'] == 'yes') ? 'checked' : '' }}> {{ old('lockland') == 'yes' || (isset($forminspeksi['tanah']['lockland']) && $forminspeksi['tanah']['lockland'] == 'yes') ? 'checked' : '' }}>
<span class="ml-2">Ya</span> <span class="ml-2">Ya</span>
</label> </label>
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="lockland" value="no" <input type="radio" class="radio" name="lockland" value="no"
{{ old('lockland') == 'no' || (isset($forminspeksi['lockland']) && $forminspeksi['lockland'] == 'no') ? 'checked' : '' }}> {{ old('lockland') == 'no' || (isset($forminspeksi['tanah']['lockland']) && $forminspeksi['tanah']['lockland'] == 'no') ? 'checked' : '' }}>
<span class="ml-2">Tidak</span> <span class="ml-2">Tidak</span>
</label> </label>
</div> </div>
@@ -262,7 +310,6 @@
</div> </div>
<!-- Kondisi Fisik Tanah --> <!-- Kondisi Fisik Tanah -->
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kondisi Fisik Tanah</label> <label class="form-label max-w-56">Kondisi Fisik Tanah</label>
<div class="flex-wrap items-stretch"> <div class="flex-wrap items-stretch">
@@ -272,7 +319,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap"> <label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_fisik_tanah[]" type="checkbox" <input class="checkbox" name="kondisi_fisik_tanah[]" type="checkbox"
value="{{ $item->name }}" value="{{ $item->name }}"
{{ in_array($item->name, old('kondisi_fisik_tanah', [])) || (isset($forminspeksi['kondisi_fisik_tanah']) && in_array($item->name, $forminspeksi['kondisi_fisik_tanah'])) ? 'checked' : '' }} {{ in_array($item->name, old('kondisi_fisik_tanah', [])) || (isset($forminspeksi['tanah']['kondisi_fisik_tanah']) && in_array($item->name, $forminspeksi['tanah']['kondisi_fisik_tanah'])) ? 'checked' : '' }}
onclick="toggleInputLainnya(this, 'kondisi_fisik_tanah_lainnya', '{{ $item->name }}')" /> onclick="toggleInputLainnya(this, 'kondisi_fisik_tanah_lainnya', '{{ $item->name }}')" />
{{ $item->name }} {{ $item->name }}
</label> </label>
@@ -295,54 +342,3 @@
</div> </div>
</div> </div>
</div> </div>
@push('scripts')
<script>
function handleSelectionChange() {
const select = document.getElementById('bentukTanahSelect');
const input = document.getElementById('bentukTanahInput');
if (select.value === 'lainnya') {
input.style.display = 'block';
input.value = ''; // Kosongkan input
input.focus(); // Fokus pada input
} else {
input.style.display = 'none';
input.value = select.value; // Isi input dengan nilai yang dipilih
}
}
function toggleJenisAsset(params) {
const inputData = document.querySelector(`input[name="${params}"]:checked`);
const luasTanah = document.getElementById('jenis_asset');
if (inputData && inputData.value === 'tidak sesuai') {
luasTanah.style.display = 'block';
} else {
luasTanah.style.display = 'none';
}
}
function toggleAlamat(params) {
const inputData = document.querySelector(`input[name="${params}"]:checked`);
const luasTanah = document.getElementById('alamat');
if (inputData && inputData.value === 'tidak sesuai') {
luasTanah.style.display = 'block';
} else {
luasTanah.style.display = 'none';
}
}
function toggleTidakSesuaiHadap(showSelect) {
const selectElement = document.getElementById('selectTidakSesuai');
selectElement.style.display = showSelect ? 'block' : 'none';
}
</script>
@endpush

View File

@@ -200,8 +200,6 @@ function jadwal(id){
return `${day}-${month}-${year}`; return `${day}-${month}-${year}`;
} }
ihfdksfjhjfjbkdfkdsfdsjkjdjdsgjjgdgjhgdgjkhdshggkhgkhdghskghkjkhjsdgjkgdjhg
</script> </script>
@endpush @endpush

View File

@@ -1,4 +1,304 @@
@push('scripts') @push('scripts')
<script>
document.addEventListener("DOMContentLoaded", function() {
const ruteLainnyaDiv = document.getElementById("ruteLainnya");
const lantaiLainnyaDiv = document.getElementById("lantaiLainnya");
// Function to add delete event listeners to existing buttons
function addDeleteListeners(container) {
container.querySelectorAll(".delete-button").forEach(button => {
button.addEventListener("click", function() {
this.closest(
".flex.items-baseline.flex-wrap.lg\\:flex-nowrap.gap-2\\.5.mb-5"
).remove();
});
});
}
// Add delete listeners to existing buttons
addDeleteListeners(ruteLainnyaDiv);
addDeleteListeners(lantaiLainnyaDiv);
function createNewDiv(container, inputName) {
const newDiv = document.createElement("div");
newDiv.className = "flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 mb-5";
newDiv.innerHTML = `
<label class="flex flex-col form-label max-w-56">
Masukkan nama ${inputName}
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="flex flex-wrap items-baseline px-2">
<input class="input" type="text" name="name_${inputName}[]">
</div>
<div class=" w-full flex flex-col gap-2">
<img id="foto_${inputName}-preview"
src="{{ isset($formFoto['gerbang']) ? asset('storage/' . $formFoto['gerbang']) : '' }}"
alt="Foto Gerbong" class="mt-2 max-w-full h-auto"
style="{{ isset($formFoto['gerbang']) ? '' : 'display: none;' }} width: 30rem;">
<div class="input-group w-full flex gap-2">
<input id="inputLainnya" type="file" name="foto_${inputName}[]"
class="file-input file-input-bordered w-full" accept="image/*" capture="camera"
onchange="previewImage(this, 'foto_${inputName}-preview')"
>
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
<i class="ki-outline ki-abstract-33"></i> Camera
</button>
</div>
</div>
<button type="button" class="btn btn-danger btn-sm delete-button">
<i class="ki-filled ki-trash"></i>
</button>
</div>
</div>
`;
container.appendChild(newDiv);
addDeleteListeners(container);
}
document.getElementById("btnAddMore").addEventListener("click", function() {
createNewDiv(ruteLainnyaDiv, "rute_lainnya");
});
document.getElementById("btnAddMoreObject").addEventListener("click", function() {
createNewDiv(lantaiLainnyaDiv, "lantai_lainnya");
});
});
const style = document.createElement('style');
style.textContent = `
.draggable-text {
z-index: 1000;
}
.draggable-text:hover {
outline: 1px dashed #666;
}
`;
document.head.appendChild(style);
document.addEventListener('DOMContentLoaded', function() {
const editor = new UniversalCameraEditor();
const cameraButtons = document.querySelectorAll('#btnCamera');
const modal = document.getElementById('cameraModal');
const closeModal = document.getElementById('closeModal');
// Current input field to update
let currentInputField = null;
// Handle camera button click
cameraButtons.forEach(button => {
button.addEventListener('click', function(e) {
e.preventDefault();
const inputContainer = this.closest('.input-group');
currentInputField = inputContainer.querySelector('input[type="file"]');
modal.classList.remove('hidden');
modal.classList.add('modal-open');
editor.startCamera();
});
});
closeModal.addEventListener('click', function() {
modal.classList.add('hidden');
editor.closeCamera();
});
// Override save function
editor.saveAndUpload = async function() {
try {
// Create final canvas
const finalCanvas = document.createElement('canvas');
finalCanvas.width = this.canvas.width;
finalCanvas.height = this.canvas.height;
const ctx = finalCanvas.getContext('2d');
// Draw original photo and edited result on final canvas
ctx.drawImage(this.canvas, 0, 0);
ctx.drawImage(this.drawingCanvas, 0, 0);
// Convert canvas to Blob and create file
finalCanvas.toBlob(async (blob) => {
const file = new File([blob], `camera_photo_${Date.now()}.jpg`, {
type: "image/jpeg"
});
// Create FileList and update input field
const dataTransfer = new DataTransfer();
dataTransfer.items.add(file);
if (currentInputField) {
currentInputField.files = dataTransfer.files;
const event = new Event('change', {
bubbles: true
});
currentInputField.dispatchEvent(event);
const previewContainer = currentInputField.closest('.input-group')
.querySelector('.preview-container');
if (previewContainer) {
const img = document.createElement('img');
img.src = URL.createObjectURL(file);
img.className = 'w-full h-32 object-cover rounded-lg';
previewContainer.innerHTML = '';
previewContainer.appendChild(img);
}
}
// Close modal
modal.classList.remove('show');
modal.style.display = 'none';
modal.setAttribute('aria-hidden', 'true');
// document.body.classList.remove('modal-open');
// Remove modal backdrop if exists
const backdrop = document.querySelector('.modal-backdrop');
if (backdrop) {
backdrop.remove();
}
// Stop camera stream
if (editor.stream) {
editor.stream.getTracks().forEach(track => track.stop());
editor.stream = null;
}
// Reset camera to initial state
editor.closeCamera();
// Reset scroll if needed
window.scrollTo(0, 0); // Adjust as necessary
}, 'image/jpeg', 0.8);
} catch (error) {
console.error('Error saving photo:', error);
alert('Error saving photo. Please try again.');
}
};
// Handle escape key
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const modal = document.getElementById('cameraModal');
if (modal.classList.contains('modal-open')) {
modal.classList.remove('modal-open');
modal.classList.add('hidden');
if (editor.stream) {
editor.stream.getTracks().forEach(track => track.stop());
}
}
}
});
function setupInputHandlers(containerId, buttonId, labelText, inputDataClass, buttonDeleteClass) {
const inputContainer = document.getElementById(containerId);
const addButton = document.getElementById(buttonId);
function updateLabels() {
const labels = inputContainer.querySelectorAll('.form-label span');
labels.forEach((label, index) => {
label.textContent = `${labelText} ${index + 1}`;
});
}
function handleDeleteButtons() {
const deleteBtns = inputContainer.querySelectorAll(`.${buttonDeleteClass}`);
deleteBtns.forEach(btn => {
btn.style.display = inputContainer.children.length > 1 ? 'block' : 'none';
});
}
function createNewInput() {
const newDiv = inputContainer.children[0].cloneNode(true);
const inputFile = newDiv.querySelector(`.${inputDataClass}`);
inputFile.id = `inputRute-${inputContainer.children.length}`;
// Reset input file value
if (inputFile) {
inputFile.value = '';
}
// Update the camera button to set currentInputField
const cameraButton = newDiv.querySelector('#btnCamera');
if (cameraButton) {
cameraButton.addEventListener('click', function(e) {
e.preventDefault();
currentInputField = inputFile; // Set current input field to the new input
modal.classList.remove('hidden');
modal.classList.add('modal-open');
editor.startCamera();
});
}
// Add delete button functionality
const deleteBtn = newDiv.querySelector(`.${buttonDeleteClass}`);
if (deleteBtn) {
deleteBtn.addEventListener('click', function() {
inputContainer.removeChild(newDiv);
handleDeleteButtons();
updateLabels();
});
}
// Update preview container
const previewContainer = document.createElement('div');
previewContainer.className = 'preview-container';
const img = document.createElement('img');
img.id = `foto_rute-preview-${inputFile.id}`;
img.src = '';
img.className = 'mt-2 h-auto';
img.style.display = 'none';
img.style.width = '30rem';
previewContainer.appendChild(img);
// Append preview container to the new input group
const inputGroup = newDiv.querySelector('.input-group');
inputGroup.appendChild(previewContainer);
newDiv.style.marginTop = '10px';
inputContainer.appendChild(newDiv);
updateLabels();
handleDeleteButtons();
}
if (addButton) {
addButton.addEventListener('click', createNewInput);
}
const firstDeleteBtn = inputContainer.children[0].querySelector(`.${buttonDeleteClass}`);
if (firstDeleteBtn) {
firstDeleteBtn.addEventListener('click', function() {
if (inputContainer.children.length > 1) {
inputContainer.removeChild(this.closest('.flex'));
handleDeleteButtons();
updateLabels();
}
});
}
updateLabels();
}
setupInputHandlers('inputContainerRute', 'btnRute', 'Foto Rute Menuju Lokasi', 'file-input',
'delete-btn');
setupInputHandlers('inputContainerLantai', 'btnLantai', 'Foto Lantai', 'file-input', 'delete-btn');
setupInputHandlers('inputContainerLingkungan', 'btnLingkungan', 'Lingkungan', 'file-input',
'delete-btn');
});
</script>
<script> <script>
class UniversalCameraEditor { class UniversalCameraEditor {
constructor() { constructor() {

View File

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

View File

@@ -304,7 +304,14 @@
'model-alat-berat' => 'Model Alat Berat', 'model-alat-berat' => 'Model Alat Berat',
'jenis-kapal' => 'Jenis kapal', 'jenis-kapal' => 'Jenis kapal',
'jenis-kendaraan' => 'Jenis kendaraan', 'jenis-kendaraan' => 'Jenis kendaraan',
]; 'jenis-unit' => 'Jenis unit',
'terletak-area' => 'Terletak di Area',
'merupakan-daerah' => 'Merupakan Daerah',
'posisi-unit' => 'Posisi unit',
'bentuk-unit' => 'Bentuk unit',
'fasilitas-objek' => 'Fasilitas Umum Dekat Objek',
];
foreach ($headers as $type => $header) { foreach ($headers as $type => $header) {
Route::get($type, [SurveyorController::class, 'data'])->name($type . '.index')->defaults('type', $type); Route::get($type, [SurveyorController::class, 'data'])->name($type . '.index')->defaults('type', $type);
@@ -457,11 +464,11 @@
Route::get('datatables', [ActivityController::class, 'dataForDatatables'])->name('datatables'); Route::get('datatables', [ActivityController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [ActivityController::class, 'export'])->name('export'); Route::get('export', [ActivityController::class, 'export'])->name('export');
Route::get('/', [ActivityController::class, 'index'])->name('index'); Route::get('/', [ActivityController::class, 'index'])->name('index');
Route::put('update-team', [ActivityController::class, 'updateTeamAssingment'])->name('update-team');
Route::get('/{id}/show', [ActivityController::class, 'show'])->name('show'); Route::get('/{id}/show', [ActivityController::class, 'show'])->name('show');
Route::get('download/{id}', [ActivityController::class, 'download'])->name('download'); Route::get('download/{id}', [ActivityController::class, 'download'])->name('download');
Route::get('senior', [ActivityController::class, 'senior'])->name('senior'); Route::get('senior', [ActivityController::class, 'senior'])->name('senior');
Route::name('progres.')->prefix('progres')->group(function () { Route::name('progres.')->prefix('progres')->group(function () {
Route::get('/', [ActivityController::class, 'progres_activity'])->name('index'); Route::get('/', [ActivityController::class, 'progres_activity'])->name('index');
@@ -499,33 +506,37 @@
}); });
Route::name('surveyor.')->prefix('surveyor')->group(function () { Route::name('surveyor.')->prefix('surveyor')->group(function () {
Route::get('/', [SurveyorController::class, 'index'])->name('index'); Route::get('/', [SurveyorController::class, 'index'])->name('index');
Route::get('{id}/show', [SurveyorController::class, 'show'])->name('show'); Route::get('{id}/show', [SurveyorController::class, 'show'])->name('show');
Route::post('store', [SurveyorController::class, 'store'])->name('store'); Route::post('store', [SurveyorController::class, 'store'])->name('store');
Route::post('storeDenah', [SurveyorController::class, 'storeDenah'])->name('storeDenah'); Route::post('storeDenah', [SurveyorController::class, 'storeDenah'])->name('storeDenah');
Route::put('storeJadwal', [SurveyorController::class, 'storeJadwal'])->name('storeJadwal'); Route::put('storeJadwal', [SurveyorController::class, 'storeJadwal'])->name('storeJadwal');
Route::put('storeAproved/{id}', [SurveyorController::class, 'storeAproved'])->name('storeAproved'); Route::put('storeAproved/{id}', [SurveyorController::class, 'storeAproved'])->name('storeAproved');
Route::post('storeFoto', [SurveyorController::class, 'storeFoto'])->name('storeFoto'); Route::post('storeFoto', [SurveyorController::class, 'storeFoto'])->name('storeFoto');
Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name( Route::post('storeDataPembanding', [SurveyorController::class, 'storeDataPembanding'])->name('storeDataPembanding');
'checkButtonStatus', Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name('checkButtonStatus');
);
Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables'); Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables');
Route::get('inspeksi/{id}/{jaminanId}', [SurveyorController::class, 'formInspeksi'])->name('inspeksi'); Route::get('inspeksi/{id}/{jaminanId}', [SurveyorController::class, 'formInspeksi'])->name('inspeksi');
Route::get('denah/{id}/{jaminanId}', [SurveyorController::class, 'denah'])->name('denah'); Route::get('denah/{id}/{jaminanId}', [SurveyorController::class, 'denah'])->name('denah');
Route::get('foto/{id}/{jaminanId}', [SurveyorController::class, 'foto'])->name('foto'); Route::get('foto/{id}/{jaminanId}', [SurveyorController::class, 'foto'])->name('foto');
Route::get('data-pembanding/{id}/{jaminanId}', [SurveyorController::class, 'dataPembanding'])->name( Route::get('data-pembanding/{id}/{jaminanId}', [SurveyorController::class, 'dataPembanding'])->name('data-pembanding');
'data-pembanding', Route::post('submitSurveyor/{id}', [SurveyorController::class, 'submitSurveyor'])->name('submitSurveyor');
); Route::post('update_analisa/{id}', [SurveyorController::class, 'update_analisa'])->name('update_analisa');
Route::post('submitSurveyor/{id}', [SurveyorController::class, 'submitSurveyor'])->name('submitSurveyor');
}); });
Route::name('penilai.')->prefix('penilai')->group(function () { Route::name('penilai.')->prefix('penilai')->group(function () {
Route::get('/', [PenilaiController::class, 'index'])->name('index'); Route::get('/', [PenilaiController::class, 'index'])->name('index');
Route::get('/{id}/show', [PenilaiController::class, 'show'])->name('show'); Route::get('/{id}/show', [PenilaiController::class, 'show'])->name('show');
Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables'); Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables');
});
Route::get('lampiran/{id}', [PenilaiController::class, 'lampiran'])->name('lampiran');
});
Route::get('persetujuan-penawaran/datatables', [PersetujuanPenawaranController::class, 'dataForDatatables']) Route::get('persetujuan-penawaran/datatables', [PersetujuanPenawaranController::class, 'dataForDatatables'])
->name('persetujuan-penawaran.datatables'); ->name('persetujuan-penawaran.datatables');