@php $statusClasses = [ 'on_track' => 'bg-emerald-100 text-emerald-800', 'at_risk' => 'bg-amber-100 text-amber-800', 'delayed' => 'bg-rose-100 text-rose-800', 'completed' => 'bg-sky-100 text-sky-800', ]; $stageDotClasses = [ 'drawing' => 'bg-indigo-500', 'material' => 'bg-amber-500', 'production' => 'bg-fuchsia-500', 'ready_to_dispatch' => 'bg-cyan-500', 'delivery' => 'bg-orange-500', 'installation' => 'bg-violet-500', 'completed' => 'bg-emerald-500', ]; $stageBgClasses = [ 'drawing' => 'bg-indigo-50', 'material' => 'bg-amber-50', 'production' => 'bg-fuchsia-50', 'ready_to_dispatch' => 'bg-cyan-50', 'delivery' => 'bg-orange-50', 'installation' => 'bg-violet-50', 'completed' => 'bg-emerald-50', ]; $projectsWithDates = $projects->filter(fn ($project) => $project->start_date && $project->end_date); $ganttStart = $projectsWithDates->min('start_date')?->copy() ?? now()->startOfMonth(); $ganttEnd = $projectsWithDates->max('end_date')?->copy() ?? now()->endOfMonth(); if ($ganttStart->equalTo($ganttEnd)) { $ganttEnd = $ganttEnd->copy()->addDays(6); } $ganttDays = $ganttStart->diffInDays($ganttEnd) + 1; $ganttDates = collect(range(0, $ganttDays - 1))->map(fn ($offset) => $ganttStart->copy()->addDays($offset)); $defaultFolderStage = collect(array_keys($projectStages ?? [])) ->first(fn ($stageKey) => $projectsByStage->get($stageKey, collect())->isNotEmpty()) ?? array_key_first($projectStages); @endphp

Operations

{{ __('Project Management') }}

Kanban, folder, and gantt views in one place.

Total

{{ $projectSummary['total'] }}

Done

{{ $projectSummary['completed'] }}

Delayed

{{ $projectSummary['delayed'] }}

+ New Project
Kanban
Folder
Gantt
@foreach($projectStages as $stageKey => $stageLabel)

{{ $stageLabel }} {{ $projectsByStage->get($stageKey, collect())->count() }}

@foreach($projectsByStage->get($stageKey, collect()) as $project) @php $latestDrawing = $project->drawings->sortByDesc('created_at')->first(); @endphp

{{ $project->name }}

@csrf @method('DELETE')

{{ $project->client_name ?: 'No client' }}

{{ $project->reference_no }} {{ $project->created_at->diffForHumans() }}
{{ $project->completion_percentage }}% complete {{ $project->end_date?->format('d M Y') ?? 'No deadline' }}
@if($stageKey === 'delivery') @php $deliveryStatus = $project->latest_challan_status ?: 'created'; $deliveryStatusClasses = match ($deliveryStatus) { 'ongoing' => 'bg-amber-100 text-amber-800', 'delivered' => 'bg-emerald-100 text-emerald-800', default => 'bg-slate-100 text-slate-700', }; @endphp
{{ str($deliveryStatus)->headline() }}
@endif @if($project->manager)
{{ substr($project->manager->name, 0, 1) }}
{{ $project->manager->name }} {{ $statusOptions[$project->status] ?? str($project->status)->headline() }}
@endif
@endforeach
@endforeach
@push('scripts') @endpush