diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..9d6e39a --- /dev/null +++ b/app/Http/Controllers/DashboardController.php @@ -0,0 +1,36 @@ +dashboardService = $dashboardService; + } + /** + * Display a listing of the resource. + */ + public function index(Request $request) + { + // nilai default + $start_date = $request->input('start_date', now()->startOfYear()->format('Y-m-d')); + $end_date = $request->input('end_date', now()->format('Y-m-d')); + + $validate = $request->validate([ + 'start_date' => 'nullable|date_format:Y-m-d', + 'end_date' => 'nullable|date_format:Y-m-d', + ]); + + $dashboard = $this->dashboardService->getDashboardData($start_date, $end_date); + + // dd($dashboard); + return view('lpj::dashboard.index', compact('dashboard')); + } + +} diff --git a/app/Http/Controllers/LaporanBiayaInternalExternalController.php b/app/Http/Controllers/LaporanBiayaInternalExternalController.php new file mode 100644 index 0000000..89c3d1c --- /dev/null +++ b/app/Http/Controllers/LaporanBiayaInternalExternalController.php @@ -0,0 +1,23 @@ +laporanDebitureService = app(LaporanDebitureService::class); + } + + /** + * Display a listing of the resource. + */ + public function index() + { + $debiture = Debiture::all(); + return view('lpj::laporan-debiture.index', compact('debiture')); + } + + + public function dataTableForDebiture(Request $request) + { + return $this->laporanDebitureService->dataForDatatables($request); + } + +} diff --git a/app/Http/Controllers/LaporanMonitoringSoController.php b/app/Http/Controllers/LaporanMonitoringSoController.php new file mode 100644 index 0000000..2e3d9d6 --- /dev/null +++ b/app/Http/Controllers/LaporanMonitoringSoController.php @@ -0,0 +1,43 @@ +laporanMonitoringSoService = $laporanMonitoringSoService; + } + + /** + * Display a listing of the resource. + */ + public function index() + { + $user = auth()->user()->load('roles'); + $result = $this->laporanMonitoringSoService->progresPengerjaanLaporan($user); + return view('lpj::laporan-monitoring.index', compact('result')); + } + + /** + * Show details data. + * @return Response + */ + + public function show($id){ + return view('lpj::laporan-monitoring.show', compact('id')); + } + + + public function dataForDatatablePenilai(Request $request, $id){ + return $this->laporanMonitoringSoService->showDetailsPermohonan($request, $id); + } + +} diff --git a/app/Http/Controllers/LaporanSLAPenilaiController.php b/app/Http/Controllers/LaporanSLAPenilaiController.php new file mode 100644 index 0000000..4ef6704 --- /dev/null +++ b/app/Http/Controllers/LaporanSLAPenilaiController.php @@ -0,0 +1,32 @@ +laporanSLAPenilaiService = app(LaporanSLAPenilaiService::class); + } + + /** + * Display a listing of the resource. + */ + public function index() + { + return view('lpj::laporan-sla-penilai.index'); + } + + public function dataForDatatableSLaPenilai(Request $request) + { + return $this->laporanSLAPenilaiService->dataForDatatables($request); + } + + +} diff --git a/app/Http/Controllers/LaporanUserController.php b/app/Http/Controllers/LaporanUserController.php new file mode 100644 index 0000000..7d48559 --- /dev/null +++ b/app/Http/Controllers/LaporanUserController.php @@ -0,0 +1,41 @@ +laporanUserService = $laporanUserService; + } + + /** + * Display a listing of the resource. + */ + public function index() + { + // $user = $this->laporanUserService->getUserPemohon(); + return view('lpj::laporan-user.index'); + } + + public function searchUserPemohon(Request $request) + { + $search = $request->get('search'); + $user = $this->laporanUserService->getUserPemohon($search); + return response()->json($user); + } + + public function dataTableForUserPemohon(Request $request) + { + return $this->laporanUserService->dataForDatatables($request); + } + +} diff --git a/app/Http/Controllers/RekapHarianSoController.php b/app/Http/Controllers/RekapHarianSoController.php new file mode 100644 index 0000000..5fae8e8 --- /dev/null +++ b/app/Http/Controllers/RekapHarianSoController.php @@ -0,0 +1,22 @@ +getTotalLpjInternal($start_date, $end_date); + $countLpjExternal = $this->getTotalLpjEksternal($start_date, $end_date); + $countResume = $this->getResumeCabang($start_date, $end_date); + $countPendapatan = $this->getPendapatanAppraisal($start_date, $end_date); + + return [ + 'count_lpj_internal' => $countLpjInternal, + 'count_lpj_eksternal' => $countLpjExternal, + 'count_resume' => $countResume, + 'count_pendapatan' => $countPendapatan + ]; + + } + + + + public function getTotalLpjInternal($start_date, $end_date) + { + $months = $this->getMonthly(); + $regions = $this->getRegion(); + $data = []; + + foreach ($months as $index => $month) { + $monthNumber = $index + 1; + $data[$month] = []; + + foreach ($regions as $region) { + if ($monthNumber > now()->month) { + + $data[$month][$region] = [ + 'total_laporan' => 0, + 'total_debiture' => 0, + ]; + } else { + + $totalLaporan = Laporan::whereBetween('created_at', [$start_date, $end_date]) + ->count(); + $totalDebitur = Permohonan::whereBetween('created_at', [$start_date, $end_date]) + ->where('status', 'done') + ->distinct() + ->count('debiture_id'); + + + + $data[$month][$region] = [ + 'total_laporan' => $totalLaporan, + 'total_debiture' => $totalDebitur, + ]; + } + } + } + return $data; + } + + + + public function getPendapatanAppraisal($start_date, $end_date) +{ + $months = $this->getMonthly(); + $data = []; + + foreach ($months as $index => $month) { + $monthNumber = $index + 1; + + if ($monthNumber > now()->month) { + // Bulan belum terjadi + $data[$month] = [ + 'total_jumlah' => 0, + 'total_akumulasi' => 0, + ]; + } else { + // Hitung jumlah nominal_bayar pada bulan ini + $totalJumlah = Noc::whereYear('tanggal_pembayaran', now()->year) + ->whereMonth('tanggal_pembayaran', $monthNumber) + ->sum('nominal_bayar'); + + + $data[$month] = [ + 'total_jumlah' => $totalJumlah, + 'total_akumulasi' => $totalJumlah, + ]; + } + } + + return $data; +} + + public function getResumeCabang($start_date, $end_date) + { + $regions = $this->getRegion(); + $status = ['batal', 'done']; + $data = []; + + foreach ($status as $item) { + $data[$item] = []; + foreach ($regions as $region) { + $totalLaporan = DB::table('laporan') + ->join('permohonan', 'laporan.permohonan_id', '=', 'permohonan.id') + ->where('permohonan.status', $item) + ->whereBetween('laporan.created_at', [$start_date, $end_date]) + ->count(); + + $data[$item][$region] = [ + 'count_report' => $totalLaporan, + ]; + } + } + + return $data; + + } + public function getTotalLpjEksternal($start_date, $end_date) + { + $months = $this->getMonthly(); + $data = []; + foreach ($months as $index => $month) { + $monthNumber = $index + 1; + if ($monthNumber > now()->month) { + $data[$month] = [ + 'total_laporan' => 0, + 'total_debiture' => 0, + ]; + } else { + $totalLaporan = Laporan::where('created_at', '>=', $start_date)->where('created_at', '<=', $end_date)->count(); + + $totalDebitur = Permohonan::whereBetween('created_at', [$start_date, $end_date]) + ->where('status', 'done') + ->distinct() + ->count('debiture_id'); + + $data[$month] = [ + 'total_laporan' => $totalLaporan, + 'total_debiture' => $totalDebitur, + ]; + } + } + return $data; + + + } + + private function getMonthly() + { + return [ + 'januari', + 'februari', + 'maret', + 'april', + 'mei', + 'juni', + 'juli', + 'agustus', + 'september', + 'oktober', + 'november', + 'desember', + ]; + } + + private function getRegion() + { + return [ + 'jabodetabek', + 'non-jabodetabek', + ]; + } +} diff --git a/app/Services/LaporanDebitureService.php b/app/Services/LaporanDebitureService.php new file mode 100644 index 0000000..fb27ce6 --- /dev/null +++ b/app/Services/LaporanDebitureService.php @@ -0,0 +1,182 @@ +where('status', 'done'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('tanggal_permohonan', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + // Filter by branch if provided + if (isset($search->debiture_id) && !empty($search->debiture_id)) { + $query->where('debiture_id', $search->debiture_id); + } + + if (isset($search->search)) { + + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(['debiture.branch'])->get(); + + $data = $data->map(function ($permohonan) { + $luas_tanah = 0; + $luas_bangunan = 0; + $nilai_tanah = 0; + $nilai_bangunan = 0; + $npw = 0; + $nilai_liquidasi = 0; + + if (isset($permohonan->penilai->lpj)) { + $lpj = json_decode($permohonan->penilai->lpj, true); + $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0); + + $luas_tanah = $lpj['luas_tanah'] ?? 0; + $luas_bangunan = $lpj['luas_bangunan'] ?? 0; + // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_' + $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0); + + $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0); + $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0); + } + + return [ + 'id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'jenis_penilaian' => $permohonan->jenisPenilaian?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_fasilitas_kredit' => $permohonan->jenisFasilitasKredit?->name, + 'branch' => $permohonan->debiture->branch?->name, + 'pemohon' => $permohonan->creator?->name, + 'cif' => $permohonan->debiture->cif, + 'name' => $permohonan->debiture?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name') + ->unique() + ->implode(', '), + 'alamat_agunan' => $permohonan->documents?->map(function ($document) { + return formatAlamat($document); + })->unique()->implode(', '), + 'bukti_kepemilikan' => (function () use ($permohonan) { + $legalitasItems = $permohonan->documents?->flatMap(function ($document) { + return $document->detail->map(function ($detail) { + // Jika tidak ada jenis legalitas jaminan, lewati + if (empty($detail->jenisLegalitasJaminan)) { + return null; + } + + // Hanya tampilkan detail yang memiliki dokumen_jaminan + if (empty($detail->dokumen_jaminan)) { + return null; + } + + // Tampilkan nama legalitas jaminan saja + return $detail->jenisLegalitasJaminan->name ?? ''; + }); + })->filter()->unique()->values()->toArray(); + + // Buat daftar bernomor + $result = ''; + foreach ($legalitasItems as $index => $item) { + $result .= ($index + 1) . '. ' . $item . "\n"; + } + + return $result; + })(), + 'nama_pemilik' => $permohonan->documents?->pluck('pemilik.name') + ->unique() + ->implode(', '), + 'luas_tanah' => $luas_tanah . ' m²', + 'nilai_tanah' => formatRupiah($nilai_tanah, 2), + 'luas_bangunan' => $luas_bangunan . ' m²', + 'nilai_bangunan' => formatRupiah($nilai_bangunan, 2), + 'nilai_njop' => formatRupiah($permohonan->nilai_njop, 2), + 'nilai_pasar_wajar' => formatRupiah($npw, 2), + 'nilai_likuidasi' => formatRupiah($nilai_liquidasi, 2), + 'tanggal_documen_diterima' => $permohonan->documents?->map(function ($document) { + return $document->created_at->format('d-m-Y'); + }), + 'tanggal_spk' => '', + 'nomor_spk' => '', + 'tanggal_rencana_kunjunagn' => '', + 'tanggal_kunjungan' => '', + 'taggal_delivered' => '', + 'jangka_waktu_sla' => '', + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, + 'nama_team_leader' => $permohonan->penilaian?->teams, + 'saran' => '', + 'catatan' => '', + + + 'tanggal_permohonan' => $permohonan->tanggal_permohonan, + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', + ]; + }); + + // 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, + ]); + } +} diff --git a/app/Services/LaporanMonitoringSoService.php b/app/Services/LaporanMonitoringSoService.php new file mode 100644 index 0000000..2eb619f --- /dev/null +++ b/app/Services/LaporanMonitoringSoService.php @@ -0,0 +1,228 @@ +roles->pluck('name')->contains('senior-officer')) { + $userTeam = TeamsUsers::with('team')->firstWhere('user_id', $user->id); + $regionId = $userTeam?->team->regions_id; + $teamId = $userTeam?->teams_id; + } + + + $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles']) + ->whereHas('team', function ($q) use ($regionId, $teamId) { + $q->when($regionId, fn ($q) => $q->where('regions_id', $regionId)) + ->when($teamId, fn ($q) => $q->where('id', $teamId)); + }) + ->where('user_id', '!=', $user->id) + ->whereHas('user.roles', fn ($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai'])) + ->get(); + + $teamId = is_array($teamId) ? $teamId : [$teamId]; + + $teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn( + 'id', + $teamId + )->get(); + + return [ + 'teamsActivity' => $teamsActivity, + 'teamPenilai' => $teamPenilai, + ]; + } + + + public function showDetailsPermohonan($request,$id) + { + $query = Penilaian::with([ + 'permohonan', + 'permohonan.debiture', + 'permohonan.tujuanPenilaian', + 'permohonan.debiture.documents.jenisJaminan', + 'userPenilai' => function ($query) use ($id) { + $query->where('user_id', $id); + }, + 'permohonan.penilai', + 'permohonan.approveEo', + 'permohonan.approveDd', + 'permohonan.approveSo', + + ]) + ->whereHas('userPenilai', function ($q) use ($id) { + $q->where('user_id', $id); + }) + ->whereHas('permohonan', function ($q) { + $q->whereIn('status', [ + 'assign', + 'survey-completed', + 'proses-laporan', + 'paparan', + 'proses-paparan', + 'revisi-laporan', + 'revisi-paparan', + 'survey', + 'proses-survey', + 'request-reschedule', + 'reschedule', + 'rejected-reschedule', + 'approved-reschedule', + 'revisi-survey', + 'revisi-pembayaran' + ]); + }); + + + + // Filter pencarian + 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('status', 'LIKE', "%$search%"); + }); + } + + // Sorting + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Hitung total records + $totalRecords = $query->count(); + + // Pagination + $size = $request->get('size', 10); + $page = $request->get('page', 1); + $offset = ($page - 1) * $size; + + // Ambil data dengan pagination + $data = $query->skip($offset)->take($size)->get(); + + $data = $data->map(function ($item) { + $jeniAsset = null; + $statusPembayaran = trim(strtolower($item->permohonan->status_bayar ?? '')); + $tujuanPenilaian = $item->permohonan->tujuanPenilaian->name ?? null; + $plafond = $item->permohonan->nilaiPlafond->name ?? null; + + $now = Carbon::now(); + $type_report = $item->permohonan->penilai->type ?? ""; + + $hari = $hariPaparan = 0; + + if ($type_report == "sederhana") { + $hari = 2; + $item->paparan = 'Tidak Ada'; + } else { + if ($plafond == '< 2M') { + $item->paparan = 'Tidak Ada'; + $hari = 3; + } elseif ($plafond == '2 M - 5 M') { + $hari = 3; + $hariPaparan = 2; + } else { + $hari = 5; + $hariPaparan = 3; + } + } + + if ($tujuanPenilaian == 'RAP') { + $hari = 2; + $hariPaparan = 2; + } + + + if ($item->permohonan && $item->permohonan->debiture) { + $jeniAsset = $item->permohonan->debiture->documents->first() ?? null; + } + + /*$hariTambahan = 0; + + if ($tujuanPenilaian == 'RAP') { + $hariTambahan = 2; + } else { + if ($statusPembayaran == 'sudah_bayar') { + $hariTambahan = 1; // H+1 untuk yang sudah bayar + } else { + $hariTambahan = 2; // H+2 untuk yang belum bayar + } + }*/ + + $tanggalMulai = $item->waktu_penilaian; + + if ($tanggalMulai) { + if (!$tanggalMulai instanceof Carbon) { + $tanggalMulai = Carbon::parse($tanggalMulai); + } + $hariKerjaBerikutnya = hitungHariKerja($tanggalMulai->toDateString(), $tanggalMulai->copy()->addDays(1)); + $hariKerjaBerikutnya = max($hariKerjaBerikutnya, 1); + $tanggalMulai = $tanggalMulai->copy()->addDays($hariKerjaBerikutnya); + + // Konversi string tanggal ke objek Carbon jika belum + if (!$tanggalMulai instanceof Carbon) { + $tanggalMulai = Carbon::parse($tanggalMulai); + } + + // Hitung tanggal selesai berdasarkan hari tambahan + $tanggalSelesai = $tanggalMulai->copy()->addDays($hari); + $tanggalPaparan = $tanggalMulai->copy()->addDays($hariPaparan); + + // Hitung hari kerja + $hariKerja = hitungHariKerja($tanggalMulai->toDateString(), $tanggalSelesai->toDateString()); + $hariKerja = max($hariKerja, $hari); + + $hariKerjaPaparan = hitungHariKerja($tanggalMulai->toDateString(), $tanggalPaparan->toDateString()); + $hariKerjaPaparan = max($hariKerjaPaparan, $hariPaparan); + + // Set due date SLA + $dueDateSla = $tanggalMulai->copy()->addDays($hariKerja); + $dueDateSlaPaparan = $tanggalMulai->copy()->addDays($hariKerjaPaparan); + + // Cek apakah sudah melewati due date + /*if ($now->greaterThan($dueDateSla)) { + $item->due_date_sla = null; + } else { + $item->due_date_sla = $dueDateSla->toDateString(); + }*/ + + $item->due_date_sla = $dueDateSla->toDateString(); + $item->paparan = $dueDateSlaPaparan->toDateString(); + } else { + $item->due_date_sla = null; + $item->paparan = null; + + } + + return $item; + }); + + $filteredRecords = $data->count(); + $pageCount = ceil($totalRecords / $size); + + // Return data dalam bentuk JSON + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $page, + 'totalCount' => $totalRecords, + 'data' => $data + ]); + } +} diff --git a/app/Services/LaporanSLAPenilaiService.php b/app/Services/LaporanSLAPenilaiService.php new file mode 100644 index 0000000..9010ceb --- /dev/null +++ b/app/Services/LaporanSLAPenilaiService.php @@ -0,0 +1,128 @@ +where('status', 'done'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('tanggal_permohonan', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + + if (isset($search->penilai_id) && !empty($search->penilai_id)) { + $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($search) { + $q->where('user_id', $search->penilai_id); + }); + } + + if (isset($search->search)) { + + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(['debiture.branch'])->get(); + + $data = $data->map(function ($permohonan) { + $luas_tanah = 0; + $luas_bangunan = 0; + $nilai_tanah = 0; + $nilai_bangunan = 0; + $npw = 0; + $nilai_liquidasi = 0; + if (isset($permohonan->penilai->lpj)) { + $lpj = json_decode($permohonan->penilai->lpj, true); + $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0); + + $luas_tanah = $lpj['luas_tanah'] ?? 0; + $luas_bangunan = $lpj['luas_bangunan'] ?? 0; + // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_' + $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0); + + $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0); + $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0); + } + + return [ + 'id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'tanggal_permohonan' => $permohonan->tanggal_permohonan, + 'branch' => $permohonan->debiture?->branch?->name, + 'name' => $permohonan->debiture?->name, + 'pemohon' => $permohonan->creator?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name')->unique()->implode(', '), + + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, + ]; + }); + + // 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, + ]); + } +} diff --git a/app/Services/LaporanUserService.php b/app/Services/LaporanUserService.php new file mode 100644 index 0000000..c53dd59 --- /dev/null +++ b/app/Services/LaporanUserService.php @@ -0,0 +1,198 @@ +whereNotNull('permohonan.nomor_registrasi') + ->when($search, function ($query) use ($search) { + $query->where('users.name', 'like', "%$search%"); + }) + ->select('users.id', 'users.name') + ->distinct() + ->orderBy('users.name') + ->limit(20) + ->get(); + } + + + public function dataForDatatables(Request $request) + { + + // Retrieve data from the database + $query = Permohonan::query(); + $query = $query->where('status', 'done'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('tanggal_permohonan', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + // Filter by branch if provided + if (isset($search->user_id) && !empty($search->user_id)) { + $query->where('user_id', $search->user_id); + } + + if (isset($search->search)) { + + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisFasilitasKredit', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(['debiture.branch'])->get(); + + $data = $data->map(function ($permohonan) { + $luas_tanah = 0; + $luas_bangunan = 0; + $nilai_tanah = 0; + $nilai_bangunan = 0; + $npw = 0; + $nilai_liquidasi = 0; + + if (isset($permohonan->penilai->lpj)) { + $lpj = json_decode($permohonan->penilai->lpj, true); + $npw = str_replace('.', '', $lpj['total_nilai_pasar_wajar'] ?? 0); + + $luas_tanah = $lpj['luas_tanah'] ?? 0; + $luas_bangunan = $lpj['luas_bangunan'] ?? 0; + // Calculate nilai_tanah dynamically by looking for all keys that start with 'nilai_tanah_' + $nilai_tanah = str_replace('.', '', $lpj['nilai_tanah_2'] ?? 0); + + $nilai_bangunan = str_replace('.', '', $lpj['nilai_bangunan_2'] ?? 0); + $nilai_liquidasi = str_replace('.', '', $lpj['likuidasi_nilai_2'] ?? 0); + } + + return [ + 'id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'jenis_penilaian' => $permohonan->jenisPenilaian?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_fasilitas_kredit' => $permohonan->jenisFasilitasKredit?->name, + 'branch' => $permohonan->debiture->branch?->name, + 'pemohon' => $permohonan->creator?->name, + 'cif' => $permohonan->debiture->cif, + 'name' => $permohonan->debiture?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name') + ->unique() + ->implode(', '), + 'alamat_agunan' => $permohonan->documents?->map(function ($document) { + return formatAlamat($document); + })->unique()->implode(', '), + 'bukti_kepemilikan' => (function () use ($permohonan) { + $legalitasItems = $permohonan->documents?->flatMap(function ($document) { + return $document->detail->map(function ($detail) { + // Jika tidak ada jenis legalitas jaminan, lewati + if (empty($detail->jenisLegalitasJaminan)) { + return null; + } + + // Hanya tampilkan detail yang memiliki dokumen_jaminan + if (empty($detail->dokumen_jaminan)) { + return null; + } + + // Tampilkan nama legalitas jaminan saja + return $detail->jenisLegalitasJaminan->name ?? ''; + }); + })->filter()->unique()->values()->toArray(); + + // Buat daftar bernomor + $result = ''; + foreach ($legalitasItems as $index => $item) { + $result .= ($index + 1) . '. ' . $item . "\n"; + } + + return $result; + })(), + 'nama_pemilik' => $permohonan->documents?->pluck('pemilik.name') + ->unique() + ->implode(', '), + 'luas_tanah' => $luas_tanah . ' m²', + 'nilai_tanah' => formatRupiah($nilai_tanah, 2), + 'luas_bangunan' => $luas_bangunan . ' m²', + 'nilai_bangunan' => formatRupiah($nilai_bangunan, 2), + 'nilai_njop' => formatRupiah($permohonan->nilai_njop, 2), + 'nilai_pasar_wajar' => formatRupiah($npw, 2), + 'nilai_likuidasi' => formatRupiah($nilai_liquidasi, 2), + 'tanggal_documen_diterima' => $permohonan->documents?->map(function ($document) { + return $document->created_at->format('d-m-Y'); + }), + 'tanggal_spk' => '', + 'nomor_spk' => '', + 'tanggal_rencana_kunjunagn' => '', + 'tanggal_kunjungan' => '', + 'taggal_delivered' => '', + 'jangka_waktu_sla' => '', + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, + 'nama_team_leader' => $permohonan->penilaian?->teams, + 'saran' => '', + 'catatan' => '', + + + 'tanggal_permohonan' => $permohonan->tanggal_permohonan, + 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', + ]; + }); + + // 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, + ]); + } +} diff --git a/app/Services/RekapHarianService.php b/app/Services/RekapHarianService.php new file mode 100644 index 0000000..de3924e --- /dev/null +++ b/app/Services/RekapHarianService.php @@ -0,0 +1,63 @@ + $jenis) { + + $totalLaporanDebiture = $this->totalLaporanDebiture(); + $totalKunjunganDebiture = $this->totalKunjunganDebiture(); + $totalKunjunganLokasi = $this->totalKunjunganLokasi(); + + + $grandTotal = [ + 'laporan_debiture' => 0, + 'debiture' => 0, + 'lokasi' => 0, + 'pipeline' => 0 + ]; + } + return $grandTotal; + + } + + + private function totalLaporanDebiture() + { + $query = [ + 'jenis_penilaian_id' => 1, + 'total' => 2 + ]; + return $query; + } + + public function totalKunjunganDebiture() + { + $query = [ + 'jenis_penilaian_id' => 1, + 'total' => 2 + ]; + return $query; + } + + public function totalKunjunganLokasi() + { + $query = [ + 'jenis_penilaian_id' => 1, + 'total' => 2 + ]; + return $query; + } +} diff --git a/module.json b/module.json index 7b1f5f6..fc81e7f 100644 --- a/module.json +++ b/module.json @@ -115,6 +115,122 @@ "EO Appraisal", "senior-officer" ] + }, + { + "title": "Rekap Harian So", + "path": "rekap-harian-so", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, { + "title": "Laporan Biaya Lpj", + "path": "laporan-biaya", + "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" + ], + "sub": [ + { + "title": "Intenal", + "path": "laporan-biaya.internal", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] + }, + { + "title": "External", + "path": "laporan-biaya.external", + "icon": "ki-filled ki-two-credit-cart text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] + } + ] + },{ + "title": "Laporan Debitur", + "path": "laporan-debiture", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Laporan User", + "path": "laporan-user", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Laporan Monitoring so", + "path": "laporan-monitoring", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "senior-officer" + ] + }, + { + "title": "Laporan SLA Penilai", + "path": "laporan-sla-penilai", + "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" + ] } ], "otorisator": [ diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php new file mode 100644 index 0000000..5b71ae7 --- /dev/null +++ b/resources/views/dashboard/index.blade.php @@ -0,0 +1,293 @@ +@extends('layouts.main') + +@section('content') +
+ +
+
+

+ Dashboard +

+
+ + Selamat datang, {{ auth()->user()->name }} +
+
+
+
+ + +
+ +
+
+ + +
+ + @foreach ($dashboard['count_resume'] as $status => $count) + @php + + $gradientFrom = $status === 'batal' ? 'from-red-50' : 'from-amber-50'; + $gradientTo = $status === 'batal' ? 'to-red-100' : 'to-amber-100'; + $borderColor = $status === 'batal' ? 'border-red-200' : 'border-amber-200'; + $iconBg = $status === 'batal' ? 'bg-red-500' : 'bg-amber-500'; + $iconColor = $status === 'batal' ? 'text-red-500' : 'text-amber-500'; + $textColor = $status === 'batal' ? 'text-red-800' : 'text-amber-800'; + $cardTitle = $status === 'batal' ? 'Batal dari Cabang' : 'Menunggu Keputusan Cabang'; + @endphp + +
+
+
+
+ +
+

{{ $cardTitle }}

+
+
+
+
+
+
+
+

Jabodetabek

+ + {{ $count['jabodetabek']['count_report'] ?? 0 }} + +
+
+ +
+
+
+
+
+
+

Luar Jabodetabek

+ + {{ $count['non-jabodetabek']['count_report'] ?? 0 }} + +
+
+ +
+
+
+
+
+
+ @endforeach + +
+ +
+
+
+
+
+ +
+

Pendapatan Appraisal

+
+ +
+
+
+
+ + + + + + + + + + @foreach ($dashboard['count_pendapatan'] as $month => $data) + + + + + + + + + + + @endforeach + + +
+ Bulan + + Jumlah + + Akumulasi +
+ {{ ucfirst($month) }} + + {{ $data['total_jumlah'] ?? '-' }} + + {{ $data['total_akumulasi'] ?? '-' }} +
+
+
+
+ + +
+ +
+
+
+
+ +
+

Laporan Internal

+
+
+
+
+ + + + + + + + + + + + + + + + @foreach ($dashboard['count_lpj_internal'] as $month => $regions) + + + + + + + + @endforeach + + +
+ Bulan + + Jabodetabek + + Luar Jabodetabek +
+ Laporan + + Debitur + + Laporan + + Debitur +
+ {{ ucfirst($month) }} + + {{ $regions['jabodetabek']['total_laporan'] ?? '-' }} + + {{ $regions['jabodetabek']['total_debiture'] ?? '-' }} + + {{ $regions['non-jabodetabek']['total_laporan'] ?? '-' }} + + {{ $regions['non-jabodetabek']['total_debiture'] ?? '-' }} +
+
+
+
+ + +
+
+
+
+ +
+

Laporan Eksternal

+
+
+
+
+ + + + + + + + + + @foreach ($dashboard['count_lpj_eksternal'] as $month => $data) + + + + + + + + + + + @endforeach + + +
+ Bulan + + Laporan + + Debitur +
+ {{ ucfirst($month) }} + + {{ $data['total_laporan'] ?? '-' }} + + {{ $data['total_debiture'] ?? '-' }} +
+
+
+
+
+
+ + + + + + + +@endsection diff --git a/resources/views/laporan-biaya/external.blade.php b/resources/views/laporan-biaya/external.blade.php new file mode 100644 index 0000000..bc59c17 --- /dev/null +++ b/resources/views/laporan-biaya/external.blade.php @@ -0,0 +1,499 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} +@endsection + +@section('content') +
+ +
+
+

Filter Laporan

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan Hasil Penilaian Jaminan Internal & External +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/laporan-biaya/internal.blade.php b/resources/views/laporan-biaya/internal.blade.php new file mode 100644 index 0000000..860f8cc --- /dev/null +++ b/resources/views/laporan-biaya/internal.blade.php @@ -0,0 +1,499 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-hasil-penilaian-jaminan-internal-external') }} +@endsection + +@section('content') +
S + +
+
+

Filter Laporan

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan Hasil Penilaian Jaminan Internal & External +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/laporan-debiture/index.blade.php b/resources/views/laporan-debiture/index.blade.php new file mode 100644 index 0000000..3b36763 --- /dev/null +++ b/resources/views/laporan-debiture/index.blade.php @@ -0,0 +1,480 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-debiture') }} +@endsection + +@section('content') +
+ +
+
+

Filter Laporan Debiture

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan Debiture +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/laporan-monitoring/index.blade.php b/resources/views/laporan-monitoring/index.blade.php new file mode 100644 index 0000000..95ad19e --- /dev/null +++ b/resources/views/laporan-monitoring/index.blade.php @@ -0,0 +1,89 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-monitoring') }} +@endsection + +@section('content') +
+ + + +
+
+

+ Rekap Progres Pengerjaan Laporan Penilai +

+
+ +
+
+ + + + + + + + + + + @php + $sortedTeamsActivity = $result['teamsActivity']->sortBy(function ($item) { + return $item->team->regions->penilaiTeam + ->filter(function ($penilaiTeam) { + $permohonan = optional($penilaiTeam->penilaian)->permohonan; + return $permohonan !== null; + }) + ->count(); + }); + @endphp + + @foreach ($sortedTeamsActivity as $teamActivity) + @php + $totalTask = countPermohonanForUser($teamActivity->user->id); + @endphp + + + + + + + + @endforeach + + + + +
+ + + Nama Penilai + + + Total Task + + + Aksi + +
+ + + {{ $teamActivity->user->name }} + + {{ $totalTask }} + + + + Lihat + +
+
+
+
+
+@endsection diff --git a/resources/views/laporan-monitoring/show.blade.php b/resources/views/laporan-monitoring/show.blade.php new file mode 100644 index 0000000..ca836b7 --- /dev/null +++ b/resources/views/laporan-monitoring/show.blade.php @@ -0,0 +1,211 @@ + @extends('layouts.main') + + @section('breadcrumbs') + {{ Breadcrumbs::render(request()->route()->getName()) }} + @endsection + + @section('content') +
+
+
+

+ Daftar Penilaian {{ $nama_penilai ?? '' }} +

+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Nama DebiturTujuan PenilaianStatus BayarJenis AssetPenugasanJenis ReportTgl RegisterTgl AssignTgl KunjunganProgressSLA LaporanSLA PaparanApproveKeteranganAction
+
+ +
+
+
+ @endsection + + @push('scripts') + + @endpush diff --git a/resources/views/laporan-sla-penilai/index.blade.php b/resources/views/laporan-sla-penilai/index.blade.php new file mode 100644 index 0000000..1515a15 --- /dev/null +++ b/resources/views/laporan-sla-penilai/index.blade.php @@ -0,0 +1,295 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-sla-penilai') }} +@endsection + +@section('content') +
+ +
+
+

Filter Laporan SLA Penilai

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan SLA Penilai +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Nama Penilai + + + Tanggal Permohonan + + + Cabang + + + Nama Debitur + + + Tujuan Penilaian + + + Penilaian + + + Tanggal Dokuemen + + + Tanggal Approval + + + Jangka Waktu + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/laporan-user/index.blade.php b/resources/views/laporan-user/index.blade.php new file mode 100644 index 0000000..5f2e629 --- /dev/null +++ b/resources/views/laporan-user/index.blade.php @@ -0,0 +1,518 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('laporan-user') }} +@endsection + +@section('content') +
+ +
+
+

Laporan User Pemohon

+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Export to Excel + +
+
+
+ + +
+
+

+ Laporan User Pemohon +

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+ +
+
+
+@endsection + +@push('scripts') + + + +@endpush diff --git a/resources/views/rekap-harian-so/index.blade.php b/resources/views/rekap-harian-so/index.blade.php new file mode 100644 index 0000000..2cc100e --- /dev/null +++ b/resources/views/rekap-harian-so/index.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{ Breadcrumbs::render('rekap-harian-so') }} +@endsection +@section('content') +
+
+
+

+ Rekap Harian {{ formatTanggalIndonesia(date('Y-m-d'), false, true) }} +

+
+
+
+ + + + + + + + + + + + + + + @foreach ($tujuan_penilaian as $jenis) + + + + + + + + @endforeach + + + + + + + + + + + + +
JenisLaporan (Debitur)KunjunganPipeline (Proses/Debitur)
DebiturLokasi
{{ $jenis->name }}{{ 0 }}{{ 0 }}{{ 0 }}{{ 0 }}
Lokasi
TOTAL{{ $totals['laporan_debitur'] ?? '' }}{{ $totals['kunjungan_debitur'] ?? '' }}{{ $totals['kunjungan_lokasi'] ?? '' }}{{ $totals['pipeline'] ?? '' }}
+
+
+
+
+@endsection diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index b10d65e..e890842 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -572,7 +572,7 @@ Breadcrumbs::for('otorisator.show', function (BreadcrumbTrail $trail, $id, $type Breadcrumbs::for('laporan', function (BreadcrumbTrail $trail) { - $trail->push('Laporan',''); + $trail->push('Laporan', ''); }); Breadcrumbs::for('laporan.sederhana.index', function (BreadcrumbTrail $trail) { @@ -731,11 +731,11 @@ Breadcrumbs::for('laporan-admin-kredit', function ($trail) { $trail->push('Laporan Admin Kredit', route('laporan-admin-kredit.index')); }); - // Laporan Admin Kredit Edit - Breadcrumbs::for('laporan-admin-kredit-edit', function (BreadcrumbTrail $trail, $laporanAdminKredit) { - $trail->parent('laporan-admin-kredit'); - $trail->push('Edit', route('laporan-admin-kredit.edit', $laporanAdminKredit->id)); - }); +// Laporan Admin Kredit Edit +Breadcrumbs::for('laporan-admin-kredit-edit', function (BreadcrumbTrail $trail, $laporanAdminKredit) { + $trail->parent('laporan-admin-kredit'); + $trail->push('Edit', route('laporan-admin-kredit.edit', $laporanAdminKredit->id)); +}); Breadcrumbs::for('bank-data', function ($trail) { $trail->push('Bank Data', route('bank-data.index')); @@ -746,20 +746,45 @@ Breadcrumbs::for('laporan-penilai-jaminan', function ($trail) { $trail->push('Laporan Penilai Jaminan', route('laporan-penilai-jaminan.index')); }); - Breadcrumbs::for('laporan-permohonan', function ($trail) { - $trail->parent('laporan'); - $trail->push('Laporan Permohnan', route('laporan-permohonan.index')); - }); +Breadcrumbs::for('laporan-permohonan', function ($trail) { + $trail->parent('laporan'); + $trail->push('Laporan Permohnan', route('laporan-permohonan.index')); +}); - Breadcrumbs::for('laporan-penilaian-jaminan', function ($trail) { - $trail->parent('laporan'); - $trail->push('Laporan Penilaian Jaminan', route('laporan-penilaian-jaminan.index')); - }); +Breadcrumbs::for('laporan-penilaian-jaminan', function ($trail) { + $trail->parent('laporan'); + $trail->push('Laporan Penilaian Jaminan', route('laporan-penilaian-jaminan.index')); +}); - Breadcrumbs::for('laporan-hasil-penilaian-jaminan-internal-external', function ($trail) { - $trail->parent('laporan'); - $trail->push('Laporan Hasil Penilaian Jaminan Internal External', route('laporan-hasil-penilaian-jaminan-internal-external.index')); - }); +Breadcrumbs::for('laporan-hasil-penilaian-jaminan-internal-external', function ($trail) { + $trail->parent('laporan'); + $trail->push('Laporan Hasil Penilaian Jaminan Internal External', route('laporan-hasil-penilaian-jaminan-internal-external.index')); +}); +Breadcrumbs::for('rekap-harian-so', function ($trail) { + $trail->push('Rekap Harian'); +}); + + +Breadcrumbs::for('laporan-user', function ($trail) { + $trail->push('Laporan User Pemohonan', route('laporan-user.index')); +}); + +Breadcrumbs::for('laporan-monitoring', function ($trail) { + $trail->push('Laporan Monitoring', route('laporan-monitoring.index')); +}); + +Breadcrumbs::for('laporan-monitoring.show', function ($trail) { + $trail->parent('laporan-monitoring'); + $trail->push('Detail'); +}); + +Breadcrumbs::for('laporan-debiture', function ($trail) { + $trail->push('Laporan Debiture', route('laporan-debiture.index')); +}); + +Breadcrumbs::for('laporan-sla-penilai', function ($trail) { + $trail->push('Laporan SLA Penilai', route('laporan-sla-penilai.index')); +}); // add andy require __DIR__ . '/breadcrumbs_registrasi.php'; diff --git a/routes/web.php b/routes/web.php index 14fd007..76e0df1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -22,11 +22,11 @@ use Modules\Lpj\Http\Controllers\LampiranDokumenController; use Modules\Lpj\Http\Controllers\LaporanAdminKreditController; use Modules\Lpj\Http\Controllers\LaporanController; use Modules\Lpj\Http\Controllers\LaporanExternalController; - use Modules\Lpj\Http\Controllers\LaporanHasilPenilaianJaminanInternalExternalController; - use Modules\Lpj\Http\Controllers\LaporanPembatalanController; - use Modules\Lpj\Http\Controllers\LaporanPenilaianJaminanController; - use Modules\Lpj\Http\Controllers\LaporanPermohonanController; - use Modules\Lpj\Http\Controllers\NilaiPlafondController; +use Modules\Lpj\Http\Controllers\LaporanHasilPenilaianJaminanInternalExternalController; +use Modules\Lpj\Http\Controllers\LaporanPembatalanController; +use Modules\Lpj\Http\Controllers\LaporanPenilaianJaminanController; +use Modules\Lpj\Http\Controllers\LaporanPermohonanController; +use Modules\Lpj\Http\Controllers\NilaiPlafondController; use Modules\Lpj\Http\Controllers\NocController; use Modules\Lpj\Http\Controllers\PembatalanController; use Modules\Lpj\Http\Controllers\PemilikJaminanController; @@ -44,6 +44,14 @@ use Modules\Lpj\Http\Controllers\TenderController; use Modules\Lpj\Http\Controllers\TujuanPenilaianController; use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController; use Modules\Lpj\Http\Controllers\LaporanPenilaiJaminanController; +use Modules\Lpj\Http\Controllers\RekapHarianSoController; +use Modules\Lpj\Http\Controllers\LaporanBiayaInternalExternalController; +use Modules\Lpj\Http\Controllers\LaporanMonitoringSoController; +use Modules\Lpj\Http\Controllers\LaporanDebitureController; +use Modules\Lpj\Http\Controllers\LaporanUserController; +use Modules\Lpj\Http\Controllers\LaporanSLAPenilaiController; + + // use Modules\Lpj\Http\Controllers\ActivityController; @@ -661,7 +669,7 @@ Route::middleware(['auth'])->group(function () { Route::get('noc/pembayaran', [NocController::class, 'pembayaran'])->name('noc.pembayaran.index'); Route::get('noc/penyelesaian', [NocController::class, 'penyelesaian'])->name('noc.penyelesaian.index'); - Route::post('noc/penyelesaian',[NocController::class, 'penyelesaian'])->name('noc.store.penyelesaian'); + Route::post('noc/penyelesaian', [NocController::class, 'penyelesaian'])->name('noc.store.penyelesaian'); Route::resource('noc', NocController::class); @@ -685,6 +693,7 @@ Route::middleware(['auth'])->group(function () { Route::put('{id}', [LaporanAdminKreditController::class,'update'])->name('update'); }); + Route::name('bank-data.')->prefix('bank-data')->group(function () { Route::get('datatables', [BankDataController::class, 'dataForDatatables'])->name('datatables'); }); @@ -697,7 +706,7 @@ Route::middleware(['auth'])->group(function () { Route::get('export', [LaporanPenilaiJaminanController::class, 'export'])->name('export'); }); - Route::prefix('laporan-permohonan')->name('laporan-permohonan.')->group(function() { + Route::prefix('laporan-permohonan')->name('laporan-permohonan.')->group(function () { Route::get('datatables', [LaporanPermohonanController::class, 'dataForDatatables'])->name('data'); Route::get('export', [LaporanPermohonanController::class, 'export'])->name('export'); Route::get('/', [LaporanPermohonanController::class, 'index'])->name('index'); @@ -710,18 +719,53 @@ Route::middleware(['auth'])->group(function () { Route::get('/export', [LaporanPembatalanController::class, 'export'])->name('export'); }); - Route::prefix('laporan-penilaian-jaminan')->name('laporan-penilaian-jaminan.')->group(function() { + Route::prefix('laporan-penilaian-jaminan')->name('laporan-penilaian-jaminan.')->group(function () { Route::get('datatables', [LaporanPenilaianJaminanController::class, 'dataForDatatables'])->name('data'); Route::get('export', [LaporanPenilaianJaminanController::class, 'export'])->name('export'); Route::get('/', [LaporanPenilaianJaminanController::class, 'index'])->name('index'); }); - Route::prefix('laporan-hasil-penilaian-jaminan-internal-external')->name('laporan-hasil-penilaian-jaminan-internal-external.')->group(function() { + Route::prefix('laporan-hasil-penilaian-jaminan-internal-external')->name('laporan-hasil-penilaian-jaminan-internal-external.')->group(function () { Route::get('datatables', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'dataForDatatables'])->name('data'); Route::get('export', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'export'])->name('export'); Route::get('/', [LaporanHasilPenilaianJaminanInternalExternalController::class, 'index'])->name('index'); }); + // rekap harian so + Route::resource('rekap-harian-so', RekapHarianSoController::class); + + // laporan biaya + Route::prefix('laporan-biaya')->name('laporan-biaya.')->group(function () { + Route::get('internal', [LaporanBiayaInternalExternalController::class, 'showLaporanBiayaInternal'])->name('internal.index'); + Route::get('external', [LaporanBiayaInternalExternalController::class, 'showLaporanBiayaExternal'])->name('external.index'); + }); + + // laporan user + Route::prefix('laporan-user')->name('laporan-user.')->group(function () { + Route::get('/', [LaporanUserController::class, 'index'])->name('index'); + Route::get('api/user-pemohon', [LaporanUserController::class, 'searchUserPemohon'])->name('api.user-pemohon'); + Route::get('datatables', [LaporanUserController::class, 'dataTableForUserPemohon'])->name('datatables'); + }); + + // laporan monitoring + Route::prefix('laporan-monitoring')->name('laporan-monitoring.')->group(function () { + Route::get('/', [LaporanMonitoringSoController::class, 'index'])->name('index'); + Route::get('/{id}/detail', [LaporanMonitoringSoController::class, 'show'])->name('show'); + Route::get('datatables/{id}', [LaporanMonitoringSoController::class, 'dataForDatatablePenilai'])->name('datatables'); + }); + + // laporan debiture + Route::prefix('laporan-debiture')->name('laporan-debiture.')->group(function () { + Route::get('/', [LaporanDebitureController::class, 'index'])->name('index'); + Route::get('datatables', [LaporanDebitureController::class, 'dataTableForDebiture'])->name('datatables'); + }); + + // laporan sla + Route::prefix('laporan-sla-penilai')->name('laporan-sla-penilai.')->group(function () { + Route::get('/', [LaporanSLAPenilaiController::class, 'index'])->name('index'); + Route::get('datatables', [LaporanSLAPenilaiController::class, 'dataForDatatableSLaPenilai'])->name('datatables'); + }); + }); require __DIR__ . '/registrasi.php';