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