Pobranie zamówień

Przykład pobrania zamówień i wyliczania ich liczby per status zamówienia:

W poniższym skrypcie użyjemy głownie metody getsale z filtrem na statusy, w skrócie 1. Autoryzujemy się tokenem 2. Pobieramy zamówienia w interesujących nas statusach (obsługujemy paginację) 3. Zliczamy zamówienia i wyświetlamy wynik

Element
Dlaczego jest ważny?

get_token()

Uzyskanie dostępu do API z tokenem JWT

filter.saleStates

Pobieramy tylko interesujące nas statusy

Stronicowanie (page_number)

Obsługa dużej liczby zamówień (np. 10 000+)

Counter()

Szybkie i czytelne zliczenie statusów

W przypadku wątpliwości można użyć ChatGTP lub Copilot do pomocy

import requests
from collections import Counter

# Dane logowania
BASE_URL = "https://tenant.easystorage.io"
USERNAME = "userAPI"
PASSWORD = "PASSWORDuseraAPI"

# Lista statusów do pobrania
FILTERED_STATUSES = ["New",
"IncompleteAllocation",
"Allocated",
"PartiallyPicked",
"Picked",
"Verified",
"VerifiedDifferentQuantity"]



# 1. Uwierzytelnienie
def get_token():
    url = f"{BASE_URL}/api/external/v2/account/gettoken"
    payload = {"username": USERNAME, "password": PASSWORD}
    response = requests.post(url, json=payload)
    response.raise_for_status()
    return response.json()['data']['user']['accessToken']

# 2. Pobranie zamówień ze stronicowaniem i filtrem statusów
def get_filtered_sales(token):
    url = f"{BASE_URL}/api/external/v2/sale/getsales"
    headers = {
        "Authorization": f"Bearer {token}"
    }
    all_sales = []
    page_number = 1
    page_size = 1000

    while True:
        payload = {
        "paging": {
            "page": page_number,
            "rowsPerPage": page_size
                  },
        "filter": {
            "saleStates": FILTERED_STATUSES
                   }
                   }
        response = requests.post(url, headers=headers, json=payload)
        response.raise_for_status()
        data = response.json()['data']

        items = data['sales']
        all_sales.extend(items)

        if len(items) < page_size:
            break

        page_number += 1

    return all_sales

# 3. Zliczenie statusów
def count_statuses(sales):
    statuses = [sale['saleStateId'] for sale in sales]
    return Counter(statuses)

# 4. Główna funkcja
def main():
    token = get_token()
    sales = get_filtered_sales(token)
    #print(sales)
    status_counts = count_statuses(sales)

    print("Liczba zamówień wg statusu (tylko wybrane):")
    for status, count in status_counts.items():
        print(f"{status}: {count}")

if __name__ == "__main__":
    main()

Last updated