update form inspeksi dan so bisa ambil alih
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
@@ -48,11 +48,14 @@ 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;
|
||||
@@ -176,6 +179,8 @@ class SurveyorController extends Controller
|
||||
{
|
||||
$data = $request->validated();
|
||||
|
||||
|
||||
|
||||
if (!$data) {
|
||||
return response()->json(['success' => false, 'message' => 'Invalid data'], 400);
|
||||
}
|
||||
@@ -188,20 +193,20 @@ class SurveyorController extends Controller
|
||||
|
||||
$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);
|
||||
@@ -529,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.
|
||||
*/
|
||||
@@ -574,6 +616,7 @@ class SurveyorController extends Controller
|
||||
$jenisPesawat = JenisPesawat::all();
|
||||
$modelAlatBerat = ModelAlatBerat::all();
|
||||
$hubCadeb = HubunganPemilikJaminan::all();
|
||||
$hubPenghuni = HubunganPenghuniJaminan::all();
|
||||
$jenisJaminan = JenisJaminan::all();
|
||||
$fasilitasObjek = FasilitasObjek::all();
|
||||
$merupakanDaerah = MerupakanDaerah::all();
|
||||
@@ -622,7 +665,8 @@ class SurveyorController extends Controller
|
||||
'merupakanDaerah',
|
||||
'terletakDiArea',
|
||||
'posisiUnit',
|
||||
'bentukUnit'
|
||||
'bentukUnit',
|
||||
'hubPenghuni'
|
||||
));
|
||||
}
|
||||
|
||||
@@ -697,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;
|
||||
@@ -706,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'));
|
||||
}
|
||||
|
||||
|
||||
@@ -852,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),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -1132,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(),
|
||||
|
||||
|
||||
];
|
||||
}
|
||||
@@ -1215,15 +1351,25 @@ class SurveyorController extends Controller
|
||||
|
||||
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 [
|
||||
@@ -1233,8 +1379,8 @@ class SurveyorController extends Controller
|
||||
'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,
|
||||
],
|
||||
@@ -1740,6 +1886,3 @@ class SurveyorController extends Controller
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -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>
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
|
||||
<div id="luas_unit_tidak_sesuai" class="flex items-baseline gap-2"
|
||||
style="{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
|
||||
<input type="text" name="luas_unit_tidak_sesuai" class="input w-full"
|
||||
<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">Save</button>
|
||||
<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>
|
||||
@@ -80,9 +80,6 @@
|
||||
</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">
|
||||
|
||||
@@ -5,7 +5,20 @@
|
||||
</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">
|
||||
@@ -25,15 +38,16 @@
|
||||
|
||||
<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" name="luas_tanah_bagunan_tidak_sesuai" class="input w-full"
|
||||
<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">Save</button>
|
||||
<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 -->
|
||||
@@ -139,7 +153,7 @@
|
||||
@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>
|
||||
@@ -149,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>
|
||||
@@ -235,33 +249,39 @@
|
||||
|
||||
document.getElementById('addBagunan').addEventListener('click', function() {
|
||||
const newDiv = spekBangunanContainer.querySelector('.spek-bangunan').cloneNode(true);
|
||||
console.log('Building label');
|
||||
// Clear the selected values and input fields of the cloned input fields
|
||||
newDiv.querySelectorAll('select, input').forEach(input => {
|
||||
|
||||
// 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 the labels after removing
|
||||
console.log('Building label');
|
||||
updateBuildingLabels();
|
||||
});
|
||||
|
||||
// Update delete buttons visibility and labels
|
||||
// Update UI
|
||||
updateDeleteButtonsVisibility();
|
||||
updateBuildingLabels();
|
||||
console.log('Building label');
|
||||
});
|
||||
|
||||
|
||||
// Initial setup: Ensure "Bangunan 1" is labeled
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
updateDeleteButtonsVisibility();
|
||||
|
||||
@@ -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"
|
||||
@@ -74,17 +85,19 @@
|
||||
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>
|
||||
@@ -95,13 +108,12 @@
|
||||
|
||||
<td>
|
||||
<input type="text" class="input"
|
||||
value="{{ isset($formIns['nama_jalan']) ? $formIns['nama_jalan'] . ' ' . $formIns['desa_kelurahan'] : '' }}" />
|
||||
|
||||
|
||||
|
||||
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" placeholder="Data Pembanding 1"
|
||||
name="alamat_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -109,10 +121,12 @@
|
||||
<td>Desa</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['kecamatan']) ? $formIns['kecamatan'] : '' }}" />
|
||||
value="{{ isset($formIns['asset']['kecamatan']) ? $formIns['asset']['desa'] : '' }}"
|
||||
name="desa" />
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="desa_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -120,10 +134,12 @@
|
||||
<td>Kecamatan</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['kecamatan']) ? $formIns['kecamatan'] : '' }}" />
|
||||
value="{{ isset($formIns['asset']['kecamatan']) ? $formIns['asset']['kecamatan'] : '' }}"
|
||||
name="kecamatan" />
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="kecamatan_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -131,10 +147,12 @@
|
||||
<td>Kabupaten</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['kota_kabupaten']) ? $formIns['kota_kabupaten'] : '' }}" />
|
||||
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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="kabupaten_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -142,10 +160,12 @@
|
||||
<td>Provinsi</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['provinsi']) ? $formIns['provinsi'] : '' }}" />
|
||||
value="{{ isset($formIns['asset']['provinsi']) ? $formIns['asset']['provinsi'] : '' }}"
|
||||
name="provinsi" />
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="provinsi_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -154,10 +174,12 @@
|
||||
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>
|
||||
@@ -165,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>
|
||||
@@ -176,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>
|
||||
@@ -187,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>
|
||||
|
||||
@@ -199,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>
|
||||
|
||||
@@ -211,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>
|
||||
|
||||
@@ -223,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>
|
||||
@@ -234,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>
|
||||
|
||||
@@ -246,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>
|
||||
|
||||
@@ -258,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>
|
||||
@@ -269,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>
|
||||
@@ -280,29 +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">
|
||||
Koordinat Lat
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<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>
|
||||
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>
|
||||
@@ -310,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>
|
||||
@@ -326,10 +398,12 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['jarak_jalan_utama']) ? $formIns['jarak_jalan_utama'] : '' }}" />
|
||||
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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="jarak_jalan_utama_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -341,10 +415,12 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['jarak_cbd_point']) ? $formIns['jarak_cbd_point'] : '' }}" />
|
||||
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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="jarak_cbd_point_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -355,11 +431,19 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['posisi_kavling']) ? $formIns['posisi_kavling'][0] : '' }}" />
|
||||
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" />
|
||||
|
||||
|
||||
|
||||
|
||||
<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>
|
||||
@@ -371,11 +455,12 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['tingkat_keramaian']) ? $formIns['tingkat_keramaian'][0] : '' }}" />
|
||||
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" placeholder="Data Pembanding 1"
|
||||
name="tingkat_keramaian_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -388,11 +473,13 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['kondisi_fisik_tanah']) ? $formIns['kondisi_fisik_tanah'][0] : '' }}" />
|
||||
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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="kondisi_fisik_tanah_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -402,11 +489,12 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['ketinggian_jalan']) ? $formIns['ketinggian_jalan'][0] : '' }}" />
|
||||
value="{{ isset($formIns['tanah']['ketinggian_jalan']) ? $formIns['tanah']['ketinggian_jalan'][0] : '' }}"
|
||||
name="ketinggian_jalan" />
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<input type="text" class="input mt-2" placeholder="Data Pembanding 1" />
|
||||
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="ketinggian_jalan_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -417,12 +505,13 @@
|
||||
<td>
|
||||
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['bentuk_tanah']) ? $formIns['bentuk_tanah'][0] : '' }}" />
|
||||
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" />
|
||||
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="bentuk_tanah_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -432,10 +521,12 @@
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input mt-2" placeholder="Objek Penilaian"
|
||||
value="{{ isset($formIns['bentuk_tanah']) ? $formIns['bentuk_tanah'][0] : '' }}" />
|
||||
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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="lebar_depan_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -447,11 +538,13 @@
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<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="fasos_fasum" />
|
||||
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="fasos_fasum_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -462,10 +555,12 @@
|
||||
</td>
|
||||
<td>
|
||||
|
||||
<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" placeholder="Data Pembanding 1"
|
||||
name="lain_lain_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -475,10 +570,12 @@
|
||||
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>
|
||||
@@ -490,10 +587,12 @@
|
||||
Zonasi/Tata Kota
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Objek Penilaian" />
|
||||
<input type="text" class="input" placeholder="Objek Penilaian"
|
||||
name="zonasi_tata_kota" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="zonasi_tata_kota_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -501,11 +600,14 @@
|
||||
KDB
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" 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" placeholder="Data Pembanding 1"
|
||||
name="kdb_pembanding[]" />
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -516,11 +618,14 @@
|
||||
KLB
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Objek Penilaian" />
|
||||
<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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="klb_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -529,11 +634,14 @@
|
||||
KTB
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Objek Penilaian" />
|
||||
<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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="ktb_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -542,11 +650,14 @@
|
||||
KDH
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Objek Penilaian" />
|
||||
<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" />
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1"
|
||||
name="kdh_pembanding[]" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -554,19 +665,34 @@
|
||||
Peraturan
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Objek Penilaian" />
|
||||
<input type="text" class="input" placeholder="Objek Penilaian"
|
||||
name="peraturan" />
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" class="input" placeholder="Data Pembanding 1" />
|
||||
<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>
|
||||
@@ -576,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';
|
||||
@@ -598,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}`;
|
||||
|
||||
// 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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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,35 +99,35 @@
|
||||
<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('jenis_asset', 'jenis_asset', ['tidak sesuai'])" type="radio" class="radio"
|
||||
name="jenis_asset" value="sesuai"
|
||||
<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="toggleFieldVisibility('jenis_asset', 'jenis_asset', ['tidak sesuai'])" type="radio" class="radio"
|
||||
name="jenis_asset" value="tidak sesuai"
|
||||
<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" -->
|
||||
|
||||
<div id="jenis_asset" class="flex items-baseline gap-2" style="{{ old('jenis_asset', $forminspeksi['asset']['jenis_asset'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
|
||||
<select
|
||||
class="input w-full"
|
||||
name="jenis_asset_tidak_sesuai"
|
||||
>
|
||||
<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($jenisJaminan))
|
||||
@foreach ($jenisJaminan as $item)
|
||||
<option value="{{ $item->name }}"
|
||||
<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">Save</button>
|
||||
<button type="button" class="btn btn-md btn-primary"
|
||||
onclick="updateAnalisa('jenis_asset')">Save</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -139,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) }}
|
||||
@@ -147,209 +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['asset']['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['asset']['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>
|
||||
|
||||
</div>
|
||||
<em id="error-alamat" class="alert text-danger text-sm"></em>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="alamat_tidak_sesuai" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="display: none;">
|
||||
<label class="form-label max-w-56">
|
||||
Address
|
||||
</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 w-full">
|
||||
<select id="province_code" name="province_code" class="select w-full @error('province_code') border-danger bg-danger-light @enderror">
|
||||
<option value="">Select Province</option>
|
||||
@foreach($provinces as $province)
|
||||
@if(isset($debitur))
|
||||
<option value="{{ $province->code }}" {{ isset($debitur->province_code) && $debitur->province_code == $province->code?'selected' : '' }}>
|
||||
{{ $province->name }}
|
||||
</option>
|
||||
@else
|
||||
<option value="{{ $province->code }}">
|
||||
{{ $province->name }}
|
||||
</option>
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
@error('province_code')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="flex flex-wrap items-baseline w-full">
|
||||
<select id="city_code" name="city_code" class="select w-full @error('city_code') border-danger bg-danger-light @enderror">
|
||||
<option value="">Select City</option>
|
||||
@if(isset($cities))
|
||||
@foreach($cities as $city)
|
||||
@if(isset($debitur))
|
||||
<option value="{{ $city->code }}" {{ isset($debitur->city_code) && $debitur->city_code == $city->code?'selected' : '' }}>
|
||||
{{ $city->name }}
|
||||
</option>
|
||||
@else
|
||||
<option value="{{ $city->code }}">
|
||||
{{ $city->name }}
|
||||
</option>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
</select>
|
||||
@error('city_code')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col lg:flex-row gap-2 w-full mt-2 lg:mt-5">
|
||||
<div class="flex flex-wrap items-baseline w-full">
|
||||
<select id="district_code" name="district_code" class="select w-full @error('district_code') border-danger bg-danger-light @enderror">
|
||||
<option value="">Select District</option>
|
||||
@if(isset($districts))
|
||||
@foreach($districts as $district)
|
||||
@if(isset($debitur))
|
||||
<option value="{{ $district->code }}" {{ isset($debitur->district_code) && $debitur->district_code == $district->code?'selected' : '' }}>
|
||||
{{ $district->name }}
|
||||
</option>
|
||||
@else
|
||||
<option value="{{ $district->code }}">
|
||||
{{ $district->name }}
|
||||
</option>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
</select>
|
||||
@error('district_code')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="flex flex-wrap items-baseline w-full">
|
||||
<select id="village_code" name="village_code" class="select w-full @error('district_code') border-danger bg-danger-light @enderror">
|
||||
<option value="">Select Village</option>
|
||||
@if(isset($villages))
|
||||
@foreach($villages as $village)
|
||||
@if(isset($debitur))
|
||||
<option value="{{ $village->code }}" {{ isset($debitur->village_code) && $debitur->village_code == $village->code?'selected' : '' }}>
|
||||
{{ $village->name }}
|
||||
</option>
|
||||
@else
|
||||
<option value="{{ $village->code }}">
|
||||
{{ $village->name }}
|
||||
</option>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
</select>
|
||||
@error('district_code')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="flex flex-wrap items-baseline w-full">
|
||||
<input class="input @error('postal_code') border-danger bg-danger-light @enderror" type="number" id="postal_code" name="postal_code" value="{{ $debitur->postal_code ?? '' }}" placeholder="Postal Code">
|
||||
@error('postal_code')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-row w-full mt-2 lg:mt-5">
|
||||
<textarea class="textarea @error('address') border-danger bg-danger-light @enderror" rows="3" type="number" id="address" name="address">{{ $debitur->address ?? '' }}</textarea>
|
||||
@error('address')
|
||||
<em class="alert text-danger text-sm">{{ $message }}</em>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="alamat_tidak_sesuai" class="grid gap-2 mt-5" style="display: none;">
|
||||
{{-- Alamat Sesuai --}}
|
||||
<div id="alamat_sesuai" class="grid gap-2 mt-5" style="display: none;">
|
||||
@foreach ($permohonan->debiture->documents as $dokumen)
|
||||
@php
|
||||
|
||||
$inputDataLoaksi = [];
|
||||
$inputDataLoaksi = [
|
||||
$fields = [
|
||||
[
|
||||
'label' => 'Jl.',
|
||||
'index' => 0,
|
||||
'value' => $dokumen->address ?? '',
|
||||
'name' => 'nama_jalan',
|
||||
'value' => old(
|
||||
'nama_jalan',
|
||||
isset($forminspeksi['asset']['nama_jalan']) ? $forminspeksi['asset']['nama_jalan'] : '',
|
||||
),
|
||||
],
|
||||
|
||||
[
|
||||
'label' => 'Desa/Kelurahan',
|
||||
'index' => 3,
|
||||
'name' => 'desa_kelurahan',
|
||||
'value' => old(
|
||||
'desa_kelurahan',
|
||||
isset($forminspeksi['asset']['desa_kelurahan']) ? $forminspeksi['asset']['desa_kelurahan'] : '',
|
||||
),
|
||||
],
|
||||
[
|
||||
'label' => 'Kecamatan',
|
||||
'index' => 4,
|
||||
'name' => 'kecamatan',
|
||||
'value' => old(
|
||||
'kecamatan',
|
||||
isset($forminspeksi['asset']['kecamatan']) ? $forminspeksi['asset']['kecamatan'] : '',
|
||||
),
|
||||
],
|
||||
[
|
||||
'label' => 'Kota/Kabupaten',
|
||||
'index' => 5,
|
||||
'name' => 'kota_kabupaten',
|
||||
'value' => old(
|
||||
'kota_kabupaten',
|
||||
isset($forminspeksi['asset']['kota_kabupaten']) ? $forminspeksi['asset']['kota_kabupaten'] : '',
|
||||
),
|
||||
'readonly' => false,
|
||||
],
|
||||
[
|
||||
'label' => 'Provinsi',
|
||||
'index' => 6,
|
||||
'value' => $dokumen->province->name ?? '',
|
||||
'name' => 'provinsi',
|
||||
'value' => old(
|
||||
'provinsi',
|
||||
isset($forminspeksi['asset']['provinsi']) ? $forminspeksi['asset']['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>
|
||||
|
||||
@@ -363,12 +291,15 @@
|
||||
<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" placeholder="Masukan Koordinat Latitude" type="text" name="kordinat_lat" id="lat"
|
||||
<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'] : '') }}" >
|
||||
<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>
|
||||
<a target="_blank" href="https://www.google.com/maps"type="button" class="btn btn-md btn-outline btn-primary" >
|
||||
<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>
|
||||
@@ -477,21 +408,23 @@
|
||||
<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"
|
||||
<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"
|
||||
<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>
|
||||
@@ -524,24 +457,26 @@
|
||||
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
|
||||
<label class="form-label max-w-56">Penghuni Jaminan</label>
|
||||
|
||||
<div>
|
||||
<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"
|
||||
<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"
|
||||
<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>
|
||||
@@ -551,8 +486,8 @@
|
||||
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($hubCadeb))
|
||||
@foreach ($hubCadeb as $item)
|
||||
@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 }}
|
||||
@@ -570,5 +505,3 @@
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -165,15 +165,21 @@
|
||||
@endif
|
||||
</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'] : '')) }}"
|
||||
@@ -181,14 +187,22 @@
|
||||
style="{{ isset($forminspeksi['foto_tempat']) ? '' : 'display: none;' }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>77r7777
|
||||
|
||||
<!-- Notes Section -->
|
||||
<div class="mt-2" >
|
||||
<div class="bg-white rounded-lg">
|
||||
<h4 class="block text-sm font-medium text-gray-700 mt-2">Catatan yang Perlu Diperhatikan
|
||||
</h4>
|
||||
<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
|
||||
|
||||
|
||||
@@ -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">
|
||||
@@ -124,6 +125,22 @@
|
||||
}
|
||||
|
||||
|
||||
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];
|
||||
@@ -144,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) {
|
||||
@@ -162,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
|
||||
@@ -211,8 +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
|
||||
|
||||
|
||||
|
||||
|
||||
88
resources/views/surveyor/components/modal-kamera.blade.php
Normal file
88
resources/views/surveyor/components/modal-kamera.blade.php
Normal 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>
|
||||
@@ -15,11 +15,13 @@
|
||||
@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">
|
||||
@@ -38,10 +40,10 @@
|
||||
</label>
|
||||
<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 type="text" name="luas_tanah_tidak_sesuai" class="input w-full"
|
||||
<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">Save</button>
|
||||
<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>
|
||||
@@ -74,7 +76,8 @@
|
||||
style="{{ old('hadap_mata_angin', $forminspeksi['tanah']['hadap_mata_angin'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
|
||||
<select
|
||||
class="input w-full
|
||||
name="hadap_mata_angin_tidak_sesuai">
|
||||
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)
|
||||
@@ -85,7 +88,7 @@
|
||||
@endforeach
|
||||
@endif
|
||||
</select>
|
||||
<button type="button" class="btn btn-md btn-primary">Save</button>
|
||||
{{-- <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>
|
||||
|
||||
@@ -200,8 +200,6 @@ function jadwal(id){
|
||||
return `${day}-${month}-${year}`;
|
||||
}
|
||||
|
||||
ihfdksfjhjfjbkdfkdsfdsjkjdjdsgjjgdgjhgdgjkhdshggkhgkhdghskghkjkhjsdgjkgdjhg
|
||||
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -448,7 +448,7 @@ Route::middleware(['auth'])->group(function () {
|
||||
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');
|
||||
@@ -485,6 +485,7 @@ Route::middleware(['auth'])->group(function () {
|
||||
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::post('storeDataPembanding', [SurveyorController::class, 'storeDataPembanding'])->name('storeDataPembanding');
|
||||
Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name('checkButtonStatus');
|
||||
|
||||
Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables');
|
||||
@@ -493,6 +494,8 @@ Route::middleware(['auth'])->group(function () {
|
||||
Route::get('foto/{id}/{jaminanId}', [SurveyorController::class, 'foto'])->name('foto');
|
||||
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 () {
|
||||
|
||||
Reference in New Issue
Block a user