From ecc950f19dbaeb13fee9e50ebda174e2d0bcddc9 Mon Sep 17 00:00:00 2001 From: Jokoprasetio Date: Fri, 30 Jan 2026 01:06:11 +0700 Subject: [PATCH] progress --- app/Http/Controllers/DashboardController.php | 46 ++++- .../Controllers/LogActivityController.php | 79 +++++++-- app/Models/FileDirectory.php | 8 + resources/views/logActivity/index.blade.php | 160 ++++++++++++++++-- routes/web.php | 1 + 5 files changed, 252 insertions(+), 42 deletions(-) diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 7dadd27..81da6d0 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -967,12 +967,30 @@ class DashboardController extends Controller $keyword = request('keyword'); $start = request('start_date'); $end = request('end_date'); - $authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray(); + // $authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray(); + + // $query = FileDirectory::where('statusenabled', true)->where(function($q){ + // $q->where('status_action', '!=', 'approved') + // ->orWhereNull('status_action'); + // })->whereIn('id_unit_kerja', $authUnit)->orderBy('entry_at','desc'); + $mapping = MappingUnitKerjaPegawai::where('statusenabled', true) + // ->where('objectatasanlangsungfk', auth()->user()->dataUser->id) + ->where('objectatasanlangsungfk', 22924) + ->get(['objectpegawaifk']); + $objectpegawaifk = $mapping->pluck('objectpegawaifk') + ->values() + ->all(); + $keyword = request('keyword'); + $query = FileDirectory::where('statusenabled', true) + ->where('status_action', '!=', 'approved') + ->whereIn('pegawai_id_entry', $objectpegawaifk) + ->when($keyword, function ($q) use ($keyword) { + $q->where(function ($sub) use ($keyword) { + $sub->where('file', 'ILIKE', "%{$keyword}%") + ->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%"); + }); + }); - $query = FileDirectory::where('statusenabled', true)->where(function($q){ - $q->where('status_action', '!=', 'approved') - ->orWhereNull('status_action'); - })->whereIn('id_unit_kerja', $authUnit)->orderBy('entry_at','desc'); if($keyword){ $query->where(function($q) use ($keyword){ $q->where('file', 'ILIKE', "%{$keyword}%") @@ -1114,10 +1132,20 @@ class DashboardController extends Controller public function countDataPending(){ try { - $query = FileDirectory::where('statusenabled', true) - ->whereNull('status_action'); - $authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray(); - $count= $query->whereIn('id_unit_kerja', $authUnit)->count(); + $mapping = MappingUnitKerjaPegawai::where('statusenabled', true) + // ->where('objectatasanlangsungfk', auth()->user()->dataUser->id) + ->where('objectatasanlangsungfk', 22924) + ->get(['objectpegawaifk']); + $objectpegawaifk = $mapping->pluck('objectpegawaifk') + ->values() + ->all(); + $count = FileDirectory::where('statusenabled', true)->whereIn('pegawai_id_entry', $objectpegawaifk) + ->where(function($q){ + $q->whereNotIn('status_action', ['approved', 'rejected'])->orWhereNull('status_action'); + })->count(); + // $authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray(); + // $count= $query->whereIn('id_unit_kerja', $authUnit)->count(); + // $count = $query-> return response()->json([ 'status' => true, 'count' => $count, diff --git a/app/Http/Controllers/LogActivityController.php b/app/Http/Controllers/LogActivityController.php index fe3703f..f7a2a14 100644 --- a/app/Http/Controllers/LogActivityController.php +++ b/app/Http/Controllers/LogActivityController.php @@ -3,7 +3,10 @@ namespace App\Http\Controllers; use App\Models\LogActivity; +use App\Models\MappingUnitKerjaPegawai; +use App\Models\FileDirectory; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class LogActivityController extends Controller { @@ -19,20 +22,25 @@ class LogActivityController extends Controller $keyword = request('keyword'); $start = request('start_date'); $end = request('end_date'); + $mapping = MappingUnitKerjaPegawai::where('statusenabled', true) + ->where('objectpegawaifk', auth()->user()->dataUser->id) + ->get(['objectunitkerjapegawaifk', 'objectsubunitkerjapegawaifk']); + $unitIds = $mapping->pluck('objectunitkerjapegawaifk') + ->filter() // buang null + ->unique() + ->values() + ->all(); + $query = FileDirectory::withCount(['viewLogs as total_views' => function($q){ + $q->select(DB::raw('COUNT(DISTINCT pegawai_id_entry)')); + }]) + ->where('statusenabled', true) + ->where('status_action', 'approved') + ->whereIn('id_unit_kerja', $unitIds) + ->orderBy('entry_at','desc'); - $query = LogActivity::query() - ->orderBy('entry_at','desc'); - if(auth()->user()->masterPersetujuan){ - $authUnit = auth()->user()->masterPersetujuan->details->pluck('unit_pegawai_id')->unique()->toArray(); - $query = $query->whereIn('id_unit_kerja', $authUnit); - }else{ - $query = $query->where('pegawai_id_entry', auth()->user()->objectpegawaifk); - } if($keyword){ $query->where(function($q) use ($keyword){ - $q->where('pegawai_nama_entry', 'ILIKE', "%{$keyword}%") - ->orWhere('action_type', 'ILIKE', "%{$keyword}%") - ->orWhere('file', 'ILIKE', "%{$keyword}%") + $q->where('file', 'ILIKE', "%{$keyword}%") ->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%"); }); } @@ -46,13 +54,16 @@ class LogActivityController extends Controller $paginated = $query->paginate($perPage); $data = $paginated->getCollection()->map(function($item){ + $parts = array_values(array_filter(explode('/', $item->file))); return [ - 'pegawai_nama_entry' => $item->pegawai_nama_entry, - 'action_type' => $item->action_type, - 'file' => $item->file, - 'no_dokumen' => $item->no_dokumen ?? $item->fileDirectory->no_dokumen ?? '-', + 'id' => $item->file_directory_id, + 'file' => end($parts), + 'no_dokumen' => $item->no_dokumen ?? '-', + 'unit' => $parts[0], + 'sub_unit' => $parts[1], + 'kategori' => $parts[2], 'entry_at' => $item->entry_at, - 'unit_name' => $item->unit_name ?? '-', + 'total_views' => $item->total_views ?? 0, ]; }); @@ -69,4 +80,40 @@ class LogActivityController extends Controller ] ]); } + + public function detailByFile($fileDirectoryId) + { + $perPage = max(1, (int) request('per_page', 10)); + $keyword = request('keyword'); + + $query = LogActivity::select( + 'pegawai_id_entry', + 'pegawai_nama_entry', + DB::raw('COUNT(*) as total_open'), + DB::raw('MAX(entry_at) as last_open') + ) + ->where('file_directory_id', $fileDirectoryId) + ->where('statusenabled', true) + ->where('action_type', 'Membuka Dokumen') + ->groupBy('pegawai_id_entry', 'pegawai_nama_entry') + ->orderByDesc('total_open'); + + if($keyword){ + $query->havingRaw('pegawai_nama_entry ILIKE ?', ["%{$keyword}%"]); + } + + $paginated = $query->paginate($perPage); + $logs = $paginated->items(); + + return response()->json([ + 'status' => true, + 'data' => $logs, + 'pagination' => [ + 'current_page' => $paginated->currentPage(), + 'last_page' => $paginated->lastPage(), + 'per_page' => $paginated->perPage(), + 'total' => $paginated->total(), + ] + ]); + } } diff --git a/app/Models/FileDirectory.php b/app/Models/FileDirectory.php index a75dcbe..0ae403f 100644 --- a/app/Models/FileDirectory.php +++ b/app/Models/FileDirectory.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use App\Models\LogActivity; class FileDirectory extends Model { @@ -12,4 +13,11 @@ class FileDirectory extends Model protected $primaryKey = 'file_directory_id'; protected $guarded = ['file_directory_id']; + public function viewLogs() + { + return $this->hasMany(LogActivity::class, 'file_directory_id', 'file_directory_id') + ->where('statusenabled', true) + ->where('action_type', 'Membuka Dokumen'); + } + } diff --git a/resources/views/logActivity/index.blade.php b/resources/views/logActivity/index.blade.php index e38c0bf..1de69c0 100644 --- a/resources/views/logActivity/index.blade.php +++ b/resources/views/logActivity/index.blade.php @@ -40,18 +40,19 @@
-
+
- - - - + + + + + - +
NamaUnitAktivitas No DokumenTanggalFileKategoriUnitSub UnitJumlah Pegawai Melihat
@@ -67,7 +68,7 @@ + + + diff --git a/routes/web.php b/routes/web.php index 2ff40e6..6187196 100644 --- a/routes/web.php +++ b/routes/web.php @@ -44,6 +44,7 @@ Route::middleware(['auth'])->group(function(){ Route::get('/log-activity', [LogActivityController::class, 'index']); Route::get('/datatable/log-activity', [LogActivityController::class, 'datatable']); + Route::get('/datatable/log-activity/{fileDirectoryId}', [LogActivityController::class, 'detailByFile']); Route::get('/recap', [DashboardController::class, 'recapView']); Route::get('/data/recap', [DashboardController::class, 'recapData']);