Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

disÜber diesen Enpunkt werden alle API-Calls verarbeitet, die sich mit Aufträgen befassen.

Rein Thematisch gehören dazu 2 Thematiken:

  • Temp. Sperren von Aufträgen (z.B. zum abkassieren an der Kasse)
  • Anlegen von Aufträgen


Info

Die Abfrage von Aufträgen soll über den Search-API-Endpunkt erfolgen
=> siehe dazu "API - Search"


Inhalt




Beschreibung des Endpunkts

GET- /api/salesorder/startedit/<SALESORDER-ID>/<SYSTEMTYPE>/<SYSTEMNO>

Aufruf

Der Call schreibt Protokoll-Eintrag, dass die Kasse angefangen hat den Auftrag zu editieren. Im TM2 wird dieser dann für eine bestimmte Zeit gesperrt. Dies wird auch in den Masken so dem Benutzer gemeldet.

Der Parameter "VORGANGSPERRDAUER" steuert wie viele Minuten der angegebene Auftrag gesperrt bleibt. Sollte der Parameter aus irgendwelchen Gründen nicht gefunden werden, so werden 15 Minuten als Sperrdauer verwendet.


Beispieldaten:

  • SALESORDER-ID: 123546
  • SYSTEMTYPE: POSMAN
  • SYSTEMNO (Kassen-Nr.): 125


Codeblock
languagejs
themeDJango
titleResponse
{
  "api_version": 1,
  "code": 200, // HTTP-Statuscode
  "success": true,
  "rowcount": 1,
  "msg": "Erfolg: Der Auftrag wurde erfolgreich zum Bearbeiten vorgemerkt.",
  "warning": "",
  "data": {
    "Auftrag": {%AuftragObjekt%},
	"Kunden": {%KundenObjekt%}
	"AuftragPositionen": [%Array_mit_AuftragPositionenObjekten%]
  }
}


GET -/api/salesorder/continueedit/<SALESORDER-ID>/<SYSTEMTYPE>/<SYSTEMNO>

Aufruf

Verlängert den Timeout für Editieren-Sperre.

Der Parameter "VORGANGSPERRDAUER" steuert wie viele Minuten der angegebene Auftrag gesperrt bleibt. Sollte der Parameter aus irgendwelchen Gründen nicht gefunden werden, so werden 15 Minuten als Sperrdauer verwendet.


Codeblock
languagejs
themeDJango
titleResponse
{
  "api_version": 1,
  "code": 200, // HTTP-Statuscode
  "success": true,
  "rowcount": 1,
  "msg": "Erfolg: Die Sperre zum Bearbeiten den Auftrags wurde verlängert",
  "warning": "",
  "data": {}
}


Get- /api/salesorder/canceledit/<SALESSORDER-ID>/<SYSTEMTYPE>/<SYSTEMNO>

Aufruf

Dieser Call gibt einen Auftrag wieder frei und nimmt die Sperre wieder von dem Auftrag herunter. Er wird z.B. bei BonAbbruch verwendet.


Codeblock
languagejs
themeDJango
titleResponse
{
    "api_version": 1,
    "code": 200, // HTTP-Statuscode
    "success": true,
    "rowcount": 1,
    "msg": "Erfolg: Die Sperre zum Bearbeiten des Auftrags wurde aufgehoben.",
    "warning": "" // Hier können Warnungen für die Logs des aufrufenden Systems mitgegeben werden
	"data": {} 
}


POST- /api/salesorder/endedit

Aufruf

Dieser Call ist ein POST, weil hier der bearbeitete Auftrag (z.B. wenn er abkassiert wurde) zurück gegeben wird. Diese Funktion ist auch darauf vorbereitet, dass mehrere Aufträge mit ihren Positionen zurückgeliefert werden.

An dieser stelle werden zuerst 2 Validierungen angestoßen, bevor irgendwelche Änderungen durchgeführt werden:

  • Validieren des Status aller zurückgemeldeten Aufträge und Auftragspositionen, ob sie sich in einem Status befinden, in dem das Editieren erlaubt ist. Erlaubt sind zur Zeit:
    • Auftrag: "Angelegt (10)" und "Beauftragt (20)"
    • AuftragPosition: "Angelegt (10)" und "Am Lager (30)"
  • Validieren des letzten Edit-Calls, ob die Auftrags-Sperre aktiv ist und auch noch nicht abgelaufen ist.

Erst wenn beide Prüfungen erfolgreich abgelaufen sind, werden die Aufträge einzeln weiter verarbeitet

Eine POSMAN-Kasse kann zusätzlich zu Aufträgen auch Anzahlungen mitschicken. Ggfs. werden diese dann als Zahlung gespeichert.    


Warnung
titleWichtig

Über die API werden nur die zurückgemeldeten Positionen bearbeitet. Es werden keine Positionen gelöscht! Positionen können nur über den Status als "gelöscht" markiert werden.



Codeblock
languagejs
themeDJango
titleRequest
{
    "api_version": 1,
    "systemno": 4711,	// Kassennummer (oder ähnliches bei Fremdsystemen)
    "operatorno": 789,	// Kassierer/Bediener
    "systemtype": "POSMAN",
    "processno": 125,	// Belegnummer oder ähnliches
    "datetime": "2017-04-12T23:20:50+0100"	// Format nach ISO 8601
	"data": [
		{ 
			"Auftrag": {%AuftragObjekt%}
			"AuftragPosition": [{%AuftragsPositionObjekt%},{}]	  // Array von AuftragsPositionen
			"Zahlung":[{%ZahlungObjekt%},{}]	// Array von Zahlungsaufträgen
		},
		{} // Weitere DataSets von Aufträgen und den dazugehörigen Positionen
	]
 }


Antwort

Wenn die gegebenen Aufträge erfolgreich verarbeitet wurden, werden die veränderten Aufträge im Format der Search-Calls noch einmal zurückgeliefert.

Nach der erfolgreichen Abarbeitung wird ebenfalls ein Protokoll-Eintrag geschrieben, der das Ende der Bearbeitung protokolliert.

Fehler-Fälle werden im folgenden Abschnitt beschrieben.




Codeblock
languagejs
themeDJango
titleResponse
{
    "api_version": 1,
    "code": 200, // HTTP-Statuscode
    "success": true,
    "rowcount": 0,  // Anzahl der betroffenen Zeilen
    "msg": "",
    "warning": "" // Hier können Warnungen für die Logs des aufrufenden Systems mitgegeben werden
	"data": []
}


POST- /api/salesorder/create
Anker
SalesOrderCreate
SalesOrderCreate


Aufruf

Dieser Call ist als POST-Call definiert. Hier werden die Auftragsdaten übergeben, aus denen neue Aufträge angelegt werden. Es können mehrere Datensätze übergeben werden. Jeder Datensatz muss aus einem Auftrag-Objekt und einer Liste (Array) von Auftragpositionen-Objekten bestehen.

Wenn die Aufträge z.B. lediglich zum Abkassieren zur Kasse geschickt werden sollen, ist es ausreichend vorab einen Dummy-Kunden anzulegen und diesen dann immer zu verwenden.

Bei eingerichteter Bestandsführung und wenn der Auftrag im Status "Beauftragt" übergeben wird, werden die Positionen automatisch reserviert. Sollte eine Reservierung fehlschlagen, wird die Auftragsanlage trotzdem ausgeführt und die nicht reservierten Positionen werden im "warning" der Antwort aufgeführt.

Die wichtigsten Werte der Objekte

Auftrag-Objekt (genaue Beschreibung => API - Auftrag-Objekt)
FeldnameErforderlichFeldtypBeschreibung
aunr--INTEGER

Die Auftragsnummer wird mit Hilfe des internen Zählers gesetzt. Wird dennoch eine Auftrags-Nr. mit angegeben, so wird diese verwendet. Es finden dann eine Prüfung statt, ob die Nummer bereits vergeben ist.

Wenn zusätzlich eine externe Auftrags-Nr. gesetzt werden soll, ist diese in dem Feld "extaunr" zu übergeben und wäre für einen späteren Export vorhanden.

summe--INTEGERMuss in Cent angegeben werden
anzahlung--INTEGERWenn bereits eine Anzahlung getätigt wurde, kann diese in Cent angegeben werden
vknr--INTEGERKann angegeben werden, wenn ein Mitarbeiter/Verkäufer verknüpft werden soll.
extaunr--INTEGERIn diesem Feld kann eine "externe Auftragsnummer" gesetzt werden, damit für einen späteren Export eine Referenz zum Drittsystem vorhanden ist.
status--INTEGERAufträge sollten mit dem Status 10 ("offfen") angelegt werden, damit sie bearbeitet oder abkassiert werden können.
kdnr--INTEGERDie Verknüpfung zu einem Kunden (über die "kdnr") ist notwendig, wenn die Aufträge an anderer Stelle weiter bearbeitet werden sollen.




AuftragPosition (genaue Beschreibung => API - AuftragPosition-Objekt )
FeldnameErforderlichFeldtypBeschreibung
aunr--INTEGER

Wird bei der Generierung des Auftrags erzeugt und verwendet

bonposXINTEGERMuss zwingend angegeben werden und eindeutig sein
artnr1XVARCHAR(255)Referenz zum Artikel muss gegeben sein
artnr1externVARCHAR(255)Gibt eine "externe Artikel-Nr." an, die über die Tbl.mapping_definition gemapped werden soll 
artbez--VARCHAR(255)Kann angegeben werden, wenn in der Position die Bezeichnung vom Artikel-Text (im Stamm) abweichen soll
mengeXINTEGERMenge die verkauft werden soll
preisXINTEGERVerkaufspreis in Cent
mwstid

X

INTEGER

Eins dieser Felder muss gefüllt sein, da sonst keine MwSt-Zuordnung geschehen kann. Das Feld "mwstid" bezieht sich auf die Tbl.mwst und hat Vorrang vor dem "mwstsatz" und der "mwstartnr1extern".

Wenn das Flag "mwstartnr1extern" aktiv ist ("true", "t" oder "1") wird die MWST-ID aus dem Dummy-Artikel (Mapping der Artnr1extern) verwendet. Dies hat Vorrang vor dem "mwstsatz".

Wenn keine MwSt-ID gegeben ist, wird mit dem MwSt-Satz versucht in der Tbl.mwsteinen entsprechenden Datensatz für das Systemland (Parameter) zu finden.

mwstsatzFLOAT
mwstartnr1externBOOLEAN
langtext--TEXTFalls TextPositionen im Auftrag enthalten sind
linkpos--INTEGERWichtig zur Verknüpfung von TextPositionen zu ArtikelPositionen




Kunden (genaue Beschreibung => API - Kunden-Objekt )

Bemerkung:

  • Kunden können nicht mit übergeben werden. Die Kunden-Anlage oder Aktualisierung erfolgt über den Endpunkt API - Endpunkte - CreateCustomer. Somit kann die Kunden-Nr. im Auftrags-Objekt direkt angegeben werden.



Codeblock
languagejs
themeDJango
titleRequest
{
    "api_version": 1,
    "systemno": 4711,			// Kassennummer (oder ähnliches bei Fremdsystemen)
    "operatorno": 789,			// Kassierer/Bediener/Benutzer
    "systemtype": "POSMAN",		// SystemTyp ('POSMAN' für Kasse)
    "processno": 0,
    "datetime": "2019-02-21T12:20:50+0100"	// Format nach ISO 8601
	"data": [
		{ 
			"auftrag": {%AuftragObjekt%},
			"auftrag_position": [{%AuftragsPositionObjekt%},{}]	  // Array von AuftragsPositionen
        },
		{} // Weitere DataSets von Aufträgen und den dazugehörigen Positionen
	]
 }


Antwort

Beim erfolgreichen Anlegen der Aufträge wird der HTTP-Statuscode "200" zurückgegeben.

Die aktuellen Daten der angelegten Aufträge können über den Search-Call abgefragt werden.

Fehler-Fälle werden im folgenden Abschnitt beschrieben.


Codeblock
languagejs
themeDJango
titleResponse
{
    "api_version": 1,
    "code": 200, 		// HTTP-Statuscode
    "success": true,
    "rowcount": 0,  	// Anzahl der betroffenen Zeilen (Aufträge)
    "msg": "",
    "warning": "" 		// Hier werden ggf. Warnungen für die Logs des aufrufenden Systems mitgegeben
	"data": []
}



Fehlerfälle

Die folgenden Fehlerfälle können auftreten und zurückgemeldet werden

Fehler-CodeErklärungBemerkung
404Der Auftrag, der bearbeitet werden sollte, wurde nicht gefunden
405Die angegebene Aktion ("Start", "Continue", "Cancel" oder "End") kann nicht ausgeführt werden.

Es kann z.B. kein "Start" erfolgen, wenn ein "Continue" noch nicht abgelaufen ist oder die Rückmeldung über den "End"-Call darf nicht erfolgen, wenn kein aktiver "Start" oder "Continue" gefunden wurde (unter Beachtung der Sperrzeit).

Beim"End"-Call kann dieser Status zurückgemeldet werden, wenn die gegebenen Aufträge sich nicht in einem erlaubten Status befinden.