From 9da61e862a62ebb19de1cc846e8d4056d8f07977 Mon Sep 17 00:00:00 2001 From: Genex1s Date: Wed, 24 Dec 2025 17:09:46 +0700 Subject: [PATCH] Menambahkan dokumenLogs untuk modul adminKredit. Masih diperlukan fixing lebih lanjut agar adminKredit bisa mengakses menu tersebut melalui sidebar. AuditLogsController: Menambahkan function untuk datatables dan index baru dengan logic query yang berbeda dari datatable yang default new page: adminkredit.blade web: menambahkan rute baru untuk page audit trail dokumen ADK --- app/Http/Controllers/AuditLogsController.php | 98 ++++++ module.json | 12 + resources/views/adminkredit.blade.php | 351 +++++++++++++++++++ routes/web.php | 10 +- 4 files changed, 467 insertions(+), 4 deletions(-) create mode 100644 resources/views/adminkredit.blade.php diff --git a/app/Http/Controllers/AuditLogsController.php b/app/Http/Controllers/AuditLogsController.php index 176dfd1..648a321 100644 --- a/app/Http/Controllers/AuditLogsController.php +++ b/app/Http/Controllers/AuditLogsController.php @@ -36,7 +36,105 @@ return view('logs::audit'); } + + public function indexAdminKredit() + { + // Check if the authenticated user has the required permission to view audit logs + if (is_null($this->user) || !$this->user->can('audit-logs.read')) { + abort(403, 'Sorry! You are not allowed to view audit logs.'); + } + return view('logs::adminkredit'); + } + + public function datatableAdminKredit(Request $request) + { + // Check if the authenticated user has the required permission to view audit logs + if (is_null($this->user) || !$this->user->can('audit-logs.read')) { + abort(403, 'Sorry! You are not allowed to view audit logs.'); + } + + // Retrieve data from the database + $query = Activity::query() + ->where('log_name','ADK') + ->where('subject_type', 'LIKE', '%Dokumen%'); + + // 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('log_name', 'LIKE', "%$search%") + ->orWhere('description', 'LIKE', "%$search%") + ->orWhere('subject_id', 'LIKE', "%$search%") + ->orWhere('subject_type', 'LIKE', "%$search%") + ->orWhere('causer_id', 'LIKE', "%$search%") + ->orWhere('properties', '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); + } else { + // Default sorting by created_at descending + $query->orderBy('created_at', 'desc'); + } + + // Get the total count of records before pagination + $totalRecords = Activity::count(); + + // Get the filtered count before pagination + $filteredRecords = $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 data for the current page + $data = $query->get(); + + // Map causer_id to creator name + $data = $data->map(function ($item) { + // Create a new property for the creator's name + if ($item->causer_id && $item->causer_type === 'Modules\\Usermanagement\\Models\\User') { + // Try to find the user + $user = User::find($item->causer_id); + if ($user) { + $item->creator_name = $user->name; + } else { + $item->creator_name = 'Unknown User'; + } + } else { + $item->creator_name = 'System'; + } + + return $item; + }); + + // Calculate the page count + $pageCount = ceil($filteredRecords / ($request->get('size') ?: 1)); + + // 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' => $filteredRecords, + 'data' => $data, + ]); + } public function datatable(Request $request) { // Check if the authenticated user has the required permission to view audit logs diff --git a/module.json b/module.json index a8981e9..c968fbc 100644 --- a/module.json +++ b/module.json @@ -43,6 +43,18 @@ "roles": [ "administrator" ] + }, + + { + "title": "Dokumen ADK Logs", + "path": "logs.dokumen", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "adminkredit" + ] } ] } diff --git a/resources/views/adminkredit.blade.php b/resources/views/adminkredit.blade.php new file mode 100644 index 0000000..afa5f41 --- /dev/null +++ b/resources/views/adminkredit.blade.php @@ -0,0 +1,351 @@ +@extends('layouts.main') + +@section('breadcrumbs') +{{ Breadcrumbs::render('logs.audit') }} +@endsection + +@section('content') +
+
+
+

+ Audit Logs +

+
+
+ +
+
+
+
+
+ + + + + + + {{-- --}} + + + + + + +
+ Log Type + + + Subject Type + + + Tipe Dokumen + + + Properties + + + Perubahan + + + User Role + + + Username + + + Date/Time + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/routes/web.php b/routes/web.php index 6fecba5..73dbbbd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,11 +1,11 @@ prefix('logs')->group(function () { + Route::get('dokumen', [AuditLogsController::class, 'indexAdminKredit'])->name('dokumen.index'); Route::name('audit.')->prefix('audit')->group(function () { Route::get('datatables', [AuditLogsController::class, 'datatable'])->name('datatables'); + Route::get('datatablesAdminKredit', [AuditLogsController::class, 'datatableAdminKredit'])->name('datatablesAdminKredit'); }); Route::resource('audit', AuditLogsController::class)->only(['index', 'delete']);