@php $statusMeta = [ 'draft' => ['label' => __('Draft'), 'color' => 'slate'], 'sent' => ['label' => __('Out for Quotation'), 'color' => 'indigo'], 'closed' => ['label' => __('Closed'), 'color' => 'amber'], 'awarded' => ['label' => __('Awarded'), 'color' => 'emerald'], 'cancelled' => ['label' => __('Cancelled'), 'color' => 'slate'], ]; $seatMeta = [ 'invited' => ['label' => __('Invited'), 'color' => 'slate', 'icon' => 'paper-airplane'], 'viewed' => ['label' => __('Viewed'), 'color' => 'sky', 'icon' => 'eye'], 'submitted' => ['label' => __('Quoted'), 'color' => 'indigo', 'icon' => 'check'], 'declined' => ['label' => __('No bid'), 'color' => 'amber', 'icon' => 'x-mark'], 'awarded' => ['label' => __('Awarded'), 'color' => 'emerald', 'icon' => 'check-circle'], 'not_selected' => ['label' => __('Not selected'), 'color' => 'slate', 'icon' => 'minus'], ]; $money = fn ($v) => $baseCode . ' ' . number_format((float) $v, 2); $qty = fn ($v) => rtrim(rtrim(number_format((float) $v, 2), '0'), '.'); $deadline = $rfq->response_deadline; $bids = $comparison['bids']; // The floor: what the basket would cost buying each line from whoever is // cheapest on it. The gap to the winning single-supplier bid is the price // of the convenience of one order. $cherry = $comparison['cherryPickTotal']; $best = $comparison['bestTotal']; @endphp
{{ __('Status') }}
{{ __('Responses close') }}
@if ($deadline){{ $deadline->format('j M Y, H:i') }}
{{ $rfq->is_expired ? __('Deadline passed, links are locked') : $deadline->diffForHumans() }}
@else{{ __('Open-ended') }}
@endif @if ($canManage && in_array($rfq->status, ['sent', 'closed'], true)) @endif{{ __('Bids in') }}
{{ count($bids) }}/{{ $seats->count() }}
{{ trans_choice('{0}no items|{1}:count item|[2,*] :count items', $rfq->lines->count(), ['count' => $rfq->lines->count()]) }}
{{ __('Best single bid') }}
{{ $money($best) }}
@if ($cherry > 0 && $best - $cherry > 0.005){{ __('Split across cheapest: :v', ['v' => $money($cherry)]) }}
@endif{{ __('Required by') }}
{{ $rfq->required_by->format('j M Y') }}
{{ __('Open tender — anyone can bid') }}
{{ __('Share this link. Suppliers register themselves and are handed a private, sealed bidding form.') }}
{{ $rfq->public_url }}
{{ __('Invite-only tender') }}
{{ __('Only the suppliers below can bid. Open it up to advertise publicly and let any supplier register.') }}
{{ __('Awarded to :supplier', ['supplier' => $rfq->awardedSupplier?->name]) }}
{{ __('Awarded :when by :who', [ 'when' => optional($rfq->awarded_at)->format('j M Y'), 'who' => $rfq->awarder?->name ?? __('the system'), ]) }}
{{ __('Each supplier holds a private link. Bidding is sealed, nobody sees anybody else’s prices.') }}
@if ($seat->is_shortlisted)
{{ $seat->contact_email ?: ($seat->supplier?->email ?: __('No email on file')) }}
{{ $seat->decline_reason ?: __('Declined to quote, no reason given.') }}
@else@if ($seat->first_viewed_at) {{ __('Opened the link :when', ['when' => $seat->first_viewed_at->diffForHumans()]) }} @elseif ($seat->sent_at) {{ __('Emailed :when, not yet opened', ['when' => $seat->sent_at->diffForHumans()]) }} @else {{ __('Not yet sent') }} @endif
@endif {{-- Private link + actions --}}{{ __('Unit prices converted to :code so bids in different currencies compare like for like. The cheapest price on each line is highlighted.', ['code' => $baseCode]) }}
| {{ __('Item') }} | {{ __('Qty') }} | @foreach ($bids as $bid)
@if ($bid['is_shortlisted'])
|
@endforeach
|---|---|---|
|
{{ $line->description }} @if ($line->specification){{ $line->specification }} @endif |
{{ $qty($line->quantity) }} {{ $line->unit }} | @foreach ($bids as $bid) @php $cell = $row['cells'][$bid['invitation']->id] ?? null; @endphp@if (! $cell || ! $cell['quoted']) — @elseif (! $cell['available']) {{ __('Can’t supply') }} @else $cell['is_best'], 'text-slate-900' => ! $cell['is_best'], ])> {{ number_format($cell['base_unit_price'], 2) }} @if (! $cell['is_best'] && $cell['premium_percent'] !== null && $cell['premium_percent'] > 0) +{{ number_format($cell['premium_percent'], 1) }}% @endif @if ($cell['alternate']) {{ __('alt: :d', ['d' => $cell['alternate']]) }} @endif @endif | @endforeach
| {{ __('Total') }} ({{ $baseCode }}) | @foreach ($bids as $bid) | $bid['is_cheapest'], 'text-slate-900' => ! $bid['is_cheapest'], ])>{{ number_format($bid['total_base'], 2) }} @if ($bid['delta_vs_best'] > 0.005) +{{ number_format($bid['delta_vs_best'], 2) }} @elseif ($bid['is_cheapest']) {{ __('Lowest') }} @endif | @endforeach
| {{ __('Lead time') }} | @foreach ($bids as $bid) | {{ $bid['invitation']->lead_time_days !== null ? __(':n days', ['n' => $bid['invitation']->lead_time_days]) : '—' }} | @endforeach
| @foreach ($bids as $bid) | @if ($bid['invitation']->status === 'submitted') @endif | @endforeach
{{ __('Scope') }}
{{ $rfq->scope }}
{{ __('Conditions shown to suppliers') }}
{{ $rfq->terms }}
{{ __('Internal notes') }}
{{ $rfq->notes }}
{{ __('Every active supplier is already on this RFQ.') }}
@else{{ __('They will each get their own private link. On a live RFQ the invitation is emailed straight away.') }}
{{ __('Total') }}
{{ $viewingBid->currency_code }} {{ number_format((float) $viewingBid->total, 2) }}
{{ __('Lead time') }}
{{ $viewingBid->lead_time_days !== null ? __(':n days', ['n' => $viewingBid->lead_time_days]) : '—' }}
{{ __('Valid until') }}
{{ optional($viewingBid->valid_until)->format('j M Y') ?: '—' }}
{{ __('Payment terms') }}
{{ $viewingBid->payment_terms ?: '—' }}
| {{ __('Item') }} | {{ __('Qty') }} | {{ __('Unit') }} | {{ __('Total') }} |
|---|---|---|---|
| {{ $line->description }} @if ($ql?->alternate_description) {{ __('Offered: :d', ['d' => $ql->alternate_description]) }} @endif @if ($ql?->notes) {{ $ql->notes }} @endif | {{ $qty($ql?->quantity ?? $line->quantity) }} | @if ($ql && ! $ql->is_available) {{ __('Can’t supply') }} @else {{ number_format((float) ($ql?->unit_price ?? 0), 2) }} @endif | {{ number_format((float) ($ql?->line_total ?? 0), 2) }} |
| {{ __('Subtotal') }} | {{ number_format((float) $viewingBid->subtotal, 2) }} | ||
| {{ __('Tax') }} | {{ number_format((float) $viewingBid->tax, 2) }} | ||
| {{ __('Total') }} | {{ number_format((float) $viewingBid->total, 2) }} | ||
{{ __('Supplier notes') }}
{{ $viewingBid->supplier_notes }}
{{ __('Evaluation') }}
@if ($viewingBid->is_shortlisted && $viewingBid->shortlisted_at) {{ __('Shortlisted :when', ['when' => $viewingBid->shortlisted_at->diffForHumans()]) }} @else {{ __('Notes are internal and never shown to the supplier.') }} @endif
{{ __('Evaluation') }}
{{ $viewingBid->evaluation_note }}
{{ __('For quotes that arrived by phone, WhatsApp or on paper. It is stored and compared exactly like a self-served bid, and stamped as keyed in by you.') }}
{{ $line->description }}
@if ($line->specification){{ $line->specification }}
@endif{{ $capture_currency }} {{ number_format($lineTotal, 2) }}