feat: implement comprehensive dashboard controller and modular administrative and project management interfaces
Some checks failed
Tests / PHP 8.3 (push) Has been cancelled
Tests / PHP 8.4 (push) Has been cancelled
Tests / PHP 8.5 (push) Has been cancelled

This commit is contained in:
Ajjj
2026-08-03 18:28:52 +08:00
parent 42ba980f7a
commit 936ae1c6b2
48 changed files with 1832 additions and 385 deletions

View File

@@ -198,7 +198,17 @@ class TaskController extends Controller
: null;
}
if (array_key_exists('completion_percentage', $validated)) {
$pct = (float) $validated['completion_percentage'];
if ($pct >= 100) {
$validated['status'] = 'completed';
} elseif ($pct > 0 && $task->status === TaskStatus::Pending) {
$validated['status'] = 'in_progress';
}
}
$task->update($validated);
$this->updateProjectCompletion($project);
$task->users()->sync($userIds);
$addedUsers = array_diff($userIds, $oldUserIds);
@@ -244,6 +254,16 @@ class TaskController extends Controller
try {
$task->transitionTo($newStatus);
$completionPct = match ($newStatus->value) {
'completed', 'closed' => 100,
'in_progress' => 50,
default => 0,
};
$task->update([
'status' => $newStatus->value,
'completion_percentage' => $completionPct,
]);
if ($newStatus === TaskStatus::Completed) {
TaskCompleted::dispatch($task);
}
@@ -286,7 +306,17 @@ class TaskController extends Controller
}
}
$task->update(['sort_order' => $taskData['sort_order']]);
$completionPct = match ($taskData['status']) {
'completed', 'closed' => 100,
'in_progress' => 50,
default => 0,
};
$task->update([
'status' => $taskData['status'],
'sort_order' => $taskData['sort_order'],
'completion_percentage' => $completionPct,
]);
}
}
@@ -294,7 +324,7 @@ class TaskController extends Controller
$this->updateProjectCompletion($project);
}
return back()->with('success', 'Tasks reordered successfully.');
return back()->with('success', 'Tasks updated successfully.');
}
private function updateProjectCompletion(Project $project): void