@php $canOrder = $wsMember->canOrder(); $cartQty = collect($cartLines)->pluck('quantity', 'variant_id')->map(fn ($qty) => (int) $qty); $money = fn (int $cents) => 'AUD '.number_format($cents / 100, 2); $variantCount = collect($catalog)->sum(fn ($product) => count($product['variants'])); @endphp
@unless($canOrder)
You have view-only access. Browse your pricing here; ask an account owner to place orders.
@endunless
{{-- Catalogue --}}
@if($wsSettings['price_sheet_enabled']) @endif @if($canOrder && $quote['units'] > 0)
@csrf @method('DELETE')
@endif
@if($canOrder)
Paste from a spreadsheet Drop in SKU and quantity per line — straight from Excel, your POS or an email.
@csrf

Separators: space, comma, semicolon or tab. Missing quantity = 1. Duplicates are combined.

@endif
@forelse($catalog as $i => $product) @php $inOrder = collect($product['variants'])->sum(fn ($variant) => $cartQty[$variant['id']] ?? 0); $fromCents = collect($product['variants'])->min('from_cents'); $search = mb_strtolower($product['title'].' '.$product['grade'].' '.collect($product['variants'])->map(fn ($v) => $v['label'].' '.$v['sku'])->implode(' ')); @endphp
0 || ($i === 0 && $quote['units'] === 0)) open @endif> @if($product['image']) @else @endif {{ $product['title'] }} {{ count($product['variants']) }} {{ str('variant')->plural(count($product['variants'])) }} @if($product['grade']){{ $product['grade'] }}@endif @if($product['lead_days']){{ $product['lead_days'] }}-day lead@endif @if($product['breaks'])Volume breaks@endif {{ number_format($inOrder) }} in order @if($product['breaks'] || $canOrder)
@foreach($product['breaks'] as $break) {{ $break['label'] }} → {{ $break['discount'] }} @endforeach @if($canOrder) Fill every size: @foreach([1, 5, 10] as $fill) @endforeach @endif
@endif
@foreach($product['variants'] as $variant) @php $qty = $cartQty[$variant['id']] ?? 0; @endphp

{{ $variant['label'] }}

{{ $variant['sku'] ?: '—' }}@unless($variant['available']) · made to order@endunless

@if($canOrder)
@else {{ $money($variant['from_cents']) }} @endif
@endforeach
@empty

The trade catalogue is being updated

Check back shortly, or request a custom quote.

@endforelse

/ search & add anything Shift + click ± to step by 10 ↵ confirm a quantity

{{-- Live summary --}}