@php
use Carbon\Carbon;
@endphp
Visit Tracking Report
| Start Date |
Company |
Contract Value |
Upcoming Visit |
End Date |
Status |
@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
| {{ \Carbon\Carbon::parse($project->date)->format('d-m-Y') }} |
{{ $company }} |
{{ number_format($contractValue, 2) }} |
{{ $upcomingVisitDate }} |
{{ $endDate }} |
{{ $status }} |
@empty
| No records found for the selected filter |
@endforelse