Unfulfilled items report?

Highlighted
Excursionist
22 0 7

When I come in in the morning we might have a dozen orders that need to be processed and shipped.  I would love it if I could print a list of all the items included in those 10 orders so that I have a complete list to pull the stock all at once.  

Right now I have to open each order individually to see what the person ordered, and either write it down, then go to the next order, etc., or pull each order individually. 

Anyone have thoughts on how to make this more efficient?

I looked at the product and order reports but can't seem to find a way to do it.  

Most simply, what I'm asking for is a list of all the individual items that meet both criteria of a) ordered on our website and b) are in "unfulfilled" status.

Thanks!

Amanda

Highlighted
Shopify Staff
Shopify Staff
148 0 7

Hi Amanda!

Jesse from Shopify here.

While the orders export will show the fulfillment status I wonder if using the filter for fulfillment status on the orders page will be of use to you here. For example: https://remixvintageshoes.myshopify.com/admin/orders?query=&fulfillment_status=unfulfilled ;

That link shows you all of the unfulfilled orders in your shop, both partial and unfulfilled.

That should make keeping track of those orders that still need to be processed a little easier, then if you wanted you could then export that page to get just the unfulfilled orders in CSV form if necessary.

Feel free to reach out at any time if you have any other questions!

http://docs.shopify.com/support

support@shopify.com

0 Likes
Highlighted
Excursionist
22 0 7

Hi Jesse,

Yes, I know how to to tell which orders are fulfilled.  That's not what I'm asking.  

I'm asking for a list of the items contained in those orders on one page so I don't have to open each order individually to create of list of products to pull.

Does that make sense? 

Highlighted
Shopify Staff
Shopify Staff
148 0 7

Hey Amanda!

We are absolutely on the same page. While we dont have a way to show the line items for each of your unfulfilled orders on one page in the admin, if you use the filter to narrow down to just your unfulfilled orders as I mentioned you can do an export which will give you the full breakdown of what is contained in each order.

I have also taken the liberty of writing this up as a feature request for us and added our conversation here as a use case. The more demand we see for that sort of thing from the rest of our merchants, the more likely we will see it considered for future updates.

Feel free to reach out at any time if you have any other questions!

http://docs.shopify.com/support

support@shopify.com

0 Likes
Highlighted
Excursionist
22 0 7

Thanks, Jason, I see what you mean.  Not sure why I didn't before, but maybe I exported the transactions insted of the orders or something.

Still, it's not a super user-friendly format - I'll have to cut or hide a lot of the columns in order to avoid printing lots of extra pages - but on a particularly busy order day, that would probably be faster than copying it all from the screen by hand! 

So thanks for your response and for writing it up as a feature request.  I appreciate it!

0 Likes
Highlighted
New Member
3 0 0

Hi we could really do with this function as well ,

i have tried to create a picking list via order printer that another shopify employee wrote, but it doesnt work.

i am trying to print a picking list for an order, where it only shows the items that are unfulfilled.. i.e 2xAAA and 1x BBB on order. i have been able to pick 1xAAA but then want to produce a production list for the remaining unpicked items, as we make all by hand.

here is the code they gave on a closed page, but doesnt work where some lines are already fulfilled:

<h3>Unfulfilled Items</h3>
<ul>
{% for item in line_items %}
  {% assign found_item = false %}
  {% for fulfilled_item in fulfillment.fulfillment_line_items %}
    {% if item.id == fulfilled_item.line_item.id %}
      {% assign found_item = true %}
      {% unless item.quantity == fulfilled_item.quantity %}
      <li>{{ item.title }}: {{ item.quantity | minus: fulfilled_item.quantity }}</li>
      {% endunless %}
    {% endif %}
  {% endfor %}
  {% unless found_item %}
  <li>{{ item.title }}: {{ item.quantity }}</li>
  {% endunless %}
{% endfor %}
</ul>

 

0 Likes
Highlighted
Shopify Partner
28 1 4

It's called a 'Picking List' - and should be basic functionality for any eCommerce software - yet we still don't have it in Shopify!

If Shopify would allow Order_Printer access to the 'customer..order' file, we could produce one easily.

{% for  order* in customer.orders %}
   /* Print some basic details about the order  e.g. : */
   {{ order_number }}   Date: {{ date }}  {{ financial_status }} Customer: {{ customer.name }} <br />

   {% for line_item in unfulfilled_line_items %}
      /* Print some details about the unfulllfilled items e.g. : */
      {{ line_item.quantity }}  off {{ line_item.sku }}  {{ line_item.title }}  <br />      
   {% endfor  %}
{% endfor  %}

* One could then 'select' (on the 'bulk action' filter) which orders to print.  Or one could limit (via code) to just the unfullfilled Orders.

Currently, the above code gives an (A4) page for each order!  - hardy enviromentally friendly - so we don't do/suggest it.

So, Shopify, why don't you allow access to e.g. the 'customer.orders' file?

Highlighted
Shopify Partner
28 1 4

Well, I've just  read here: https://docs.shopify.com/themes/liquid/objects/order

That it IS available to Order Printer.  Can someone help me understand why

{% for order in customer.orders %}
   {{ order_number }} {{ order.name }}  order_number  XXXtestoutputXXX
{% endfor  %}

Doesnt produce any output. - thanks

0 Likes
Highlighted
Shopify Partner
28 1 4

After 3 weeks of lack of real answers from the guru's, I have an official response from Shopify.

The documentation (as of today 24th March 2016) says it should work.  They are going to revise the documentation to match the limitation of their product.

What a shame!!

The documentation at https://docs.shopify.com/themes/liquid/objects/order
currently says:

 

order

The order object can be accessed in Liquid templates with customer.orders, in order email templates, and in apps such as Order Printer.

Without that access Shopify can't produce 'Picking Lists'

0 Likes
Highlighted

Hi All,

This thread got me thinking.. I've built a lot of templates for Order Printer, and not being able to do Picking Lists has always annoyed me. The issue has always been that Order Printer only gives you access to a single order at a time, so there was no way to create a list of orders.

Anyway, I spent this morning taking a crack at it.. and low and behold it's possible! :) The trick is to remove the page breaks that are part of the default styling, and add in your own page breaks.. that way each order does not take up a full page each but instead stack ontop of each other.

Here you go:

<!-- FREE VERSION - PICKING LIST TEMPLATE FOR SHOPIFY ORDER PRINTER          -->
<!-- More available at: https://apps.shopify.com/order-printer-templates     -->
<!-- This template is offered free of charge, without guarantee or support   -->
<!-- ENJOY :) FORSBERG+Two: http://www.forsbergplustwo.com                   -->

<style type="text/css">
  /* ### BASE - PAGE SIZING AND MARGIN SETUP NORMALIZATION ACROSS BROWSERS ### */
    @page {
      margin: 12mm !important;
      margin-top: 12mm !important;
      margin-right: 12mm !important;
      margin-bottom: 12mm !important;
      margin-left: 12mm !important;
    }
    .printer-inline-preview {
    page-break-before: avoid !important;
    page-break-after: avoid !important;
    clear:none;
    display: inline;
    }
    .printer-preview-content .printer-inline-preview {
    page-break-before: avoid !important;
    page-break-after: avoid !important;
    clear:none;
    display: inline;
    }
    .no-page-break {
      page-break-inside: avoid !important;
    }
    @media print {
      .safari {
        padding-top: 15px;
      }
      * {
        overflow: visible !important;
      }
      .printer-preview-content .printer-preview-content {
        padding-right: 10px;
      }
    }
    @media screen {
      .printer-preview-content .printer-preview-content {
        margin-right: auto;
        margin-left: auto;
        max-width: 620px;
      }
    }
    @media screen,print {
      /* ### BASE - TYPOGRAPHY AND REMOVAL OF STANDARD SHOPIFY STYLING ### */
      .printer-preview-content .t8187 * {
        color: #222;
        font-family: Helvetica, Arial, sans-serif;
        font-size: 13px;
        font-weight: 400;
        line-height: 16px;
        text-rendering: optimizeLegibility;
        margin: 0 0 0 0;
        padding: 0 0 0 0;
        -webkit-print-color-adjust: exact;
        overflow: visible !important;
      }
      .printer-preview-content .t8187 b,
      .printer-preview-content .t8187 b * {
        font-weight: bold;
      }
      .printer-preview-content .t8187 .text-right {
        text-align: right;
      }
      .printer-preview-content .t8187 .text-center {
        text-align: center;
      }

      /* ### BASE - GRID AND RE-USABLE LAYOUT COMPONENTS ### */
      .printer-preview-content .t8187 .row {
        width: 100%;
        display: block;
        clear: both;
      }
      .printer-preview-content .t8187 .row:after {
        content: "";
        display: table;
        clear: both;
      }
      .printer-preview-content .t8187 .col-xs-12 {
        float: left;
        min-height: 1px;
        margin-bottom: 32px;
      }
      .printer-preview-content .t8187 .col-xs-12 {
        width: 100%;
      }
      .printer-preview-content .t8187 .col-no-margin {
        margin-bottom: 0 !important;
      }
      .printer-preview-content .t8187 .clear-fix {
        clear: both;
      }
      /* ### BASE - TABLE STYLING ### */
      .printer-preview-content .t8187 table,
      .printer-preview-content .t8187 .table {
        width: 100%;
        max-width: 100%;
        background-color: transparent;
        border-collapse: collapse;
      }
      .printer-preview-content .t8187 table tbody tr {
        page-break-inside:avoid !important;
        page-break-after:auto !important;
      }
      .printer-preview-content .t8187 table tbody tr td {
        page-break-inside:avoid !important;
      }
      .printer-preview-content .t8187 th {
        white-space: nowrap;
        text-align: left;
        vertical-align: top;
        border-top: 0;
        border-bottom: 0;
      }
      .printer-preview-content .t8187 td {
        vertical-align: top;
        border-top: 0;
        border-bottom: 0;
      }
      .printer-preview-content .t8187 .order-table tbody > tr td {
        background-color: #FFFFFF;
      }
      .printer-preview-content .t8187 .pricing-table tbody > tr > td {
        background-color: #FFFFFF;
      }
      .printer-preview-content .t8187 th.order-table-qty {
        width: 10%;
      }
      /* ### BASE - LISTS RESET ### */
      .printer-preview-content .t8187 ul {
        list-style: none;
      }
      .printer-preview-content .t8187 li {
        color: {{ secondary_font_color }};
        list-style: none;
      }
      /* ### BASE - ADDITONAL COMMON SHARED TYPOGRAPHY AND ALIGNMENT ### */
      .printer-preview-content .t8187 .address {
        margin-right: 5%;
      }
    /* ### DESIGN SPECIFIC - TABLE HEADER ### */
    .printer-preview-content .t8187 .order-table thead tr th {
      padding-left: 5px;
      padding-right: 5px;
      border-top: 1px solid #222;
      padding-top: 5px;
      border-bottom: 1px solid #d3d3d3;
      padding-bottom: 5px;
      font-weight: bold;
      color: #222;
    }
    /* ### DESIGN SPECIFIC - TABLE BODY (SHARED) ### */
    .printer-preview-content .t8187 .order-table > tbody > tr > td {
      padding-left: 5px;
      padding-right: 5px;
      border-top: 0;
      padding-top: 5px;
      padding-bottom:5px;
    }
    /* ### DESIGN SPECIFIC - ORDER TABLE SPECIFIC ### */
    .printer-preview-content .t8187 .order-table tbody > tr > td.line-item-description,
    .printer-preview-content .t8187 .order-table tbody > tr > td.line-item-qty {
      border-bottom: 1px solid #eee;
      padding-bottom: 5px;
      padding-top: 0px;
      font-weight: bold;
      color: #222;
    }
    .printer-preview-content .t8187 .order-table tbody > tr > td.line-item-description p.line-item-sku {
      font-weight: normal;
    }
    .printer-inline-preview-first .printer-preview-content .t8187 .order-header-row {
        display: table-row !important;
    }
  }
</style>
<div class="printer-preview-content no-page-break" contenteditable="true" spellcheck="false" title="Click to edit text (changes will be printed but not saved)">
  <div class="t8187">
    <div class="row">
      <div class="col-xs-12 col-no-margin">
        <table class="order-table table" style="border-top: 1px solid #333333;">
          <thead>
            <tr class="order-header-row" style="display: none;">
              <th>Order</th>
              <th>Items</th>
              <th>Shipping</th>
              <th>Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td width="15%">
                <b>{{ order_name }}</b><br>
                <span class="text-muted">{{ date | date: "%d %B" }}</span>
              </td>
              <td width="40%">
                <table class="table">
                  <tbody>
                    {% for line_item in line_items %}
                    <tr>
                      <td class="line-item-description">
                        {{ line_item.title | replace: " - Default Title", "" }}
                        {% if line_item.sku != blank %}
                        <p class="line-item-sku">SKU: {{ line_item.sku }}</p>
                        {% endif %}
                        {% for p in line_item.properties %}
                        {% assign p_internal = p.first | slice: 0 %}
                        {% unless p.first contains "builder_id" or p.first contains "builder_info" or p.first contains "master_builder" or p_internal == "_" or p.last == "" or p.last == blank %}
                        <p class="line-item-property">{{ p.first }}: {{ p.last }}</p>
                        {% endunless %}
                        {% endfor %}
                      </td>
                      <td class="text-center line-item-qty">&times; {{ line_item.quantity }}</td>
                    </tr>
                    {% endfor %}
                  </tbody>
                </table>
              </td>
              <td width="30%">
                {% if shipping_method.title != blank %}<b>{{ shipping_method.title }}</b><br>{% endif %}
                <ul class="address">
                  {% if shipping_address and shipping_address != "" and shipping_address != nil %}
                    <li>{{ shipping_address.name }}</li>
                    {% if shipping_address.company != blank %}
                    <li>{{ shipping_address.company }}</li>
                    {% endif %}
                    <li>{{ shipping_address.address1 }}</li>
                    {% if shipping_address.address2 != blank %}
                    <li>{{ shipping_address.address2 }}</li>
                    {% endif %}
                    <li>{{ shipping_address.city }}, {% if shipping_address.province_code != blank %}{{ shipping_address.province_code }}{% else %}{{ shipping_address.province }}{% endif %} {{ shipping_address.zip | upcase }}</li>
                    {% if shop.country != shipping_address.country %}
                    <li>{{ shipping_address.country }}</li>
                    {% endif %}
                  {% endif %}
                  </ul>
              </td>
              <td width="15%">
                {{ note | newline_to_br }}
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</div>


It will still look like seperate orders on screen:
 


But when printed the magic kicks in, and they all stack nicely onto a single page:
 

DISCLAIMER: Because this works around the original styling of the app, if Shopify change their default styling in the app then this might stop working.. but until then.. ENJOY!

I've tested it in Chrome, Firefox and Safari and it works nicely in all of them. 

Feedback is more than welcome. I'll be working on a more feature rich version for my Order Printer Templates app, so if you want more customization options keep an eye out for them there: https://apps.shopify.com/order-printer-templates

Cheers,
Bjorn

Bjorn Forsberg
Chief Eternal Optimist
FORSBERG+two
www.forsbergplustwo.com

Bjorn Forsberg | FORSBERG+two | Award-winning Shopify Apps since 2011