{{ session('company_name') ?? 'Security Company' }}
Patroller Duty Report
Duty #{{ $schedule->duty_number }} | Generated: {{ now()->format('F d, Y \a\t h:i A') }}
Duty Number {{ $schedule->duty_number }} Route {{ $schedule->route->name ?? 'N/A' }}
Scheduled Date {{ $schedule->scheduled_date->format('F d, Y') }} Status {{ ucfirst(str_replace('_', ' ', $schedule->job_status)) }}
Scheduled In {{ $schedule->from_time->format('M d, Y h:i A') }} Scheduled Out {{ $schedule->to_time->format('M d, Y h:i A') }}
Actual In @if($schedule->job_started_at) {{ \Carbon\Carbon::parse($schedule->job_started_at)->format('M d, Y h:i A') }} @else Not started @endif Actual Out @if($schedule->job_ended_at) {{ \Carbon\Carbon::parse($schedule->job_ended_at)->format('M d, Y h:i A') }} @else Not ended @endif
Customer Ref {{ $schedule->customer_reference ?? 'N/A' }} Comments {{ $schedule->comments ?? 'N/A' }}
Assigned Staff @if($schedule->employees->count() > 0) @foreach($schedule->employees as $emp) {{ $emp->user->name ?? ($emp->first_name . ' ' . $emp->last_name) }}@if(!$loop->last), @endif @endforeach @else Unassigned @endif
Site Visit Timeline {{ $schedule->jobSites->whereNotNull('checked_in_at')->count() }} / {{ $schedule->jobSites->count() }} Visited
@if($schedule->jobSites->count() > 0)
@foreach($schedule->jobSites as $jobSite)
{{ $jobSite->site->name ?? 'Unknown Site' }}
@if($jobSite->checked_in_at)
Check-In: {{ \Carbon\Carbon::parse($jobSite->checked_in_at)->format('M d, Y h:i A') }}
@endif @if($jobSite->checked_out_at)
Check-Out: {{ \Carbon\Carbon::parse($jobSite->checked_out_at)->format('M d, Y h:i A') }}
@if($jobSite->checked_in_at)
⏱ Duration: {{ number_format(\Carbon\Carbon::parse($jobSite->checked_in_at)->floatDiffInMinutes($jobSite->checked_out_at), 0) }} minutes
@endif @else
Not checked out
@endif
@endforeach
@else
No site visits recorded for this duty.
@endif
Issue Tickets {{ $schedule->issueTickets->count() }} Total
@if($schedule->issueTickets->count() > 0) @foreach($schedule->issueTickets as $ticket)
Ticket #{{ $ticket->ticket_number }} {{ $ticket->status === 'good' ? '✓ GOOD' : '⚠ BAD' }}
Site: {{ $ticket->site->name ?? 'N/A' }}
Reported: {{ $ticket->created_at->format('F d, Y \a\t h:i A') }}
Reported By: {{ $ticket->employee->user->name ?? ($ticket->employee->first_name . ' ' . $ticket->employee->last_name) ?? 'Unknown' }}
Description:
{{ $ticket->description ?? 'No description provided' }}
@if($ticket->images && count($ticket->images) > 0) @endif
@endforeach @else
No tickets reported during this duty.
@endif
{{ $schedule->jobSites->count() }} Total Sites {{ $schedule->jobSites->whereNotNull('checked_in_at')->count() }} Sites Visited {{ $schedule->issueTickets->count() }} Tickets Issued @if($schedule->job_started_at && $schedule->job_ended_at) {{ number_format(\Carbon\Carbon::parse($schedule->job_started_at)->floatDiffInMinutes($schedule->job_ended_at) / 60, 1) }}h @else - @endif Total Duration