Fulfillment & Tracking - Sync Netsuite Fulfillment & Tracking - Sync Netsuite

Fulfillment & Tracking

Estimated reading: 8 minutes 6 views

Fulfillment & Tracking

Automatically import fulfillment information from NetSuite to WooCommerce, including tracking numbers, shipping carriers, and order completion status. Keep customers informed with automatic tracking notifications.

Fulfillment Sync Overview

When orders are fulfilled in NetSuite:

  • Auto-Import: Fulfillment records automatically sync to WooCommerce
  • Tracking Numbers: Add carrier and tracking info to orders
  • Status Update: Change order status to Completed
  • Customer Emails: Automatic shipping notification with tracking
  • Customer Portal: Tracking visible in customer account
  • Partial Fulfillments: Support for split shipments

How Fulfillment Sync Works

  1. Order Fulfilled in NetSuite: Warehouse creates Item Fulfillment
  2. Scheduled Check: Plugin checks for new fulfillments (hourly/daily)
  3. Match to WooCommerce: Links fulfillment to WooCommerce order via Sales Order ID
  4. Extract Details: Gets tracking number, carrier, ship date
  5. Update Order: Adds tracking info to WooCommerce order
  6. Status Change: Updates order status to Completed (configurable)
  7. Send Email: Triggers shipping confirmation email to customer
  8. Store Meta: Saves NetSuite Fulfillment ID for reference

Configuration

Enable Fulfillment Sync

  1. Navigate to Settings > Fulfillment
  2. Enable Fulfillment Synchronization
  3. Configure settings (see table below)
  4. Save changes

Fulfillment Settings

Setting Options Description
Enable Fulfillment Sync Yes/No Master switch for fulfillment imports
Sync Frequency Hourly / Every 6 Hours / Daily How often to check for fulfillments
Update Order Status Yes/No Change WooCommerce status to Completed
Completed Status Completed / Custom Which status to set on fulfillment
Add Tracking Info Yes/No Add tracking numbers to orders
Send Customer Email Yes/No Email customer with tracking details
Partial Fulfillments Keep Pending / Mark Completed How to handle partially fulfilled orders
Sync Lookback Period Number of days How far back to check for fulfillments

Tracking Information

Data Synced from NetSuite

NetSuite Field WooCommerce Storage Description
Tracking Number Order Meta: _tracking_number Carrier tracking code
Ship Via Order Meta: _tracking_provider Shipping carrier name
Ship Date Order Meta: _date_shipped Date package shipped
Fulfillment ID Order Meta: _netsuite_fulfillment_id NetSuite internal ID
Package Count Order Meta: _package_count Number of packages

Supported Carriers

The plugin auto-detects and maps NetSuite carriers to WooCommerce:

NetSuite Carrier WooCommerce Carrier Tracking URL
UPS UPS https://www.ups.com/track?tracknum={tracking}
FedEx FedEx https://www.fedex.com/fedextrack/?trknbr={tracking}
USPS USPS https://tools.usps.com/go/TrackConfirmAction?tLabels={tracking}
DHL DHL https://www.dhl.com/en/express/tracking.html?AWB={tracking}
Canada Post Canada Post https://www.canadapost.ca/track?pin={tracking}

Custom Carriers: Add custom carrier mappings in Settings > Fulfillment > Carrier Mapping

Customer Experience

Shipping Notification Email

When fulfillment is synced, customers receive an email with:

  • Confirmation that order has shipped
  • Tracking number (clickable link)
  • Carrier name
  • Expected delivery date (if available)
  • List of items included in shipment
  • Link to track shipment on carrier website

My Account Tracking

Customers can view tracking in their account:

  1. Log in to My Account
  2. Go to Orders
  3. View order details
  4. See Tracking Information section with:
    • Carrier name
    • Tracking number
    • Track Package button (links to carrier site)
    • Ship date

Order Status Page

Tracking info displays on order received/status page:

  • Visible without login (via order lookup)
  • Shows same tracking details as My Account
  • Updates automatically when synced

Partial Fulfillments

Handle orders fulfilled in multiple shipments:

Multiple Tracking Numbers

When order has multiple fulfillments:

  • Each fulfillment creates a separate tracking entry
  • All tracking numbers displayed to customer
  • Customer email lists all shipments
  • Order notes show individual fulfillment dates

Status Handling Options

Option Behavior Best For
Keep Pending Status stays “Processing” until all items fulfilled Strict completion requirements
Mark Completed Status changes to “Completed” on first fulfillment Most stores (customer sees progress)
Partial Status Status changes to “Partially Shipped” custom status Clear communication of partial fulfillments

Configure in: Settings > Fulfillment > Partial Fulfillments

Example Scenario

Order with 3 items fulfilled in 2 shipments:

  1. Order Placed: Status = Processing
  2. First Fulfillment (2 items):
    • Tracking #1 added to order
    • Customer email sent with Tracking #1
    • Status = Partially Shipped (if configured)
  3. Second Fulfillment (1 item):
    • Tracking #2 added to order
    • Customer email sent with Tracking #2
    • Status = Completed

Manual Fulfillment Sync

Via Admin Interface

  1. Navigate to WooCommerce > Orders
  2. Open the order
  3. Scroll to NetSuite Fulfillment meta box
  4. Click Check for Fulfillment
  5. Tracking info updates if fulfillment exists

Via WP-CLI

# Check for fulfillments for all orders
wp woons sync fulfillments

# Check specific order
wp woons sync fulfillment --order=12345

# Check orders in date range
wp woons sync fulfillments --from=2024-01-01 --to=2024-01-31

# Force re-sync (even if already synced)
wp woons sync fulfillments --force

Bulk Fulfillment Check

  1. Navigate to WooCommerce > NetSuite > Tools
  2. Select Bulk Fulfillment Sync
  3. Choose criteria:
    • All Processing orders
    • Orders without tracking
    • Orders from date range
  4. Click Check for Fulfillments
  5. View results summary

Tracking Display Customization

Custom Tracking Template

Customize how tracking appears on order pages:

  1. Copy template file from plugin to your theme:
    • From: wp-content/plugins/woo-netsuite/templates/tracking-info.php
    • To: wp-content/themes/your-theme/woocommerce/woons/tracking-info.php
  2. Edit the template to customize HTML/CSS
  3. Changes persist through plugin updates

Programmatic Customization

// Modify tracking display
add_filter('woons_tracking_display', function($html, $tracking_data, $order) {
    // Add custom branding
    $html .= '<div class="custom-tracking">';
    $html .= '<p>Your package is on its way!</p>';
    $html .= '<p>Carrier: ' . $tracking_data['carrier'] . '</p>';
    $html .= '<p>Tracking: <a href="' . $tracking_data['url'] . '">' . $tracking_data['number'] . '</a></p>';
    $html .= '</div>';
    
    return $html;
}, 10, 3);

Email Notification Customization

Edit Shipping Email Template

  1. Navigate to WooCommerce > Settings > Emails
  2. Click on Completed Order email
  3. Customize email content
  4. Use placeholders:
    • {tracking_number} – Tracking number
    • {tracking_carrier} – Carrier name
    • {tracking_url} – Tracking URL
    • {ship_date} – Ship date
  5. Save changes

Custom Email Logic

// Modify email subject for shipped orders
add_filter('woocommerce_email_subject_customer_completed_order', function($subject, $order) {
    $tracking = get_post_meta($order->get_id(), '_tracking_number', true);
    
    if ($tracking) {
        $subject = "Your order has shipped! Tracking: {$tracking}";
    }
    
    return $subject;
}, 10, 2);

// Add tracking to email
add_action('woocommerce_email_before_order_table', function($order, $sent_to_admin, $plain_text, $email) {
    if ($email->id === 'customer_completed_order') {
        $tracking_number = get_post_meta($order->get_id(), '_tracking_number', true);
        $tracking_carrier = get_post_meta($order->get_id(), '_tracking_provider', true);
        $tracking_url = woons_get_tracking_url($tracking_carrier, $tracking_number);
        
        echo '<h2>Tracking Information</h2>';
        echo '<p>Carrier: ' . $tracking_carrier . '</p>';
        echo '<p>Tracking: <a href="' . $tracking_url . '">' . $tracking_number . '</a></p>';
    }
}, 10, 4);

Monitoring Fulfillment Sync

Order Meta Box

Each order displays fulfillment information:

  • Fulfillment Status: Not Fulfilled / Partially Fulfilled / Fully Fulfilled
  • NetSuite Fulfillment ID(s): Internal ID(s) of fulfillment(s)
  • Tracking Number(s): All tracking numbers
  • Carrier(s): Shipping carrier names
  • Ship Date(s): Date(s) packages shipped
  • Last Checked: When last checked for fulfillments

Fulfillment Dashboard

  1. Navigate to WooCommerce > NetSuite > Fulfillments
  2. View fulfillment overview:
    • Orders awaiting fulfillment
    • Recently fulfilled orders
    • Fulfillment sync errors
    • Average fulfillment time
  3. Filter by status, date range, carrier

Troubleshooting Fulfillment Sync

Issue Cause Solution
Fulfillment Not Syncing Sales Order not linked Verify order has NetSuite Sales Order ID
No Tracking Number Tracking not entered in NetSuite Ensure tracking added to Item Fulfillment
Wrong Carrier Carrier name doesn’t match Check carrier mapping in settings
Email Not Sent Email disabled or failed Check WooCommerce email settings and logs
Duplicate Tracking Fulfillment synced multiple times Check for duplicate sync jobs in queue
Status Not Updated Status update disabled Enable “Update Order Status” in settings

Advanced Features

Conditional Fulfillment Processing

// Skip fulfillment sync for specific orders
add_filter('woons_should_sync_fulfillment', function($should_sync, $order, $fulfillment_data) {
    // Don't sync fulfillments for subscription renewal orders
    if ($order->get_meta('_subscription_renewal') === 'yes') {
        return false;
    }
    
    return $should_sync;
}, 10, 3);

Custom Tracking URLs

// Add custom carrier tracking URL
add_filter('woons_tracking_url', function($url, $carrier, $tracking_number) {
    if ($carrier === 'Custom Carrier') {
        return "https://customcarrier.com/track?id={$tracking_number}";
    }
    
    return $url;
}, 10, 3);

Fulfillment Webhooks

Trigger custom actions when fulfillment is synced:

// Hook into fulfillment sync
add_action('woons_fulfillment_synced', function($order_id, $fulfillment_data) {
    // Send SMS notification
    // Update external system
    // Log to custom database
    // etc.
}, 10, 2);

Best Practices

  • Enable Customer Emails: Keep customers informed automatically
  • Check Frequently: Hourly sync recommended for timely updates
  • Validate Tracking: Ensure tracking numbers entered correctly in NetSuite
  • Test Email Template: Preview shipping emails before going live
  • Carrier Mapping: Verify all carriers properly mapped
  • Monitor Sync Log: Regularly check for fulfillment sync errors
  • Partial Fulfillment Strategy: Choose appropriate status handling

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Share this Doc

Fulfillment & Tracking

Or copy link

CONTENTS