Přeskočit na hlavní obsah

Kapitola 5: Technická Reference - Business Logika

5.1 Architektura Vrstvy Služeb

Modul umisťuje těžkou business logiku do vrstvy Services. Tyto třídy obsluhují získávání dat, výpočty a komplexní ukládání.

5.1.1 Služba ProductionOrder (Services/ProductionOrder.php)

Těžkotonážní kontrolér modulu.

  • calculateTotalProductionCost(id): Agreguje tři složky nákladů:
    • Práce: Sčítá trvání WorkPerformed × (Sazba Pracoviště + Sazba Stroje).
    • Materiál: Sčítá hodnoty GoodsIssue.
    • Kooperace: Sčítá částky SupplierInvoice nebo Cooperation.
  • getChildProductionOrdersRecursive(id): Používá prohledávání do hloubky (DFS) k sestavení celého výrobního stromu pro složitý produkt.
  • getDirectChildrenForProductionOrder(id): Podpůrná metoda pro UI "Stromový Pohled".

5.1.2 Služba ProductionModelOperation

  • calculateTotalOperationPrice(id): Počítá teoretickou nebo skutečnou cenu jednoho kroku.
    • Logika: (Přípravný Čas + (Čas Běhu × Množství)) × Hodinová Sazba.

5.2 Logika Řízená Událostmi (Hooks)

Systém používá AutoERP Hooks k zajištění konzistence dat a automatizaci workflow.

5.2.1 Inicializace Zakázky

  • Hooks/ProductionOrder/FillFromModel:
    • Spouštěč: afterSave (Nový Záznam).
    • Akce: Klonuje billOfMaterials a operations z propojeného ProductionModel do nové Zakázky.
  • Hooks/ProductionOrder/CreateChildOrders:
    • Spouštěč: afterSave (Nový Záznam).
    • Akce: Skenuje Kusovník. Pokud má surovina svůj vlastní Výchozí Výrobní Model, automaticky se vytvoří Podřízená Zakázka. To umožňuje víceúrovňovou rekurzivní výrobu.

5.2.2 Řízení Stavu

  • Hooks/ProductionOrder/ProcessProductionOrder:
    • Spouštěč: afterSave.
    • Akce: Delegováno na ProductionContextUpdater.

5.2.3 Spouštěče Skladu

  • Hooks/WorkPerformed/HandleTransactionCreation:
    • Spouštěč: afterSave Pracovního Logu.
    • Akce: Volá ProductionTransactionManager::createGoodsIssue k okamžitému odečtení materiálu.

5.3 Context Engine

Logika pro aktualizace Stavu je komplexní a oddělená do specializovaných Nástrojů (Tools).

5.3.1 Context Updater (Tools/Production/Context/ProductionContextUpdater.php)

Tato třída je centrálním "mozkem" pro změny stavů.

  • Zodpovědnost: Voláno kdykoli se změní Zakázka nebo Operace.
  • Klíčová Logika:
    1. Počítá Vyrobené Množství: Min(Zpracované Množství všech Výrobních Operací).
    2. Volá Status Manager: Aby zjistil, zda se má změnit stav.
    3. Spouští Příjem Zboží: Pokud stav přeskočí na Dokončeno, vygeneruje skladový záznam pro hotové zboží.

5.3.2 Status Manager (Tools/Production/Status/ProductionStatusManager.php)

Určuje stav na základě podřízených prvků. Toto je zdroj pravdy pro životní cyklus ProductionOrder.

  • Návrh (Draft): Počáteční stav.
  • Naplánováno (Planned): Zakázka naplánována, práce nezačala.
  • Probíhá (Ongoing): Práce začala (Některá operace je V procesu nebo Hotovo).
  • Dokončeno (Completed): Všechny operace jsou Hotovo (pokud je povoleno Auto-Dokončení). Spouští finální příjem na sklad.
  • Objednáno (Ordered): (Stav položky kusovníku) Objednávka odeslána dodavateli.
  • ČekáníNaDodání (WaitingForDelivery): (Stav položky kusovníku) Objednáno, čeká se na zboží.

5.4 Řízení Transakcí

Třída: Tools/Production/Transaction/Manager.php

Tato třída funguje jako most k modulu WarehouseManagement.

  • createGoodsIssue:
    • Vytváří entitu GoodsIssue.
    • Kopíruje položky z materiálu WorkPerformed.
    • Spouští odečet ze skladu.
  • createGoodsReceipt:
    • Vytváří entitu GoodsReceipt.
    • Počítá Jednotkovou Cenu (Celková Cena / Množství).
    • Spouští přírůstek na sklad.

5.5 Logika Objednávání Kusovníků (Nákup)

Třída: Tools/Production/OrderBom/OrderBomProcessor.php

Řídí část "Koupit" z rozhodování "Vyrobit vs Koupit".

  • Validace: Kontroluje, zda všechny nakupované položky mají platné Dodavatele.
  • Objednávky: Seskupuje položky podle Dodavatele a vytváří entity PurchaseOrder (vyžaduje modul Accounting).
  • Kooperace: Vytváří Cooperation entity pro outsourcované operace.
  • Rekurze: Prochází strom dolů k podřízeným zakázkám, aby zajistil objednání všeho potřebného.

5.6 Pokročilé Plánování a Logika Bran (Gates)

Hook: Hooks/ProductionOrder/CalculateGates.php

Modul implementuje striktní Stage-Gate proces pro plánování. Na rozdíl od standardního MRP, které může používat plánování do nekonečné kapacity, tento systém spoléhá na pevné milníky ("Brány").

5.6.1 Časová Osa Bran

Časová osa je ukotvena mezi Gate A (Start) a Gate F (Konec).

  • Gate A: Start Výroby.
  • Gate B: Mechanické Dokončení.
  • Gate D: Připravenost Materiálu (synchronizováno s materialReadinessDate).
  • Gate E: Dokončení Montáže.
  • Gate F: Finální Inspekce / Připravenost k Expedici.

5.6.2 Hardcoded Logika Operací

Systém počítá trvání mezi branami vyhledáváním specifických Kódů Operací v technologickém postupu.

  • 010, 0110, 0120: Určují čas do Gate A.
  • 0200 - 0350: Určují trvání Gate A.
  • 0400 - 0499: Určují trvání Gate B.
  • 050: Určuje trvání do Gate E.
  • f001 - f003: Určují trvání do Gate F.

Varování: Plánovací logika striktně závisí na těchto Kódech Operací. Pokud je operace přejmenována nebo se změní její kód, výpočet plánu použije defaultní (fallback) hodnoty.

Diagram Stage-Gate Logiky

Klikněte pro zobrazení Diagramu Stage-Gate Logiky

5.7 Integrace s Project Managementem

Hook: Hooks/WorkPerformed/CreateProjectCost.php

Pokud je Výrobní Zakázka propojena s Projektem (přímo nebo přes nadřazenou zakázku), systém automaticky kapitalizuje výrobní náklady do Projektu.

  1. Spouštěč: Uložení záznamu WorkPerformed.
  2. Rozlišení: Systém prochází hierarchii ProductionOrder nahoru, aby našel kořenový Project.
  3. Výpočet: Náklad = Trvání Práce × (Sazba Pracoviště + Sazba Stroje + Sazba Pracovníka).
  4. Akce: Vytvoří nebo aktualizuje entitu ProjectCost propojenou s daným Projektem.
    • Typ: Labor (nebo ExtraWork pokud označeno).
    • Status: Actual.