Bestand lesen
Die meisten Integrationen, die den Bestand falsch machen, machen nicht das Schreiben falsch. Sie leiten eine Zahl, die das Modul bereits veröffentlicht, auf leicht andere Weise neu ab und sind sich danach mit der Administration darüber uneinig.
Alles hier ist ein Lesen. p2lab_stockly.viewer oder das eigene :read-Recht der Entität genügt.
Ein Produkt, überall
Abschnitt betitelt „Ein Produkt, überall“
GET warehouse/stock/product/{productId}?page=1&limit=10ACL:p2lab_stockly_warehouse_stock:read· höchstens 100 Zeilen je Seite
Eine Zeile je (Lager, Lagerplatz), dazu die Nachbestellregeln und die verkäufliche Zahl, die zum ganzen Lager gehören und nicht zur Seite.
{ "data": [ { "id": "0191f0…", "productId": "0191f3…", "warehouseId": "0191f1…", "warehouseName": "Main warehouse", "binLocationId": "0191f2…", "binLocationCode": "A-01-02", "binRole": null, "stock": 24, "reserved": 6, "available": 18 } ], "rules": {}, "purchasable": {}, "total": 3, "page": 1, "limit": 10}binRole: null ist ein gewöhnlicher Lagerplatz. Jeder andere Wert ist ein Puffer; siehe
das Bestandsmodell dafür, was jeder davon ausschließt.
Ein Produkt, je eine Zahl
Abschnitt betitelt „Ein Produkt, je eine Zahl“
GET warehouse/stock/product/{productId}/summary?withVariants=1ACL:p2lab_stockly_warehouse_stock:read
Die Zahlen hinter den Kacheln der Produktseite. withVariants=1 lässt ein Hauptprodukt seine Varianten
aggregieren.
{ "data": { "total": 24, "reserved": 6, "available": 17, "backordered": 1, "pending": 0, "warehouses": 2, "expiring": 0, "inTransit": 0, "onOrder": 40 }}| Feld | Bedeutet |
|---|---|
total | die rohe körperliche Zählung, Puffer eingeschlossen |
reserved | wie viel Bestellungen beansprucht haben |
available | was noch verkauft werden kann |
backordered | Bedarf, den kein Regal deckt |
pending | Einheiten im Wareneingangspuffer oder unterwegs — auf dem Weg herein |
expiring | Lots mit einem Ablaufdatum innerhalb von 30 Tagen |
inTransit, onOrder | von einem anderen Lager / von einem Lieferanten geschuldet |
Ein Produkt, ein Lager
Abschnitt betitelt „Ein Produkt, ein Lager“
GET warehouse/{warehouseId}/product/{productId}/availableACL:p2lab_stockly_warehouse_stock:read
Antwortet {"available": 12} und sonst nichts. Verwenden Sie es für eine Scanprüfung oder ein Tor, wo die Zeilen
zu laden und lokal zu summieren zusätzliche Arbeit für dieselbe Antwort ist.
Wer die reservierten Einheiten hält
Abschnitt betitelt „Wer die reservierten Einheiten hält“
GET warehouse/stock/product/{productId}/reservations?grain=order&page=1&limit=10ACL:p2lab_stockly_warehouse_stock:read
grain | Eine Zeile je |
|---|---|
order | Bestellung (die Voreinstellung) |
bin | Lager + Lagerplatz + Ladungsträger + Bestellung |
backorder | Bestellung, der noch Ware geschuldet wird |
Die Antwort trägt data, total, totalReserved, totalBackordered, page, limit und das grain, das sie
beantwortet hat. Ein unbekanntes Grain ist eine 400, kein stiller Rückfall.
Diese Zeilen stammen aus den Reservierungszeilen, denselben Zahlen, die die Kachel Reserviert in der Administration summiert: Eine Liste und eine Kachel, die sich widersprechen, sind der Fehler, den es mit diesem Endpunkt zu verhindern gilt.
Lots, Chargen und Platzierungen
Abschnitt betitelt „Lots, Chargen und Platzierungen“| Methode | Pfad | Antwortet |
|---|---|---|
GET | warehouse/stock/batches/{productId} | jedes Lot des Produkts, mit Ablaufdatum |
GET | warehouse/stock/{warehouseId}/batches/{productId} | dasselbe, in einem Lager |
GET | warehouse/stock/placements/{productId} | wo seine Lots körperlich sitzen |
GET | warehouse/stock/{warehouseId}/{binLocationId}/placements/{productId} | die Platzierungen in einem Lagerplatz |
GET | warehouse/stock/{warehouseId}/loose-bins/{productId} | Lagerplätze, die es lose halten, abseits jedes Trägers |
GET | warehouse/{warehouseId}/stock/pickable-source/{productId} | Platzierungen, aus denen eine Entnahme ziehen darf |
GET | warehouse/stock/product/{productId}/batch-history | wie seine Lots sich über die Zeit geändert haben |
GET | warehouse/batch-trace/{batchNumber} | wohin eine Lotnummer ging, über das Netz hinweg |
GET | warehouse/order-lots/{orderId} | welche Lots eine Bestellung versandt hat |
Die letzten beiden sind das, was eine Rückruffrage tatsächlich braucht: Sie beantworten „wer hat dieses Lot erhalten”, ohne einen von Hand geschriebenen Join.
Bewegungen
Abschnitt betitelt „Bewegungen“
GET|POST warehouse/stock/movements/{productId}ACL:p2lab_stockly_warehouse_stock_movement:read
Das Journal für ein Produkt. POST nimmt einen Filterkörper entgegen, für die Fälle, die eine Abfragezeichenkette
nicht ausdrücken kann.
Für alles Berichtsförmige ist das Journal auch eine gewöhnliche Entität:
/api/search/p2lab-stockly-warehouse-stock-movement mit eigenen Filtern und Aggregationen ist oft weniger
Arbeit, als diesen Endpunkt zu blättern.
Bestellungen
Abschnitt betitelt „Bestellungen“| Methode | Pfad | Antwortet | ACL |
|---|---|---|---|
GET | warehouse/order/{orderId}/allocations | das Beschaffungsbild je Position; ?warehouseId= ergänzen für das Urteil „anderswo offen” | p2lab_stockly.viewer |
GET | warehouse/order/{orderId}/stock-targets | gegen welchen Standort jede Position gebucht ist | p2lab_stockly_warehouse_stock:read |
GET | warehouse/order/{orderId}/pick-plan | wohin ein Kommissionierer geschickt würde | p2lab_stockly_warehouse_stock:read |
pick-plan ist ein Vorschlag und schreibt nichts, was ihn nützlich macht, um einen Plan zu zeigen, bevor jemand losgeht.
Lagerplätze
Abschnitt betitelt „Lagerplätze“
POST warehouse/{warehouseId}/bin-optionsACL:p2lab_stockly.viewer
Eine Seite Optionen für die Lagerplatzauswahl mit ihren Kennzeichen und ihrer Reihenfolge, serverseitig zusammengestellt. Es gibt sie, weil die Alternative, jeden Lagerplatz und jede Bestandszeile des Lagers zum Client zu ziehen und dort zu sortieren, der Weg ist, auf dem eine Lagerplatzauswahl in einem echten Lager unbenutzbar wird.
Verwandt: POST warehouse/{warehouseId}/bin-occupancy dafür, wie voll Lagerplätze sind, und
POST warehouse/{warehouseId}/suggest-bin dafür, wohin eine Einlagerung ginge.
Wann stattdessen einfaches DAL zu verwenden ist
Abschnitt betitelt „Wann stattdessen einfaches DAL zu verwenden ist“Alles ist eine Shopware-Entität, und /api/search/… ist das richtige Werkzeug für Berichte, Exporte und jede
Frage mit eigenen Filtern. Verloren geht dabei das, was diese Endpunkte obendrauf legen: eine
Verfügbarkeitsrechnung, die Zeile für Zeile zu product.stock passt, Reservierungszahlen aus den Zeilen statt
aus dem Zwischenspeicher, und die Aggregation über Varianten.
Zwei Regeln aus der Packing API gelten hier genauso:
Null ist nicht null. Ein fehlender Wert heißt, dass niemand einen erfasst hat: Ein Ablaufdatum von null
ist ein Lot ohne erfasste Haltbarkeit, keines, das abgelaufen ist.
Leiten Sie eine veröffentlichte Zahl nicht neu ab. Hat eine Zahl einen Endpunkt, lesen Sie den Endpunkt. Jedes örtlich nachgebaute „available” in der Geschichte dieses Moduls ist irgendwann mit dem uneins geworden, gegen das der Shop verkauft.
- Bestand in einen Lagerplatz legen — die Schreibseite
- Korrekturen und Massenaufträge
- Events — benachrichtigt werden statt zu fragen