Skip to content

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-Konfiguration

Datenmodell

tc_tracing_audit Tabelle

SpalteTypBeschreibung
idintPrimary Key
tcLineIdintFK zu tc_line.id
deviceIdintFK zu device.id
userIdintFK zu user.id
chargeNrstring(20)Zielcharge (Produktionsauftrag)
sourceChargeNrstring(20)Quellcharge (z.B. VPM-Partie)
quantityintHinzugefü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:

DatumQuelleBeschreibung
tcLineIdRequest Header TC-LineID der Produktionslinie
deviceIdRequest Header DeviceIdSeriennummer des Scanners
userIdYii::$app->user->identityAngemeldeter Benutzer
chargeNrQuery Parameter targetChargeZielcharge
sourceChargeNrPOST Body sourceChargeQuellcharge
quantityPOST Body countMenge

Voraussetzungen für Audit-Erstellung

Ein Audit-Eintrag wird nur erstellt, wenn:

  1. Die Lizenz tclineproduction aktiv ist
  2. Der Request Header TC-Line vorhanden und nicht leer ist
  3. Ein gültiger Benutzer authentifiziert ist
  4. Die angegebene TC-Linie existiert
  5. Das angegebene Gerät existiert

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:

EndpunktBeschreibung
/tracing/tracingAudit/api/device/select2searchGerätesuche
/tracing/tracingAudit/api/tc-line/select2searchTC-Linien-Suche
/tracing/tracingAudit/api/user/select2searchBenutzersuche

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:

  1. Neue Methode in PostActionHooks.php erstellen
  2. 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

ITeas iScan Applikation Dokumentation

Version: dev-master Version: dev-master
Commit: 7d189e4d
Deployed at: 2026-02-12T11:05:32Z