Shopify Admin - Picking List

Dek_Burdle
Shopify Partner
3 0 0

Hi all,

 

I am looking for any advise on creating a picking list for our Shopify Store.

 

The items we sell are made up of a number of boxes. Some items are 1 or 2 boxes and others can be 20+ individual pieces.

 

We currently have a in-house solution where we have created hard copy picking lists for every item we sell, not only is this expensive & consumes a lot of space, it is also vulnerable to human error & not a flexible system.

 

My question is - is there any apps out there which will allow me to set the picking lists for each product & only show them within the Shopify Admin Order page? Or have an action to generate the picking list for the order?

 

This is only required for 50% of our orders as the rest are overseas or interstate & our shipping system generates labels for these.

 

An example would be the following:

 

Someone orders a Blue - Original Funky Monkey Bars.

 

Picking list is generated showing:

1 x A - Blue

2 x B - Silver

2 x C1 - Blue

1 x D13 - Bue

1 x U1 

 

Most of our frames have 8 variants which have been set up in the system.

I am yet to set up the individual boxes in our Shopify system as we don't currently sell them separately.

 

Any advice or recommendations would be greatly appreciated.

 

Dek

0 Likes
PaulNewton
Shopify Partner
2576 134 438

Have you tried some of the off the shelf apps? https://apps.shopify.com/browse/orders-and-shipping-in-house-fulfillment


@Dek_Burdle wrote:

We currently have a in-house solution where we have created hard copy picking lists for every item we sell, not only is this expensive & consumes a lot of space, it is also vulnerable to human error & not a flexible system.


That indicates  bespoke solution may be needed to bridge that gap, either as an app, a or theme customization.

 

A theme customization would use cart.attributes or hidden line item properties to append the picklist data per item onto the order.

 

 

 

Problem Solved? ✔️Accept and ? Like the solution so you can help others.
Buy me a coffee ☕ paypal.me/paulnewton or donate to eff.org
Confused? Busy? Buy a custom solution paull.newton+shopifyforum@gmail.com
0 Likes
Dek_Burdle
Shopify Partner
3 0 0

Thanks @PaulNewton 

 

I have reached out to a few that you have listed and just waiting on some responses. At the moment it seems our needs a quite bespoke but I am looking at other avenues.

 

One thought i did have was, can a file be uploaded to the order page in Admin automatically based on the SKU of the items within the order?

0 Likes
PaulNewton
Shopify Partner
2576 134 438

@Dek_Burdle wrote:

One thought i did have was, can a file be uploaded to the order page in Admin automatically based on the SKU of the items within the order?


Probably not how you'd think what are you trying to do?

Generally files are attached to the line items themselves if the customers are uploading things(photos,documentation,etc)

 

Other types of files are just generally offsite and referenced with metafields ,cart attributes, or in the orders timeline.

 

 

also:

sdk &api forum search "order files"

Currently no api for orders timeline - https://community.shopify.com/c/Shopify-APIs-SDKs/Any-Update-of-Writing-Order-Timeline-Attaching-fil...

Problem Solved? ✔️Accept and ? Like the solution so you can help others.
Buy me a coffee ☕ paypal.me/paulnewton or donate to eff.org
Confused? Busy? Buy a custom solution paull.newton+shopifyforum@gmail.com
0 Likes
Dek_Burdle
Shopify Partner
3 0 0


@PaulNewton 

Probably not how you'd think what are you trying to do?

 


The end goal is to produce a picking list but only have it visible within Admin/Orders page. This picking list shouldn't be visible to the customer on-line & shouldn't alter how the line items are shown in Cart or Checkout.

 

From what I have seen the off the shelf picking apps either:

 

Create bundles for a product and therefore list every component at cart/checkout level (meaning we could have 20+ lines of items) which would look rather strange.

 

Do not allow Bill of Materials to be made for products as the majority of stores seem to be single box items.

 

A walk around would be to upload files to Shopify which can be uploaded to the Timeline when the order is placed. I have attached some screen shots below.

 

Alternatively as you mentioned if customers have the ability to upload files to line items, is there a way we can embed our picking lists into an item so it comes through with the order?

 

Order is created - SKU: ORIG-B

Screen Shot 2019-07-18 at 11.42.50 am.png  

 

SKU is read & file linked to SKU Picking List is uploaded in Timeline.

 

Screen Shot 2019-07-18 at 11.44.54 am.png

0 Likes
PaulNewton
Shopify Partner
2576 134 438

 


Create bundles for a product and therefore list every component at cart/checkout level (meaning we could have 20+ lines of items) which would look rather strange.


Not following the meaning of that. Do you mean it lists out all line items despite duplicate products?

 


Do not allow Bill of Materials to be made for products as the majority of stores seem to be single box items.

 

Alternatively as you mentioned if customers have the ability to upload files to line items, is there a way we can embed our picking lists into an item so it comes through with the order?


There might be hinkyness about it being exposed to the customer somewhere by accident because it's literally part of the order.

You'd have to generate the list offsite somewhere else anyways, then muck about with frontend upload apis, and even then it's just an external link on the cdn.

And if using your own server it would have to be publicly accessible to fetch the BOM data which means building your own api for security,  or use a proxy app, or some other scheme.

 

Try cart attributes, you'd have to stow the BOM somewhere either in product|variant metafields, hidden in product.descriptions(will be pseudo public) , product tags, the theme templates, or your own server.

 

 

Problem Solved? ✔️Accept and ? Like the solution so you can help others.
Buy me a coffee ☕ paypal.me/paulnewton or donate to eff.org
Confused? Busy? Buy a custom solution paull.newton+shopifyforum@gmail.com
0 Likes
STORKdeliveryCA
New Member
2 0 1

Hello, 

I searched and search but only found crude apps that don’t have this feature that I was looking for. I am by no mean’s a coder and crudely put this together using forums from multiple website. I’m proud to say it does what I need. I’m using zapiet for local delivery and export the extra delivery notes provided by by customer. Here’s a screen shot of the output followed by the code. Hope it helps!

521B307E-B718-4925-8007-963F5FF33973.jpeg7A0088F5-B4D4-41D0-BD5B-5E540E2AE686.jpeg8CF528EE-44E6-454C-99EC-A8B6E286BDE6.jpeg

 

Email subject: [{{shop_name}}] Order #{{ name }}{% if customer.name %} for{{ order.attributes.Delivery-Date | date: "%A, %d %B" }} between {{ order.attributes.Delivery-Time }} {% endif %}

 

Email Body:

<p> {% if order.attributes.Delivery-Date and order.attributes.Delivery-Time %}
<h2>Customer Delivery Information</h2>
<p>This order must be delivered by {{ order.attributes.Delivery-Date | date: "%A, %d %B" }} between {{ order.attributes.Delivery-Time }}</p>

{% endif %}

{% capture email_title %}Let’s make some money!{% endcapture %}
{% capture email_body %}
{% if requires_shipping %}
{% case delivery_method %}
{% when 'pick-up' %}
You’ll receive an email when your order is ready for pickup.
{% when 'local' %}
Hi {{ customer.first_name }}, we're getting your order ready for delivery.
{% else %}
Our customer {{ customer.first_name }} placed an order with us, take a look at their order to prepare yourself when your ready.
{% endcase %}
{% if delivery_instructions != blank %}
{% endif %}
{% endif %}
{% endcapture %}

<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ email_title }}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" type="text/css" href="/assets/notifications/styles.css">
<style>
.button__cell { background: {{ shop.email_accent_color }}; }
a, a:hover, a:active, a:visited { color: {{ shop.email_accent_color }}; }
</style>
</head>

<body>
<table class="body">
<tr>
<td>
<table class="header row">
<tr>
<td class="header__cell">
<center>

<table class="container">
<tr>
<td>

<table class="row">
<tr>
<td class="shop-name__cell">
{%- if shop.email_logo_url %}
<img src="{{shop.email_logo_url}}" alt="{{ shop.name }}" width="{{ shop.email_logo_width }}">
{%- else %}
<h1 class="shop-name__text">
<a href="{{shop.url}}">{{ shop.name }}</a>
</h1>
{%- endif %}
</td>

<td class="order-number__cell">
<span class="order-number__text">
Order {{ order_name }}
</span>
</td>
</tr>
</table>

</td>
</tr>
</table>

</center>
</td>
</tr>
</table>

<table class="row content">
<tr>
<td class="content__cell">
<center>
<table class="container">
<tr>
<td>

<h2>{{ email_title }}</h2>
<p>{{ email_body }}</p>
{% if order_status_url %}
<table class="row actions">
<tr>
<td class="empty-line"> </td>
</tr>
<tr>
<td class="actions__cell">
<table class="button main-action-cell">
<tr>
<td style="background-color:#89C43A"><a href="https://click-chill.myshopify.com/admin/orders?selectedView=all" class="button__text" style="text-align:center">View the customers order details</a>
</td>
{% endif %}

</td>
</tr>
</table>
</center>
</td>
</tr>
</table>

<table class="row section">
<tr>
<td class="section__cell">
<center>
<table class="container">
<tr>
<td>
<h3>Order Check List</h3>
</td>
</tr>
</table>
<table class="container">
<tr>
<td>

<table class="row">
{% for line in subtotal_line_items %}
<tr class="order-list__item">
<td class="order-list__item__cell">
<table>
<td>

{% if line.image %}
<img src="{{ line | img_url: 'compact_cropped' }}" align="left" width="80" height="80" class="order-list__product-image"/>
{% endif %}
</td>
<td class="order-list__product-description-cell">
{% if line.quantity < line.quantity %}
{% capture line_display %} {{ line.quantity }} of {{ line.quantity }}{% endcapture %}
{% else %}
{% assign line_display = line.quantity %}
{% endif %}


<span class="order-list__item-title""size2“><h1>{{ line_display }} ×</h1> {{ line.title }} </span><br/>

{% if line.variant_title != 'Default Title' %}
<span class="order-list__item-variant">{{ line.variant_title }}</span><br/>
{% endif %}

{% if line.refunded_quantity > 0 %}
<span class="order-list__item-refunded">Refunded</span>
{% endif %}

{% if line.discount_allocations %}
{% for discount_allocation in line.discount_allocations %}
{% if discount_allocation.discount_application.target_selection != 'all' %}
<span class="order-list__item-discount-allocation">


</span>
{% endif %}
{% endfor %}
{% endif %}
</td>

<td class="order-list__item__cell">

{% if line.sku != "" %}
(SKU: {{ line.sku }})
{% endif %}

</td>

<p class="order-list__item-price">
{% if line.final_line_price > 0 %}
{{ line.final_line_price | money }}

<td class="order-list__item__cell">

<style>
input.largerCheckbox {
width: 35px;
height: 35px;
}
</style>

<form action="/action_page.php" method="get">
<input type="checkbox" class="largerCheckbox" name="Product" align="Right" id="myCheck"/>

{% else %}
Free
{% endif %}
</p>
</td>
</table>
</td>
</tr>{% endfor %}
</table>

<table class="row subtotal-lines">
<tr>
<td class="subtotal-spacer"></td>
<td>
<table class="row subtotal-table">

{% for discount_application in discount_applications %}
{% if discount_application.target_selection == 'all' %}
{% capture discount_title %}
{% if discount_application.title %}
{{ discount_application.title | upcase }}
{% else %}
Discount
{% endif %}
{% endcapture %}

<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Discount</span>
<span class="subtotal-line__discount">
<img src="{{ 'notifications/discounttag.png' | shopify_asset_url }}" width="16" height="16" class="discount-tag-icon" />
<span class="subtotal-line__discount-title">{{ discount_title }}</span>
</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>-{{ discount_application.total_allocated_amount | money }}</strong>
</td>
</tr>

{% endif %}
{% endfor %}


<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Subtotal</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ subtotal_price | money }}</strong>
</td>
</tr>


<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Shipping</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ shipping_price | money }}</strong>
</td>
</tr>


{% if total_duties %}

<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Duties</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ current_total_duties | money }}</strong>
</td>
</tr>

{% endif %}


<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Taxes</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ tax_price | money }}</strong>
</td>
</tr>


{% if total_tip and total_tip > 0 %}

<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Tip</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ total_tip | money }}</strong>
</td>
</tr>

{% endif %}
</table>
<table class="row subtotal-table subtotal-table--total">

<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Total</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ total_price | money_with_currency }}</strong>
</td>
</tr>

</table>

{% if total_discounts > 0 %}
<p class="total-discount">
You saved <span class="total-discount--amount">{{ total_discounts | money }}</span>
</p>
{% endif %}

{% assign transaction_size = 0 %}
{% assign transaction_amount = 0 %}
{% for transaction in transactions %}
{% unless transaction.kind == "capture" or transaction.kind == "void" %}
{% assign transaction_size = transaction_size | plus: 1 %}
{% assign transaction_amount = transaction_amount | plus: transaction.amount %}
{% endunless %}
{% endfor %}

{% if transaction_size > 1 or transaction_amount < total_price %}
<table class="row subtotal-table">
<tr><td colspan="2" class="subtotal-table__line"></td></tr>
<tr><td colspan="2" class="subtotal-table__small-space"></td></tr>

{% for transaction in transactions %}
{% if transaction.status == "success" and transaction.kind == "authorization" or transaction.kind == "sale" %}
{% if transaction.payment_details.credit_card_company %}
{% capture transaction_name %}{{ transaction.payment_details.credit_card_company }} (ending in {{ transaction.payment_details.credit_card_last_four_digits }}){% endcapture %}
{% else %}
{% capture transaction_name %}{{ transaction.gateway_display_name }}{% endcapture %}
{% endif %}


<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>{{transaction_name}}</span>
</p>
</td>
<td class="subtotal-line__value">
<strong>{{ transaction.amount | money }}</strong>
</td>
</tr>

{% endif %}
{% if transaction.kind == 'refund' %}
{% if transaction.payment_details.credit_card_company %}
{% assign refund_method_title = transaction.payment_details.credit_card_company %}
{% else %}
{% assign refund_method_title = transaction.gateway %}
{% endif %}


<tr class="subtotal-line">
<td class="subtotal-line__title">
<p>
<span>Refund</span>
<br>
<small>{{ refund_method_title | capitalize }}</small>
</p>
</td>
<td class="subtotal-line__value">
<strong>- {{ transaction.amount | money }}</strong>
</td>
</tr>

{% endif %}
{% endfor %}
</table>
{% endif %}
</td>
</tr>
</table>


</td>
</tr>
</table>
</center>
</td>
</tr>
</table>

<table class="row section">
<tr>
<td class="section__cell">
<center>
<table class="container">
<tr>
<td>
<h3>Customer information</h3>
</td>
</tr>
</table>
<table class="container">
<tr>
<td>

<table class="row">
<tr>
{% if requires_shipping and shipping_address %}
<td class="customer-info__item">
<h4>Shipping address</h4>
{{ shipping_address | format_address }}
</td>
{% endif %}
{% if billing_address %}
<td class="customer-info__item">
<h4>Billing address</h4>
{{ billing_address | format_address }}
</td>
{% endif %}
</tr>
</table>
<table class="row">
<tr>
{% if requires_shipping and shipping_address %}
<td class="customer-info__item">
<h4>Shipping method</h4>
<p>{{ shipping_method.title }}</p>
</td>
{% endif %}
{% assign transaction_count = transactions | size %}
{% if transaction_count > 0 %}
<td class="customer-info__item">
<h4>Payment method</h4>
{% for transaction in transactions %}
{% if transaction.status == "success" or transaction.status == "pending" %}
{% if transaction.kind == "authorization" or transaction.kind == "sale" %}
<p class="customer-info__item-content">
{% if transaction.payment_details.credit_card_company %}
{% capture credit_card_url %}notifications/{{ transaction.payment_details.credit_card_company | downcase | replace: " ", "_" }}.png{% endcapture %}
<img src="{{ credit_card_url | shopify_asset_url }}" class="customer-info__item-credit" height="24">
<span>Payment method — <strong>{{ transaction.amount | money }}</strong></span>
{% else %}
{{ transaction.gateway_display_name }} — <strong>{{ transaction.amount | money }}</strong>
{% endif %}
</p>
{% endif %}
{% endif %}
{% endfor %}
</td>
{% endif %}
</tr>
</table>

</td>
</tr>
</table>
</center>
</td>
</tr>
</table>

<table class="row footer">
<tr>
<td class="footer__cell">
<center>
<table class="container">
<tr>
<td>

<p class="disclaimer__subtext">Ensure you have picked all items and QUANTITIES</p>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>

<img src="{{ 'notifications/spacer.png' | shopify_asset_url }}" class="spacer" height="1" />

</td>
</tr>
</table>
</body>
</html>

PaulNewton
Shopify Partner
2576 134 438

@STORKdeliveryCA very good though remember customers see those checkboxes too unless your using some javascript,css tricks.

 

Theoretically you could do a similar customization to the order-status page(thank you page) could get a similar result so then less stuff is in customer emails but easier to then use a bookmarklet or chrome extension to show the checkboxes.

Problem Solved? ✔️Accept and ? Like the solution so you can help others.
Buy me a coffee ☕ paypal.me/paulnewton or donate to eff.org
Confused? Busy? Buy a custom solution paull.newton+shopifyforum@gmail.com
0 Likes