Warenwirtschaft: OPT-2 Settings-CRUD-Basisklasse
- Abstrakte SettingCrudController-Basis für die kleinen Stammdaten-CRUDs - TaxRate/DeliveryTime/DisposalReason/MaterialQuality/Location/SupplierCategory/PackagingMaterial auf ~25-Zeilen-Konfiguration reduziert - Identische Update*Request-Klassen entfernt (Update nutzt Store-Request, via updateRequestClass() überschreibbar) - Bilanz -441/+73 Zeilen; Grundlage für die Lagerort-CRUDs in AP-21 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
65f949dd7a
commit
8c90d95c69
16 changed files with 216 additions and 445 deletions
|
|
@ -98,8 +98,8 @@ Alle Punkte dieser älteren Runde sind in V4.0 eingeflossen und umgesetzt (URL-F
|
|||
| # | AP | Titel | Abhängigkeit | Aufwand |
|
||||
|---|---|---|---|---|
|
||||
| 1 | ✅ OPT-1 | Quick Wins (N+1, Indizes, ExampleTest) — **erledigt 06.07.2026** | – | 0,5 Tage |
|
||||
| 2 | ➡️ OPT-2 | **NÄCHSTER SCHRITT:** Settings-CRUD-Basisklasse | – | 1 Tag |
|
||||
| 3 | AP-21 | INCI-Erweiterungen (Lieferant+URL-Repeater, „nur aktive", Alternativname, Lagerort + 3 Stammdaten-CRUDs) | OPT-2 | 2–3,5 Tage |
|
||||
| 2 | ✅ OPT-2 | Settings-CRUD-Basisklasse — **erledigt 06.07.2026** | – | 1 Tag |
|
||||
| 3 | ➡️ AP-21 | **NÄCHSTER SCHRITT:** INCI-Erweiterungen (Lieferant+URL-Repeater, „nur aktive", Alternativname, Lagerort + 3 Stammdaten-CRUDs) | OPT-2 | 2–3,5 Tage |
|
||||
| 4 | AP-20 | Rohstoffbestand-Filter + „Kein Rohstoffbestand"-Flag | AP-21 | 1–2 Tage |
|
||||
| 5 | AP-23 | Rezeptur-Phasen (Hersteller-Rezeptur) | – | 3–5 Tage |
|
||||
| 6 | AP-24 | Chargen-Nr.-Präfix | – | 1 Tag |
|
||||
|
|
@ -148,7 +148,7 @@ Die fachlichen Detailspezifikationen zu **AP-20, AP-21, AP-23, AP-24, AP-27, AP-
|
|||
| Datum | AP | Kurzbeschreibung | Tests |
|
||||
|---|---|---|---|
|
||||
| 06.07.2026 | **OPT-1 (Quick Wins)** | **N+1-Fix Ausschussliste:** `StockDisposalController@index` lädt jetzt `user.account` eager (vorher `user` → bis zu 500 Lazy-Loads durch `getFullName()`). **Composite-Indizes:** Migration `2026_07_06_113731_add_aggregation_indexes_to_stock_entries_table` — `stock_entries(entry_type, status, ingredient_id)` + `(entry_type, status, packaging_item_id)` für die Aggregations-Queries im `InventoryService`; auf DB ausgeführt. **Befund-Korrektur:** Der Index `production_ingredients(production_id, ingredient_id)` ist **nicht** redundant — er bedient den FK auf `production_id` mit (kein separater FK-Index vorhanden, per `SHOW INDEX` verifiziert) → bleibt bestehen. **Ungenutzter Eager-Load** `producedByUser` aus `ProductionRepository::listForIndex()` entfernt (wird nur in `show` gebraucht, dort bereits via `producedByUser.account` geladen). **`ExampleTest`** auf `assertRedirect()` umgestellt (Domain-Redirect auf `/`) — Suite dauerhaft 100 % grün. | Neuer Query-Count-Test `ausschuss-liste laedt benutzerkonten ohne n+1` in `StockDisposalTest` (verifiziert: schlägt ohne Fix fehl). Volle Suite: **155 grün, 538 Assertions** |
|
||||
| _offen_ | OPT-2 | Settings-CRUD-Basisklasse (7 Controller) | – |
|
||||
| 06.07.2026 | **OPT-2 (Settings-CRUD-Basisklasse)** | Neue abstrakte Basisklasse `app/Http/Controllers/Admin/Inventory/SettingCrudController.php`: generisches index/create/store/edit/update/destroy; Kind-Controller definieren nur noch `modelClass()`, `viewPrefix()`, `redirectRoute()`, `storeRequestClass()` (+ optional `newModelAttributes()`, `indexOrder()`, `updateRequestClass()`). Validierung per Container-Auflösung des FormRequests (Verhalten wie Method-Injection), Model-Auflösung aus dem Routen-Parameter via `findOrFail` (404-Verhalten unverändert). Umgestellt: `TaxRate`, `DeliveryTime`, `DisposalReason`, `MaterialQuality`, `Location`, `SupplierCategory`, `PackagingMaterial` (je ~50 → ~25 Zeilen reine Konfiguration). Die 7 `Update*Request`-Klassen waren mit den Store-Requests identisch und wurden entfernt (Update nutzt den Store-Request; bei künftiger Abweichung `updateRequestClass()` überschreiben). Form-Views bleiben bewusst je Entität (unterschiedliche Felder). **Bilanz: −441/+73 Zeilen.** Neue Settings-CRUDs (z. B. Raum/Regal/Fach in AP-21) = 1 Model + 1 Store-Request + ~25-Zeilen-Controller. | Volle Suite **155 grün, 538 Assertions** (inkl. `TaxRateSettingsTest`, `DeliveryTimeSettingsTest`, `DisposalReasonSettingsTest`, `InventoryPhase2Test`, `InventoryPhase3Test`) |
|
||||
| _offen_ | AP-21 | INCI-Erweiterungen | – |
|
||||
| _offen_ | AP-20 | Rohstoffbestand-Filter + Flag | – |
|
||||
| _offen_ | AP-23 | Rezeptur-Phasen | – |
|
||||
|
|
@ -159,4 +159,4 @@ Die fachlichen Detailspezifikationen zu **AP-20, AP-21, AP-23, AP-24, AP-27, AP-
|
|||
| _offen_ | AP-13 | Shop-Bestandsabzug | – |
|
||||
| _offen_ | AP-14/15/16/17 | Audit-Trail, Blockrechte, 2FA, WaWi-Einstellungen | – |
|
||||
|
||||
> **➡️ HIER GEHT ES WEITER: OPT-2 (Settings-CRUD-Basisklasse).** Danach AP-21 gemäß V5.0-Spezifikation — alle Klärungspunkte sind beantwortet (§4): Lagerort = drei getrennte Stammdaten-Tabellen Raum/Regal/Fach.
|
||||
> **➡️ HIER GEHT ES WEITER: AP-21 (INCI-Erweiterungen)** gemäß V5.0-Spezifikation — alle Klärungspunkte sind beantwortet (§4): Lagerort = drei getrennte Stammdaten-Tabellen Raum/Regal/Fach, als `SettingCrudController`-Kinder (OPT-2) anlegen.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue