diff --git a/app/Exports/LaporanPenilaiJaminanExport.php b/app/Exports/LaporanPenilaiJaminanExport.php
new file mode 100644
index 0000000..64e8165
--- /dev/null
+++ b/app/Exports/LaporanPenilaiJaminanExport.php
@@ -0,0 +1,128 @@
+tanggalAwal = $tanggalAwal;
+ $this->tanggalAkhir = $tanggalAkhir;
+ $this->status = $status;
+ $this->selectedIds = $selectedIds;
+ }
+
+
+ public function query()
+ {
+ $query = Permohonan::query()
+ ->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'dokumenjaminan.jenisJaminan','nilaiPlafond', 'penilai']);
+
+ // Filter by date range if provided
+ if ($this->tanggalAwal && $this->tanggalAkhir) {
+ $query->whereBetween('tanggal_permohonan', [$this->tanggalAwal, $this->tanggalAkhir]);
+ }
+
+ $query->where('status', 'done');
+ // Filter by status if provided
+ if ($this->status) {
+ $types = is_array($this->status) ? $this->status : [$this->status];
+ $query->whereHas('penilai', function (Builder $query) use ($types) {
+ $query->whereIn('type_penilai', $types);
+ });
+ }
+
+
+ // Filter by selected IDs if provided
+ if ($this->selectedIds) {
+ $selectedIds = is_array($this->selectedIds) ? $this->selectedIds : explode(',', $this->selectedIds);
+ $query->whereIn('id', $selectedIds);
+ }
+
+ return $query;
+ }
+
+
+ public function map($row): array
+ {
+ $fieldPenilai = ['sederhana', 'standar', 'resume', 'memo', 'rap', 'call-report'];
+ $penilaiCek = null;
+
+ // Find the first available field in the array
+ foreach ($fieldPenilai as $value) {
+ if (!empty($row->penilai->$value)) {
+ $penilaiCek = $row->penilai->$value;
+ break;
+ }
+ }
+
+ $decodePenilai = json_decode($penilaiCek, true) ?? [];
+
+ return [
+ $row->id,
+ $row->nomor_registrasi,
+ $row->user->name,
+ $row->branch->name,
+ $row->tujuanPenilaian->name,
+ $row->debiture->name,
+ $row->penilai->type_penilai ?? '-',
+ '-',
+ $decodePenilai['luas_tanah'] ?? 0,
+ $decodePenilai['luas_bangunan'] ?? 0,
+ $decodePenilai['nilai_tanah_1'] ?? 0,
+ $decodePenilai['nilai_bangunan_1'] ?? 0,
+ $decodePenilai['total_nilai_pasar_wajar'] ?? 0,
+ $decodePenilai['likuidasi'] ?? 0,
+ $row->authorized_at,
+ $row->authorized_status ?? '-',
+ $row->authorized_by ?? '-',
+ $row->created_at,
+ ];
+ }
+
+ public function headings(): array
+ {
+ return [
+ 'ID',
+ 'Nomor Registrasi',
+ 'User Pemohon',
+ 'Branch Pemohon',
+ 'Tujuan Penilaian',
+ 'Debitur',
+ 'Jenis Laporan',
+ 'Lokasi Jaminan',
+ 'Luas Tanah',
+ 'Luas Bangunan',
+ 'Harga Tanah',
+ 'Harga Bangunan',
+ 'Nilai Pasar Wajar',
+ 'Likuidasi',
+ 'Tanggal Laporan',
+ 'Nama Penilai',
+ 'Nik Penilai',
+ ];
+ }
+ public function columnFormats(): array
+ {
+ return [
+ 'A' => NumberFormat::FORMAT_NUMBER,
+ 'C' => NumberFormat::FORMAT_DATE_DATETIME,
+ 'K' => NumberFormat::FORMAT_DATE_DATETIME,
+ 'N' => NumberFormat::FORMAT_DATE_DATETIME
+ ];
+ }
+}
diff --git a/app/Helpers/Lpj.php b/app/Helpers/Lpj.php
index dc66a26..569f067 100644
--- a/app/Helpers/Lpj.php
+++ b/app/Helpers/Lpj.php
@@ -41,7 +41,7 @@ function formatRupiah($number,$decimals = 0)
function formatAlamat($alamat)
{
- return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->postal_code ?? '');
+ return ($alamat->address ? $alamat->address . ', ' : '') . (isset($alamat->village) ? $alamat->village->name . ', ' : '') . (isset($alamat->city) ? $alamat->city->name . ', ' : '') . (isset($alamat->province) ? $alamat->province->name . ', ' : '') . ($alamat->village->postal_code ?? '');
}
// andy add
diff --git a/app/Http/Controllers/BankDataController.php b/app/Http/Controllers/BankDataController.php
new file mode 100644
index 0000000..ac94545
--- /dev/null
+++ b/app/Http/Controllers/BankDataController.php
@@ -0,0 +1,173 @@
+bankDataService = $bankDataService;
+ }
+
+ public function index(Request $request)
+ {
+ $provinces = Province::all();
+ $jenisJaminan = JenisJaminan::all();
+
+ return view('lpj::bank-data.index', compact('provinces', 'jenisJaminan' ));
+ }
+
+ public function create()
+ {
+ return view('lpj::bank-data.create');
+ }
+
+ public function store(BankDataRequest $request)
+ {
+ $data = $request->validated();
+ $bankData = $this->bankDataService->createBankData($data);
+ return redirect()->route('lpj.bank-data.show', $bankData->id)->with('success', 'Bank data created successfully.');
+ }
+
+ public function show($id)
+ {
+ $bankData = $this->bankDataService->findBankData($id);
+ return view('lpj::bank-data.show', compact('bankData'));
+ }
+
+ public function edit($id)
+ {
+ $bankData = $this->bankDataService->findBankData($id);
+ return view('lpj::bank-data.edit', compact('bankData'));
+ }
+
+ public function update(BankDataRequest $request, $id)
+ {
+ $data = $request->validated();
+ $bankData = $this->bankDataService->updateBankData($id, $data);
+ return redirect()->route('lpj.bank-data.show', $bankData->id)->with('success', 'Bank data updated successfully.');
+ }
+
+ public function destroy($id)
+ {
+ $this->bankDataService->deleteBankData($id);
+ return redirect()->route('lpj.bank-data.index')->with('success', 'Bank data deleted successfully.');
+ }
+
+ public function dataForDatatables(Request $request)
+ {
+ if (is_null($this->user) || !$this->user->can('bank-data.view')) {
+ //abort(403, 'Sorry! You are not allowed to view bank data.');
+ }
+
+ // Retrieve data from the database
+ $query = BankData::query();
+
+ // Apply search filter if provided
+ if ($request->has('search') && !empty($request->get('search'))) {
+ $search = $request->get('search');
+ $search = json_decode($search, true);
+ if (is_array($search)) {
+
+ if ($search['province_code']) {
+ $query->ofProvince($search['province_code']);
+ }
+
+ if ($search['city_code']) {
+ $query->ofCity($search['city_code']);
+ }
+
+ if ($search['district_code']) {
+ $query->ofDistrict($search['district_code']);
+ }
+
+ if ($search['village_code']) {
+ $query->ofVillage($search['village_code']);
+ }
+
+ if ($search['jenis_asset']) {
+ $query->ofAssetType($search['jenis_asset']);
+ }
+
+ if ($search['start_date'] && $search['end_date']) {
+ $query->betweenDates($request->start_date, $search['end_date']);
+ }
+ } else{
+ $search = $request->get('search');
+ $query->where(function ($q) use ($search) {
+ $q->where('jenis_aset', '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->get();
+
+ // Format the data as needed
+ $formattedData = $data->map(function ($item) {
+ return [
+ 'id' => $item->id,
+ 'jenis_aset' => $item->jenis_aset,
+ 'tanggal' => $item->tanggal->format('d-m-Y'),
+ 'tahun' => $item->tahun,
+ 'luas_tanah' => $item->luas_tanah,
+ 'luas_bangunan' => $item->luas_bangunan,
+ 'harga' => $item->harga,
+ 'nilai_pasar' => $item->nilai_pasar,
+ 'location' => $item->kordinat_lat . ', ' . $item->kordinat_lng,
+ 'address' => formatAlamat($item)
+ // Add more fields as needed
+ ];
+ });
+
+ // 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' => $formattedData,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/LaporanAdminKreditController.php b/app/Http/Controllers/LaporanAdminKreditController.php
index 7656461..d62ce28 100644
--- a/app/Http/Controllers/LaporanAdminKreditController.php
+++ b/app/Http/Controllers/LaporanAdminKreditController.php
@@ -21,6 +21,7 @@
{
$permohonan = Permohonan::with(['documents.jenisJaminan','penilaian._user_penilai','penilai','documents.detail.jenisLegalitasJaminan'])->where(['status'=>'done'])->get();
foreach($permohonan as $_permohonan){
+ $npw = 0;
if(isset($_permohonan->penilai->lpj)){
$npw = json_decode($_permohonan->penilai->lpj, true);
$npw = $npw['total_nilai_pasar_wajar'] ?? 0;
@@ -38,7 +39,9 @@
'nilai_pasar_wajar' => str_replace('.', '', $npw),
'bukti_kepemilikan' => $_permohonan->documents->flatMap(function ($document) {
return $document->detail->map(function ($detail) {
- return $detail->jenisLegalitasJaminan->name ?? null;
+ return (!empty($detail->dokumen_nomor) && is_array($detail->dokumen_nomor))
+ ? ($detail->jenisLegalitasJaminan->name ?? '') . "\n" . implode(', ', $detail->dokumen_nomor)
+ : null;
});
})->filter()->unique()->implode(', '),
];
diff --git a/app/Http/Controllers/LaporanPenilaiJaminanController.php b/app/Http/Controllers/LaporanPenilaiJaminanController.php
new file mode 100644
index 0000000..6b7fc66
--- /dev/null
+++ b/app/Http/Controllers/LaporanPenilaiJaminanController.php
@@ -0,0 +1,192 @@
+user();
+
+
+ // Check permissions
+ if (is_null($this->user) || !$this->user->can('debitur.view')) {
+ // abort(403, 'Sorry! You are not allowed to view users.');
+ }
+
+ $userRole = $user->roles->pluck('name')->first();
+ $regionId = null;
+
+ // If user is senior-officer, get their regionId
+ if ($userRole === 'senior-officer') {
+ $userTeam = TeamsUsers::with('team')->firstWhere('user_id', $user->id);
+ $regionId = $userTeam?->team->regions_id;
+ }
+
+ // Retrieve data from the database
+ $query = Permohonan::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 . '%')
+ ->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%')
+ ->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%')
+ ->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%')
+ ->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%')
+ ->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
+
+ // Split search term by comma to allow multiple statuses
+ $statusKeywords = explode(',', $search);
+ foreach ($statusKeywords as $keyword) {
+ $q->orWhere('status', 'LIKE', '%' . trim($keyword) . '%');
+ }
+ });
+ }
+ $query->where('status', 'done');
+
+
+
+ // Default sorting if no sort provided
+ if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
+ $order = $request->get('sortOrder');
+ $column = $request->get('sortField');
+ $query->orderBy($column, $order);
+ } else {
+ $query->orderBy('nomor_registrasi', 'asc');
+ }
+
+ // Get total count of records before pagination
+ $totalRecords = $query->count();
+
+ // Pagination
+ if ($request->has('page') && $request->has('size')) {
+ $page = (int) $request->get('page', 1);
+ $size = (int) $request->get('size', 10);
+ $offset = ($page - 1) * $size;
+ $query->skip($offset)->take($size);
+ }
+
+ // Get filtered count
+ $filteredRecords = $query->count();
+
+
+
+ $totalRecords = $query->count();
+
+ // Pagination
+ if ($request->has('page') && $request->has('size')) {
+ $page = (int) $request->get('page', 1);
+ $size = (int) $request->get('size', 10);
+ $offset = ($page - 1) * $size;
+ $query->skip($offset)->take($size);
+ }
+
+ // Get filtered count
+ $filteredRecords = $query->count();
+
+ // Get data with necessary relationships
+ $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian', 'dokumenjaminan.jenisJaminan','nilaiPlafond', 'penilai'])->get();
+
+ // Calculate total pages
+ $pageCount = ceil($totalRecords / $request->get('size', 10));
+
+
+
+
+ // Calculate total pages
+ $pageCount = ceil($totalRecords / $request->get('size', 10));
+
+ return response()->json([
+ 'draw' => $request->get('draw'),
+ 'recordsTotal' => $totalRecords,
+ 'recordsFiltered' => $filteredRecords,
+ 'pageCount' => $pageCount,
+ 'page' => $request->get('page', 1),
+ 'totalCount' => $totalRecords,
+ 'data' => $data,
+ ]);
+ }
+
+ public function export(Request $request)
+ {
+ $tanggalAwal = $request->input('tanggal_awal');
+ $tanggalAkhir = $request->input('tanggal_akhir');
+ $status = $request->input('status');
+ $selectedIds = $request->input('selected_ids');
+
+ $filename = 'laporan_penilai_jaminan_' . date('YmdHis') . '.xlsx';
+ return Excel::download(
+ new LaporanPenilaiJaminanExport($tanggalAwal, $tanggalAkhir, $status, $selectedIds),
+ $filename
+ );
+ }
+}
diff --git a/app/Http/Requests/BankDataRequest.php b/app/Http/Requests/BankDataRequest.php
new file mode 100644
index 0000000..e35c560
--- /dev/null
+++ b/app/Http/Requests/BankDataRequest.php
@@ -0,0 +1,57 @@
+ 'nullable|string|max:255',
+ 'village_code' => 'nullable|string|max:20',
+ 'district_code' => 'nullable|string|max:20',
+ 'city_code' => 'nullable|string|max:20',
+ 'province_code' => 'nullable|string|max:20',
+ 'tahun' => 'nullable|integer',
+ 'luas_tanah' => 'nullable|numeric',
+ 'luas_bangunan' => 'nullable|numeric',
+ 'tahun_bangunan' => 'nullable|integer',
+ 'status_nara_sumber' => 'nullable|string|max:50',
+ 'harga' => 'nullable|numeric',
+ 'harga_diskon' => 'nullable|numeric',
+ 'diskon' => 'nullable|numeric',
+ 'total' => 'nullable|numeric',
+ 'nama_nara_sumber' => 'nullable|string|max:100',
+ 'peruntukan' => 'nullable|string|max:100',
+ 'penawaran' => 'nullable|string|max:50',
+ 'telepon' => 'nullable|string|max:20',
+ 'hak_properti' => 'nullable|string|max:50',
+ 'kordinat_lat' => 'nullable|numeric',
+ 'kordinat_lng' => 'nullable|numeric',
+ 'jenis_aset' => 'nullable|string|max:50',
+ 'foto_objek' => 'nullable|image|max:2048',
+ 'tanggal' => 'nullable|date',
+ 'harga_penawaran' => 'nullable|numeric',
+ 'nomor_laporan' => 'nullable|string|max:50',
+ 'tgl_final_laporan' => 'nullable|date',
+ 'nilai_pasar' => 'nullable|numeric',
+ 'indikasi_nilai_likuidasi' => 'nullable|numeric',
+ 'indikasi_nilai_pasar_tanah' => 'nullable|numeric',
+ 'estimasi_harga_tanah' => 'nullable|numeric',
+ 'estimasi_harga_bangunan' => 'nullable|numeric',
+ 'indikasi_nilai_pasar_bangunan' => 'nullable|numeric',
+ 'indikasi_nilai_pasar_sarana_pelengkap' => 'nullable|numeric',
+ 'indikasi_nilai_pasar_mesin' => 'nullable|numeric',
+ 'indikasi_nilai_pasar_kendaraan_alat_berat' => 'nullable|numeric',
+ 'photos' => 'nullable|array',
+ 'photos.*' => 'nullable|image|max:2048',
+ ];
+ }
+ }
diff --git a/app/Models/BankData.php b/app/Models/BankData.php
new file mode 100644
index 0000000..b7b992b
--- /dev/null
+++ b/app/Models/BankData.php
@@ -0,0 +1,104 @@
+ 'integer',
+ 'luas_tanah' => 'decimal:2',
+ 'luas_bangunan' => 'decimal:2',
+ 'tahun_bangunan' => 'integer',
+ 'harga' => 'decimal:2',
+ 'harga_diskon' => 'decimal:2',
+ 'diskon' => 'decimal:2',
+ 'total' => 'decimal:2',
+ 'kordinat_lat' => 'decimal:8',
+ 'kordinat_lng' => 'decimal:8',
+ 'harga_penawaran' => 'decimal:2',
+ 'tanggal' => 'date',
+ 'tgl_final_laporan' => 'date',
+ 'nilai_pasar' => 'decimal:2',
+ 'indikasi_nilai_likuidasi' => 'decimal:2',
+ 'indikasi_nilai_pasar_tanah' => 'decimal:2',
+ 'estimasi_harga_tanah' => 'decimal:2',
+ 'estimasi_harga_bangunan' => 'decimal:2',
+ 'indikasi_nilai_pasar_bangunan' => 'decimal:2',
+ 'indikasi_nilai_pasar_sarana_pelengkap' => 'decimal:2',
+ 'indikasi_nilai_pasar_mesin' => 'decimal:2',
+ 'indikasi_nilai_pasar_kendaraan_alat_berat' => 'decimal:2',
+ 'photos' => 'array'
+ ];
+
+ // Scope for filtering by asset type
+ public function scopeOfAssetType($query, $assetType)
+ {
+ return $query->where('jenis_aset', $assetType);
+ }
+
+ // Scope for filtering by village
+ public function scopeOfVillage($query, $villageCode)
+ {
+ return $query->where('village_code', $villageCode);
+ }
+
+ // Scope for filtering by district
+ public function scopeOfDistrict($query, $districtCode)
+ {
+ return $query->where('district_code', $districtCode);
+ }
+
+ // Scope for filtering by city
+ public function scopeOfCity($query, $cityCode)
+ {
+ return $query->where('city_code', $cityCode);
+ }
+
+ // Scope for filtering by province
+ public function scopeOfProvince($query, $provinceCode)
+ {
+ return $query->where('province_code', $provinceCode);
+ }
+
+ // Scope for filtering by date
+ public function scopeOfDate($query, $date)
+ {
+ return $query->whereDate('tanggal', $date);
+ }
+
+ // Scope for filtering by date range
+ public function scopeBetweenDates($query, $startDate, $endDate)
+ {
+ return $query->whereBetween('tanggal', [$startDate, $endDate]);
+ }
+
+ public function village()
+ {
+ return $this->belongsTo(Village::class, 'village_code', 'code');
+ }
+
+ public function district()
+ {
+ return $this->belongsTo(District::class, 'district_code', 'code');
+ }
+
+ public function city()
+ {
+ return $this->belongsTo(City::class, 'city_code', 'code');
+ }
+
+ public function province()
+ {
+ return $this->belongsTo(Province::class, 'province_code', 'code');
+ }
+
+ }
diff --git a/app/Providers/LpjServiceProvider.php b/app/Providers/LpjServiceProvider.php
index 474ae18..a7f8df1 100644
--- a/app/Providers/LpjServiceProvider.php
+++ b/app/Providers/LpjServiceProvider.php
@@ -4,6 +4,8 @@
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
+ use Modules\Lpj\Models\BankData;
+ use Modules\Lpj\Services\BankDataService;
class LpjServiceProvider extends ServiceProvider
{
@@ -118,6 +120,9 @@
{
$this->app->register(EventServiceProvider::class);
$this->app->register(RouteServiceProvider::class);
+ $this->app->bind(BankDataService::class, function ($app){
+ return new BankDataService($app->make(BankData::class));
+ });
}
/**
diff --git a/app/Services/BankDataService.php b/app/Services/BankDataService.php
new file mode 100644
index 0000000..98ab6e0
--- /dev/null
+++ b/app/Services/BankDataService.php
@@ -0,0 +1,116 @@
+bankData = $bankData;
+ }
+
+ /**
+ * Get all bank data with optional filtering and pagination
+ *
+ * @param array $filters
+ * @param int|null $perPage
+ *
+ * @return Collection|LengthAwarePaginator
+ */
+ public function getAllBankData(array $filters = [], ?int $perPage = null)
+ {
+ $query = $this->bankData->newQuery();
+
+ // Apply filters
+ if (isset($filters['village_code'])) {
+ $query->ofVillage($filters['village_code']);
+ }
+ if (isset($filters['district_code'])) {
+ $query->ofDistrict($filters['district_code']);
+ }
+ if (isset($filters['city_code'])) {
+ $query->ofCity($filters['city_code']);
+ }
+ if (isset($filters['province_code'])) {
+ $query->ofProvince($filters['province_code']);
+ }
+ if (isset($filters['date'])) {
+ $query->ofDate($filters['date']);
+ }
+ if (isset($filters['start_date']) && isset($filters['end_date'])) {
+ $query->betweenDates($filters['start_date'], $filters['end_date']);
+ }
+ if (isset($filters['year'])) {
+ $query->ofYear($filters['year']);
+ }
+ if (isset($filters['asset_type'])) {
+ $query->ofAssetType($filters['asset_type']);
+ }
+
+ // Add more filters as needed
+
+ return $perPage ? $query->paginate($perPage) : $query->get();
+ }
+
+ /**
+ * Create a new bank data entry
+ *
+ * @param array $data
+ *
+ * @return BankData
+ */
+ public function createBankData(array $data)
+ : BankData
+ {
+ return $this->bankData->create($data);
+ }
+
+ /**
+ * Update an existing bank data entry
+ *
+ * @param int $id
+ * @param array $data
+ *
+ * @return BankData
+ */
+ public function updateBankData(int $id, array $data)
+ : BankData
+ {
+ $bankData = $this->bankData->findOrFail($id);
+ $bankData->update($data);
+ return $bankData;
+ }
+
+ /**
+ * Delete a bank data entry
+ *
+ * @param int $id
+ *
+ * @return bool
+ */
+ public function deleteBankData(int $id)
+ : bool
+ {
+ $bankData = $this->bankData->findOrFail($id);
+ return $bankData->delete();
+ }
+
+ /**
+ * Find a bank data entry by ID
+ *
+ * @param int $id
+ *
+ * @return BankData|null
+ */
+ public function findBankData(int $id)
+ : ?BankData
+ {
+ return $this->bankData->find($id);
+ }
+ }
diff --git a/database/migrations/2025_03_17_130936_create_bank_data_table.php b/database/migrations/2025_03_17_130936_create_bank_data_table.php
new file mode 100644
index 0000000..c3ad010
--- /dev/null
+++ b/database/migrations/2025_03_17_130936_create_bank_data_table.php
@@ -0,0 +1,69 @@
+id();
+ $table->text('address')->nullable();
+ $table->string('village_code')->nullable();
+ $table->string('district_code')->nullable();
+ $table->string('city_code')->nullable();
+ $table->string('province_code')->nullable();
+ $table->integer('tahun')->nullable();
+ $table->decimal('luas_tanah', 15, 2)->nullable();
+ $table->decimal('luas_bangunan', 15, 2)->nullable();
+ $table->integer('tahun_bangunan')->nullable();
+ $table->string('status_nara_sumber')->nullable();
+ $table->decimal('harga', 15, 2)->nullable();
+ $table->decimal('harga_diskon', 15, 2)->nullable();
+ $table->decimal('diskon', 5, 2)->nullable();
+ $table->decimal('total', 15, 2)->nullable();
+ $table->string('nama_nara_sumber')->nullable();
+ $table->string('peruntukan')->nullable();
+ $table->string('penawaran')->nullable();
+ $table->string('telepon')->nullable();
+ $table->string('hak_properti')->nullable();
+ $table->decimal('kordinat_lat', 10, 8)->nullable();
+ $table->decimal('kordinat_lng', 11, 8)->nullable();
+ $table->string('jenis_aset')->nullable();
+ $table->string('foto_objek')->nullable();
+ $table->date('tanggal')->nullable();
+ $table->decimal('harga_penawaran', 15, 2)->nullable();
+ $table->string('nomor_laporan')->nullable();
+ $table->date('tgl_final_laporan')->nullable();
+ $table->decimal('nilai_pasar', 15, 2)->nullable();
+ $table->decimal('indikasi_nilai_likuidasi', 15, 2)->nullable();
+ $table->decimal('indikasi_nilai_pasar_tanah', 15, 2)->nullable();
+ $table->decimal('estimasi_harga_tanah', 15, 2)->nullable();
+ $table->decimal('estimasi_harga_bangunan', 15, 2)->nullable();
+ $table->decimal('indikasi_nilai_pasar_bangunan', 15, 2)->nullable();
+ $table->decimal('indikasi_nilai_pasar_sarana_pelengkap', 15, 2)->nullable();
+ $table->decimal('indikasi_nilai_pasar_mesin', 15, 2)->nullable();
+ $table->decimal('indikasi_nilai_pasar_kendaraan_alat_berat', 15, 2)->nullable();
+ $table->json('photos')->nullable();
+ $table->timestamps();
+ $table->softDeletes();
+
+ $table->unsignedBigInteger('created_by')->nullable();
+ $table->unsignedBigInteger('updated_by')->nullable();
+ $table->unsignedBigInteger('deleted_by')->nullable();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('bank_data');
+ }
+};
diff --git a/module.json b/module.json
index c0302e9..cec0301 100644
--- a/module.json
+++ b/module.json
@@ -109,6 +109,17 @@
}
],
"main": [
+ {
+ "title": "Bank Data",
+ "path": "bank-data",
+ "icon": "ki-filled ki-questionnaire-tablet text-lg text-primary",
+ "classes": "",
+ "attributes": [],
+ "permission": "",
+ "roles": [
+ "administrator"
+ ]
+ },
{
"title": "Permohonan",
"path": "permohonan",
@@ -366,6 +377,23 @@
"EO Appraisal",
"senior-officer"
]
+ },
+ {
+ "title": "Laporan Penilai Jaminan",
+ "path": "laporan-penilai-jaminan",
+ "icon": "ki-filled ki-filter-tablet text-lg text-primary",
+ "classes": "",
+ "attributes": [],
+ "permission": "",
+ "roles": [
+ "administrator",
+ "pemohon-ao",
+ "pemohon-eo",
+ "admin",
+ "DD Appraisal",
+ "EO Appraisal",
+ "senior-officer"
+ ]
}
],
"master": [
diff --git a/resources/views/bank-data/index.blade.php b/resources/views/bank-data/index.blade.php
new file mode 100644
index 0000000..00b184f
--- /dev/null
+++ b/resources/views/bank-data/index.blade.php
@@ -0,0 +1,469 @@
+@extends('layouts.main')
+
+@section('breadcrumbs')
+ {{ Breadcrumbs::render('bank-data') }}
+@endsection
+
+@section('content')
+
+
+@endsection
+
+@push('scripts')
+
+
+@endpush
diff --git a/resources/views/laporan-penilai-jaminan/index.blade.php b/resources/views/laporan-penilai-jaminan/index.blade.php
new file mode 100644
index 0000000..bdf6683
--- /dev/null
+++ b/resources/views/laporan-penilai-jaminan/index.blade.php
@@ -0,0 +1,410 @@
+@extends('layouts.main')
+
+@section('breadcrumbs')
+ {{ Breadcrumbs::render('laporan-penilai-jaminan') }}
+@endsection
+
+@section('content')
+@push('styles')
+
+@endpush
+
+
+
+
+@endsection
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/spk/view.blade.php b/resources/views/spk/view.blade.php
index 1a81ab3..57ae0f2 100644
--- a/resources/views/spk/view.blade.php
+++ b/resources/views/spk/view.blade.php
@@ -142,7 +142,6 @@
@endsection
@push('scripts')
-