Only one line item script can be active at a time. If you already have a line item script running and you want to run this script in tandem, this will not work. You'll need to customize the scripts to work together.
This guide requires the app.
Editable Values
MESSAGE - {string} A message that will be displayed on the free gift line item in the cart and checkout.
Script
# Editable Values
MESSAGE = 'FREE GIFT FOR SIGNING UP!'
########
# DO NOT EDIT PAST THIS POINT
########
class InveterateFreeGiftWithSignup
def initialize()
@message = MESSAGE
end
def run(cart)
@cart = cart
start
end
private
def start
@customer = @cart.customer
@line_items = @cart.line_items
return unless valid_cart?
discount_gift
end
def valid_cart?
valid = false
@line_items.each do |line_item|
if line_item.variant.product.tags.include? 'inveterate-product'
valid = true
break
end
end
return valid
end
def discount_gift
@line_items.each do |line_item|
# Skip if membership product
next if line_item.variant.product.tags.include? 'inveterate-product'
# Skip if product is not the free gift
next unless line_item.variant.product.tags.include? 'inveterate-signup-gift'
# Check quantity to create new line item if quantity is greater than 1
new_line_item = nil
if line_item.quantity > 1
new_line_item = line_item.split(take: 1)
@cart.line_items << new_line_item
else
new_line_item = line_item
end
puts new_line_item.quantity
# Apply 100% discount
new_line_item.change_line_price(
Money.zero,
message: @message
)
# Once discount has been applied once, break out so it doesn't get applied to another product
break
end
end
end
CAMPAIGNS = [
InveterateFreeGiftWithSignup.new()
]
CAMPAIGNS.each do |campaign|
campaign.run(Input.cart)
end
Output.cart = Input.cart