/
Python SDK Sample: Fulfillment
Python SDK Sample: Fulfillment
# retrieve an auto order import ultracart from ultracart.rest import ApiException from ultracart import ApiClient, FulfillmentShipment, FulfillmentInventory from pprint import pprint import datetime from datetime import timedelta, timezone config = ultracart.Configuration() # this key is valid only in the UltraCart development system. You need to supply a valid simple key here. config.api_key['x-ultracart-simple-key'] \ = '4256aaf6dfedfa01582fe9a961ab0100216d737b874a4801582fe9a961ab0100' config.debug = True config.verify_ssl = True # Development only. Set to True for production. api_client = ApiClient(configuration=config, header_name='X-UltraCart-Api-Version', header_value='2017-03-01') fulfillment_api = ultracart.FulfillmentApi(api_client) distribution_center_code = 'DFLT' # ========================================================================== # this method is solely in case there are no unacknowledged orders in the system # so that the third illustration has an order to operate on. this method would # not be part of any production system. def find_any_order(): order_api = ultracart.OrderApi(api_client) # to find any order, just submit a really old creation date begin. # for this example, we'll use three year ago. three_years = timedelta(days=365 * 3) some_really_early_date = datetime.datetime.now(timezone.utc) - three_years creation_date_begin = some_really_early_date.replace(microsecond=0).isoformat() orders_response = order_api.get_orders(creation_date_begin=creation_date_begin) orders = orders_response.orders # let's hope there's at least one order in the system. return orders[0] # ========================================================================== # This example contains the four main lifecycle events for a fulfillment center. # 1) get orders, 2) acknowledge you've gotten the order, 3) acknowledge you've shipped it, 4) update inventory # ideally each block would contain its own try/catch error handling, as well as testing call responses for success # and empty/no data i.e. there is nothing to ship, etc. try: # ========================================================================== # STEP 1: GET ORDERS NEEDING SHIPPING # Best practice: Use a webhook instead of polling getOrders here. That will provide instant response. # This call does take an expand parameter like many other getXXX calls. The orders are returned with maximum # expansion by default. So all that's needed is the dc code. unacknowledged_orders_response = fulfillment_api.get_distribution_center_orders(distribution_center_code) # TODO test for unacknowledged_orders_response.success boolean and take appropriate steps. unacknowledged_orders = unacknowledged_orders_response.orders # ========================================================================== # STEP 2: ACKNOWLEDGE YOU HAVE RECEIVED ORDERS # store the unacknowledged orders off somewhere for processing. (not shown here) # then, acknowledge that you've received them. # if you have more than 100 orders to acknowledge, send them in batches. limit is 100. acknowledged_order_ids = [] for order in unacknowledged_orders: print(order.order_id) acknowledged_order_ids.append(order.order_id) # just in case there isn't any test data, add some. in production, this if-then block would decide whether or # not to make the API call at all. if len(acknowledged_order_ids) == 0: acknowledged_order_ids.append('DEMO-123456789') # TODO process these orders in your system before acknowledging them... fulfillment_api.acknowledge_orders(distribution_center_code, acknowledged_order_ids) # ========================================================================== # STEP 3: SHIP ORDERS # Grab the first order. This is just an example. In a real situation, this block would be called # for each order after you have shipped it. if len(unacknowledged_orders) > 0: first_order = unacknowledged_orders[0] # this will obviously fail if there are none... else: first_order = find_any_order() # create one or more shipment objects fulfillment_shipment = FulfillmentShipment() fulfillment_shipment.order_id = first_order.order_id fulfillment_shipment.tracking_numbers = ['TrackingNo12345', 'TrackingNo67890'] # these will come from your shipping software. shipments = [] shipments.append(fulfillment_shipment) # just a single shipment this time fulfillment_api.ship_orders(distribution_center_code, shipments) # ========================================================================== # STEP 4: UPDATE INVENTORIES AS NEEDED # update inventories as needed. first_inventory = FulfillmentInventory() first_inventory.item_id = 'BONE' first_inventory.quantity = 2500 second_inventory = FulfillmentInventory() second_inventory.item_id = 'BONE' second_inventory.quantity = 2500 inventory_updates = [first_inventory, second_inventory] # limit is 500 inventory updates at a time. batch them if you're going large. fulfillment_api.update_inventory(distribution_center_code, inventory_updates) pprint(unacknowledged_orders_response) pprint(unacknowledged_orders) print('Finished.') except ApiException as e: print("Exception when calling Fulfillment API calls: %s\n" % e)
, multiple selections available,
Related content
Activation Code API
Activation Code API
More like this
API Simple Key
API Simple Key
Read with this
Configuring Fulfillment by Amazon FBA
Configuring Fulfillment by Amazon FBA
More like this
Channel Partner API
Channel Partner API
More like this
Channel Partner API - SOAP Guide (Deprecated)
Channel Partner API - SOAP Guide (Deprecated)
More like this
Distribution Center
Distribution Center
More like this