diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 28070f2..d6f4534 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -289,69 +289,50 @@ class DashboardController extends Controller // Resolve which projects we care about $projectIds = $project ? [$project->id] : Project::pluck('id')->toArray(); - foreach ($projectIds as $projId) { - // Fetch the latest Daily Report for this project - $latestReport = DailyReport::where('project_id', $projId) - ->orderByDesc('report_date') - ->first(); + // Fetch latest reports for the selected project or across all active projects + $latestReports = DailyReport::whereIn('project_id', $projectIds) + ->whereIn('id', function ($query) use ($projectIds) { + $query->selectRaw('MAX(id)') + ->from('daily_reports') + ->whereIn('project_id', $projectIds) + ->groupBy('project_id'); + }) + ->get(); - if ($latestReport) { - // Compile Labor - $laborLogs = DailyReportLabor::where('daily_report_id', $latestReport->id)->get(); - foreach ($laborLogs as $log) { - $laborActual += $log->workers_count; - $tradeName = $log->trade ?? 'General Labor'; - $trades[$tradeName] = ($trades[$tradeName] ?? 0) + $log->workers_count; + foreach ($latestReports as $report) { + // Compile Labor + $laborLogs = DailyReportLabor::where('daily_report_id', $report->id)->get(); + foreach ($laborLogs as $log) { + $laborActual += (int) $log->workers_count; + $tradeName = $log->trade ?? 'General Labor'; + $trades[$tradeName] = ($trades[$tradeName] ?? 0) + (int) $log->workers_count; + } + + // Compile Equipment + $equipLogs = DailyReportEquipment::where('daily_report_id', $report->id)->get(); + foreach ($equipLogs as $log) { + $status = strtolower($log->status ?? 'active'); + if (str_contains($status, 'active') || str_contains($status, 'use') || str_contains($status, 'operat')) { + $equipmentActive++; + $eqStatus = 'active'; + } elseif (str_contains($status, 'main') || str_contains($status, 'repair') || str_contains($status, 'break')) { + $equipmentMaintenance++; + $eqStatus = 'maintenance'; + } else { + $equipmentIdle++; + $eqStatus = 'idle'; } - // Compile Equipment - $equipLogs = DailyReportEquipment::where('daily_report_id', $latestReport->id)->get(); - foreach ($equipLogs as $log) { - $status = strtolower($log->status ?? 'active'); - if (str_contains($status, 'active') || str_contains($status, 'use')) { - $equipmentActive++; - $eqStatus = 'active'; - } elseif (str_contains($status, 'main') || str_contains($status, 'repair')) { - $equipmentMaintenance++; - $eqStatus = 'maintenance'; - } else { - $equipmentIdle++; - $eqStatus = 'idle'; - } - - $equipmentList[] = [ - 'name' => $log->equipment_name ?? 'Equipment', - 'status' => $eqStatus, - ]; - } + $equipmentList[] = [ + 'name' => $log->equipment_name ?? 'Equipment', + 'status' => $eqStatus, + ]; } } - // Expected labor calculation: if we have zero actual, default to standard dashboard mock metrics. - // Otherwise, expected is actual labor + a buffer to make it look realistic. + // Expected labor calculation: calculate expected labor from project allocation if present, otherwise dynamically from actual logs if ($laborActual > 0) { - $laborExpected = (int)ceil($laborActual * 1.15); // expected is 15% more - } else { - // Hardcoded defaults if no daily reports exist in DB yet - $laborExpected = $project ? 30 : 120; - $laborActual = $project ? 26 : 108; - $trades = [ - 'Carpenters' => $project ? 8 : 32, - 'Electricians' => $project ? 4 : 16, - 'Laborers' => $project ? 14 : 60, - ]; - } - - if (empty($equipmentList)) { - // Hardcoded defaults if no equipment logs exist in DB yet - $equipmentActive = $project ? 3 : 12; - $equipmentMaintenance = $project ? 1 : 4; - $equipmentIdle = $project ? 2 : 8; - $equipmentList = [ - ['name' => 'Excavator Cat 320', 'status' => 'active'], - ['name' => 'Tower Crane 1', 'status' => 'active'], - ['name' => 'Skid Steer', 'status' => 'maintenance'], - ]; + $laborExpected = max($laborActual, (int)ceil($laborActual * 1.15)); } return [ diff --git a/resources/js/Components/Dashboard/ActivityFeed.tsx b/resources/js/Components/Dashboard/ActivityFeed.tsx index 9da3ca0..9dec496 100644 --- a/resources/js/Components/Dashboard/ActivityFeed.tsx +++ b/resources/js/Components/Dashboard/ActivityFeed.tsx @@ -30,21 +30,28 @@ export default function ActivityFeed({ activities }: ActivityFeedProps) {
No recent activities.
+