Kapitola 5: Technická Reference - Business Logika
5.1 Skladové Služby
5.1.1 Issuer (Tools\Stock\Services\Issuer)
Řídí rezervace a výdeje pro GoodsIssue, WarehouseTransfer, GoodsRestock.
reserve: Hlídá, aby stav nebyl finální, vyžaduje zdrojový sklad, odmítne produkty s variantami, smaže staré rezervace, určí zásobu strategií dle typu skladu, zapíše rezervované řádky do linkuitemsa nastaví stav Rezervováno.issue: Načte rezervované řádky (při chybě je nejprve vytvoří), provedeStockManager->removeStockv transakci, nastaví stav Vyskladněno aissuedAt; při chybě vrací transakci, maže rezervace, přepne na Návrh.- Součty: Pro GoodsIssue/WarehouseTransfer počítá
totalIssuedPricepřesPriceCalculator.
5.1.2 Receiver (Tools\Stock\Services\Receiver)
Řídí přírůstky.
receive(): Najde nebo vytvoříWarehouseItemdle produkt/pozice/sériové č., navýší množství; používá se při dokončení převodu.
5.1.3 Transferer (Tools\Stock\Services\Transferer)
Atomický přesun pro WarehouseTransfer.
- Obalí
Issuer->reserve(zwarehouseFrom) +Issuer->issue+Receiver->receive(warehouseTo) do jedné DB transakce, nastaví ceny a stavy.
5.1.4 Určení & Zajištění
- Rezervace bez pozice používá strategii určení zásob (např. FIFO) dle typu skladu
Tools\Stock\Determination\Factory. - Ochrana variant: rezervace selže, pokud je požadován produkt s variantami.
- Záporné zásoby:
RecordHooks\WarehouseItem\AssertPositivitynepovolíquantity < 0.
5.2 Automatizace Řízená Statusem (Reservable Hooks)
Společný základ: Services\Abstract\Reservable::process, volaný z record hooků, reaguje na změny statusu.
GoodsIssue
- Hook:
RecordHooks\GoodsIssue\GoodsIssue. - Reset: Stav v
getResetStatuses(Návrh, Zrušeno) smaže rezervované řádky. - Rezervování: Status = Rezervování →
Issuer->reserve. - Zpracovává se: Status = Zpracovává se →
Issuer->issue(stav Vyskladněno).
WarehouseTransfer
- Hook:
RecordHooks\WarehouseTransfer\WarehouseTransfer. - Reset: Návrh/Zrušeno smaže rezervované řádky.
- Rezervování: Status = Rezervování →
Issuer->reserve. - Zpracovává se: Status = Zpracovává se →
Transferer->transfer(rezervace + přesun + příjem) s výsledkem Přesunuto.
GoodsRestock
- Hook:
RecordHooks\GoodsRestock\GoodsRestock. - Otevírám: Status = Otevírám →
GoodsRestockService->open(vyčistí rezervace, nastaví Otevřeno). - Reset: Stav v
getResetStatuses(Otevřeno) smaže rezervace. - Ruším: Status = Ruším →
GoodsRestockService->cancel(reset rezervací, Zrušeno). - Zavírám: Status = Zavírám →
GoodsRestockService->close(rezervace ze skladu nebo přes issuer, Uzavřeno; transakčně). - Archivuji: Status = Archivuji →
GoodsRestockService->archive(vydá rezervy, Archivováno). - Vyřizuje se:
GoodsRestockService->setInProgress*napojí zdroj poptávky a nastaví Vyřizuje se. - Výroba: Při Close, pokud je nainstalován Production a produkt je typu Product, automaticky vznikne
ProductionOrder.
Diagram Životního Cyklu Reservable
Klikněte pro zobrazení životního cyklu
5.3 Doplňování a Nákup (GoodsRestock)
Služba: Services\GoodsRestock
- Open/Close/Archive/Cancel: viz §5.2;
archivevydá zásoby přesIssuer;closemůže buď rezervovat existující sklad (reserveFromWarehouse), nebo spustit standardní rezervaci přes issuer. - Agregace poptávky:
itemsForReservationdrží požadované zboží;reservedItemsalokace;quantityFulfilledse aktualizuje přesfulfillQuantity. - Nákupní objednávky:
createPurchaseOrderFromGoodsRestocksIdsseskupí otevřené/uzavřitelné restocky podle dodavatele a vytvoří položkyPurchaseOrder, případně restocky předem uzavře. - Integrační hooky: Stock hooky (
HookMediator) běží před/po změně statusu pro další automatizaci.
Diagram GoodsRestock
Klikněte pro zobrazení toku GoodsRestock
5.4 Dodací Listy a Skladové Transakce
IssuedDeliveryNotepři stavu Issued generuje/propojujeGoodsIssue; jejich vydání provede úbytky přes Issuer.ReceivedDeliveryNotepři stavu Received odkazuje naGoodsReceipt; jejich zpracování navyšuje zásoby přes Receiver.
5.5 Rezervace & Určení
- Rezervace se perzistují jako vazby
ReservedStocka kopieitemsna rezervovatelném objektu, což zajišťuje 1:1 mapování mezi poptávkou a vybranýmWarehouseItem. - Strategie určení vybírají fyzickou zásobu, pokud není pozice uvedena; engine běží dle typu skladu a respektuje již rezervované množství a filtr parentId, aby nedošlo k dvojité rezervaci stejného řádku pro stejný dokument.
5.6 Stavové Strojky
GoodsIssue
Klikněte pro zobrazení stavů GoodsIssue
WarehouseTransfer
Klikněte pro zobrazení stavů WarehouseTransfer
GoodsReceipt
- Návrh → Zpracovává se → Naskladněno, plus Zrušeno.
GoodsRestock
Klikněte pro zobrazení stavů GoodsRestock
Dodací Listy
- IssuedDeliveryNote: Návrh → Zpracovává se → Vyskladněno → Zrušeno.
- ReceivedDeliveryNote: Návrh → Zpracovává se → Příjemka vytvořena → Zrušeno.
5.7 Automatizační Matice (Hooky/Služby)
| Spouštěč | Komponenta | Efekt |
|---|---|---|
| Změna statusu GoodsIssue | RecordHooks/GoodsIssue/GoodsIssue | Rezervování→reserve; Zpracovává se→issue; reset stavy smažou rezervace |
| Změna statusu WarehouseTransfer | RecordHooks/WarehouseTransfer/WarehouseTransfer | Rezervování→reserve; Zpracovává se→transfer (issue+receive) |
| Změna statusu GoodsRestock | RecordHooks/GoodsRestock/GoodsRestock | Otevírám/Otevřeno resetují rezervace; Zavírám rezervuje a nastaví Uzavřeno; Archivuji vydá; Ruším reset; umí vytvořit ProductionOrder |
| Archivace GoodsRestock | Hooks/GoodsRestock/CreateGoodsIssueOnArchivation + EnforceFulfillment | Vyžaduje quantityRemaining=0; umí vytvořit GoodsIssue pro projektový sklad; při nesplnění vrátí status |
| Vynucení plnění | Hooks/GoodsRestock/UpdateStatus | Sladí status s pravidly plnění položek |
| Dodací listy | Hooks/IssuedDeliveryNote/*, Hooks/ReceivedDeliveryNote/ProcessReceivedDeliveryNote | Při změně statusu vytvoří/propojí GoodsIssue nebo GoodsReceipt, propagují pole |
| Ochrana proti mínusu | RecordHooks/WarehouseItem/AssertPositivity | Blokuje quantity < 0 |
| Propagace cen | Hooks/WarehouseItem/PricePropagation, Hooks/WarehouseItem/UpdateParentPrice, Hooks/Product/UpdateCostPrice | Aktualizuje související ceny/náklady při změně položky/produktu |
| Inventura | Hooks/PhysicalInventoryList/AddItem, UpdatePhysicalInventory | Při přiřazení/uložení položek je zrcadlí do PhysicalInventory pomocí helperu |
| Číslování GoodsReceipt | Hooks/GoodsReceipt/SetFields | Doplní referenceIdentifier z automatické sekvence, pokud chybí |
| Aktualizace položek GoodsRestock | Hooks/GoodsRestockItem/UpdateStatus | Zakáže úpravu qtyRequired na uzavřených restocích; přepočítá qtyRemaining a součty rodiče |
5.8 Nákup z GoodsRestock
Služba: Services\GoodsRestock::createPurchaseOrderFromGoodsRestocksIds
- Nasbírá vybrané GoodsRestock, které lze uzavřít; uzavře ty, které nejsou.
- Seskupí produkty strategií dodavatele (pokud je), vytvoří PurchaseOrder(y) s položkami; prázdné objednávky přeskočí.
- Používá
quantityRequired/quantityFulfilleda vazby (ProjectItem/PurchaseOrder) pro sestavení poptávky; transakčně commit/rollback při chybě.