Appearance
TracingAudit Modul
Das TracingAudit-Modul ist ein Submodul des Tracing-Moduls und dient zur automatischen Protokollierung von Rückverfolgungsvorgängen auf TC-Produktionslinien.
Architektur
Modulstruktur
src/modules/tracing/modules/tracingAudit/
├── controllers/
│ ├── AuditController.php # Web-Ansicht für Audit-Einträge
│ └── api/
│ ├── DeviceController.php # Select2-API für Geräte
│ ├── TcLineController.php # Select2-API für TC-Linien
│ └── UserController.php # Select2-API für Benutzer
├── messages/
│ └── de/
│ └── m_tracingAudit_main.php # Übersetzungen
├── migrations/
│ ├── M260114092122CreateTcTracingAuditTable.php
│ └── M260114114419AddSourceChargeColumn.php
├── models/
│ ├── db/
│ │ └── TcTracingAudit.php # ActiveRecord Model
│ └── search/
│ └── TcTracingAuditSearch.php # Suchmodell für GridView
├── views/
│ └── audit/
│ └── index.php # GridView mit Filtern
└── Module.php # Modul-KonfigurationDatenmodell
tc_tracing_audit Tabelle
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | int | Primary Key |
| tcLineId | int | FK zu tc_line.id |
| deviceId | int | FK zu device.id |
| userId | int | FK zu user.id |
| chargeNr | string(20) | Zielcharge (Produktionsauftrag) |
| sourceChargeNr | string(20) | Quellcharge (z.B. VPM-Partie) |
| quantity | int | Hinzugefügte Menge |
PostActionHooks Integration
Das TracingAudit-Modul nutzt die PostActionHooks-Komponente, um nach jeder Controller-Action automatisch Audit-Einträge zu erstellen. Dies ermöglicht eine vollständig automatische Protokollierung ohne Änderungen an bestehenden Tracing-Controllern.
Funktionsweise
1. Komponenten-Registrierung
Die PostActionHooks-Komponente ist als Core-Komponente in src/config/coreComponents.php registriert:
php
'postActionHooks' => [
'class' => PostActionHooks::class
]2. Event-Binding
Bei der Initialisierung der Komponente wird ein Event-Listener auf das EVENT_AFTER_ACTION Event der Yii2-Applikation registriert:
php
public function init()
{
parent::init();
if (\app\models\db\Licenses::findOne(['module' => 'tclineproduction'])->license){
Yii::$app->on(Module::EVENT_AFTER_ACTION, [$this, 'addTracingAudit']);
}
}Wichtig: Der Event-Listener wird nur registriert, wenn die Lizenz für tclineproduction aktiviert ist.
3. Audit-Erstellung
Nach jeder Controller-Action wird die addTracingAudit() Methode aufgerufen:
php
public function addTracingAudit(): void
{
// Prüfung ob TC-Line Header vorhanden
if (($line_header = Yii::$app->request->headers->get('TC-Line')) != null) {
// Daten aus Request sammeln
$line = TcLine::find()->where(['id' => $line_header])->one();
$user = Yii::$app->user->identity;
$device = Device::find()->where(['serial_number' => ...->get('DeviceId')])->one();
// Validierung
if (!$user) throw new UnauthorizedHttpException(...);
if (!$line) throw new NotFoundHttpException(...);
if (!$device) throw new NotFoundHttpException(...);
// Audit-Eintrag erstellen
$audit = new TcTracingAudit([
'tcLineId' => $line->id,
'userId' => $user->id,
'deviceId' => $device->id,
'chargeNr' => Yii::$app->request->queryParams['targetCharge'],
'sourceChargeNr' => Yii::$app->request->post()['sourceCharge'],
'quantity' => Yii::$app->request->post()['count']
]);
if (!$audit->save())
throw new UnprocessableEntityHttpException(...);
}
}Datenquellen
Der Hook sammelt Daten aus verschiedenen Quellen:
| Datum | Quelle | Beschreibung |
|---|---|---|
| tcLineId | Request Header TC-Line | ID der Produktionslinie |
| deviceId | Request Header DeviceId | Seriennummer des Scanners |
| userId | Yii::$app->user->identity | Angemeldeter Benutzer |
| chargeNr | Query Parameter targetCharge | Zielcharge |
| sourceChargeNr | POST Body sourceCharge | Quellcharge |
| quantity | POST Body count | Menge |
Voraussetzungen für Audit-Erstellung
Ein Audit-Eintrag wird nur erstellt, wenn:
- Die Lizenz
tclineproductionaktiv ist - Der Request Header
TC-Linevorhanden und nicht leer ist - Ein gültiger Benutzer authentifiziert ist
- Die angegebene TC-Linie existiert
- Das angegebene Gerät existiert
Sidebar-Integration
Das Modul registriert sich über das itSideBarInterface in der Navigation:
php
public static function initSideBar(itSidebarBuilder $nav)
{
if(!Yii::$app->user->isGuest && Licenses::getOne('tclineproduction')->license == 1) {
$nav->addItem(Yii::t('m_tracingAudit_main', 'Line Production'),
'nav-icon bi bi-conveyor', null, 'm_tracingAudit', null, null, 190);
$nav->addItem(Yii::t('m_tracingAudit_main', 'Tracing Audit'),
'nav-icon bi bi-conveyor', ['/tracing/tracingAudit/audit/index'],
'', null, 'm_tracingAudit', 200);
}
}API-Endpunkte
Select2-Suche
Die folgenden Endpunkte stellen AJAX-Suche für die Filter-Dropdowns bereit:
| Endpunkt | Beschreibung |
|---|---|
/tracing/tracingAudit/api/device/select2search | Gerätesuche |
/tracing/tracingAudit/api/tc-line/select2search | TC-Linien-Suche |
/tracing/tracingAudit/api/user/select2search | Benutzersuche |
Internationalisierung
Übersetzungen befinden sich in messages/de/m_tracingAudit_main.php:
php
return [
'Line Production' => 'Linienproduktion',
'Tracing Audit' => 'Linien-Rückverfolgung',
'Charge Nr' => 'Produktionscharge',
'Source Charge Nr' => 'Charge',
'Device' => 'Gerät',
'TC Line' => 'TopControl Linie',
'User' => 'Benutzer',
'Quantity' => 'Anzahl',
];Erweiterbarkeit
Weitere Hooks hinzufügen
Um weitere PostAction-Hooks hinzuzufügen, kann die PostActionHooks-Komponente erweitert werden:
- Neue Methode in
PostActionHooks.phperstellen - In
init()Event-Binding hinzufügen (mit Lizenzprüfung falls nötig)
Vorteil des Hook-Ansatzes
Der PostActionHooks-Ansatz bietet folgende Vorteile:
- Entkopplung: Der Audit-Code ist vollständig vom Tracing-Controller getrennt
- Automatisch: Keine manuellen Aufrufe in bestehenden Controllern nötig
- Lizenzbasiert: Funktionalität wird automatisch aktiviert/deaktiviert
- Zentral: Alle Post-Action-Logik an einem Ort