Bug: API-Trackingnummern erscheinen nicht im UI (schreibt in falsche Tabelle)
Problem
Wenn Trackingnummern über die REST v1 API (POST /v1/trackingnummern) erstellt werden, erscheinen sie nicht im OpenXE UI unter Lieferschein → Pakete. Die Tracking-Daten werden in die alte versand-Tabelle geschrieben, aber das UI liest ausschließlich aus der neuen versandpakete-Tabelle.
Reproduktion
- Trackingnummer via API erstellen:
curl -X POST "http://localhost/api/index.php/v1/trackingnummern" \
--digest -u "user:pass" \
-H "Content-Type: application/json" \
-d '{"tracking":"TEST-123","lieferschein":"300000","gewicht":"2.5","anzahlpakete":"1","versendet_am":"2026-04-01"}'
→ API antwortet mit Success, Tracking wird in versand-Tabelle erstellt.
-
Im UI: Lieferschein 300000 → Tab "Pakete"
→ Leer — keine Pakete/Tracking sichtbar.
-
Pakete über UI erstellen → erscheint sofort im Tab.
Root Cause
API schreibt in versand (alte Tabelle)
TrackingNumberController::createAction() verwendet TrackingNumberResource mit TABLE_NAME = 'versand':
// classes/Modules/Api/Resource/TrackingNumberResource.php
const TABLE_NAME = 'versand';
// TrackingNumberController::createAction()
// INSERT INTO versand (tracking, lieferschein, gewicht, ...)
UI liest aus versandpakete (neue Tabelle)
lieferschein.php (Zeile 1132-1157) — der alte versand-Query ist auskommentiert:
-- ALT (auskommentiert):
-- SELECT ... FROM versand WHERE lieferschein = {$id}
-- NEU (aktiv):
SELECT v.id, v.tracking, v.tracking_link
FROM versandpakete v
LEFT JOIN versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket
LEFT JOIN lieferschein_position lp ON lp.id = vlp.lieferschein_position
LEFT JOIN lieferschein l ON lp.lieferschein = l.id
WHERE l.id = {$id} OR v.lieferschein_ohne_pos = {$id}
GROUP BY v.id
UI schreibt in versandpakete
versandpakete.php (Zeile 924):
INSERT INTO versandpakete (status, lieferschein_ohne_pos, versender) VALUES ('neu', {$lieferschein}, '{username}')
Zusätzlich setzt die UI lieferschein.versand_status = 1.
Betroffene Tabellen
| Tabelle |
Zweck |
API schreibt |
UI liest |
UI schreibt |
versand |
Legacy-Tracking |
Ja |
Nein (auskommentiert) |
Nein |
versandpakete |
Neues Pakete-System |
Nein |
Ja |
Ja |
versandpaket_lieferschein_position |
Paket-Positionen-Verknüpfung |
Nein |
Ja |
Ja |
Vorgeschlagener Fix
In TrackingNumberController::createAction() nach dem bestehenden versand-INSERT zusätzlich in versandpakete schreiben:
// Nach dem bestehenden INSERT INTO versand:
$versandId = $resource->insert($bindValues);
// NEU: Auch in versandpakete schreiben (fuer UI-Sichtbarkeit)
$lieferscheinId = $DB->Select(
"SELECT id FROM lieferschein WHERE belegnr = '" . $DB->real_escape_string($input['lieferschein']) . "' LIMIT 1"
);
if ($lieferscheinId > 0) {
$DB->Insert("INSERT INTO versandpakete
(tracking, tracking_link, gewicht, status, lieferschein_ohne_pos, versandart, versender)
VALUES (
'" . $DB->real_escape_string($input['tracking']) . "',
'',
'" . $DB->real_escape_string($input['gewicht']) . "',
'versendet',
'" . (int)$lieferscheinId . "',
'" . $DB->real_escape_string($versandart) . "',
'API'
)"
);
// Versand-Status auf dem Lieferschein setzen
$DB->Update("UPDATE lieferschein SET versand_status = 1 WHERE id = '" . (int)$lieferscheinId . "'");
}
Alternativ (langfristig)
Die TrackingNumberResource komplett auf versandpakete umstellen und die versand-Tabelle nur noch für Backward-Compatibility beschreiben.
Betroffene Dateien
| Datei |
Zeile |
Beschreibung |
classes/Modules/Api/Controller/Version1/TrackingNumberController.php |
createAction |
Schreibt nur in versand |
classes/Modules/Api/Resource/TrackingNumberResource.php |
TABLE_NAME |
Zeigt auf versand statt versandpakete |
www/pages/lieferschein.php |
1132-1157 |
Pakete-Tab liest aus versandpakete |
www/pages/versandpakete.php |
924 |
UI schreibt in versandpakete |
Umgebung
- OpenXE v1.12 (master)
- Gefunden durch MCP-Server Live-Tests
Bug: API-Trackingnummern erscheinen nicht im UI (schreibt in falsche Tabelle)
Problem
Wenn Trackingnummern über die REST v1 API (
POST /v1/trackingnummern) erstellt werden, erscheinen sie nicht im OpenXE UI unter Lieferschein → Pakete. Die Tracking-Daten werden in die alteversand-Tabelle geschrieben, aber das UI liest ausschließlich aus der neuenversandpakete-Tabelle.Reproduktion
→ API antwortet mit Success, Tracking wird in
versand-Tabelle erstellt.Im UI: Lieferschein 300000 → Tab "Pakete"
→ Leer — keine Pakete/Tracking sichtbar.
Pakete über UI erstellen → erscheint sofort im Tab.
Root Cause
API schreibt in
versand(alte Tabelle)TrackingNumberController::createAction()verwendetTrackingNumberResourcemitTABLE_NAME = 'versand':UI liest aus
versandpakete(neue Tabelle)lieferschein.php(Zeile 1132-1157) — der alteversand-Query ist auskommentiert:UI schreibt in
versandpaketeversandpakete.php(Zeile 924):Zusätzlich setzt die UI
lieferschein.versand_status = 1.Betroffene Tabellen
versandversandpaketeversandpaket_lieferschein_positionVorgeschlagener Fix
In
TrackingNumberController::createAction()nach dem bestehendenversand-INSERT zusätzlich inversandpaketeschreiben:Alternativ (langfristig)
Die
TrackingNumberResourcekomplett aufversandpaketeumstellen und dieversand-Tabelle nur noch für Backward-Compatibility beschreiben.Betroffene Dateien
classes/Modules/Api/Controller/Version1/TrackingNumberController.phpversandclasses/Modules/Api/Resource/TrackingNumberResource.phpversandstattversandpaketewww/pages/lieferschein.phpversandpaketewww/pages/versandpakete.phpversandpaketeUmgebung