Build
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Buyer Profile</h2></x-slot>
|
||||
<div class="mx-auto max-w-5xl p-6">
|
||||
<form method="POST" action="{{ route('buyers.update') }}" class="space-y-4 rounded border bg-white p-6">
|
||||
@csrf @method('PUT')
|
||||
<x-field name="company_name" label="Company name" :value="$profile?->company_name" />
|
||||
<x-field name="headline" label="Headline" :value="$profile?->headline" />
|
||||
<x-field name="description" label="Description" :value="$profile?->description" textarea />
|
||||
<x-field name="service_categories" label="Service categories" :value="$profile?->service_categories" textarea />
|
||||
<x-field name="hiring_regions" label="Hiring regions" :value="$profile?->hiring_regions" textarea />
|
||||
<x-field name="vendor_onboarding" label="Vendor onboarding" :value="$profile?->vendor_onboarding" textarea />
|
||||
<x-field name="payment_terms" label="Payment terms" :value="$profile?->payment_terms" textarea />
|
||||
<x-field name="website_url" label="Website URL" :value="$profile?->website_url" />
|
||||
<x-field name="contact_email" label="Contact email" :value="$profile?->contact_email" />
|
||||
<label class="flex gap-2 text-sm"><input type="checkbox" name="public_contact" value="1" @checked($profile?->public_contact)> Show contact details publicly</label>
|
||||
<x-primary-button>Save buyer profile</x-primary-button>
|
||||
</form>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,13 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Buyers</h2></x-slot>
|
||||
<div class="mx-auto max-w-7xl space-y-4 p-6">
|
||||
@foreach ($profiles as $profile)
|
||||
<a href="{{ route('buyers.show', $profile) }}" class="block rounded border bg-white p-4 shadow-sm">
|
||||
<h3 class="font-semibold">{{ $profile->company_name }}</h3>
|
||||
<p class="text-sm text-gray-600">{{ $profile->headline }}</p>
|
||||
<p class="mt-2 text-sm">{{ $profile->hiring_regions }}</p>
|
||||
</a>
|
||||
@endforeach
|
||||
{{ $profiles->links() }}
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,13 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">{{ $profile->company_name }}</h2></x-slot>
|
||||
<div class="mx-auto max-w-5xl rounded border bg-white p-6">
|
||||
<p class="text-lg font-semibold">{{ $profile->headline }}</p>
|
||||
<p class="mt-4 whitespace-pre-line">{{ $profile->description }}</p>
|
||||
<dl class="mt-6 grid gap-4 md:grid-cols-2">
|
||||
<div><dt class="text-sm text-gray-500">Service categories</dt><dd class="whitespace-pre-line">{{ $profile->service_categories }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Hiring regions</dt><dd class="whitespace-pre-line">{{ $profile->hiring_regions }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Vendor onboarding</dt><dd class="whitespace-pre-line">{{ $profile->vendor_onboarding }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Payment terms</dt><dd class="whitespace-pre-line">{{ $profile->payment_terms }}</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,13 @@
|
||||
@props(['name', 'label', 'value' => '', 'textarea' => false, 'type' => 'text'])
|
||||
|
||||
<div>
|
||||
<label for="{{ $name }}" class="block text-sm font-medium text-gray-700">{{ $label }}</label>
|
||||
@if ($textarea)
|
||||
<textarea id="{{ $name }}" name="{{ $name }}" rows="4" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500">{{ old($name, $value) }}</textarea>
|
||||
@else
|
||||
<input id="{{ $name }}" type="{{ $type }}" name="{{ $name }}" value="{{ old($name, $value) }}" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
|
||||
@endif
|
||||
@error($name)
|
||||
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
|
||||
@enderror
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Peer Review: {{ $dispute->summary }}</h2></x-slot>
|
||||
<div class="mx-auto max-w-5xl space-y-6 p-6">
|
||||
<section class="rounded border bg-white p-6">
|
||||
<p class="text-sm text-gray-500">Opened by {{ $dispute->openedBy->name }} | {{ $dispute->status }}</p>
|
||||
<h3 class="mt-4 font-semibold">Claim</h3>
|
||||
<p class="mt-2 whitespace-pre-line">{{ $dispute->claim }}</p>
|
||||
<h3 class="mt-4 font-semibold">Evidence notes</h3>
|
||||
<p class="mt-2 whitespace-pre-line">{{ $dispute->evidence_notes }}</p>
|
||||
<h3 class="mt-4 font-semibold">Recommended resolution</h3>
|
||||
<p class="mt-2 whitespace-pre-line">{{ $dispute->recommended_resolution ?? 'Pending peer review.' }}</p>
|
||||
</section>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,22 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Community Feed</h2></x-slot>
|
||||
<div class="mx-auto max-w-4xl space-y-6 p-6">
|
||||
@auth
|
||||
<form method="POST" action="{{ route('feed.store') }}" class="space-y-4 rounded border bg-white p-6">
|
||||
@csrf
|
||||
<x-field name="title" label="Title" />
|
||||
<x-field name="body" label="Post" textarea />
|
||||
<input type="hidden" name="visibility" value="public">
|
||||
<x-primary-button>Publish</x-primary-button>
|
||||
</form>
|
||||
@endauth
|
||||
@foreach ($posts as $post)
|
||||
<article class="rounded border bg-white p-6">
|
||||
<p class="text-sm text-gray-500">{{ $post->user->name }} | {{ $post->created_at->diffForHumans() }}</p>
|
||||
@if ($post->title)<h3 class="mt-2 font-semibold">{{ $post->title }}</h3>@endif
|
||||
<p class="mt-3 whitespace-pre-line">{{ $post->body }}</p>
|
||||
</article>
|
||||
@endforeach
|
||||
{{ $posts->links() }}
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,21 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Post Job</h2></x-slot>
|
||||
<div class="mx-auto max-w-5xl p-6">
|
||||
<form method="POST" action="{{ route('jobs.store') }}" class="space-y-4 rounded border bg-white p-6">
|
||||
@csrf
|
||||
<x-field name="title" label="Title" />
|
||||
<x-field name="service_category" label="Service category" />
|
||||
<x-field name="location" label="Location" />
|
||||
<x-field name="starts_at" label="Start date/time" type="datetime-local" />
|
||||
<x-field name="time_window" label="Time window" />
|
||||
<x-field name="scope" label="Scope" textarea />
|
||||
<x-field name="required_skills" label="Required skills" textarea />
|
||||
<x-field name="required_tools" label="Required tools" textarea />
|
||||
<x-field name="deliverables" label="Deliverables checklist" textarea />
|
||||
<x-field name="payment_terms" label="Payment terms" textarea />
|
||||
<x-field name="vendor_onboarding" label="Vendor onboarding" textarea />
|
||||
<input type="hidden" name="visibility" value="public">
|
||||
<x-primary-button>Post job</x-primary-button>
|
||||
</form>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,14 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Jobs</h2></x-slot>
|
||||
<div class="mx-auto max-w-7xl space-y-4 p-6">
|
||||
@auth @role('buyer')<a class="rounded bg-indigo-600 px-4 py-2 text-white" href="{{ route('jobs.create') }}">Post job</a>@endrole @endauth
|
||||
@foreach ($jobs as $job)
|
||||
<a href="{{ route('jobs.show', $job) }}" class="block rounded border bg-white p-4 shadow-sm">
|
||||
<h3 class="font-semibold">{{ $job->title }}</h3>
|
||||
<p class="text-sm text-gray-600">{{ $job->location }} | {{ $job->service_category }} | {{ $job->status }}</p>
|
||||
<p class="mt-2 line-clamp-2 text-sm">{{ $job->scope }}</p>
|
||||
</a>
|
||||
@endforeach
|
||||
{{ $jobs->links() }}
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,53 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">{{ $job->title }}</h2></x-slot>
|
||||
<div class="mx-auto max-w-6xl space-y-6 p-6">
|
||||
<section class="rounded border bg-white p-6">
|
||||
<p class="text-sm text-gray-500">{{ $job->location }} | {{ $job->service_category }} | {{ $job->status }}</p>
|
||||
<p class="mt-4 whitespace-pre-line">{{ $job->scope }}</p>
|
||||
<dl class="mt-6 grid gap-4 md:grid-cols-2">
|
||||
<div><dt class="text-sm text-gray-500">Required skills</dt><dd class="whitespace-pre-line">{{ $job->required_skills }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Required tools</dt><dd class="whitespace-pre-line">{{ $job->required_tools }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Deliverables</dt><dd class="whitespace-pre-line">{{ $job->deliverables }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Payment terms</dt><dd class="whitespace-pre-line">{{ $job->payment_terms }}</dd></div>
|
||||
</dl>
|
||||
</section>
|
||||
@auth
|
||||
@role('provider')
|
||||
@if ($job->status === 'open' && $job->buyer_id !== auth()->id())
|
||||
<form method="POST" action="{{ route('quotes.store', $job) }}" class="space-y-4 rounded border bg-white p-6">
|
||||
@csrf
|
||||
<h3 class="font-semibold">Submit quote</h3>
|
||||
<x-field name="requested_amount" label="Requested amount" type="number" />
|
||||
<x-field name="rate_summary" label="Rate summary" />
|
||||
<x-field name="message" label="Message" textarea />
|
||||
<x-field name="terms" label="Terms" textarea />
|
||||
<x-primary-button>Submit quote</x-primary-button>
|
||||
</form>
|
||||
@endif
|
||||
@endrole
|
||||
@endauth
|
||||
<section class="rounded border bg-white p-6">
|
||||
<h3 class="font-semibold">Quotes</h3>
|
||||
@forelse ($job->quotes as $quote)
|
||||
<div class="mt-4 rounded border p-4">
|
||||
<p class="font-semibold">{{ $quote->provider->providerProfile?->business_name ?? $quote->provider->name }}</p>
|
||||
<p class="text-sm text-gray-600">{{ $quote->status }} | {{ $quote->rate_summary }} | {{ $quote->requested_amount }}</p>
|
||||
<p class="mt-2 whitespace-pre-line text-sm">{{ $quote->message }}</p>
|
||||
@auth
|
||||
@if (auth()->id() === $job->buyer_id && $job->status === 'open')
|
||||
<form method="POST" action="{{ route('quotes.accept', $quote) }}" class="mt-3">
|
||||
@csrf
|
||||
<x-primary-button>Accept quote</x-primary-button>
|
||||
</form>
|
||||
@endif
|
||||
@endauth
|
||||
</div>
|
||||
@empty
|
||||
<p class="mt-2 text-sm text-gray-600">No quotes yet.</p>
|
||||
@endforelse
|
||||
</section>
|
||||
@if ($job->workOrder)
|
||||
<a class="rounded bg-gray-900 px-4 py-2 text-white" href="{{ route('work-orders.show', $job->workOrder) }}">View work order</a>
|
||||
@endif
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -15,41 +15,73 @@
|
||||
<x-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
|
||||
{{ __('Dashboard') }}
|
||||
</x-nav-link>
|
||||
<x-nav-link :href="route('providers.index')" :active="request()->routeIs('providers.*')">
|
||||
{{ __('Providers') }}
|
||||
</x-nav-link>
|
||||
<x-nav-link :href="route('buyers.index')" :active="request()->routeIs('buyers.*')">
|
||||
{{ __('Buyers') }}
|
||||
</x-nav-link>
|
||||
<x-nav-link :href="route('feed.index')" :active="request()->routeIs('feed.*')">
|
||||
{{ __('Feed') }}
|
||||
</x-nav-link>
|
||||
<x-nav-link :href="route('jobs.index')" :active="request()->routeIs('jobs.*')">
|
||||
{{ __('Jobs') }}
|
||||
</x-nav-link>
|
||||
<x-nav-link :href="route('work-orders.index')" :active="request()->routeIs('work-orders.*')">
|
||||
{{ __('Work Orders') }}
|
||||
</x-nav-link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Settings Dropdown -->
|
||||
<div class="hidden sm:flex sm:items-center sm:ms-6">
|
||||
<x-dropdown align="right" width="48">
|
||||
<x-slot name="trigger">
|
||||
<button class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none transition ease-in-out duration-150">
|
||||
<div>{{ Auth::user()->name }}</div>
|
||||
@auth
|
||||
<x-dropdown align="right" width="48">
|
||||
<x-slot name="trigger">
|
||||
<button class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none transition ease-in-out duration-150">
|
||||
<div>{{ Auth::user()->name }}</div>
|
||||
|
||||
<div class="ms-1">
|
||||
<svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</button>
|
||||
</x-slot>
|
||||
<div class="ms-1">
|
||||
<svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
||||
<path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</button>
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="content">
|
||||
<x-dropdown-link :href="route('profile.edit')">
|
||||
{{ __('Profile') }}
|
||||
</x-dropdown-link>
|
||||
|
||||
<!-- Authentication -->
|
||||
<form method="POST" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
|
||||
<x-dropdown-link :href="route('logout')"
|
||||
onclick="event.preventDefault();
|
||||
this.closest('form').submit();">
|
||||
{{ __('Log Out') }}
|
||||
<x-slot name="content">
|
||||
<x-dropdown-link :href="route('profile.edit')">
|
||||
{{ __('Profile') }}
|
||||
</x-dropdown-link>
|
||||
</form>
|
||||
</x-slot>
|
||||
</x-dropdown>
|
||||
@role('provider')
|
||||
<x-dropdown-link :href="route('providers.edit')">
|
||||
{{ __('Provider Profile') }}
|
||||
</x-dropdown-link>
|
||||
@endrole
|
||||
@role('buyer')
|
||||
<x-dropdown-link :href="route('buyers.edit')">
|
||||
{{ __('Buyer Profile') }}
|
||||
</x-dropdown-link>
|
||||
@endrole
|
||||
|
||||
<!-- Authentication -->
|
||||
<form method="POST" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
|
||||
<x-dropdown-link :href="route('logout')"
|
||||
onclick="event.preventDefault();
|
||||
this.closest('form').submit();">
|
||||
{{ __('Log Out') }}
|
||||
</x-dropdown-link>
|
||||
</form>
|
||||
</x-slot>
|
||||
</x-dropdown>
|
||||
@else
|
||||
<div class="flex gap-4 text-sm">
|
||||
<a href="{{ route('login') }}" class="text-gray-600 hover:text-gray-900">Log in</a>
|
||||
<a href="{{ route('register') }}" class="text-gray-600 hover:text-gray-900">Register</a>
|
||||
</div>
|
||||
@endauth
|
||||
</div>
|
||||
|
||||
<!-- Hamburger -->
|
||||
@@ -70,30 +102,66 @@
|
||||
<x-responsive-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
|
||||
{{ __('Dashboard') }}
|
||||
</x-responsive-nav-link>
|
||||
<x-responsive-nav-link :href="route('providers.index')" :active="request()->routeIs('providers.*')">
|
||||
{{ __('Providers') }}
|
||||
</x-responsive-nav-link>
|
||||
<x-responsive-nav-link :href="route('buyers.index')" :active="request()->routeIs('buyers.*')">
|
||||
{{ __('Buyers') }}
|
||||
</x-responsive-nav-link>
|
||||
<x-responsive-nav-link :href="route('feed.index')" :active="request()->routeIs('feed.*')">
|
||||
{{ __('Feed') }}
|
||||
</x-responsive-nav-link>
|
||||
<x-responsive-nav-link :href="route('jobs.index')" :active="request()->routeIs('jobs.*')">
|
||||
{{ __('Jobs') }}
|
||||
</x-responsive-nav-link>
|
||||
<x-responsive-nav-link :href="route('work-orders.index')" :active="request()->routeIs('work-orders.*')">
|
||||
{{ __('Work Orders') }}
|
||||
</x-responsive-nav-link>
|
||||
</div>
|
||||
|
||||
<!-- Responsive Settings Options -->
|
||||
<div class="pt-4 pb-1 border-t border-gray-200">
|
||||
<div class="px-4">
|
||||
<div class="font-medium text-base text-gray-800">{{ Auth::user()->name }}</div>
|
||||
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
|
||||
</div>
|
||||
@auth
|
||||
<div class="px-4">
|
||||
<div class="font-medium text-base text-gray-800">{{ Auth::user()->name }}</div>
|
||||
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
|
||||
</div>
|
||||
@endauth
|
||||
|
||||
<div class="mt-3 space-y-1">
|
||||
<x-responsive-nav-link :href="route('profile.edit')">
|
||||
{{ __('Profile') }}
|
||||
</x-responsive-nav-link>
|
||||
|
||||
<!-- Authentication -->
|
||||
<form method="POST" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
|
||||
<x-responsive-nav-link :href="route('logout')"
|
||||
onclick="event.preventDefault();
|
||||
this.closest('form').submit();">
|
||||
{{ __('Log Out') }}
|
||||
@auth
|
||||
<x-responsive-nav-link :href="route('profile.edit')">
|
||||
{{ __('Profile') }}
|
||||
</x-responsive-nav-link>
|
||||
</form>
|
||||
@role('provider')
|
||||
<x-responsive-nav-link :href="route('providers.edit')">
|
||||
{{ __('Provider Profile') }}
|
||||
</x-responsive-nav-link>
|
||||
@endrole
|
||||
@role('buyer')
|
||||
<x-responsive-nav-link :href="route('buyers.edit')">
|
||||
{{ __('Buyer Profile') }}
|
||||
</x-responsive-nav-link>
|
||||
@endrole
|
||||
|
||||
<!-- Authentication -->
|
||||
<form method="POST" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
|
||||
<x-responsive-nav-link :href="route('logout')"
|
||||
onclick="event.preventDefault();
|
||||
this.closest('form').submit();">
|
||||
{{ __('Log Out') }}
|
||||
</x-responsive-nav-link>
|
||||
</form>
|
||||
@else
|
||||
<x-responsive-nav-link :href="route('login')">
|
||||
{{ __('Log in') }}
|
||||
</x-responsive-nav-link>
|
||||
<x-responsive-nav-link :href="route('register')">
|
||||
{{ __('Register') }}
|
||||
</x-responsive-nav-link>
|
||||
@endauth
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Provider Profile</h2></x-slot>
|
||||
<div class="mx-auto max-w-5xl space-y-6 p-6">
|
||||
<form method="POST" action="{{ route('providers.update') }}" class="space-y-4 rounded border bg-white p-6">
|
||||
@csrf @method('PUT')
|
||||
<x-field name="business_name" label="Business name" :value="$profile?->business_name" />
|
||||
<x-field name="headline" label="Headline" :value="$profile?->headline" />
|
||||
<x-field name="bio" label="Bio" :value="$profile?->bio" textarea />
|
||||
<x-field name="service_area" label="Service area" :value="$profile?->service_area" />
|
||||
<x-field name="skills" label="Skills" :value="$profile?->skills" textarea />
|
||||
<x-field name="tools" label="Tools and equipment" :value="$profile?->tools" textarea />
|
||||
<x-field name="certifications" label="Certifications" :value="$profile?->certifications" textarea />
|
||||
<x-field name="insurance_status" label="Insurance status" :value="$profile?->insurance_status" />
|
||||
<x-field name="rate_card" label="Rate card" :value="$profile?->rate_card" textarea />
|
||||
<x-field name="travel_policy" label="Travel policy" :value="$profile?->travel_policy" textarea />
|
||||
<x-field name="availability_notes" label="Availability notes" :value="$profile?->availability_notes" textarea />
|
||||
<x-field name="website_url" label="Website URL" :value="$profile?->website_url" />
|
||||
<x-field name="phone" label="Phone" :value="$profile?->phone" />
|
||||
<label class="flex gap-2 text-sm"><input type="checkbox" name="public_contact" value="1" @checked($profile?->public_contact)> Show contact details publicly</label>
|
||||
<x-primary-button>Save provider profile</x-primary-button>
|
||||
</form>
|
||||
@if ($profile)
|
||||
<form method="POST" action="{{ route('provider-imports.store') }}" class="space-y-4 rounded border bg-white p-6">
|
||||
@csrf
|
||||
<h3 class="font-semibold">External profile snapshot</h3>
|
||||
<x-field name="platform" label="Platform" value="Field Nation" />
|
||||
<x-field name="external_id" label="External ID" value="172-630" />
|
||||
<x-field name="profile_url" label="Profile URL" />
|
||||
<x-field name="rating" label="Rating" type="number" />
|
||||
<x-field name="review_count" label="Review count" type="number" />
|
||||
<x-field name="completed_jobs" label="Completed jobs" type="number" />
|
||||
<x-field name="notes" label="Notes or copied review summary" textarea />
|
||||
<x-primary-button>Save external snapshot</x-primary-button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,16 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Providers</h2></x-slot>
|
||||
<div class="mx-auto max-w-7xl space-y-4 p-6">
|
||||
@foreach ($profiles as $profile)
|
||||
<a href="{{ route('providers.show', $profile) }}" class="block rounded border bg-white p-4 shadow-sm">
|
||||
<h3 class="font-semibold">{{ $profile->business_name }}</h3>
|
||||
<p class="text-sm text-gray-600">{{ $profile->headline }}</p>
|
||||
<p class="mt-2 text-sm">{{ $profile->service_area }}</p>
|
||||
@foreach ($profile->externalImports as $import)
|
||||
<span class="mt-2 inline-block rounded bg-gray-100 px-2 py-1 text-xs">{{ $import->platform }} {{ $import->rating ? $import->rating.'/5' : '' }}</span>
|
||||
@endforeach
|
||||
</a>
|
||||
@endforeach
|
||||
{{ $profiles->links() }}
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,29 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">{{ $profile->business_name }}</h2></x-slot>
|
||||
<div class="mx-auto max-w-5xl space-y-6 p-6">
|
||||
<section class="rounded border bg-white p-6">
|
||||
<p class="text-lg font-semibold">{{ $profile->headline }}</p>
|
||||
<p class="mt-4 whitespace-pre-line">{{ $profile->bio }}</p>
|
||||
<dl class="mt-6 grid gap-4 md:grid-cols-2">
|
||||
<div><dt class="text-sm text-gray-500">Service area</dt><dd>{{ $profile->service_area }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Insurance</dt><dd>{{ $profile->insurance_status }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Skills</dt><dd class="whitespace-pre-line">{{ $profile->skills }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Tools</dt><dd class="whitespace-pre-line">{{ $profile->tools }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Rate card</dt><dd class="whitespace-pre-line">{{ $profile->rate_card }}</dd></div>
|
||||
<div><dt class="text-sm text-gray-500">Travel policy</dt><dd class="whitespace-pre-line">{{ $profile->travel_policy }}</dd></div>
|
||||
</dl>
|
||||
</section>
|
||||
<section class="rounded border bg-white p-6">
|
||||
<h3 class="font-semibold">External profile history</h3>
|
||||
@forelse ($profile->externalImports as $import)
|
||||
<div class="mt-4 rounded border p-4">
|
||||
<p class="font-semibold">{{ $import->platform }} {{ $import->external_id ? '#'.$import->external_id : '' }}</p>
|
||||
<p class="text-sm text-gray-600">Rating: {{ $import->rating ?? 'n/a' }} | Reviews: {{ $import->review_count ?? 'n/a' }} | Completed: {{ $import->completed_jobs ?? 'n/a' }}</p>
|
||||
<p class="mt-2 whitespace-pre-line text-sm">{{ $import->notes }}</p>
|
||||
</div>
|
||||
@empty
|
||||
<p class="mt-2 text-sm text-gray-600">No external profile snapshots yet.</p>
|
||||
@endforelse
|
||||
</section>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,12 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Work Orders</h2></x-slot>
|
||||
<div class="mx-auto max-w-7xl space-y-4 p-6">
|
||||
@foreach ($orders as $order)
|
||||
<a href="{{ route('work-orders.show', $order) }}" class="block rounded border bg-white p-4 shadow-sm">
|
||||
<h3 class="font-semibold">{{ $order->jobPost->title }}</h3>
|
||||
<p class="text-sm text-gray-600">{{ $order->status }} | Buyer: {{ $order->buyer->name }} | Provider: {{ $order->provider->name }}</p>
|
||||
</a>
|
||||
@endforeach
|
||||
{{ $orders->links() }}
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,52 @@
|
||||
<x-app-layout>
|
||||
<x-slot name="header"><h2 class="text-xl font-semibold">Work Order: {{ $workOrder->jobPost->title }}</h2></x-slot>
|
||||
<div class="mx-auto max-w-6xl space-y-6 p-6">
|
||||
<section class="rounded border bg-white p-6">
|
||||
<p class="text-sm text-gray-500">Status: {{ $workOrder->status }}</p>
|
||||
<p class="mt-4 whitespace-pre-line">{{ $workOrder->agreed_terms }}</p>
|
||||
<h3 class="mt-6 font-semibold">Deliverables</h3>
|
||||
<p class="mt-2 whitespace-pre-line">{{ $workOrder->deliverables_checklist }}</p>
|
||||
<form method="POST" action="{{ route('work-orders.transition', $workOrder) }}" class="mt-6 space-y-4">
|
||||
@csrf @method('PATCH')
|
||||
<label class="block text-sm font-medium">Update status</label>
|
||||
<select name="status" class="rounded-md border-gray-300">
|
||||
@foreach (\App\Models\WorkOrder::STATUSES as $status)
|
||||
<option value="{{ $status }}" @selected($workOrder->status === $status)>{{ str_replace('_', ' ', $status) }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<x-field name="completion_notes" label="Completion notes" :value="$workOrder->completion_notes" textarea />
|
||||
<x-primary-button>Save status</x-primary-button>
|
||||
</form>
|
||||
</section>
|
||||
<section class="rounded border bg-white p-6">
|
||||
<h3 class="font-semibold">Reviews</h3>
|
||||
<form method="POST" action="{{ route('reviews.store', $workOrder) }}" class="mt-4 space-y-4">
|
||||
@csrf
|
||||
<x-field name="rating" label="Rating 1-5" type="number" />
|
||||
<x-field name="body" label="Review" textarea />
|
||||
<x-primary-button>Save review</x-primary-button>
|
||||
</form>
|
||||
@foreach ($workOrder->reviews as $review)
|
||||
<div class="mt-4 rounded border p-4 text-sm">
|
||||
<p class="font-semibold">{{ $review->reviewer->name }} rated {{ $review->reviewee->name }} {{ $review->rating }}/5</p>
|
||||
<p class="mt-2 whitespace-pre-line">{{ $review->body }}</p>
|
||||
</div>
|
||||
@endforeach
|
||||
</section>
|
||||
<section class="rounded border bg-white p-6">
|
||||
<h3 class="font-semibold">Disputes / Peer Review</h3>
|
||||
<form method="POST" action="{{ route('disputes.store', $workOrder) }}" class="mt-4 space-y-4">
|
||||
@csrf
|
||||
<x-field name="summary" label="Summary" />
|
||||
<x-field name="claim" label="Claim" textarea />
|
||||
<x-field name="evidence_notes" label="Evidence notes" textarea />
|
||||
<x-primary-button>Open dispute</x-primary-button>
|
||||
</form>
|
||||
@foreach ($workOrder->disputes as $dispute)
|
||||
<a href="{{ route('disputes.show', $dispute) }}" class="mt-4 block rounded border p-4 text-sm">
|
||||
<span class="font-semibold">{{ $dispute->summary }}</span> | {{ $dispute->status }}
|
||||
</a>
|
||||
@endforeach
|
||||
</section>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
Reference in New Issue
Block a user