Hallo,
da die neu api noch keinen endpunkt für Einkauf » Bestellungen liefert habe ich mir ein kleines python programm geschrieben um vorhandene Bestellungen zu bearbeiten. Damit werden zunächst alle positionen gelöscht und anschließend neue artikelpositionen aus eine csv datei wieder in die bestellung importiert.
Das importieren funktioniert wunderbar.
Das Löschen prinzipiell auch, aber beim Ausführen meiner Löschfunktion (delete_positions) werden immer zwei leere Artikel in der Bestellung angelegt. Diese finden sich dann auch ind er Artikelübersicht wieder und müssaen hier manuell gelöscht werden. Ich habe wie im Beispiel die ganze liste gelöscht, auch einzelne Positionen versucht, aber immer das gleich Ergebnis.
Ist das ein Bug der action bestellungedit?
def delete_positions(order_id, api_base_url, xentral_user_id, xentral_password):
# Bestellung über den bestellungedit-Endpunkt abrufen
get_order_url = f"{api_base_url}/bestellungget?id={order_id}"
order_response = requests.post(get_order_url, data={'action': 'bestellungget'}, auth=HTTPDigestAuth(xentral_user_id, xentral_password))
if order_response.status_code == 200:
try:
order_data = ET.fromstring(order_response.content)
except ET.ParseError:
logging.error("Fehler beim Parsen der XML-Antwort")
return
artikelliste_element = order_data.find(".//artikelliste")
# Die gesamte artikelliste aus der Bestellung entfernen
artikelliste_element.clear()
# XML-Daten in einen String umwandeln
updated_order_xml = ET.tostring(order_data, encoding='utf-8')
# Bestellung über den bestellungedit-Endpunkt aktualisieren
edit_order_url = f"{api_base_url}/bestellungedit?id={order_id}"
edit_response = requests.post(edit_order_url, data={'action': 'bestellungedit', 'xml': updated_order_xml}, auth=HTTPDigestAuth(xentral_user_id, xentral_password))
if edit_response.status_code == 200:
logging.info(f"Alle Positionen für Bestellung {order_id} wurden gelöscht.")
else:
logging.error(f"Fehler beim Löschen der Positionen für Bestellung {order_id}. Statuscode: {edit_response.status_code}")
else:
logging.error(f"Fehler beim Abrufen der Bestellung {order_id}. Statuscode: {order_response.status_code}")
Danke,
Grüße,
Florian