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

View File

@@ -9,6 +9,7 @@ use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Exports\PermohonanExport;
use Maatwebsite\Excel\Facades\Excel;
@@ -65,10 +66,33 @@ class ActivityController extends Controller
})
->get();
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()
{

View File

@@ -4,6 +4,7 @@ namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Inspeksi;
use App\Http\Controllers\Controller;
class PenilaiController extends Controller
@@ -21,6 +22,22 @@ class PenilaiController extends Controller
/**
* 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()
{
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') {
$status = 'registered';
$status = $permohonan->status;
} else {
$status = 'assign';
}

View File

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

View File

@@ -104,12 +104,11 @@ use Illuminate\Support\Facades\Auth;
}
// data dokumen_spk
if($obj->dokumen)
// data spk_dokumen_path
if($obj->penawaran->spk_dokumen_path)
{
$spkpenawaran_path = Storage::url($obj->dokumen);
// dd($spkpenawaran_path);
$data[$i]->dokumen = $spkpenawaran_path;
$spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path);
$data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path;
}
$i++;
@@ -148,9 +147,13 @@ use Illuminate\Support\Facades\Auth;
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')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->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',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
'jenis_laporan.name as jenis_laporan_name',
'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name',
'jenis_laporan.code as jenis_laporan_code',
'penilaian.waktu_penilaian as penilaian_waktu_penilain'
)->first();
$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',
'dokumen_jaminan.address as dokumen_jaminan_address');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian','dokumenjaminan'])->first();
if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
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
{
// init
$data1 = array();
$dataPermohonan = array();
$data1 = [];
// $dataPermohonan = array();
$dataPenawaran = [];
// data
$penawaran = PenawaranTender::leftJoin('detail_penawaran', 'detail_penawaran.penawaran_id','=','penawaran.id')
->leftJoin('jenis_laporan', 'jenis_laporan.id','=','penawaran.jenis_laporan_id')
->leftJoin('kjpp', 'kjpp.id','=','detail_penawaran.kjpp_rekanan_id')
->leftJoin('penilaian', 'penilaian.nomor_registrasi','=','penawaran.nomor_registrasi')
->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id)
->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',
'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name'
'jenis_laporan.name as jenis_laporan_name',
'jenis_laporan.code as jenis_laporan_code',
'penilaian.waktu_penilaian as penilaian_waktu_penilain'
)->first();
$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')
->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)
$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;
// update table permohonan
$dataPermohonan=['dokumen' => $newFileNameWithPath];
$data->update($dataPermohonan);
// $dataPermohonan=['dokumen' => $newFileNameWithPath];
// $data->update($dataPermohonan);
// update table permohonan
// update table penawaran
$dataPenawaran['spk_dokumen_path'] = $newFileNameWithPath;
// $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
$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();
Storage::put('public/'.$newFileNameWithPath,$content);
@@ -260,8 +389,10 @@ use Illuminate\Support\Facades\Auth;
}
public function download($id) {
$document = Permohonan::find($id);
// dokumen pdf diambil dari penawaran.spk_dokumen_path
$permohonan = Permohonan::find($id);
$document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first();
return response()->download(storage_path('app/public/' .$document->dokumen));
return response()->download(storage_path('app/public/' .$document->spk_dokumen_path));
}
}

View File

@@ -39,12 +39,23 @@ use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Lantai;
use Modules\Lpj\Models\Inspeksi;
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\ModelAlatBerat;
use Modules\Lpj\Models\JenisPesawat;
use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\DetailDokumenJaminan;
use Modules\Lpj\Models\JenisKapal;
use Modules\Lpj\Models\JenisKendaraan;
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\GolonganMasySekitar;
use Modules\Lpj\Models\TingkatKeramaian;
@@ -105,8 +116,6 @@ class SurveyorController extends Controller
$modelAlatBerat = ModelAlatBerat::all();
$denah = Denah::where('permohonan_id', $id)->get();
$fotojaminan = FotoJaminan::where('permohonan_id', $id)->get();
$analisa = Analisa::with('analisaUnit', 'analisaTanahBangunan', 'analisaLingkungan', 'analisaFakta', 'jenisJaminan')
@@ -170,6 +179,8 @@ class SurveyorController extends Controller
{
$data = $request->validated();
if (!$data) {
return response()->json(['success' => false, 'message' => 'Invalid data'], 400);
}
@@ -181,20 +192,21 @@ class SurveyorController extends Controller
$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->update(['data_form' => json_encode($rules)]);
} else {
if (!$inspeksi) {
Inspeksi::create([
'permohonan_id' => $request->permohonan_id,
'permohonan_id' => $request->input('permohonan_id'),
'data_form' => json_encode($rules),
'name' => $request->type,
'name' => $request->input('type'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
]);
} else {
$inspeksi->update(['data_form' => json_encode($rules)]);
}
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) {
DB::rollBack();
return response()->json(['success' => false, 'message' => 'Failed to save data: ' . $e->getMessage()], 500);
@@ -522,6 +534,43 @@ class SurveyorController extends Controller
->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.
*/
@@ -566,11 +615,14 @@ class SurveyorController extends Controller
$jenisKapal = JenisKapal::all();
$jenisPesawat = JenisPesawat::all();
$modelAlatBerat = ModelAlatBerat::all();
// return response()->json([
// 'per'=>
// $permohonan]);
$hubCadeb = HubunganPemilikJaminan::all();
$hubPenghuni = HubunganPenghuniJaminan::all();
$jenisJaminan = JenisJaminan::all();
$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();
@@ -606,7 +658,15 @@ class SurveyorController extends Controller
'jenisKendaraan',
'jenisKapal',
'jenisPesawat',
'modelAlatBerat'
'modelAlatBerat',
'hubCadeb',
'jenisJaminan',
'fasilitasObjek',
'merupakanDaerah',
'terletakDiArea',
'posisiUnit',
'bentukUnit',
'hubPenghuni'
));
}
@@ -681,6 +741,7 @@ class SurveyorController extends Controller
$branches = Branch::all();
$provinces = Province::all();
$data = $this->getCommonData();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$forminspeksi = null;
@@ -690,7 +751,7 @@ class SurveyorController extends Controller
}
// 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],
'jenis-kapal' => ['Jenis Kapal', 'jenis-kapal', JenisKapal::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')
->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,
'Jenis kapal' => JenisKapal::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,
'jenis-kapal' => JenisKapal::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(),
'jenisKapal' => JenisKapal::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'],
'jenis-kapal' => ['Jenis kapal', 'jenis-kapal'],
'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)
{
return [
'asset' =>[
'debitur_perwakilan' => $data['debitur_perwakilan'] ?? [],
'jenis_asset' => $data['jenis_asset'] ?? null,
'jenis_asset_tidak_sesuai' => $data['jenis_asset_tidak_sesuai'] ?? null,
@@ -1142,13 +1319,15 @@ class SurveyorController extends Controller
'provinsi' => $data['provinsi'] ?? null,
'kordinat_lng' => $data['kordinat_lng'] ?? null,
'kordinat_lat' => $data['kordinat_lat'] ?? null,
];
]];
}
private function getTanahData($data, $request): array
{
return [
'tanah' => [
'luas_tanah' => $data['luas_tanah'] ?? null,
'luas_tanah_tidak_sesuai' => $data['luas_tanah_tidak_sesuai'] ?? null,
'hadap_mata_angin' => $data['hadap_mata_angin'] ?? null,
@@ -1166,38 +1345,52 @@ class SurveyorController extends Controller
'lockland' => $data['lockland'] ?? null,
'kondisi_fisik_tanah' => $data['kondisi_fisik_tanah'] ?? [],
'kondisi_fisik_tanah_lainnya' => $data['kondisi_fisik_tanah_lainnya'] ?? null,
],
];
}
private function getBangunanData($data, $request): array
{
// $kategori_bangunan = [];
// if ($request->has('spek_kategori_bagunan')) {
// foreach ($request->input('spek_kategori_bagunan', []) as $value) {
// $kategori_bangunan[] = [
// 'value' => [
// 'data' => $data['spek_bangunan'] ?? [],
// ],
$data = $request->all();
$result = [];
// foreach ($data['nama_bagunan'] as $index => $bangunan) {
// $bangunanData = [
// '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 [
'bangunan' => [
'luas_tanah_bagunan' => $data['luas_tanah_bagunan'] ?? null,
'jenis_bangunan' => $data['jenis_bangunan'] ?? null,
'kondisi_bangunan' => $data['kondisi_bangunan'] ?? null,
'sifat_bangunan' => $data['sifat_bangunan'] ?? null,
'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null,
'spek_kategori_bagunan' => $data['spek_kategori_bagunan'] ?? null,
'spek_bangunan' => $data['spek_bangunan'] ?? [],
'spesifikasi_bangunan' => $result ?? null,
// 'spek_bangunan' => $data['spek_bangunan'] ?? [],
'sarana_pelengkap' => $data['sarana_pelengkap'] ?? [],
'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null,
],
];
}
private function getLingkunganData($data, $request): array
{
return [
'lingkungan' => [
'jarak_jalan_utama' => $data['jarak_jalan_utama'] ?? null,
'jalan_linkungan' => $data['jalan_linkungan'] ?? null,
'jarak_cbd_point' => $data['jarak_cbd_point'] ?? null,
@@ -1219,12 +1412,14 @@ class SurveyorController extends Controller
'nama_tps' => $data['nama_tps'] ?? null,
'merupakan_daerah' => $data['merupakan_daerah'] ?? null,
'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null,
]
];
}
private function getFactData($data, $request): array
{
$factData = [
'fakta' => [
'fakta_positif' => $data['fakta_positif'] ?? null,
'fakta_negatif' => $data['fakta_negatif'] ?? null,
'rute_menuju' => $data['rute_menuju'] ?? null,
@@ -1242,16 +1437,36 @@ class SurveyorController extends Controller
'gss' => $data['gss'] ?? null,
'pelebaran_jalan' => $data['pelebaran_jalan'] ?? null,
'nama_petugas' => $data['nama_petugas'] ?? null,
'lat' => $data['lat'] ?? null,
'lng' => $data['lng'] ?? 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;
}
@@ -1262,6 +1477,7 @@ class SurveyorController extends Controller
if ($file->isValid()) {
$fileName = time() . '_' . $file->getClientOriginalName();
$path = $file->storeAs("public/surveyor/{$request->type}", $fileName);
if ($path === false) {
throw new Exception("Failed to store file for {$fileKey}");
}
@@ -1291,6 +1507,7 @@ class SurveyorController extends Controller
private function getKapalData($data, $request): array
{
return [
'action' => $data['action'] ?? null,
'nama_wakil_debitur' => $data['nama_wakil_debitur'] ?? null,
'hub_calon_debitur' => $data['hub_calon_debitur'] ?? null,
@@ -1324,6 +1541,7 @@ class SurveyorController extends Controller
'depth' => $data['depth'] ?? null,
'draft' => $data['draft'] ?? null,
'lambung_kapal' => $data['lambung_kapal'] ?? null,
'dek' => $data['dek'] ?? null,
'struktur_rangka' => $data['struktur_rangka'] ?? null,
@@ -1377,6 +1595,7 @@ class SurveyorController extends Controller
'analisa_makro' => $data['analisa_makro'] ?? null,
'kesimpulan' => $data['kesimpulan'] ?? null,
'catatan' => $data['catatan'] ?? null,
];
}
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',
'sifat_bangunan' => 'required|array',
'sifat_bangunan_input' => 'nullable|array',
'nama_bagunan' => 'required|array',
'spek_kategori_bangunan' => 'required|array',
'spek_kategori_bangunan.*' => 'required|string',
'nama_bagunan' => 'required',
'spek_kategori_bangunan.*' => 'required',
'spek_bangunan.*' => 'required',
'sarana_pelengkap' => 'required',
'sarana_pelengkap_input' => 'nullable|array',
];

View File

@@ -3,7 +3,6 @@
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class SurveyorRequest extends FormRequest
@@ -32,6 +31,12 @@ class SurveyorRequest extends FormRequest
'model-alat-berat' => 'model_alat_berat',
'jenis-kapal' => 'jenis_kapal',
'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',
'jenis_penilaian_id',
'region_id',
'sla'
];
protected static function boot()
@@ -153,4 +154,9 @@
{
return $this->hasMany(PermohonanHistory::class, 'permohonan_id', 'id')->orderBy('created_at', 'desc');
}
public function dokumenjaminan()
{
return $this->hasMany(DokumenJaminan::class);
}
}

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"
]
},
{
"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",
"path": "basicdata.lalu-lintas-lokasi",
@@ -806,6 +849,14 @@
"administrator",
"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]">Approve</th>
<th class="min-w-[50px] text-center">Keterangan</th>
<th class="min-w-[50px] text-center">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="12" class="text-center">No data available</td>
</tr>
</tbody>
</table>
</div>
@@ -151,6 +150,13 @@
@endsection
@push('scripts')
<script>
function jadwal(id) {
document.getElementById('ids').value = id;
}
</script>
<script type="module">
document.addEventListener('DOMContentLoaded', () => {
const accordions = document.querySelectorAll('[data-accordion-item]');
@@ -224,10 +230,17 @@
title: 'Approve',
render: (item, data) => `${data.approve || ''}`,
},
actions: {
keterangan: {
title: '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) {
const date = new Date(isoDateString);
const day = String(date.getDate()).padStart(2, '0');
@@ -254,3 +263,46 @@
}
</script>
@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

@@ -105,7 +105,8 @@
</label>
<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>
</div>
@@ -114,7 +115,8 @@
</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">{{ $penilai->userPenilaiTeam->name }}
</p>
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $permohonan->region->name }}
@@ -170,33 +172,33 @@
<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="">
<a class="btn btn-primary" href="{{ route('penilai.lampiran', $permohonan->id) }}">
LAMPIRAN FOTO DAN DOKUMEN
</a>
<a class="btn btn-primary" href="">
<a class="btn btn-primary" data-modal-toggle="#modal_2">
KERTAS KERJA
</a>
<a class="btn btn-primary" href="">
<a class="btn btn-primary" href="#">
PAPARAN
</a>
<a class="btn btn-primary" href="">
<a class="btn btn-primary" href="#">
WORKSHEET
</a>
</div>
<div class="flex justify-end gap-5">
<a class="btn btn-success" href="">
<a class="btn btn-success" href="#">
SAVE
</a>
<a class="btn btn-success" href="">
<a class="btn btn-success" href="#">
REPORT
</a>
<a class="btn btn-success" href="">
<a class="btn btn-success" href="#">
PRINT OUT
</a>
</div>
@@ -205,6 +207,38 @@
</div>
@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>
@endsection

View File

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

View File

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

View File

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

View File

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

View File

@@ -52,8 +52,7 @@
<center>
<h2 style="text-decoration: underline;">SURAT PERINTAH KERJA</h2>
<p>
No. XXX / PJ / JKT / <?php echo date('M'); ?>
/ FR / <?php echo date('Y'); ?>
No. {{ $penawaran->spk_no }}
<data id="date"></data>
</p>
<p>Tanggal: <?php echo date('d F Y'); ?></p>
@@ -66,88 +65,105 @@
<h3>Perihal: <b>Penunjukan sebagai Penyedia Jasa Penilaian Agunan</b></h3>
<br/>
<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>
<br/>
<h3>Rincian Penilaian</h3>
<table border="2" width="100%">
<tr>
<td></td>
</tr>
<tr>
<td>Tujuan Penilaian</td>
<td width="25%">Tujuan Penilaian</td>
<td>:</td>
<td>
<td width="75%">
<span style="color: red;">{{ $data->tujuanPenilaian->name }}</span>
</td>
</tr>
<tr>
<td>Jenis Laporan</td>
<td width="20%">Jenis Laporan</td>
<td>:</td>
<td>
<span style="color: red;">{{ $penawaran->jenis_laporan_name }}</span>
</td>
</tr>
<tr>
<td>Data Jaminan</td>
@php $i=1; @endphp
@foreach ($data->debiture->documents as $dokumen)
<tr valign="top">
<td width="25%">Lokasi Jaminan {{ $i }}</td>
<td>:</td>
<td>
<span style="color: red;">{{ $data->jenis_jaminan_name }}, {{ $data->dokumen_jaminan_address }}</span>
<td width="75%">
<span style="color: red;">{{ formatAlamat($dokumen) }}</span>
</td>
</tr>
<tr valign="top">
<td>Dokumen Jaminan {{ $i }}</td>
<td>:</td>
<td>
<span style="color: red;">
@foreach ($data->dokumenjaminan as $dokumen_jaminans)
@if ($dokumen->id== $dokumen_jaminans->id)
@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>
<td>Fee / Harga Penilaian</td>
<td>:</td>
<td>
<span style="color: red;">{{ formatRupiah($penawaran->detail_penawaran_biaya_penawaran) }}</span>
<span style="color: red;">{{ formatRupiah($penawaran->detail_penawaran_biaya_penawaran) }}</span> (include ppn 11%)
</td>
</tr>
<tr>
<td>Jangka Waktu</td>
<td>:</td>
<td><span style="color: red;"> {{ formatTanggalIndonesia($penawaran->start_date) }} - {{ formatTanggalIndonesia($penawaran->end_date) }}</span></td>
<td><span style="color: red;"> {{ $jangka_waktu }}</span></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;">i</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>
</tr>
<tr>
<td colspan="2" style="text-align: center;">ii</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>
</tr>
</table>
<br/>
<h3>Dengan ketentuan dalam melaksanakan pekerjaan sebagai berikut:</h3>
<table border="0" width="100%">
<tr>
<tr valign="top">
<td>1.</td>
<td>
Pembayaran sebesar 100% dari total jasa dibayarkan setelah Bank menerima buku laporan dan bukti penagihan asli (invoice / kwitansi dan faktur pajak).
</td>
</tr>
<tr>
<tr valign="top">
<td>2.</td>
<td>
Segala bentuk aktivitas komunikasi lisan atau tertulis antara lain kelengkapan dokumen, imbalan jasa, laporan penilaian dan lainnya baik dari Nasabah atau KJPP harus melalui Bank.
</td>
</tr>
<tr>
<tr valign="top">
<td>3.</td>
<td>
Selanjutnya sebagai tanda persetujuan, setelah saudara tandatangani di atas materai Rp 10.000,- (materai sesuai ketentuan yang berlaku) agar dikembalikan kepada kami selambat-lambatnya 1 (satu) hari kerja setelah tanggal surat ini.
</td>
</tr>
<tr>
<tr valign="top">
<td>4.</td>
<td>
Apabila diperlukan surat representasi wajib diberikan bersamaan dengan dikembalikannya SPK kepada kami.
</td>
</tr>
<tr>
<tr valign="top">
<td>5.</td>
<td>
Ketentuan lain mengacu pada perjanjian kerjasama yang telah disepakati.

View File

@@ -43,7 +43,8 @@
<h3>Perihal: <b>Penunjukan sebagai Penyedia Jasa Penilaian Agunan</b></h3>
<br/>
<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>
<br/>
<h3>Rincian Penilaian</h3>
@@ -87,13 +88,15 @@
<tr>
<td colspan="2" style="text-align: center;">i</td>
<td>
Resume akan disampaikan dalam <span style="color: red;">[SLA Resume - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja terhitung setelah proses inspeksi dilaksanakan serta data yang diperlukan diterima dan lengkap, kecuali terdapat kesepakatan lain antara kedua belah pihak.
Resume akan disampaikan dalam <span style="color: red;">
[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>
</tr>
<tr>
<td colspan="2" style="text-align: center;">ii</td>
<td>
Laporan penilaian lengkap akan disampaikan dalam <span style="color: red;">[SLA Final - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja sesuai proposal penawaran.
Laporan penilaian lengkap akan disampaikan dalam <span style="color: red;">
[SLA Final - Data Pemeriksaan Persetujuan Penawaran]</span> hari kerja sesuai proposal penawaran.
</td>
</tr>
</table>

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,3 @@
@include('lpj::surveyor.components.header')
<div class="card w-full bg-white rounded-lg shadow-md overflow-hidden">
@@ -17,40 +15,25 @@
<div class="flex flex-wrap items-baseline w-full">
<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">
<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' : '' }}>
<span class="ml-2">Sesuai</span>
</label>
<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' : '' }}>
<span class="ml-2">Tidak Sesuai</span>
</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>
</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>
@@ -63,7 +46,8 @@
@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' : '' }} />
value="{{ $item->name }}"
{{ in_array($item->name, old('kondisi_unit', $forminspeksi['kondisi_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach
@@ -80,11 +64,12 @@
<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($ketinggianTanah))
@foreach ($ketinggianTanah as $item)
@if (isset($posisiUnit))
@foreach ($posisiUnit as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="posisi_unit[]" type="checkbox"
value="{{ $item->name }}" {{ in_array($item->name, old('posisi_unit', $forminspeksi['posisi_unit'] ?? [])) ? 'checked' : '' }} />
value="{{ $item->name }}"
{{ in_array($item->name, old('posisi_unit', $forminspeksi['posisi_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach
@@ -95,29 +80,30 @@
</div>
</div>
<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-wrap items-stretch">
<div class="flex flex-col items-start gap-2">
<div class="flex flex-col items-start gap-4">
@if (isset($lantai))
@foreach ($lantai as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="lantai[]" type="checkbox"
value="{{ $item->name }}" {{ in_array($item->name, old('lantai', $forminspeksi['lantai'] ?? [])) ? 'checked' : '' }} />
value="{{ $item->name }}"
{{ in_array($item->name, old('lantai', $forminspeksi['lantai'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
<input type="text" name="lantai_input[]" class="input w-full"
id="lantaiInput" placeholder="Masukkan {{ $item->name }}..."
value="{{ old('lantai_input.' . $loop->index, $forminspeksi['lantai_input'][$loop->index] ?? '') }}">
</div>
@endforeach
@endif
</div>
<em id="error-lantai" class="alert text-danger text-sm"></em>
</div>
</div>
</div>
<!-- Kondisi Fisik Tanah -->
@@ -130,7 +116,8 @@
@foreach ($viewUnit as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="view[]" type="checkbox"
value="{{ $item->name }}" {{ in_array($item->name, old('view', $forminspeksi['view'] ?? [])) ? 'checked' : '' }} />
value="{{ $item->name }}"
{{ in_array($item->name, old('view', $forminspeksi['view'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach
@@ -146,11 +133,12 @@
<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($bentukTanah))
@foreach ($bentukTanah as $item)
@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' : '' }} />
value="{{ $item->name }}"
{{ in_array($item->name, old('bentuk_unit', $forminspeksi['bentuk_unit'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@endforeach

View File

@@ -5,23 +5,49 @@
</div>
<div class="grid gap-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="grid grid-cols-2 md:grid-cols-3 gap-4 mt-2">
<label class="form-label flex items-center gap-3 text-nowrap">
<input type="radio" class="radio" name="luas_tanah_bagunan" value="sesuai"
{{ old('luas_tanah_bagunan', $forminspeksi['luas_tanah_bagunan'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<input type="radio"
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>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="luas_tanah_bagunan" value="tidak sesuai"
{{ old('luas_tanah_bagunan', $forminspeksi['luas_tanah_bagunan'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<input type="radio" class="radio" name="luas_tanah_bagunan"
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>
</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>
<em id="error-luas_tanah_bagunan" class="alert text-danger text-sm"></em>
</div>
</div>
</div>
<!-- Jenis Bangunan -->
@@ -34,7 +60,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="jenis_bangunan[]" type="checkbox"
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 }}
</label>
@if (strcasecmp($item->name, 'lainnya') == 0)
@@ -67,7 +93,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_bangunan[]" type="checkbox"
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 }}
</label>
@if (strcasecmp($item->name, 'lainnya') == 0)
@@ -75,12 +101,12 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_bangunan[]" type="checkbox"
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 }}
</label>
<input type="text" name="kondisi_bangunan_lainnya" class="input mt-2"
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>
@endif
@endforeach
@@ -101,12 +127,12 @@
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="sifat_bangunan[]" type="checkbox"
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 }}
</label>
<input type="text" name="sifat_bangunan_input[]" class="input w-full"
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>
@endforeach
@endif
@@ -120,13 +146,14 @@
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<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="spek-bangunan w-full gap-4">
<div class="spek-bangunan w-full gap-4 mt-5">
<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">
@if (@isset($spekKategoriBagunan))
@foreach ($spekKategoriBagunan as $item)
<div>
<input type="hidden" name="spek_kategori_bangunan[]"
<input type="hidden" name="spek_kategori_bangunan.[]"
value="{{ $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)
<label class="form-label flex items-center gap-2.5">
<input class="checkbox"
name="spek_bangunan_{{ $item->name }}[]"
name="spek_bangunan[{{ $item->name }}][]"
type="checkbox" value="{{ $spek->name }}" />
{{ $spek->name }}
</label>
@@ -150,14 +177,14 @@
@endforeach
@endif
</div>
<button type="button"
class="mt-2 btn btn-danger btn-outline btn-xs remove-btn" style="display: none;">Hapus</button>
<button type="button" class="mt-2 btn btn-danger btn-outline btn-xs delete-button"
style="display: none;">Hapus</button>
</div>
</div>
</div>
<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
<i class="ki-filled ki-plus"></i>
</button>
@@ -176,12 +203,12 @@
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="sarana_pelengkap[]" type="checkbox"
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 }}
</label>
<input type="text" name="sarana_pelengkap_input[]" class="input w-full"
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>
@endforeach
@endif
@@ -192,13 +219,15 @@
</div>
</div>
</div>
@push('scripts')
<script>
const spekBangunanContainer = document.getElementById('spek-bangunan-container');
function updateDeleteButtonsVisibility() {
const allDeleteButtons = spekBangunanContainer.querySelectorAll('.delete-button');
// Only show the delete buttons if there are more than one form
allDeleteButtons.forEach(button => {
if (spekBangunanContainer.querySelectorAll('.spek-bangunan').length > 1) {
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() {
const newDiv = spekBangunanContainer.querySelector('.spek-bangunan').cloneNode(true);
// Clear the selected values of the cloned input fields
newDiv.querySelectorAll('select').forEach(select => {
select.value = '';
// Update input fields
newDiv.querySelectorAll('select, input').forEach((input, index) => {
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);
// Add event listener to the delete button in the cloned div
newDiv.querySelector('.delete-button').addEventListener('click', function() {
spekBangunanContainer.removeChild(newDiv);
updateDeleteButtonsVisibility();
updateBuildingLabels();
});
// Update delete buttons visibility
// Update UI
updateDeleteButtonsVisibility();
updateBuildingLabels();
});
// Initial delete button visibility
// 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
spekBangunanContainer.querySelectorAll('.delete-button').forEach(button => {
@@ -241,6 +297,7 @@
if (spekBangunanContainer.querySelectorAll('.spek-bangunan').length > 1) {
spekBangunan.remove();
updateDeleteButtonsVisibility();
updateBuildingLabels(); // Update the labels after removing
}
});
});

View File

@@ -5,7 +5,8 @@
@endsection --}}
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
@include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5">
<div class="card min-w-full">
<div class="card min-w-full">
<div class="card-header">
@@ -13,7 +14,9 @@
Data Pembanding
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('surveyor.show', ['id' => request('pembanding')]) }}?form=data-pembanding"
<a href="{
{ route('surveyor.show', ['id' => request('pembanding')]) }}?form=data-pembanding
"
class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
@@ -25,16 +28,24 @@
<div class="grid gap-5">
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="data-table" data-api-url="">
<form id="dataPembandingForm" method="POST" enctype="multipart/form-data">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="type" value="tanah">
<input type="hidden" name="jenis_jaminan_id" value="{{ request('jenis_jaminan') }}">
<div class="card">
<div class="card-header py-5 flex-wrap flex justify-end">
<button id="addColumnBtn" class="btn btn-primary btn-sm">
<button type="button" id="addColumnBtn" class="btn btn-primary btn-sm">
<i class="ki-filled ki-plus"></i> Tambah Kolom
</button>
<button id="removeColumnBtn" class="btn btn-danger btn-sm ml-2" style="display: none;">
<button type="button" id="removeColumnBtn" class="btn btn-danger btn-sm ml-2"
style="display: none;">
<i class="ki-filled ki-minus"></i> Hapus Kolom
</button>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table id="dataTable"
class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
@@ -63,9 +74,7 @@
<td>
@php
$formFoto = json_decode($forminspeksi['foto_form'], true);
$formIns = json_decode($forminspeksi['data_form'], true);
@endphp
@if (isset($formFoto['object_jaminan']) &&
@@ -76,49 +85,101 @@
style="width: 10rem; height: 10rem;" id="uploadedImage1">
@else
<img src="#" class="img-responsive" alt="Gambar Pendamping"
style="width: 10rem; height: 10rem; display: none;" id="uploadedImage1">
style="width: 10rem; height: 10rem; display: none;"
id="uploadedImage1">
@endif
<input type="file" class="file-input mt-2" placeholder=""
onchange="previewImage(event, 'uploadedImage1')" />
onchange="previewImage(event, 'uploadedImage1')" name="foto_objek[]" />
</td>
<td class="text-center">
<img src="" class="img-responsive" alt="Gambar Pendamping"
style="width: 10rem; height: 10rem; display: none;" id="uploadedImage2">
<input type="file" class="file-input" placeholder=""
onchange="previewImage(event, 'uploadedImage2')" />
onchange="previewImage(event, 'uploadedImage2')"
name="foto_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Alamat</p>
<p>Desa</p>
<p>Kecamatan</p>
<p>Kabupaten</p>
<p>Provinsi</p>
</td>
<td>
<input type="text" class="input" value="{{ isset($formIns['nama_jalan']) ? $formIns['nama_jalan'] . ' ' . $formIns['desa_kelurahan'] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['kecamatan']) ? $formIns['kecamatan'] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['kota_kabupaten']) ? $formIns['kota_kabupaten'] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['provinsi']) ? $formIns['provinsi'] : ""}}" />
<input type="text" class="input"
value="{{ isset($formIns['asset']['nama_jalan']) ? $formIns['asset']['nama_jalan'] . ' ' . $formIns['desa_kelurahan'] : '' }}"
name="alamat" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="alamat_pembanding[]" />
</td>
</tr>
<tr>
<td>Desa</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['asset']['kecamatan']) ? $formIns['asset']['desa'] : '' }}"
name="desa" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="desa_pembanding[]" />
</td>
</tr>
<tr>
<td>Kecamatan</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['asset']['kecamatan']) ? $formIns['asset']['kecamatan'] : '' }}"
name="kecamatan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="kecamatan_pembanding[]" />
</td>
</tr>
<tr>
<td>Kabupaten</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['asset']['kota_kabupaten']) ? $formIns['asset']['kota_kabupaten'] : '' }}"
name="kabupaten" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="kabupaten_pembanding[]" />
</td>
</tr>
<tr>
<td>Provinsi</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['asset']['provinsi']) ? $formIns['asset']['provinsi'] : '' }}"
name="provinsi" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="provinsi_pembanding[]" />
</td>
</tr>
<tr>
<td>
Tahun Penilaian
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="tahun" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="tahun_pembanding[]" />
</td>
</tr>
<tr>
@@ -126,10 +187,12 @@
Luas Tanah
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="luas_tanah" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="luas_tanah_pembanding[]" />
</td>
</tr>
<tr>
@@ -137,10 +200,12 @@
Luas Bangunan
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="luas_bangunan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="luas_bangunan_pembanding[]" />
</td>
</tr>
<tr>
@@ -148,10 +213,12 @@
Tahun Bangunan
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="tahun_bangunan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="tahun_bangunan_pembanding[]" />
</td>
</tr>
@@ -160,10 +227,12 @@
Estimasi Tahun Visual
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="estimasi_tahun_visual" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="estimasi_tahun_visual_pembanding[]" />
</td>
</tr>
@@ -172,10 +241,12 @@
Kepemilikan
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="kepemilikan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="kepemilikan_pembanding[]" />
</td>
</tr>
@@ -184,10 +255,12 @@
Harga
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="harga" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="harga_pembanding[]" />
</td>
</tr>
<tr>
@@ -195,10 +268,12 @@
Tinggi Lantai
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="tinggi_lantai" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="tinggi_lantai_pembanding[]" />
</td>
</tr>
@@ -207,10 +282,12 @@
Lebar Depan
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="lebar_depan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="lebar_depan_pembanding[]" />
</td>
</tr>
@@ -219,10 +296,12 @@
Lebar Jalan
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="lebar_jalan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="lebar_jalan_pembanding[]" />
</td>
</tr>
<tr>
@@ -230,10 +309,12 @@
Sumber
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="sumber" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="sumber_pembanding[]" />
</td>
</tr>
<tr>
@@ -241,27 +322,57 @@
Nomor tlp
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="nomor_tlp" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="nomor_tlp_pembanding[]" />
</td>
</tr>
<tr>
<td>
<td colspan="3">
Titik Lokasi
</td>
</tr>
<tr>
<td>
<div class="flex items-center">
<input type="text" class="input" placeholder="Objek Penilaian" value="{{ isset($formIns['kordinat_lat']) ? $formIns['kordinat_lat'] : ""}}" />
<input type="text" class="input" placeholder="Objek Penilaian" value="{{ isset($formIns['kordinat_lng']) ? $formIns['kordinat_lng'] : ""}}" />
</div>
Koordinat Lat
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['asset']['kordinat_lat']) ? $formIns['asset']['kordinat_lat'] : '' }}"
name="kordinat_lat" />
</td>
<td class="text-center">
<div class="flex items-center">
<input type="text" class="input" placeholder="Data pembanding" />
<input type="text" class="input" placeholder="Data pembanding" />
</div>
<input type="text" class="input" placeholder="Data pembanding"
name="kordinat_lat_pembanding[]" />
</td>
</tr>
<tr>
<td>
Koordinat Lng
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['asset']['kordinat_lng']) ? $formIns['asset']['kordinat_lng'] : '' }}"
name="kordinat_lng" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data pembanding"
name="kordinat_lng_pembanding[]" />
</td>
</tr>
<tr>
@@ -269,10 +380,12 @@
Link Internet
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="link_internet" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="link_internet_pembanding[]" />
</td>
</tr>
<tr>
@@ -282,29 +395,72 @@
<tr>
<td>
<p>Jarak Ke jalan utama</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['lingkungan']['jarak_jalan_utama']) ? $formIns['lingkungan']['jarak_jalan_utama'] : '' }}"
name="jarak_jalan_utama" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="jarak_jalan_utama_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Lebar jalan depan aset (m)</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['lingkungan']['jarak_cbd_point']) ? $formIns['lingkungan']['jarak_cbd_point'] : '' }}"
name="jarak_cbd_point" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="jarak_cbd_point_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Posisi kavling</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['tanah']['posisi_kavling']) ? $formIns['tanah']['posisi_kavling'][0] : '' }}"
name="posisi_kavling" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="posisi_kavling_pembanding[]" />
{{-- <in/put type="text" class="input" placeholder="Data Pembanding 1" /> --}}
</td>
</tr>
<tr>
<td>
<p>Tingkat Keramaian (Occupancy)</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['jarak_jalan_utama']) ? $formIns['jarak_jalan_utama'] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['jarak_cbd_point']) ? $formIns['jarak_cbd_point'] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['posisi_kavling']) ? $formIns['posisi_kavling'][0] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['tingkat_keramaian']) ? $formIns['tingkat_keramaian'][0] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['tanah']['tingkat_keramaian']) ? $formIns['tanah']['tingkat_keramaian'][0] : '' }}"
name="tingkat_keramaian" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="tingkat_keramaian_pembanding[]" />
</td>
</tr>
<tr>
@@ -313,63 +469,230 @@
<tr>
<td>
<p>Kondisi Fisik Tanah</p>
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['tanah']['kondisi_fisik_tanah']) ? $formIns['tanah']['kondisi_fisik_tanah'][0] : '' }}"
name="kondisi_fisik_tanah" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="kondisi_fisik_tanah_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Beda Ketinggian dengan Jalan</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['tanah']['ketinggian_jalan']) ? $formIns['tanah']['ketinggian_jalan'][0] : '' }}"
name="ketinggian_jalan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="ketinggian_jalan_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Bentuk Tanah</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['tanah']['bentuk_tanah']) ? $formIns['tanah']['bentuk_tanah'][0] : '' }}"
name="bentuk_tanah" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="bentuk_tanah_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Lebar Depan</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
value="{{ isset($formIns['tanah']['bentuk_tanah']) ? $formIns['tanah']['bentuk_tanah'][0] : '' }}"
name="lebar_depan" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="lebar_depan_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Fasos Fasum</p>
</td>
<td>
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
name="fasos_fasum" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1"
name="fasos_fasum_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Lain-lain</p>
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" value="{{ isset($formIns['kondisi_fisik_tanah']) ? $formIns['kondisi_fisik_tanah'][0] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['ketinggian_jalan']) ? $formIns['ketinggian_jalan'][0] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['bentuk_tanah']) ? $formIns['bentuk_tanah'][0] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" value="{{ isset($formIns['bentuk_tanah']) ? $formIns['bentuk_tanah'][0] : ""}}" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
name="lain_lain" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="lain_lain_pembanding[]" />
</td>
</tr>
<tr>
<td>
Karakteristik Ekonomi
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
name="karakteristik_ekonomi" />
</td>
<td class="text-center">
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="karakteristik_ekonomi_pembanding[]" />
</td>
</tr>
<tr>
<td colspan="3">Pengunaan</td>
</tr>
<tr>
<td>
Zonasi/Tata Kota
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
name="zonasi_tata_kota" />
</td>
<td>
<input type="text" class="input" placeholder="Data Pembanding 1"
name="zonasi_tata_kota_pembanding[]" />
</td>
</tr>
<tr>
<td>
<p>Pengunaan</p>
<p>Zonasi/Tata Kota</p>
<p> KDB, KLB, KTB, KDH & Peraturan Lainnya</p>
KDB
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['fakta']['kdb']) ? $formIns['fakta']['kdb'] : '' }}"
name="kdb" />
</td>
<td>
<input type="text" class="input" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
<input type="text" class="input mt-2" placeholder="Objek Penilaian" />
<input type="text" class="input" placeholder="Data Pembanding 1"
name="kdb_pembanding[]" />
</td>
</tr>
<tr>
<td>
KLB
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['fakta']['klb']) ? $formIns['fakta']['klb'] : '' }}"
name="klb" />
</td>
<td>
<input type="text" class="input" placeholder="Data Pembanding 1"
name="klb_pembanding[]" />
</td>
</tr>
<tr>
<td>
KTB
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['fakta']['ktb']) ? $formIns['fakta']['ktb'] : '' }}"
name="ktb" />
</td>
<td>
<input type="text" class="input" placeholder="Data Pembanding 1"
name="ktb_pembanding[]" />
</td>
</tr>
<tr>
<td>
KDH
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
value="{{ isset($formIns['fakta']['kdh']) ? $formIns['fakta']['kdh'] : '' }}"
name="kdh" />
</td>
<td>
<input type="text" class="input" placeholder="Data Pembanding 1"
name="kdh_pembanding[]" />
</td>
</tr>
<tr>
<td>
Peraturan
</td>
<td>
<input type="text" class="input" placeholder="Objek Penilaian"
name="peraturan" />
</td>
<td>
<input type="text" class="input" placeholder="Data Pembanding 1"
name="peraturan_pembanding[]" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="flex justify-end gap-2" style="margin-right: 20px; margin-top: 20px">
<button type="button" class="btn btn-success" id="saveButton" onclick="submitDataPembanding()">
<span id="saveButtonText">Save</span>
<div class="spinner-border spinner-border-sm text-light" role="status"
style="display: none;" id="saveButtonSpinner">
<span class="visually-hidden">Loading...</span>
</div>
</button>
</div>
</form>
</div>
</div>
<script>
@@ -379,21 +702,39 @@
columnCount++;
// Create new header cell
const headerRow = document.querySelector('#dataTable thead tr');
const newHeader = document.createElement('th');
newHeader.className = 'min-w-[350px] text-center';
newHeader.style.minWidth = '350px';
newHeader.textContent = `Data Pembanding ${columnCount}`;
document.querySelector('#dataTable thead tr').appendChild(newHeader);
headerRow.appendChild(newHeader);
// Show remove column button
document.getElementById('removeColumnBtn').style.display = 'inline-block';
const tableBody = document.querySelector('#dataTable tbody');
const rows = tableBody.querySelectorAll('tr');
rows.forEach((row) => {
// Check if this is a colspan row
const colspanCell = row.querySelector('td[colspan]');
if (colspanCell) {
// Update colspan value
const currentColspan = parseInt(colspanCell.getAttribute('colspan'));
colspanCell.setAttribute('colspan', currentColspan + 1);
return; // Skip adding new cell for colspan rows
}
const rows = document.querySelectorAll('#dataTable tbody tr');
rows.forEach((row, index) => {
const newCell = document.createElement('td');
newCell.className = 'text-center';
if (index === 0) {
// Check if the row contains an image upload field
const hasImageUpload = row.querySelector('.file-input');
if (hasImageUpload) {
// Create image upload structure
const imgContainer = document.createElement('div');
imgContainer.className = 'flex flex-col items-center';
const imgElement = document.createElement('img');
imgElement.src = '';
imgElement.className = 'img-responsive';
@@ -401,72 +742,87 @@
imgElement.style.width = '10rem';
imgElement.style.height = '10rem';
imgElement.style.display = 'none';
imgElement.id = `uploadedImage${columnCount}-${index + 1}`;
imgElement.id = `uploadedImage${columnCount + 1}`;
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.className = 'file-input';
fileInput.placeholder = '';
fileInput.className = 'file-input mt-2';
fileInput.name = `foto_pembanding[]`; // Add name attribute for file inputs
fileInput.onchange = function(event) {
previewImage(event, imgElement.id);
};
newCell.appendChild(imgElement);
newCell.appendChild(fileInput);
imgContainer.appendChild(imgElement);
imgContainer.appendChild(fileInput);
newCell.appendChild(imgContainer);
} else {
// Other rows get text inputs
const numInputs = row.querySelectorAll('input').length;
for (let i = 0; i < numInputs; i++) {
// Create text input for non-image cells
const textInput = document.createElement('input');
textInput.type = 'text';
textInput.className = 'input mt-2';
textInput.className = 'input';
textInput.placeholder = `Data Pembanding ${columnCount}`;
newCell.appendChild(textInput);
// Get the name from the first column's input
const firstColumnInput = row.querySelector('input[name]');
if (firstColumnInput) {
const baseFieldName = firstColumnInput.name.replace('[]', '');
if (baseFieldName.includes('_pembanding')) {
textInput.name = baseFieldName + '[]';
} else {
textInput.name = baseFieldName + '_pembanding[]';
}
}
newCell.appendChild(textInput);
}
row.appendChild(newCell);
});
// Update colspan on label row
const colspanRow = document.createElement('tr');
const colspanCell = document.createElement('td');
colspanCell.colSpan = 3 + columnCount - 1;
colspanCell.textContent = `Data Pembanding ${columnCount}`;
colspanRow.appendChild(colspanCell);
document.querySelector('#dataTable tbody').insertBefore(colspanRow, rows[0]);
});
document.getElementById('removeColumnBtn').addEventListener('click', function() {
if (columnCount > 1) { // Pastikan ada kolom yang bisa dihapus
columnCount--; // Decrement jumlah kolom
// Modified submit function to collect all data
function submitDataPembanding() {
const formElement = $('#dataPembandingForm')[0];
const formData = new FormData(formElement);
$('#saveButton').prop('disabled', true);
$('#saveButtonText').hide();
$('#saveButtonSpinner').show();
const headers = document.querySelectorAll('#dataTable thead tr th');
headers[headers.length - 1].remove();
const rows = document.querySelectorAll('#dataTable tbody tr');
rows.forEach(row => {
const cells = row.querySelectorAll('td');
cells[cells.length - 1].remove();
});
if (columnCount === 1) {
document.getElementById('removeColumnBtn').style.display = 'none';
// Log form data for debugging
for (let pair of formData.entries()) {
console.log(pair[0] + ': ' + pair[1]);
}
$.ajax({
url: '{{ route('surveyor.storeDataPembanding') }}',
type: 'POST',
data: formData,
processData: false,
contentType: false,
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
if (response.success) {
window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=form-inspeksi';
toastrSuccessBuild(response.message);
}
console.log(response);
},
error: function(xhr, status, error) {
console.error('Terjadi error:', error);
console.log('Status:', status);
console.log('Response:', xhr.responseText);
toastrErrorBuild(error);
},
complete: function() {
$('#saveButton').prop('disabled', false);
$('#saveButtonText').show();
$('#saveButtonSpinner').hide();
}
});
function previewImage(event, imgElementId) {
const file = event.target.files[0];
const imgElement = document.getElementById(imgElementId);
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
imgElement.src = e.target.result;
imgElement.style.display = 'block';
}
reader.readAsDataURL(file);
}
}
</script>
</div>

View File

@@ -5,6 +5,7 @@
@endsection --}}
@section('content')
@include('lpj::assetsku.includenya')
<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">
@@ -234,6 +235,7 @@
if (response.success) {
window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=denah';
toastrSuccessBuild(response.message);
}
console.log(response);
},
@@ -249,6 +251,8 @@
console.log('Status:', status);
console.log('Response:', xhr.responseText);
console.log(errors);
toastrErrorBuild(error);
},
complete: function() {
// 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">
<label class="form-label max-w-56">Faktor Positif</label>
<div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['fakta_positif']))
@foreach ($forminspeksi['fakta']['fakta_positif'] as $index => $positif)
<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', $forminspeksi['fakta_positif'][0] ?? '') }}</textarea>
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button">
<i class="ki-outline ki-trash"></i>
</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>
<em id="error-fakta_positif" class="alert text-danger text-sm"></em>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-positif-container', 'fakta_positif')">
<i class="ki-outline ki-plus"></i>
@@ -22,16 +32,30 @@
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Negatif</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['fakta_negatif']))
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif)
<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>
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</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="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"
onclick="addClonableItem('fakta-negatif-container', 'fakta_negatif')">
<i class="ki-outline ki-plus"></i>
@@ -43,7 +67,7 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Rute Menuju</label>
<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>
</div>
</div>
@@ -59,12 +83,12 @@
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="batas_batas[]" type="checkbox"
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 }}
</label>
<input type="text" name="batas_batas_input[]" class="input w-full"
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>
@endforeach
@endif
@@ -77,14 +101,29 @@
<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>
<div class="flex flex-wrap items-baseline w-full" id="kondisi-lingkungan-container">
@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" placeholder="Tambahkan keterangan"></textarea>
<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"
onclick="addClonableItem('kondisi-lingkungan-container', 'kondisi_lingkungan')">
<i class="ki-outline ki-plus"></i>
@@ -97,14 +136,26 @@
<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">
@if (!empty($forminspeksi['fakta']['kondisi_lain_bangunan']))
@foreach ($forminspeksi['fakta']['kondisi_lain_bangunan'] as $index => $kondisi_lain_bangunan)
<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['kondisi_lain_bangunan'][0] ?? '') }}</textarea>
<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>
<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_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"
onclick="addClonableItem('kondisi-lain-bangunan-container', 'kondisi_lain_bangunan')"
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">
<label class="form-label max-w-56">Informasi Terkait Dokumen</label>
<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.0', $forminspeksi['informasi_dokument'][0] ?? '') }}</textarea>
<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">
<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;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-informasi_dokument" class="alert text-danger text-sm"></em>
</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>
</button>
</div>
</div>
</div>
</div>
</div>

View File

@@ -5,6 +5,7 @@
@endsection --}}
@section('content')
@include('lpj::assetsku.includenya')
<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">
@@ -588,104 +589,14 @@
</div>
<!-- Modal Kamera -->
<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 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>
@include('lpj::surveyor.components.modal-kamera')
@endsection
@push('scripts')
<script>
function submitFoto() {
const formElement = $('#formFoto')[0];
const formData = new FormData(formElement);
@@ -712,6 +623,7 @@
if (response.success) {
window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=foto';
toastrSuccessBuild(response.message);
}
},
@@ -727,6 +639,7 @@
console.log('Status:', status);
console.log('Response:', xhr.responseText);
console.log(errors);
toastrErrorBuild(error);
},
complete: function() {
// Re-enable the button and hide the spinner
@@ -738,307 +651,6 @@
}
</script>
@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

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="py-4">
<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 class="perwakilan flex flex-wrap w-full items-baseline gap-2 ">
<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" />
<button type="button" class="btn btn-danger btn-outline btn-xs remove-btn"
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-body">
<div class="py-4 px-6">
<div class="py-4">
<h1 class="text-md font-medium text-gray-900">Nama Cadeb/Debitur</h1>
</div>
@@ -79,7 +79,7 @@
</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="py-4 ">
<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="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="toggleJenisAsset('jenis_asset')" type="radio" class="radio"
name="jenis_asset" value="sesuai"
{{ old('jenis_asset', $forminspeksi['jenis_asset'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<input onclick="toggleFieldVisibility('jenis_asset', 'jenis_asset', ['tidak sesuai'])"
type="radio" class="radio" name="jenis_asset" value="sesuai"
{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Ya</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input onclick="toggleJenisAsset('jenis_asset')" type="radio" class="radio"
name="jenis_asset" value="tidak sesuai"
{{ old('jenis_asset', $forminspeksi['jenis_asset'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<input onclick="toggleFieldVisibility('jenis_asset', 'jenis_asset', ['tidak sesuai'])"
type="radio" class="radio" name="jenis_asset" value="tidak sesuai"
{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak</span>
</label>
<!-- Select dropdown untuk "Tidak Sesuai" -->
<select id="jenis_asset"
class="input w-full @error('jenis_asset_tidak_sesuai') border-danger bg-danger-light @enderror"
name="jenis_asset_tidak_sesuai"
style="{{ old('jenis_asset', $forminspeksi['jenis_asset'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<div id="jenis_asset" class="flex items-baseline gap-2"
style="{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<select id="jenis_asset_tidak_sesuai" class="input w-full"
name="jenis_asset_tidak_sesuai">
<option value="">Select Jenis asset</option>
@if (isset($arahMataAngin))
@foreach ($arahMataAngin as $item)
<option value="{{ $item->name }}"
{{ old('jenis_asset_tidak_sesuai', $forminspeksi['jenis_asset_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
@if (isset($jenisJaminan))
@foreach ($jenisJaminan as $item)
<option value="{{ $item->id }}"
{{ old('jenis_asset_tidak_sesuai', $forminspeksi['asset']['jenis_asset_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endforeach
@endif
</select>
<button type="button" class="btn btn-md btn-primary"
onclick="updateAnalisa('jenis_asset')">Save</button>
</div>
</div>
<em id="error-jenis_asset" class="alert text-danger text-sm"></em>
</div>
@@ -134,7 +139,6 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat</label>
<div>
@foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen) }}
@@ -142,103 +146,138 @@
@endforeach
<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">
<input onclick="toggleTidakSesuai('alamat_sesuai','alamat_tidak_sesuai')" type="radio"
class="radio" name="alamat_sesuai" value="sesuai"
{{ old('alamat_sesuai', $forminspeksi['alamat_sesuai'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<input
onclick="toggleAlamatVisibility('alamat_sesuai', 'alamat_tidak_sesuai', 'sesuai')"
type="radio" class="radio" name="alamat_sesuai" value="sesuai"
{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Ya</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input onclick="toggleTidakSesuai('alamat_sesuai','alamat_tidak_sesuai')" type="radio"
class="radio" name="alamat_sesuai" value="tidak sesuai"
{{ old('alamat_sesuai', $forminspeksi['alamat_sesuai'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<label class="form-label flex items-center gap-3 text-nowrap">
<input
onclick="toggleAlamatVisibility('alamat_sesuai', 'alamat_tidak_sesuai', 'tidak sesuai')"
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>
<em id="error-alamat" class="alert text-danger text-sm"></em>
</div>
<div class="grid gap-2 mt-5">
@php
$inputDataLoaksi = [];
$inputDataLoaksi = [
{{-- Alamat Sesuai --}}
<div id="alamat_sesuai" class="grid gap-2 mt-5" style="display: none;">
@foreach ($permohonan->debiture->documents as $dokumen)
@php
$fields = [
[
'label' => 'Jl.',
'index' => 0,
'value' => $dokumen->address ?? '',
'name' => 'nama_jalan',
'value' => old(
'nama_jalan',
isset($forminspeksi['nama_jalan']) ? $forminspeksi['nama_jalan'] : '',
),
],
[
'label' => 'Desa/Kelurahan',
'index' => 3,
'name' => 'desa_kelurahan',
'value' => old(
'desa_kelurahan',
isset($forminspeksi['desa_kelurahan']) ? $forminspeksi['desa_kelurahan'] : '',
),
],
[
'label' => 'Kecamatan',
'index' => 4,
'name' => 'kecamatan',
'value' => old(
'kecamatan',
isset($forminspeksi['kecamatan']) ? $forminspeksi['kecamatan'] : '',
),
],
[
'label' => 'Kota/Kabupaten',
'index' => 5,
'name' => 'kota_kabupaten',
'value' => old(
'kota_kabupaten',
isset($forminspeksi['kota_kabupaten']) ? $forminspeksi['kota_kabupaten'] : '',
),
'readonly' => false,
],
[
'label' => 'Provinsi',
'index' => 6,
'value' => $dokumen->province->name ?? '',
'name' => 'provinsi',
'value' => old(
'provinsi',
isset($forminspeksi['provinsi']) ? $forminspeksi['provinsi'] : '',
),
'readonly' => true,
],
[
'label' => 'Kota/Kabupaten',
'value' => $dokumen->city->name ?? '',
'name' => 'kota_kabupaten',
'readonly' => true,
],
[
'label' => 'Kecamatan',
'value' => $dokumen->district->name ?? '',
'name' => 'kecamatan',
'readonly' => true,
],
[
'label' => 'Kelurahan',
'value' => $dokumen->village->name ?? '',
'name' => 'desa_kelurahan',
'readonly' => true,
],
];
@endphp
@if (count($inputDataLoaksi) > 0)
@foreach ($inputDataLoaksi as $item)
<!-- Nomor Lambung -->
@foreach ($fields as $field)
<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">
<input type="text" name="{{ $item['name'] }}" class="input"
placeholder="Masukkan {{ $item['label'] }}"
value="{{ $item['value'] }}">
<em id="error-{{ $item['name'] }}" class="alert text-danger text-sm"></em>
<input type="text" class="input" name="{{ $field['name'] }}"
value="{{ $field['value'] }}" {{ $field['readonly'] ? 'readonly' : '' }}>
</div>
</div>
@endforeach
@endforeach
</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>
@@ -249,16 +288,20 @@
<h1 class="text-md font-medium text-gray-900">Titik Koordinat Google Maps</h1>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Koordinat</label>
<div id="perwakilan" class="flex flex-wrap items-baseline w-full gap-5">
<label class="form-label max-w-56">Kordinat</label>
<div id="perwakilan" class="flex items-baseline w-full gap-5">
<div class="grid grid-cols-2 gap-4 items-center w-full">
<input class="input" type="text" name="kordinat_lat" id="lat"
value="{{ old('kordinat_lat') }}" @readonly(true)>
<input class="input" type="text" name="kordinat_lng" id="lng"
value="{{ old('kordinat_lng') }}" @readonly(true)>
<input class="input" type="text" placeholder="Masukan Koordinat Latitude" type="text"
name="kordinat_lat" id="lat"
value="{{ old('kordinat_lat', isset($forminspeksi['asset']['kordinat_lat']) ? $forminspeksi['asset']['kordinat_lat'] : '') }}">
<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>
<button type="button" class="btn btn-sm btn-primary" onclick="getUserLocation()">Ambil
Kordinat</button>
<a target="_blank" href="https://www.google.com/maps"type="button"
class="btn btn-md btn-outline btn-primary">
<i class="ki-filled ki-map"></i>Ambil
Kordinat</a>
</div>
</div>
</div>
@@ -362,11 +405,48 @@
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Pemilik Jaminan</label>
<div>
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen)
{{ $dokumen->pemilik->hubungan_pemilik->name?? "" }}
{{ $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>
@@ -376,11 +456,49 @@
<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">
<label class="form-label max-w-56">Penghuni Jaminan</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="mt-2">
<div class="flex flex-wrap items-baseline w-full text-sm">
@foreach ($permohonan->debiture->documents as $dokumen)
{{ $dokumen->penghuni->hubungan_penghuni->name?? "" }}
{{ $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>

View File

@@ -16,26 +16,26 @@
'index' => 0,
'value' => old(
'peruntukan',
isset($forminspeksi['peruntukan']) ? $forminspeksi['peruntukan'] : '',
isset($forminspeksi['fakta']['peruntukan']) ? $forminspeksi['fakta']['peruntukan'] : '',
),
],
[
'label' => 'KDB',
'name' => 'kdb',
'index' => 1,
'value' => old('kdb', isset($forminspeksi['kdb']) ? $forminspeksi['kdb'] : ''),
'value' => old('kdb', isset($forminspeksi['fakta']['kdb']) ? $forminspeksi['fakta']['kdb'] : ''),
],
[
'label' => 'KDH',
'name' => 'kdh',
'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',
'index' => 3,
'value' => old('gsb', isset($forminspeksi['gsb']) ? $forminspeksi['gsb'] : ''),
'value' => old('gsb', isset($forminspeksi['fakta']['gsb']) ? $forminspeksi['fakta']['gsb'] : ''),
],
[
'label' => 'Max Lantai',
@@ -43,20 +43,20 @@
'index' => 4,
'value' => old(
'max_lantai',
isset($forminspeksi['max_lantai']) ? $forminspeksi['max_lantai'] : '',
isset($forminspeksi['fakta']['max_lantai']) ? $forminspeksi['fakta']['max_lantai'] : '',
),
],
[
'label' => 'KLB',
'name' => 'klb',
'index' => 5,
'value' => old('klb', isset($forminspeksi['klb']) ? $forminspeksi['klb'] : ''),
'value' => old('klb', isset($forminspeksi['fakta']['klb']) ? $forminspeksi['fakta']['klb'] : ''),
],
[
'label' => 'GSS',
'name' => 'gss',
'index' => 6,
'value' => old('gss', isset($forminspeksi['gss']) ? $forminspeksi['gss'] : ''),
'value' => old('gss', isset($forminspeksi['fakta']['gss']) ? $forminspeksi['fakta']['gss'] : ''),
],
[
'label' => 'Pelebaran Jalan',
@@ -64,7 +64,7 @@
'index' => 7,
'value' => old(
'pelebaran_jalan',
isset($forminspeksi['pelebaran_jalan']) ? $forminspeksi['pelebaran_jalan'] : '',
isset($forminspeksi['fakta']['pelebaran_jalan']) ? $forminspeksi['fakta']['pelebaran_jalan'] : '',
),
],
[
@@ -73,7 +73,7 @@
'index' => 8,
'value' => old(
'nama_petugas',
isset($forminspeksi['nama_petugas']) ? $forminspeksi['nama_petugas'] : '',
isset($forminspeksi['fakta']['nama_petugas']) ? $forminspeksi['fakta']['nama_petugas'] : '',
),
],
];
@@ -112,7 +112,7 @@
</div>
<a href="https://gistaru.atrbpn.go.id/rtronline" type="button" class="btn btn-light"
target="_blank">
<i class="ki-outline ki-abstract-33"></i> Gistaru
<i class="ki-filled ki-map"></i> Gistaru
</a>
</div>
</div>
@@ -134,7 +134,7 @@
</div>
<a href="https://bhumi.atrbpn.go.id/peta" type="button" class="btn btn-light"
target="_blank">
<i class="ki-outline ki-abstract-33"></i> Bhumi
<i class="ki-filled ki-map"></i> Bhumi
</a>
</div>
</div>
@@ -157,37 +157,29 @@
</div>
<a href="{{ $link_url_region->regions->url }}" type="button" class="btn btn-light"
target="_blank">
<i class="ki-outline ki-abstract-33"></i>
<i class="ki-filled ki-map"></i>
{{ $link_url_region->regions->name_url }}
</a>
</div>
</div>
@endif
</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 -->
<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"
class="file-input file-input-bordered w-full" accept="image/*"
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"
src="{{ asset('storage/' . (isset($forminspeksi['foto_tempat']) ? $forminspeksi['foto_tempat'] : '')) }}"
@@ -195,15 +187,22 @@
style="{{ isset($forminspeksi['foto_tempat']) ? '' : 'display: none;' }}">
</div>
</div>
</div>
<!-- Notes Section -->
<div class="mt-2" 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
</h4>
<textarea name="keterangan" class="textarea mt-2" placeholder="Masukkan catatan penting" rows="3">{{ old('keterangan', $forminspeksi['keterangan'] ?? '') }}</textarea>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
<label class="form-label max-w-56">Catatan yang Perlu Diperhatikan
</label>
<div class="input-group w-full flex gap-2">
<textarea name="keterangan" class="textarea mt-2" placeholder="Masukkan catatan penting" rows="3">{{ old('keterangan', $forminspeksi['fakta']['keterangan'] ?? '') }}</textarea>
</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 --}}
@section('content')
@include('lpj::assetsku.includenya')
<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">
@@ -69,59 +70,78 @@
</div>
@endsection
@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">
function toggleTidakSesuai(field, inputId) {
const selectedValue = $(`[name="${field}"]:checked, [name="${field}"]:checked`).val();
function toggleFieldVisibility(fieldName, inputId, visibleValues = []) {
const selectedValue = $(`[name="${fieldName}"]:checked`).val();
const inputField = $(`#${inputId}`);
if (selectedValue === 'tidak sesuai' || selectedValue === 'lainnya') {
if (visibleValues.includes(selectedValue)) {
inputField.show();
} else {
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() {
const formElement = $('#formInspeksi')[0];
const formData = new FormData(formElement);
@@ -141,10 +161,12 @@
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
if (response.success) {
window.location.href =
'{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=inspeksi';
}
// if (response.success) {
// toastrSuccessBuild(response.message)
// window.location.href =
// '{{ route('surveyor.show', ['id' => $permohonan->id]) }}?form=inspeksi';
// }
console.log(response);
},
error: function(xhr, status, error) {
@@ -159,6 +181,7 @@
console.log('Status:', status);
console.log('Response:', xhr.responseText);
console.log(errors);
toastrErrorBuild(error);
},
complete: function() {
// Re-enable the button and hide the spinner
@@ -168,9 +191,7 @@
}
});
}
</script>
<script>
function previewImage(input, previewId) {
if (input.files && input.files[0]) {
var reader = new FileReader();
@@ -197,8 +218,10 @@
}
const newElement = template.cloneNode(true);
const inputs = newElement.querySelectorAll('input, textarea');
inputs.forEach(input => (input.value = ''));
const textarea = newElement.querySelector('textarea');
if (textarea) {
textarea.value = '';
}
const deleteButton = newElement.querySelector('.remove-btn');
if (deleteButton) {
@@ -208,5 +231,53 @@
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>
@endpush

View File

@@ -14,43 +14,43 @@
<label class="block text-sm font-medium text-gray-700">Jarak Dari Jalan
Utama</label>
<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>
<label class="block text-sm font-medium text-gray-700">Jalan</label>
<input type="text" name="jalan_linkungan" class="input mt-2"
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>
<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"
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>
<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"
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 class="w-full mt-4">
<label class="block text-sm font-medium text-gray-700">Lebar Perkerasan Jalan Depan
objek</label>
<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 class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Perkerasan Jalan</label>
<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))
@foreach ($perkerasanJalan as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="perkerasan_jalan[]" type="checkbox"
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 }}
</label>
@endforeach
@@ -70,7 +70,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="lalu_lintas[]" type="checkbox"
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 }}
@@ -91,7 +91,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="gol_mas_sekitar[]" type="checkbox"
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 }}
</label>
@@ -112,7 +112,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="tingkat_keramaian[]" type="checkbox"
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 }}
</label>
@@ -128,12 +128,12 @@
<label class="form-label max-w-56">Terletak Di Area</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4">
@if (isset($konturTanah))
@foreach ($konturTanah as $item)
@if (isset($terletakDiArea))
@foreach ($terletakDiArea as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="terletak_diarea[]" type="checkbox"
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 }}
</label>
@@ -143,36 +143,93 @@
<em id="error-terletak_diarea" class="alert text-danger text-sm"></em>
</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 -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Dekat Makam</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col gap-2 mt-2">
<!-- Opsi Ya -->
<div class="flex w-full items-center gap-4">
<label class="text-sm flex items-center gap-2.5 text-nowrap">
<input onclick="toggledekatMakam(true)" type="radio" class="radio"
name="dekat_makam" value="ya"
{{ old('dekat_makam', $forminspeksi['dekat_makam'] ?? '') == 'ya' ? 'checked' : '' }} />
<input onclick="toggleFieldVisibility('dekat_makam', 'dekat-makam', ['ya'])"
type="radio" class="radio" name="dekat_makam" value="ya"
{{ old('dekat_makam', $forminspeksi['lingkungan']['dekat_makam'] ?? '') == 'ya' ? 'checked' : '' }} />
<span class="ml-2">Ya</span>
</label>
<div id="dekat-makam" class="grid grid-cols-2 gap-4"
style="{{ old('dekat_makam', $forminspeksi['dekat_makam'] ?? '') == 'ya' ? 'visibility: visible; height: auto;' : 'visibility: hidden; height: 0;' }}">
<div id="dekat-makam" class="flex items-baseline gap-4 w-full"
style="{{ old('dekat_makam', $forminspeksi['lingkungan']['dekat_makam'] ?? '') == 'ya' ? 'display:block;' : 'display:none;' }}">
<div class="flex items-center gap-2">
<label for="">Jarak</label>
<input type="text" class="input mt-2" name="jarak_makam"
value="{{ old('jarak_makam', $forminspeksi['jarak_makam'] ?? '') }}"
placeholder="Km">
<label for="jarak_makam" class="form-label max-w-56">Jarak</label>
<input type="number" class="input mt-2" name="jarak_makam"
value="{{ old('jarak_makam', $forminspeksi['lingkungan']['jarak_makam'] ?? '') }}"
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>
<input type="text" class="input mt-2" name="nama_makam"
value="{{ old('nama_makam', $forminspeksi['nama_makam'] ?? '') }}"
placeholder="Nama TPU">
</div>
</div>
<!-- Opsi Tidak -->
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input onclick="toggledekatMakam(false)" type="radio" class="radio"
name="dekat_makam" value="tidak"
{{ old('dekat_makam', $forminspeksi['dekat_makam'] ?? '') == 'tidak' ? 'checked' : '' }} />
<input onclick="toggleFieldVisibility('dekat_makam', 'dekat-makam', ['ya'])"
type="radio" class="radio" name="dekat_makam" value="tidak"
{{ old('dekat_makam', $forminspeksi['lingkungan']['dekat_makam'] ?? '') == 'tidak' ? 'checked' : '' }} />
<span class="ml-2">Tidak</span>
</label>
</div>
@@ -180,36 +237,62 @@
</div>
</div>
<!-- Dekat Tps -->
<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-col gap-2 mt-2">
<!-- Opsi Ya -->
<div class="flex w-full items-center gap-4">
<label onclick="toggledekatTps(true)"
class="text-sm flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="dekat_tps" value="ya"
{{ old('dekat_tps', $forminspeksi['dekat_tps'] ?? '') == 'ya' ? 'checked' : '' }} />
<label class="text-sm flex items-center gap-2.5 text-nowrap">
<input
onclick="toggleFieldVisibility('dekat_tps', 'dekat-tps', ['ya'])"
type="radio" class="radio" name="dekat_tps" value="ya"
{{ old('dekat_tps', $forminspeksi['lingkungan']['dekat_tps'] ?? '') == 'ya' ? 'checked' : '' }}
/>
<span class="ml-2">Ya</span>
</label>
<div id="dekat-tps" class="grid grid-cols-2 gap-4"
style="{{ old('dekat_tps', $forminspeksi['dekat_tps'] ?? '') == 'ya' ? 'visibility: visible; height: auto;' : 'visibility: hidden; height: 0;' }}">
<div
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">
<label for="">Jarak</label>
<input type="text" class="input mt-2" name="jarak_tps"
value="{{ old('jarak_tps', $forminspeksi['jarak_tps'] ?? '') }}"
placeholder="Km">
<label for="jarak_tps" class="form-label max-w-56">Jarak</label>
<input
type="number"
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>
<input type="text" class="input mt-2" name="nama_tps"
value="{{ old('nama_tps', $forminspeksi['nama_tps'] ?? '') }}"
placeholder="Nama TPS">
</div>
</div>
<!-- Opsi Tidak -->
<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"
{{ old('dekat_tps', $forminspeksi['dekat_tps'] ?? '') == 'tidak' ? 'checked' : '' }} />
{{ old('dekat_tps', $forminspeksi['lingkungan']['dekat_tps'] ?? '') == 'tidak' ? 'checked' : '' }}
/>
<span class="ml-2">Tidak</span>
</label>
</div>
@@ -217,17 +300,18 @@
</div>
</div>
<!-- Merupakan daerah -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Merupakan daerah</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4">
@if (isset($konturTanah))
@foreach ($konturTanah as $item)
@if (isset($merupakanDaerah))
@foreach ($merupakanDaerah as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="merupakan_daerah[]" type="checkbox"
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 }}
</label>
@endforeach
@@ -238,24 +322,24 @@
</div>
<!-- Fasilitas Umum Sekitar -->
<!-- Fasilitas Umum Sekitar -->
<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>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col items-start gap-4">
@if (isset($konturTanah))
@foreach ($konturTanah as $item)
@if (isset($fasilitasObjek))
@foreach ($fasilitasObjek as $item)
@php
$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(
',',
old(
'fasilitas_dekat_object',
$forminspeksi['fasilitas_dekat_object'] ?? '',
$forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? '',
),
);
@endphp
@@ -264,9 +348,9 @@
value="{{ $item->name }}"
{{ in_array(
$item->name,
is_array(old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? ''))
? old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? [])
: explode(',', old('fasilitas_dekat_object', $forminspeksi['fasilitas_dekat_object'] ?? '')),
is_array(old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? ''))
? old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? [])
: explode(',', old('fasilitas_dekat_object', $forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? '')),
)
? 'checked'
: '' }} />
@@ -284,40 +368,3 @@
</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

@@ -15,31 +15,36 @@
@if (isset($permohonan->debiture->documents))
@foreach ($permohonan->debiture->documents as $item)
@php
$details = json_decode($item->detail);
$luas = $item->detail;
$details = json_decode($luas[0]->details, true);
$luas_tanah = isset($details['luas_tanah']) ? $details['luas_tanah'] : 'N/A';
@endphp
<p class="text-2sm text-gray-700">{{ $luas_tanah }} m2</p>
<p class="text-2sm text-gray-700">{{ $luas_tanah }} m<sup>2</sup></p>
@endforeach
@endif
<div class="flex-wrap items-stretch">
<div class="flex flex-wrap items-baseline w-full">
<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 type="radio" class="radio" name="luas_tanah" value="sesuai"
onclick="toggleTidakSesuai('luas_tanah', 'luas_tanah_tidak_sesuai')"
{{ old('luas_tanah', $forminspeksi['luas_tanah'] ?? '') == 'sesuai' ? 'checked' : '' }}>
onclick="toggleFieldVisibility('luas_tanah', 'luas_tanah_tidak_sesuai', ['tidak sesuai'])"
{{ old('luas_tanah', $forminspeksi['tanah']['luas_tanah'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Sesuai</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="luas_tanah" value="tidak sesuai"
onclick="toggleTidakSesuai('luas_tanah', 'luas_tanah_tidak_sesuai')"
{{ old('luas_tanah', $forminspeksi['luas_tanah'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
onclick="toggleFieldVisibility('luas_tanah', 'luas_tanah_tidak_sesuai', ['tidak sesuai'])"
{{ old('luas_tanah', $forminspeksi['tanah']['luas_tanah'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span>
</label>
<input type="text" name="luas_tanah_tidak_sesuai" id="luas_tanah_tidak_sesuai"
class="input w-full" placeholder="Masukan Luas Tanah"
value="{{ old('luas_tanah_tidak_sesuai', $forminspeksi['luas_tanah_tidak_sesuai'] ?? '') }}"
style="{{ old('luas_tanah', $forminspeksi['luas_tanah'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<div id="luas_tanah_tidak_sesuai" class="flex items-baseline gap-2"
style="{{ old('luas_tanah', $forminspeksi['tanah']['luas_tanah'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<input id="analisa_tanah_tidak_sesuai" type="text" name="luas_tanah_tidak_sesuai" class="input w-full"
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>
<em id="error-luas_tanah" class="alert text-danger text-sm"></em>
</div>
@@ -54,33 +59,37 @@
<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 type="radio" class="radio" name="hadap_mata_angin" value="sesuai"
onclick="toggleTidakSesuai('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai')"
{{ old('hadap_mata_angin', $forminspeksi['hadap_mata_angin'] ?? '') == 'sesuai' ? 'checked' : '' }}>
onclick="toggleFieldVisibility('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai' ,['tidak sesuai'])"
{{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'sesuai' ? 'checked' : '' }}>
<span class="ml-2">Sesuai</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="hadap_mata_angin" value="tidak sesuai"
onclick="toggleTidakSesuai('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai')"
{{ old('hadap_mata_angin', $forminspeksi['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
onclick="toggleFieldVisibility('hadap_mata_angin', 'hadap_mata_angin_tidak_sesuai' ,['tidak sesuai'])"
{{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span>
</label>
<!-- Select dropdown untuk "Tidak Sesuai" -->
<select id="hadap_mata_angin_tidak_sesuai"
class="input w-full @error('hadap_mata_angin_tidak_sesuai') border-danger bg-danger-light @enderror"
name="hadap_mata_angin_tidak_sesuai"
style="{{ old('hadap_mata_angin', $forminspeksi['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<div id="hadap_mata_angin_tidak_sesuai" class="flex items-baseline gap-2"
style="{{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
<select
class="input w-full
id="hadap_matangin_tidak_sesuai"
name="analisa_tanah_hadap_mata_angin_tidak_sesuai">
<option value="">Select Hadap Mata Angin</option>
@if (isset($arahMataAngin))
@foreach ($arahMataAngin as $item)
<option value="{{ $item->name }}"
{{ old('hadap_mata_angin_tidak_sesuai', $forminspeksi['hadap_mata_angin_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
{{ old('hadap_mata_angin_tidak_sesuai', $forminspeksi['tanah']['hadap_mata_angin_tidak_sesuai'] ?? '') == $item->name ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endforeach
@endif
</select>
{{-- <button type="button" class="btn btn-md btn-primary" onclick="updateAnalisa('hadap_mata_angin')">Save</button> --}}
</div>
</div>
<em id="error-hadap_mata_angin" class="alert text-danger text-sm"></em>
</div>
@@ -88,34 +97,44 @@
<!-- Bentuk Tanah -->
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Bentuk Tanah</label>
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4">
@if (isset($bentukTanah))
@foreach ($bentukTanah as $item)
@if (strcasecmp($item->name, 'lainnya') == 0)
<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"
<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">
<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')" />
{{
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 }}
</label>
@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
@endif
</div>
@@ -123,19 +142,27 @@
</div>
</div>
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kontur Tanah</label>
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4">
@if (isset($konturTanah))
@foreach ($konturTanah as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kontur_tanah[]" type="checkbox"
<input
class="checkbox"
name="kontur_tanah[]"
type="checkbox"
value="{{ $item->name }}"
{{ in_array($item->name, old('kontur_tanah', isset($forminspeksi['kontur_tanah']) ? $forminspeksi['kontur_tanah'] : [])) ? 'checked' : '' }} />
{{
in_array(
$item->name,
old('kontur_tanah', $forminspeksi['tanah']['kontur_tanah'] ?? [])
)
? 'checked'
: ''
}}
/>
{{ $item->name }}
</label>
@endforeach
@@ -146,22 +173,34 @@
</div>
<!-- Beda Ketinggian Dengan Jalan -->
<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>
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4">
@if (isset($ketinggianTanah))
@foreach ($ketinggianTanah as $item)
<div class="flex flex-col gap-2">
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="ketinggian_jalan[]" type="checkbox"
value="{{ $item->name }}"
{{ in_array($item->name, old('ketinggian_jalan', $forminspeksi['ketinggian_jalan'] ?? [])) ? 'checked' : '' }} />
{{ in_array($item->name, old('ketinggian_jalan', $forminspeksi['tanah']['ketinggian_jalan'] ?? [])) ? 'checked' : '' }}
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
@endif
</div>
@@ -170,6 +209,8 @@
</div>
<!-- Kontur Jalan Depan Objek -->
<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>
@@ -177,12 +218,12 @@
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
<label class="form-label flex items-center gap-2.5 text-nowrap">
<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>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<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>
</label>
</div>
@@ -190,29 +231,36 @@
</div>
</div>
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Posisi Kavling</label>
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4">
@if (isset($posisiKavling))
@foreach ($posisiKavling as $item)
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="posisi_kavling[]" type="checkbox"
value="{{ $item->name }}"
{{ in_array($item->name, old('posisi_kavling', [])) || (isset($forminspeksi['posisi_kavling']) && in_array($item->name, $forminspeksi['posisi_kavling'])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
@if (strcasecmp($item->name, 'lainnya') == 0)
<div class="flex items-center">
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="posisi_kavling[]" type="checkbox"
value="{{ $item->name }}" />
<input
class="checkbox"
name="posisi_kavling[]"
type="checkbox"
value="{{ $item->name }}"
{{ in_array($item->name, old('posisi_kavling', $forminspeksi['tanah']['posisi_kavling'] ?? [])) ? 'checked' : '' }}
onclick="toggleCheckboxVisibility('posisi_kavling', 'posisi_kavling_lainnya', ['Lainnya'])"
/>
{{ $item->name }}
</label>
<input type="text" name="posisi_kavling_lainnya" class="input mt-2"
id="bentukTanahInput" placeholder="Masukkan Posisi Kavling">
</div>
@if (strcasecmp($item->name, 'Lainnya') == 0)
<input
id="posisi_kavling_lainnya"
type="text"
style="display: none;"
name="posisi_kavling_lainnya"
class="input w-full mt-2"
placeholder="Masukkan Posisi Kavling lainnya..."
/>
@endif
</div>
@endforeach
@endif
</div>
@@ -228,12 +276,12 @@
<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">
<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>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<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>
</label>
</div>
@@ -248,12 +296,12 @@
<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">
<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>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<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>
</label>
</div>
@@ -262,7 +310,6 @@
</div>
<!-- Kondisi Fisik Tanah -->
<div class="flex items-stretch flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kondisi Fisik Tanah</label>
<div class="flex-wrap items-stretch">
@@ -272,7 +319,7 @@
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="checkbox" name="kondisi_fisik_tanah[]" type="checkbox"
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 }}')" />
{{ $item->name }}
</label>
@@ -295,54 +342,3 @@
</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}`;
}
ihfdksfjhjfjbkdfkdsfdsjkjdjdsgjjgdgjhgdgjkhdshggkhgkhdghskghkjkhjsdgjkgdjhg
</script>
@endpush

View File

@@ -1,4 +1,304 @@
@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>
class UniversalCameraEditor {
constructor() {

View File

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

View File

@@ -304,6 +304,13 @@
'model-alat-berat' => 'Model Alat Berat',
'jenis-kapal' => 'Jenis kapal',
'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) {
@@ -458,7 +465,7 @@
Route::get('export', [ActivityController::class, 'export'])->name('export');
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('download/{id}', [ActivityController::class, 'download'])->name('download');
Route::get('senior', [ActivityController::class, 'senior'])->name('senior');
@@ -507,24 +514,28 @@
Route::put('storeJadwal', [SurveyorController::class, 'storeJadwal'])->name('storeJadwal');
Route::put('storeAproved/{id}', [SurveyorController::class, 'storeAproved'])->name('storeAproved');
Route::post('storeFoto', [SurveyorController::class, 'storeFoto'])->name('storeFoto');
Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name(
'checkButtonStatus',
);
Route::post('storeDataPembanding', [SurveyorController::class, 'storeDataPembanding'])->name('storeDataPembanding');
Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name('checkButtonStatus');
Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables');
Route::get('inspeksi/{id}/{jaminanId}', [SurveyorController::class, 'formInspeksi'])->name('inspeksi');
Route::get('denah/{id}/{jaminanId}', [SurveyorController::class, 'denah'])->name('denah');
Route::get('foto/{id}/{jaminanId}', [SurveyorController::class, 'foto'])->name('foto');
Route::get('data-pembanding/{id}/{jaminanId}', [SurveyorController::class, 'dataPembanding'])->name(
'data-pembanding',
);
Route::get('data-pembanding/{id}/{jaminanId}', [SurveyorController::class, 'dataPembanding'])->name('data-pembanding');
Route::post('submitSurveyor/{id}', [SurveyorController::class, 'submitSurveyor'])->name('submitSurveyor');
Route::post('update_analisa/{id}', [SurveyorController::class, 'update_analisa'])->name('update_analisa');
});
Route::name('penilai.')->prefix('penilai')->group(function () {
Route::get('/', [PenilaiController::class, 'index'])->name('index');
Route::get('/{id}/show', [PenilaiController::class, 'show'])->name('show');
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'])