Phase 6 and 7 scope contact safeguards

This commit is contained in:
Codex
2026-07-10 14:14:23 -05:00
parent 6ce2b294d0
commit 5009269907
27 changed files with 1158 additions and 60 deletions
@@ -39,6 +39,55 @@
<p>{{ $workOrder->scheduled_at?->format('M j, Y g:i A') ?? 'Not set' }} | {{ $workOrder->appointment_window ?: 'No window set' }}</p>
</section>
<section>
<h2>Scope Safeguards</h2>
<p class="muted">Scope clarity: {{ str_replace('_', ' ', $workOrder->scope_clarity_status) }}</p>
@if (is_array($workOrder->risk_flags) && $workOrder->risk_flags)
<p class="muted">Risk flags: {{ collect($workOrder->risk_flags)->map(fn ($flag) => str_replace('_', ' ', $flag))->implode(', ') }}</p>
@endif
<div class="grid">
<div class="box">
<h3>Primary Objective</h3>
<p>{!! nl2br(e($workOrder->scopeSnapshotValue('primary_objective') ?: $workOrder->jobPost->scope)) !!}</p>
</div>
<div class="box">
<h3>Included Work</h3>
<p>{!! nl2br(e($workOrder->scopeSnapshotValue('included_work') ?: 'Not specified')) !!}</p>
</div>
<div class="box">
<h3>Excluded Work</h3>
<p>{!! nl2br(e($workOrder->scopeSnapshotValue('excluded_work') ?: 'Not specified')) !!}</p>
</div>
<div class="box">
<h3>Closeout Conditions</h3>
<p>{!! nl2br(e($workOrder->scopeSnapshotValue('closeout_conditions') ?: 'Not specified')) !!}</p>
</div>
</div>
</section>
<section>
<h2>Contact And Support</h2>
<p class="muted">Certified: {{ $workOrder->contactSnapshotValue('contact_certified') ? 'Yes' : 'No' }}</p>
<div class="grid">
<div class="box">
<h3>Primary</h3>
<p>{{ $workOrder->contactSnapshotValue('primary_contact_name') ?: 'Not set' }}<br>{{ $workOrder->contactSnapshotValue('primary_contact_phone') }} {{ $workOrder->contactSnapshotValue('primary_contact_email') }}</p>
</div>
<div class="box">
<h3>Backup</h3>
<p>{{ $workOrder->contactSnapshotValue('backup_contact_name') ?: 'Not set' }}<br>{{ $workOrder->contactSnapshotValue('backup_contact_phone') }} {{ $workOrder->contactSnapshotValue('backup_contact_email') }}</p>
</div>
<div class="box">
<h3>Dispatch</h3>
<p>{{ $workOrder->contactSnapshotValue('dispatch_contact_name') ?: 'Not set' }}<br>{{ $workOrder->contactSnapshotValue('dispatch_contact_phone') }} {{ $workOrder->contactSnapshotValue('dispatch_contact_email') }}</p>
</div>
<div class="box">
<h3>Escalation</h3>
<p>{{ $workOrder->contactSnapshotValue('escalation_contact') ?: 'Not set' }}<br>{{ $workOrder->contactSnapshotValue('support_channel') }} {{ $workOrder->contactSnapshotValue('support_expected_response_time') }}</p>
</div>
</div>
</section>
<section>
<h2>Agreed Terms</h2>
<p>{!! nl2br(e($workOrder->agreed_terms ?: 'No agreed terms recorded.')) !!}</p>
@@ -67,6 +116,28 @@
@endif
</section>
<section>
<h2>Change Requests</h2>
<ul>
@forelse ($workOrder->changeRequests() as $changeRequest)
<li>{{ $changeRequest['summary'] }} | {{ $changeRequest['reason_label'] ?? 'Change' }} | {{ $changeRequest['status'] ?? 'open' }}</li>
@empty
<li>No change requests recorded.</li>
@endforelse
</ul>
</section>
<section>
<h2>Contact / Support Events</h2>
<ul>
@forelse ($workOrder->contactEvents as $event)
<li>{{ \App\Models\WorkOrderContactEvent::EVENT_TYPES[$event->event_type] ?? str_replace('_', ' ', $event->event_type) }} | {{ $event->attempted_at?->format('M j, Y g:i A') ?? $event->created_at->format('M j, Y g:i A') }} | {{ $event->result ?: 'No result' }}</li>
@empty
<li>No contact or support failures recorded.</li>
@endforelse
</ul>
</section>
<section>
<h2>Attachments</h2>
<ul>