feat(dashboard): add operational overview and charts

This commit is contained in:
Arya Dwi Putra
2025-12-19 00:21:25 +07:00
parent 36bf947ce7
commit 47580aeb54
4 changed files with 665 additions and 97 deletions

View File

@@ -2,66 +2,24 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Asset;
use App\Models\AssetStatus;
use App\Models\AssetLocation;
use App\Models\AssetMovement;
use App\Models\AssetDisposal;
use App\Models\AssetAudit;
use Carbon\Carbon;
use App\Services\Dashboard\DashboardService;
use Illuminate\View\View;
class DashboardsController extends Controller
{
public function index()
public function __construct(private readonly DashboardService $dashboard)
{
$now = Carbon::now();
$last30 = $now->copy()->subDays(30);
$totalAssets = Asset::count();
$movementCount = AssetMovement::where('created_at', '>=', $last30)->count();
$disposalCount = AssetDisposal::whereNull('reversed_at')->count();
$auditIssues = AssetAudit::whereIn('status', ['missing','damaged'])->count();
$byStatus = AssetStatus::orderBy('name')
->get()
->map(function ($status) {
return [
'label' => $status->name,
'value' => $status->assets()->count(),
];
});
$byLocation = AssetLocation::orderBy('name')
->get()
->map(function ($loc) {
return [
'label' => $loc->name,
'value' => $loc->assets()->count(),
];
})->filter(fn($row) => $row['value'] > 0)->values();
$recentAudits = AssetAudit::with('asset')
->latest()
->take(5)
->get();
$recentDisposals = AssetDisposal::with('asset')
->latest()
->take(5)
->get();
return view('pages.dashboards.index', compact(
'totalAssets',
'movementCount',
'disposalCount',
'auditIssues',
'byStatus',
'byLocation',
'recentAudits',
'recentDisposals'
));
}
public function index(): View
{
$user = auth()->user();
$data = $this->dashboard->build($user);
// Backward compatible variable names (dipakai view lama).
$data['movementCount'] = $data['movementCount30'] ?? 0;
$data['disposalCount'] = $data['activeDisposals'] ?? 0;
return view('pages.dashboards.index', $data);
}
}