Problem
Einkaufspreise (Tabelle einkaufspreise) können über die API weder erstellt, bearbeitet noch gelöscht werden. Die bestehende Legacy-API-Action PreiseEdit nimmt Daten entgegen, schreibt aber nichts in die Datenbank.
Getestete Ansätze
| Methode |
Ergebnis |
PreiseEdit (Legacy API) |
Gibt messageCode: 1 ("OK") zurück, aber keine DB-Änderung — weder bei Einkaufspreisen noch bei Verkaufspreisen |
ArtikelEdit mit einkaufspreise Payload |
HTTP 500 Internal Server Error oder "Invalid key (id)" |
ArtikelCreate mit einkaufspreise |
HTTP 500 Crash |
REST v1 /v1/einkaufspreise |
404 Route not found (kein Resource-Controller vorhanden) |
REST v1 /v1/artikel/{id}?include=einkaufspreise |
400 "Include einkaufspreise is not registered" |
Lesen funktioniert
ArtikelGet (Legacy API) liefert Einkaufspreise korrekt als verschachtelte Struktur:
{
"einkaufspreise": {
"staffelpreis": [
{"ab_menge": "1", "preis": "12.92", "waehrung": "EUR", "lieferantennummer": "70000", "bestellnummer": "123456"}
]
}
}
Gewünschte Lösung
Option A: PreiseEdit fixen — Die bestehende Action akzeptiert bereits Daten, schreibt sie aber nicht. Der Handler müsste die empfangenen Daten tatsächlich in die einkaufspreise-Tabelle schreiben.
Option B: Eigene Endpoints für Einkaufspreise:
| Endpoint |
Methode |
Beschreibung |
/v1/einkaufspreise |
GET |
Einkaufspreise auflisten (Filter: artikel, adresse) |
/v1/einkaufspreise/{id} |
GET |
Einzelnen Einkaufspreis abrufen |
/v1/einkaufspreise |
POST |
Einkaufspreis anlegen |
/v1/einkaufspreise/{id} |
PUT |
Einkaufspreis bearbeiten |
/v1/einkaufspreise/{id} |
DELETE |
Einkaufspreis löschen |
Alternativ als include auf Artikel:
/v1/artikel/{id}?include=einkaufspreise (GET) — aktuell nicht registriert
Option C: Über ArtikelEdit — Einkaufspreise als verschachtelte Struktur im Artikel-Payload akzeptieren (analog zum Lesen über ArtikelGet).
Motivation
- Beschaffungs-Automatisierung: Einkaufspreise programmatisch pflegen (z.B. aus Lieferanten-Katalogen importieren)
- MCP/LLM-Integration: KI-gestützte Preisvergleiche und Lieferanten-Auswahl
- ERP-Synchronisation: Abgleich mit externen Systemen (EDI, OCI, BMEcat)
- Konsistenz:
ArtikelGet liefert Einkaufspreise — aber der Rückweg (Schreiben) fehlt
Betroffene Tabelle
einkaufspreise — 33 Spalten, Kernfelder:
| Spalte |
Typ |
Beschreibung |
artikel |
int FK |
Artikel-ID |
adresse |
int FK |
Lieferant (Adress-ID) |
preis |
decimal(18,8) |
Einkaufspreis |
waehrung |
varchar |
Währung |
ab_menge |
decimal(14,4) |
Staffelmenge |
bestellnummer |
varchar |
Artikelnummer beim Lieferanten |
bezeichnunglieferant |
varchar |
Bezeichnung beim Lieferanten |
standard |
int(1) |
Standard-Lieferant Flag |
lieferzeit_standard |
int |
Standard-Lieferzeit |
gueltig_bis |
date |
Gültig bis |
rahmenvertrag |
tinyint |
Rahmenvertrag Flag |
Vorhandene Infrastruktur
- DB-Tabelle vollständig vorhanden mit 14 Testdatensätzen
- ObjectAPI
object.gen.einkaufspreise.php mit Select/Create existiert
- Lesen via ArtikelGet funktioniert bereits
- Neuer REST v1 Resource-Controller analog zu
SalesPriceResource.php (für Verkaufspreise) umsetzbar
Umgebung
- OpenXE v1.12
- API: HTTP Digest Auth
- Gefunden bei der Entwicklung eines MCP-Servers für OpenXE
Problem
Einkaufspreise (Tabelle
einkaufspreise) können über die API weder erstellt, bearbeitet noch gelöscht werden. Die bestehende Legacy-API-ActionPreiseEditnimmt Daten entgegen, schreibt aber nichts in die Datenbank.Getestete Ansätze
PreiseEdit(Legacy API)messageCode: 1("OK") zurück, aber keine DB-Änderung — weder bei Einkaufspreisen noch bei VerkaufspreisenArtikelEditmiteinkaufspreisePayloadArtikelCreatemiteinkaufspreise/v1/einkaufspreise/v1/artikel/{id}?include=einkaufspreiseLesen funktioniert
ArtikelGet(Legacy API) liefert Einkaufspreise korrekt als verschachtelte Struktur:{ "einkaufspreise": { "staffelpreis": [ {"ab_menge": "1", "preis": "12.92", "waehrung": "EUR", "lieferantennummer": "70000", "bestellnummer": "123456"} ] } }Gewünschte Lösung
Option A: PreiseEdit fixen — Die bestehende Action akzeptiert bereits Daten, schreibt sie aber nicht. Der Handler müsste die empfangenen Daten tatsächlich in die
einkaufspreise-Tabelle schreiben.Option B: Eigene Endpoints für Einkaufspreise:
/v1/einkaufspreise/v1/einkaufspreise/{id}/v1/einkaufspreise/v1/einkaufspreise/{id}/v1/einkaufspreise/{id}Alternativ als
includeauf Artikel:/v1/artikel/{id}?include=einkaufspreise(GET) — aktuell nicht registriertOption C: Über ArtikelEdit — Einkaufspreise als verschachtelte Struktur im Artikel-Payload akzeptieren (analog zum Lesen über
ArtikelGet).Motivation
ArtikelGetliefert Einkaufspreise — aber der Rückweg (Schreiben) fehltBetroffene Tabelle
einkaufspreise— 33 Spalten, Kernfelder:artikeladressepreiswaehrungab_mengebestellnummerbezeichnunglieferantstandardlieferzeit_standardgueltig_bisrahmenvertragVorhandene Infrastruktur
object.gen.einkaufspreise.phpmit Select/Create existiertSalesPriceResource.php(für Verkaufspreise) umsetzbarUmgebung