{{-- filepath: resources/views/project_list/gantt.blade.php --}} @extends('layouts.app') @section('page-pretitle', __('Management')) @section('page-title', __('Project Gantt Chart')) @section('content') {{-- Flash Messages --}} @if ($errors->any()) @endif @if (session('success')) @endif

Back

{{ strtoupper($project->ref_no ?? '-')}}

{{ $project->description }}
{{-- Milestone List --}}

Milestones

@if (auth()->user()->role == 'admin') @endif
@php $milestones = \App\Models\Milestone::where('project_id', $project->id)->orderBy('milestone_date')->get(); @endphp @if($milestones->isEmpty())
No milestones yet.
@else
@foreach($milestones as $milestone)
{{ $milestone->title }} {{ $milestone->milestone_date->format('d M Y') }} @if (auth()->user()->role == 'admin') @endif
@endforeach
@endif
@endsection @section('script') @php $usersArr = $users ?? \App\Models\User::all(); $usersMap = $usersArr->pluck('name', 'id'); $tasksMap = $tasks->pluck('name', 'id'); $ganttTasks = $tasks->map(function($task) use ($usersMap, $tasksMap) { return [ 'id' => $task->id, 'text' => $task->name, 'start_date' => optional($task->start_date)->format('Y-m-d') ?? now()->format('Y-m-d'), 'end_date' => optional($task->due_date)->format('Y-m-d') ?? now()->format('Y-m-d'), 'status' => $task->status->name ?? '-', 'overdue' => ($task->due_date && $task->due_date < now()), 'assigned_to' => $usersMap[$task->user_id] ?? '-', 'priority' => $task->priority ? 'Priority' : 'Not Priority', 'created_at' => optional($task->created_at)->format('Y-m-d H:i'), 'parent_task_id' => $task->parent_task_id, 'remarks' => $task->remarks ?? '-', ]; })->values(); $ganttLinks = $tasks->filter(fn($task) => $task->parent_task_id)->map(function($task) { return [ 'id' => 'link-' . $task->id, 'source' => $task->parent_task_id, 'target' => $task->id, 'type' => 0 ]; })->values(); $milestoneDates = \App\Models\Milestone::where('project_id', $project->id) ->pluck('milestone_date') ->map(fn($d) => \Carbon\Carbon::parse($d)->format('Y-m-d')) ->toArray(); $milestoneTasks = \App\Models\Milestone::where('project_id', $project->id) ->orderBy('milestone_date') ->get() ->map(function($milestone) { return [ 'id' => 'milestone-' . $milestone->id, 'text' => $milestone->title, // Show milestone title 'start_date' => optional($milestone->milestone_date)->format('Y-m-d'), 'end_date' => optional($milestone->milestone_date)->format('Y-m-d'), 'type' => 'milestone', 'status' => 'Milestone', 'color' => '#0dcaf0', 'readonly' => true, ]; }); @endphp @endsection