subtotal_cents = Input.cart.subtotal_price.cents
# Calculate subtotal after discount code is applied
if Input.cart.discount_code
if Input.cart.discount_code.class == CartDiscount::Percentage
subtotal_cents = subtotal_cents - (subtotal_cents * Input.cart.discount_code.percentage / 100)
if Input.cart.discount_code.class == CartDiscount::FixedAmount
subtotal_cents = subtotal_cents - Input.cart.discount_code.amount.cents
# Determine which variant a visitor is in
Input.shipping_rates.each do |shipping_rate|
if shipping_rate.source === 'ShipScout'
variant = shipping_rate.code.include?("fallback") ? "A" : shipping_rate.code.split("_").last #this will set "variant" value to A, B, C etc.
# Discount the ShipScout rate
Input.shipping_rates.each do |shipping_rate|
if shipping_rate.name === 'Standard Shipping'
if subtotal_cents >= 3000
shipping_rate.apply_discount(shipping_rate.price, message: 'Free shipping')
if subtotal_cents >= 5000
shipping_rate.apply_discount(shipping_rate.price, message: 'Free shipping')
# Delete the ShipScout rate here since we are only using it as an indicator to show/hide other rates
Input.shipping_rates.delete_if do |shipping_rate|
shipping_rate.source == 'ShipScout'
# Output the rates with these changes
Output.shipping_rates = Input.shipping_rates