Add external import sources, work history, screening fields and Phase 1 docs

- New ExternalImportSource and ExternalWorkHistoryEntry models, controller and migrations
- Screening fields on external profile imports
- Admin and provider profile views, routes and workflow tests updated
- Phase 1 validation, route inventory, gap report template and roadmap docs
- Add the Google Sheets work-order parser tool (tools/google-sheets-wo-parser)
This commit is contained in:
Codex
2026-10-02 15:50:18 -05:00
parent 0670f48878
commit 62220186af
37 changed files with 3284 additions and 4 deletions
+37
View File
@@ -161,6 +161,16 @@
| Backout: {{ $import->operational_metrics['backout_rate'] ?? 'n/a' }}%
</p>
@endif
@if ($import->background_check_status || $import->drug_test_status)
<div class="mt-3 flex flex-wrap gap-2">
@if ($import->background_check_status)
<x-badge tone="emerald">Background check {{ $import->background_check_status }}{{ $import->background_check_date ? ' '.$import->background_check_date : '' }}</x-badge>
@endif
@if ($import->drug_test_status)
<x-badge tone="emerald">Drug test {{ $import->drug_test_status }}{{ $import->drug_test_date ? ' '.$import->drug_test_date : '' }}</x-badge>
@endif
</div>
@endif
@if ($import->work_categories)
<div class="mt-3 flex flex-wrap gap-2">
@foreach ($import->work_categories as $category)
@@ -175,6 +185,33 @@
@endforeach
</div>
@endif
@if ($import->workHistoryEntries->isNotEmpty())
<div class="mt-4 rounded-md border border-slate-200 bg-slate-50 p-3 dark:border-slate-800 dark:bg-slate-950">
<div class="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
<div>
<p class="font-semibold text-slate-950 dark:text-white">Recent imported work</p>
<p class="mt-1 text-sm text-slate-600 dark:text-slate-400">Showing a redacted sample from {{ number_format($import->workHistoryEntries->count()) }} imported external jobs. Customer names and work-order links are private.</p>
</div>
<x-badge tone="amber">Imported external history</x-badge>
</div>
<div class="mt-3 grid gap-2 md:grid-cols-2">
@foreach ($import->workHistoryEntries->sortByDesc('performed_on')->take(6) as $entry)
<div class="rounded-md border border-slate-200 bg-white p-3 text-sm dark:border-slate-800 dark:bg-slate-900">
<p class="font-semibold text-slate-950 dark:text-white">{{ \Illuminate\Support\Str::limit($entry->service_title, 90) }}</p>
<p class="mt-1 text-slate-600 dark:text-slate-400">
{{ $entry->performed_on?->format('M j, Y') ?? 'Date private' }}
@if ($entry->work_type)
| {{ $entry->work_type }}
@endif
@if ($entry->location)
| {{ $entry->location }}
@endif
</p>
</div>
@endforeach
</div>
</div>
@endif
@if ($import->canShowSelectedReviews() && $import->selected_reviews)
<div class="mt-3 space-y-2">
@foreach ($import->selected_reviews as $review)