Skip to main content

Shipping - PO BOX 2.2 - 2023

Link - https://admin.shopify.com/store/lillap/apps/script-editor/scripts/277250130

Primary Purpose:

If the customer is shipping to a PO Box-related address, only display USPS rates. If the customer is shipping to anywhere else, only display the UPS Rates.

Reasoning:

It is much cheaper to ship items via UPS, so they want to ship as many orders via UPS. But, we want to allow customers to ship to their PO Boxes if they have one, so they need to use USPS.

ACTIVE=0
FOUNDRATE = 0

UPSCOUNT = 0
Input.shipping_rates.each do |rate|
if rate.name.include?("UPS")
UPSCOUNT = UPSCOUNT + 1
end
end

po_box_triggers = [
"po box", "post office", "p o box", "p.o.box", "p.o. box", "p.o box", "pobox",
"post office box", "post box", "p. o. box", "po. box", "postal box",
"p.o.b.", "box po", "po. b.", "p box", "box p.o.", "p.b.",
]

if Input.cart.shipping_address
address = Input.cart.shipping_address

address_fields = [address.address1, address.address2].map do |line|
line.nil? ? "" : line.downcase
end

address_fields = address_fields.join(" ")

po_map = po_box_triggers.map { |trigger| trigger.downcase.strip }

end


class AddressSelector
def initialize(triggers)
@triggers = triggers.map { |trigger| trigger.downcase.strip }
end

def match?(address)
address_fields = [address.address1, address.address2].map do |line|
line.nil? ? "" : line.downcase
end

address_fields = address_fields.join(" ")
@triggers.any? { |trigger| address_fields.include?(trigger) }
end
end

puts UPSCOUNT


# call address selector to see if your address has a PO Box address
if UPSCOUNT > 0
if Input.cart.shipping_address.nil?
Output.shipping_rates = Input.shipping_rates.delete_if do |shipping_rate|
shipping_rate.name.upcase.include?("(USPS)")
end
else
unless AddressSelector.new(po_box_triggers).match?(Input.cart.shipping_address)
Output.shipping_rates = Input.shipping_rates.delete_if do |shipping_rate|
shipping_rate.name.upcase.include?("(USPS)")
end
else
Output.shipping_rates = Input.shipping_rates.delete_if do |shipping_rate|
shipping_rate.name.upcase.include?("UPS")
end
end
end
end


Output.shipping_rates = Input.shipping_rates