Přeskočit na hlavní obsah

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 linku items a nastaví stav Rezervováno.
  • issue: Načte rezervované řádky (při chybě je nejprve vytvoří), provede StockManager->removeStock v transakci, nastaví stav Vyskladněno a issuedAt; při chybě vrací transakci, maže rezervace, přepne na Návrh.
  • Součty: Pro GoodsIssue/WarehouseTransfer počítá totalIssuedPrice přes PriceCalculator.

5.1.2 Receiver (Tools\Stock\Services\Receiver)

Řídí přírůstky.

  • receive(): Najde nebo vytvoří WarehouseItem dle 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 (z warehouseFrom) + 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\AssertPositivity nepovolí 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; archive vydá zásoby přes Issuer; close může buď rezervovat existující sklad (reserveFromWarehouse), nebo spustit standardní rezervaci přes issuer.
  • Agregace poptávky: itemsForReservation drží požadované zboží; reservedItems alokace; quantityFulfilled se aktualizuje přes fulfillQuantity.
  • Nákupní objednávky: createPurchaseOrderFromGoodsRestocksIds seskupí otevřené/uzavřitelné restocky podle dodavatele a vytvoří položky PurchaseOrder, 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

  • IssuedDeliveryNote při stavu Issued generuje/propojuje GoodsIssue; jejich vydání provede úbytky přes Issuer.
  • ReceivedDeliveryNote při stavu Received odkazuje na GoodsReceipt; jejich zpracování navyšuje zásoby přes Receiver.

5.5 Rezervace & Určení

  • Rezervace se perzistují jako vazby ReservedStock a kopie items na rezervovatelném objektu, což zajišťuje 1:1 mapování mezi poptávkou a vybraným WarehouseItem.
  • 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ěčKomponentaEfekt
Změna statusu GoodsIssueRecordHooks/GoodsIssue/GoodsIssueRezervování→reserve; Zpracovává se→issue; reset stavy smažou rezervace
Změna statusu WarehouseTransferRecordHooks/WarehouseTransfer/WarehouseTransferRezervování→reserve; Zpracovává se→transfer (issue+receive)
Změna statusu GoodsRestockRecordHooks/GoodsRestock/GoodsRestockOtevírám/Otevřeno resetují rezervace; Zavírám rezervuje a nastaví Uzavřeno; Archivuji vydá; Ruším reset; umí vytvořit ProductionOrder
Archivace GoodsRestockHooks/GoodsRestock/CreateGoodsIssueOnArchivation + EnforceFulfillmentVyžaduje quantityRemaining=0; umí vytvořit GoodsIssue pro projektový sklad; při nesplnění vrátí status
Vynucení plněníHooks/GoodsRestock/UpdateStatusSladí status s pravidly plnění položek
Dodací listyHooks/IssuedDeliveryNote/*, Hooks/ReceivedDeliveryNote/ProcessReceivedDeliveryNotePři změně statusu vytvoří/propojí GoodsIssue nebo GoodsReceipt, propagují pole
Ochrana proti mínusuRecordHooks/WarehouseItem/AssertPositivityBlokuje quantity < 0
Propagace cenHooks/WarehouseItem/PricePropagation, Hooks/WarehouseItem/UpdateParentPrice, Hooks/Product/UpdateCostPriceAktualizuje související ceny/náklady při změně položky/produktu
InventuraHooks/PhysicalInventoryList/AddItem, UpdatePhysicalInventoryPři přiřazení/uložení položek je zrcadlí do PhysicalInventory pomocí helperu
Číslování GoodsReceiptHooks/GoodsReceipt/SetFieldsDoplní referenceIdentifier z automatické sekvence, pokud chybí
Aktualizace položek GoodsRestockHooks/GoodsRestockItem/UpdateStatusZakáž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/quantityFulfilled a vazby (ProjectItem/PurchaseOrder) pro sestavení poptávky; transakčně commit/rollback při chybě.

5.9 Toky Dodání/Příjmu

Klikněte pro zobrazení toku Dodací list → Sklad
Klikněte pro zobrazení toku Příjmu
Klikněte pro zobrazení Diagramu Doplňování