Shopify Bundles & Packing Slip Formatting

Shopify Bundles & Packing Slip Formatting

PoshtaDesign
Visitor
1 0 4

We have been selling bundled items for years as a standard Shopify listing, and are considering switching them to a Bundle *HOWEVER*......

 

The default Packing Slip formatting doesn't show the name of the Bundle and its price, rather, it lists all the items in the bundle. We don't want that.

 

Is there a way in Bundles to format the Packing slip to just list the Bundle'd Item Name and its Price, and omit all the components of the bundle?

 

Doing so is a much more pleasing packing slip for the customer, and since our Bundles contain upwards of 11 items it will save 11 line-items on the packing slip.

Replies 5 (5)

daveuk100
Tourist
10 0 3

We have the same feedback and would like a solution to this.

 

It makes no sense to me that from a bundle product page liquid template, there is no way to even access the details of the individual products that make up the bundled product...but then on the checkout + order admin screen + packing slip it ONLY shows the individual products. That is a very confusing experience for the customer who purchased the bundled item, not the individual products.

 

This is also a pain when shipping international orders as the custom form will require us to have a declaration for every bundled product, instead of just one declaration for the bundled product itself.

 

I am in contact with some of the bundle team and I am providing them this + other feedback via email.  I hope we will have a solution soon.

 

Sportology
Excursionist
19 1 1

If you do get some good feedback - we would love to hear about it. We use a lot of bundles too and the packing slip - the piece of the order the customer sees - has the the breakdown - and the order sheet (that the customer should not see) has the bundle name. Please help!

Paul Wright
daveuk100
Tourist
10 0 3

For what it's worth, I didn't hear anything back from the Bundles team contact after I sent them more feedback. I had been using bundles intensively for a few weeks and had a lot of feedback to share (and I certainly did! sent a lot of detailed feedback their way...).

 

So...I have no idea if they plan to continue investing in this app or not. Bundles just feels like a feature that should already be baked into Shopify, not a separate app. I think some of the weird issues that we see with Bundles today are probably caused by it not being a built-in shopify feature and hitting various limitations as a result of being delivered as a app.

 

Anyhow...we ended up using the following code in our packing slip. It has worked well for us so far. Instead of showing every item from the bundle on the packing slip, this code will just show the bundle name (1 line item) and will not show the items within the bundle.

 

<div class="wrapper">
  <div class="header">
    <div class="shop-title">
      <p class="to-uppercase">
        {{ shop.name }}
      </p>
    </div>
    <div class="order-title">
      <p class="text-align-right">
        Order {{ order.name }}
      </p>
      <p class="text-align-right">
        {{ order.created_at | date: "%B %e, %Y" }}
      </p>
    </div>
  </div>
  <div class="customer-addresses">
    <div class="shipping-address">
      <p class="subtitle-bold to-uppercase">
        {% if delivery_method.instructions != blank %}
          Delivery to
        {% else %}
          Ship to
        {% endif %}
      </p>
      <p class="address-detail">
        {% if shipping_address != blank %}
          {{ shipping_address.name }}
          {% if shipping_address.company != blank %}
            <br>
            {{ shipping_address.company }}
          {% endif %}
          <br>
          {{ shipping_address.address1 }}
          {% if shipping_address.address2 != blank %}
            <br>
            {{ shipping_address.address2 }}
          {% endif %}
          {% if shipping_address.city_province_zip != blank %}
            <br>
            {{ shipping_address.city_province_zip }}
          {% endif %}
          <br>
          {{ shipping_address.country }}
          {% if shipping_address.phone != blank %}
            <br>
            {{ shipping_address.phone }}
          {% endif %}
        {% else %}
          No shipping address
        {% endif %}
      </p>
    </div>
    <div class="billing-address">
      <p class="subtitle-bold to-uppercase">
        Bill to
      </p>
      <p class="address-detail">
        {% if billing_address != blank %}
          {{ billing_address.name }}
          {% if billing_address.company != blank %}
            <br>
            {{ billing_address.company }}
          {% endif %}
          <br>
          {{ billing_address.address1 }}
          {%  if billing_address.address2 != blank %}
            <br>
            {{ billing_address.address2 }}
          {% endif %}
          {% if billing_address.city_province_zip != blank %}
            <br>
            {{ billing_address.city_province_zip }}
          {% endif %}
          <br>
          {{ billing_address.country }}
        {% else %}
          No billing address
        {% endif %}
      </p>
    </div>
  </div>
  <hr>
  <div class="order-container">
    <div class="order-container-header">
      <div class="order-container-header-left-content">
        <p class="subtitle-bold to-uppercase">
          Items
        </p>
      </div>
      <div class="order-container-header-right-content">
        <p class="subtitle-bold to-uppercase">
          Quantity
        </p>
      </div>
    </div>
 
    {% comment %}
    To adjust the size of line item images, change desired_image_size.
    The other variables make sure your images print at high quality.
    {% endcomment %}
    {% assign desired_image_size = 58 %}
    {% assign resolution_adjusted_size = desired_image_size | times: 300 | divided_by: 72 | ceil %}
    {% capture effective_image_dimensions %}
      {{ resolution_adjusted_size }}x{{ resolution_adjusted_size }}
    {% endcapture %}
 
    {% assign activegroup = '' %}
    {% for line_item in line_items_in_shipment %}
      {% if line_item.groups and line_item.groups.size > 0 %}
        {% assign currentgroup = line_item.groups.first.title %}
        {% if activegroup == currentgroup %}
           {% continue %}
        {% else %}
           {% assign activegroup = currentgroup %}
        {% endif %}
    
      <div class="flex-line-item">
        <div class="flex-line-item-description">
          <p>
            <span class="line-item-description-line">
              {{ currentgroup }}
            </span>
          </p>
        </div>
        <div class="flex-line-item-quantity">
          <p class="text-align-right">
            {{ line_item.shipping_quantity }} of {{ line_item.quantity }}
          </p>
        </div>
      </div>
    
      {% endif %}    
    {% endfor %}
 
    {% for line_item in line_items_in_shipment %}
      {% unless line_item.groups and line_item.groups.size > 0 %}
 
      <div class="flex-line-item">
        <div class="flex-line-item-description">
          <p>
            <span class="line-item-description-line">
              {{ line_item.title }}
            </span>
            {% if line_item.variant_title != blank %}
            <span class="line-item-description-line">
              {{ line_item.variant_title }}
            </span>
            {% endif %}
{% for group in line_item.groups %}
              <span class="line-item-description-line">
                Part of: {{ group.title }}
              </span>
            {% endfor %}
          </p>
        </div>
        <div class="flex-line-item-quantity">
          <p class="text-align-right">
            {{ line_item.shipping_quantity }} of {{ line_item.quantity }}
          </p>
        </div>
      </div>
    
      {% endunless %}    
    {% endfor %}
    
  </div>
  <hr>
  {% if delivery_method.instructions != blank %}
    <div class="notes">
      <p class="subtitle-bold to-uppercase">
        Delivery instructions
      </p>
      <p class="notes-details">
        {{ delivery_method.instructions }}
      </p>
    </div>
  {% endif %}
  <div class="footer">
    <p>
      Thank you!
    </p>
    <p>
      <strong>
        {{ shop.name }}
      </strong>
      <br>
      {{ shop.email }}
    </p>
  </div>
</div>

malamutemama9
Visitor
1 0 0

I am having the exact opposite issue. Care to share your HTML coding? 

 

This is ours that does not do the line by line breakdown.

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Packing Slip</title>
    <style>
        body { font-family: Arial, sans-serif; font-size: 12px; margin: 20px; }
        .packing-slip { padding: 20px; width: 600px; }
        .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
        .footer { text-align: center; margin-top: 20px; }
        .info-container { display: flex; justify-content: space-between; margin-bottom: 20px; }
        .info { width: 48%; }
        table { width: 100%; border-collapse: collapse; }
        th, td { padding: 5px; text-align: left; }
        th:nth-child(2), td:nth-child(2) { text-align: right; }
        .separator { border-top: 1px solid black; margin: 10px 0; }
    </style>
</head>
<body>
    <div class="packing-slip">
        <div class="header">
            <img src="COMPANY LOGO" style="width: 180px; height: 60px;">
            <div>
                <h2>Packing Slip</h2>
                <p>Order #: {{ order.name }}</p>
                <p>Date: {{ order.created_at | date: "%B %d, %Y" }}</p>
            </div>
        </div>
        <div class="info-container">
            <div class="info">
                <strong>{% if delivery_method.instructions != blank %}Delivery to{% else %}Ship to{% endif %}:</strong><br>
                {{ shipping_address.name }}<br>
                {{ shipping_address.address1 }}{% if shipping_address.address2 %}, {{ shipping_address.address2 }}{% endif %}<br>
                {{ shipping_address.city }}, {{ shipping_address.province_code }} {{ shipping_address.zip }}, {{ shipping_address.country }} {% if shipping_address.phone != blank %}
            <br>
            {{ shipping_address.phone }}
          {% endif %}
            </div>
            <div class="info">
                <strong>Bill to:</strong><br>
                {{ billing_address.name }}<br>
                {{ billing_address.address1 }}{% if billing_address.address2 %}, {{ billing_address.address2 }}{% endif %}<br>
                {{ billing_address.city }}, {{ billing_address.province_code }} {{ billing_address.zip }}, {{ billing_address.country }}
            </div>
        </div>
    </div>
    <div class="order-title">
        <p class="text-align-left">Order {{ order.name }}</p>    
        <table>
            <tr><th>Items</th><th>Quantity</th></tr>
        </table>
        <div class="separator"></div>
        <table>
            {% for line_item in order.line_items %}
            {% if line_item.bundle_title != blank %}
                <tr><td colspan="2"><strong>{{ line_item.bundle_title }}</strong></td></tr>
            {% endif %}
            <tr>
                <td>{{ line_item.title }}
                    {% if line_item.bundle_variant_title != blank %}
                        <br><small>Bundle Variant: {{ line_item.bundle_variant_title }}</small>
                    {% endif %}
                </td>
                <td>{{ line_item.quantity }}</td>
            </tr>
            {% endfor %}
        </table>
        <div class="separator"></div>
        {% if order.note != blank %}
        <div class="notes">
            <p><strong>Notes:</strong> {{ order.note }}</p>
        </div>
        {% endif %}
        {% if delivery_method.instructions != blank %}
        <div class="notes">
            <p><strong>Delivery Instructions:</strong> {{ delivery_method.instructions }}</p>
        </div>
        {% endif %}
    </div>
    {% unless includes_all_line_items_in_order %}
    <hr class="subdued-separator">
    <p class="missing-line-items-text">
        There are other items from your order not included in this shipment.
    </p>
    {% endunless %}
    <div class="footer">
        <p>Thank you for supporting our small business!</p>
        <p><strong>Company Name</strong><br>Company Address<br>Company Email</p>
    </div>
</body>
</html>

daveuk100
Tourist
10 0 3

Shared our code above too.