def fulfill_order()

in order/utils/order_actions.py [0:0]


def fulfill_order(order:Order, carrier, tracking_number, items=None):
    ''' Fulfil an order
    NOTE: currently only fulfills an order COMPLETELY

    params:
    order: the Order to fulfill
    carrier: the shipping carrier
    tracking_number: tracking number from the carrier
    items: the subset of items this particular fulfillment is for
    returns:
    order, data:  tuple of the order object and response data if successful.
    '''
    fb_meta = FacebookMetadata.objects.get(store=order.store)
    token = fb_meta.token_info
    url = settings.BASE_API_URL + order.ext_order_id + '/shipments'
    body = {
        'access_token': token,
        'items': items or get_order_items(order),
        'tracking_info': {
            'carrier': carrier,
            'tracking_number': tracking_number,
        },
        'idempotency_key': get_idempotency_key(),
    }
    res = requests.post(url, json=body)
    data = res.json()
    if not data.get("success", False):
        print(json.dumps(res.json(), indent=2))
        return None, None

    update_order_fulfillment_state(order, OrderFulfillmentState.FULLY_FULFILLED)
    update_order_state(order, OrderStatus.COMPLETED)
    return order, data