feat: implement executive dashboard with financial analytics, blocker tracking, and resolution management systems

This commit is contained in:
Ajjj
2026-08-04 11:50:16 +08:00
parent 142695f935
commit a2ea56efa9
9 changed files with 967 additions and 269 deletions

View File

@@ -113,6 +113,7 @@ class DashboardController extends Controller
foreach ($delayQuery->get() as $delay) {
$projName = $delay->task->project->name ?? 'Unknown Project';
$projUlid = $delay->task->project->ulid ?? null;
$urgency = ($delay->lost_hours >= 8) ? 'critical' : 'high';
// Map reason_type to RFI / Material / Safety / Equipment / Regulatory
@@ -127,6 +128,8 @@ class DashboardController extends Controller
$blockersList[] = [
'id' => 'delay_' . $delay->id,
'project_ulid' => $projUlid,
'task_ulid' => $delay->task->ulid ?? null,
'type' => $type,
'title' => sprintf('[%s] %s: %s', $projName, $delay->task->name, $delay->notes ?? 'Delay recorded'),
'urgency' => $urgency,
@@ -146,23 +149,28 @@ class DashboardController extends Controller
foreach ($issueQuery->get() as $issue) {
$projName = $issue->dailyReport->project->name ?? 'Unknown Project';
$urgency = str_contains(strtolower($issue->delay_impact ?? ''), 'critical') ? 'critical' : 'high';
// Map issue_type
$type = match (strtolower($issue->issue_type ?? '')) {
'material', 'supply' => 'Material',
'labor', 'manpower' => 'Labor',
'equipment' => 'Equipment',
$projUlid = $issue->dailyReport->project->ulid ?? null;
$severity = strtolower($issue->severity ?? 'medium');
$urgency = in_array($severity, ['high', 'critical']) ? 'critical' : 'high';
$type = match (strtolower($issue->category ?? '')) {
'safety' => 'Safety',
default => 'RFI',
'rfi' => 'RFI',
'material' => 'Material',
'equipment' => 'Equipment',
default => 'Safety',
};
$blockersList[] = [
'id' => 'issue_' . $issue->id,
'project_ulid' => $projUlid,
'daily_report_id' => $issue->daily_report_id,
'type' => $type,
'title' => sprintf('[%s] %s', $projName, $issue->description),
'title' => sprintf('[%s] %s', $projName, $issue->description ?? $issue->issue_description ?? 'Site Issue reported'),
'urgency' => $urgency,
'date' => $issue->dailyReport->report_date?->format('Y-m-d') ?? now()->format('Y-m-d'),
'status' => $issue->status ?? 'open',
'supervisor_name' => $issue->supervisor_name,
'date' => $issue->created_at?->format('Y-m-d') ?? now()->format('Y-m-d'),
];
}