Commission Packing List Import

{{-- Session Messages --}} @if(session()->has('message'))
{{ session('message') }}
@endif {{-- Customer Selection --}}
@error('selectedCustomer')
{{ $message }}
@enderror
@error('selectedSeason')
{{ $message }}
@enderror Filter packing lists by season (optional)
{{-- File Upload --}} @if(!empty($selectedCustomer))
@error('packingListFiles')
{{ $message }}
@enderror @error('packingListFiles.*')
{{ $message }}
@enderror Supported formats: PDF, Excel (.xlsx, .xls). Max 10MB per file.
Check this to match packing lists to lines that have already been marked as shipped/complete manually. Useful for generating invoices from existing completed shipments. Will not match to already invoiced lines.
@if(!empty($packingListFiles))
Selected Files:
    @foreach($packingListFiles as $file)
  • {{ $file->getClientOriginalName() }} ({{ number_format($file->getSize() / 1024, 1) }} KB)
  • @endforeach
@endif
{{-- Action Buttons --}}
@else
Please select a customer to continue.
@endif {{-- Processing Status --}} @if($isProcessing)
Processing files, please wait...
@endif {{-- Validation Errors --}} @if(!empty($validationErrors))
Validation Errors
    @foreach($validationErrors as $error)
  • {{ $error }}
  • @endforeach
@endif {{-- Data Preview --}} @if($showPreview && !empty($extractedData))

Packing List Preview

{{-- Summary Stats --}}
{{ $extractedData['metadata']['files_processed'] ?? 0 }}

Files

{{ count($extractedData['packing_lists'] ?? []) }}

Packing Lists

@if(!empty($extractedData['metadata']['invoice_data']['invoice_no']) || !empty($extractedData['metadata']['invoice_data']['invoice_number']))
{{ $extractedData['metadata']['invoice_data']['invoice_no'] ?? $extractedData['metadata']['invoice_data']['invoice_number'] }}

Factory Invoice

@endif
{{-- Multi-file Information --}} @if(!empty($extractedData['metadata']['filenames']) && count($extractedData['metadata']['filenames']) > 1)
Multiple Files Processed:
    @foreach($extractedData['metadata']['filenames'] as $filename)
  • {{ $filename }}
  • @endforeach
@endif {{-- Preview Table --}}
@forelse($this->getPreviewData() as $item) @empty @endforelse
Status Style Color Order Line Total Qty Invoice Price Loop Price Cartons Size Breakdown Ex-Factory
{!! $item['status_badge'] !!} {{ $item['style'] }} {{ $item['color'] }} @if($item['order_line_display']) {{ $item['order_line_display'] }} @elseif(!empty($item['possible_matches'])) @else N/A @endif {{ $item['total_qty'] }} @if($item['invoice_unit_price']) £{{ number_format($item['invoice_unit_price'], 2) }} @else N/A @endif @if($item['system_unit_price']) £{{ number_format($item['system_unit_price'], 2) }} @if($item['price_match'] === 'higher')
+£{{ number_format(abs($item['price_difference']), 2) }} @elseif($item['price_match'] === 'lower')
-£{{ number_format(abs($item['price_difference']), 2) }} @endif @else N/A @endif
{{ $item['cartons'] }} {{ $item['size_breakdown'] }} {{ $item['exfty'] }}
No packing list data to preview
File Total: {{ $extractedData['_file_total'] ?? 0 }}
{{-- Invoice Metadata --}} @if(!empty($extractedData['metadata']['invoice_data']['invoice_no']) || !empty($extractedData['metadata']['invoice_data']['invoice_number']) || !empty($extractedData['metadata']['invoice_data']['po_number']) || !empty($extractedData['metadata']['invoice_data']['net_weight']) || !empty($extractedData['metadata']['invoice_data']['gross_weight']))
@if(!empty($extractedData['metadata']['invoice_data']['invoice_no']) || !empty($extractedData['metadata']['invoice_data']['invoice_number']))
Factory Invoice:
{{ $extractedData['metadata']['invoice_data']['invoice_no'] ?? $extractedData['metadata']['invoice_data']['invoice_number'] }}
@endif @if(!empty($extractedData['metadata']['invoice_data']['po_number']))
PO Number:
{{ $extractedData['metadata']['invoice_data']['po_number'] }}
@endif @if(!empty($extractedData['metadata']['invoice_data']['net_weight']))
Net Weight:
{{ $extractedData['metadata']['invoice_data']['net_weight'] }} KGS
@endif @if(!empty($extractedData['metadata']['invoice_data']['gross_weight']))
Gross Weight:
{{ $extractedData['metadata']['invoice_data']['gross_weight'] }} KGS
@endif
@endif {{-- Save/Import Buttons --}}
Save Only: Saves shipped quantities without marking as complete (for review).
Save & Mark as Shipped: Saves quantities and marks lines as complete.
{{-- Zoho Invoice Creation Section --}}
Create Zoho Invoice (Optional)
@if($zohoConnected)
Zoho is connected
@if(!$this->isFinanceUser()) Finance user permission required to change @endif
Automatically populated from Loop
@if(!$this->isFinanceUser()) Finance user permission required to change @endif
@if(!$this->isFinanceUser()) Finance user permission required to change @endif
@if(!$this->isFinanceUser()) Finance user permission required to change @endif
Creates a draft invoice in Zoho and sends notification to neil@roberttodds.com @else
Zoho is not connected
@endif
@endif {{-- Import Results --}} @if(!empty($importResults))

Import Results

@if($importResults['success'])
Import Completed Successfully!
  • Shipment Lines Updated: {{ $importResults['shipment_lines_updated'] }}
@else
Import Failed
    @foreach($importResults['errors'] as $error)
  • {{ $error }}
  • @endforeach
@endif
@endif
{{-- Loading Overlay --}} @if($isProcessing)
Processing...

Please wait while we process your packing lists

@endif