New Shopify Certification now available: Liquid Storefronts for Theme Developers

Tiered Discount Code By with code

japple
Visitor
2 0 1

I am needing a script for $5 off $50, $10 Off $75 $20 Off $100 by discount code entered at checkout for cart subtotal

Reply 1 (1)
BSCM
New Member
6 0 0

# ================================ Customizable Settings ================================
# ================================================================
# Tiered Discounts by Manish Rustagi
#
# If the cart total is greater than (or equal to) an entered
# threshold, the associated discount is applied to each item.
#
# - 'threshold' is the spend amount needed to qualify
# - 'discount_type' is the type of discount to provide. Can be
# either:
# - ':percent'
# - ':dollar'
# - 'discount_amount' is the percentage/dollar discount to
# apply (per item)
# - 'discount_message' is the message to show when a discount
# is applied
# ================================================================

SPENDING_THRESHOLDS_STANDARD = [
{
threshold: 499,
discount_type: :percent,
discount_amount: 20,
discount_message: 'Spend $499 and get 20% off!',
},
{
threshold: 999,
discount_type: :percent,
discount_amount: 25,
discount_message: 'Spend $999 and get 25% off!',
},
{
threshold: 1999,
discount_type: :percent,
discount_amount: 35,
discount_message: 'Spend $1999 and get 35% off!',
},
]

DISCOUNT_CODES = {
'maxoff' => SPENDING_THRESHOLDS_STANDARD
}

# ================================ Script Code (do not edit) ================================
# ================================================================
# DiscountApplicator
#
# Applies the entered discount to the supplied line item.
# ================================================================

class DiscountApplicator
def initialize(discount_type, discount_amount, discount_message)
@discount_type = discount_type
@discount_message = discount_message

@discount_amount = if discount_type == :percent
1 - (discount_amount * 0.01)
else
Money.new(cents: 100) * discount_amount
end
end

def apply(line_item)
new_line_price = if @discount_type == :percent
line_item.line_price * @discount_amount
else
[line_item.line_price - (@discount_amount * line_item.quantity), Money.zero].max
end

line_item.change_line_price(new_line_price, message: @discount_message)
end
end

# ================================================================
# TieredDiscountBySpendCampaign
#
# If the cart total is greater than (or equal to) an entered
# threshold, the associated discount is applied to each item.
# ================================================================

class TieredDiscountBySpendCampaign
def initialize(tiers)
@tiers = tiers.sort_by { |tier| tier[:threshold] }.reverse
end

def run(cart)
applicable_tier = @tiers.find { |tier| cart.subtotal_price >= (Money.new(cents: 100) * tier[:threshold]) }
return if applicable_tier.nil?

discount_applicator = DiscountApplicator.new(
applicable_tier[:discount_type],
applicable_tier[:discount_amount],
applicable_tier[:discount_message]
)

cart.line_items.each do |line_item|
next if line_item.variant.product.gift_card?
discount_applicator.apply(line_item)
end
end
end

def discount_code_present(cart, code)
!cart.discount_code.nil? and (cart.discount_code.code.upcase == code.upcase)
end

CAMPAIGNS = []

DISCOUNT_CODES.each do |discount_code|
if discount_code_present(Input.cart, discount_code[0])
CAMPAIGNS = [
TieredDiscountBySpendCampaign.new(discount_code[1]),
]
end
end

CAMPAIGNS.each do |campaign|
campaign.run(Input.cart)
end

Output.cart = Input.cart

Manish
Bombay Shaving Company