| Work Order | PO | Part | Status | What happened | Action |
|---|---|---|---|---|---|
| {{ $r->pams_work_order ?: '-' }} | {{ $r->external_order_id }} |
{{ $r->part_num }}
inv {{ $r->pams_inventory_id }}
|
{{ $r->gps_status === \App\Models\PamsOrder::GPS_FLAG_MISMATCH ? 'Flags disagree' : $r->status_label }} |
{{ $p->error ?: '—' }}
{{ $p->how }}
|
@if($p->action === 'retry') @elseif($p->action === 'email') {{-- Retry is deliberately not offered: PAMS state it cannot succeed. The only thing that clears this is PAMS acting on their side. --}} pams_work_order . " (PO " . $r->external_order_id . ", inventory " . $r->pams_inventory_id . ") is rejected with:\n\n labels[0] inventoryId is not on this work order.\n\nPer the DWT addendum §6 this cannot be retried. Please attach the label on your side so the order is not held up.\n\nThanks,\nGo-Parts") }}" class="pf-btn-secondary" style="text-decoration:none;display:inline-block;">Email PAMS @else Ask PAMS @endif |
| When | Order ID | Work Order | Status | Package | Dims | ShipEngine | Veeqo | Why this rate | Saved | Tracking |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ $a->created_at?->format('d M H:i') }} | {{ $a->external_order_id }} | {{ $a->pams_work_order ?: '-' }} | {{ $a->status_label }} | {{ $a->package_label }} | @if($a->dimension_source === 'pams') PAMS @else NO PAMS DIMS @endif | {{-- Each provider's best quote. The one that was bought is marked; a provider that returned nothing says so, which is different from losing on price. --}}
@if($se)
${{ number_format((float) $se['cost'], 2) }}@if($a->wonBy('shipengine')) ✓@endif
{{ $se['service'] ?? '' }}
@else
no quote
@endif
|
@if($vq)
${{ number_format((float) $vq['cost'], 2) }}@if($a->wonBy('veeqo')) ✓@endif
{{ $vq['service'] ?? '' }}
@else
no quote
@endif
|
{{ $a->choice_reason }}
@if(count($a->decodedQuotes()) > 2)
{{ count($a->decodedQuotes()) }} quotes considered
@endif
|
{{ $a->saving === null ? '-' : '$'.number_format($a->saving, 2) }} |
{{ $a->tracking_number ?: '-' }}
@if($a->error) {{ \Illuminate\Support\Str::limit($a->error, 90) }} @endif
|
| No automated label attempts yet. | ||||||||||
Import Summary
{{ $importSummary['total_rows'] }} rows · {{ $importSummary['imported'] }} imported · {{ $importSummary['skipped'] }} skipped · {{ $importSummary['errors'] }} errors
Messages ({{ count($importMessages) }})
@foreach(array_slice($importMessages, 0, 10) as $msg){{ $msg }}
@endforeach @if(count($importMessages) > 10)... and {{ count($importMessages) - 10 }} more
@endifUpload the PAMS fulfillment export (the same CSV the Order Fulfillment page generates). Items are matched to PAMS (supplier 74) order lines.
Required
Item matching columns
After import, the cron (every 15 min):
1. Pushes the PO to PAMS → work order created
2. Creates the Go-Parts Ship order (same as the Ship button) — PAMS prints labels there
HAZMAT parts (airbags / seat belts) get the PO push only — PAMS does the shipping.
Use the Buy Price export — its prices/address are what gets pushed to PAMS.
| Ext. Order ID | Item ID | Part # | Inv. ID | Ticket | Price | WO # | Dims | Status | GPS | Error | Created | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ $order->external_order_id }} | {{ $order->item_id }} | {{ $order->part_num }} @if($order->is_hazmat) HAZMAT @endif | {{ $order->pams_inventory_id }} | {{ $order->stock_ticket_number ?: '-' }} | {{ $order->unit_price !== null ? '$' . number_format($order->unit_price, 2) : '-' }} | {{ $order->pams_work_order ?: '-' }} | {{-- Did PAMS give us this part's dimensions? Only meaningful once the PO has actually been pushed — before that there has been no response to carry them. --}}@if($order->processed < \App\Models\PamsOrder::STATUS_ORDERED) — @elseif($order->pams_dims_status === \App\Models\PamsOrder::DIMS_OK) {{ $order->pams_length_in }}x{{ $order->pams_width_in }}x{{ $order->pams_height_in }} @else NO DIMS @endif | @php $statusStyles = [ -1 => 'background:#fef2f2;color:#991b1b;border:1px solid #fecaca;', 0 => 'background:#fffbeb;color:#92400e;border:1px solid #fde68a;', 1 => 'background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;', 2 => 'background:#f0fdf4;color:#166534;border:1px solid #bbf7d0;', 3 => 'background:#f5f3ff;color:#5b21b6;border:1px solid #ddd6fe;', 4 => 'background:#f3f4f6;color:#374151;border:1px solid #d1d5db;', // Blocked — PAMS: needs a person to email PAMS, so it is // styled as an alert rather than a neutral end state. 5 => 'background:#fff7ed;color:#9a3412;border:1px solid #fed7aa;', ]; @endphp {{ $order->status_label }} | @php $gpsStyles = [ 0 => 'background:#fffbeb;color:#92400e;border:1px solid #fde68a;', 1 => 'background:#f0fdf4;color:#166534;border:1px solid #bbf7d0;', 2 => 'background:#fef2f2;color:#991b1b;border:1px solid #fecaca;', 3 => 'background:#f3f4f6;color:#374151;border:1px solid #d1d5db;', // Held — PAMS flags disagree: needs a person to reconcile // how the part ships before anything is labelled. 4 => 'background:#fff7ed;color:#9a3412;border:1px solid #fed7aa;', ]; @endphp {{ $order->gps_label }} | {{ $order->created_at ? $order->created_at->format('m/d/Y') : '-' }} | @if($order->canRetry()) @endif | |
| No orders found | ||||||||||||