Skip to content

Bug/Feature: Einkaufspreise nicht über API verwaltbar (PreiseEdit wirkungslos) #252

@Avatarsia

Description

@Avatarsia

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions