@php use Carbon\Carbon; @endphp Visit Tracking Report

AMC Visit Tracking Report

Generated on {{ now()->format('d-m-Y H:i:s') }}

@if($filter)

Filter: {{ ucfirst(str_replace('_', ' ', $filter)) }}

@endif
@forelse($projects as $project) @php $visitSchedule = $project->visitSchedules ?? collect(); $upcomingVisits = $visitSchedule->filter(function ($schedule) { return $schedule->status !== 'done'; }); $visitDates = $upcomingVisits->map(function ($schedule) { return Carbon::parse($schedule->visit_date); })->filter()->sortBy(function ($visit) { return $visit->timestamp; }); $currentDate = Carbon::now(); $nextUpcomingVisit = $visitDates->filter(function ($visit) use ($currentDate) { return $visit->isAfter($currentDate); })->first(); $upcomingVisitDate = $nextUpcomingVisit ? $nextUpcomingVisit->toDateString() : 'N/A'; $endDate = Carbon::parse($project->date)->addDays(365)->toDateString(); $doneCount = $visitSchedule->where('status', 'done')->count(); $totalCount = $visitSchedule->count(); $overdueCount = $visitSchedule->where('status', '!=', 'done')->filter(function($s) { return Carbon::parse($s->visit_date)->isPast(); })->count(); if ($totalCount > 0 && $doneCount === $totalCount) { $statusClass = 'status-done'; $status = 'Done'; } elseif ($overdueCount > 0) { $statusClass = 'status-overdue'; $status = 'Overdue'; } else { $statusClass = 'status-upcoming'; $status = 'Upcoming'; } $company = $project->quotation && $project->quotation->company ? $project->quotation->company->name : 'N/A'; $contractValue = $project->quotation ? $project->quotation->amount : 0; @endphp @empty @endforelse
Start Date Company Contract Value Upcoming Visit End Date Status
{{ \Carbon\Carbon::parse($project->date)->format('d-m-Y') }} {{ $company }} {{ number_format($contractValue, 2) }} {{ $upcomingVisitDate }} {{ $endDate }} {{ $status }}
No records found for the selected filter