EasyStorage
  • EasyStorage - wprowadzenie
  • Start
  • Panel WEB
    • Asortyment
      • Produkty
        • Dodaj produkt
        • Importuj produkty
        • Importuj stany magazynowe
        • Edycja Produktu
          • Konfiguracja stanów
      • Grupy produktów
        • Tworzenie grupy produktów
      • Dostawcy
        • Dodaj dostawce
      • Właściciele
        • Dodaj właściciela
    • Magazyn
      • Lokalizacje
        • Dodaj Lokalizację
        • Edycja Lokalizacji
        • Export/Import lokalizacji
        • Aktualizacja ścieżki kompletacji
      • Jednostki magazynowe ( JM )
        • Stwórz Jednostki magazynowe
      • Inwentaryzacje
      • Koszyki
      • Grupowe inwentaryzacje
      • Strefy
        • Dodaj strefe
      • Magazyny
        • Dodaj magazyn
      • Jednostki
        • Dodaj jednostkę
      • Rodzaje jednostek magazynowych
      • Rodzaje lokacji magazynowych
        • Dodaj rodzaj lokacji magazynowej
    • Zakupy
      • Zamówienia zakupu
      • Dostawy
    • Sprzedaż
      • Zamówienia Sprzedaży
        • Tabela Sprzedaży
    • Zadania
      • Powody pominięcia zadań
    • Raporty
      • Raport różnicowy dostaw
      • Stan magazynu
      • Raport stanu jednostek magazynowych
      • Raport obłożenia magazynu
      • Stany magazynowe produktów
      • Raport historii produktu
      • Raport historii lokalizacji
      • Raport historii JM
      • Raport niezaalokowanych produktów
      • Statystyki efektywności
      • Raport obrotów magazynowych
    • Użytkownicy
    • Konfiguracja
      • Integracje
        • Subiekt GT
        • Subiekt Nexo Pro
        • Comarch ERP XL
        • Comarch Optima
        • Instalacja Drivera ES
        • Baselinker
      • Tagi
      • Ustawienia
        • Ustawienia dostaw
        • Ustawienia uzupełnień
        • Ustawienia zamówień sprzedaży
        • Ustawienia aplikacji mobilnej
        • Ustawienia przesunięć
        • Ustawienia pick
        • Ustawienia kontroli
        • Ustawienia produktów
        • Ustawienia inwentaryzacji
        • Ustawienia wysyłki
      • Typy zamówień sprzedaży
      • Akcje automatyczne
  • Aplikacja mobilna - Wstęp
    • Aplikacja mobilna - Instalacja
      • Aplikacja mobilna - Konfiguracja
        • Aplikacja mobilna - Logowanie
    • Aplikacja mobilna - Zadania operatora
    • Aplikacja mobilna - Zadania operatora - Inwentaryzacja
    • Aplikacja mobilna - Główny panel użytkownika
      • Aplikacja mobilna - Zadania operatora - Uzupełnienia
      • Aplikacja mobilna - Zadania operatora - Kompletacja
      • Aplikacja mobilna - Dostawy
      • Aplikacja mobilna - Kontrola
      • Aplikacja mobilna - Inwentaryzacje
      • Aplikacja mobilna - Produkty
      • Aplikacja mobilna - Lokacje / Jednostki
      • Aplikacja mobilna - Przesuń jednostkę
      • Aplikacja mobilna - Przesuń produkt
      • Aplikacja mobilna - Przesuń jednostkę MM
      • Aplikacja mobilna - Przesuń produkt MM
      • Aplikacja mobilna - Zmień stan produktu
      • Aplikacja mobilna - Ustawienia
      • Aplikacja mobilna - Wyloguj
  • Funkcje
    • Kontrola
    • Dodawanie produktu
    • Kompletacja
    • Statusy Zamówień
  • Wdrożenie
  • API
    • Autoryzacja
    • Pobranie produktów
    • Pobranie zamówień
    • Dodanie zamówienia sprzedaży
  • Jak ... ?
    • Jak filtrować tabele z danymi w WMS EasyStorage
    • Jak reagować na błędy integracji?
    • Jak ukryć zamówienie na terminalu mobilnym
    • Jak Anulować zamówienie sprzedaży
    • Jak liczona jest liczby użytych licencji w systemie WMS EasyStorage?
Powered by GitBook
On this page
  1. API

Dodanie zamówienia sprzedaży

Jak dodać zamówienie przez API

PreviousPobranie zamówieńNextJak filtrować tabele z danymi w WMS EasyStorage

Last updated 4 days ago

Poniższy skrypt dodaje zamówienie sprzedaży z losowymi produktami. W prawdziwej integracji najpierw będziemy musieli zmapować np produkty z OMS z produktami z WMS używając endpointa /api/external/v2/stock/product/getproducts. Skrypt jest dość prosty, pobiera produkty i w kolejnym kroku dodaje do zamówienia. Gdy zamówienie zostanie dodane, WMS zwraca ID zamówienia (do zapisania np w OMS/ERP)

Przy dodawaniu zamówień dobrą praktyką jest:

  1. Upewnienie się, że zamówień nie dodajemy parokrotnie (przez API można dodać to samo zamówienie bez żadnego limitu i w przypadku systemów produkcyjnych będą realizowane)

  2. Sprawdzanie i zapisywanie w OMS/ERP aktualnego statusu zamówienia (można wywołać webhooka z WMS do OMS - nie ma potrzeby odpytywanie API o statusy)

  3. Zapisanie na UI OMS/ERP nr zamówienia z WMS

  4. Uzupełnienie dostępnych informacji w zamówieniu takich jak:

a) salesourcetype (źródło zamówienie) b) saleType (typ zamówienia, Detal/Hurt etc) ()

c) klient invoiceCustomer/shippingCustomer

Endpoint na dodawanie klientów jest w tym momencie niedostępny

import requests
import uuid
import json
import random
from datetime import datetime, timezone

# 🔧 KONFIGURACJA
BASE_URL = "https://tenanatklient.easystorage.io"
USERNAME = "apiuser@e"
PASSWORD = "haslo"
WAREHOUSE_ID = "3a4a1dfe-7703-4865-374e-08da2dc1ff9f"
NUM_PRODUCTS = 50  # 🔁 TUTAJ ustaw ile produktów chcesz dodać do zamówienia

# 🔑 POBIERANIE TOKENA
def get_access_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']

# 📦 POBIERANIE PRODUKTÓW
def get_products(token, num_products):
    url = f"{BASE_URL}/api/external/v2/stock/product/getproducts"
    headers = {
        'Authorization': f'Bearer {token}'
    }

    page = 1
    products = []

    while len(products) < num_products:
        payload = {
            "paging": {
                "page": page,
                "rowsPerPage": 100
            },
            "filter": {
                "ids": None,
                "codes": None,
                "createdOrUpdatedAfter": None,
                "owner": {
                    "id": None
                }
            }
        }

        response = requests.post(url, headers=headers, json=payload)
        response.raise_for_status()
        page_data = response.json()['data']['products']
        if not page_data:
            break
        products.extend(page_data)
        page += 1

    return products[:num_products]

# 🧾 BUDOWANIE ZAMÓWIENIA
def build_order(products):

    now_utc = datetime.now(timezone.utc)
    formatted = now_utc.isoformat(timespec='milliseconds').replace('+00:00', 'Z')

    return {
        "orderNumber": f"ORDER-{uuid.uuid4()}",
        "referenceNumber": f"zam/{str(uuid.uuid4())[:8]}",
        "saleDate": formatted,
        "warehouse": {
            "id": WAREHOUSE_ID
        },
        "products": [
            {
                "product": {
                    "id": p["id"]
                },
                "quantity": random.randint(1, 10)
            } for p in products
        ]
    }

# 🚚 WYSYŁKA ZAMÓWIENIA
def send_order(token, order_data):
    url = f"{BASE_URL}/api/external/v2/sale/addsale"
    headers = {
        'Authorization': f'Bearer {token}'
    }
    response = requests.post(url, headers=headers, json=order_data)

    if response.status_code != 200:
        print("❌ Błąd podczas dodawania zamówienia:")
        print(f"Status: {response.status_code}")
        print("Treść odpowiedzi:", response.text)
        print("📤 Wysłany payload:")
        print(json.dumps(order_data, indent=2))
        return

    data = response.json().get("data")
    sale_id = data.get("sale", {}).get("id") if data else None

    if sale_id:
        print(f"✅ Zamówienie utworzone! ID: {sale_id}")
    else:
        print("⚠️ Zamówienie wysłane, ale nie znaleziono saleId w odpowiedzi:")
        print(response.json())

# ▶️ START
if __name__ == "__main__":
    print("🔑 Pobieram token...")
    token = get_access_token()

    print("📦 Pobieram listę produktów...")
    products = get_products(token, NUM_PRODUCTS)

    print(f"✅ Znaleziono {len(products)} produktów.")

    print("🧾 Buduję zamówienie...")
    order_data = build_order(products)

    print("📤 Wysyłam zamówienie...")
    send_order(token, order_data)
https://docs.easystorage.io/pl/panel-web/konfiguracja/typy-zamowien-sprzedazy