More Shipstation integrations(warehouses)
This commit is contained in:
@@ -10,7 +10,11 @@ still have an option for CSV uploads"):
|
||||
row per line item, customer/address info repeated on each row.
|
||||
- send_order_to_shipstation_api(): calls ShipStation's V2 API
|
||||
directly (POST /v2/shipments with create_sales_order: true) to
|
||||
create the order without leaving the app.
|
||||
create the order without leaving the app. Needs a Warehouse ID per
|
||||
company (SHIPSTATION_SIGNIFY_WAREHOUSE_ID /
|
||||
SHIPSTATION_OAKSTREET_WAREHOUSE_ID) - ShipStation requires knowing
|
||||
where the package ships FROM, either via a warehouse or an explicit
|
||||
ship_from address; only the warehouse path is wired up today.
|
||||
|
||||
IMPORTANT - please verify the first real send: ShipStation's docs say
|
||||
automation rules apply tags to orders "when they import based on any
|
||||
@@ -134,6 +138,15 @@ def _store_id_for_company(company: str) -> str:
|
||||
return ""
|
||||
|
||||
|
||||
def _warehouse_id_for_company(company: str) -> str:
|
||||
settings = config.load_settings()
|
||||
if company == "Signify Health":
|
||||
return settings.get("SHIPSTATION_SIGNIFY_WAREHOUSE_ID", "")
|
||||
if company == "Oak Street Health":
|
||||
return settings.get("SHIPSTATION_OAKSTREET_WAREHOUSE_ID", "")
|
||||
return ""
|
||||
|
||||
|
||||
def send_order_to_shipstation_api(order: Order) -> dict:
|
||||
"""
|
||||
Creates the order directly in ShipStation via POST /v2/shipments with
|
||||
@@ -154,6 +167,19 @@ def send_order_to_shipstation_api(order: Order) -> dict:
|
||||
"Add it in Settings under ShipStation."
|
||||
)
|
||||
|
||||
# ShipStation needs to know where the package ships FROM - either a
|
||||
# configured warehouse, or an explicit ship_from address. Only the
|
||||
# warehouse path is wired up today; fail clearly here rather than
|
||||
# sending an incomplete request and getting ShipStation's less
|
||||
# actionable "ship_from is required when warehouse_id is not present".
|
||||
warehouse_id = _warehouse_id_for_company(order.company)
|
||||
if not warehouse_id:
|
||||
raise ShipStationSendError(
|
||||
f"No ShipStation Warehouse ID configured for '{order.company}'. "
|
||||
"Add it in Settings under ShipStation - find it in ShipStation under "
|
||||
"Settings > Shipping > Warehouses/Ship From Locations."
|
||||
)
|
||||
|
||||
info = order.shipping_info or {}
|
||||
if not (info.get("address1") and info.get("city") and info.get("state") and info.get("zip")):
|
||||
raise ShipStationSendError(
|
||||
@@ -172,6 +198,7 @@ def send_order_to_shipstation_api(order: Order) -> dict:
|
||||
{
|
||||
"create_sales_order": True,
|
||||
"store_id": store_id,
|
||||
"warehouse_id": warehouse_id,
|
||||
"external_shipment_id": ticket_number,
|
||||
"shipment_number": ticket_number,
|
||||
"ship_to": {
|
||||
|
||||
Reference in New Issue
Block a user