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
SupplierInvoiceneboCooperation.
- Práce: Sčítá trvání
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.
- Logika:
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
billOfMaterialsaoperationsz propojenéhoProductionModeldo nové Zakázky.
- Spouštěč:
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.
- Spouštěč:
5.2.2 Řízení Stavu
Hooks/ProductionOrder/ProcessProductionOrder:- Spouštěč:
afterSave. - Akce: Delegováno na
ProductionContextUpdater.
- Spouštěč:
5.2.3 Spouštěče Skladu
Hooks/WorkPerformed/HandleTransactionCreation:- Spouštěč:
afterSavePracovního Logu. - Akce: Volá
ProductionTransactionManager::createGoodsIssuek okamžitému odečtení materiálu.
- Spouštěč:
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:
- Počítá Vyrobené Množství:
Min(Zpracované Množství všech Výrobních Operací). - Volá Status Manager: Aby zjistil, zda se má změnit stav.
- Spouští Příjem Zboží: Pokud stav přeskočí na
Dokončeno, vygeneruje skladový záznam pro hotové zboží.
- Počítá Vyrobené Množství:
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 procesuneboHotovo). - 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.
- Vytváří entitu
createGoodsReceipt:- Vytváří entitu
GoodsReceipt. - Počítá Jednotkovou Cenu (
Celková Cena / Množství). - Spouští přírůstek na sklad.
- Vytváří entitu
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áří
Cooperationentity 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.
- Spouštěč: Uložení záznamu
WorkPerformed. - Rozlišení: Systém prochází hierarchii
ProductionOrdernahoru, aby našel kořenovýProject. - Výpočet:
Náklad = Trvání Práce × (Sazba Pracoviště + Sazba Stroje + Sazba Pracovníka). - Akce: Vytvoří nebo aktualizuje entitu
ProjectCostpropojenou s daným Projektem.- Typ:
Labor(neboExtraWorkpokud označeno). - Status:
Actual.
- Typ: