This commit is contained in:
@@ -6,26 +6,108 @@ namespace App\Http\Controllers\Backend;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AuditTrail;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use App\Models\Admin; // Pastikan Model Admin diimport
|
||||
use App\Models\Region; // Pastikan Model Region diimport
|
||||
use App\Models\Cabang; // Pastikan Model Cabang diimport
|
||||
use App\Helpers\AuditTrailHelper;
|
||||
use Illuminate\Http\Request; // BARIS INI YANG WAJIB ADA
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Exports\AuditTrailExport;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class AuditTrailController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$pageInfo = [
|
||||
'title' => 'Audit Trails',
|
||||
'sub_title' => 'List of Audit Trails System',
|
||||
'path' => url()->current()
|
||||
];
|
||||
public function index(Request $request)
|
||||
{
|
||||
$pageInfo = [
|
||||
'title' => 'Audit Trails',
|
||||
'sub_title' => 'List of Audit Trails System',
|
||||
'path' => url()->current()
|
||||
];
|
||||
|
||||
return view(
|
||||
'backend.pages.audit_trail.index',
|
||||
[
|
||||
// sort by newest
|
||||
'data' => AuditTrail::with('user')->orderBy('created_at', 'desc')->get(),
|
||||
'pageInfo' => $pageInfo,
|
||||
]
|
||||
);
|
||||
$query = AuditTrail::with(['user.cabang.cabang.region']);
|
||||
|
||||
// Filter: User
|
||||
if ($request->filled('admin_id')) {
|
||||
$query->where('user_id', $request->admin_id);
|
||||
}
|
||||
|
||||
// Filter: Region & Cabang (Sesuai relasi hasOne UserHasCabang)
|
||||
if ($request->filled('region') || $request->filled('cabang')) {
|
||||
$query->whereHas('user.cabang.cabang', function($q) use ($request) {
|
||||
if ($request->filled('cabang')) {
|
||||
$q->where('id', $request->cabang);
|
||||
}
|
||||
if ($request->filled('region')) {
|
||||
$q->whereHas('region', function($rq) use ($request) {
|
||||
// PERBAIKAN: Gunakan 'code' sesuai image_63aac6.png
|
||||
$rq->where('code', $request->region);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Filter: Rentang Waktu
|
||||
if ($request->filled('start_date') && $request->filled('end_date')) {
|
||||
$query->whereBetween('created_at', [
|
||||
$request->start_date . ' 00:00:00',
|
||||
$request->end_date . ' 23:59:59'
|
||||
]);
|
||||
}
|
||||
|
||||
$data = $query->latest()->paginate(50)->appends($request->all());
|
||||
|
||||
return view('backend.pages.audit_trail.index', [
|
||||
'data' => $data,
|
||||
'pageInfo' => $pageInfo,
|
||||
'admins' => \App\Models\Admin::select('id', 'name')->orderBy('name')->get(),
|
||||
// PERBAIKAN: Select 'code' sesuai image_63aac6.png
|
||||
'regions' => \App\Models\Region::select('code', 'name')->get(),
|
||||
'cabangs' => \App\Models\Cabang::select('id', 'name')->orderBy('name')->get(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function exportExcel(Request $request)
|
||||
{
|
||||
AuditTrailHelper::AddAuditTrail('Export', 'Melakukan export data Audit Trail dengan filter tertentu');
|
||||
|
||||
// Mengirimkan parameter filter ke class Export
|
||||
return Excel::download(new AuditTrailExport($request->all()), 'Audit_Trail_' . date('Y-m-d') . '.xlsx');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Membersihkan semua data audit trail (Truncate)
|
||||
*/
|
||||
public function clearAll()
|
||||
{
|
||||
try {
|
||||
// Catat siapa yang menghapus log sebelum data dihapus
|
||||
AuditTrailHelper::AddAuditTrail('Delete', 'Membersihkan (Truncate) seluruh data Audit Trail');
|
||||
|
||||
// Menggunakan truncate untuk performa maksimal pada tabel besar
|
||||
DB::table('audit_trail')->truncate();
|
||||
|
||||
return redirect()->back()->with('success', 'All audit logs have been cleared.');
|
||||
} catch (\Exception $e) {
|
||||
return redirect()->back()->with('error', 'Failed to clear logs: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fungsi untuk membersihkan cache sistem
|
||||
*/
|
||||
public function clearCache()
|
||||
{
|
||||
try {
|
||||
Artisan::call('optimize:clear');
|
||||
AuditTrailHelper::AddAuditTrail('System', 'Membersihkan cache sistem (Optimize Clear)');
|
||||
|
||||
return redirect()->back()->with('success', 'System cache cleared successfully!');
|
||||
} catch (\Exception $e) {
|
||||
return redirect()->back()->with('error', 'Failed to clear cache: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user