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.