@php // Get company information based on system setting (admin or seller) $seller = $order->getCompanyInfo(); // Get NinjaVan settings or fallback to seller/config data $ninjavanSettings = $seller->ninjavanSetting; // Data - Use database settings first, then seller profile, then config $senderName = $ninjavanSettings->sender_name ?? $seller->company_name ?? $seller->name; $senderPhone = $ninjavanSettings->sender_phone ?? $seller->company_phone ?? ''; $senderEmail = $ninjavanSettings->sender_email ?? $seller->email ?? ''; $senderAddr = $ninjavanSettings->sender_address ?? $seller->company_address ?? ''; $senderPostcode = $ninjavanSettings->sender_postcode ?? $seller->company_postcode ?? ''; $senderCity = $ninjavanSettings->sender_city ?? $seller->company_city ?? ''; $senderState = $ninjavanSettings->sender_state ?? $seller->company_state ?? ''; $shipperId = $ninjavanSettings->shipper_id ?? 'N/A'; // Support both WooCommerce format (first_name/last_name) and sales page format (name) $recName = $order->shipping['name'] ?? $order->billing['name'] ?? trim(($order->shipping['first_name'] ?? $order->billing['first_name'] ?? '') . ' ' . ($order->shipping['last_name'] ?? $order->billing['last_name'] ?? '')); $recPhone = $order->billing['phone'] ?? ''; $recEmail = $order->billing['email'] ?? ''; // Support both WooCommerce format (address_1) and sales page format (address) $recAddr1 = $order->shipping['address_1'] ?? $order->shipping['address'] ?? $order->billing['address_1'] ?? $order->billing['address'] ?? ''; $recAddr2 = $order->shipping['address_2'] ?? $order->billing['address_2'] ?? ''; $recPostcode = $order->shipping['postcode'] ?? $order->billing['postcode'] ?? ''; $recCity = $order->shipping['city'] ?? $order->billing['city'] ?? ''; $recState = $order->shipping['state'] ?? $order->billing['state'] ?? ''; // Service type $serviceType = $order->isCOD() ? 'COD' : 'Parcel'; // Generate Barcode $generator = new \Picqer\Barcode\BarcodeGeneratorSVG(); $barcodeSvg = $generator->getBarcode($order->tracking_number ?? 'N/A', \Picqer\Barcode\BarcodeGeneratorSVG::TYPE_CODE_128); $barcodeBase64 = base64_encode($barcodeSvg); // QR Data - NinjaVan format: Tracking number + recipient info $qrData = implode('|', [ $order->tracking_number ?? 'N/A', $recName, $recPhone, $recAddr1, $recPostcode, $recCity, $recState, $serviceType, ]); // QR code (30mm = ~113 pixels at 96 DPI, use 220 for better quality) $renderer = new \BaconQrCode\Renderer\ImageRenderer( new \BaconQrCode\Renderer\RendererStyle\RendererStyle(220, 0), new \BaconQrCode\Renderer\Image\SvgImageBackEnd() ); $writer = new \BaconQrCode\Writer($renderer); $qrCodeSvg = $writer->writeString($qrData); $qrCode = base64_encode($qrCodeSvg); // Check for logos - Use database settings first $ninjavanLogoPath = null; $companyLogoPath = null; if ($ninjavanSettings && $ninjavanSettings->ninjavan_logo_path) { // Check if it's new public path format (/images/...) if (str_starts_with($ninjavanSettings->ninjavan_logo_path, '/images/')) { $ninjavanLogoPath = public_path($ninjavanSettings->ninjavan_logo_path); } else { // Old storage path format $ninjavanLogoPath = storage_path('app/public/' . $ninjavanSettings->ninjavan_logo_path); } } elseif (file_exists(public_path('images/logos/ninjavan.png'))) { $ninjavanLogoPath = public_path('images/logos/ninjavan.png'); } if ($ninjavanSettings && $ninjavanSettings->company_logo_path) { // Check if it's new public path format (/images/...) if (str_starts_with($ninjavanSettings->company_logo_path, '/images/')) { $companyLogoPath = public_path($ninjavanSettings->company_logo_path); } else { // Old storage path format $companyLogoPath = storage_path('app/public/' . $ninjavanSettings->company_logo_path); } } elseif ($seller->company_logo) { // Check if it's new public path format (/images/...) if (str_starts_with($seller->company_logo, '/images/')) { $companyLogoPath = public_path($seller->company_logo); } else { // Absolute path $companyLogoPath = $seller->company_logo; } } elseif (file_exists(public_path('images/logos/company.png'))) { $companyLogoPath = public_path('images/logos/company.png'); } $hasNinjavanLogo = $ninjavanLogoPath && file_exists($ninjavanLogoPath); $hasCompanyLogo = $companyLogoPath && file_exists($companyLogoPath); @endphp
@if($hasNinjavanLogo) @else
NINJA
VAN
@endif
Barcode
{{ $order->tracking_number ?? 'N/A' }}
{{ $serviceType }}
@if($hasCompanyLogo) @else
{{ Str::limit($senderName, 15) }}
@endif
FROM (Pengirim)
{{ $senderName }}
Phone: {{ App\Helpers\PhoneHelper::display($senderPhone) }}
Address:
{{ $senderAddr }}, {{ $senderPostcode }} {{ $senderCity }}, {{ $senderState }}.
Shipper ID:
{{ $shipperId }}
TO (Penerima)
{{ $recName }}
Phone: {{ App\Helpers\PhoneHelper::display($recPhone) }}
Address:
{{ $recAddr1 }}@if($recAddr2), {{ $recAddr2 }}@endif, {{ $recPostcode }} {{ $recCity }}, {{ $recState }}.
QR
{{ $recPostcode }}
PARCEL DETAILS
Order Date: {{ $order->date_created ? $order->date_created->format('d/m/Y') : now()->format('d/m/Y') }}
Order ID: #{{ $order->global_order_id ?? $order->order_number }}
Weight: {{ $ninjavanSettings->default_weight ?? config('ninjavan.defaults.weight', '0.5') }} Kg
Dimensions: {{ $ninjavanSettings->default_dimension_l ?? '1' }}cm x {{ $ninjavanSettings->default_dimension_w ?? '1' }}cm x {{ $ninjavanSettings->default_dimension_h ?? '1' }}cm
@if($order->isCOD())
COD: {{ $order->formatCurrency($order->total) }}
@endif @php $hideProductNames = $ninjavanSettings->hide_product_names ?? false; @endphp @if(!$hideProductNames && is_array($order->line_items) && count($order->line_items) > 0)
@foreach($order->line_items as $index => $item) @if($index < 3) {{ $item['quantity'] ?? 1 }}x {{ Str::limit($item['name'] ?? 'Item', 40) }}
@endif @endforeach @if(count($order->line_items) > 3) +{{ count($order->line_items) - 3 }} more items @endif
@endif
@if(is_array($order->line_items) && count($order->line_items) > 0)
PACKING LIST (SKU x QTY)
@foreach($order->getExpandedLineItems() as $expandedItem) @php $item = $expandedItem['item']; $isBundle = $expandedItem['is_bundle']; $bundleDetails = $expandedItem['bundle_details']; $sku = $item['sku'] ?? $item['id'] ?? 'N/A'; $quantity = $item['quantity'] ?? 1; @endphp @if($isBundle && $bundleDetails) @foreach($bundleDetails['items'] as $bundleItem)
{{ $bundleItem['sku'] ?? 'N/A' }} x {{ $bundleItem['quantity'] * $quantity }}
@endforeach @else
{{ $sku }} x {{ $quantity }}
@endif @endforeach
@endif