Include discount code and dollar amount on packing slip

Topic summary

Issue: A user successfully added pricing details (subtotal, tax, shipping, total) and discount codes to their Shopify packing slip template but needed help displaying the actual discount dollar amount.

Solution Provided: Another user shared working code that displays both the discount name and amount on the same line:

Discount {% for discount_application in order.discount_applications %}
{{ discount_application.title }}
-{{ discount_application.total_allocated_amount | money }}
{% endfor %}

Additional Enhancement: The discussion evolved to address hiding the discount line when no discount code is used. The final working solution wraps the discount code in a conditional statement:

{% if discount_application.title != blank %}
[discount code]
{% else %}
{% endif %}

Status: Resolved. Users confirmed the code works correctly for orders both with and without discount codes applied. The packing slip now shows discount information only when relevant and includes the dollar amount saved.

Summarized with AI on November 12. AI used: claude-sonnet-4-5-20250929.

I have successfully added subtotal, tax, shipping and final total to my packing slip. I even figured out how to have it show what discounts code was used. However I would like it to show the actual discount amount as well.

Any advice would be appreciated. I would just print order instead but it is my understanding that we can not hide the timeline info only comments. I don’t need that info to print so am left with customizing my packing slip.

Here is the code I am using

<div class="wrapper">
<div class="header">
<div class="shop-title">
<img src="https://cdn.shopify.com/s/files/1/0775/6696/8110/files/IMG_2091_56e9f21a-3665-4c3e-97cc-3124b6173262..." style="width: 200px; height: 200px;">
</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">
Ship to
</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 }}
{% 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 %}
{% for line_item in line_items_in_shipment %}
<div class="flex-line-item">
<div class="flex-line-item-img">
{% if line_item.image != blank %}
<div class="aspect-ratio aspect-ratio-square" style="width: {{ desired_image_size }}px; height: {{ desired_image_size }}px;">
{{ line_item.image | img_url: effective_image_dimensions | img_tag: '', 'aspect-ratio__content' }}
</div>
{% endif %}
</div>
<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 %}

{% if line_item.sku != blank %}
<span class="line-item-description-line">
{{ line_item.sku }}
<br>
{%- comment -%} ********adding prices to packing slip *********{%- endcomment -%}

{% assign final_price = nil %}
{% for item in order.line_items %}
{% if item.sku == line_item.sku %}
{% assign final_price = item.final_price %}
{% endif %}
{% endfor %}
{% if final_price %}
{{ final_price | money }}
{% endif %}

{%- comment -%} ********done adding prices to packing slip *********{%- endcomment -%}
</span>
{% endif %}
</p>
</div>
<div class="flex-line-item-quantity">
<p class="text-align-right">
{{ line_item.shipping_quantity }} of {{ line_item.quantity }}
</p>
</div>
</div>
{% endfor %}
{%- comment -%} ******** adding totals to packing slip *********{%- endcomment -%}
<div class="flex-totals">
<p class="text-align-right">
<br>
Subtotal {{ order.subtotal_price | money }}
<br>
-discount{% for discount_application in order.discount_applications %}
{{ discount_application.title  }}
{% endfor %}
<br>
Taxes {{ order.tax_price | money }}
<br>
Shipping {{ order.shipping_price | money }}
<br>
Total {{ order.total_price | money }}
</p>
</div>
{%- comment -%} ******** done adding totals to packing slip *********{%- endcomment -%}
</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 %}
<hr>
{% if order.note != blank %}
<div class="notes">
<p class="subtitle-bold to-uppercase">
Notes
</p>
<p class="notes-details">
{{ order.note }}
</p>
</div>
{% endif %}
<div class="footer">
<p>
Thank you for choosing Foster's creations.
</p>
<p>
<strong>
{{ shop.name }}
</strong>
<br>
{{ shop_address.address1 }}, {{ shop_address.city }}, {{ shop_address.province_code }}, {{ shop_address.zip }}, {{ shop_address.country }}
<br>
{{ shop.email }}
<br>
{{ shop.domain }}
</p>
</div>
</div>
<style type="text/css">
body {
font-size: 15px;
}
* {
box-sizing: border-box;
}
.wrapper {
width: 831px;
margin: auto;
padding: 4em;
font-family: "Noto Sans", sans-serif;
font-weight: 250;
}
.header {
width: 100%;
display: -webkit-box;
display: -webkit-flex;
display: flex;
flex-direction: row;
align-items: top;
}
.header p {
margin: 0;
}
.shop-title {
-webkit-box-flex: 6;
-webkit-flex: 6;
flex: 6;
font-size: 1.9em;
}
.order-title {
-webkit-box-flex: 4;
-webkit-flex: 4;
flex: 4;
}
.customer-addresses {
width: 100%;
display: inline-block;
margin: 2em 0;
}
.address-detail {
margin: 0.7em 0 0;
line-height: 1.5;
}
.subtitle-bold {
font-weight: bold;
margin: 0;
font-size: 0.85em;
}
.to-uppercase {
text-transform: uppercase;
}
.text-align-right {
text-align: right;
}
.shipping-address {
float: left;
min-width: 18em;
max-width: 50%;
}
.billing-address {
padding-left: 20em;
min-width: 18em;
}
.order-container {
padding: 0 0.7em;
}
.order-container-header {
display: inline-block;
width: 100%;
margin-top: 1.4em;
}
.order-container-header-left-content {
float: left;
}
.order-container-header-right-content {
float: right;
}
.flex-line-item {
display: -webkit-box;
display: -webkit-flex;
display: flex;
flex-direction: row;
align-items: center;
margin: 1.4em 0;
page-break-inside: avoid;
}
.flex-line-item-img {
margin-right: 1.4em;
min-width: {{ desired_image_size }}px;
}
.flex-line-item-description {
-webkit-box-flex: 7;
-webkit-flex: 7;
flex: 7;
}
.line-item-description-line {
display: block;
}
.flex-line-item-description p {
margin: 0;
line-height: 1.5;
}
.flex-line-item-quantity {
-webkit-box-flex: 3;
-webkit-flex: 3;
flex: 3;
}
.subdued-separator {
height: 0.07em;
border: none;
color: lightgray;
background-color: lightgray;
margin: 0;
}
.missing-line-items-text {
margin: 1.4em 0;
padding: 0 0.7em;
}
.notes {
margin-top: 2em;
}
.notes p {
margin-bottom: 0;
}
.notes .notes-details {
margin-top: 0.7em;
}
.footer {
margin-top: 2em;
text-align: center;
line-height: 1.5;
}
.footer p {
margin: 0;
margin-bottom: 1.4em;
}
hr {
height: 0.14em;
border: none;
color: black;
background-color: black;
margin: 0;
}
.aspect-ratio {
position: relative;
display: block;
background: #fafbfc;
padding: 0;
}
.aspect-ratio::before {
z-index: 1;
content: "";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
border: 1px solid rgba(195,207,216,0.3);
}
.aspect-ratio--square {
width: 100%;
padding-bottom: 100%;
}
.aspect-ratio__content {
position: absolute;
max-width: 100%;
max-height: 100%;
display: block;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
</style>
2 Likes

Hi, thank you so much for this. I will use your code. I am not good with these codes at all. Before seeing this I asked chatgpt to make me a code (yours is better) and this code gave me an actual dollar amount like you asked. However I was not able to combine it with your discount code. Let me know if you were able to combine it and also if you know a code that hides the discount line, if the customer did not use a discount code. Thanks

Discount

{% if order.total_discounts > 0 %}

-{{ order.total_discounts | money }}

{% else %}

No discount applied

{% endif %} {% if order.discount_codes.size > 0 %}

Discount Code

{% for discount in order.discount_codes %}

{{ discount.code }}

{% endfor %} {% endif %}

This is the code I used in mine and it shows discount name followed by amount on the same line

Discount {% for discount_application in order.discount_applications %}
{{ discount_application.title }} -{{ discount_application.total_allocated_amount | money }}
{% endfor %}

1 Like

Great, that worked, Thank You! Do you have a code where if the customer doesn’t us a discount code, it hides the “discount” line on the packing slip?

Good idea, this seems to be working for me. Just update the original code I posted with this (or add in the the first and last line)

{% if discount_application.title != blank %}
Discount {% for discount_application in order.discount_applications %}
{{ discount_application.title }}
-{{ discount_application.total_allocated_amount | money }}
{% endfor %}
{% endif %}

Thanks, I tried it, but now it doesn’t show the discount code even when the customer applied one

Sorry, just got around to messing with the code again. Looks like I was just missing an else tag. Just change the first line to this -

{% if discount_application.title != blank %} {% else %}

I checked orders both with and without discounts and it’s working correctly for me.