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

This commit is contained in:
Andy Chaerudin
2024-12-23 09:52:54 +07:00
98 changed files with 4472 additions and 2416 deletions

View File

@@ -327,18 +327,21 @@
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$legalitas='';
if($_jenisJaminan) {
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn(
'id',
$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray(),
)->get();
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn(
'id',
$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray(),
)->get();
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
$legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray());
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
$legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray());
$legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get();
$legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get();
}
$pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get();
$hubunganPemilik = HubunganPemilikJaminan::all();

View File

@@ -44,8 +44,13 @@ class KJPPController extends Controller
// Combine KJPP number with branch code
$fullKjppNumber = $kjppNumber;
$detailJoinEmailKantor = json_encode([]);
$detailJoinPimpinan = json_encode([]);
$detailJoinPicReviewer = json_encode([]);
$detailJoinPicAdmin = json_encode([]);
$detailJoinPicMarketing = json_encode([]);
return view('lpj::kjpp.create', compact('ijin_usaha', 'jenis_aset', 'provinces', 'fullKjppNumber'));
return view('lpj::kjpp.create', compact('ijin_usaha', 'jenis_aset', 'provinces', 'fullKjppNumber', 'detailJoinEmailKantor', 'detailJoinPimpinan', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing'));
}
/**
@@ -78,74 +83,56 @@ class KJPPController extends Controller
$nomorHpPicMarketing = $request->input('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing', []);
foreach ($emailKantor as $value) {
$detailEmailKantor[] = [
'email_kantor' => $value
];
$detailEmailKantor[] = $value;
}
// Encode to JSON and store
$detailEmailKantorJson = json_encode($detailEmailKantor);
// Process detail_nama_pimpinan
foreach ($namaPimpinan as $value) {
$detailNamaPimpinan[] = [
'nama_pimpinan' => $value
];
$detailNamaPimpinan[] = $value;
}
$detailNamaPimpinanJson = json_encode($detailNamaPimpinan);
// Process detail_nomor_pic_pimpinan
foreach ($nomorHpPimpinan as $value) {
$detailNomorPicPimpinan[] = [
'nomor_hp_pimpinan' => $value
];
$detailNomorPicPimpinan[] = $value;
}
$detailNomorPicPimpinanJson = json_encode($detailNomorPicPimpinan);
// Process detail_nama_pic_reviewer
foreach ($namaPicReviewer as $value) {
$detailNamaPicReviewer[] = [
'nama_pic_reviewer' => $value
];
$detailNamaPicReviewer[] = $value;
}
$detailNamaPicReviewerJson = json_encode($detailNamaPicReviewer);
// Process detail_nomor_hp_pic_reviewer
foreach ($nomorHpPicReviewer as $value) {
$detailNomorHpPicReviewer[] = [
'nomor_hp_pic_reviewer' => $value
];
$detailNomorHpPicReviewer[] = $value;
}
$detailNomorHpPicReviewerJson = json_encode($detailNomorHpPicReviewer);
// Process detail_nama_pic_admin
foreach ($namaPicAdmin as $value) {
$detailNamaPicAdmin[] = [
'nama_pic_admin' => $value
];
$detailNamaPicAdmin[] = $value;
}
$detailNamaPicAdminJson = json_encode($detailNamaPicAdmin);
// Process detail_nomor_hp_pic_admin
foreach ($nomorHpPicAdmin as $value) {
$detailNomorHpPicAdmin[] = [
'nomor_hp_pic_admin' => $value
];
$detailNomorHpPicAdmin[] = $value;
}
$detailNomorHpPicAdminJson = json_encode($detailNomorHpPicAdmin);
// Process detail_nama_pic_marketing
foreach ($namaPicMarketing as $value) {
$detailNamaPicMarketing[] = [
'nama_pic_marketing' => $value
];
$detailNamaPicMarketing[] = $value;
}
$detailNamaPicMarketingJson = json_encode($detailNamaPicMarketing);
// Process detail_nomor_hp_pic_marketing
foreach ($nomorHpPicMarketing as $value) {
$detailNomorHpPicMarketing[] = [
'nomor_hp_pic_marketing' => $value
];
$detailNomorHpPicMarketing[] = $value;
}
$detailNomorHpPicMarketingJson = json_encode($detailNomorHpPicMarketing);
@@ -217,15 +204,18 @@ class KJPPController extends Controller
$detailNamaPicMarketing = json_decode($kjpp->detail_nama_pic_marketing);
$detailNomorHpPicMarketing = json_decode($kjpp->detail_nomor_hp_pic_marketing);
$detailJoinPimpinan = [];
if($detailNamaPimpinan) {
$detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pimpinan' => $nama,
'nomor_hp_pimpinan' => $nomor
];
}, $detailNamaPimpinan, $detailNomorHpPimpinan));
}
$detailJoinEmailKantor = json_encode(array_map(function ($email) {
return [
'email_kantor' => $email
];
}, $detailEmailKantor));
$detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pimpinan' => $nama,
'nomor_hp_pimpinan' => $nomor
];
}, $detailNamaPimpinan, $detailNomorHpPimpinan));
$detailJoinPicReviewer = json_encode(array_map(function ($nama, $nomor) {
@@ -249,7 +239,7 @@ class KJPPController extends Controller
];
}, $detailNamaPicMarketing, $detailNomorHpPicMarketing));
return view('lpj::kjpp.show', compact('jenis_jaminan', 'ijin_usahas', 'ijin_usaha', 'kjpp', 'provinces', 'cities', 'districts', 'villages', 'detailEmailKantor', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailJoinPimpinan'));
return view('lpj::kjpp.show', compact('jenis_jaminan', 'ijin_usahas', 'ijin_usaha', 'kjpp', 'provinces', 'cities', 'districts', 'villages', 'detailJoinEmailKantor', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailJoinPimpinan'));
}
/**
@@ -274,19 +264,19 @@ class KJPPController extends Controller
$detailNamaPicMarketing = json_decode($kjpp->detail_nama_pic_marketing);
$detailNomorHpPicMarketing = json_decode($kjpp->detail_nomor_hp_pic_marketing);
//dd($detailNamaPimpinan);
$detailJoinEmailKantor = json_encode(array_map(function ($email) {
return [
'email_kantor' => $email
];
}, $detailEmailKantor));
$detailJoinPimpinan = [];
if($detailNamaPimpinan) {
$detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pimpinan' => $nama,
'nomor_hp_pimpinan' => $nomor
];
}, $detailNamaPimpinan, $detailNomorHpPimpinan));
}
$detailJoinPimpinan = json_encode(array_map(function ($nama, $nomor) {
return [
'nama_pimpinan' => $nama,
'nomor_hp_pimpinan' => $nomor
];
}, $detailNamaPimpinan, $detailNomorHpPimpinan));
//dd($detailNamaPicReviewer );
$detailJoinPicReviewer = json_encode(array_map(function ($nama, $nomor) {
return [
@@ -309,7 +299,7 @@ class KJPPController extends Controller
];
}, $detailNamaPicMarketing, $detailNomorHpPicMarketing));
return view('lpj::kjpp.create', compact('kjpp', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailEmailKantor', 'detailJoinPimpinan'));
return view('lpj::kjpp.create', compact('kjpp', 'ijin_usaha', 'jenis_aset', 'provinces', 'cities', 'districts', 'villages', 'detailJoinPicReviewer', 'detailJoinPicAdmin', 'detailJoinPicMarketing', 'detailJoinEmailKantor', 'detailJoinPimpinan'));
}
/**
@@ -343,74 +333,56 @@ class KJPPController extends Controller
$nomorHpPicMarketing = $request->input('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing', []);
foreach ($emailKantor as $value) {
$detailEmailKantor[] = [
'email_kantor' => $value
];
$detailEmailKantor[] = $value;
}
// Encode to JSON and store
$detailEmailKantorJson = json_encode($detailEmailKantor);
// Process detail_nama_pimpinan
foreach ($namaPimpinan as $value) {
$detailNamaPimpinan[] = [
'nama_pimpinan' => $value
];
$detailNamaPimpinan[] = $value;
}
$detailNamaPimpinanJson = json_encode($detailNamaPimpinan);
// Process detail_nomor_hp_pimpinan
foreach ($nomorHpPimpinan as $value) {
$detailNomorHpPimpinan[] = [
'nomor_hp_pimpinan' => $value
];
$detailNomorHpPimpinan[] = $value;
}
$detailNomorHpPimpinanJson = json_encode($detailNomorHpPimpinan);
// Process detail_nama_pic_reviewer
foreach ($namaPicReviewer as $value) {
$detailNamaPicReviewer[] = [
'nama_pic_reviewer' => $value
];
$detailNamaPicReviewer[] = $value;
}
$detailNamaPicReviewerJson = json_encode($detailNamaPicReviewer);
// Process detail_nomor_hp_pic_reviewer
foreach ($nomorHpPicReviewer as $value) {
$detailNomorHpPicReviewer[] = [
'nomor_hp_pic_reviewer' => $value
];
$detailNomorHpPicReviewer[] = $value;
}
$detailNomorHpPicReviewerJson = json_encode($detailNomorHpPicReviewer);
// Process detail_nama_pic_admin
foreach ($namaPicAdmin as $value) {
$detailNamaPicAdmin[] = [
'nama_pic_admin' => $value
];
$detailNamaPicAdmin[] = $value;
}
$detailNamaPicAdminJson = json_encode($detailNamaPicAdmin);
// Process detail_nomor_hp_pic_admin
foreach ($nomorHpPicAdmin as $value) {
$detailNomorHpPicAdmin[] = [
'nomor_hp_pic_admin' => $value
];
$detailNomorHpPicAdmin[] = $value;
}
$detailNomorHpPicAdminJson = json_encode($detailNomorHpPicAdmin);
// Process detail_nama_pic_marketing
foreach ($namaPicMarketing as $value) {
$detailNamaPicMarketing[] = [
'nama_pic_marketing' => $value
];
$detailNamaPicMarketing[] = $value;
}
$detailNamaPicMarketingJson = json_encode($detailNamaPicMarketing);
// Process detail_nomor_hp_pic_marketing
foreach ($nomorHpPicMarketing as $value) {
$detailNomorHpPicMarketing[] = [
'nomor_hp_pic_marketing' => $value
];
$detailNomorHpPicMarketing[] = $value;
}
$detailNomorHpPicMarketingJson = json_encode($detailNomorHpPicMarketing);
@@ -449,7 +421,6 @@ class KJPPController extends Controller
} else {
$validated['jenis_aset_id'] = json_encode($validated['jenis_aset_id']);
}
// Perbarui data di database
KJPP::where('id', $id)->update($validated);

View File

@@ -11,6 +11,12 @@ class LaporanController extends Controller
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::laporan.index');
}
public function sederhana_index()
{
return view('lpj::laporan.sederhana_index');

View File

@@ -0,0 +1,201 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\Lpj\Http\Requests\NocRequest;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PersetujuanPenawaran;
class NocController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
$persetujuanPenawarans = PersetujuanPenawaran::all();
return view('lpj::noc.index', compact('persetujuanPenawarans'));
}
/**
* Store a newly created resource in storage.
*/
/**
* Store a newly created resource in storage.
*/
/**
* Store a newly created resource in storage.
*/
public function store(NocRequest $request)
{
$validated = $request->validated();
$validated['updated_by'] = Auth::id();
if (request()->get('status_bayar') == "sudah_bayar") {
$validated['status'] = '1';
$status = "spk";
} else {
$status = "persetujuan-penawaran";
}
$persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate(
['penawaran_id' => $validated['penawaran_id']],
$validated,
);
$folderPath = 'noc/' . $validated['penawaran_id'];
if ($request->hasFile('bukti_ksl')) {
$persetujuanPenawaran->bukti_ksl = $request->file('bukti_ksl')->store(
$folderPath,
'public',
);
}
$persetujuanPenawaran->save();
// Update the status of the related permohonan to 'spk'
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->status = $status;
$permohonan->save();
// andy add, update status penawaran.status='spk'
// $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => $status,
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
// andy add, update status penawaran.status='spk'
}
return redirect()
->route('noc.index')->with('success', 'Penyelesaian KSL berhasil disimpan.');
}
/**
* Update the specified resource in storage.
*/
public function update(NocRequest $request, PersetujuanPenawaran $persetujuanPenawaran)
{
$validated = $request->validated();
$validated['updated_by'] = Auth::id();
$persetujuanPenawaran->update($validated);
return redirect()
->route('noc.index')->with('success', 'Persetujuan Penawaran updated successfully');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::noc.create');
}
/**
* Display the specified resource.
*/
public function show($id) {}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$persetujuanPenawaran = PersetujuanPenawaran::where('id', $id)->with(
['penawaran.detail', 'penawaran.permohonan.debiture'],
)->first();
return view('lpj::noc.form', compact('persetujuanPenawaran'));
}
/**
* Remove the specified resource from storage.
*/
public function destroy(PersetujuanPenawaran $persetujuanPenawaran)
{
$persetujuanPenawaran->delete();
return redirect()
->route('noc.index')->with('success', 'Persetujuan Penawaran deleted successfully');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('noc.view')) {
//abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.');
}
// Retrieve data from the database
$query = PersetujuanPenawaran::query();
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query
->with(
[
'penawaran.permohonan.debiture',
'penawaran.permohonan.branch',
'penawaran.detail',
'penawaran.persetujuan',
],
)->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = $request->get('page', 1);
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
}

View File

@@ -359,7 +359,7 @@ class PenilaianController extends Controller
'pembatalan' => 'Pembatalan',
'sla' => 'SLA',
];
$header = $headers[$type] ?? 'Pelaporan';
return view('lpj::penilaian.otorisator.index', compact('header'));
@@ -380,7 +380,7 @@ class PenilaianController extends Controller
return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header'));
}
public function otorisatorUpdate($id, $context)
public function otorisatorUpdate(Request $request, $id, $context)
{
$permohonan = Permohonan::find($id);
@@ -396,28 +396,30 @@ class PenilaianController extends Controller
$newStatus = $permohonan->status_bayar === 'sudah_bayar' ? 'belum_bayar' : 'sudah_bayar';
$permohonan->update([
'status_bayar' => $newStatus
'status_bayar' => $newStatus,
'keterangan' => $request->message
]);
break;
case 'pembatalan':
$permohonan->update([
'authorized_status' => 1,
'status' => 'batal',
'keterangan' => $request->message
]);
break;
case 'pelaporan':
$permohonan->update([
'status' => 'disetujui',
'status' => 'proses-laporan',
'keterangan' => $request->message
]);
break;
case 'sla':
$permohonan->update([
'status' => 'order',
'status' => 'proses-sla',
'keterangan' => $request->message
]);
break;
@@ -449,10 +451,10 @@ class PenilaianController extends Controller
// Tentukan status berdasarkan otorisator
$status = match ($otorisator) {
'Pelaporan' => 'proses laporan',
'Pelaporan' => 'proses-laporan',
'Pembayaran' => 'proses',
'Pembatalan' => 'proses',
'SLA' => 'proses',
'Pembatalan' => 'batal',
'SLA' => 'freeze',
default => '',
};
@@ -477,10 +479,13 @@ class PenilaianController extends Controller
if (!empty($otorisator)) {
if ($status == 'proses') {
$query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']);
} elseif ($status == 'proses-laporan') {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
} elseif ($status == 'batal') {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
} elseif ($status == 'freeze') {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
}
// else {
// $query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
// }
}
// Filter berdasarkan region user yang login

View File

@@ -179,7 +179,7 @@
// Retrieve data from the database
$query = Permohonan::query();
$query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');

View File

@@ -6,10 +6,10 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranDetailTenderLog;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranDetailTenderLog;
use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PersetujuanPenawaran;
class PersetujuanPenawaranController extends Controller
@@ -38,6 +38,7 @@ use Modules\Lpj\Models\Permohonan;
{
$validated = $request->validated();
$validated['created_by'] = Auth::id();
$validated['status'] = '0';
$persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate(
['penawaran_id' => $validated['penawaran_id']],
@@ -70,16 +71,16 @@ use Modules\Lpj\Models\Permohonan;
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->status = 'spk';
$permohonan->status = 'noc';
$permohonan->save();
// andy add, update status penawaran.status='spk'
// $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)
->update(['status'=>'spk',
'updated_by' => Auth::id(),
'updated_at' => now()
]);
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => 'noc',
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
// andy add, update status penawaran.status='spk'
}
@@ -88,6 +89,20 @@ use Modules\Lpj\Models\Permohonan;
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.');
}
/**
* Update the specified resource in storage.
*/
public function update(PersetujuanPenawaranRequest $request, PersetujuanPenawaran $persetujuanPenawaran)
{
$validated = $request->validated();
$validated['updated_by'] = Auth::id();
$persetujuanPenawaran->update($validated);
return redirect()
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran updated successfully');
}
/**
* Show the form for creating a new resource.
*/
@@ -101,8 +116,8 @@ use Modules\Lpj\Models\Permohonan;
*/
public function show($id)
{
$permohonan = Permohonan::find($id);
$permohonan->status='tender';
$permohonan = Permohonan::find($id);
$permohonan->status = 'tender';
$dataDetailPenawaranLog = [];
// andy add update status penawaran
@@ -110,50 +125,45 @@ use Modules\Lpj\Models\Permohonan;
// update penawaran => penawaran.status ="tender", penawaran.updated_at, penawaran.updated_by
// update permohonan => permohonan.status ="tender", permohonan.updated_at, permohonan.updated_by
// insert detail_permohonan_log
$penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
$penawaran = PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->first();
// dd($penawaran->id);
PenawaranDetailTender::where('penawaran_id', $penawaran->id)
->update(['status' => 1,
'updated_by' => Auth::id(),
'updated_at' => now()
]);
PenawaranTender::where('id', $penawaran->id)
->update(['status'=>'tender',
'updated_by' => Auth::id(),
'updated_at' => now()
]);
$detailPenawaran = PenawaranDetailTender::where('penawaran_id', $penawaran->id)
->distinct()
->get();
// log
if(sizeof($detailPenawaran)>0)
{
PenawaranDetailTender::where('penawaran_id', $penawaran->id)->update([
'status' => 1,
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
PenawaranTender::where('id', $penawaran->id)->update([
'status' => 'tender',
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
$detailPenawaran = PenawaranDetailTender::where('penawaran_id', $penawaran->id)->distinct()->get();
// log
if (sizeof($detailPenawaran) > 0) {
foreach ($detailPenawaran as $model) {
array_push($dataDetailPenawaranLog, [
'detail_penawaran_id' =>$model->id,
'kjpp_rekanan_id' =>$model->kjpp_rekanan_id,
'penawaran_id' =>$model->penawaran_id,
'no_proposal' =>$model->no_proposal,
'tgl_proposal' =>$model->tgl_proposal,
'biaya_penawaran' =>$model->biaya_penawaran,
'attachment' =>$model->attachment,
'dokumen_persetujuan' =>$model->dokumen_persetujuan,
'status' =>$model->status,
'authorized_status' =>$model->authorized_status,
'authorized_at' =>$model->authorized_at,
'authorized_at' =>$model->authorized_at,
'created_at' =>$model->created_at,
'updated_at' =>$model->updated_at,
'deleted_at' =>$model->deleted_at,
'created_by' =>$model->created_by,
'updated_by' =>$model->updated_by,
'deleted_by' =>$model->deleted_by
'detail_penawaran_id' => $model->id,
'kjpp_rekanan_id' => $model->kjpp_rekanan_id,
'penawaran_id' => $model->penawaran_id,
'no_proposal' => $model->no_proposal,
'tgl_proposal' => $model->tgl_proposal,
'biaya_penawaran' => $model->biaya_penawaran,
'attachment' => $model->attachment,
'dokumen_persetujuan' => $model->dokumen_persetujuan,
'status' => $model->status,
'authorized_status' => $model->authorized_status,
'authorized_at' => $model->authorized_at,
'authorized_at' => $model->authorized_at,
'created_at' => $model->created_at,
'updated_at' => $model->updated_at,
'deleted_at' => $model->deleted_at,
'created_by' => $model->created_by,
'updated_by' => $model->updated_by,
'deleted_by' => $model->deleted_by,
]);
}
PenawaranDetailTenderLog::insert($dataDetailPenawaranLog);
@@ -174,20 +184,6 @@ use Modules\Lpj\Models\Permohonan;
return view('lpj::persetujuan_penawaran.form', compact('permohonan'));
}
/**
* Update the specified resource in storage.
*/
public function update(PersetujuanPenawaranRequest $request, PersetujuanPenawaran $persetujuanPenawaran)
{
$validated = $request->validated();
$validated['updated_by'] = Auth::id();
$persetujuanPenawaran->update($validated);
return redirect()
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran updated successfully');
}
/**
* Remove the specified resource from storage.
*/

View File

@@ -88,7 +88,7 @@
// Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->with(['permohonan'])->get();
$data = $query->with(['permohonan.debiture'])->get();
// dd($data);
$i = 0;
foreach ($data as $obj) {

View File

@@ -36,15 +36,17 @@ use Illuminate\Support\Facades\Auth;
// Retrieve data from the database
// $query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
// $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian'])->get();
$query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
//$query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
$query = PenawaranTender::query()->with(['permohonan.user', 'permohonan.debiture', 'permohonan.branch', 'permohonan.tujuanPenilaian','permohonan.penilaian','tujuanPenilaianKjpp']);
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('penawaran.tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->whereRelation('permohonan','nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
@@ -81,34 +83,34 @@ use Illuminate\Support\Facades\Auth;
foreach($data as $obj)
{
// tanggal_permohonan
if ($obj->tanggal_permohonan) {
$data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y');
if ($obj->permohonan->tanggal_permohonan) {
$data[$i]->permohonan->tanggal_permohonan = Carbon::parse($obj->permohonan->tanggal_permohonan)->format('d M Y');
}
if($obj->penawaran->tanggal_penilaian_sebelumnya)
if($obj->tanggal_penilaian_sebelumnya)
{
$data[$i]->penawaran->tanggal_penilaian_sebelumnya = Carbon::parse($obj->penawaran->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
}
if($obj->penawaran->biaya_kjpp_sebelumnya)
if($obj->biaya_kjpp_sebelumnya)
{
$data[$i]->penawaran->biaya_kjpp_sebelumnya = formatRupiah($obj->penawaran->biaya_kjpp_sebelumnya);
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya);
}
// date_range
if($obj->penawaran->start_date && $obj->penawaran->end_date)
if($obj->start_date && $obj->end_date)
{
$data[$i]->date_range = Carbon::parse($obj->penawaran->start_date)->format('d M Y').' - '.
Carbon::parse($obj->penawaran->end_date)->format('d M Y');
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.
Carbon::parse($obj->end_date)->format('d M Y');
}
// data spk_dokumen_path
if($obj->penawaran->spk_dokumen_path)
if($obj->spk_dokumen_path)
{
$spk_dokumen_path = Storage::url($obj->penawaran->spk_dokumen_path);
$data[$i]->penawaran->spk_dokumen_path = $spk_dokumen_path;
$spk_dokumen_path = Storage::url($obj->spk_dokumen_path);
$data[$i]->spk_dokumen_path = $spk_dokumen_path;
}
$i++;
@@ -207,8 +209,8 @@ use Illuminate\Support\Facades\Auth;
$persetujuan_sla_final = '...';
if(null !==$penawaran->persetujuan)
{
$sla_resume_text = $penawaran->persetujuan->sla_resume;
$sla_final_text = $penawaran->persetujuan->sla_final;
$sla_resume_text = ceil($data->sla/2);
$sla_final_text = $data->sla;
$sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text));
$sla_final_text_terbilang = ucfirst(terbilang($sla_final_text));
@@ -324,8 +326,11 @@ use Illuminate\Support\Facades\Auth;
$persetujuan_sla_final = '...';
if(null !==$penawaran->persetujuan)
{
$sla_resume_text = $penawaran->persetujuan->sla_resume;
$sla_final_text = $penawaran->persetujuan->sla_final;
//$sla_resume_text = $penawaran->persetujuan->sla_resume;
//$sla_final_text = $penawaran->persetujuan->sla_final;
$sla_resume_text = ceil($data->sla/2);
$sla_final_text = $data->sla;
$sla_resume_text_terbilang = ucfirst(terbilang($sla_resume_text));
$sla_final_text_terbilang = ucfirst(terbilang($sla_final_text));
@@ -390,8 +395,7 @@ use Illuminate\Support\Facades\Auth;
public function download($id) {
// dokumen pdf diambil dari penawaran.spk_dokumen_path
$permohonan = Permohonan::find($id);
$document = PenawaranTender::where('nomor_registrasi','=',$permohonan->nomor_registrasi)->first();
$document = PenawaranTender::find($id);
return response()->download(storage_path('app/public/' .$document->spk_dokumen_path));
}

View File

@@ -102,6 +102,7 @@ class SurveyorController extends Controller
'tujuanPenilaian',
'penilaian',
'documents.jenisJaminan',
'documents',
])->findOrFail($id);
$surveyor = $id;
@@ -112,7 +113,7 @@ class SurveyorController extends Controller
// Get all inspeksi data for this permohonan
$inspeksiData = Inspeksi::where('permohonan_id', $id)
->get()
->keyBy('jenis_jaminan_id')
->keyBy('dokument_id')
->map(function ($item) {
return [
'data_form' => json_decode($item->data_form, true),
@@ -153,7 +154,7 @@ class SurveyorController extends Controller
$inspeksi = Inspeksi::updateOrCreate(
[
'permohonan_id' => $request->input('permohonan_id'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id')
'dokument_id' => $request->input('dokument_id')
],
[
'data_form' => json_encode($processedData),
@@ -164,6 +165,7 @@ class SurveyorController extends Controller
return response()->json([
'success' => true,
'message' => 'Data berhasil disimpan',
'data' => $processedData
], 200);
} catch (\Exception $e) {
@@ -195,7 +197,7 @@ class SurveyorController extends Controller
$pisah = array_filter(
explode(',', $action),
function($act) use ($allowedActions) {
function ($act) use ($allowedActions) {
return isset($allowedActions[trim($act)]);
}
);
@@ -227,7 +229,7 @@ class SurveyorController extends Controller
$validationRules = [
'luas' => 'required|numeric',
'permohonan_id' => 'required',
'jenis_jaminan_id' => 'required'
'dokument_id' => 'required'
];
if ($request->hasFile('foto_denah')) {
@@ -247,7 +249,7 @@ class SurveyorController extends Controller
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->where('dokument_id', $request->input('dokument_id'))
->first();
if ($inspeksi) {
@@ -261,7 +263,7 @@ class SurveyorController extends Controller
} else {
Inspeksi::create([
'permohonan_id' => $request->input('permohonan_id'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
'dokument_id' => $request->input('dokument_id'),
'denah_form' => json_encode($formatJsonDenah)
]);
}
@@ -293,7 +295,7 @@ class SurveyorController extends Controller
$inspeksi = Inspeksi::firstOrNew([
'permohonan_id' => $request->input('permohonan_id'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id')
'dokument_id' => $request->input('dokument_id')
]);
// Get existing foto_form data if it exists
@@ -303,15 +305,19 @@ class SurveyorController extends Controller
$formatFotojson = $existingData;
// Process each photo category
foreach ($photoCategories as $category => $fields) {
// Only update if new files are provided
if ($this->categoryHasNewFiles($request, $fields)) {
// Delete old files for this category only
if (isset($existingData[$category])) {
$this->deleteFilesForCategory($existingData[$category]);
}
$formatFotojson[$category] = $this->processPhotoCategory($request, $fields);
$photoField = $fields[0];
$nameField = $fields[1];
$descriptionField = $fields[2] ?? null;
if ($request->hasFile($photoField)) {
$newPhotos = $this->processPhotoCategory(
$request,
$fields,
$existingData[$category] ?? []
);
$formatFotojson[$category] = $newPhotos;
}
}
@@ -340,29 +346,40 @@ class SurveyorController extends Controller
/**
* Process a photo category and its subcategories
*/
private function processPhotoCategory(Request $request, array $fields)
private function processPhotoCategory(Request $request, array $fields, array $existingPhotos = [])
{
$result = [];
$result = $existingPhotos; // Start with existing photos
$photoField = $fields[0];
$nameField = $fields[1];
$descriptionField = $fields[2] ?? null;
if ($request->hasFile($photoField)) {
foreach ($request->file($photoField, []) as $key => $value) {
$item = [];
$item[$fields[1]] = $request->input($fields[1] . '.' . $key);
$item[$photoField] = $this->uploadFile($value, $photoField . '.' . $key);
$newFiles = $request->file($photoField, []);
$newNames = $request->input($nameField, []);
$newDescriptions = $descriptionField ? $request->input($descriptionField, []) : [];
if (isset($fields[2])) {
$item[$fields[2]] = $request->input($fields[2] . '.' . $key);
// Process each new file
foreach ($newFiles as $key => $file) {
// Create new photo entry
$newPhotoEntry = [
$nameField => $newNames[$key] ?? '', // Use new name if provided
$photoField => $this->uploadFile($file, $photoField . '.' . $key)
];
// Add description if field exists
if ($descriptionField) {
$newPhotoEntry[$descriptionField] = $newDescriptions[$key] ?? '';
}
$result[] = $item;
// Add to result
$result[] = $newPhotoEntry;
}
}
return $result;
}
private function categoryHasNewFiles(Request $request, array $fields): bool
{
$photoField = $fields[0]; // First element is usually the photo field
@@ -398,24 +415,24 @@ class SurveyorController extends Controller
$maxSize = getMaxFileSize('Foto');
return $request->validate([
'permohonan_id' => 'required',
'jenis_jaminan_id' => 'required',
'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'dokument_id' => 'required',
'pendamping' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'foto_objek.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_objek.*' => 'required|string|max:255',
'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_lingkungan.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_lingkungan.*' => 'required|string|max:255',
'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_rute.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_rute.*' => 'required|string|max:255',
'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'lantai.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_lantai_unit.*' => 'nullable|string|max:255',
'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_lantai_unit.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_rute_lainnya.*' => 'nullable|string',
'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_rute_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'foto_lantai_lainnya.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_lantai_lainnya.*' => 'nullable|string|max:255',
'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_basement.*' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_basement.*' => 'nullable|string|max:255',
'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:'. $maxSize,
'foto_gerbang' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg,webp,bmp,tiff,heic,heif|max:'. $maxSize,
'name_gerbang' => 'nullable|string|max:255',
]);
}
@@ -463,7 +480,9 @@ class SurveyorController extends Controller
{
try {
// Get all inspeksi records for this permohonan
$inspeksiRecords = Inspeksi::where('permohonan_id', $id)->get();
$inspeksiRecords = Inspeksi::with(['dokument.jenisJaminan'])
->where('permohonan_id', $id)
->get();
if ($inspeksiRecords->isEmpty()) {
return response()->json(['buttonDisable' => true]);
@@ -475,23 +494,20 @@ class SurveyorController extends Controller
$denahForm = json_decode($inspeksi->denah_form, true);
$dataPembanding = json_decode($inspeksi->data_pembanding, true);
// Get jenis jaminan to check if it needs denah
$jenisJaminan = JenisJaminan::find($inspeksi->jenis_jaminan_id);
$jenisJaminan = $inspeksi->dokument->jenisJaminan->name ?? '';
$isTanahBangunan = !in_array(
strtoupper($jenisJaminan->name ?? ''),
['KAPAL', 'PESAWAT', 'KENDARAAN', 'ALAT BERAT']
);
// Check if required forms are empty or incomplete
if (empty($dataForm) || empty($fotoForm)) {
return response()->json(['buttonDisable' => true]);
}
$isInvalid =
empty($dataForm) ||
empty($fotoForm) ||
(($isTanahBangunan && empty($denahForm)) ||
empty($dataPembanding));
if ($isTanahBangunan && empty($denahForm)) {
return response()->json(['buttonDisable' => true]);
}
if (empty($dataPembanding)) {
if ($isInvalid) {
return response()->json(['buttonDisable' => true]);
}
}
@@ -557,7 +573,7 @@ class SurveyorController extends Controller
]);
$data['status'] = 'success';
$data['message']= 'Jadwal '.$request->noReg.' berhasil di aprove';
$data['message'] = 'Jadwal '.$request->noReg.' berhasil di aprove';
} catch (\Exception $e) {
$data['status'] = 'error';
$data['message'] = 'Gagal membuat jadwal: ' . $e->getMessage();
@@ -585,9 +601,9 @@ class SurveyorController extends Controller
$fotoPembanding = $request->file('foto_objek_pembanding') ?? [];
$existingData = null;
if ($request->has('permohonan_id') && $request->has('jenis_jaminan_id')) {
if ($request->has('permohonan_id') && $request->has('dokument_id')) {
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->where('dokument_id', $request->input('dokument_id'))
->first();
if ($inspeksi) {
@@ -682,7 +698,7 @@ class SurveyorController extends Controller
];
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->where('dokument_id', $request->input('dokument_id'))
->first();
if ($inspeksi) {
@@ -699,12 +715,12 @@ class SurveyorController extends Controller
$dataForm = json_decode($inspeksi->data_form, true) ?: [];
// Inisialisasi struktur data jika belum ada
if(!isset($dataForm['bangunan'])) {
if (!isset($dataForm['bangunan'])) {
$dataForm['bangunan'] = [];
$needsSave = true;
}
if(!isset($dataForm['tanah'])) {
if (!isset($dataForm['tanah'])) {
$dataForm['tanah'] = [];
$needsSave = true;
}
@@ -721,17 +737,35 @@ class SurveyorController extends Controller
// Fields untuk tanah
if (in_array($field, ['luas_tanah'])) {
$cekLuas = $dataForm['tanah']['luas_tanah'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
$dataForm['tanah'][$field][$cekLuas] = $newValue;
}
// Fields untuk bangunan
else if (in_array($field, ['luas_tanah_bagunan'])) {
// Pastikan struktur array ada sebelum diakses
if (!isset($dataForm['tanah']['luas_tanah'])) {
$dataForm['tanah']['luas_tanah'] = [];
}
$cekBanguan = $dataForm['bangunan']['luas_tanah_bagunan'] == 'sesuai' ? 'sesuai' : 'tidak sesuai';
$dataForm['bangunan'][$field][$cekBanguan] = $newValue;
$cekLuas = isset($dataForm['tanah']['luas_tanah']['sesuai']) && $dataForm['tanah']['luas_tanah']['sesuai'] === 'sesuai'
? 'sesuai'
: 'tidak sesuai';
$dataForm['tanah']['luas_tanah'][$cekLuas] = $newValue;
$needsSave = true;
}
// Fields untuk bangunan
elseif (in_array($field, ['luas_tanah_bagunan'])) {
if (!isset($dataForm['bangunan']['luas_tanah_bagunan'])) {
$dataForm['bangunan']['luas_tanah_bagunan'] = [];
}
$cekBanguan = isset($dataForm['bangunan']['luas_tanah_bagunan']['sesuai']) && $dataForm['bangunan']['luas_tanah_bagunan']['sesuai'] === 'sesuai'
? 'sesuai'
: 'tidak sesuai';
$dataForm['bangunan']['luas_tanah_bagunan'][$cekBanguan] = $newValue;
$needsSave = true;
}
// Fields untuk alamat dalam asset
else if (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) {
elseif (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) {
if (!isset($dataForm['asset']['alamat'])) {
$dataForm['asset']['alamat'] = [];
@@ -745,7 +779,7 @@ class SurveyorController extends Controller
$dataForm['asset']['alamat'][$alamatStatus][$field] = $newValue;
}
// Jenis asset dalam asset
else if ($field === 'jenis_asset') {
elseif ($field === 'jenis_asset') {
$assetStatus = $request->input('asset_status', 'sesuai');
$dataForm['asset']['jenis_asset'] = [
$assetStatus => $newValue
@@ -809,7 +843,7 @@ class SurveyorController extends Controller
$inspeksi = Inspeksi::updateOrCreate(
[
'permohonan_id' => $formattedData['permohonan_id'],
'jenis_jaminan_id' => $formattedData['jenis_jaminan_id']
'dokument_id' => $formattedData['dokument_id']
],
[
'data_pembanding' => json_encode($formattedData),
@@ -828,7 +862,7 @@ class SurveyorController extends Controller
$validator = $request->validate([
'permohonan_id' => 'required|exists:permohonan,id',
'type' => 'required|string',
'jenis_jaminan_id' => 'required',
'dokument_id' => 'required',
'foto_objek' => 'nullable|image|max:'.$maxSize,
'foto_objek_pembanding.*' => 'nullable|image|max:'.$maxSize,
]);
@@ -843,7 +877,7 @@ class SurveyorController extends Controller
// Update foto_form
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))
->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))
->where('dokument_id', $request->input('dokument_id'))
->first();
if ($inspeksi) {
@@ -868,7 +902,7 @@ class SurveyorController extends Controller
$formattedData = [
'permohonan_id' => $request->input('permohonan_id'),
'type' => $request->input('type'),
'jenis_jaminan_id' => $request->input('jenis_jaminan_id'),
'dokument_id' => $request->input('dokument_id'),
'objek_penilaian' => $objekPenilaian,
'data_pembanding' => $this->formatDataPembanding($request)
];
@@ -899,9 +933,21 @@ class SurveyorController extends Controller
* Form inspeksi.
*/
public function formInspeksi($id, $jaminanId)
public function formInspeksi(Request $request, $id)
{
$permohonan = $this->getPermohonanJaminanId($id, $jaminanId);
$validated = $request->validate([
'form' => 'required|in:create-inspeksi',
'inspeksi' => 'required|exists:permohonan,id',
'dokument' => 'required',
'jenisjaminan' => 'required'
]);
$dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
$link_url_region = Teams::with('regions', 'teamsUsers')
->whereHas('teamsUsers', function ($query) {
$query->where('user_id', Auth::user()->id);
@@ -915,7 +961,7 @@ class SurveyorController extends Controller
$surveyor = $id;
$basicData = $this->getCommonData();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first();
$forminspeksi = null;
if ($inpeksi) {
$forminspeksi = json_decode($inpeksi->data_form, true);
@@ -962,13 +1008,23 @@ class SurveyorController extends Controller
* Denah.
*/
public function denah($id, $jaminanId)
public function denah(Request $request, $id)
{
$permohonan = $this->getPermohonanJaminanId($id, $jaminanId);
$validated = $request->validate([
'form' => 'required|in:create-denah',
'denah' => 'required|exists:permohonan,id',
'dokument' => 'required',
'jenisjaminan' => 'required'
]);
$dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
$denah = null;
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first();
$formDenah = null;
if ($inpeksi) {
$formDenah = json_decode($inpeksi->denah_form, true);
@@ -982,14 +1038,25 @@ class SurveyorController extends Controller
* Foto.
*/
public function foto($id, $jaminanId)
public function foto(Request $request, $id)
{
$permohonan = $this->getPermohonanJaminanId($id, $jaminanId);
$validated = $request->validate([
'form' => 'required|in:create-foto',
'foto' => 'required|exists:permohonan,id',
'dokument' => 'required',
'jenisjaminan' => 'required'
]);
$dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
$surveyor = $id;
$branches = Branch::all();
$provinces = Province::all();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('jenis_jaminan_id', $jaminanId)->first();
$inpeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $dokumentId)->first();
$formFoto = null;
if ($inpeksi) {
@@ -1003,25 +1070,28 @@ class SurveyorController extends Controller
* Data pembanding.
*/
public function dataPembanding($id, $jaminanId)
public function dataPembanding(Request $request, $id)
{
try {
// Ambil data permohonan dengan eager loading
$permohonan = Permohonan::with([
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
'penilaian'
])->findOrFail($id);
$validated = $request->validate([
'form' => 'required|in:data-pembanding',
'pembanding' => 'required|exists:permohonan,id',
'dokument' => 'required',
'jenisjaminan' => 'required'
]);
$dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
// Ambil data inspeksi
$inspeksi = Inspeksi::where([
'permohonan_id' => $id,
'jenis_jaminan_id' => $jaminanId
'dokument_id' => $dokumentId
])->first();
// Inisialisasi variabel
@@ -1496,7 +1566,7 @@ class SurveyorController extends Controller
}
private function getPermohonanJaminanId($id, $jaminanId)
public function getPermohonanJaminanId($id, $dokumentId, $jaminanId)
{
return Permohonan::with([
'user',
@@ -1507,15 +1577,11 @@ class SurveyorController extends Controller
'branch',
'tujuanPenilaian',
'penilaian',
'debiture.documents.jenisJaminan',
'debiture.documents' => function ($query) use ($jaminanId) {
$query->where('jenis_jaminan_id', $jaminanId);
'debiture.documents' => function ($query) use ($dokumentId, $jaminanId) {
$query->where('id', $dokumentId)
->where('jenis_jaminan_id', $jaminanId);
}
])
->whereHas('debiture.documents', function ($query) use ($jaminanId) {
$query->where('jenis_jaminan_id', $jaminanId);
})
->findOrFail($id);
])->findOrFail($id);
}
@@ -1763,10 +1829,8 @@ class SurveyorController extends Controller
'sifat_bangunan' => $data['sifat_bangunan'] ?? null,
'sifat_bangunan_input' => $data['sifat_bangunan_input'] ?? null,
'spesifikasi_bangunan' => $result ?? null,
'sarana_pelengkap' => $this->mapArrayWithInputs(
$data['sarana_pelengkap'] ?? [],
$data['sarana_pelengkap_input'] ?? []
),
'sarana_pelengkap' => $data['sarana_pelengkap'] ?? null,
'sarana_pelengkap_input' => $data['sarana_pelengkap_input'] ?? null,
],
];
}
@@ -1808,10 +1872,8 @@ class SurveyorController extends Controller
'jarak_tps' => $data['jarak_tps'] ?? null,
'nama_tps' => $data['nama_tps'] ?? null,
'merupakan_daerah' => $data['merupakan_daerah'] ?? null,
'fasilitas_dekat_object' => $this->mapArrayWithInputs(
$data['fasilitas_dekat_object'] ?? [],
$data['fasilitas_dekat_object_input'] ?? []
),
'fasilitas_dekat_object' => $data['fasilitas_dekat_object'] ?? null,
'fasilitas_dekat_object_input' => $data['fasilitas_dekat_object_input'] ?? null,
]
];
}
@@ -1823,10 +1885,8 @@ class SurveyorController extends Controller
'fakta_positif' => $data['fakta_positif'] ?? null,
'fakta_negatif' => $data['fakta_negatif'] ?? null,
'rute_menuju' => $data['rute_menuju'] ?? null,
'batas_batas' => $this->mapArrayWithInputs(
$data['batas_batas'] ?? [],
$data['batas_batas_input'] ?? []
),
'batas_batas' => $data['batas_batas'] ?? null,
'batas_batas_input' => $data['batas_batas_input'] ?? null,
'kondisi_lingkungan' => $data['kondisi_lingkungan'] ?? null,
'kondisi_lain_bangunan' => $data['kondisi_lain_bangunan'] ?? null,
'informasi_dokument' => $data['informasi_dokument'] ?? null,
@@ -1844,7 +1904,7 @@ class SurveyorController extends Controller
];
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('jenis_jaminan_id', $request->input('jenis_jaminan_id'))->first();
$inspeksi = Inspeksi::where('permohonan_id', $request->input('permohonan_id'))->where('dokument_id', $request->input('dokument_id'))->first();
$fotoTypes = [
@@ -2278,7 +2338,7 @@ class SurveyorController extends Controller
*/
private function uploadFile($file, $type)
public function uploadFile($file, $type)
{
if (!$file->isValid()) {
throw new Exception("Invalid file upload for {$type}");
@@ -2306,8 +2366,10 @@ class SurveyorController extends Controller
{
$result = [];
foreach ($keys as $index => $key) {
$result[$key] = $values[$index] ?? null;
foreach ($keys as $key) {
// Jika checkbox dicentang, ambil nilai input yang sesuai
// Gunakan nilai dari $values berdasarkan nama checkbox
$result[$key] = $values[$key] ?? null;
}
return $result;
@@ -2315,6 +2377,7 @@ class SurveyorController extends Controller
/**
* Helper method generic untuk mengambil data field
*

View File

@@ -24,22 +24,31 @@ class KJPPRequest extends FormRequest
'nomor_telepon_kantor' => 'nullable|numeric|digits_between:8,15',
'email_kantor' => 'required|email',
'detail_email_kantor' => 'nullable',
'detail_email_kantor.email_kantor.*' => 'email',
'nama_pimpinan' => 'required|string|not_regex:/^\d+$/|max:255',
'detail_nama_pimpinan' => 'nullable',
'detail_nama_pimpinan.nama_pimpinan.*' => 'string|not_regex:/^\d+$/|max:255',
'nomor_hp_pimpinan' => 'required|numeric|digits_between:10,15',
'detail_nomor_pic_pimpinan' => 'nullable',
'detail_nomor_hp_pimpinan' => 'nullable',
'detail_nomor_hp_pimpinan.nomor_hp_pimpinan.*' => 'numeric|digits_between:10,15',
'nama_pic_reviewer' => 'nullable|string|not_regex:/^\d+$/|max:255',
'detail_nama_pic_reviewer' => 'nullable',
'detail_nama_pic_reviewer.nama_pic_reviewer.*' => 'string|not_regex:/^\d+$/|max:255',
'nomor_hp_pic_reviewer' => 'nullable|numeric|digits_between:10,15',
'detail_nomor_hp_pic_reviewer' => 'nullable',
'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.*' => 'numeric|digits_between:10,15',
'nama_pic_admin' => 'nullable|string|not_regex:/^\d+$/|max:255',
'detail_nama_pic_admin' => 'nullable',
'detail_nama_pic_admin.nama_pic_admin.*' => 'string|not_regex:/^\d+$/|max:255',
'nomor_hp_pic_admin' => 'nullable|numeric|digits_between:10,15',
'detail_nomor_hp_pic_admin' => 'nullable',
'detail_nomor_hp_pic_admin.nomor_hp_pic_admin.*' => 'numeric|digits_between:10,15',
'nama_pic_marketing' => 'nullable|string|not_regex:/^\d+$/|max:255',
'detail_nama_pic_marketing' => 'nullable',
'detail_nama_pic_marketing.nama_pic_marketing.*' => 'string|not_regex:/^\d+$/|max:255',
'nomor_hp_pic_marketing' => 'nullable|numeric|digits_between:10,15',
'detail_nomor_hp_pic_marketing' => 'nullable',
'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.*' => 'numeric|digits_between:10,15',
'ijin_usaha_id' => 'required|array',
'ijin_usaha_id.*' => 'exists:ijin_usaha,code',
'jenis_aset_id' => 'nullable|array',
@@ -83,20 +92,33 @@ class KJPPRequest extends FormRequest
'nomor_telepon_kantor.digits_between' => 'Nomor Telepon Kantor minimum 8 digit dan maksimum 15 digit!',
'email_kantor.required' => 'Email Kantor Wajib diisi!',
'email_kantor.email' => 'Email Kantor tidak valid!',
'detail_email_kantor.email_kantor.*.email' => 'Email Kantor tidak valid!',
'nama_pimpinan.required' => 'Nama Pimpinan Wajib diisi!',
'nama_pimpinan.not_regex' => 'Nama Pimpinan harus berupa huruf!',
'detail_nama_pimpinan.nama_pimpinan.*.not_regex' => 'Nama Pimpinan harus berupa huruf!',
'nomor_hp_pimpinan.required' => 'Nomor HP Pimpinan Wajib diisi!',
'nomor_hp_pimpinan.numeric' => 'Nomor HP Pimpinan harus berupa angka!',
'nomor_hp_pimpinan.digits_between' => 'Nomor HP Pimpinan minimum 10 digit dan maksimum 15 digit!',
'detail_nomor_hp_pimpinan.nomor_hp_pimpinan.*.numeric' => 'Nomor HP Pimpinan harus berupa angka!',
'detail_nomor_hp_pimpinan.nomor_hp_pimpinan.*.digits_between' => 'Nomor HP Pimpinan minimum 10 digit dan maksimum 15 digit!',
'nama_pic_reviewer.not_regex' => 'Nama PIC Reviewer harus berupa huruf!',
'detail_nama_pic_reviewer.nama_pic_reviewer.*.not_regex' => 'Nama PIC Reviewer harus berupa huruf!',
'nomor_hp_pic_reviewer.numeric' => 'Nomor HP PIC Reviewer harus berupa angka!',
'nomor_hp_pic_reviewer.digits_between' => 'Nomor HP PIC Reviewer minimum 10 digit dan maksimum 15 digit!',
'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.*.numeric' => 'Nomor HP PIC Reviewer harus berupa angka!',
'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.*.digits_between' => 'Nomor HP PIC Reviewer minimum 10 digit dan maksimum 15 digit!',
'nama_pic_admin.not_regex' => 'Nama PIC Admin harus berupa huruf!',
'detail_nama_pic_admin.nama_pic_admin.*.not_regex' => 'Nama PIC Admin harus berupa huruf!',
'nomor_hp_pic_admin.numeric' => 'Nomor HP PIC Admin harus berupa angka!',
'nomor_hp_pic_admin.digits_between' => 'Nomor HP PIC Admin minimum 10 digit dan maksimum 15 digit!',
'detail_nomor_hp_pic_admin.nomor_hp_pic_admin.*.numeric' => 'Nomor HP PIC Admin harus berupa angka!',
'detail_nomor_hp_pic_admin.nomor_hp_pic_admin.*.digits_between' => 'Nomor HP PIC Admin minimum 10 digit dan maksimum 15 digit!',
'nama_pic_marketing.not_regex' => 'Nama PIC Marketing harus berupa huruf!',
'detail_nama_pic_marketing.nama_pic_marketing.*.not_regex' => 'Nama PIC Marketing harus berupa huruf!',
'nomor_hp_pic_marketing.numeric' => 'Nomor HP PIC Marketing harus berupa angka!',
'nomor_hp_pic_marketing.digits_between' => 'Nomor HP PIC Marketing minimum 10 digit dan maksimum 15 digit!',
'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.*.numeric' => 'Nomor HP PIC Marketing harus berupa angka!',
'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.*.digits_between' => 'Nomor HP PIC Marketing minimum 10 digit dan maksimum 15 digit!',
'ijin_usaha_id.required' => 'Ijin Usaha Wajib diisi!',
'attachment.mimes' => 'Attachment harus berformat pdf!',
'attachment.max' => 'Attachment berukuran maksimum 1 MB!',

View File

@@ -0,0 +1,23 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class NocRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'penawaran_id' => 'nullable|exists:penawaran,id',
'nominal_bayar' => 'nullable|numeric|min:0',
'bukti_ksl' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240',
'status' => 'nullable|boolean',
];
}
}

View File

@@ -23,6 +23,7 @@
'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240',
'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240',
'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240',
'nominal_bayar' => 'nullable|numeric|min:0',
'status' => 'nullable|boolean',
'authorized_status' => 'boolean',
'authorized_at' => 'nullable|date',

View File

@@ -67,4 +67,8 @@
public function detail(){
return $this->hasMany(DetailDokumenJaminan::class, 'dokumen_jaminan_id', 'id');
}
public function inspeksi()
{
return $this->hasMany(Inspeksi::class, 'dokument_id', 'id');
}
}

View File

@@ -14,20 +14,15 @@ class Inspeksi extends Model
/**
* The attributes that are mass assignable.
*/
protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','jenis_jaminan_id','data_pembanding'];
protected $fillable = ['data_form', 'foto_form', 'denah_form','permohonan_id', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by', 'created_by', 'updated_by', 'deleted_by','dokument_id','data_pembanding'];
public function permohonan()
{
return $this->belongsTo(Permohonan::class, 'permohonan_id');
}
public function jenis_jaminan()
public function dokument()
{
return $this->belongsTo(JenisJaminan::class, 'jenis_jaminan_id');
return $this->belongsTo(DokumenJaminan::class, 'dokument_id');
}
// protected static function newFactory(): InspeksiFactory
// {
// // return InspeksiFactory::new();
// }
}

42
app/Models/Penilai.php Normal file
View File

@@ -0,0 +1,42 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Modules\Lpj\Database\Factories\PenilaiFactory;
class Penilai extends Model
{
use HasFactory;
protected $table = 'penilai';
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'dokument_id',
'permohonan_id',
'inspeksi_id',
'kertas_kerja',
'resume',
'lpj',
'type',
'memo',
];
// protected static function newFactory(): PenilaiFactory
// {
// // return PenilaiFactory::new();
// }
public function dokument(){
return $this->belongsTo(DokumenJaminan::class);
}
public function permohonan(){
return $this->belongsTo(Permohonan::class);
}
public function inspeksi(){
return $this->belongsTo(Inspeksi::class);
}
}

View File

@@ -19,6 +19,7 @@
'file_persetujuan_penawaran',
'surat_representasi',
'bukti_bayar',
'nominal_bayar',
'status',
'authorized_status',
'authorized_at',

View File

@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class () extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('penilai', function (Blueprint $table) {
$table->id();
$table->string('type')->nullable();
$table->json('lpj')->nullable();
$table->json('resume')->nullable();
$table->json('memo')->nullable();
$table->string('kertas_kerja')->nullable();
$table->unsignedBigInteger('dokument_id')->nullable();
$table->unsignedBigInteger('permohonan_id')->nullable();
$table->unsignedBigInteger('inspeksi_id')->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->char('authorized_status', 1)->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
$table->foreign('dokument_id')->references('id')->on('dokumen_jaminan')->onDelete('set null');
$table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('set null');
$table->foreign('inspeksi_id')->references('id')->on('inspeksi')->onDelete('set null');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('penilai');
}
};

View File

@@ -0,0 +1,44 @@
<?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) {
if (Schema::hasColumn('inspeksi', 'jenis_jaminan_id')) {
$table->dropForeign(['jenis_jaminan_id']);
}
if (Schema::hasColumn('inspeksi', 'jenis_jaminan_id')) {
$table->dropColumn('jenis_jaminan_id');
}
$table->unsignedBigInteger('dokument_id')->nullable()->after('permohonan_id');
$table->foreign('dokument_id')->references('id')->on('dokumen_jaminan')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('inspeksi', function (Blueprint $table) {
$table->dropForeign(['dokument_id']);
$table->dropColumn('dokument_id');
$table->unsignedBigInteger('jenis_jaminan_id')->nullable()->after('permohonan_id');
$table->foreign('jenis_jaminan_id')->references('id')->on('jenis_jaminan')->onDelete('cascade');
});
}
};

View File

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

View File

@@ -0,0 +1,31 @@
<?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('persetujuan_penawaran', function (Blueprint $table) {
$table->string('bukti_ksl')->nullable()->after('nominal_bayar');
$table->string('catatan_noc')->nullable()->after('bukti_ksl');
});
}
/**
* Reverse the migrations.
*/
public function down()
: void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->dropColumn('bukti_ksl');
$table->dropColumn('catatan_noc');
});
}
};

View File

@@ -16,7 +16,7 @@
{
"title": "Permohonan",
"path": "permohonan",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-questionnaire-tablet text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -29,7 +29,7 @@
{
"title": "Persetujuan Penawaran",
"path": "persetujuan-penawaran",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-double-check text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -38,10 +38,22 @@
"pemohon-ao"
]
},
{
"title": "NOC",
"path": "noc",
"icon": "ki-filled ki-two-credit-cart text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"noc"
]
},
{
"title": "Registrasi",
"path": "registrasi",
"icon": "ki-filled ki-file-added text-lg",
"icon": "ki-filled ki-add-files text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -53,7 +65,7 @@
{
"title": "Tender",
"path": "tender",
"icon": "ki-filled ki-category text-lg",
"icon": "ki-filled ki-briefcase text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -89,7 +101,7 @@
{
"title": "Otorisasi Tender",
"path": "otorisasitender",
"icon": "ki-filled ki-category text-lg",
"icon": "ki-filled ki-brifecase-tick text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -118,7 +130,7 @@
{
"title": "SPK",
"path": "spk",
"icon": "ki-filled ki-file-added text-lg",
"icon": "ki-filled ki-document text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -130,7 +142,7 @@
{
"title": "Registrasi Final",
"path": "registrasifinal",
"icon": "ki-filled ki-file-added text-lg",
"icon": "ki-filled ki-file-added text-lg text-success",
"classes": "",
"attributes": [],
"permission": "",
@@ -139,23 +151,10 @@
"admin"
]
},
{
"title": "Pembatalan",
"path": "",
"icon": "ki-filled ki-file-deleted text-lg text-danger",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
]
},
{
"title": "Data Debitur",
"path": "debitur",
"icon": "ki-filled ki-people text-lg",
"icon": "ki-filled ki-people text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -168,7 +167,7 @@
{
"title": "Authorization",
"path": "authorization",
"icon": "ki-filled ki-security-user text-lg",
"icon": "ki-filled ki-security-user text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -180,7 +179,7 @@
{
"title": "Assignment",
"path": "penilaian",
"icon": "ki-filled ki-badge text-lg",
"icon": "ki-filled ki-badge text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -192,7 +191,7 @@
{
"title": "Team Activity",
"path": "activity.progres",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-calendar-tick text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -204,7 +203,7 @@
{
"title": "Otorisator",
"path": "otorisator",
"icon": "ki-filled ki-security-user text-lg",
"icon": "ki-filled ki-security-user text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
@@ -262,7 +261,7 @@
{
"title": "Surveyor",
"path": "surveyor",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-questionnaire-tablet text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -274,7 +273,7 @@
{
"title": "Activity",
"path": "activity",
"icon": "ki-filled ki-calendar-edit text-lg",
"icon": "ki-filled ki-calendar-edit text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -289,7 +288,7 @@
{
"title": "Penilai",
"path": "penilai",
"icon": "ki-filled ki-brush text-lg",
"icon": "ki-filled ki-brush text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -301,7 +300,7 @@
{
"title": "Laporan",
"path": "laporan",
"icon": "ki-filled ki-filter-tablet text-lg",
"icon": "ki-filled ki-filter-tablet text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -311,39 +310,12 @@
"pemohon-eo",
"admin",
"senior-officer"
],
"sub": [
{
"title": "Sederhana",
"path": "laporan.sederhana",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Standard",
"path": "laporan.standard",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo",
"admin",
"senior-officer"
]
}
]
},
{
"title": "Resume",
"path": "resume",
"icon": "ki-filled ki-questionnaire-tablet text-lg",
"icon": "ki-filled ki-notepad text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
@@ -358,16 +330,13 @@
{
"title": "Basic Data",
"path": "basicdata",
"icon": "ki-filled ki-category text-lg",
"icon": "ki-filled ki-category text-lg text-primary",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo",
"admin",
"surveyor"
"admin"
],
"sub": [
{
@@ -378,8 +347,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -390,8 +358,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -402,8 +369,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -414,8 +380,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -426,8 +391,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -438,8 +402,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -450,8 +413,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -462,8 +424,7 @@
"permission": "",
"roles": [
"administrator",
"pemohon-ao",
"pemohon-eo"
"admin"
]
},
{
@@ -473,7 +434,8 @@
"attributes": [],
"permission": "",
"roles": [
"administrator"
"administrator",
"admin"
]
},
{
@@ -483,7 +445,8 @@
"attributes": [],
"permission": "",
"roles": [
"administrator"
"administrator",
"admin"
]
},
{
@@ -494,8 +457,7 @@
"permission": "",
"roles": [
"administrator",
"admin",
"senior-officer"
"admin"
]
},
{
@@ -506,7 +468,7 @@
"permission": "",
"roles": [
"administrator",
"senior-officer"
"admin"
]
},
{
@@ -517,8 +479,7 @@
"permission": "",
"roles": [
"administrator",
"admin",
"senior-officer"
"admin"
]
},
{
@@ -584,7 +545,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -595,7 +556,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -606,7 +567,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -617,7 +578,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -628,7 +589,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -639,7 +600,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -650,7 +611,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -661,7 +622,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -672,52 +633,64 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
"title": "Jenis Unit",
"path": "basicdata.jenis-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Bentuk Unit",
"path": "basicdata.bentuk-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Merupakan Daerah",
"path": "basicdata.merupakan-daerah",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Fasilitas Umum Dekat Objek",
"path": "basicdata.fasilitas-objek",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Posisi Unit",
"path": "basicdata.posisi-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{
"title": "Jenis Unit",
"path": "basicdata.jenis-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Bentuk Unit",
"path": "basicdata.bentuk-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Merupakan Daerah",
"path": "basicdata.merupakan-daerah",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Fasilitas Umum Dekat Objek",
"path": "basicdata.fasilitas-objek",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Posisi Unit",
"path": "basicdata.posisi-unit",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
},
{
"title": "Lalu Lintas Sekitar",
"path": "basicdata.lalu-lintas-lokasi",
@@ -726,7 +699,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -737,7 +710,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -748,7 +721,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -759,7 +732,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -770,7 +743,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -781,7 +754,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -792,7 +765,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -803,7 +776,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -814,7 +787,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -825,7 +798,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -836,7 +809,7 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
@@ -847,17 +820,20 @@
"permission": "",
"roles": [
"administrator",
"surveyor"
"admin"
]
},
{
"title": "Terletak Di Area",
"path": "basicdata.terletak-area",
"classes": "",
"attributes": [],
"permission": "",
"roles": ["administrator","surveyor"]
}
{
"title": "Terletak Di Area",
"path": "basicdata.terletak-area",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
}
]
}
],

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="ijin-table" data-api-url="{{ route('basicdata.ijin_usaha.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -55,76 +55,7 @@
</div>
<div class="card grow" id="activity_2024">
<div class="card-header">
<h3 class="text-md font-medium text-gray-900">
Status Activity
</h3>
</div>
<div class="card-body">
<div class="flex flex-col">
@foreach ($status_permohonan as $index => $status)
{{-- Cek apakah status adalah "Revisi" dan status permohonan tidak sama, maka tidak ditampilkan --}}
@if (strtolower($status->name) == 'revisi' && strtolower($status->name) != strtolower($permohonan->status))
@continue
@endif
<div class="flex items-start relative">
@if ($index > 0)
<div
class="w-9 left-0 top-9 absolute bottom-0 translate-x-1/2
{{ strtolower($status->name) == strtolower($permohonan->status) ? 'border-l border-l-primary' : 'border-l border-l-gray-300' }}">
</div>
@endif
<div
class="flex items-center justify-center shrink-0 rounded-full
{{ strtolower($status->name) == strtolower($permohonan->status) ? 'btn-outline btn-primary' : 'bg-gray-100 border-gray-300 text-gray-600' }}
size-9">
@switch(strtolower($status->name))
@case('preregister')
<i class="ki-filled ki-note-2 text-base"></i>
@break
@case('order')
<i class="ki-filled ki-handcart text-base"></i>
@break
@case('revisi')
<i class="ki-filled ki-notepad-edit text-base"></i>
@break
@case('register')
<i class="ki-filled ki-note-2 text-base"></i>
@break
@case('assign')
<i class="ki-filled ki-file-added"></i>
@break
@case('survey')
<i class="ki-filled ki-map text-base"></i>
@break
@case('proses laporan')
<i class="ki-filled ki-paper-plane text-base"></i>
@break
@case('approved')
<i class="ki-filled ki-check text-base"></i>
@break
@case('delivered')
<i class="ki-filled ki-delivery-3 text-base"></i>
@break
@default
<i class="ki-filled ki-information text-base"></i>
@endswitch
</div>
@include('lpj::activity.components.status')
</div>
@endforeach
</div>
</div>
<div class="card-footer justify-center">
<!-- Add footer content if necessary -->
</div>
@include('lpj::component.history-permohonan')
</div>
</div>
@endsection

View File

@@ -95,7 +95,7 @@
</div>
</div>
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('activity.datatables') }}">
<div class="card-body">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="arah-mata-angin-table" data-api-url="{{ route('basicdata.arah-mata-angin.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="arah-mata-angin-table" data-api-url="{{ route('basicdata.arah-mata-angin.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Arah Mata Angin

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="authorization-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="authorization-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Authorization

View File

@@ -167,10 +167,14 @@
</div>
<div data-accordion="true">
@foreach($permohonan->debiture->documents as $dokumen)
<div class="accordion-item [&:not(:last-child)]:border-b border-b-gray-200" data-accordion-item="true" id="accordion_detail_jaminan">
<div class="accordion-item {{ count($permohonan->debiture->documents) == 1 ? 'active' : '' }} [&:not(:last-child)]:border-b border-b-gray-200" data-accordion-item="true" id="accordion_detail_jaminan">
<button class="accordion-toggle py-4 group mx-8" data-accordion-toggle="#accordion_detail_jaminan_{{ $loop->index }}">
<span class="text-base text-gray-900 font-medium">
Jaminan {{ $loop->index + 1 }}
@if(count($permohonan->debiture->documents) > 1)
Jaminan {{ $loop->index + 1 }}
@else
Jaminan
@endif
</span>
<i class="ki-outline ki-plus text-gray-600 text-2sm accordion-active:hidden block">
</i>
@@ -178,7 +182,7 @@
</i>
</button>
<div class="accordion-content hidden" id="accordion_detail_jaminan_{{ $loop->index }}">
<div class="accordion-content {{ count($permohonan->debiture->documents) > 1 ? 'hidden' : '' }}" id="accordion_detail_jaminan_{{ $loop->index }}">
<div class="card-body lg:py-7.5 grid grid-cols-2">
<div class="mb-5">

View File

@@ -29,7 +29,6 @@
@case('order')
<i class="ki-filled ki-handcart text-base"></i>
@break
@case('revisi')
<i class="ki-filled ki-notepad-edit text-base"></i>
@break
@@ -59,7 +58,7 @@
@endswitch
</div>
<div class="ml-3 mb-5">
<span class="text-sm text-gray-700 capitalize font-medium">{{ $activity->status }}</span>
<span class="text-sm text-gray-700 capitalize font-medium">{{ str_replace('-',' ',$activity->status) }}</span>
<p class="text-xs text-gray-500 mt-1">{{ $activity->keterangan }}</p>
<div class="flex items-center mt-2">
<span class="text-xs text-gray-400">{{ $activity->created_by ? $activity->creator->name : 'System' }}</span>

View File

@@ -120,8 +120,8 @@
</thead>
<tbody>
@php
$dataform = json_decode($data->data_form, true) ?? [];
$dataPembanding = json_decode($data->data_pembanding, true) ?? [];
$dataform = json_decode(isset($data->data_form) ? $data->data_form : '', true) ?? [];
$dataPembanding = json_decode(isset($data->data_pembanding) ? $data->data_pembanding : '', true) ?? [];
// print_r($dataform);
// echo $dataform;
@@ -464,79 +464,74 @@
</tbody>
</table>
<h4>Peta Objek dan Pembanding
</h4>
<h4>Peta Objek dan Pembanding</h4>
@php
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
// echo $dataForm;
@endphp
@for ($i = 0; $i < count($fotoTypes); $i++)
<img src="{{ isset($dataform[$fotoTypes[$i]]) ? asset('storage/' . $dataform[$fotoTypes[$i]]) : '#' }}"
alt="{{ $fotoTypes[$i] }}" style="max-width: 40rem;">
@endfor
<h4>FOTO OBJEK DAN DATA PEMBANDING</h4>
@foreach ($dataPembanding['data_pembanding'] as $item)
<img src="{{ isset($item['foto_objek']) ? asset('storage/' . $item['foto_objek']) : '#' }}"
alt="Foto Objek" style="max-width: 20rem;">
<p style="text-center">Data Pembanding {{ $loop->iteration }}</p>
@endforeach
@php
$fotoTypes = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
@endphp
@php
$dataFoto = json_decode($data->foto_form, true);
@endphp
<h4>FOTO OBJEK</h4>
<div class="grid grid-cols-4 gap-4">
@forelse ($fotoTypes as $type)
<div class="text-center">
@php
$imagePath = $dataform[$type];
@endphp
@php
$images = [];
// Rute Menuju Lokasi
foreach ($dataFoto['rute_menuju_lokasi'] ?? [] as $rute) {
$images[] = $rute['foto_rute'] ?? null;
}
// Objek Jaminan
foreach ($dataFoto['object_jaminan'] ?? [] as $objek) {
$images[] = $objek['foto_objek'] ?? null;
}
// Lingkungan
foreach ($dataFoto['lingkungan'] ?? [] as $lingkungan) {
$images[] = $lingkungan['foto_lingkungan'] ?? null;
}
// Lantai Unit
foreach ($dataFoto['foto_lantai_unit'] ?? [] as $lantai) {
$images[] = $lantai['foto_lantai_unit'] ?? null;
}
// Tambahan foto lainnya
$images[] = $dataFoto['foto_basement'] ?? null;
$images[] = $dataFoto['foto_gerbang'] ?? null;
$images[] = $dataFoto['pendamping'] ?? null;
// Filter null values
$images = array_filter($images);
@endphp
<div class="row">
@foreach ($images as $image)
<img src="{{ asset('storage/' . $image) }}" alt="Foto Survey"
style="
width: 250px;
height: 250px;
object-fit: cover;
margin: 10px;
"
onerror="this.src='{{ asset('default-image.png') }}'">
@endforeach
@if ($imagePath && Storage::exists($imagePath))
<img
src="{{ asset('storage/' . $imagePath) }}"
alt="{{ $type }}"
class="max-w-full h-auto mx-auto"
onerror="this.src='{{ asset('default-image.png') }}'"
>
<p class="mt-2 text-sm">{{ Str::title(str_replace('_', ' ', $type)) }}</p>
@else
<div class="bg-gray-200 p-4 text-center">
<p>Tidak ada gambar</p>
</div>
@endif
</div>
@empty
<p>Tidak ada tipe foto yang tersedia</p>
@endforelse
</div>
<h4 class="mt-6">FOTO OBJEK DAN DATA PEMBANDING</h4>
<div class="grid grid-cols-4 gap-4">
@forelse ($dataPembanding['data_pembanding'] ?? [] as $index => $item)
<div class="text-center">
@php
$fotoObjek = $item['foto_objek'];
@endphp
@if ($fotoObjek && Storage::exists($fotoObjek))
<img
src="{{ asset('storage/' . $fotoObjek) }}"
alt="Foto Objek Pembanding {{ $loop->iteration }}"
class="max-w-full h-auto mx-auto"
onerror="this.src='{{ asset('default-image.png') }}'"
>
<p class="mt-2 text-sm">Data Pembanding {{ $loop->iteration }}</p>
@else
<div class="bg-gray-200 p-4 text-center">
<p>Tidak ada gambar pembanding</p>
</div>
@endif
</div>
@empty
<p class="col-span-4">Tidak ada data pembanding</p>
@endforelse
</div>
<h4 class="mt-6">FOTO OBJEK</h4>
@@ -545,6 +540,8 @@
</html>
<script>
const data = @json($dataFoto);
const data = @json($dataform);
console.log(data);
</script>

View File

@@ -132,178 +132,6 @@
@enderror
</div>
</div>
<div id="doctainer" class="grid gap-5">
@if(isset($document->id))
@php $n = 0; @endphp
@foreach($document->detail as $detail)
<input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nomor">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" accept=".pdf,image/*">
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
@if(isset($detail->dokumen_jaminan))
@if(isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor ? [$detail->dokumen_nomor] : []);
@endphp
<div class="flex flex-col w-full gap-2">
@foreach($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if(!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : {{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $debitur->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
</div>
@endforeach
</div>
@endif
@endif
</div>
</div>
@if($detail->details)
@if($detail->jenisLegalitasJaminan->custom_field)
@php $custom_field = json_decode($detail->details,true) @endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}">
</div>
</div>
@endif
@else
@if($detail->jenisLegalitasJaminan->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($detail->jenisLegalitasJaminan->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
@foreach($legalitas as $item)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $item->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $item->id }}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="" placeholder="Nomor">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" accept=".pdf,image/*">
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
</div>
</div>
@if($item->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$item->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($item->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
@endif
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
@@ -414,6 +242,181 @@
</div>
</div>
</div>
<div id="doctainer" class="grid gap-5">
@if(isset($document->id))
@php $n = 0; @endphp
@foreach($document->detail as $detail)
<input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nomor">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" accept=".pdf,image/*">
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
@if(isset($detail->dokumen_jaminan))
@if(isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(json_decode($detail->dokumen_jaminan)) ? json_decode($detail->dokumen_jaminan) : [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(json_decode($detail->dokumen_nomor)) ? json_decode($detail->dokumen_nomor) : ($detail->dokumen_nomor ? [$detail->dokumen_nomor] : []);
@endphp
<div class="flex flex-col w-full gap-2">
@foreach($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if(!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : {{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $debitur->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
</div>
@endforeach
</div>
@endif
@endif
</div>
</div>
@if($detail->details)
@if($detail->jenisLegalitasJaminan->custom_field)
@php $custom_field = json_decode($detail->details,true) @endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] ?? '' }}">
</div>
</div>
@endif
@else
@if($detail->jenisLegalitasJaminan->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($detail->jenisLegalitasJaminan->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@elseif($detail->jenisLegalitasJaminan->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$detail->jenisLegalitasJaminan->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
@if($legalitas)
@foreach($legalitas as $item)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $n + 1 }}. {{ $item->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $item->id }}">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="" placeholder="Nomor">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col w-full gap-2" id="file-container-{{$n}}">
<div class="flex items-center gap-2">
<input class="flex-1 input" type="text" name="dokumen_nomor[{{ $n }}][]" placeholder="Nomor Dokumen">
<input class="flex-1 file-input" type="file" name="dokumen_jaminan[{{ $n }}][]" accept=".pdf,image/*">
<button type="button" class="flex-none btn btn-primary w-[100px] text-center" onclick="addFileInput({{ $n }})">Add More</button>
</div>
<div id="additional-files-{{ $n }}"></div>
</div>
</div>
</div>
@if($item->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$item->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
@if($item->custom_field_type === "text")
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "number")
<input class="input" type="number" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "date")
<input class="input" type="date" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@elseif($item->custom_field_type === "textarea")
<textarea class="textarea" rows="3" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2"></textarea>
@else
<input class="input" type="text" name="custom_field[][{{$item->custom_field}}]" placeholder="... M2">
@endif
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea>
</div>
</div>
@php $n++; @endphp
@endforeach
@endif
@endif
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Save

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Debitur

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="hubungan-pemilik-jaminan-table" data-api-url="{{ route('basicdata.hubungan-pemilik-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="hubungan-pemilik-jaminan-table" data-api-url="{{ route('basicdata.hubungan-pemilik-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Hubungan Pemilik Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="hubungan-penghuni-jaminan-table" data-api-url="{{ route('basicdata.hubungan-penghuni-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="hubungan-penghuni-jaminan-table" data-api-url="{{ route('basicdata.hubungan-penghuni-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Hubungan Penghuni Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-aset-table" data-api-url="{{ route('basicdata.jenis-aset.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-aset-table" data-api-url="{{ route('basicdata.jenis-aset.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Aset

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-dokumen-table" data-api-url="{{ route('basicdata.jenis-dokumen.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-dokumen-table" data-api-url="{{ route('basicdata.jenis-dokumen.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Dokumen

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-fasilitas-kredit-table" data-api-url="{{ route('basicdata.jenis-fasilitas-kredit.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-fasilitas-kredit-table" data-api-url="{{ route('basicdata.jenis-fasilitas-kredit.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Fasilitas Kredit

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-jaminan-table" data-api-url="{{ route('basicdata.jenis-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-jaminan-table" data-api-url="{{ route('basicdata.jenis-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="jenis-laporan-table"
data-api-url="{{ route('basicdata.jenis_laporan.datatables') }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="jenis-legalitas-jaminan-table" data-api-url="{{ route('basicdata.jenis-legalitas-jaminan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="jenis-legalitas-jaminan-table" data-api-url="{{ route('basicdata.jenis-legalitas-jaminan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Jenis Legalitas Jaminan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="jenis-penilaian-table"
data-api-url="{{ route('basicdata.jenis-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -229,20 +229,32 @@
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
<div id="detail_email_kantor" class="flex flex-wrap items-center w-full gap-2">
@if (isset($kjpp->detail_email_kantor))
@foreach ($detailEmailKantor as $detail_email_kantor)
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('email_kantor') border-danger @enderror"
type="text" name="detail_email_kantor[email_kantor][]"
value="{{ $detail_email_kantor->email_kantor ?? old('detail_email_kantor.email_kantor') }}">
@error('email_kantor')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@php
$emails = old(
'detail_email_kantor.email_kantor',
json_decode($detailJoinEmailKantor, true),
); // Decode as associative array
@endphp
@if (is_array($emails) && count($emails) > 0)
@foreach ($emails as $index => $email)
@if (!empty($email))
<div
class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_email_kantor.email_kantor.' . $index) border-danger @enderror"
type="text" name="detail_email_kantor[email_kantor][]"
value="{{ old('detail_email_kantor.email_kantor.' . $index, is_array($email) ? $email['email_kantor'] : $email->email_kantor ?? '') }}">
@error('detail_email_kantor.email_kantor.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
<button type="button"
class="btn btn-danger btn-xs delete-button-edit">Hapus</button>
</div>
@endif
@endforeach
@endif
</div>
@@ -275,35 +287,50 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap">
<div id="detail_nama_pimpinan" class="flex flex-wrap items-baseline w-full gap-2.5">
@if (isset($kjpp->detail_nama_pimpinan) && isset($kjpp->detail_nomor_hp_pimpinan))
@foreach (json_decode($detailJoinPimpinan) as $detail_pimpinan)
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">
Nama Pimpinan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nama_pimpinan') border-danger @enderror"
type="text" name="detail_nama_pimpinan[nama_pimpinan][]"
value="{{ $detail_pimpinan->nama_pimpinan ?? old('detail_nama_pimpinan.nama_pimpinan') }}">
@error('nama_pimpinan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@php
$detailNamaPimpinan = old(
'detail_nama_pimpinan.nama_pimpinan',
json_decode($detailJoinPimpinan, true),
);
$detailNomorHpPimpinan = old(
'detail_nomor_hp_pimpinan.nomor_hp_pimpinan',
json_decode($detailJoinPimpinan, true),
);
@endphp
@if (is_array($detailNamaPimpinan) &&
count($detailNamaPimpinan) > 0 &&
(is_array($detailNomorHpPimpinan) && count($detailNomorHpPimpinan) > 0))
@foreach ($detailNamaPimpinan as $index => $detail_nama)
@if (!empty($detail_nama))
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">Nama Pimpinan</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nama_pimpinan.nama_pimpinan.' . $index) border-danger @enderror"
type="text" name="detail_nama_pimpinan[nama_pimpinan][]"
value="{{ old('detail_nama_pimpinan.nama_pimpinan.' . $index, $detail_nama['nama_pimpinan'] ?? '') }}">
@error('detail_nama_pimpinan.nama_pimpinan.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<label class="form-label max-w-56">Nomor HP Pimpinan</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nomor_hp_pimpinan.nomor_hp_pimpinan.' . $index) border-danger @enderror"
type="text" name="detail_nomor_hp_pimpinan[nomor_hp_pimpinan][]"
value="{{ old('detail_nomor_hp_pimpinan.nomor_hp_pimpinan.' . $index, $detailNomorHpPimpinan[$index]['nomor_hp_pimpinan'] ?? '') }}">
@error('detail_nomor_hp_pimpinan.nomor_hp_pimpinan.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
<label class="form-label max-w-56">
Nomor HP Pimpinan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_hp_pimpinan') border-danger @enderror"
type="text" name="detail_nomor_hp_pimpinan[nomor_hp_pimpinan][]"
value="{{ $detail_pimpinan->nomor_hp_pimpinan ?? old('detail_nomor_hp_pimpinan.nomor_hp_pimpinan') }}">
@error('nomor_hp_pimpinan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
@endif
@endforeach
@endif
</div>
@@ -343,36 +370,52 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap">
<div id="detail_nama_pic_reviewer" class="flex flex-wrap items-baseline w-full gap-2.5">
@if (isset($kjpp->detail_nama_pic_reviewer) && isset($kjpp->detail_nomor_hp_pic_reviewer))
@foreach (json_decode($detailJoinPicReviewer) as $detail_pic_reviewer)
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">
Nama PIC Reviewer
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nama_pic_reviewer') border-danger @enderror"
type="text" name="detail_nama_pic_reviewer[nama_pic_reviewer][]"
value="{{ $detail_pic_reviewer->nama_pic_reviewer ?? old('detail_nama_pic_reviewer.nama_pic_reviewer') }}">
@error('nama_pic_reviewer')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@php
$detailNamaPicReviewer = old(
'detail_nama_pic_reviewer.nama_pic_reviewer',
json_decode($detailJoinPicReviewer, true),
);
$detailNomorHpPicReviewer = old(
'detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer',
json_decode($detailJoinPicReviewer, true),
);
@endphp
@if (is_array($detailNamaPicReviewer) &&
count($detailNamaPicReviewer) > 0 &&
is_array($detailNomorHpPicReviewer) &&
count($detailNomorHpPicReviewer) > 0)
@foreach ($detailNamaPicReviewer as $index => $detail_pic_reviewer)
@if (!empty($detail_pic_reviewer))
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">Nama PIC Reviewer</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nama_pic_reviewer.nama_pic_reviewer.' . $index) border-danger @enderror"
type="text" name="detail_nama_pic_reviewer[nama_pic_reviewer][]"
value="{{ old('detail_nama_pic_reviewer.nama_pic_reviewer.' . $index, $detail_pic_reviewer['nama_pic_reviewer'] ?? '') }}">
@error('detail_nama_pic_reviewer.nama_pic_reviewer.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<label class="form-label max-w-56">Nomor HP PIC Reviewer</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.' . $index) border-danger @enderror"
type="text"
name="detail_nomor_hp_pic_reviewer[nomor_hp_pic_reviewer][]"
value="{{ old('detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.' . $index, $detailNomorHpPicReviewer[$index]['nomor_hp_pic_reviewer'] ?? '') }}">
@error('detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
<label class="form-label max-w-56">
Nomor HP PIC Reviewer
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_hp_pic_reviewer') border-danger @enderror"
type="text"
name="detail_nomor_hp_pic_reviewer[nomor_hp_pic_reviewer][]"
value="{{ $detail_pic_reviewer->nomor_hp_pic_reviewer ?? old('detail_nomor_hp_pic_reviewer.nomor_hp_pic_reviewer') }}">
@error('nomor_hp_pic_reviewer')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
@endif
@endforeach
@endif
</div>
@@ -411,35 +454,51 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap">
<div id="detail_nama_pic_admin" class="flex flex-wrap items-baseline w-full gap-2.5">
@if (isset($kjpp->detail_nama_pic_admin) && isset($kjpp->detail_nomor_hp_pic_admin))
@foreach (json_decode($detailJoinPicAdmin) as $detail_pic_admin)
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">
Nama PIC Admin
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nama_pic_admin') border-danger @enderror"
type="text" name="detail_nama_pic_admin[nama_pic_admin][]"
value="{{ $detail_pic_admin->nama_pic_admin ?? old('detail_nama_pic_admin.nama_pic_admin') }}">
@error('nama_pic_admin')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@php
$detailNamaPicAdmin = old(
'detail_nama_pic_admin.nama_pic_admin',
json_decode($detailJoinPicAdmin, true),
);
$detailNomorHpPicAdmin = old(
'detail_nomor_hp_pic_admin.nomor_hp_pic_admin',
json_decode($detailJoinPicAdmin, true),
);
@endphp
@if (is_array($detailNamaPicAdmin) &&
count($detailNamaPicAdmin) > 0 &&
is_array($detailNomorHpPicAdmin) &&
count($detailNomorHpPicAdmin) > 0)
@foreach ($detailNamaPicAdmin as $index => $detail_pic_admin)
@if (!empty($detail_pic_admin))
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">Nama PIC Admin</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nama_pic_admin.nama_pic_admin.' . $index) border-danger @enderror"
type="text" name="detail_nama_pic_admin[nama_pic_admin][]"
value="{{ old('detail_nama_pic_admin.nama_pic_admin.' . $index, $detail_pic_admin['nama_pic_admin'] ?? '') }}">
@error('detail_nama_pic_admin.nama_pic_admin.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<label class="form-label max-w-56">Nomor HP PIC Admin</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nomor_hp_pic_admin.nomor_hp_pic_admin.' . $index) border-danger @enderror"
type="text" name="detail_nomor_hp_pic_admin[nomor_hp_pic_admin][]"
value="{{ old('detail_nomor_hp_pic_admin.nomor_hp_pic_admin.' . $index, $detailNomorHpPicAdmin[$index]['nomor_hp_pic_admin'] ?? '') }}">
@error('detail_nomor_hp_pic_admin.nomor_hp_pic_admin.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
<label class="form-label max-w-56">
Nomor HP PIC Admin
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_hp_pic_admin') border-danger @enderror"
type="text" name="detail_nomor_hp_pic_admin[nomor_hp_pic_admin][]"
value="{{ $detail_pic_admin->nomor_hp_pic_admin ?? old('detail_nomor_hp_pic_admin.nomor_hp_pic_admin') }}">
@error('nomor_hp_pic_admin')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
@endif
@endforeach
@endif
</div>
@@ -479,37 +538,52 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap">
<div id="detail_nama_pic_marketing" class="flex flex-wrap items-baseline w-full gap-2.5">
@if (isset($kjpp->detail_nama_pic_marketing) && isset($kjpp->detail_nomor_hp_pic_marketing))
@foreach (json_decode($detailJoinPicMarketing) as $detail_pic_marketing)
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">
Nama PIC Marketing
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nama_pic_marketing') border-danger @enderror"
type="text" name="detail_nama_pic_marketing[nama_pic_marketing][]"
value="{{ $detail_pic_marketing->nama_pic_marketing ?? old('detail_nama_pic_marketing.nama_pic_marketing') }}">
@error('nama_pic_marketing')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
@php
$detailNamaPicMarketing = old(
'detail_nama_pic_marketing.nama_pic_marketing',
json_decode($detailJoinPicMarketing, true),
);
$detailNomorHpPicMarketing = old(
'detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing',
json_decode($detailJoinPicMarketing, true),
);
@endphp
@if (is_array($detailNamaPicMarketing) &&
count($detailNamaPicMarketing) > 0 &&
is_array($detailNomorHpPicMarketing) &&
count($detailNomorHpPicMarketing) > 0)
@foreach ($detailNamaPicMarketing as $index => $detail_pic_marketing)
@if (!empty($detail_pic_marketing))
<div class="flex flex-col lg:flex-row gap-2 items-baseline lg:items-center w-full">
<label class="form-label max-w-56">Nama PIC Marketing</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nama_pic_marketing.nama_pic_marketing.' . $index) border-danger @enderror"
type="text" name="detail_nama_pic_marketing[nama_pic_marketing][]"
value="{{ old('detail_nama_pic_marketing.nama_pic_marketing.' . $index, $detail_pic_marketing['nama_pic_marketing'] ?? '') }}">
@error('detail_nama_pic_marketing.nama_pic_marketing.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<label class="form-label max-w-56">Nomor HP PIC Marketing</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.' . $index) border-danger @enderror"
type="text"
name="detail_nomor_hp_pic_marketing[nomor_hp_pic_marketing][]"
value="{{ old('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.' . $index, $detailNomorHpPicMarketing[$index]['nomor_hp_pic_marketing'] ?? '') }}">
@error('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing.' . $index)
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
<label class="form-label max-w-56">
Nomor HP PIC Marketing
</label>
<div class="flex flex-wrap items-baseline w-full">
<input
class="input @error('nomor_hp_pic_marketing') border-danger @enderror"
type="text"
name="detail_nomor_hp_pic_marketing[nomor_hp_pic_marketing][]"
value="{{ $detail_pic_marketing->nomor_hp_pic_marketing ?? old('detail_nomor_hp_pic_marketing.nomor_hp_pic_marketing') }}">
@error('nomor_hp_pic_marketing')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<button type="button" class="btn btn-danger btn-xs delete-button-edit">
Hapus
</button>
</div>
@endif
@endforeach
@endif
</div>

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="kjpp-table" data-api-url="{{ route('basicdata.kjpp.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -96,10 +96,10 @@
</label>
<div class="flex flex-wrap items-baseline w-full">
<p class="flex w-full text-gray-600 font-medium text-sm">{{ $kjpp->email_kantor }}</p>
@if (isset($kjpp->detail_email_kantor))
@foreach (json_decode($kjpp->detail_email_kantor) as $detail_email_kantor)
@if (!empty($detailJoinEmailKantor))
@foreach (json_decode($detailJoinEmailKantor) as $detail_email_kantor)
<p class="flex w-full text-gray-600 font-medium text-sm">
{{ $detail_email_kantor }}
{{ $detail_email_kantor->email_kantor }}
</p>
@endforeach
@endif
@@ -239,9 +239,9 @@
@endforeach
</div>
@else
<div class="flex flex-row space-x-4 text-white font-medium text-sm dark-mode:text-gray-600">No
business license
selected.</div>
<div class="flex flex-row space-x-4 text-white font-medium text-sm dark-mode:text-gray-600">
-
</div>
@endif
</div>
</div>

View File

@@ -0,0 +1,96 @@
@extends('layouts.main')
{{-- @section('breadcrumbs') --}}
{{-- {{ Breadcrumbs::render('laporan.index') }} --}}
{{-- @endsection --}}
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penilai-table" data-api-url="{{ route('penilai.dataForTables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Laporan
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Penilai" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Pemohon(Cabang/Direktorat) </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> AO </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="jenis_fasilitas_kredit_id">
<span class="sort"> <span class="sort-label"> Fasilitas Kredit </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_survei">
<span class="sort"> <span class="sort-label"> Tanggal Survei </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="due_date_sla">
<span class="sort"> <span class="sort-label"> Due Date SLA </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -1,487 +0,0 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('laporan.sederhana.index') }}
@endsection
@section('content')
<style>
.input-group {
position: relative;
width: 100%;
}
.left-group {
padding-right: 2.5rem;
}
.right-group {
padding-left: 2.5rem;
}
.input-group .input-unit {
position: absolute;
top: 50%;
transform: translateY(-50%);
pointer-events: none;
color: #6b7280;
}
.input-group .input-unit.left {
left: 0.75rem;
}
.input-group .input-unit.right {
right: 0.75rem;
}
</style>
<div class="grid">
<div class="card card-grid min-w-full" id="debitur-table">
<div class="card-header py-5 flex-wrap">
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<form action="" method="POST" class="grid gap-5">
<input type="hidden" name="id" value="">
@csrf
<div class="flex flex-wrap lg:flex-nowrap gap-4">
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
CADEB AN
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('cadeb') border-danger bg-danger-light @enderror"
type="text" name="cadeb" value="">
@error('cadeb')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
Jenis Aset
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('aset') border-danger bg-danger-light @enderror"
type="text" name="aset" value="">
@error('aset')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
<div class="flex flex-wrap lg:flex-nowrap gap-4">
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
Fasilitas Kredit
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('kredit') border-danger bg-danger-light @enderror"
type="text" name="kredit" value="">
@error('kredit')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
Alamat Objek
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('alamat') border-danger bg-danger-light @enderror"
type="text" name="alamat" value="">
@error('alamat')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
<div class="flex flex-wrap lg:flex-nowrap gap-4">
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
Cabang Pemohon
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('cabang') border-danger bg-danger-light @enderror"
type="text" name="cabang" value="">
@error('cabang')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
AO
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('ao') border-danger bg-danger-light @enderror" type="text"
name="ao" value="">
@error('ao')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
<hr>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Surveyor
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('surveyor') border-danger bg-danger-light @enderror"
type="text" name="surveyor" value="">
@error('surveyor')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Penilai
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('penilai') border-danger bg-danger-light @enderror"
type="text" name="penilai" value="">
@error('penilai')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tanggal Survey
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('tanggal_survey') border-danger bg-danger-light @enderror"
type="date" name="tanggal_survey" value="">
@error('tanggal_survey')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex flex-wrap lg:flex-nowrap gap-4">
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
Nomor Resume
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('nomor_resume') border-danger bg-danger-light @enderror"
type="number" name="nomor_resume" value="">
@error('nomor_resume')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
Tanggal Resume
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('tanggal_resume') border-danger bg-danger-light @enderror"
type="date" name="tanggal_resume" value="">
@error('tanggal_resume')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
<hr>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Faktor Positif
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('faktor_positif') border-danger bg-danger-light @enderror" rows="3"
type="number" id="faktor_positif" name="faktor_positif"></textarea>
@error('faktor_positif')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Faktor Negatif
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('faktor_negatif') border-danger bg-danger-light @enderror" rows="3"
type="number" id="faktor_negatif" name="faktor_negatif"></textarea>
@error('faktor_negatif')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<hr>
<label class="form-label">Kesimpulan Nilai Pasar</label>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Sesuai Fisik
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="input-group w-full">
<input
class="input w-full @error('sertifikat') border-danger bg-danger-light @enderror"
type="text" name="sertifikat" placeholder="Sertifikat" value="">
@error('sertifikat')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<input
class="left-group input w-full @error('luas_tanah') border-danger bg-danger-light @enderror"
type="number" name="luas_tanah" placeholder="Luas tanah" value="">
<span class="input-unit right"></span>
@error('luas_tanah')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<input
class="left-group input w-full @error('luas_bangunan') border-danger bg-danger-light @enderror"
type="number" name="luas_bangunan" placeholder="Luas bangunan"
value="">
<span class="input-unit right"></span>
@error('luas_bangunan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<span class="input-unit left">Rp</span>
<input
class="right-group input w-full pl-8 @error('pasar_wajar') border-danger bg-danger-light @enderror"
type="number" name="pasar_wajar" placeholder="Nilai pasar wajar"
value="">
@error('pasar_wajar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Sesuai IMB
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="input-group w-full">
<input
class="input w-full @error('sertifikat') border-danger bg-danger-light @enderror"
type="text" name="sertifikat" placeholder="Sertifikat" value="">
@error('sertifikat')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<input
class="left-group input w-full @error('luas_tanah') border-danger bg-danger-light @enderror"
type="number" name="luas_tanah" placeholder="Luas tanah" value="">
<span class="input-unit right"></span>
@error('luas_tanah')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<input
class="left-group input w-full @error('luas_bangunan') border-danger bg-danger-light @enderror"
type="number" name="luas_bangunan" placeholder="Luas bangunan"
value="">
<span class="input-unit right"></span>
@error('luas_bangunan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<span class="input-unit left">Rp</span>
<input
class="right-group input w-full pl-8 @error('pasar_wajar') border-danger bg-danger-light @enderror"
type="number" name="pasar_wajar" placeholder="Nilai pasar wajar"
value="">
@error('pasar_wajar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Asumsi nilai terpotong jalan/GSB
</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="flex flex-col lg:flex-row gap-2 w-full">
<div class="input-group w-full">
<input
class="input w-full @error('sertifikat') border-danger bg-danger-light @enderror"
type="text" name="sertifikat" placeholder="Sertifikat" value="">
@error('sertifikat')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<input
class="left-group input w-full @error('luas_tanah') border-danger bg-danger-light @enderror"
type="number" name="luas_tanah" placeholder="Luas tanah" value="">
<span class="input-unit right"></span>
@error('luas_tanah')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<input
class="left-group input w-full @error('luas_bangunan') border-danger bg-danger-light @enderror"
type="number" name="luas_bangunan" placeholder="Luas bangunan"
value="">
<span class="input-unit right"></span>
@error('luas_bangunan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
<div class="input-group w-full">
<span class="input-unit left">Rp</span>
<input
class="right-group input w-full pl-8 @error('pasar_wajar') border-danger bg-danger-light @enderror"
type="number" name="pasar_wajar" placeholder="Nilai pasar wajar"
value="">
@error('pasar_wajar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
</div>
</div>
<hr>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan perlu diperhatikan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea @error('catatan') border-danger bg-danger-light @enderror" rows="3" type="number"
id="catatan" name="catatan"></textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<hr>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
DISCLAIMER
</label>
<div class="flex flex-wrap items-baseline w-full">
<ol>
<li>Laporan Resume ini dikeluarkan dikarenakan belum dilakukannya pembayaran biaya
penilaian jaminan</li>
<li>Laporan Resume ini tidak bisa dijadikan sebagai dasar pengajuan dan atau pencairan
kredit, laporan yang digunakan tetap wajib berupa Laporan Penilaian Jaminan (LPJ)
</li>
<li>Detail per meter tanah dan bangunan, sarana pelengkap dll akan tercatat di Laporan
Penilaian Jaminan (LPJ) nanti</li>
<li>Laporan Resume ini hanya digunakan untuk kepentingan internal bagi</li>
<li>Laporan resume ini hanya berlaku <span class="text-red-500">14 hari</span> kerja
terhitung dari tanggal resume ini dibuat sesuai aturan yang berlaku, apabila lewat
maka harus dilakukan order ulang sesuai prosedur yang berlaku</li>
<li>Apabila sudah melewati 6 bulan, maka harus penilaian ulang kembali</li>
</ol>
</div>
</div>
<hr>
<label class="form-label">Salam,</label>
<div class="flex flex-wrap lg:flex-nowrap gap-4">
<div class="flex items-center w-full lg:w-1/2 gap-2.5">
<label class="form-label max-w-56 lg:w-32">
PENILAI
</label>
<label class="form-label max-w-56 lg:w-32">
SENIOR OFICER
</label>
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Save
</button>
</div>
</form>
</div>
</div>
</div>
{{-- <form method="POST" action="">
<div class="card pb-2.5">
<input type="hidden" name="action" value="">
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Code
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('code') border-danger bg-danger-light @enderror" type="text"
name="code" value="">
@error('code')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Name
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input @error('name') border-danger bg-danger-light @enderror" type="text"
name="name" value="">
@error('name')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Save
</button>
</div>
</div>
</div>
</form> --}}
</div>
@endsection

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="nilai-plafond-table" data-api-url="{{ route('basicdata.nilai-plafond.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="nilai-plafond-table" data-api-url="{{ route('basicdata.nilai-plafond.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Nilai Plafond

View File

@@ -0,0 +1,97 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
NOC
</div>
<div class="flex items-center gap-2">
<a href="{{ route('noc.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
<form action="{{ route('noc.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="penawaran_id" value="{{ $persetujuanPenawaran->penawaran_id ?? old('penawaran_id') }}">
<input type="hidden" name="permohonan_id" value="{{ $persetujuanPenawaran->penawaran->permohonan->id ?? old('permohonan_id') }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Status Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('status_bayar') border-danger bg-danger-light @enderror" name="status_bayar" id="status_bayar">
<option value="">Pilih Status Bayar</option>
<option value="sudah_bayar" {{ (old('status_bayar') == 'sudah_bayar') || (isset($persetujuanPenawaran->penawaran->permohonan) && $persetujuanPenawaran->penawaran->permohonan->status_bayar == 'sudah_bayar') ? 'selected' : '' }}>Sudah Bayar</option>
<option value="belum_bayar" {{ (old('status_bayar') == 'belum_bayar') || (isset($persetujuanPenawaran->penawaran->permohonan) && $persetujuanPenawaran->penawaran->permohonan->status_bayar == 'belum_bayar') ? 'selected' : '' }}>Belum Bayar</option>
</select>
@error('status_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Bukti KSL
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="bukti_ksl" id="bukti_ksl" class="file-input w-full @error('bukti_ksl') border-danger bg-danger-light @enderror" accept=".pdf,.doc,.docx">
@error('bukti_ksl')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nominal Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="number" name="nominal_bayar" id="nominal_bayar" class="input w-full @error('nominal_bayar') border-danger bg-danger-light @enderror" value="{{ old('nominal_bayar', $persetujuanPenawaran->nominal_bayar ?? '') }}" placeholder="Masukkan nominal bayar">
@error('nominal_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea name="catatan" id="catatan" rows="4" class="textarea w-full @error('catatan') border-danger bg-danger-light @enderror" placeholder="Masukkan catatan">{{ old('catatan', $persetujuanPenawaran->catatan ?? '') }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan NOC
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea name="catatan_noc" id="catatan_noc" rows="4" class="textarea w-full @error('catatan_noc') border-danger bg-danger-light @enderror" placeholder="Masukkan catatan noc">{{ old('catatan_noc', $persetujuanPenawaran->catatan_noc ?? '') }}</textarea>
@error('catatan_noc')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Proses
</button>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,196 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('noc') }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="noc-table" data-api-url="{{ route('noc.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar NOC
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search NOC" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nama_debitur">
<span class="sort"> <span class="sort-label"> Nama Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="cabang">
<span class="sort"> <span class="sort-label"> Cabang </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_setor">
<span class="sort"> <span class="sort-label"> Tanggal KSL </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nominal_bayar">
<span class="sort"> <span class="sort-label"> Nominal bayar </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="bukti_ksl">
<span class="sort"> <span class="sort-label"> Bukti KSL </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_penyelesaian">
<span class="sort"> <span class="sort-label"> Tanggal Penyelesaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
function prosesData(data) {
Swal.fire({
title: 'NOC',
text: "Apakah Anda yakin ingin menyetujui data penawaran ini?",
icon: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya',
cancelButtonText: 'Tidak'
}).then((result) => {
if (result.isConfirmed) {
window.location.href = `noc/${data}/edit`;
}
})
}
</script>
<script type="module">
const element = document.querySelector('#noc-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
render: (item, data) => {
return `${data.penawaran.nomor_registrasi}`;
},
},
nama_debitur: {
title: 'Nama Debitur',
render: (item, data) => {
return `${data.penawaran.permohonan.debiture.name}`;
},
},
cabang: {
title: 'Cabang',
render: (item, data) => {
return `${data.penawaran.permohonan.branch.name}`;
},
},
tanggal_setor: {
title: 'Cabang',
render: (item, data) => {
return `${window.formatTanggalIndonesia(data.created_at)}`;
},
},
nominal_bayar: {
title: 'Cabang',
render: (item, data) => {
return `${window.formatRupiah(data.nominal_bayar)}`;
},
},
bukti_ksl: {
title: 'Bukti KSL',
render: (item, data) => {
if (data.bukti_ksl) {
return `<a href="storage/${data.bukti_ksl}" download="storage/${data.bukti_ksl}" target="_blank" class="badge badge-sm badge-outline">
Download <i class="ki-filled ki-cloud-download"></i>
</a>`;
} else {
return '-';
}
},
},
tanggal_penyelesaian: {
title: 'Cabang',
render: (item, data) => {
if(data.status==1) {
return `${window.formatTanggalIndonesia(data.updated_at)}`;
}
return "-";
},
},
actions: {
title: 'Action',
render: (item, data) => {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-outline btn-info" onclick="prosesData(${data.id})">
<i class="ki-filled ki-double-check"></i>
</a>
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="otorisasipenawaran-table" data-api-url="{{ route('otorisasitender.penawaran.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="otorisasipenawaran-table" data-api-url="{{ route('otorisasitender.penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Otorisasi Penawaran

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penawaran-table" data-api-url="{{ route('tender.penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap" id="basic_settings">
<h3 class="card-title">

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penawaran-table"
data-api-url="{{ route('tender.penawaran.ulang.datatables') }}">
<div class="card-header py-5 flex-wrap" id="basic_settings">

View File

@@ -0,0 +1,137 @@
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Rute Menuju Lokasi
</h3>
</div>
<div class="card-body">
@if (isset($formFoto))
@foreach ($formFoto['rute_menuju_lokasi'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute'] . ' ' . $loop->index + 1 }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Object Jaminan
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['name_objek'] }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_objek']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@if (isset($formFoto['foto_basement']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Basement
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Basemnt
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Gerbang
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Gerbang
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Pendamping
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif

View File

@@ -4,68 +4,92 @@
$informasiPembanding = isset($inspeksi->data_pembanding) ? json_decode($inspeksi->data_pembanding, true) : [];
@endphp
@foreach ($informasiPembanding['data_pembanding'] as $key => $item)
<div class="border border-gray-200">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-5 p-5">
<div class="form-label lg:form-label max-w-56 grid gap-2.5">
<label class=" ">Pembanding {{ $key + 1 }}
</label>
<img src="{{ isset($item['foto_objek']) ? asset('storage/' . old('foto_objek', $item['foto_objek'])) : '#' }}"
alt="Gambar foto_objek" style="width: 20rem;" class="mx-auto object-cover">
@if (isset($informasiPembanding['data_pembanding']))
@foreach ($informasiPembanding['data_pembanding'] as $key => $item)
<div class="border border-gray-200">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-5 p-5">
<div class="form-label lg:form-label max-w-56 grid gap-2.5">
<label class=" ">Pembanding {{ $key + 1 }}
</label>
<div class="image-container">
<img
src="{{ isset($item['foto_objek']) ? asset('storage/' . old('foto_objek', $item['foto_objek'])) : '#' }}"
alt="Gambar foto_objek"
class="responsive-image"
/>
</div>
</div>
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Jenis Properti</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['jenis_aset'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Harga Penawara</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga_diskon'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Penjualan (HP)</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Ditawarkan sejak</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">LT</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['luas_tanah'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">LB</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['luas_bangunan'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Titik Koordinat</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['kordinat_lat'] }} , {{ $item['kordinat_lng'] }}</span>
</div>
</div>
</div>
</div>
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Jenis Properti</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['jenis_aset'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Harga Penawara</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga_diskon'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Penjualan (HP)</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Ditawarkan sejak</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['harga'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">LT</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['luas_tanah'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">LB</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['luas_bangunan'] }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Titik Koordinat</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $item['kordinat_lat'] }} , {{ $item['kordinat_lng'] }}</span>
</div>
</div>
</div>
</div>
</div>
@endforeach
@endforeach
@endif
</div>
<style>
.image-container {
max-width: 20rem;
max-height: 15rem;
overflow: hidden;
}
.responsive-image {
width: 100%;
height: 100%;
object-fit: contain;
}
</style>

View File

@@ -35,7 +35,8 @@
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700">
{{formatAlamat($dokumen->pemilik)}}
{{ formatAlamat($dokumen->pemilik) }}
{{ formatAlamat($dokumen->pemilik) }}
</span>
@endforeach
</div>
@@ -47,8 +48,6 @@
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Cab/Direktorat</label>
<div class="flex flex-wrap items-baseline w-full">
@@ -82,7 +81,34 @@
Identitas Cadeb/Debitur
</h3>
</div>
<div class="card-body">
<div class="card-body grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nama</label>
<div class="flex flex-wrap items-baseline w-full">
<span>
@if (isset($permohonan->debiture))
<p class="text-2sm text-gray-700">{{ $permohonan->debiture->name }}</p>
@endif
</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Perwakilan Cadeb/Debitur Di lokasi</label>
<div class="flex flex-wrap items-baseline w-full">
<span>
{{ $forminspeksi['asset']['debitur_perwakilan'][0] ?? '' }}
</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Pihak Bank Selain Appraisal</label>
<div class="flex flex-wrap items-baseline w-full">
<span></span>
</div>
</div>
</div>
</div>
@@ -94,82 +120,694 @@
Deskripsi dan Alamat Aset
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
dokumen
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Hubungan Cadeb/Debitur dengan pemilik dan penghuni
</h3>
</div>
<div class="card-body">
</div>
</div>
@include('lpj::surveyor.components.tanah')
@include('lpj::surveyor.components.bangunan')
@include('lpj::surveyor.components.lingkungan')
@include('lpj::surveyor.components.fakta')
@include('lpj::surveyor.components.informasi')
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Informasi dan pembanding
</h3>
</div>
@include('lpj::penilai.components.informasi-pembanding')
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
total nilai pasar wajar
</h3>
</div>
<div class="card-body">
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
nilai asuransi
</h3>
</div>
<div class="card-body">
</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="submitData()">
<span id="saveButtonText">Save</span>
<div class="spinner-border spinner-border-sm text-light" role="status" style="display: none;"
id="saveButtonSpinner">
<div class="card-body grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Jenis Asset</label>
@php
$statusKey = isset($forminspeksi['asset']['jenis_asset']['sesuai']) ? 'sesuai' : 'tidak sesuai';
$selectedValue = $forminspeksi['asset']['jenis_asset'][$statusKey] ?? null;
@endphp
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $selectedValue }}</span>
</div>
</div>
</button>
</div>
</div>
<div id="loadingOverlay" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center z-50">
<div class="bg-white p-4 rounded-lg">
<div class="loader"></div>
<p class="mt-2 text-center">Sedang memproses...</p>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@php
$statusKey = isset($forminspeksi['asset']['alamat']['sesuai']) ? 'sesuai' : 'tidak sesuai';
$selectedValue = $forminspeksi['asset']['alamat'][$statusKey] ?? null;
@endphp
<label class="form-label max-w-56">Terletak di</label>
<div class="flex flex-wrap items-baseline w-full">
<span>{{ $selectedValue['address'] ?? '' }}</span>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label max-w-56">Provinsi</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="province" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->province) ? $permohonan->debiture->province->name : '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="city" class="form-label max-w-56">Kabupaten/Kota</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="city" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->city) ? $permohonan->debiture->city->name : '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="district" class="form-label max-w-56">Kecamatan</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="district" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->district) ? $permohonan->debiture->district->name : '' }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="village" class="form-label max-w-56">Desa/Kelurahan</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="village" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->village) ? $permohonan->debiture->village->name : '' }}">
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
dokumen
</h3>
</div>
<div class="card-body">
<div data-accordion="true">
@foreach ($permohonan->debiture->documents as $dokumen)
<div class="accordion-item [&:not(:last-child)]:border-b border-b-gray-200"
data-accordion-item="true" id="accordion_detail_jaminan">
<button class="accordion-toggle py-4 group "
data-accordion-toggle="#accordion_detail_jaminan_{{ $loop->index }}">
<span class="text-base text-gray-900 font-medium">
Dokument Kepemilikan
</span>
<i class="ki-outline ki-plus text-gray-600 text-2sm accordion-active:hidden block">
</i>
<i class="ki-outline ki-minus text-gray-600 text-2sm accordion-active:block hidden">
</i>
</button>
<div class="accordion-content hidden" id="accordion_detail_jaminan_{{ $loop->index }}">
<div class="card-table scrollable-x-auto pb-3">
<a href="{{ route('debitur.jaminan.bulk.download', ['id' => $permohonan->debiture->id, 'jaminan' => $dokumen->id]) }}"
class="ml-6 btn btn-dark dark:btn-light">
<i class="ki-outline ki-cloud-download"></i> Download Semua Dokumen
</a>
<table class="table align-middle text-sm text-gray-500">
@foreach ($dokumen->detail as $detail)
<tr>
<td class="py-2 text-gray-600 font-normal max-w-[100px]">
{{ $loop->index + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</td>
<td class="py-2 text-gray-800 font-normaltext-sm">
{{ $detail->name ?? '' }}
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px] align-top">
Dokumen Jaminan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
@if (isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(
json_decode($detail->dokumen_jaminan),
)
? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(
json_decode($detail->dokumen_nomor),
)
? json_decode($detail->dokumen_nomor)
: ($detail->dokumen_nomor
? [$detail->dokumen_nomor]
: []);
@endphp
@foreach ($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if (in_array(Auth::user()->roles[0]->name, ['administrator', 'pemohon-eo']))
@if (!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info">Nomor
Dokumen :
{{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $permohonan->debiture->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
@endif
<span
class="flex-none badge badge-sm badge-outline badge-warning mt-2"
onclick="viewPDF('{{ Storage::url($dokumen_jaminan[$index]) }}')"><i
class="ki-filled ki-eye mr-2"></i>Preview</span>
</div>
<br>
@endforeach
@endif
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px]">
Keterangan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
{{ $detail->keterangan ?? '' }}
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
@endforeach
</div>
@include('lpj::component.pdfviewer')
<div data-accordion="true">
@foreach ($permohonan->debiture->documents as $dokumen)
<div class="accordion-item [&:not(:last-child)]:border-b border-b-gray-200"
data-accordion-item="true" id="accordion_detail_jaminan">
<button class="accordion-toggle py-4 group "
data-accordion-toggle="#accordion_detail_jaminan_{{ $loop->index }}">
<span class="text-base text-gray-900 font-medium">
Dokument Kepemilikan
</span>
<i class="ki-outline ki-plus text-gray-600 text-2sm accordion-active:hidden block">
</i>
<i class="ki-outline ki-minus text-gray-600 text-2sm accordion-active:block hidden">
</i>
</button>
<div class="accordion-content hidden" id="accordion_detail_jaminan_{{ $loop->index }}">
<div class="card-table scrollable-x-auto pb-3">
<a href="{{ route('debitur.jaminan.bulk.download', ['id' => $permohonan->debiture->id, 'jaminan' => $dokumen->id]) }}"
class="ml-6 btn btn-dark dark:btn-light">
<i class="ki-outline ki-cloud-download"></i> Download Semua Dokumen
</a>
<table class="table align-middle text-sm text-gray-500">
@foreach ($dokumen->detail as $detail)
<tr>
<td class="py-2 text-gray-600 font-normal max-w-[100px]">
{{ $loop->index + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</td>
<td class="py-2 text-gray-800 font-normaltext-sm">
{{ $detail->name ?? '' }}
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px] align-top">
Dokumen Jaminan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
@if (isset($detail->dokumen_jaminan))
@php
$dokumen_jaminan = is_array(
json_decode($detail->dokumen_jaminan),
)
? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan];
$dokumen_nomor = is_array(
json_decode($detail->dokumen_nomor),
)
? json_decode($detail->dokumen_nomor)
: ($detail->dokumen_nomor
? [$detail->dokumen_nomor]
: []);
@endphp
@foreach ($dokumen_jaminan as $index => $dokumen)
<div class="flex w-full lg:w-[30%]">
@if (in_array(Auth::user()->roles[0]->name, ['administrator', 'pemohon-eo']))
@if (!empty($dokumen_nomor))
<span class="flex-1 mt-2 text-info">Nomor
Dokumen :
{{ $dokumen_nomor[$index] }}</span>
@endif
<a href="{{ route('debitur.jaminan.download', ['id' => $permohonan->debiture->id, 'dokumen' => $detail->id, 'index' => $index]) }}"
class="flex-none badge badge-sm badge-outline mt-2 mr-2">
{{ basename($dokumen) }}
<i class="ki-filled ki-cloud-download"></i>
</a>
@endif
<span
class="flex-none badge badge-sm badge-outline badge-warning mt-2"
onclick="viewPDF('{{ Storage::url($dokumen_jaminan[$index]) }}')"><i
class="ki-filled ki-eye mr-2"></i>Preview</span>
</div>
<br>
@endforeach
@endif
</td>
</tr>
<tr>
<td class="py-3 max-w-[100px]">
Keterangan
</td>
<td class="py-3 text-gray-700 text-2sm font-normal">
{{ $detail->keterangan ?? '' }}
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
@endforeach
</div>
@include('lpj::component.pdfviewer')
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Hubungan Cadeb/Debitur dengan pemilik dan penghuni
</h3>
</div>
@php
$statusKey = isset($forminspeksi['asset']['hub_cadeb']['sesuai']) ? 'sesuai' : 'tidak sesuai';
$selectedData = $forminspeksi['asset']['hub_cadeb'][$statusKey] ?? null;
@endphp
<div class="card-body">
</div>
</div>
@foreach ($permohonan->debiture->documents as $dokumen)
@if ($dokumen->jenisJaminan)
@php
$formKategori = json_decode($dokumen->jenisJaminan->form_kategori, true);
@endphp
@if (isset($formKategori) && $formKategori)
@php
$kategoriArray = is_array($formKategori) ? $formKategori : [$formKategori];
$kategoriUnik = array_unique($kategoriArray);
@endphp
<input type="hidden" name="action" value="{{ implode(',', $kategoriUnik) }}">
<input type="hidden" name="type" value="{{ implode(',', $kategoriUnik) }}">
@foreach ($kategoriUnik as $kategori)
{{-- Tampilkan komponen sesuai kategori --}}
@include('lpj::surveyor.components.' . str_replace('-', '-', $kategori), [
'dokumen' => $dokumen,
])
@endforeach
@endif
@endif
@endforeach
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Informasi dan pembanding
</h3>
</div>
@include('lpj::penilai.components.informasi-pembanding')
</div>
<form id="form-lpj" method="post" class="w-full grid gap-5">
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
total nilai pasar wajar
</h3>
</div>
<div class="card-body gap-5">
<div>
<label for="total_nilai_pasar_wajar" class="form-label">Total Nilai Pasar Wajar</label>
<div class="card-body grid gap-2.5 w-full">
<div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label max-w-56">Luas Tanah</label>
<input type="text" id="luas_tanah" class="input w-full currency-format"
name="luas_tanah"
value="{{ old('luas_tanah', $lpjData['luas_tanah'] ?? null) }}"
oninput="calculateTotal()">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="">X</label>
<label class="input">
<i class="">Rp
</i>
<input type="text" id="nilai_tanah_1" class=" w-full currency-format"
name="nilai_tanah_1"
value="{{ old('nilai_tanah_1', $lpjData['nilai_tanah_1'] ?? null) }}"
oninput="calculateTotal()">
</label>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label class="input">
<i class="">Rp
</i>
<input id="nilai_tanah_2" type="text" class=" w-full currency-format"
name="nilai_tanah_2"
value="{{ old('nilai_tanah_2', $lpjData['nilai_tanah_2'] ?? null) }}">
</label>
</div>
</div>
<div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label max-w-56">Luas Bangunan</label>
<input type="text" class="input w-full currency-format" id="luas_bangunan" name="luas_bangunan"
value="{{ old('luas_bangunan', $lpjData['luas_bangunan'] ?? null) }}"
oninput="calculateTotal()">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="">X</label>
<label class="input">
<i class="">Rp
</i>
<input type="text" class=" w-full currency-format"
id="nilai_bangunan_1"
name="nilai_bangunan_1"
value="{{ old('nilai_bangunan_1', $lpjData['nilai_bangunan_1'] ?? null) }}"
oninput="calculateTotal()">
</label>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label class="input">
<i class="">Rp
</i>
<input type="text" class=" w-full currency-format"
id="nilai_bangunan_2"
name="nilai_bangunan_2"
value="{{ old('nilai_bangunan_2', $lpjData['nilai_bangunan_2'] ?? null) }}">
</label>
</div>
</div>
<div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label max-w-56">Sarana Pelengkap</label>
<input type="text" class="input w-full currency-format"
id="sarana_pelengkap"
name="sarana_pelengkap"
value="{{ old('sarana_pelengkap', $lpjData['sarana_pelengkap'] ?? null) }}"
oninput="calculateTotal()">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="">X</label>
<label class="input">
<i class="">Rp
</i>
<input type="text" class=" w-full currency-format"
id="nilai_sarana_pelengkap_1"
name="nilai_sarana_pelengkap_1"
value="{{ old('nilai_sarana_pelengkap_1', $lpjData['nilai_sarana_pelengkap_1'] ?? null) }}"
oninput="calculateTotal()">
>
</label>
</div>
<div class="grid gap-5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label class="input">
<i class="">Rp
</i>
<input type="text" class="w-full currency-format"
id="nilai_sarana_pelengkap_2"
name="nilai_sarana_pelengkap_2"
value="{{ old('nilai_sarana_pelengkap_2', $lpjData['nilai_sarana_pelengkap_2'] ?? null) }}">
</label>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="input">
<i class="">Rp
</i>
<input type="text" class=" w-full currency-format"
id="total_nilai_pasar_wajar"
name="total_nilai_pasar_wajar"
value="{{ old('total_nilai_pasar_wajar', $lpjData['total_nilai_pasar_wajar'] ?? null) }}">
</label>
</div>
</div>
</div>
</div>
</div>
<div>
<label for="total_nilai_pasar_wajar" class="form-label uppercase">TOTAL NILAI
LIKUIDASI</label>
<div class="card-body grid gap-2.5 w-full">
<div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<input type="text"
id="likuidasi"
name="likuidasi" class="input w-full currency-format"
value="{{ old('likuidasi', $lpjData['likuidasi'] ?? null) }}"
oninput="calculateTotal()">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="">X</label>
<label class="input">
<i class="">Rp
</i>
<input type="text" class=" w-full currency-format"
id="likuidasi_nilai_1"
name="likuidasi_nilai_1"
value="{{ old('likuidasi_nilai_1', $lpjData['likuidasi_nilai_1'] ?? null) }}"
oninput="calculateTotal()">
</label>
</div>
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label class="input">
<i class="">Rp
</i>
<input type="text" class=" w-full currency-format"
name="likuidasi_nilai_2"
value="{{ old('likuidasi_nilai_2', $lpjData['likuidasi_nilai_2'] ?? null) }}">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
nilai asuransi
</h3>
</div>
<div class="card-body">
<div>
<label for="total_nilai_pasar_wajar" class="form-label uppercase">TOTAL NILAI ASURANSI</label>
<div class="card-body grid gap-2.5 w-full">
<div class="flex grid-col-3 gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="form-label">Luas Bangunan</label>
<input type="text" class="input w-full currency-format"
id="asuransi_luas_bangunan"
name="asuransi_luas_bangunan"
value="{{ old('asuransi_luas_bangunan', $lpjData['asuransi_luas_bangunan'] ?? null) }}"
oninput="calculateTotal()">
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province" class="">X</label>
<label class="input">
<i class="">Rp
</i>
<input type="text" class="input w-full currency-format"
id="asuransi_nilai_1"
name="asuransi_nilai_1"
value="{{ old('asuransi_nilai_1', $lpjData['asuransi_nilai_1'] ?? null) }}"
oninput="calculateTotal()">
</label>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label class="input">
<i class="">Rp
</i>
<input type="text" class="input w-full currency-format"
name="asuransi_nilai_2"
value="{{ old('asuransi_nilai_2', $lpjData['asuransi_nilai_2'] ?? null) }}">
</label>
</div>
</div>
</div>
</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="saveLpjSederhanadanStandard()">
<span id="saveButtonText">Save</span>
</button>
</div>
</form>
</div>
</div>
@endsection
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('.currency-format').forEach(input => {
input.addEventListener('input', function() {
formatCurrency(this);
});
});
document.querySelectorAll('.number-format').forEach(input => {
input.addEventListener('input', function() {
formatNumber(this);
});
});
});
function calculateTotal() {
// Fungsi untuk menghapus format ribuan/koma
const parseInput = (value) => parseFloat(value.replace(/[^0-9]/g, '')) || 0;
// Ambil elemen input dan parse nilainya
let luasTanah = parseInput(document.getElementById('luas_tanah').value);
let hargaPerMeterTanah = parseInput(document.querySelector('input[name="nilai_tanah_1"]').value);
let totalLuasTanah = document.querySelector('input[name="nilai_tanah_2"]');
let luasBangunan = parseInput(document.getElementById('luas_bangunan').value);
let hargaPerMeterBangunan = parseInput(document.querySelector('input[name="nilai_bangunan_1"]').value);
let totalLuasBangunan = document.querySelector('input[name="nilai_bangunan_2"]');
let saranaPelengkap = parseInput(document.getElementById('sarana_pelengkap').value);
let hargaPerMeterSarana = parseInput(document.querySelector('input[name="nilai_sarana_pelengkap_1"]').value);
let totalLuasSarana = document.querySelector('input[name="nilai_sarana_pelengkap_2"]');
// Bagian Likuidasi
let persentaseLikuidasi = parseInput(document.getElementById('likuidasi').value);
let totalNilaiPasarLikuidasi = document.querySelector('input[name="likuidasi_nilai_1"]');
let totalLikuidasi = document.querySelector('input[name="likuidasi_nilai_2"]');
// Bagian Asuransi
let luasBangunanAsuransi = parseInput(document.getElementById('asuransi_luas_bangunan').value);
let hargaPerMeterAsuransi = parseInput(document.querySelector('input[name="asuransi_nilai_1"]').value);
let totalNilaiAsuransi = document.querySelector('input[name="asuransi_nilai_2"]');
let total = document.querySelector('input[name="total_nilai_pasar_wajar"]');
// Hitung hasil
const hasilTanah = luasTanah * hargaPerMeterTanah;
const hasilBangunan = luasBangunan * hargaPerMeterBangunan;
const hasilSarana = saranaPelengkap * hargaPerMeterSarana;
const totalNilaiPasarWajar = hasilTanah + hasilBangunan + hasilSarana;
// Perhitungan Likuidasi
const hasilLikuidasi = (persentaseLikuidasi / 100) * totalNilaiPasarWajar;
// Perhitungan Asuransi
const hasilAsuransi = luasBangunanAsuransi * hargaPerMeterAsuransi;
// Tampilkan hasil dalam format currency
totalLuasTanah.value = formatCurrency(hasilTanah.toString());
totalLuasBangunan.value = formatCurrency(hasilBangunan.toString());
totalLuasSarana.value = formatCurrency(hasilSarana.toString());
total.value = formatCurrency(totalNilaiPasarWajar.toString());
// Tampilkan nilai likuidasi dan asuransi
totalNilaiPasarLikuidasi.value = formatCurrency(totalNilaiPasarWajar.toString());
totalNilaiAsuransi.value = formatCurrency(hasilAsuransi.toString());
// Total likuidasi (total nilai pasar wajar + nilai likuidasi)
// const totalPasarWajarDenganLikuidasi = totalNilaiPasarWajar + hasilLikuidasi;
totalLikuidasi.value = formatCurrency(hasilLikuidasi.toString());
}
function saveLpjSederhanadanStandard() {
const form = document.getElementById('form-lpj');
const formData = new FormData(form);
const jsonData = {
luas_tanah: formData.get('luas_tanah'),
nilai_tanah_1: formData.get('nilai_tanah_1'),
nilai_tanah_2: formData.get('nilai_tanah_2'),
luas_bangunan: formData.get('luas_bangunan'),
nilai_bangunan_1: formData.get('nilai_bangunan_1'),
nilai_bangunan_2: formData.get('nilai_bangunan_2'),
sarana_pelengkap: formData.get('sarana_pelengkap'),
nilai_sarana_pelengkap_1: formData.get('nilai_sarana_pelengkap_1'),
nilai_sarana_pelengkap_2: formData.get('nilai_sarana_pelengkap_2'),
total_nilai_pasar_wajar: formData.get('total_nilai_pasar_wajar'),
likuidasi: formData.get('likuidasi'),
likuidasi_nilai_1: formData.get('likuidasi_nilai_1'),
likuidasi_nilai_2: formData.get('likuidasi_nilai_2'),
asuransi_luas_bangunan: formData.get('asuransi_luas_bangunan'),
asuransi_nilai_1: formData.get('asuransi_nilai_1'),
asuransi_nilai_2: formData.get('asuransi_nilai_2')
};
showLoadingSwal('Mengirim data ke server...');
const urlParams = new URLSearchParams(window.location.search);
const permohonanId = {{ $permohonan->id }};
const documentId = urlParams.get('documentId');
const inspeksiId = urlParams.get('inspeksiId');
const requestUrl = `{{ route('penilai.storeLpjSederhanadanStandard') }}`;
$.ajax({
url: requestUrl,
type: 'POST',
data: JSON.stringify({
permohonan_id: permohonanId,
document_id: documentId,
inspeksi_id: inspeksiId,
lpj: jsonData,
}),
contentType: 'application/json',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
hideLoadingSwal();
if (response.success) {
Swal.fire({
title: 'Berhasil!',
text: response.message,
icon: 'success',
confirmButtonText: 'OK'
}).then((response) => {
if (response.isConfirmed) {
window.location.href =
'{{ route('penilai.show', ['id' => $permohonan->id]) }}';
}
});
} else {
Swal.fire({
title: 'Error!',
text: response.message || 'Terjadi kesalahan',
icon: 'error',
confirmButtonText: 'OK'
});
}
console.log(response);
},
error: function(xhr, status, error) {
let errors = xhr.responseJSON?.errors;
$('.alert').text('');
if (errors) {
$.each(errors, function(key, value) {
$(`#error-${key}`).text(value[0]);
toastrErrorBuild(value[0]);
});
}
hideLoadingSwal();
console.log(errors);
}
});
}
</script>
@include('lpj::surveyor.js.utils')

View File

@@ -0,0 +1,537 @@
@extends('layouts.main')
@section('breadcrumbs')
{{-- {{ Breadcrumbs::render(request()->route()->getName()) }}
--}}
Resume
@endsection
@section('content')
@include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<form id="form-memo" method="POST" class="w-full grid gap-5">
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Memo Antar Kantor
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('penilai.show', ['id' => $permohonan->id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kepada</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="kepada" class="input w-full" placeholder="Masukkan..."
value="">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Dari</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="dari" class="input w-full" placeholder="Masukkan..."
value="">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Memo</label>
<div class="flex flex-wrap items-base line w-full">
<input type="text" name="nomor_memo" class="input w-full" placeholder="Masukkan..."
value="">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Tanggal</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" name="tanggal" class="input w-full" placeholder="Masukkan..."
value="">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Perihal</label>
<div class="flex flex-wrap items-base line w-full">
<input type="text" name="perihal" class="input w-full" placeholder="Masukkan..."
value="">
</div>
</div>
</div>
</div>
<div class="card w-full bg-white rounded-lg shadow-md ">
<div class="card-header">
<h1 class="text-md font-medium text-gray-900 uppercase">Sehubungan dengan permintaan BAGI Cabang
............., untuk dilakukan survey untuk penilaian baru/review, calon debitur/debitur an
.............,
dengan deskripsi sebagai berikut :
</h1>
</div>
<div class="card-body">
<div class="grid gap-5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Jenis Aset</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="jenis_asset_tidak_sesuai" class="input w-full" name="jenis_asset_tidak_sesuai">
<option value="">Select Jenis asset</option>
@foreach ($basicData['jenisJaminan'] as $item)
<option value="{{ $item->name }}">{{ $item->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="address" class="form-label max-w-56">Lokasi</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="address" name="address" class="input w-full"
placeholder="Masukkan Jl." value="{{ old('address') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="province_code" class="form-label max-w-56">Provinsi</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="province_code" name="province_code" class="input w-full">
<option value="">Pilih Provinsi</option>
@foreach ($provinces as $item)
<option value="{{ $item->code }}">{{ $item->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="city_code" class="form-label max-w-56">Kota/Kabupaten</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="city_code" name="city_code" class="select w-full">
<option value="">Pilih Kota/Kabupaten</option>
</select>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="district_code" class="form-label max-w-56">Kecamatan</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="district_code" name="district_code" class="select w-full">
<option value="">Pilih Kecamatan</option>
</select>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="village_code" class="form-label max-w-56">Kelurahan</label>
<div class="flex flex-wrap items-baseline w-full">
<select id="village_code" name="village_code" class="select w-full">
<option value="">Pilih Kelurahan</option>
</select>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="address" class="form-label max-w-56">Tanggal Survey</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" id="address" name="address" class="input w-full"
placeholder="Masukkan Jl." value="{{ old('address') }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="address" class="form-label max-w-56">Penilai</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="address" name="address" class="input w-full"
placeholder="Masukkan Jl." value="{{ old('address') }}">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Dokument
</h3>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Terlampir</label>
<div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full">
<div class="terlampir flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="terlampir[]" rows="3">{{ old('terlampir', '') }}</textarea>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Berdasarkan hasil survey dapat disampaikan sbb:</label>
<div id="hasil_survey" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['hasil_survey']))
@foreach ($forminspeksi['hasil_survey'] as $index => $positif)
<div class="hasil_survey flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="hasil_survey[]" rows="3">{{ old("hasil_survey.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="hasil_survey flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="hasil_survey[]" rows="3">{{ old('hasil_survey.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('hasil_survey', 'hasil_survey')">
<i class="ki-outline ki-plus"></i>
</button>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Kesimpulan dan saran</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['kesimpulan_saran']))
@foreach ($forminspeksi['kesimpulan_saran'] as $index => $negatif)
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kesimpulan_saran[]" rows="3">{{ old("kesimpulan_saran.$index", $negatif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="kesimpulan_saran flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="kesimpulan_saran[]" rows="3">{{ old('kesimpulan_saran.0', $forminspeksi['kesimpulan_saran'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-kesimpulan_saran" class="alert text-danger text-sm"></em>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-negatif-container', 'kesimpulan_saran')">
<i class="ki-outline ki-plus"></i>
</button>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Peta lokasi
</h3>
</div>
<div class="card-body grid gap-5">
<div class="border-t mt-5">
<div class="flex card-header justify-center" id="basic_settings">
<h3 class="card-title uppercase">
Rute Menuju Lokasi
</h3>
</div>
<div class="">
@if (isset($formPeta))
@php
$foto = ['foto_gistaru', 'foto_bhumi', 'foto_argis_region', 'foto_tempat'];
@endphp
@foreach ($foto as $item)
@if (isset($formPeta[$item]) && $formPeta[$item])
<div class="flex items-center justify-between mt-5 border-b">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ ucwords(str_replace('_', ' ', $item)) }}
</h2>
<div class="flex items-center mt-5">
<img src="{{ Storage::url($formPeta[$item]) }}"
alt="{{ $item }}">
</div>
</div>
</div>
@endif
@endforeach
@endif
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Foto jaminan
</h3>
</div>
<div class="card-body grid gap-5">
<div class="border-t mt-5">
<div class="flex card-header justify-center" id="basic_settings">
<h3 class="card-title uppercase">
Rute Menuju Lokasi
</h3>
</div>
<div class="">
@if (isset($formFoto))
@foreach ($formFoto['rute_menuju_lokasi'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute'] . ' ' . $loop->index + 1 }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
<div class="border-t mt-5">
<div class="flex card-header justify-center" id="basic_settings">
<h3 class="card-title uppercase">
Object Jaminan
</h3>
</div>
<div class="">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['name_objek'] }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_objek']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@if (isset($formFoto['foto_basement']))
<div class="border-t mt-5">
<div class="flex card-header justify-center" id="basic_settings">
<h3 class="card-title uppercase">
Basement
</h3>
</div>
<div class="">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Basemnt
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="border-t mt-5">
<div class="flex card-header justify-center" id="basic_settings">
<h3 class="card-title uppercase">
Gerbang
</h3>
</div>
<div class="">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Gerbang
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="border-t mt-5">
<div class="flex card-header justify-center" id="basic_settings">
<h3 class="card-title uppercase">
Pendamping
</h3>
</div>
<div class="">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
</div>
</div>
<div class="flex justify-start gap-5">
<a class="btn btn-success" onclick="saveMemo()">
SAVE
</a>
</div>
</form>
</div>
@endsection
@include('lpj::surveyor.js.utils')
<script>
function saveMemo() {
const form = document.getElementById('form-memo');
const formData = new FormData(form);
const jsonData = {
kepada: formData.get('kepada'),
dari: formData.get('dari'),
nomor_memo: formData.get('nomor_memo'),
tanggal: formData.get('tanggal'),
perihal: formData.get('perihal'),
jenis_asset_tidak_sesuai: formData.get('jenis_asset_tidak_sesuai'),
lokasi: {
address: formData.get('address') || '',
province_code: formData.get('province_code') || '',
city_code: formData.get('city_code') || '',
district_code: formData.get('district_code') || '',
village_code: formData.get('village_code') || '',
},
terlampir: (formData.getAll('terlampir[]') || []),
hasil_survey: (formData.getAll('hasil_survey[]') || []),
kesimpulan_saran: (formData.getAll('kesimpulan_saran[]') || []),
};
showLoadingSwal('Mengirim data ke server...');
const urlParams = new URLSearchParams(window.location.search);
const permohonanId = urlParams.get('permohonanId');
const documentId = urlParams.get('documentId');
const inspeksiId = urlParams.get('inspeksiId');
const requestUrl = `{{ route('penilai.storeMemo') }}`;
$.ajax({
url: requestUrl,
type: 'POST',
data: JSON.stringify({
permohonan_id: permohonanId,
document_id: documentId,
inspeksi_id: inspeksiId,
memo: jsonData,
}),
contentType: 'application/json',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
hideLoadingSwal();
if (response.success) {
Swal.fire({
title: 'Berhasil!',
text: response.message,
icon: 'success',
confirmButtonText: 'OK'
}).then((response) => {
if (response.isConfirmed) {
window.location.href =
'{{ route('penilai.show', ['id' => $permohonan->id]) }}';
}
});
} else {
Swal.fire({
title: 'Error!',
text: response.message || 'Terjadi kesalahan',
icon: 'error',
confirmButtonText: 'OK'
});
}
console.log(response);
},
error: function(xhr, status, error) {
let errors = xhr.responseJSON?.errors;
$('.alert').text('');
if (errors) {
$.each(errors, function(key, value) {
$(`#error-${key}`).text(value[0]);
toastrErrorBuild(value[0]);
});
}
hideLoadingSwal();
console.log(errors);
}
});
}
</script>

View File

@@ -0,0 +1,94 @@
@extends('layouts.main')
@section('breadcrumbs')
{{-- {{ Breadcrumbs::render(request()->route()->getName()) }}
--}}
Paparan
@endsection
@section('content')
@include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Data Jaminan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('penilai.show', ['id' => $permohonan->id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="card-body grid gap-5 grid-cols-2">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nama Debitur</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->debiture))
<p class="text-2sm text-gray-700">{{ $permohonan->debiture->name }}</p>
@endif
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat Object</label>
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen->pemilik) }}
</span>
@endforeach
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Registrasi</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Cab/Direktorat</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->branch))
<p class="text-2sm text-gray-700">{{ $permohonan->branch->name }}</p>
@endif
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Laporan</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">AO</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->user))
<p class="text-2sm text-gray-700">{{ $permohonan->user->name }}</p>
@endif
</div>
</div>
</div>
</div>
@include('lpj::penilai.components.foto-lampiran')
<div class="card">
<div class="card-header uppercase">
Kertas Kerja
</div>
<div class="card-body">
@php
$url = asset('storage/' . $penilai->kertas_kerja);
@endphp
<iframe src="https://docs.google.com/gview?url={{$url}}&embedded=true" style="width:100%; height:500px;" frameborder="0"></iframe>
</div>
</div>
</div>
@endsection

View File

@@ -9,186 +9,258 @@
@section('content')
@include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Data Jaminan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('penilai.show', ['id' => $permohonan->id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="card-body grid gap-5 grid-cols-2">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nama Debitur</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->debiture))
<p class="text-2sm text-gray-700">{{ $permohonan->debiture->name }}</p>
@endif
<form id="formResume" method="POST" class="w-full grid gap-5">
@csrf
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
Data Jaminan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('penilai.show', ['id' => $permohonan->id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back
</a>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat Object</label>
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen->pemilik) }}
</span>
@endforeach
<div class="card-body grid gap-5 grid-cols-2">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nama Debitur</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->debiture))
<p class="text-2sm text-gray-700">{{ $permohonan->debiture->name }}</p>
@endif
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Registrasi</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Alamat Object</label>
<div class="flex flex-wrap items-baseline w-full">
@foreach ($permohonan->debiture->documents as $dokumen)
<span class="text-2sm text-gray-700">
{{ formatAlamat($dokumen->pemilik) }}
</span>
@endforeach
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Registrasi</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Cab/Direktorat</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->branch))
<p class="text-2sm text-gray-700">{{ $permohonan->branch->name }}</p>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Cab/Direktorat</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->branch))
<p class="text-2sm text-gray-700">{{ $permohonan->branch->name }}</p>
@endif
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Laporan</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Nomor Laporan</label>
<div class="flex flex-wrap items-base line w-full">
<p class="text-2sm text-gray-700">{{ $permohonan->nomor_registrasi }}</p>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">AO</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->user))
<p class="text-2sm text-gray-700">{{ $permohonan->user->name }}</p>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">AO</label>
<div class="flex flex-wrap items-baseline w-full">
@if (isset($permohonan->user))
<p class="text-2sm text-gray-700">{{ $permohonan->user->name }}</p>
@endif
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
faktor
</h3>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Positif</label>
<div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['fakta_positif']))
@foreach ($forminspeksi['fakta']['fakta_positif'] as $index => $positif)
<div class="card">
<div class="card-header">
<h3 class="card-title uppercase">
faktor
</h3>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Positif</label>
<div id="fakta-positif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($resumeData['fakta']['fakta_positif']))
@foreach ($resumeData['fakta']['fakta_positif'] as $index => $positif)
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea>
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old('fakta_positif.0', '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-positif-container', 'fakta_positif')">
<i class="ki-outline ki-plus"></i>
</button>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-positif-container', 'fakta_positif')">
<i class="ki-outline ki-plus"></i>
</button>
</div>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Negatif</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['fakta_negatif']))
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Faktor Negatif</label>
<div id="fakta-negatif-container" class="flex flex-wrap items-baseline w-full">
@if (!empty($forminspeksi['fakta']['fakta_negatif']))
@foreach ($forminspeksi['fakta']['fakta_negatif'] as $index => $negatif)
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old("fakta_negatif.$index", $negatif) }}</textarea>
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $forminspeksi['fakta']['fakta_negatif'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-fakta_negatif" class="alert text-danger text-sm"></em>
</div>
@endforeach
@else
<div class="fakta_negatif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_negatif[]" rows="3">{{ old('fakta_negatif.0', $forminspeksi['fakta']['fakta_negatif'][0] ?? '') }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button" style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
<em id="error-fakta_negatif" class="alert text-danger text-sm"></em>
</div>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-negatif-container', 'fakta_negatif')">
<i class="ki-outline ki-plus"></i>
</button>
@endif
<button type="button" class="btn btn-primary btn-sm mt-5"
onclick="addClonableItem('fakta-negatif-container', 'fakta_negatif')">
<i class="ki-outline ki-plus"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="card min-w-full">
<div class="card-header">
<h3 class="card-title uppercase">
KESIMPULAN NILAI PASAR WAJAR
</h3>
</div>
<div class="card-body grid gap-5">
<div class="card min-w-full">
<div class="card-header">
<h3 class="card-title uppercase">
KESIMPULAN NILAI PASAR WAJAR
</h3>
</div>
<div class="card-body grid gap-5">
<div class="gird gap-5">
<label class="form-label max-w-56">1. SESUAI FISIK</label>
<div class="flex flex-wrap items-baseline w-full mt-5">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm">
<thead>
<tr>
<th class="text-center">Sertipikat</th>
<th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th>
<div class="gird gap-5">
<label class="form-label max-w-56">1. SESUAI FISIK</label>
<div class="flex flex-wrap items-baseline w-full mt-5">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm">
<thead>
<tr>
<th class="text-center">Sertipikat</th>
<th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th>
</tr>
</thead>
</thead>
<tbody>
<tr>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
</td>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
</td>
<td class="text-center"> <input type="text" name="luas_bangunan_pembanding[]"
class="input number-format"></td>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
</td>
</tr>
</tbody>
</table>
</tr>
</thead>
</thead>
<tbody>
<tr>
<td class="text-center">
<input type="text" name="fisik_sertifikat[]" class="input number-format">
</td>
<td class="text-center">
<input type="text" name="fisik_luas_tanah[]" class="input number-format">
</td>
<td class="text-center"> <input type="text" name="fisik_luas_bangunan[]"
class="input number-format"></td>
<td class="text-center">
<input type="text" name="fisik_nilai[]" class="input number-format">
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="gird gap-5">
<label class="form-label max-w-56">2. SESUAI IMB</label>
<div class="flex flex-wrap items-baseline w-full">
<table
class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5">
<thead>
<tr>
<th class="text-center">Sertipikat</th>
<th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th>
</tr>
</thead>
</thead>
<tbody>
<tr>
<td class="text-center">
<input type="text" name="sesuai_sertifikat[]" class="input number-format">
</td>
<td class="text-center">
<input type="text" name="sesuai_luas_tanah[]" class="input number-format">
</td>
<td class="text-center">
<input type="text" name="sesuai_luas_bangunan[]"
class="input number-format">
</td>
<td class="text-center">
<input type="text" name="sesuai_nilai[]" class="input number-format">
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<button type="button" class="btn btn-primary btn-sm mt-5" onclick="tambahKesimpulanNilai()">
<i class="ki-outline ki-plus"></i>
Kesimpulan Nilai
</button>
</div>
<div id="kesimpulan" class="grid gap-5 w-full"></div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
<label class="form-label lg: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 class="card-footer">
<button type="button" class="btn btn-success" onclick="saveResume()">Save</button>
</div>
</div>
</form>
<div class="gird gap-5">
<label class="form-label max-w-56">2. SESUAI IMB</label>
<div class="flex flex-wrap items-baseline w-full">
</div>
@endsection
@include('lpj::surveyor.js.utils')
<script type="text/javascript">
console.log('LPJ Data:', @json($resumeData));
let counter = 1;
function tambahKesimpulanNilai() {
const kesimpulan = document.getElementById('kesimpulan');
kesimpulan.innerHTML += `
<div class="grid gap-5 w-full" id="kesimpulan-${counter}">
<label class="form-label kesimpulan max-w-56">${counter}. SESUAI IMB</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="tabel-container w-full">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm mt-5">
<thead>
<tr>
@@ -196,59 +268,180 @@
<th class="text-center">Luas Tanah</th>
<th class="text-center">Luas Bangunan</th>
<th class="text-center">Nilai Pasar Wajar</th>
<th class="text-center">Aksi</th>
</tr>
</thead>
</thead>
<tbody>
<tr>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
<input type="text" name="sertipikat[]"
class="input number-format">
</td>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
<input type="text" name="luas_tanah[]"
class="input number-format">
</td>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
<input type="text" name="luat_bangunan[]"
class="input number-format">
</td>
<td class="text-center">
<input type="text" name="luas_bangunan_pembanding[]"
class="input number-format">
<input type="text" name="nilai_pasar_wajar[]"
class="input number-format">
</td>
<td class="text-center">
<button type="button" class="btn btn-danger" onclick="deleteRow(this)">Delete</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div >
<button type="button" class="btn btn-primary btn-sm mt-5">
<i class="ki-outline ki-plus"></i>
Kesimpulan Nilai
</button>
</div>
<div id="kesimpulan"></div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5" style="margin-top: 20px">
<label class="form-label lg: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>
`;
counter++;
}
<div class="card-footer">
function deleteRow(button) {
const rowContainer = button.closest('.grid');
rowContainer.remove();
updateLabelNumbers();
}
<button type="submit" class="btn btn-success">Save</button>
</div>
</div>
function updateLabelNumbers() {
const labels = document.querySelectorAll('.kesimpulan');
labels.forEach((label, index) => {
// Update setiap label dengan nomor yang benar
label.textContent = `${index + 1}. SESUAI IMB`;
});
}
</div>
@endsection
@include('lpj::surveyor.js.utils')
function saveResume() {
showLoadingSwal('Mengirim data keserver ...');
const formElement = document.querySelector('form');
const jsonData = formToJson(formElement);
console.log('Data dalam format JSON:', JSON.stringify(jsonData, null, 2));
const urlParams = new URLSearchParams(window.location.search); // Mengambil query parameters dari URL
const permohonanId = urlParams.get('permohonanId');
const documentId = urlParams.get('documentId');
const inspeksiId = urlParams.get('inspeksiId');
const requestUrl =
`{{ route('penilai.storeResume') }}`;
$.ajax({
url: requestUrl,
type: 'POST',
data: JSON.stringify({
permohonan_id: permohonanId,
document_id: documentId,
inspeksi_id: inspeksiId,
resume: jsonData,
}),
contentType: 'application/json',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
hideLoadingSwal();
if (response.success) {
Swal.fire({
title: 'Berhasil!',
text: response.message,
icon: 'success',
confirmButtonText: 'OK'
}).then((response) => {
if (response.isConfirmed) {
window.location.href =
'{{ route('penilai.show', ['id' => $permohonan->id]) }}';
}
});
} else {
Swal.fire({
title: 'Error!',
text: response.message || 'Terjadi kesalahan',
icon: 'error',
confirmButtonText: 'OK'
});
}
console.log(response);
},
error: function(xhr, status, error) {
let errors = xhr.responseJSON?.errors;
$('.alert').text('');
if (errors) {
$.each(errors, function(key, value) {
$(`#error-${key}`).text(value[0]);
toastrErrorBuild(value[0]);
});
// toastrErrorBuild(error);
}
hideLoadingSwal();
console.log(errors);
}
});
}
function formToJson(formElement) {
const formData = new FormData(formElement);
const jsonData = {
fakta: {
fakta_positif: [],
fakta_negatif: []
},
fisik: [],
sesuai_imb: [],
keterangan: ""
};
// Ambil fakta positif
document.querySelectorAll('textarea[name="fakta_positif[]"]').forEach(textarea => {
jsonData.fakta.fakta_positif.push(textarea.value);
});
// Ambil fakta negatif
document.querySelectorAll('textarea[name="fakta_negatif[]"]').forEach(textarea => {
jsonData.fakta.fakta_negatif.push(textarea.value);
});
// Ambil data fisik
document.querySelectorAll('table tbody tr').forEach(row => {
const fisikData = {
sertifikat: row.querySelector('input[name="fisik_sertifikat[]"]')?.value || "",
luas_tanah: row.querySelector('input[name="fisik_luas_tanah[]"]')?.value || "",
luas_bangunan: row.querySelector('input[name="fisik_luas_bangunan[]"]')?.value || "",
nilai: row.querySelector('input[name="fisik_nilai[]"]')?.value || ""
};
if (fisikData.sertifikat) {
jsonData.fisik.push(fisikData);
}
});
// Ambil data sesuai IMB
document.querySelectorAll('table tbody tr').forEach(row => {
const imbData = {
sertifikat: row.querySelector('input[name="sesuai_sertifikat[]"]')?.value || "",
luas_tanah: row.querySelector('input[name="sesuai_luas_tanah[]"]')?.value || "",
luas_bangunan: row.querySelector('input[name="sesuai_luas_bangunan[]"]')?.value || "",
nilai: row.querySelector('input[name="sesuai_nilai[]"]')?.value || ""
};
if (imbData.sertifikat) {
jsonData.sesuai_imb.push(imbData);
}
});
// Ambil keterangan
const keterangan = formElement.querySelector('textarea[name="keterangan"]')?.value || "";
jsonData.keterangan = keterangan;
return jsonData;
}
// Cara Penggunaan
</script>

View File

@@ -5,92 +5,92 @@
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
data-datatable-state-save="false" id="penilai-table" data-api-url="{{ route('penilai.dataForTables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Penilai
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Penilai" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="penilai-table" data-api-url="{{ route('penilai.dataForTables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Penilai
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Penilai" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Pemohon(Cabang/Direktorat) </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> AO </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="jenis_fasilitas_kredit_id">
<span class="sort"> <span class="sort-label"> Fasilitas Kredit </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_survei">
<span class="sort"> <span class="sort-label"> Tanggal Survei </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="due_date_sla">
<span class="sort"> <span class="sort-label"> Due Date SLA </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Pemohon(Cabang/Direktorat) </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> AO </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="jenis_fasilitas_kredit_id">
<span class="sort"> <span class="sort-label"> Fasilitas Kredit </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_survei">
<span class="sort"> <span class="sort-label"> Tanggal Survei </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="due_date_sla">
<span class="sort"> <span class="sort-label"> Due Date SLA </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -181,12 +181,22 @@
actions: {
title: 'Action',
render: (item, data) => {
return `
if (data.status === 'done') {
return `
<div class="flex flex-nowrap justify-center gap-1.5">
<a class="btn btn-sm btn-outline btn-info" href="penilai/${data.id}/show">
<i class="ki-outline ki-eye"></i>
</a>
</div>`;
} else {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-success" onclick="showLoadingSwal('Masih Menunggu proses inspeksi dari surveyor...')">
<i class="ki-filled ki-watch"></i>
</a>
</div>`
}
},
}
},
@@ -200,4 +210,22 @@
});
</script>
<script>
function showLoadingSwal(message, duration = 5000) {
Swal.fire({
title: message,
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading();
},
timer: duration, // Durasi dalam milidetik
timerProgressBar: true, // Menampilkan progres bar timer
}).then((result) => {
if (result.dismiss === Swal.DismissReason.timer) {
console.log('Dialog loading otomatis ditutup.');
}
});
}
</script>
@endpush

View File

@@ -114,144 +114,7 @@
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Rute Menuju Lokasi
</h3>
</div>
<div class="card-body">
@if (isset($formFoto))
@foreach ($formFoto['rute_menuju_lokasi'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class="text-gray-600 font-semibold text-xl">
{{ $item['name_rute'] . ' ' . $loop->index + 1 }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_rute']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Object Jaminan
</h3>
</div>
<div class="card-body">
@if (isset($formFoto['object_jaminan']))
@foreach ($formFoto['object_jaminan'] as $item)
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
{{ $item['name_objek'] }}
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($item['foto_objek']) }}" alt="">
</div>
</div>
</div>
@endforeach
@endif
</div>
</div>
@if (isset($formFoto['foto_basement']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Basement
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Basemnt
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_basement']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['foto_gerbang']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Gerbang
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Gerbang
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['foto_gerbang']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@if (isset($formFoto['pendamping']))
<div class="card">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Pendamping
</h3>
</div>
<div class="card-body">
<div class="flex items-center justify-between mt-5">
<div class="grid gap-5">
<h2 class=" font-semibold text-xl">
Pendamping
</h2>
<div class="flex items-center">
<img src="{{ Storage::url($formFoto['pendamping']) }}" alt="">
</div>
</div>
</div>
</div>
</div>
@endif
@include('lpj::penilai.components.foto-lampiran')
</div>
@endsection

View File

@@ -5,6 +5,7 @@
@endsection
@section('content')
@include('lpj::assetsku.includenya')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
@@ -174,32 +175,38 @@
</p>
</div>
</div>
</div>
@php
$inspeksiId = null;
foreach ($dokumen->inspeksi as $item) {
$inspeksiId = $item->id;
}
@endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full card-footer mt-2 ">
<div class="flex gap-5">
<a class="btn btn-primary" href="{{ route('penilai.lampiran', $permohonan->id) }}">
<a class="btn btn-primary"
href="{{ route('penilai.lampiran', $permohonan->id) }}?documentId={{ $dokumen->id }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $dokumen->jenis_jaminan_id }}">
LAMPIRAN FOTO DAN DOKUMEN
</a>
<a class="btn btn-primary" data-modal-toggle="#modal_2">
KERTAS KERJA
</a>
<a class="btn btn-primary" href="#">
<a class="btn btn-primary" href="{{ route('penilai.paparan') }}?permohonanId={{ $permohonan->id }}&documentId={{ $dokumen->id }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $dokumen->jenis_jaminan_id }}">
PAPARAN
</a>
<div class="dropdown" data-dropdown="true" data-dropdown-trigger="click">
<button class="dropdown-toggle btn btn-primary">
WORKSHEET
<button class="dropdown-toggle btn btn-primary uppercase">
Pembuatan Laporan
</button>
<div class="dropdown-content w-full max-w-56 py-2">
<div class="menu menu-default flex flex-col w-full">
<div class="menu-item">
<a class="menu-link" href="{{ route('penilai.memo', $permohonan->id) }}">
<a class="menu-link"
onclick="memo('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-badge">
</i>
@@ -210,7 +217,8 @@
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="{{ route('penilai.resume', $permohonan->id) }}">
<a class="menu-link"
onclick="resume('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-profile-circle">
</i>
@@ -220,20 +228,21 @@
</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" onclick="seletSederhanaStandart()">
<span class="menu-icon">
<i class="ki-outline ki-setting-2">
</i>
</span>
<span class="menu-title">
LPJ
</span>
<div class="menu-item">
<a class="menu-link"
onclick="seletSederhanaStandart('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-setting-2"></i>
</span>
<span class="menu-title">LPJ</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="#">
<a class="menu-link"
onclick="rap('{{ $permohonan->id }}', '{{ $dokumen->id }}', '{{ $inspeksiId }}', {{ $dokumen->jenis_jaminan_id }})">
<span class="menu-icon">
<i class="ki-outline ki-message-programming">
</i>
@@ -249,25 +258,19 @@
</div>
<div class="flex justify-end gap-5">
<a class="btn btn-success" href="#">
SAVE
</a>
<a class="btn btn-success" href="#">
REPORT
</a>
<a class="btn btn-success" href="#">
PRINT OUT
</a>
</div>
</div>
</div>
@endforeach
<div class="flex justify-start gap-5">
<a class="btn btn-success" onclick="savePenilai()">
REPORT
</a>
</div>
</div>
@@ -285,29 +288,37 @@
</button>
</div>
<div class="modal-body grid gap-5">
@php
$jenisJaminanId = null;
$inspeksiId = null;
$documentId = null;
foreach ($permohonan->debiture->documents as $item) {
$documentId = $item->id;
}
foreach ($dokumen->inspeksi as $item) {
$inspeksiId = $item->id;
}
@endphp
@foreach ($permohonan->debiture->documents as $document)
@if ($document->jenisjaminan)
@php
$jenisJaminanId = $document->jenisjaminan->id;
@endphp
@endif
@endforeach
<div class="flex items-baseline w-full">
<label for="" class="form-label max-w-56">Import Kertas Kerja</label>
<div class="flex justify-center items-center gap-2">
<input type="file" name="" id="" class="file-input">
<input type="file" id="kertas_kerja" class="file-input">
<button type="button" class="btn btn-outline btn-success"
onclick="uploadKertasKerja()">Upload</button>
onclick="uploadKertasKerja({{ $permohonan->id }}, '{{ $documentId }}', '{{ $inspeksiId }}', '{{ $jenisJaminanId }}')">Upload</button>
</div>
</div>
<div class="form-group flex items-baseline flex-wrap">
@php
$jenisJaminanId = null;
@endphp
@foreach ($permohonan->debiture->documents as $document)
@if ($document->jenisjaminan)
@php
$jenisJaminanId = $document->jenisjaminan->id;
@endphp
@endif
@endforeach
@if ($jenisJaminanId)
<a class="btn btn-outline btn-primary w-full"
href="{{ route('penilai.export.kertas-kerja', ['id' => $permohonan->id, 'jaminanId' => $jenisJaminanId]) }}">
href="{{ route('penilai.export.kertas-kerja') }}?permohonanId={{ $permohonan->id }}&documentId={{ $documentId }}&inspeksiId={{ $inspeksiId }}&jaminanId={{ $jenisJaminanId }}">
Export Kertas Kerja
</a>
@else
@@ -325,41 +336,185 @@
<script>
function seletSederhanaStandart() {
Swal.fire({
title: 'Apakah kamu akan memilih lpj standar?',
icon: 'warning',
showDenyButton: true,
showCancelButton: false,
confirmButtonText: 'Yes',
denyButtonText: 'No',
}).then((result) => {
if (result.isConfirmed) {
window.location.href = "{{ route('penilai.standard', $permohonan->id) }}";
} else if (result.isDenied) {
window.location.href = "{{ route('penilai.sederhana', $permohonan->id) }}";
}
})
function seletSederhanaStandart(permohonanId, documentId, inspeksiId, jaminanId) {
fetch(
`{{ url('/penilai/check-status-lpj') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}`
)
.then(response => response.json())
.then(data => {
if (data.status) {
// Jika status LPJ sudah ada, arahkan langsung ke halaman
if (data.status === 'standar') {
showLoadingSwal('Tunggu ...');
window.location.href =
`{{ route('penilai.standard', $permohonan->id) }}?documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
} else if (data.status === 'sederhana') {
showLoadingSwal('Tunggu ...');
window.location.href =
`{{ route('penilai.sederhana', $permohonan->id) }}?documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
}
} else {
Swal.fire({
title: 'Pilih Jenis LPJ',
text: 'Apakah kamu akan memilih LPJ Standar?',
icon: 'question',
showCloseButton: true,
showDenyButton: true,
confirmButtonText: 'LPJ Standar',
denyButtonText: 'LPJ Sederhana',
confirmButtonColor: '#3085d6',
denyButtonColor: '#d33',
}).then((result) => {
if (result.isConfirmed) {
saveStatusLpj(permohonanId, documentId, inspeksiId, 'standar', jaminanId);
} else if (result.isDenied) {
saveStatusLpj(permohonanId, documentId, inspeksiId, 'sederhana', jaminanId);
}
});
}
console.log(data);
});
}
function saveStatusLpj(permohonanId, documentId, inspeksiId, type, jaminanId) {
fetch(`{{ url('/penilai/save-status-lpj') }}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': '{{ csrf_token() }}',
},
body: JSON.stringify({
permohonan_id: permohonanId,
document_id: documentId,
inspeksi_id: inspeksiId,
type: type
}),
}).then(response => response.json())
.then(data => {
if (data.success) {
if (type === 'standar') {
window.location.href =
`{{ route('penilai.standard', $permohonan->id) }}?documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
} else if (type === 'sederhana') {
window.location.href =
`{{ route('penilai.sederhana', $permohonan->id) }}?documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
}
}
});
}
function uploadKertasKerja() {
showLoadingSwal('Mengirim data ke server...');
Swal.fire({
title: 'Berhasil!',
text: response.message,
icon: 'success',
timer: 2000,
timerProgressBar: true,
didOpen: () => {
Swal.showLoading()
},
willClose: () => {
hideLoadingSwal();
function uploadKertasKerja(permohonanId, documentId, inspeksiId, jaminanId) {
const kertasKerjaInput = document.getElementById('kertas_kerja');
if (!kertasKerjaInput.files.length) {
Swal.fire({
title: 'Error!',
text: 'Silakan pilih file sebelum mengupload.',
icon: 'error',
confirmButtonText: 'OK'
});
return;
}
});
}
const kertasKerja = kertasKerjaInput.files[0];
const formData = new FormData();
formData.append('permohonan_id', permohonanId);
formData.append('document_id', documentId);
formData.append('inspeksi_id', inspeksiId);
formData.append('jenis_jaminan_id', jaminanId);
formData.append('kertas_kerja', kertasKerja);
fetch(`{{ url('/penilai/import/kertas-kerja') }}`, {
method: 'POST',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
},
body: formData,
})
.then(response => response.json()) // Pastikan respons diurai menjadi JSON
.then(data => {
if (data.success) {
Swal.fire({
title: 'Berhasil!',
text: data.message || 'Kertas kerja berhasil diunggah.',
icon: 'success',
confirmButtonText: 'OK'
}).then(result => {
if (result.isConfirmed) {
window.location.reload();
}
});
} else {
Swal.fire({
title: 'Error!',
text: data.message || 'Terjadi kesalahan.',
icon: 'error',
confirmButtonText: 'OK'
});
}
})
.catch(error => {
Swal.fire({
title: 'Error!',
text: 'Terjadi kesalahan saat mengunggah file.',
icon: 'error',
confirmButtonText: 'OK'
});
console.error('Error:', error); // Debug error di konsol
});
}
function resume(permohonanId, documentId, inspeksiId, jaminanId) {
showLoadingSwal('Tunggu ...');
window.location.href =
`{{ route('penilai.resume') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
}
function memo(permohonanId, documentId, inspeksiId, jaminanId) {
showLoadingSwal('Tunggu ...');
window.location.href =
`{{ route('penilai.memo') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
}
function rap(permohonanId, documentId, inspeksiId, jaminanId) {
showLoadingSwal('Tunggu ...');
window.location.href =
`{{ route('penilai.rap') }}?permohonanId=${permohonanId}&documentId=${documentId}&inspeksiId=${inspeksiId}&jaminanId=${jaminanId}`;
}
function savePenilai() {
showLoadingSwal('Mengirim data keserver ...');
$.ajax({
url: "{{ route('penilai.proses.laporan', ['id' => $permohonan->id]) }}",
type: "POST",
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
if (response.success) {
// window.location.reload();
hideLoadingSwal();
toastrSuccessBuild(response.message);
}
},
error: function(xhr, status, error) {
console.log('Error checking button status:', error, status, xhr);
if (xhr.responseJSON.message) {
// window.location.reload();
toastrErrorBuild(xhr.responseJSON.message);
} else {
// window.location.reload();
toastrErrorBuild('Terjadi kesalahan');
}
hideLoadingSwal();
}
});
}
</script>

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('penilaian.datatables') }}">
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar assignment

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class=" card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table"
data-api-url="{{ route('otorisator.datatables', ['otorisator' => $header]) }}">
<div class="card-header py-5 flex-wrap">
@@ -200,8 +200,7 @@
actions: {
title: 'Status',
render: (item, data) => {
if (data.status != 'proses laporan' && dataHeader != 'Pelaporan') {
return `<div class="flex flex-nowrap justify-center">
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-warning " href="otorisator/show/${data.id}/${dataHeader}">
<i class="ki-outline ki-eye"></i>
</a>
@@ -210,14 +209,6 @@
<i class="ki-filled ki-double-check"></i>
</a>
</div>`;
} else {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-icon btn-clear btn-success" onclick="showLoadingSwal('Masih Menunggu proses selesai dari penilai...')">
<i class="ki-filled ki-watch"></i>
</a>
</div>`
}
},
}
@@ -240,6 +231,12 @@
title: 'Apakah Anda yakin?',
text: `Untuk melakukan otorisator ${dataHeader}!`,
icon: 'warning',
input: 'textarea', // Menambahkan input textarea
inputLabel: 'Keterangan',
inputPlaceholder: 'Masukkan keterangan...',
inputAttributes: {
'aria-label': 'Masukkan keterangan'
},
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
@@ -247,6 +244,7 @@
cancelButtonText: 'Batal',
}).then((result) => {
if (result.isConfirmed) {
const userMessage = result.value || ''; // Ambil pesan dari textarea
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
@@ -255,6 +253,9 @@
$.ajax({
url: `/otorisator/otorisator/${dataId}/${dataHeader}`,
type: 'POST',
data: {
message: userMessage // Kirim pesan sebagai bagian dari data
},
success: (response) => {
Swal.fire('Berhasil!', 'Data berhasil diotorisasi.', 'success').then(() => {
window.location.reload();
@@ -264,13 +265,14 @@
error: (error) => {
console.error('Error:', error);
Swal.fire('Gagal!', 'Terjadi kesalahan saat melakukan otorisator.',
'error');
'error');
}
});
}
});
}
function showLoadingSwal(message, duration = 5000) {
Swal.fire({
title: message,

View File

@@ -26,13 +26,18 @@
@push('scripts')
<script>
function otorisatorData(dataId) {
const dataHeader = {!! json_encode($header ?? '') !!};
function otorisatorData(dataId) {
const dataHeader = @json($header);
Swal.fire({
title: 'Apakah Anda yakin?',
text: `Untuk melakukan otorisator ${dataHeader}!`,
icon: 'warning',
input: 'textarea',
inputLabel: 'Keterangan',
inputPlaceholder: 'Masukkan keterangan...',
inputAttributes: {
'aria-label': 'Masukkan keterangan'
},
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
@@ -40,6 +45,7 @@
cancelButtonText: 'Batal',
}).then((result) => {
if (result.isConfirmed) {
const userMessage = result.value || ''; // Ambil pesan dari textarea
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
@@ -48,6 +54,9 @@
$.ajax({
url: `/otorisator/otorisator/${dataId}/${dataHeader}`,
type: 'POST',
data: {
message: userMessage
},
success: (response) => {
Swal.fire('Berhasil!', 'Data berhasil diotorisasi.', 'success').then(() => {
window.location.reload();
@@ -57,7 +66,7 @@
error: (error) => {
console.error('Error:', error);
Swal.fire('Gagal!', 'Terjadi kesalahan saat melakukan otorisator.',
'error');
'error');
}
});
}

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('authorization.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Permohonan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="debitur-table" data-api-url="{{ route('debitur.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Debitur

View File

@@ -7,7 +7,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('permohonan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
@@ -145,7 +145,10 @@
title: 'Nomor Registrasi',
},
tanggal_permohonan: {
title: 'Tanggal Permohonan'
title: 'Tanggal Permohonan',
render: (item, data) => {
return `${window.formatTanggalIndonesia(data.tanggal_permohonan)}`;
},
},
user_id: {
title: 'User Pemohon',
@@ -171,7 +174,24 @@
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian.name}`;
switch (data.tujuan_penilaian.code) {
case "TP0001":
return `<span class="badge badge-sm badge-primary">${data.tujuan_penilaian.name}</span>`;
case "TP0002":
return `<span class="badge badge-sm badge-info">${data.tujuan_penilaian.name}</span>`;
case "TP0003":
return `<span class="badge badge-sm badge-success">${data.tujuan_penilaian.name}</span>`;
case "TP0004":
return `<span class="badge badge-sm badge-danger">${data.tujuan_penilaian.name}</span>`;
case "TP0005":
return `<span class="badge badge-sm badge-warning">${data.tujuan_penilaian.name}</span>`;
case "TP0006":
return `<span class="badge badge-sm badge-dark">${data.tujuan_penilaian.name}</span>`;
case "TP0007":
return `<span class="badge badge-sm badge-outline badge-info">${data.tujuan_penilaian.name}</span>`;
default:
return `<span class="badge badge-sm badge-outline badge-default">${data.tujuan_penilaian.name}</span>`;
}
},
},
status: {
@@ -186,9 +206,9 @@
let actionHtml = `<div class="flex flex-nowrap justify-center gap-1.5">`;
if (data && data.penilaian && data.penilaian.waktu_penilaian !== null && data.status !==
'done' && data.penilaian.authorized_status==null) {
'done' && data.penilaian.authorized_status == null) {
actionHtml += `
<a class="btn btn-sm btn-outline btn-primary" href="javascript:void(0)" onclick="surveyorApproveKunjungan(${data.penilaian.id},'${data.nomor_registrasi}')" title="Approve Jadwal Kunjungan No Reg ${data.nomor_registrasi}">
<a class="btn btn-sm btn-outline btn-primary" href="javascript:void(0)" onclick="surveyorApproveKunjungan(${data.penilaian.id},'${data.nomor_registrasi}', '${data.debiture.name}', '${data.penilaian.waktu_penilaian}')" title="Approve Jadwal Kunjungan No Reg ${data.nomor_registrasi}" >
<i class="ki-filled ki-calendar-edit"></i>
</a>
`;
@@ -196,17 +216,17 @@
if (data.status !== 'order') {
actionHtml += `
<a class="btn btn-sm btn-outline btn-success" href="permohonan/${data.id}">
<a class="btn btn-sm btn-outline btn-success" href="permohonan/${data.id}" href="javascript:void(0)" title="Surat Permohonan">
<i class="ki-filled ki-document"></i>
</a>
`;
}
actionHtml += `
<a class="btn btn-sm btn-outline btn-info" href="permohonan/${data.id}/edit">
<a class="btn btn-sm btn-outline btn-info" href="permohonan/${data.id}/edit" title="Edit Permohonan">
<i class="ki-outline ki-notepad-edit"></i>
</a>
<a onclick="deleteData(${data.id})" class="delete btn btn-sm btn-outline btn-danger">
<a onclick="deleteData(${data.id})" class="delete btn btn-sm btn-outline btn-danger" title="Hapus Permohonan">
<i class="ki-outline ki-trash"></i>
</a>
</div>`;
@@ -226,10 +246,11 @@
});
</script>
<script type="text/javascript">
function surveyorApproveKunjungan(id, noReg) {
function surveyorApproveKunjungan(id, noReg, debitur, waktuPenilaian) {
Swal.fire({
title: ' ',
text: "Yakin akan Menyetujui Jadwal Kunjungan "+noReg+"?",
text: "Yakin akan Menyetujui Jadwal Kunjungan " + noReg + " untuk Debitur " + debitur +
" pada waktu " + window.formatTanggalWaktuIndonesia(waktuPenilaian) + "?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
@@ -240,12 +261,12 @@
//define variable
// $id ==> penilaian.id
let token = "{{ csrf_token() }}";
let useURL = "{{ URL::to('/surveyor/storeAproved') }}"+"/"+id;
let useURL = "{{ URL::to('/surveyor/storeAproved') }}" + "/" + id;
var input_data = new Object();
input_data._token = token;
input_data.id = id;
input_data.noReg =noReg;
input_data.noReg = noReg;
$.ajax({
url: useURL,
type: "PUT",
@@ -254,17 +275,15 @@
dataType: "json",
success: function(response) {
console.log(response);
if('success' == response.status)
{
swal.fire('Sukses Menyetujui!', response.message, 'success').then(() => {
if ('success' == response.status) {
swal.fire('Sukses Menyetujui!', response.message, 'success').then(
() => {
location.reload(true);
});
}
else
{
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
@@ -272,11 +291,12 @@
console.log(response);
}
});
});
}
})
}
// window.formatTanggalIndonesia(date)
</script>
@endpush

View File

@@ -40,31 +40,6 @@
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA Resume
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="number" name="sla_resume" id="sla_resume" class="input w-full @error('sla_resume') border-danger bg-danger-light @enderror" value="{{ old('sla_resume', $persetujuanPenawaran->sla_resume ?? '') }}">
@error('sla_resume')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA Final
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="number" name="sla_final" id="sla_final" class="input w-full @error('sla_final') border-danger bg-danger-light @enderror" value="{{ old('sla_final', $persetujuanPenawaran->sla_final ?? '') }}">
@error('sla_final')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
File Persetujuan Penawaran
@@ -89,6 +64,18 @@
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nominal Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="number" name="nominal_bayar" id="nominal_bayar" class="input w-full @error('nominal_bayar') border-danger bg-danger-light @enderror" value="{{ old('nominal_bayar', $persetujuanPenawaran->nominal_bayar ?? '') }}" placeholder="Masukkan nominal bayar">
@error('nominal_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Bukti Bayar
@@ -101,7 +88,6 @@
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="persetujuan-penawaran-table" data-api-url="{{ route('persetujuan-penawaran.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="persetujuan-penawaran-table" data-api-url="{{ route('persetujuan-penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Persetujuan Penawaran
@@ -57,12 +57,8 @@
<span class="sort"> <span class="sort-label"> Biaya Final </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="sla_resume">
<span class="sort"> <span class="sort-label"> SLA Resume </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="sla_final">
<span class="sort"> <span class="sort-label"> SLA Final </span>
<th class="min-w-[150px]" data-datatable-column="nominal_bayar">
<span class="sort"> <span class="sort-label"> Nominal Bayar </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="catatan">
@@ -74,6 +70,19 @@
</thead>
</table>
</div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per
page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -161,7 +170,7 @@
title: 'Dokumen Persetujuan',
render: (item, data) => {
if (data.penawaran_tender.detail.dokumen_persetujuan) {
return `<a href="${data.penawaran_tender.detail.dokumen_persetujuan}" download="${data.penawaran_tender.detail.dokumen_persetujuan}" target="_blank" class="badge badge-sm badge-outline">
return `<a href="storage/${data.penawaran_tender.detail.dokumen_persetujuan}" download="${data.penawaran_tender.detail.dokumen_persetujuan}" target="_blank" class="badge badge-sm badge-outline">
Download <i class="ki-filled ki-cloud-download"></i>
</a>`;
} else {
@@ -175,11 +184,8 @@
return window.formatRupiah(`${data.penawaran_tender.detail.biaya_penawaran}`);
},
},
sla_resume: {
title: 'SLA Resume'
},
sla_final: {
title: 'SLA Final'
nominal_bayar: {
title: 'Nominal Bayar'
},
catatan: {
title: 'Catatan',

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="prosespenawaran-table"
data-api-url="{{ route('tender.prosespenawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
@@ -42,7 +42,7 @@
<span class="sort"> <span class="sort-label"> Nomor Penawaran</span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
@@ -107,7 +107,7 @@
var url = "{{ url('tender/prosespenawaran') }}/" + regId + "/showPermohonan";
$(location).attr('href', url);
}
function showPenawaranData(regId) {
var url = "{{ url('tender/prosespenawaran') }}/" + regId;
$(location).attr('href', url);
@@ -186,7 +186,7 @@
actions: {
title: 'Status',
render: (item, data) => {
var iconProses ='';
var iconDetail =`<a onclick="showPenawaranData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
<i class="ki-outline ki-eye"></i>
@@ -200,14 +200,14 @@
iconDetail=`<a onclick="showPermohonanData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
<i class="ki-outline ki-eye"></i>
</a>`;
}
}
else if('tender'==data.statusnya)
{
// data.id ==> penawaran.id
iconProses=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Proses Penawaran" href="tender/prosespenawaran/${data.id}/edit">
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
}
else if('proposal-tender'==data.statusnya)
{
// data.id ==> penawaran.id

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="prosespenawaranulang-table" data-api-url="{{ route('tender.prosespenawaranulang.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="prosespenawaranulang-table" data-api-url="{{ route('tender.prosespenawaranulang.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Proses Penawaran Ulang

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="region-table" data-api-url="{{ route('basicdata.region.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="region-table" data-api-url="{{ route('basicdata.region.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Region

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Registrasi

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="registrasifinal-table" data-api-url="{{ route('registrasifinal.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="registrasifinal-table" data-api-url="{{ route('registrasifinal.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Registrasi Final
@@ -35,6 +35,10 @@
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debiture">
<span class="sort"> <span class="sort-label"> Debiture </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Kode Penawaran </span>
<span class="sort-icon"> </span> </span>
@@ -106,6 +110,12 @@
'nomor_registrasi': {
title: 'Nomor Registrasi',
},
'debiture': {
title: 'Debiture',
render: (item, data) => {
return `${data.permohonan.debiture.name}`;
}
},
code: {
title: 'Kode Penawaran',
},

View File

@@ -25,7 +25,7 @@
}
</style>
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">Buat SPK</h3>
<div class="flex items-center gap-2">
@@ -100,7 +100,7 @@
<span style="color: red;">{{ $penawaran->jenis_laporan_name }}</span>
</td>
</tr>
@php $i=1; @endphp
@php $i=1; @endphp
@foreach ($data->debiture->documents as $dokumen)
<tr valign="top">
<td>Lokasi Jaminan {{ $i }}</td>
@@ -117,17 +117,17 @@
@foreach ($data->dokumenjaminan as $dokumen_jaminans)
@if ($dokumen->id== $dokumen_jaminans->id)
@php $details = $dokumen_jaminans->detail; @endphp
@foreach ($details as $index => $detailku)
@foreach ($details as $index => $detailku)
{{ $detailku->name }}{{ $index === count($details) - 1 ? '' : ', ' }}
@endforeach
@endif
@endforeach
@endforeach
@endif
@endforeach
</span>
</td>
</tr>
@php $i++; @endphp
@endforeach
@php $i++; @endphp
@endforeach
<tr>
<td>Fee / Harga Penilaian</td>
<td>:</td>

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="spk-table" data-api-url="{{ route('spk.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="spk-table" data-api-url="{{ route('spk.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar SPK
@@ -126,12 +126,15 @@
},
'nomor_registrasi': {
title: 'Nomor Registrasi',
render: (item, data) => {
return `${data.permohonan.nomor_registrasi}`;
},
},
code: {
title: 'Nomor Penawaran',
render: (item, data) => {
if(data.penawaran) {
return `${data.penawaran.code}`;
if(data.code) {
return `${data.code}`;
}
return '-';
@@ -139,24 +142,27 @@
},
tanggal_permohonan: {
title: 'Tanggal Permohonan',
render: (item, data) => {
return `${data.permohonan.tanggal_permohonan}`;
},
},
user_id: {
title: 'User Pemohon',
render: (item, data) => {
return `${data.user.name}`;
return `${data.permohonan.user.name}`;
},
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
return `${data.branch.name}`;
return `${data.permohonan.branch.name}`;
},
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
if (data.debiture) {
return `${data.debiture.name}`;
if (data.permohonan.debiture) {
return `${data.permohonan.debiture.name}`;
}
return "-";
},
@@ -167,14 +173,14 @@
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian.name}`;
return `${data.permohonan.tujuan_penilaian.name}`;
},
},
tujuan_penilaian_kjpp_id: {
title: 'Tujuan Penilaian KJPP',
render: (item, data) => {
if(data.penawaran.tujuan_penilaian_kjpp) {
return `${data.penawaran.tujuan_penilaian_kjpp.name}`;
if(data.tujuan_penilaian_kjpp) {
return `${data.tujuan_penilaian_kjpp.name}`;
}
return '-';
@@ -183,15 +189,15 @@
kjpp_data: {
title: 'Nama KJPP Terpilih',
render: (item, data) => {
return `${data.penawaran.nama_kjpp_sebelumnya}`+'<br />'
+`${data.penawaran.biaya_kjpp_sebelumnya}`+'<br /> '
+`${data.penawaran.tanggal_penilaian_sebelumnya}`;
return `${data.nama_kjpp_sebelumnya}`+'<br />'
+`${data.biaya_kjpp_sebelumnya}`+'<br /> '
+`${data.tanggal_penilaian_sebelumnya}`;
},
},
status: {
title: 'Status',
render: (item, data) => {
return `${data.penawaran.status}`.toUpperCase();
return `${data.status}`.toUpperCase();
},
},
actions: {
@@ -199,9 +205,9 @@
render: (item, data) => {
var spkShow ='';
var spkCreate='';
if(!data.penawaran.spk_dokumen_path)
if(!data.spk_dokumen_path)
{
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.penawaran.id})" >
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.id})" >
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
@@ -211,9 +217,11 @@
<a href="/spk/${data.id}/download" class="btn btn-sm btn-icon btn-clear btn-primary" title="Download SPK">
<i class="ki-filled ki-cloud-download"></i>
</a> `;
spkCreate=`<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.penawaran.id})" >
if(data.status==='spk') {
spkCreate = `<a class="btn btn-sm btn-icon btn-clear btn-info" title="Buat SPK" onclick="spkCreate(${data.id})" >
<i class="ki-outline ki-notepad-edit"></i>
</a>`;
}
}
return `<div class="flex flex-nowrap justify-center">`

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
SPK View

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="status-permohonan-table" data-api-url="{{ route('basicdata.status-permohonan.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="status-permohonan-table" data-api-url="{{ route('basicdata.status-permohonan.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Status Permohonan

View File

@@ -15,10 +15,10 @@
@php
$luas = $item->detail;
$details = json_decode($luas[0]->details, true);
$luas_unit = isset($details['luas_unit']) ? $details['luas_unit'] : 'N/A';
$luas_units = isset($details['luas']) ? $details['luas'] : 'N/A';
@endphp
<input type="hidden" name="luas_unit_sesuai" class="input" value="{{ $luas_unit }}">
<p class="text-2sm text-gray-700">{{ $luas_unit }} m<sup>2</sup></p>
<input type="hidden" name="luas_unit_sesuai" class="input" value="{{ $luas_units }}">
<p class="text-2sm text-gray-700">{{ $luas_units }} m<sup>2</sup></p>
@endforeach
@endif
@@ -29,19 +29,19 @@
<input
onclick="toggleFieldVisibility('luas_unit','luas_unit_tidak_sesuai', ['tidak sesuai'])"
type="radio" class="radio" name="luas_unit" value="sesuai"
{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'sesuai' ? 'checked' : '' }}>
{{ old('luas_unit', isset($forminspeksi['luas_unit']['sesuai'])) ? 'checked' : ''}}>
<span class="ml-2">Sesuai</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input
onclick="toggleFieldVisibility('luas_unit','luas_unit_tidak_sesuai', ['tidak sesuai'])"
type="radio" class="radio" name="luas_unit" value="tidak sesuai"
{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'tidak sesuai' ? 'checked' : '' }}>
{{ old('luas_unit', isset($forminspeksi['luas_unit']['tidak sesuai'])) ? 'checked' : '' }}>
<span class="ml-2">Tidak Sesuai</span>
</label>
<div id="luas_unit_tidak_sesuai" class="flex items-baseline gap-2"
style="{{ old('luas_unit', $forminspeksi['luas_unit'] ?? '') == 'tidak sesuai' ? '' : 'display: none;' }}">
style="{{ old('luas_unit', isset($forminspeksi['luas_unit']['tidak sesuai'])) ? '' : 'display: none;' }}">
<input id="analisa_luas_unit_tidak_sesuai" type="text" name="luas_unit_tidak_sesuai"
class="input w-full" placeholder="Masukan Luas Tanah"
value="{{ old('luas_unit_tidak_sesuai', $forminspeksi['luas_unit_tidak_sesuai'] ?? '') }}">

View File

@@ -258,33 +258,21 @@
<!-- Sarana pelengkap -->
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Sarana pelengkap</label>
<label class="form-label max-w-56">Sarana Pelengkap</label>
<div class="flex-wrap items-stretch">
<div class="flex flex-col items-start gap-4">
@if (isset($basicData['saranaPelengkap']))
@foreach ($basicData['saranaPelengkap'] as $item)
@php
$isChecked = false;
$inputValue = '';
if (isset($forminspeksi['bangunan']['sarana_pelengkap'])) {
foreach ($forminspeksi['bangunan']['sarana_pelengkap'] as $key => $value) {
if ($key === $item->name) {
$isChecked = true;
$inputValue = $value;
break;
}
}
}
@endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="sarana_pelengkap[]" type="checkbox"
value="{{ $item->name }}" {{ $isChecked ? 'checked' : '' }} />
value="{{ $item->name }}"
{{ in_array($item->name, old('sarana_pelengkap', $forminspeksi['bangunan']['sarana_pelengkap'] ?? [])) ? 'checked' : '' }} />
{{ $item->name }}
</label>
<input type="text" name="sarana_pelengkap_input[]" class="input w-full"
placeholder="Masukkan {{ $item->name }}..." value="{{ $inputValue }}">
placeholder="Masukkan {{ $item->name }}..."
value="{{ old('sarana_pelengkap_input.' . $loop->index, $forminspeksi['bangunan']['sarana_pelengkap_input'][$loop->index] ?? '') }}">
</div>
@endforeach
@endif
@@ -293,6 +281,7 @@
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,30 +1,32 @@
<div class="grid grid-cols-1 lg:grid-cols-2 gap-5 lg:gap-7.5">
@foreach ($permohonan->debiture->documents as $dokumen)
@php
$jaminanId = $dokumen->jenisJaminan->id;
$jaminanId = $dokumen->id;
$currentInspeksi = $inspeksiData[$jaminanId] ?? null;
$tanahBangunanTypes = ['KAPAL', 'PESAWAT', 'KENDARAAN', 'ALAT BERAT'];
$href = [
[
'label' => 'form inspeksi',
'url' => route('surveyor.inspeksi', [
'id' => $permohonan->id,
'jaminanId' => $jaminanId,
]) . "?form=create-inspeksi&inspeksi={$permohonan->id}&jenis_jaminan={$jaminanId}",
]) . "?form=create-inspeksi&inspeksi={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}",
'show' => true,
'icon' => !empty($currentInspeksi['data_form']),
],
];
if (!in_array(strtoupper($dokumen->jenisJaminan->name), $tanahBangunanTypes)) {
$denahLabel = strtoupper($dokumen->jenisJaminan->name);
$href[] = [
'label' => 'denah tanah dan bangunan',
'label' => 'denah ' . $denahLabel,
'url' => route('surveyor.denah', [
'id' => $permohonan->id,
'jaminanId' => $jaminanId,
]) . "?form=create-denah&denah={$permohonan->id}&jenis_jaminan={$jaminanId}",
'id' => $permohonan->id
]) . "?form=create-denah&denah={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}",
'show' => true,
'icon' => !empty($currentInspeksi['denah_form']),
];
@@ -34,18 +36,16 @@
[
'label' => 'foto',
'url' => route('surveyor.foto', [
'id' => $permohonan->id,
'jaminanId' => $jaminanId,
]) . "?form=create-foto&foto={$permohonan->id}&jenis_jaminan={$jaminanId}",
'id' => $permohonan->id
]) . "?form=create-foto&foto={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}",
'show' => true,
'icon' => !empty($currentInspeksi['foto_form']),
],
[
'label' => 'data pembanding',
'url' => route('surveyor.data-pembanding', [
'id' => $permohonan->id,
'jaminanId' => $jaminanId,
]) . "?form=data-pembanding&pembanding={$permohonan->id}&jenis_jaminan={$jaminanId}",
'id' => $permohonan->id
]) . "?form=data-pembanding&pembanding={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}",
'show' => true,
'icon' => !empty($currentInspeksi['data_pembanding']),
],

View File

@@ -7,14 +7,14 @@
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5">
<div class="grid gap-5">
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
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') }}">
<input type="hidden" name="dokument_id" value="{{ request('dokument') }}">
<div class="card">
<div class="card-header">
@@ -111,16 +111,6 @@
</td>
</tr>
@php
$apartemenKantorData = explode(',', $inspeksi->name);
$isApartemenKantor = array_intersect($apartemenKantorData, [
'tanah',
'bangunan',
]);
@endphp
@if ($isApartemenKantor)
<tr>
<td class="px-4 py-2">Luas Tanah ()</td>
@php
@@ -153,19 +143,6 @@
class="input number-format">
</td>
</tr>
@else
<tr>
<td class="px-4 py-2">Luas Unit ()</td>
<td class="px-4 py-2">
<input type="text" name="luas_unit" class="input number-format"
value="{{ $inspectionData['unit']['luas_unit']['sesuai'] ?? ($inspectionData['unit']['luas_unit']['tidak sesuai'] ?? '') }}">
</td>
<td class="px-4 py-2">
<input type="text" name="luas_unit_pembanding[]"
class="input number-format">
</td>
</tr>
@endif
<!-- Informasi Harga -->

View File

@@ -137,7 +137,7 @@
@csrf
<input type="hidden" value="{{ $permohonan->id }}" name="permohonan_id">
<input type="hidden" name="jenis_jaminan_id" value="{{ request('jenis_jaminan') }}">
<input type="hidden" name="dokument_id" value="{{ request('dokument') }}">
<div class="mt-2">
<div class=" mx-auto overflow-hidden">
<div class="flex flex-wrap gap-4" style="margin-top: 20px">

View File

@@ -16,9 +16,9 @@
<div class="fakta_positif flex items-center gap-2 mt-2 textarea-group w-full">
<textarea class="textarea mt-2" name="fakta_positif[]" rows="3">{{ old("fakta_positif.$index", $positif) }}</textarea>
<button class="btn btn-danger btn-sm remove-btn" type="button"
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
style="display: none;">
<i class="ki-outline ki-trash"></i>
</button>
</div>
@endforeach
@else
@@ -77,24 +77,20 @@
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">Batas batas</label>
<label class="form-label max-w-56">Batas Batas</label>
<div class="flex flex-wrap items-baseline w-full">
<div class="grid grid-cols-1 gap-4 items-center w-full">
@if (isset($basicData['arahMataAngin']))
@foreach ($basicData['arahMataAngin'] as $item)
@php
$isChecked = false;
$inputValue = '';
if (isset($forminspeksi['fakta']['batas_batas'])) {
foreach ($forminspeksi['fakta']['batas_batas'] as $key => $value) {
if ($key === $item->name) {
$isChecked = true;
$inputValue = $value;
break;
}
}
}
$isChecked = in_array(
$item->name,
old('batas_batas', $forminspeksi['fakta']['batas_batas'] ?? []),
);
$inputValue = old(
'batas_batas_input.' . $item->name,
$forminspeksi['fakta']['batas_batas_input'][$item->name] ?? '',
);
@endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
@@ -102,8 +98,8 @@
value="{{ $item->name }}" {{ $isChecked ? 'checked' : '' }} />
{{ $item->name }}
</label>
<input type="text" name="batas_batas_input[]" class="input w-full"
placeholder="Masukkan Batas {{ $item->name }}..."
<input type="text" name="batas_batas_input[{{ $item->name }}]"
class="input w-full" placeholder="Masukkan Batas {{ $item->name }}..."
value="{{ $inputValue }}">
</div>
@endforeach

View File

@@ -76,7 +76,7 @@
<form id="formFoto" method="POST" class="grid gap-5" enctype="multipart/form-data">
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="jenis_jaminan_id" value="{{ request('jenis_jaminan') }}">
<input type="hidden" name="dokument_id" value="{{ request('dokument') }}">
<div class="card bg-white rounded-lg shadow-md">
<div class="card-body">
@@ -211,7 +211,7 @@
</div>
</div>
<button type="button" class="btn btn-danger btn-sm delete-btn"
onclick="deletePhoto('{{ $index }}')">
id="btnDelete">
<i class="ki-filled ki-trash"></i>
</button>
</div>
@@ -446,7 +446,7 @@
<div class="input-group w-full flex gap-2">
<input id="inputBasement" type="file" name="foto_basement"
class="file-input file-input-bordered w-full" accept="image/*"
capture="camera">
onchange="previewImage(this, 'foto_basement_preview')" capture="camera">
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
<i class="ki-outline ki-abstract-33"></i> Camera
@@ -497,7 +497,9 @@
<div class="input-group w-full flex gap-2">
<input id="inputLingkungan_{{ $key }}" type="file"
name="foto_lingkungan[]" class="file-input file-input-bordered w-full"
accept="image/*" capture="camera">
accept="image/*" capture="camera"
onchange="previewImage(this, 'foto_lingkungan_preview_{{ $key }}')"
>
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
<i class="ki-outline ki-abstract-33"></i> Camera
@@ -520,8 +522,12 @@
</label>
<div class="input-group w-full flex gap-2">
<input type="hidden" name="name_lingkungan[]" value="lingkungan">
<img id="foto_lingkungan_preview_0"
src="{{ isset($formFoto['lingkungan']) ? asset('storage/' . old('lingkungan', $formFoto['lingkungan'])) : '#' }}"
alt="Gambar Lingkungan" style="width: 30rem;" onerror="this.style.display='none';">
<input id="inputLingkungan_0" type="file" name="foto_lingkungan[]"
class="file-input file-input-bordered w-full" accept="image/*" capture="camera">
class="file-input file-input-bordered w-full" accept="image/*" capture="camera"
onchange="previewImage(this, 'foto_lingkungan_preview_0')" >
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
<i class="ki-outline ki-abstract-33"></i> Camera
@@ -559,9 +565,12 @@
<div class="input-group w-full flex gap-2">
<input id="inputPendamping" type="file" name="pendamping"
class="file-input file-input-bordered w-full" accept="image/*" capture="camera">
class="file-input file-input-bordered w-full" accept="image/*"
onchange="previewImage(this, 'pendamping')"
capture="camera">
<button type="button" id="btnCamera" class="btn btn-light"
data-modal-toggle="#cameraModal">
data-modal-toggle="#cameraModal"
>
<i class="ki-outline ki-abstract-33"></i> Camera
</button>
</div>

View File

@@ -425,7 +425,7 @@
type="radio" class="radio" name="hub_cadeb_penghuni" value="sesuai"
{{ old('hub_cadeb_penghuni', isset($forminspeksi['asset']['hub_cadeb_penghuni'])) ? 'checked' : '' }}>
<span class="ml-2">Ya</span>
<span class="ml-2">Ditempati Sendiri</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input
@@ -441,21 +441,14 @@
: 'tidak sesuai';
$selectedData = $forminspeksi['asset']['hub_cadeb_penghuni'][$statusKey] ?? null;
@endphp
<select id="hub_penghuni_tidak_sesuai" name="hub_penghuni_tidak_sesuai"
class="input w-full"
style="{{ old('hub_penghuni_tidak_sesuai', $selectedData) ? '' : 'display: none;' }}">
<option value="">Select Hubungan Cadeb</option>
@if (isset($basicData['hubPenghuni']))
@foreach ($basicData['hubPenghuni'] as $item)
@if ($item->name != $hubCadebPenghuni)
<option value="{{ $item->name }}"
{{ old('hub_penghuni_tidak_sesuai', $selectedData) == $item->name ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endif
@endforeach
@endif
</select>
<input id="hub_penghuni_tidak_sesuai" class="input"
name="hub_penghuni_tidak_sesuai"
placeholder="Masukkan Hubungin penghuni jaminan"
value="{{ old('hub_penghuni_tidak_sesuai', isset($selectedData) ? $selectedData : '') }}"
style="{{ old('hub_penghuni_tidak_sesuai', $selectedData ?? false) ? '' : 'display: none;' }}">
</div>
<em id="error-hub_cadeb_penghuni" class="alert text-danger text-sm"></em>
</div>
@@ -491,7 +484,7 @@
createElementAlamat.innerHTML = `
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="address" class="form-label max-w-56">Jl.</label>
<label for="address" class="form-label max-w-56">Terletak di.</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="address" name="address" class="input w-full "
value="{{ isset($permohonan->debiture->address) ? $permohonan->debiture->address : old('address') }}">
@@ -541,7 +534,7 @@
createElementAlamat.innerHTML = `
<div class="grid gap-2.5 w-full">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5 w-full">
<label for="address" class="form-label max-w-56">Jl.</label>
<label for="address" class="form-label max-w-56">Terletak di.</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="address" name="address" class="input w-full"
placeholder="Masukkan Jl." value="{{ old('address') }}">

View File

@@ -128,9 +128,9 @@
<img id="gistaru-preview"
src="{{ asset('storage/' . (isset($forminspeksi['foto_gistaru']) ? $forminspeksi['foto_gistaru'] : '')) }}"
alt="Foto Bhumi" class="mt-2 max-w-full h-auto"
style="{{ isset($forminspeksi['foto_gistaru']) ? '' : 'display: none;' }}" />
style="{{ isset($forminspeksi['foto_gistaru']) ? '' : 'display: none;' }} max-width: 30rem;" />
</div>
<a href="https://gistaru.atrbpn.go.id/rtronline" type="button" class="btn btn-light"
target="_blank">
@@ -154,7 +154,7 @@
<img id="bhumi-preview"
src="{{ asset('storage/' . (isset($forminspeksi['foto_bhumi']) ? $forminspeksi['foto_bhumi'] : '')) }}"
alt="Foto Bhumi" class="mt-2 max-w-full h-auto"
style="{{ isset($forminspeksi['foto_bhumi']) ? '' : 'display: none;' }}" />
style="{{ isset($forminspeksi['foto_bhumi']) ? ' ' : 'display: none;' }} max-width: 30rem;" />
</div>
<a href="https://bhumi.atrbpn.go.id/peta" type="button" class="btn btn-light" target="_blank">
<i class="ki-filled ki-map"></i> Bhumi
@@ -176,7 +176,7 @@
<img id="argis-region-preview"
src="{{ asset('storage/' . (isset($forminspeksi['foto_argis_region']) ? $forminspeksi['foto_argis_region'] : '')) }}"
alt="Foto Argis Region" class="mt-2 max-w-full h-auto"
style="{{ isset($forminspeksi['foto_argis_region']) ? '' : 'display: none;' }}">
style="{{ isset($forminspeksi['foto_argis_region']) ? '' : 'display: none;' }} max-width: 30rem;">
</div>
<a href="{{ $link_url_region->regions->url }}" type="button" class="btn btn-light"
target="_blank">
@@ -205,7 +205,7 @@
<img id="foto_tempat-preview"
src="{{ asset('storage/' . (isset($forminspeksi['foto_tempat']) ? $forminspeksi['foto_tempat'] : '')) }}"
alt="Foto Argis Region" class="mt-2 max-w-full h-auto"
style="{{ isset($forminspeksi['foto_tempat']) ? '' : 'display: none;' }}">
style="{{ isset($forminspeksi['foto_tempat']) ? '' : 'display: none;' }} max-width: 30rem;">
</div>
</div>

View File

@@ -10,7 +10,7 @@
<form id="formInspeksi" method="POST" enctype="multipart/form-data" class="grid gap-5">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="jenis_jaminan_id" value="{{ request('jenis_jaminan') }}">
<input type="hidden" name="dokument_id" value="{{ request('dokument') }}">
@foreach ($permohonan->debiture->documents as $dokumen)
@if ($dokumen->jenisJaminan)
@php

View File

@@ -369,35 +369,27 @@
@if (isset($basicData['fasilitasObjek']))
@foreach ($basicData['fasilitasObjek'] as $item)
@php
$isChecked = false;
$inputValue = '';
// Cek old input terlebih dahulu
if (old('fasilitas_dekat_object') && in_array($item->name, old('fasilitas_dekat_object'))) {
$isChecked = true;
$oldInputIndex = array_search($item->name, old('fasilitas_dekat_object'));
$inputValue = old('fasilitas_dekat_object_input')[$oldInputIndex] ?? '';
}
elseif (isset($forminspeksi['lingkungan']['fasilitas_dekat_object'])) {
foreach ($forminspeksi['lingkungan']['fasilitas_dekat_object'] as $key => $value) {
if ($key === $item->name) {
$isChecked = true;
$inputValue = $value;
break;
}
}
}
$isChecked = in_array(
$item->name,
old(
'fasilitas_dekat_object',
$forminspeksi['lingkungan']['fasilitas_dekat_object'] ?? [],
),
);
$inputValue = old(
'fasilitas_dekat_object_input.' . $item->name,
$forminspeksi['lingkungan']['fasilitas_dekat_object_input'][$item->name] ?? '',
);
@endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 gap-2.5" style="width: 500px">
<input class="checkbox" name="fasilitas_dekat_object[]" type="checkbox"
value="{{ $item->name }}"
{{ $isChecked ? 'checked' : '' }} />
value="{{ $item->name }}" {{ $isChecked ? 'checked' : '' }} />
{{ $item->name }}
</label>
<input type="text" name="fasilitas_dekat_object_input[]" class="input w-full"
placeholder="Masukkan fasilitas {{ $item->name }}..."
<input type="text" name="fasilitas_dekat_object_input[{{ $item->name }}]"
class="input w-full" placeholder="Masukkan fasilitas {{ $item->name }}..."
value="{{ $inputValue }}">
</div>
@endforeach

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="data-table" data-api-url="{{ route('basicdata.datatablesSurveyory', ['type' => $header[0] ]) }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="data-table" data-api-url="{{ route('basicdata.datatablesSurveyory', ['type' => $header[0] ]) }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar {{$header[0]}}

View File

@@ -86,7 +86,7 @@
},
success: function(response) {
if (response.success) {
// window.location.href = "{{ route('surveyor.index') }}";
window.location.href = "{{ route('surveyor.index') }}";
toastrSuccessBuild(response.message);
}
},
@@ -98,7 +98,7 @@
toastrErrorBuild('Terjadi kesalahan');
}
}
});
}

View File

@@ -8,7 +8,7 @@
@endpush
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="permohonan-table" data-api-url="{{ route('surveyor.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -71,134 +71,131 @@
function setupInputHandlers(containerId, buttonId, labelText, inputDataClass, buttonDeleteClass) {
const addButton = document.getElementById(buttonId);
const inputContainer = document.getElementById(containerId);
const addButton = document.getElementById(buttonId);
const inputContainer = document.getElementById(containerId);
if (!addButton || !inputContainer) {
console.error(`Element with ID ${containerId} or ${buttonId} not found.`);
return;
}
if (!addButton || !inputContainer) {
console.error(`Element with ID ${containerId} or ${buttonId} not found.`);
return;
}
function updateLabels() {
const labels = inputContainer.querySelectorAll('.form-label span');
labels.forEach((label, index) => {
label.textContent = `${labelText} ${index + 1}`;
});
}
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 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);
function createNewInput() {
const newDiv = inputContainer.children[0].cloneNode(true);
// Reset semua input dalam elemen baru
const inputFile = newDiv.querySelector(`.${inputDataClass}`);
if (inputFile) {
inputFile.id = `inputLingkungan-${inputContainer.children.length}`;
inputFile.value = ''; // Reset input file
// Reset semua input dalam elemen baru
const inputFile = newDiv.querySelector(`.${inputDataClass}`);
const previewContainer = newDiv.querySelector('.preview-container');
const imgPreview = previewContainer.querySelector('img');
// Tambahkan event listener untuk preview
inputFile.addEventListener('change', function() {
const file = this.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
const img = document.getElementById(
`foto_lingkungan_preview_${inputFile.id}`
);
img.src = e.target.result;
img.style.display = 'block';
};
reader.readAsDataURL(file);
}
});
}
if (inputFile) {
// Generate unique ID untuk input dan preview
const uniqueId = `${containerId}-${Date.now()}`;
inputFile.id = `input-${uniqueId}`;
imgPreview.id = `preview-${uniqueId}`;
// Tambahkan logika reset untuk elemen preview
const imgPreview = newDiv.querySelector('img');
if (imgPreview) {
imgPreview.src = '';
imgPreview.style.display = 'none';
}
// Reset input file
inputFile.value = '';
const deleteBtn = newDiv.querySelector(`.${buttonDeleteClass}`);
if (deleteBtn) {
deleteBtn.addEventListener('click', function() {
inputContainer.removeChild(newDiv);
handleDeleteButtons();
updateLabels();
});
}
// Tambahkan container preview jika tidak ada
let previewContainer = newDiv.querySelector('.preview-container');
if (!previewContainer) {
previewContainer = document.createElement('div');
previewContainer.className = 'preview-container';
const img = document.createElement('img');
img.id = `foto_lingkungan_preview_${inputFile.id}`;
img.src = '';
img.className = 'mt-2 h-auto';
img.style.display = 'none';
img.style.width = '30rem';
previewContainer.appendChild(img);
const inputGroup = newDiv.querySelector('.input-group');
inputGroup.appendChild(previewContainer);
}
newDiv.style.marginTop = '10px';
inputContainer.appendChild(newDiv);
updateLabels();
handleDeleteButtons();
}
addButton.addEventListener('click', createNewInput);
// Terapkan event listener pada elemen yang sudah ada
const existingInputs = inputContainer.querySelectorAll(`.${inputDataClass}`);
existingInputs.forEach((input, index) => {
const deleteBtn = input.closest('.flex').querySelector(`.${buttonDeleteClass}`);
if (deleteBtn) {
deleteBtn.addEventListener('click', function() {
if (inputContainer.children.length > 1) {
inputContainer.removeChild(this.closest('.flex'));
handleDeleteButtons();
updateLabels();
}
});
}
input.addEventListener('change', function() {
// Tambahkan event listener untuk preview
inputFile.addEventListener('change', function() {
const file = this.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
const img = document.getElementById(
`foto_lingkungan_preview_${index}`
);
img.src = e.target.result;
img.style.display = 'block';
imgPreview.src = e.target.result;
imgPreview.style.display = 'block';
};
reader.readAsDataURL(file);
}
});
});
}
// Reset preview
imgPreview.src = '';
imgPreview.style.display = 'none';
const deleteBtn = newDiv.querySelector(`.${buttonDeleteClass}`);
if (deleteBtn) {
deleteBtn.addEventListener('click', function() {
inputContainer.removeChild(newDiv);
handleDeleteButtons();
updateLabels();
});
}
newDiv.style.marginTop = '10px';
inputContainer.appendChild(newDiv);
updateLabels();
handleDeleteButtons();
}
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');
// Event listener untuk tombol tambah
addButton.addEventListener('click', createNewInput);
// Inisialisasi preview untuk input yang sudah ada
const existingInputs = inputContainer.querySelectorAll(`.${inputDataClass}`);
existingInputs.forEach((input, index) => {
const previewContainer = input.closest('.flex').querySelector('.preview-container');
const imgPreview = previewContainer.querySelector('img');
input.addEventListener('change', function() {
const file = this.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
imgPreview.src = e.target.result;
imgPreview.style.display = 'block';
};
reader.readAsDataURL(file);
}
});
// Tambahkan event listener untuk tombol hapus
document.querySelectorAll('.delete-btn').forEach(deleteBtn => {
deleteBtn.addEventListener('click', function() {
// Temukan container terdekat yang akan dihapus
const containerToRemove = this.closest('.flex');
const inputContainer = this.closest('#inputContainerRute');
if (inputContainer.querySelectorAll('.flex').length > 1) {
containerToRemove.remove();
// Update nomor label setelah penghapusan
updateLabels(inputContainer);
} else {
// Jika hanya satu input, reset input tersebut
resetInput(containerToRemove);
}
});
});
});
updateLabels();
handleDeleteButtons();
}
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>

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="teams-table" data-api-url="{{ route('basicdata.teams.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10" data-datatable-state-save="false" id="tujuan-penilaian-table" data-api-url="{{ route('basicdata.tujuan-penilaian.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Tujuan Penilaian

View File

@@ -6,7 +6,7 @@
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="10"
data-datatable-state-save="false" id="tujuan-penilaian-kjpp"
data-api-url="{{ route('basicdata.tujuan_penilaian_kjpp.datatables') }}">
<div class="card-header py-5 flex-wrap">

View File

@@ -532,7 +532,7 @@
Breadcrumbs::for('otorisator.show', function (BreadcrumbTrail $trail, $id, $type) {
$trail->push("Detail $type", route('otorisator.show', ['id' => $id, 'type' => $type]));
});
Breadcrumbs::for('laporan', function (BreadcrumbTrail $trail) {
$trail->push('Laporan', route('laporan.sederhana.index'));
@@ -587,5 +587,14 @@
$trail->push('Proses Persetujuan Penawaran');
});
Breadcrumbs::for('noc', function (BreadcrumbTrail $trail) {
$trail->push('NOC', route('noc.index'));
});
Breadcrumbs::for('noc.edit', function (BreadcrumbTrail $trail) {
$trail->parent('noc');
$trail->push('Proses NOC');
});
// add andy
require __DIR__ . '/breadcrumbs_registrasi.php';

View File

@@ -17,7 +17,8 @@ use Modules\Lpj\Http\Controllers\JenisPenilaianController;
use Modules\Lpj\Http\Controllers\KJPPController;
use Modules\Lpj\Http\Controllers\LaporanController;
use Modules\Lpj\Http\Controllers\NilaiPlafondController;
use Modules\Lpj\Http\Controllers\PemilikJaminanController;
use Modules\Lpj\Http\Controllers\NocController;
use Modules\Lpj\Http\Controllers\PemilikJaminanController;
use Modules\Lpj\Http\Controllers\PenilaianController;
use Modules\Lpj\Http\Controllers\PenilaiController;
use Modules\Lpj\Http\Controllers\PermohonanController;
@@ -347,11 +348,8 @@ Route::middleware(['auth'])->group(function () {
});
Route::resource('debitur', DebitureController::class);
Route::resource('laporan', LaporanController::class);
Route::name('laporan.')->prefix('laporan')->group(function () {
Route::get('sederhana', [LaporanController::class, 'sederhana_index'])->name('sederhana.index');
Route::get('standard', [LaporanController::class, 'standard_index'])->name('standard.index');
});
Route::name('resume.')->prefix('resume')->group(function () {
Route::get('/', [ResumeController::class, 'index'])->name('index');
@@ -525,10 +523,10 @@ Route::middleware(['auth'])->group(function () {
Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name('checkButtonStatus');
Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables');
Route::get('inspeksi/{id}/{jaminanId}', [SurveyorController::class, 'formInspeksi'])->name('inspeksi');
Route::get('denah/{id}/{jaminanId}', [SurveyorController::class, 'denah'])->name('denah');
Route::get('foto/{id}/{jaminanId}', [SurveyorController::class, 'foto'])->name('foto');
Route::get('data-pembanding/{id}/{jaminanId}', [SurveyorController::class, 'dataPembanding'])->name('data-pembanding');
Route::get('inspeksi/{id}', [SurveyorController::class, 'formInspeksi'])->name('inspeksi');
Route::get('denah/{id}', [SurveyorController::class, 'denah'])->name('denah');
Route::get('foto/{id}', [SurveyorController::class, 'foto'])->name('foto');
Route::get('data-pembanding/{id}', [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');
@@ -540,12 +538,23 @@ Route::middleware(['auth'])->group(function () {
Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables');
Route::get('lampiran/{id}', [PenilaiController::class, 'lampiran'])->name('lampiran');
Route::get('export/kertas-kerja/{id}/{jaminanId}', [PenilaiController::class, 'kertas_kerja'])->name('export.kertas-kerja');
Route::get('export/kertas-kerja', [PenilaiController::class, 'export_kertas_kerja'])->name('export.kertas-kerja');
Route::post('import/kertas-kerja', [PenilaiController::class, 'import_kertas_kerja'])->name('import.kertas-kerja');
Route::get('sederhana/{id}', [PenilaiController::class, 'sederhana'])->name('sederhana');
Route::get('standard/{id}', [PenilaiController::class, 'standard'])->name('standard');
Route::get('resume/{id}', [PenilaiController::class, 'resume'])->name('resume');
Route::get('memo/{id}', [PenilaiController::class, 'standard'])->name('memo');
Route::get('resume', [PenilaiController::class, 'resume'])->name('resume');
Route::get('memo', [PenilaiController::class, 'memo'])->name('memo');
Route::get('paparan', [PenilaiController::class, 'paparan'])->name('paparan');
Route::get('rap', [PenilaiController::class, 'rap'])->name('rap');
Route::get('/check-status-lpj', [PenilaiController::class, 'checkStatusLpj'])->name('check.status.lpj');
Route::post('/save-status-lpj', [PenilaiController::class, 'saveStatusLpj'])->name('save.status.lpj');
Route::post('/preoses-laporan/{id}', [PenilaiController::class, 'storePenilaian'])->name('proses.laporan');
Route::post('storeResume', [PenilaiController::class, 'storeResume'])->name('storeResume');
Route::post('storeMemo', [PenilaiController::class, 'storeMemo'])->name('storeMemo');
Route::post('storeLpjSederhanadanStandard', [PenilaiController::class, 'storeLpjSederhanadanStandard'])->name('storeLpjSederhanadanStandard');
});
@@ -553,6 +562,11 @@ Route::middleware(['auth'])->group(function () {
->name('persetujuan-penawaran.datatables');
Route::resource('persetujuan-penawaran', PersetujuanPenawaranController::class);
Route::get('noc/datatables', [NocController::class, 'dataForDatatables'])
->name('noc.datatables');
Route::resource('noc', NocController::class);
});
require __DIR__ . '/registrasi.php';