mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-14 20:17:14 +01:00
6901 lines
220 KiB
Plaintext
6901 lines
220 KiB
Plaintext
|
#%RAML 1.0
|
|||
|
title: Xentral-API
|
|||
|
description: Die API befindet sich in ihrer Xentral-Installation im Unterordner `/www/api/`.
|
|||
|
version: v1, v2
|
|||
|
baseUri: http://www.example.com/api/{version}/
|
|||
|
mediaType: application/json
|
|||
|
securedBy: [ Digest ]
|
|||
|
securitySchemes:
|
|||
|
Digest:
|
|||
|
type: Digest Authentication
|
|||
|
displayName: Digest Authentifizierung
|
|||
|
description: |
|
|||
|
Die API unterstützt nur die Digest Authentifizierung.
|
|||
|
Grundsätzlich empfehlen wir aber die zusätzliche Absicherung mit HTTPS-Verschlüsselung.
|
|||
|
describedBy:
|
|||
|
responses:
|
|||
|
401:
|
|||
|
description: |
|
|||
|
Fehler bei der Authentifizierung werden immer mit dem HTTP-Status `401 Unauthorized` ausgeliefert.
|
|||
|
|
|||
|
**Beispiel-Response beim Zugriff ohne Authentifizierung:**
|
|||
|
```
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7411,
|
|||
|
"http_code": 401,
|
|||
|
"message": "Unauthorized. You need to login.",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7411"
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
documentation:
|
|||
|
- title: Authentifizierung
|
|||
|
content: |
|
|||
|
Die REST-API unterstützt momentan nur die Digest Authentifizierung, da nur diese Authentifizierungsmethode auch
|
|||
|
ohne HTTPS ausreichend Sicherheit bietet. Wir empfehlen grundsätzlich aber die zusätzliche Absicherung mit
|
|||
|
HTTPS-Verschlüsselung.
|
|||
|
|
|||
|
## API-Account anlegen
|
|||
|
|
|||
|
In Xentral unter *Administration > Einstellungen > API-Account*. Dort auf *Neu* klicken.
|
|||
|
|
|||
|
Wichtig sind folgende Felder:
|
|||
|
* *Aktiv*: Hacken muss gesetzt sein, damit API-Account genutzt werden kann.
|
|||
|
* *App Name / Benutzername* und *Initkey / Passwort*: Benutzername und Kennwort für Digest-Authentifizierung.
|
|||
|
|
|||
|
- title: Authorisierung
|
|||
|
content: |
|
|||
|
Der Zugriff eines API-Accounts kann über Berechtigungen granular eingeschränkt werden.
|
|||
|
|
|||
|
## Berechtigungen bearbeiten
|
|||
|
|
|||
|
In Xentral unter *Administration > Einstellungen > API-Account* muss der gewünschte API-Account mit einem Klick
|
|||
|
auf den Stift bearbeitet werden. Dort ist eine Liste der vorhandenen Berechtigungen.
|
|||
|
|
|||
|
### Alte API-Accounts
|
|||
|
|
|||
|
Alle API-Accounts, die vor der Einführung der Berechtigungen existierten, haben automatisch alle
|
|||
|
Berechtigungen erhalten.
|
|||
|
|
|||
|
- title: Requests
|
|||
|
content: |
|
|||
|
## Ressourcen
|
|||
|
Grundsätzlich können alle API-Ressourcen nach folgendem Schema angesprochen werden.
|
|||
|
|
|||
|
**Beispiel mit der `Addressen` Ressource:**
|
|||
|
|
|||
|
| Method | Endpoint | Aktion |
|
|||
|
| --------- | ------------------ | ------------------------------ |
|
|||
|
| `GET` | `/v1/adressen` | Alle Adressen auflisten |
|
|||
|
| `GET` | `/v1/adressen/10` | Einzelne Adresse abrufen |
|
|||
|
| `PUT` | `/v1/adressen/10` | Vorhandene Adresse bearbeiten |
|
|||
|
| `POST` | `/v1/adressen` | Neue Adresse anlegen |
|
|||
|
| `DELETE` | `/v1/adressen/10` | Vorhandene Adresse löschen |
|
|||
|
|
|||
|
Bei vereinzelten Ressourcen kann es Abweichungen von diesem Schema geben.
|
|||
|
|
|||
|
## Content-Types
|
|||
|
Die API erwartet Anfragen mit dem Content-Type `application/json` oder `application/xml`.
|
|||
|
|
|||
|
## Zeichensatz
|
|||
|
Alle Anfragen mit Nutzdaten müssen mit `UTF-8` kodiert sein.
|
|||
|
|
|||
|
## Nutzdaten
|
|||
|
Nutzdaten müssen im Request-Body mitgeschickt werden. Nutzdaten sind nur bei POST- und PUT-Request zulässig;
|
|||
|
also nur Anfragen bei denen Ressourcen (z.B. Adressen) angelegt oder bearbeitet werden.
|
|||
|
|
|||
|
**Beispiel HTTP-Request:**
|
|||
|
```
|
|||
|
PUT /v1/adressen/7 HTTP/1.1
|
|||
|
Host: api.example.com
|
|||
|
Accept: application/json
|
|||
|
Content-Type: application/json; charset=utf-8
|
|||
|
Authorization: Digest XXXXXXXXXXX
|
|||
|
|
|||
|
{
|
|||
|
"name": "Schrauben Meier",
|
|||
|
"telefon": "0987654321"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### Aufbau Nutzdaten
|
|||
|
|
|||
|
#### JSON
|
|||
|
JSON-Nutzdaten werden ohne einheitliches Root-Element erwartet. Die zu ändernden Feldnamen werden in der ersten
|
|||
|
Ebene erwartet.
|
|||
|
|
|||
|
**Beispiel JSON:**
|
|||
|
```json
|
|||
|
{
|
|||
|
"name": "Schrauben Meier GmbH",
|
|||
|
"strasse": "Dorfstrasse 123",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "12345",
|
|||
|
"telefon": "0987654321",
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### XML
|
|||
|
XML-Nutzdaten müssen von einem Root-Element umschlossen sein. Der Name des Root-Elements kann beliebig lauten.
|
|||
|
Die zu ändernden Feldnamen werden in der zweiten Ebene erwartet.
|
|||
|
|
|||
|
**Beispiel XML:**
|
|||
|
```xml
|
|||
|
<data>
|
|||
|
<name>Schrauben Meier GmbH</name>
|
|||
|
<strasse>Dorfstrasse 123</strasse>
|
|||
|
<ort>Musterdorf</ort>
|
|||
|
<plz>12345</plz>
|
|||
|
<telefon>0987654321</telefon>
|
|||
|
</data>
|
|||
|
```
|
|||
|
|
|||
|
- title: Responses
|
|||
|
content: |
|
|||
|
Die API liefert Antworten im `JSON`- oder `XML`-Format aus; abhängig vom `Accept`-Header der Anfrage.
|
|||
|
|
|||
|
Es wird die `JSON`-Ausgabe bevorzugt, wenn der `Accept`-Header fehlt oder ein nicht unterstütztes Format aufweist.
|
|||
|
|
|||
|
## Content-Types
|
|||
|
Antworten werden mit dem Content-Type `application/json` oder `application/xml` ausgeliefert; abhängig
|
|||
|
vom gesendeten Format.
|
|||
|
|
|||
|
## Zeichensatz
|
|||
|
Alle Antworten sind `UTF-8` kodiert.
|
|||
|
|
|||
|
## Response-Body
|
|||
|
### Erfolgreiche Anfrage
|
|||
|
Der Response-Body einer erfolgreichen Anfrage beinhaltet immer ein `data`-Property als Root-Element.
|
|||
|
|
|||
|
#### Einzelne Ressource
|
|||
|
**Beispiel mit einzelnem Ergebnis:**
|
|||
|
```
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"title": "Bernhardt Bieber"
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### Mehrere Ressourcen
|
|||
|
Anworten mit mehreren Ressourcen beinhalten zusätzlich ein `pagination` Root-Element.
|
|||
|
|
|||
|
**Beispiel mit mehreren Ergebnissen:**
|
|||
|
```
|
|||
|
{
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": 1,
|
|||
|
"title": "Phillipp Pabst"
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 2,
|
|||
|
"name": "Peter Pfaff"
|
|||
|
}
|
|||
|
],
|
|||
|
"pagination": {
|
|||
|
"items_total": 50,
|
|||
|
"items_current": 20,
|
|||
|
"items_per_page": 20,
|
|||
|
"page_current": 1,
|
|||
|
"page_last": 3
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
Die Paginierung lässt sich über die GET-Parameter `page` und `items` steuern.
|
|||
|
|
|||
|
### Fehler
|
|||
|
Auch Fehler besitzen ein einheitliches Schema mit `error`-Property als Root-Element:
|
|||
|
```
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Fehler-Responses beinhalten in der Regel ein `code` Property. Jeder Code steht für einen spezifischen Fehler.
|
|||
|
Im Helpdesk (oder dieser Dokumentation) ist zu jedem Code eine genaue Beschreibung und idealerweise
|
|||
|
Lösungsvorschläge zu finden.
|
|||
|
|
|||
|
- title: Filter/Sortierung/Paginierung
|
|||
|
content: |
|
|||
|
Suchfilter, Sortierung und Paginierung stehen bei allen Endpunkten zur Verfügung die eine Liste zurückliefern.
|
|||
|
|
|||
|
## Filter
|
|||
|
|
|||
|
### Einfache Filter
|
|||
|
|
|||
|
Beispiel: `/resource?ausverkauft=1&typ=produkt`
|
|||
|
|
|||
|
Welche Filter-Parameter zur Verfügung stehen erfahren Sie in der jeweiligen Endpunkt-Beschreibung.
|
|||
|
|
|||
|
### Komplexe Filter
|
|||
|
|
|||
|
Komplexe Filter sind grundsätzlich bei allen Endpunkt verfügbar die eine Liste zurückliefern; unabhängig
|
|||
|
von den einfachen Filtern.
|
|||
|
|
|||
|
Beispiele:
|
|||
|
- `/resource?filter[0][property]=mwst_satz&filter[0][expression]=gte&filter[0][value]=10`
|
|||
|
- `/resource?filter[0][property]=beschreibung&filter[0][value]=%Schraube%`
|
|||
|
- `/resource?filter[0][property]=land&filter[0][value]=DE&filter[0][operation]=OR&filter[1][property]=land&filter[1][value]=AT`
|
|||
|
|
|||
|
Parameter:
|
|||
|
- `property`\
|
|||
|
Feld in dem gesucht werden soll (Pflichtangabe).
|
|||
|
|
|||
|
- `value`\
|
|||
|
Wert nach dem gesucht werden soll (Pflichtangabe).
|
|||
|
|
|||
|
- `expression`\
|
|||
|
Vergleichsoperator\
|
|||
|
Mögliche Werte:
|
|||
|
- `eq` entspricht **=**
|
|||
|
- `not` entspricht **!=**
|
|||
|
- `gt` entspricht **>**
|
|||
|
- `gte` entspricht **>=**
|
|||
|
- `lt` entspricht **<**
|
|||
|
- `lte` entspricht **<=**
|
|||
|
- `like` entspricht **LIKE**
|
|||
|
- `not_like` entspricht **NOT LIKE**
|
|||
|
Default-Wert: `like`
|
|||
|
|
|||
|
- `operation`\
|
|||
|
Verknüpfungsart bei der Anwendung mehrerer Filter.\
|
|||
|
Mögliche Werte: `and`, `or`.\
|
|||
|
Default-Wert: `and`
|
|||
|
|
|||
|
## Sortierung
|
|||
|
|
|||
|
Welche Felder für die Sortierung zur Verfügung stehen, erfahren Sie in der jeweiligen Endpunkt-Beschreibung.
|
|||
|
|
|||
|
Ein Minuszeichen vor dem Feldnamen kehrt die Sortierung um.
|
|||
|
|
|||
|
Beispiel: `/resource?sort=titel,-projekt`
|
|||
|
|
|||
|
## Paginierung
|
|||
|
|
|||
|
| Parameter | Beschreibung | Default | Wertebereich |
|
|||
|
| ---------- | -------------------------------- | -------- | -------------- |
|
|||
|
| `page` | Auswahl der Seite | `1` | `1` bis `1000` |
|
|||
|
| `items` | Anzahl der Ergebnisse pro Seite | `20` | `1` bis `1000` |
|
|||
|
|
|||
|
Beispiel: `/resource?page=2&items=5`
|
|||
|
|
|||
|
- title: Fehler-Codes
|
|||
|
content: |
|
|||
|
|
|||
|
TODO: Erklärungen hinzufügen
|
|||
|
|
|||
|
## Auth-Fehler
|
|||
|
### <a name="error-7411"></a> #7411 - Unauthorized
|
|||
|
Zugriff ohne Authentifizierung. Authorization-Header fehlt komplett.
|
|||
|
|
|||
|
### <a name="error-7412"></a> #7412 - Digest header incomplete
|
|||
|
Digest-Header unvollständig; benötigte Teile fehlen.
|
|||
|
|
|||
|
### <a name="error-7413"></a> #7413 - Api account missing
|
|||
|
Es ist kein API-Account angelegt oder aktiv.
|
|||
|
|
|||
|
### <a name="error-7414"></a> #7414 - Api account invalid
|
|||
|
Der verwendete API-Account ist nicht gültig. Eventuell wurde der Account auf inaktiv gestellt.
|
|||
|
|
|||
|
### <a name="error-7415"></a> #7415 - Digest validation failed
|
|||
|
Die Prüfung der Digest-Authentifizierung ist fehlgeschlagen.
|
|||
|
|
|||
|
### <a name="error-7416"></a> #7416 - Digest nonce invalid
|
|||
|
Server-Nonce ist auf Server nicht vorhanden. Mögliche Ursachen:
|
|||
|
- Der Client hat einen beliebigen Nonce-Key mitgeschickt der dem Server nicht bekannt ist.
|
|||
|
- Der Nonce-Key ist schon länger abgelaufen und wurde gelöscht. Abgelaufene Nonce-Keys werden nach einigen Tagen
|
|||
|
gelöscht.
|
|||
|
|
|||
|
### <a name="error-7417"></a> #7417 - Digest nonce expired
|
|||
|
Server-Nonce ist abgelaufen. Nonce-Keys sind maximal 24 Stunden gültig und danach muss die Authentifizierung neu
|
|||
|
initialisiert werden. Beim erneuten Zugriff (auch schon beim Ausliefern des Fehlers) wird automatisch ein neuer
|
|||
|
Nonce-Key erzeugt und dem Client mitgeteilt (im www-authenticate Header). Der Client muss bei den weiteren
|
|||
|
Zugriffen den neuen Nonce-Key verwenden.
|
|||
|
|
|||
|
### <a name="error-7418"></a> #7418 - Auth username empty
|
|||
|
Der Benutzername darf nicht leer sein.
|
|||
|
|
|||
|
### <a name="error-7419"></a> #7419 - Authorization type not allowed
|
|||
|
Authorization-Header war vorhanden, aber die Authentifizierung-Methode ist nicht erlaubt. Vermutlich Zugriff mit
|
|||
|
Basic-Auth.
|
|||
|
|
|||
|
### <a name="error-7420"></a> #7420 - Digest nonce count not matching
|
|||
|
Fehler nicht möglich: Der Nonce-Count wird momentan nicht geprüft.
|
|||
|
|
|||
|
### <a name="error-7421"></a> #7421 - Missing Permission
|
|||
|
API-Account hat nicht die benötigten Berechtigungen
|
|||
|
|
|||
|
## Routing-Fehler
|
|||
|
### <a name="error-7431"></a> #7431 - Route not found
|
|||
|
### <a name="error-7432"></a> #7432 - Method not allowed
|
|||
|
### <a name="error-7433"></a> #7433 - API-Method not found
|
|||
|
|
|||
|
## Endpoint-Fehler
|
|||
|
### <a name="error-7451"></a> #7451 - Bad Request
|
|||
|
### <a name="error-7452"></a> #7452 - Resource not found
|
|||
|
Mögliche Ursachen:
|
|||
|
- Das Ergebnis wurde über Filter zu stark begrenzt.
|
|||
|
- Beim Abrufen einer einzelnen Resource wurde eine nicht existierende ID angegeben.
|
|||
|
- Über die Paginierung wurde eine zu hohe Seite eingestellt. Siehe `pagination`-Property; der Wert von
|
|||
|
`page_current` darf nicht über dem von `page_last` liegen.
|
|||
|
- Die entsprechende Datenbanktabelle hat keine Inhalte.
|
|||
|
|
|||
|
### <a name="error-7453"></a> #7453 - Validation error
|
|||
|
Dieser Fehler kann nur beim Ändern oder Anlegen von Resourcen auftreten. Bei der Validierung der Eingabedaten
|
|||
|
ist ein Fehler aufgetreten.
|
|||
|
|
|||
|
In diesem Fall beinhaltet der Error-Response das Property `details`, das Aufschluss über die fehlerhaften Felder
|
|||
|
gibt.
|
|||
|
|
|||
|
### <a name="error-7454"></a> #7454 - Invalid argument
|
|||
|
Es wurde ein unzulässiger Request-Parameter (GET-Parameter) verwendet z.B. ein Filter-Parameter der nicht
|
|||
|
zulässig ist.
|
|||
|
|
|||
|
### <a name="error-7455"></a> #7455 - Malformed request body
|
|||
|
Das JSON- oder XML-Dokument im Request-Body konnte nicht dekodiert werden. Ungültige Zeichen oder eine
|
|||
|
fehlerhafte Struktur können die Ursache sein. Überprüfen Sie die Daten ggf. mit Online-Validatoren.
|
|||
|
|
|||
|
### <a name="error-7456"></a> #7456 - Content type not supported
|
|||
|
Der Request-Body konnte nicht dekodiert werden, weil kein gültiger Content-Type übergeben wurde.
|
|||
|
|
|||
|
## Webserver-Konfiguration fehlerhaft
|
|||
|
|
|||
|
### <a name="error-7481"></a> #7481 - Webserver-Konfiguration fehlerhaft (nicht genauer beschrieben)
|
|||
|
|
|||
|
### <a name="error-7482"></a> #7482 - PATH_INFO ist nicht gesetzt oder leer
|
|||
|
Die PHP-Variable `$_SERVER['PATH_INFO']` ist nicht gesetzt oder leer, obwohl die aufgerufene URL darauf
|
|||
|
schließen lässt dass die Variable gefüllt sein müsste. Der Fehler deutet darauf hin dass die
|
|||
|
Webserver-Konfiguration fehlerhaft ist. Sie können sich mit der <a href="#failsafe">Failsafe-Variante</a>
|
|||
|
behelfen. Damit kann die API auch ohne eine spezielle Webserver-Konfiguration verwendet werden, z.B. auf einem
|
|||
|
Webspace bei dem die Änderung der Webserver-Konfiguration eingeschränkt ist.
|
|||
|
Zur Fehlerbehebung siehe Abschnitt <a href="#nginx">Nginx-Konfiguration</a> oder
|
|||
|
<a href="#apache">Apache-Konfiguration</a>
|
|||
|
|
|||
|
- title: Debug-Modus
|
|||
|
content: |
|
|||
|
Im Auslieferungszustand gibt die REST-API bei Fehlern nur ausgewählte Fehlertypen zurück (siehe
|
|||
|
<a href="#fehler_codes">Fehler-Codes</a>).
|
|||
|
|
|||
|
### Beispiel Fehler-Response; Debug-Modus inaktiv
|
|||
|
```json
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7482,
|
|||
|
"http_code": 500,
|
|||
|
"message": "Webserver configuration incorrect. Pathinfo is invalid.",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7482"
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Zur Fehleranalyse kann der Debug-Modus aktiviert werden um zusätzliche Informationen über Request- und
|
|||
|
Konfigurationsvariablen zu erhalten. Debug-Informationen werden nur beim Auftreten eines Fehlers angehangen.
|
|||
|
|
|||
|
### Beispiel Fehler-Response mit aktivierten Debug-Modus
|
|||
|
```json
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7482,
|
|||
|
"http_code": 500,
|
|||
|
"message": "Webserver configuration incorrect. Pathinfo is invalid.",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7482"
|
|||
|
},
|
|||
|
"debug": {
|
|||
|
"router": {
|
|||
|
"controllerClass": "Xentral\\Modules\\Api\\Controller\\Version1\\StartController",
|
|||
|
"controllerAction": "indexAction",
|
|||
|
"resourceClass": "Xentral\\Modules\\Api\\Resource\\Resource",
|
|||
|
"routerParams": []
|
|||
|
},
|
|||
|
"request": {
|
|||
|
"isFailsafe": false,
|
|||
|
"pathInfo": {
|
|||
|
"actual": "",
|
|||
|
"expected": "/v1/adressen/123"
|
|||
|
},
|
|||
|
"info": {
|
|||
|
"method": "PUT",
|
|||
|
"requestUri": "/api/v1/adressen/123",
|
|||
|
"fullUri": "http://www.example.com/api/v1/adressen/123"
|
|||
|
},
|
|||
|
"serverParams": {
|
|||
|
|
|||
|
// Ausgabe entfernt; wie PHP-Variable `$_SERVER`
|
|||
|
|
|||
|
},
|
|||
|
"header": {
|
|||
|
"Content-Type": "application/json",
|
|||
|
"Authorization": "Digest .........",
|
|||
|
"Host": "www.example.com",
|
|||
|
"Accept": "application/json"
|
|||
|
},
|
|||
|
"getParams": [],
|
|||
|
"postParams": [],
|
|||
|
"additionalParams": []
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## Debug-Modus aktivieren
|
|||
|
|
|||
|
**Der Debug-Modus ist nicht für Produktiv-Systeme geeignet und sollte nur zur Fehlersuche aktiviert werden.**
|
|||
|
|
|||
|
### Debug-Modus global aktivieren
|
|||
|
|
|||
|
In der Datei `/www/api/index.php` die Konstante `DEBUG_MODE` auf `true` stellen.
|
|||
|
|
|||
|
```php
|
|||
|
define('DEBUG_MODE', true);
|
|||
|
```
|
|||
|
|
|||
|
Der Debug-Modus ist dann global für alle API-Accounts aktiviert. Debug-Informationen werden aber nur beim
|
|||
|
Auftreten eines Fehlers erzeugt.
|
|||
|
|
|||
|
- title: PHP Beispiel-Clients
|
|||
|
content: |
|
|||
|
## cURL
|
|||
|
```php
|
|||
|
if (!function_exists('curl_version')) {
|
|||
|
throw new Exception('curl-Extension fehlt');
|
|||
|
}
|
|||
|
|
|||
|
$api = array(
|
|||
|
'url' => 'http://www.example.com/api/',
|
|||
|
'resource' => 'v1/adressen?page=1&items=5',
|
|||
|
'username' => 'Your-Username',
|
|||
|
'password' => 'Your-Passwort',
|
|||
|
);
|
|||
|
|
|||
|
$options = array(
|
|||
|
CURLOPT_URL => $api['url'] . $api['resource'],
|
|||
|
CURLOPT_HEADER => false,
|
|||
|
CURLOPT_HTTPHEADER => array('Accept: application/json'), // oder 'application/xml'
|
|||
|
CURLOPT_RETURNTRANSFER => true,
|
|||
|
CURLOPT_FOLLOWLOCATION => true,
|
|||
|
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST, // Digest Authentifizierung
|
|||
|
CURLOPT_USERPWD => $api['username'] . ':' . $api['password'],
|
|||
|
);
|
|||
|
|
|||
|
$ch = curl_init();
|
|||
|
curl_setopt_array($ch, $options);
|
|||
|
$response = curl_exec($ch);
|
|||
|
|
|||
|
if (curl_errno($ch)) {
|
|||
|
throw new Exception(curl_error($ch));
|
|||
|
}
|
|||
|
|
|||
|
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
|
|||
|
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|||
|
$result = json_decode($response, true);
|
|||
|
|
|||
|
echo "<pre>";
|
|||
|
echo "<h1>HTTP-Status: {$statusCode}</h1>";
|
|||
|
echo "<h2>Content-Type: {$contentType}</h2>";
|
|||
|
var_dump($result);
|
|||
|
echo "</pre>";
|
|||
|
|
|||
|
if ($ch != null) {
|
|||
|
curl_close($ch);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## Guzzle
|
|||
|
```php
|
|||
|
if (!class_exists('GuzzleHttp\Client')) {
|
|||
|
throw new Exception('Guzzle konnte nicht gefunden werden');
|
|||
|
}
|
|||
|
|
|||
|
$api = array(
|
|||
|
'url' => 'http://www.example.com/api/',
|
|||
|
'resource' => 'v1/adressen?page=1&items=5',
|
|||
|
'username' => 'Your-Username',
|
|||
|
'password' => 'Your-Passwort',
|
|||
|
);
|
|||
|
|
|||
|
$client = new GuzzleHttp\Client(array(
|
|||
|
'base_url' => $api['url'],
|
|||
|
));
|
|||
|
|
|||
|
$options = array(
|
|||
|
'headers' => array('Accept' => 'application/json'), // oder 'application/xml'
|
|||
|
'auth' => array($api['username'], $api['password'], 'digest'), // Digest Authentifizierung
|
|||
|
);
|
|||
|
$request = $client->createRequest('GET', $api['resource'], $options);
|
|||
|
$response = $client->send($request);
|
|||
|
|
|||
|
$contentType = $response->getHeader('Content-Type');
|
|||
|
$statusCode = $response->getStatusCode();
|
|||
|
$statusMsg = $response->getReasonPhrase();
|
|||
|
$result = json_decode($response->getBody()->getContents(), true);
|
|||
|
|
|||
|
echo "<pre>";
|
|||
|
echo "<h1>HTTP-Status: {$statusCode} {$statusMsg}</h1>";
|
|||
|
echo "<h2>Content-Type: {$contentType}</h2>";
|
|||
|
var_dump($result);
|
|||
|
echo "</pre>";
|
|||
|
```
|
|||
|
|
|||
|
- title: Webserver-Konfiguration
|
|||
|
content: |
|
|||
|
## <a name="apache"></a> Apache
|
|||
|
|
|||
|
Damit die API richtig funktioniert sollte `mod_rewrite` aktiviert sein.
|
|||
|
|
|||
|
Der Aufruf ohne `mod_rewrite` ist ebenfalls möglich, dann muss allerdings die index.php in der URL vorkommen:
|
|||
|
z.B.: `/www/api/index.php/v1/adressen`
|
|||
|
|
|||
|
### mod_rewrite aktivieren
|
|||
|
```
|
|||
|
$ sudo a2enmod rewrite
|
|||
|
Enabling module rewrite.
|
|||
|
To activate the new configuration, you need to run:
|
|||
|
systemctl restart apache2
|
|||
|
|
|||
|
$ sudo systemctl restart apache2
|
|||
|
```
|
|||
|
|
|||
|
### .htaccess Einbindung erlauben
|
|||
|
Bei Ubuntu- und Debian-basierten Betriebssystemen geschieht das für den gesamten Webserver in der Datei
|
|||
|
`/etc/apache2/apache2.conf`. Dort nach folgendem Eintrag suchen:
|
|||
|
|
|||
|
```
|
|||
|
<Directory /var/www/>
|
|||
|
Options Indexes FollowSymLinks
|
|||
|
AllowOverride None
|
|||
|
Require all granted
|
|||
|
</Directory>
|
|||
|
```
|
|||
|
|
|||
|
Hier muss das `AllowOverride None` zu `AllowOverride All` geändert werden. Anschließend die Apache2-Konfiguration
|
|||
|
neu einlesen mit: `sudo service apache2 reload`.
|
|||
|
|
|||
|
Wichtig: Diese Anpassung ist nur exemplarisch. Aus Sicherheitsgründen sollten Sie die Einstellung nicht für
|
|||
|
den gesamten Webserver erlauben. Um die Einstellung für einzelne Webseites vorzunehmen, sollten sie die
|
|||
|
entsprechende VHost-Konfiguration anpassen.
|
|||
|
|
|||
|
### Beispiel VHost-Konfiguration für Apache 2.4
|
|||
|
```
|
|||
|
<VirtualHost *:80>
|
|||
|
# ServerName auskommentieren falls Sie per IP zugreifen
|
|||
|
ServerName xentral.example.com
|
|||
|
ServerAdmin webmaster@example.com
|
|||
|
|
|||
|
# Pfad zum www-Verzeichnis ihrer Xentral-Installation
|
|||
|
DocumentRoot /var/www/xentral/www
|
|||
|
|
|||
|
<Directory /var/www/xentral/www/>
|
|||
|
AllowOverride All
|
|||
|
Require all granted
|
|||
|
</Directory>
|
|||
|
|
|||
|
ErrorLog ${APACHE_LOG_DIR}/xentral-error.log
|
|||
|
CustomLog ${APACHE_LOG_DIR}/xentral-access.log combined
|
|||
|
</VirtualHost>
|
|||
|
```
|
|||
|
|
|||
|
## <a name="nginx"></a> Nginx
|
|||
|
|
|||
|
### Beispiel-Konfiguration
|
|||
|
|
|||
|
```
|
|||
|
server {
|
|||
|
listen 80 default_server;
|
|||
|
listen [::]:80 default_server;
|
|||
|
|
|||
|
root /var/www/xentral/www;
|
|||
|
|
|||
|
index index.php index.html index.htm;
|
|||
|
|
|||
|
server_name www.example.com;
|
|||
|
|
|||
|
location / {
|
|||
|
# First attempt to serve request as file, then
|
|||
|
# as directory, then fall back to displaying a 404.
|
|||
|
try_files $uri $uri/ =404;
|
|||
|
}
|
|||
|
|
|||
|
location /api/ {
|
|||
|
# '/api/' befindet sich relativ zum Document-Root und muss ggf. angepasst werden.
|
|||
|
try_files $uri $uri/ @xentral_api;
|
|||
|
}
|
|||
|
|
|||
|
location @xentral_api {
|
|||
|
# '/api/' befindet sich relativ zum Document-Root und muss ggf. angepasst werden.
|
|||
|
rewrite ^/api/(.*)$ /api/index.php/$1 last;
|
|||
|
}
|
|||
|
|
|||
|
location ~ [^/]\.php(/|$) {
|
|||
|
# Path Info korrekt an PHP-Skript weitergeben
|
|||
|
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
|||
|
if (!-f $document_root$fastcgi_script_name) {
|
|||
|
return 404;
|
|||
|
}
|
|||
|
|
|||
|
# Mitigate https://httpoxy.org/ vulnerabilities
|
|||
|
fastcgi_param HTTP_PROXY "";
|
|||
|
|
|||
|
# With php-fpm (or other unix sockets):
|
|||
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
|||
|
# With php-cgi (or other tcp sockets):
|
|||
|
#fastcgi_pass 127.0.0.1:9000;
|
|||
|
|
|||
|
fastcgi_index index.php;
|
|||
|
|
|||
|
include fastcgi_params;
|
|||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
|||
|
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
|
|||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|||
|
}
|
|||
|
|
|||
|
# deny access to .htaccess files, if Apache's document root concurs with nginx's one
|
|||
|
location ~ /\.ht {
|
|||
|
deny all;
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Außerdem muss `cgi.fix_pathinfo` in der php.ini auf `1` gestellt sein (Default).
|
|||
|
|
|||
|
Quelle: <https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/>
|
|||
|
|
|||
|
## <a name="failsafe"></a> Failsafe-Alternative
|
|||
|
|
|||
|
Sollte die Konfiguration des Webservers Probleme bereiten, oder aus anderen Gründen nicht möglich sein, so gibt
|
|||
|
es die Möglichkeit die API ohne Anpassung der Webserver-Konfiguration zu nutzen.
|
|||
|
|
|||
|
Der Endpunkt wird dann nicht als Teil der Pfades übergeben, sondern als Query-Parameter `path`.
|
|||
|
|
|||
|
Beispiel: `/api/index.php?path=/v1/artikelkategorien&sort=bezeichnung`
|
|||
|
|
|||
|
- title: Standard API-Aufrufe
|
|||
|
content: |
|
|||
|
Es gibt auch die Möglichkeit die standard API über die neue URL abzurufen.
|
|||
|
|
|||
|
Struktur: `http://www.example.com/api/{Action}`
|
|||
|
|
|||
|
Beispiel: `http://www.example.com/api/ArtikelGet`
|
|||
|
|
|||
|
Eine Übersicht der möglichen Requests/Actions mit Beispielen:
|
|||
|
<https://xentral.biz/helpdesk/api>
|
|||
|
|
|||
|
**In diesem Fall erwartet die API immer einen POST-Request und die Nutzdaten müssen im Request-Body
|
|||
|
mitgeschickt werden.**
|
|||
|
|
|||
|
- title: Test-System
|
|||
|
content: |
|
|||
|
Um auf die API eines <a href="https://xentral.com/helpdesk/testsystem" target="_blank">Test-Systems</a>
|
|||
|
zugreifen zu können, kann im HTTP-Header `MultiDb` der Datenbankname des Test-Systems angegeben werden.
|
|||
|
Der Header muss bei jedem Request mitgeschickt werden.
|
|||
|
|
|||
|
### Beispiel HTTP-Request
|
|||
|
```http
|
|||
|
GET /api/v1/adressen HTTP/1.1
|
|||
|
Host: www.example.com
|
|||
|
Accept: application/json
|
|||
|
MultiDb: xentral_test
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
/v1/aboartikel:
|
|||
|
get:
|
|||
|
displayName: Abo-Artikel abrufen
|
|||
|
description: |
|
|||
|
Endpunkt zum Abrufen von Abo-Artikeln.
|
|||
|
|
|||
|
Permission: `list_subscriptions`
|
|||
|
queryParameters:
|
|||
|
bezeichnung:
|
|||
|
description: Suche nach Abo-Artikel-Bezeichnung (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_equals:
|
|||
|
description: Suche nach Abo-Artikel-Bezeichnung (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_startswith:
|
|||
|
description: Suche nach Abo-Artikel-Bezeichnung (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_endswith:
|
|||
|
description: Suche nach Abo-Artikel-Bezeichnung (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
rabatt:
|
|||
|
description: Suche nach Rabatt in Prozent (genaue Übereinstimmung)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_gt:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt größer Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_gte:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt größer gleich Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_lt:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt kleiner Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_lte:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt kleiner gleich Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
preis:
|
|||
|
description: Suche nach Preis (genaue Übereinstimmung)
|
|||
|
type: number
|
|||
|
multipleOf: 0.0001
|
|||
|
required: false
|
|||
|
preis_gt:
|
|||
|
description: Suche nach Preis (Preis größer Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.0001
|
|||
|
required: false
|
|||
|
preis_gte:
|
|||
|
description: Suche nach Preis (Preis größer gleich Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.0001
|
|||
|
required: false
|
|||
|
preis_lt:
|
|||
|
description: Suche nach Preis (Preis kleiner Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.0001
|
|||
|
required: false
|
|||
|
preis_lte:
|
|||
|
description: Suche nach Preis (Preis kleiner gleich Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.0001
|
|||
|
required: false
|
|||
|
menge:
|
|||
|
description: Suche nach Menge (Menge Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
menge_gt:
|
|||
|
description: Suche nach Menge (Menge größer Suchwert)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
menge_gte:
|
|||
|
description: Suche nach Menge (Menge größer gleich Suchwert)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
menge_lt:
|
|||
|
description: Suche nach Menge (Menge kleiner Suchwert)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
menge_lte:
|
|||
|
description: Suche nach Menge (Menge kleiner gleich Suchwert)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
startdatum:
|
|||
|
description: Suche nach Startdatum (Startdatum Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
startdatum_gt:
|
|||
|
description: Suche nach Startdatum (Startdatum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
startdatum_gte:
|
|||
|
description: Suche nach Startdatum (Startdatum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
startdatum_lt:
|
|||
|
description: Suche nach Startdatum (Startdatum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
startdatum_lte:
|
|||
|
description: Suche nach Startdatum (Startdatum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
enddatum:
|
|||
|
description: Suche nach Enddatum (Enddatum Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
enddatum_gt:
|
|||
|
description: Suche nach Enddatum (Enddatum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
enddatum_gte:
|
|||
|
description: Suche nach Enddatum (Enddatum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
enddatum_lt:
|
|||
|
description: Suche nach Enddatum (Enddatum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
enddatum_lte:
|
|||
|
description: Suche nach Enddatum (Enddatum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
waehrung:
|
|||
|
description: Suche nach Waehrungscode (ISO3; genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
preisart:
|
|||
|
description: |
|
|||
|
Suche nach Preisart
|
|||
|
|
|||
|
(Gültige Werte `monat`, `monatx`, `jahr`, `wochen`, `30tage`, `360tage` oder `einmalig`)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dokumenttyp:
|
|||
|
description: Suche nach Dokument-Typ (Gültige Werte `rechnung` oder `auftrag`)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikel:
|
|||
|
description: Suche nach Artikel-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
adresse:
|
|||
|
description: Suche nach Adressen-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
gruppe:
|
|||
|
description: Suche nach Abogruppen-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Suche nach Projekt-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=-bezeichnung,rabatt`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `rabatt`, `preis`, `menge`, `startdatum`, `enddatum`,
|
|||
|
`abgerechnet_bis`, `reihenfolge`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=artikel`)
|
|||
|
|
|||
|
Verfügbare Includes: `gruppe`, `artikel`, `adresse`, `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Abo-Artikel anlegen
|
|||
|
description: |
|
|||
|
Abo-Artikel anlegen
|
|||
|
|
|||
|
Permission: `create_subscription`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
artikelnummer:
|
|||
|
description: Artikelnummer (Pflichfeld)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
bezeichnung:
|
|||
|
description: Name des Abo-Artikels (Pflichtfeld)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
beschreibung:
|
|||
|
description: Abo-Artikel-Beschreibung
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
beschreibung_ersetzen:
|
|||
|
description: |
|
|||
|
Wenn `1`, wird nur die Beschreibung von hier ohne Artikelbeschreibung aus den Stammdaten
|
|||
|
angezeigt. (Default `0`)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
startdatum:
|
|||
|
description: Erstes Startdatum (Format `YYYY-MM-DD`) (Default = Aktuelles Datum)
|
|||
|
required: false
|
|||
|
type: date-only
|
|||
|
enddatum:
|
|||
|
description: Enddatum (Format `YYYY-MM-DD`) (Default `0000-00-00`)
|
|||
|
required: false
|
|||
|
type: date-only
|
|||
|
preisart:
|
|||
|
description: |
|
|||
|
Zulässige Werte `monat`, `monatx`, `jahr`, `wochen`, `einmalig`, `30tage`, `360tage`
|
|||
|
|
|||
|
(Default `monat`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
zahlzyklus:
|
|||
|
description: abhängig von `preisart` (Default `1`)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
dokumenttyp:
|
|||
|
description: Automatisch anlegen als Auftrag oder Rechnung.
|
|||
|
Zulässige Werte `rechnung`, `auftrag` (Default `rechnung`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
preis:
|
|||
|
description: Netto Artikelpreis (Default `0.00`)
|
|||
|
required: false
|
|||
|
type: number
|
|||
|
multipleOf: 0.0001
|
|||
|
menge:
|
|||
|
description: Artikelmenge (Default `0`)
|
|||
|
required: false
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
rabatt:
|
|||
|
description: Rabatt in Prozent (Default `0.00`)
|
|||
|
required: false
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
waehrung:
|
|||
|
description: Währung; dreistelliger ISO-Code (Default `EUR`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
gruppe:
|
|||
|
description: Abo-Gruppen-ID (Default `0`)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
adresse:
|
|||
|
description: |
|
|||
|
Adressen-ID (Default `0`)
|
|||
|
|
|||
|
Wird überschrieben wenn Feld `kundennummer` gefüllt ist.
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
kundennummer:
|
|||
|
description: |
|
|||
|
Kundennummer (kein Default)
|
|||
|
|
|||
|
Wenn gefüllt, wird Adress-ID ermittelt und in Feld `adresse` geschrieben.
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
projekt:
|
|||
|
description: |
|
|||
|
Projekt-ID (Default `0`)
|
|||
|
|
|||
|
Die erstellte Rechnung läuft auf dieses Projekt
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
reihenfolge:
|
|||
|
description: |
|
|||
|
Wenn mehrere Artikel in einer Rechnung vorkommen, kann die Reihenfolge der Artikel damit
|
|||
|
angepasst werden (Default `1`)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Abo-Artikel 001",
|
|||
|
"artikelnummer": "700006",
|
|||
|
"preis": 9.52,
|
|||
|
"zahlzyklus": 2,
|
|||
|
"preisart": "wochen",
|
|||
|
"kundennummer": "10001"
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegter Abo-Artikel wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 21,
|
|||
|
"bezeichnung": "Abo-Artikel 001",
|
|||
|
"beschreibung": "",
|
|||
|
"beschreibung_ersetzen": 0,
|
|||
|
"startdatum": "2019-05-27",
|
|||
|
"enddatum": "0000-00-00",
|
|||
|
"abgerechnet_bis": "0000-00-00",
|
|||
|
"zahlzyklus": 2,
|
|||
|
"preis": "9.5200",
|
|||
|
"rabatt": "0.00",
|
|||
|
"waehrung": "EUR",
|
|||
|
"menge": 0,
|
|||
|
"preisart": "wochen",
|
|||
|
"dokumenttyp": "rechnung",
|
|||
|
"artikel": 6,
|
|||
|
"gruppe": 0,
|
|||
|
"adresse": 3,
|
|||
|
"kundennummer": "10000",
|
|||
|
"reihenfolge": 1,
|
|||
|
"projekt": 0
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnen Abo-Artikel abrufen oder bearbeiten.
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Abo-Artikel-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Abo-Artikel abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Abo-Artikel abrufen
|
|||
|
|
|||
|
Permission: `edit_subscription`
|
|||
|
put:
|
|||
|
displayName: Abo-Artikel bearbeiten
|
|||
|
description: |
|
|||
|
Abo-Artikel bearbeiten (Felder siehe "Abo-Artikel anlegen")
|
|||
|
|
|||
|
Permission: `view_subscription`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Abo-Artikel 001",
|
|||
|
"beschreibung_ersetzen": 0,
|
|||
|
"startdatum": "2019-01-01",
|
|||
|
"enddatum": "2019-12-31",
|
|||
|
"rabatt": "3.00",
|
|||
|
"zahlzyklus": 1,
|
|||
|
"waehrung": "EUR",
|
|||
|
"preisart": "wochen",
|
|||
|
"dokumenttyp": "rechnung",
|
|||
|
"kundennummer": "10000"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierter Abo-Artikel wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"bezeichnung": "Abo-Artikel 001",
|
|||
|
"beschreibung": "",
|
|||
|
"beschreibung_ersetzen": 0,
|
|||
|
"startdatum": "2019-01-01",
|
|||
|
"enddatum": "2019-12-31",
|
|||
|
"abgerechnet_bis": "2019-07-31",
|
|||
|
"zahlzyklus": 1,
|
|||
|
"preis": "0.17",
|
|||
|
"rabatt": "3.00",
|
|||
|
"waehrung": "EUR",
|
|||
|
"menge": 100,
|
|||
|
"preisart": "wochen",
|
|||
|
"dokumenttyp": "rechnung",
|
|||
|
"artikel": 2,
|
|||
|
"gruppe": 1,
|
|||
|
"adresse": 3,
|
|||
|
"kundennummer": "10000",
|
|||
|
"reihenfolge": 1,
|
|||
|
"projekt": 0
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
delete:
|
|||
|
displayName: Abo-Artikel löschen
|
|||
|
description: |
|
|||
|
Endpunkt zum Löschen von Abo-Artikeln
|
|||
|
|
|||
|
Permission: `delete_subscription`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; id des gelöschten Aboartikels wird zurückgegeben
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 1
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: id wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/abogruppen:
|
|||
|
get:
|
|||
|
displayName: Abo-Gruppen abrufen
|
|||
|
description: |
|
|||
|
Endpunkt zum Abrufen von Abo-Gruppen
|
|||
|
|
|||
|
Permission: `list_subscription_groups`
|
|||
|
queryParameters:
|
|||
|
bezeichnung:
|
|||
|
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_equals:
|
|||
|
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_startswith:
|
|||
|
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_endswith:
|
|||
|
description: Suche nach bestimmter Abo-Gruppen-Bezeichnung (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
gruppensumme:
|
|||
|
description: Suche nach Gruppensumme-Kennzeichen (1 = aktiv / 0 = inaktiv)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
rabatt:
|
|||
|
description: Suche nach Rabatt in Prozent (genaue Übereinstimmung)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_gt:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt größer Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_gte:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt größer gleich Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_lt:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt kleiner Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
rabatt_lte:
|
|||
|
description: Suche nach Rabatt in Prozent (Rabatt kleiner gleich Suchwert)
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Suche nach bestimmter Projekt-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=-bezeichnung,rabatt`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `rabatt`, `reihenfolge`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Abo-Gruppe anlegen
|
|||
|
description: |
|
|||
|
Abo-Gruppe anlegen
|
|||
|
|
|||
|
Permission: `create_subscription_group`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Name der Gruppe; erscheint auf der Rechnung (Pflichtfeld)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
beschreibung:
|
|||
|
description: Beschreibung der Gruppe; erscheint auf der Rechnung (optional)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
rabatt:
|
|||
|
description: Rabatt in Prozent (Default = 0.00)
|
|||
|
required: false
|
|||
|
type: number
|
|||
|
multipleOf: 0.01
|
|||
|
gruppensumme:
|
|||
|
description: Nach jeder Auflistung der Artikel einer Gruppe, wird eine Gruppensumme auf dem Beleg
|
|||
|
ausgegeben (1 = aktiv / 0 = inaktiv) (Default = 0)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
projekt:
|
|||
|
description: |
|
|||
|
Projekt-ID (Default = 0)
|
|||
|
|
|||
|
Die erstellte Rechnung läuft auf dieses Projekt
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
reihenfolge:
|
|||
|
description: Wenn mehrere Gruppen in einer Rechnung vorkommen, kann die Reihenfolge der Gruppen damit
|
|||
|
angepasst werden (ab Version 18.3) (Default = 0)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Abo-Gruppe Verbrauchsmaterial",
|
|||
|
"rabatt": 2.50,
|
|||
|
"gruppensumme": 1,
|
|||
|
"projekt": 1,
|
|||
|
"reihenfolge": 123
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Abo-Gruppe wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 14,
|
|||
|
"bezeichnung": "Abo-Gruppe Verbrauchsmaterial",
|
|||
|
"beschreibung": "",
|
|||
|
"rabatt": "2.50",
|
|||
|
"gruppensumme": 1,
|
|||
|
"projekt": 1,
|
|||
|
"reihenfolge": 123
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Abo-Gruppe abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Abo-Gruppen-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Abo-Gruppe abrufen
|
|||
|
description: |
|
|||
|
Einzelne Abo-Gruppe abrufen
|
|||
|
|
|||
|
Permission: `view_subscription_group`
|
|||
|
put:
|
|||
|
displayName: Abo-Gruppe bearbeiten
|
|||
|
description: |
|
|||
|
Abo-Gruppe bearbeiten (Felder siehe "Abo-Gruppe anlegen")
|
|||
|
|
|||
|
Permission: `edit_subscription_group`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Abo-Gruppe Verbrauchsmaterial",
|
|||
|
"rabatt": 3.00
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Abo-Gruppe wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 14,
|
|||
|
"bezeichnung": "Abo-Gruppe Verbrauschsmaterial",
|
|||
|
"beschreibung": "",
|
|||
|
"rabatt": "3.00",
|
|||
|
"gruppensumme": 1,
|
|||
|
"projekt": 1,
|
|||
|
"reihenfolge": 123
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/adressen:
|
|||
|
description: Adressen anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Adressliste abrufen
|
|||
|
description: |
|
|||
|
Adressenliste abrufen
|
|||
|
|
|||
|
Permission: `list_addresses`
|
|||
|
queryParameters:
|
|||
|
kundennummer:
|
|||
|
description: Suche nach bestimmter Adresse mit Kundennummer
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
default: ""
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
responses:
|
|||
|
200:
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": 7,
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Schrauben Meier",
|
|||
|
"abteilung": "",
|
|||
|
"unterabteilung": "",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "13245",
|
|||
|
"telefon": "12345678",
|
|||
|
"telefax": "",
|
|||
|
"mobile": "",
|
|||
|
"email": "schrauben@meiermusterdorf.de",
|
|||
|
"projekt": 1,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 8,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
],
|
|||
|
"pagination": {
|
|||
|
"items_total": 50,
|
|||
|
"items_current": 20,
|
|||
|
"items_per_page": 20,
|
|||
|
"page_current": 1,
|
|||
|
"page_last": 3
|
|||
|
}
|
|||
|
}
|
|||
|
post:
|
|||
|
displayName: Adressen anlegen
|
|||
|
description: |
|
|||
|
Neue Adresse anlegen
|
|||
|
|
|||
|
Permission: `create_address`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Max Muster",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "12345",
|
|||
|
"telefon": "0821123456789",
|
|||
|
"telefax": "0821123456790",
|
|||
|
"email": "info@maxmuellermuster.de",
|
|||
|
"projekt": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Angelegte Adresse wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 33,
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Max Muster",
|
|||
|
"abteilung": "",
|
|||
|
"unterabteilung": "",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "12345",
|
|||
|
"telefon": "0821123456789",
|
|||
|
"telefax": "0821123456790",
|
|||
|
"mobile": "",
|
|||
|
"email": "info@maxmuellermuster.de",
|
|||
|
"projekt": 1,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Adresse per ID abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Adressen-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Adresse abrufen
|
|||
|
description: |
|
|||
|
Einzelne Adresse abrufen
|
|||
|
|
|||
|
Permission: `view_address`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 7,
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Schrauben Meier GmbH",
|
|||
|
"abteilung": "",
|
|||
|
"unterabteilung": "",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "13245",
|
|||
|
"telefon": "12345678",
|
|||
|
"telefax": "",
|
|||
|
"mobile": "",
|
|||
|
"email": "schrauben@meiermusterdorf.de",
|
|||
|
"projekt": 1,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Adresse wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Adresse bearbeiten
|
|||
|
description: |
|
|||
|
Adresse bearbeiten
|
|||
|
|
|||
|
Permission: `edit_address`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"name": "Schrauben Meier GmbH",
|
|||
|
"strasse": "Dorfstrasse 123",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "12345",
|
|||
|
"telefon": "0987654321"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Adresse wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 7,
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Schrauben Meier GmbH",
|
|||
|
"abteilung": "",
|
|||
|
"unterabteilung": "",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Dorfstrasse 123",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "12345",
|
|||
|
"telefon": "0987654321",
|
|||
|
"telefax": "",
|
|||
|
"mobile": "",
|
|||
|
"email": "schrauben@meiermusterdorf.de",
|
|||
|
"projekt": 1,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v2/adressen:
|
|||
|
description: Adressen abrufen
|
|||
|
get:
|
|||
|
displayName: Adressenliste abrufen
|
|||
|
description: |
|
|||
|
Adressenliste abrufen
|
|||
|
|
|||
|
Permission: `list_addresses`
|
|||
|
queryParameters:
|
|||
|
projekt:
|
|||
|
description: Suche nach bestimmter Projekt-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
firma:
|
|||
|
description: Suche nach bestimmter Firmen-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
rolle:
|
|||
|
description: Suche nach bestimmter Rolle (Wert `kunde` oder `lieferant`)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
typ:
|
|||
|
description: Suche nach bestimmtem Adresstyp (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sprache:
|
|||
|
description: Suche nach bestimmter Sprache (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
waehrung:
|
|||
|
description: Suche nach bestimmtem Währungscode (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
land:
|
|||
|
description: Suche nach bestimmtem Ländercode (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach bestimmter Kundennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_equals:
|
|||
|
description: Suche nach bestimmter Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_startswith:
|
|||
|
description: Suche nach bestimmter Kundennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_endswith:
|
|||
|
description: Suche nach bestimmter Kundennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferantennummer:
|
|||
|
description: Suche nach bestimmter Lieferantennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferantennummer_equals:
|
|||
|
description: Suche nach bestimmter Lieferantennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferantennummer_startswith:
|
|||
|
description: Suche nach bestimmter Lieferantennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferantennummer_endswith:
|
|||
|
description: Suche nach bestimmter Lieferantennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mitarbeiternummer:
|
|||
|
description: Suche nach bestimmter Mitarbeiternummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mitarbeiternummer_equals:
|
|||
|
description: Suche nach bestimmter Mitarbeiternummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mitarbeiternummer_startswith:
|
|||
|
description: Suche nach bestimmter Mitarbeiternummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mitarbeiternummer_endswith:
|
|||
|
description: Suche nach bestimmter Mitarbeiternummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
email:
|
|||
|
description: Suche nach bestimmter E-Mail-Adresse (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
email_equals:
|
|||
|
description: Suche nach bestimmter E-Mail-Adresse (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
email_startswith:
|
|||
|
description: Suche nach bestimmter E-Mail-Adresse (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
email_endswith:
|
|||
|
description: Suche nach bestimmter E-Mail-Adresse (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
freifeld[1-10]:
|
|||
|
description: |
|
|||
|
Suche nach bestimmtem Wert im Freifeld1 bis Freifeld10 (ungefähre Übereinstimmung)
|
|||
|
|
|||
|
(Beispiel: `freifeld3=42`)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
freifeld[1-10]_equals:
|
|||
|
description: |
|
|||
|
Suche nach bestimmtem Wert im Freifeld1 bis Freifeld10 (genaue Übereinstimmung)
|
|||
|
|
|||
|
(Beispiel: `freifeld3_equals=42`)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=name,-kundennummer`)
|
|||
|
|
|||
|
Verfügbare Felder: `name`, `kundennummer`, `lieferantennummer`, `mitarbeiternummer`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
responses:
|
|||
|
200:
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": 7,
|
|||
|
"rolle": "lieferant",
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Schrauben Meier",
|
|||
|
"abteilung": "",
|
|||
|
"unterabteilung": "",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "13245",
|
|||
|
"telefon": "12345678",
|
|||
|
"telefax": "",
|
|||
|
"mobile": "",
|
|||
|
"email": "schrauben@meiermusterdorf.de",
|
|||
|
"projekt": 1,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 8,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
],
|
|||
|
"pagination": {
|
|||
|
"items_total": 50,
|
|||
|
"items_current": 20,
|
|||
|
"items_per_page": 20,
|
|||
|
"page_current": 1,
|
|||
|
"page_last": 3
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Adresse per ID abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Adressen-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Adresse abrufen
|
|||
|
description: |
|
|||
|
Einzelne Adresse abrufen
|
|||
|
|
|||
|
Permission: `view_address`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 7,
|
|||
|
"rolle": "lieferant",
|
|||
|
"typ": "firma",
|
|||
|
"sprache": "deutsch",
|
|||
|
"name": "Schrauben Meier GmbH",
|
|||
|
"abteilung": "",
|
|||
|
"unterabteilung": "",
|
|||
|
"land": "DE",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"plz": "13245",
|
|||
|
"telefon": "12345678",
|
|||
|
"telefax": "",
|
|||
|
"mobile": "",
|
|||
|
"email": "schrauben@meiermusterdorf.de",
|
|||
|
"projekt": 1,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Adresse wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/adresstyp:
|
|||
|
description: Adresstyp anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Adresstypen abrufen
|
|||
|
description: |
|
|||
|
Adresstypen abrufen
|
|||
|
|
|||
|
Permission: `list_address_types`
|
|||
|
queryParameters:
|
|||
|
bezeichnung:
|
|||
|
description: Adresstyp mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_exakt:
|
|||
|
description: Adresstyp mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
type:
|
|||
|
description: |
|
|||
|
Nach bestimmten Typ filtern (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `herr`, `frau`, `firma`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Adresstyp eines Projekts filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
netto:
|
|||
|
description: Netto-Adresstypen filtern (1 = netto / 0 = brutto)
|
|||
|
type: boolean
|
|||
|
required: false
|
|||
|
aktiv:
|
|||
|
description: Aktive/Inaktive Adresstypen filtern (1 = aktiv / 0 = inaktiv)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=type,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `type`, `projekt`, `modul`, `aktiv`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Adresstyp anlegen
|
|||
|
description: |
|
|||
|
Adresstyp anlegen
|
|||
|
|
|||
|
Permission: `create_address_type`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Bezeichnung des Adresstyps
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
type:
|
|||
|
description: Adresstyp; Mögliche Werte `herr`, `frau`, `firma`
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
projekt:
|
|||
|
description: Projekt
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
netto:
|
|||
|
description: Anzeige Belege in Netto (`1` = netto / `0` = brutto)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
aktiv:
|
|||
|
description: Aktiv (`1` = aktiv / `0` = inaktiv)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"type": "herr",
|
|||
|
"bezeichnung": "Gentleman",
|
|||
|
"aktiv": 1,
|
|||
|
"projekt": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegter Adresstyp wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "5",
|
|||
|
"type": "herr",
|
|||
|
"bezeichnung": "Gentleman",
|
|||
|
"projekt": "1",
|
|||
|
"netto": "0",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelner Adresstyp abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Adresstyp-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Adresstyp abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Adresstyp abrufen
|
|||
|
|
|||
|
Permission: `view_address_type`
|
|||
|
queryParameters:
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "1",
|
|||
|
"type": "firma",
|
|||
|
"bezeichnung": "Firma",
|
|||
|
"projekt": "0",
|
|||
|
"netto": "1",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Adresstyp wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Adresstyp bearbeiten
|
|||
|
description: |
|
|||
|
Adresstyp bearbeiten
|
|||
|
|
|||
|
Permission: `edit_address_type`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"type": "herr",
|
|||
|
"bezeichnung": "Mr",
|
|||
|
"aktiv": "1",
|
|||
|
"projekt": "1"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierter Adresstyp wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "5",
|
|||
|
"type": "herr",
|
|||
|
"bezeichnung": "Mr",
|
|||
|
"projekt": "1",
|
|||
|
"netto": "0",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/artikel:
|
|||
|
description: Artikel abrufen
|
|||
|
get:
|
|||
|
displayName: Artikelliste abrufen
|
|||
|
description: |
|
|||
|
Artikelliste abrufen
|
|||
|
|
|||
|
Permission: `list_articles`
|
|||
|
queryParameters:
|
|||
|
typ:
|
|||
|
description: |
|
|||
|
Artikel eines bestimmten Typs suchen (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `produkt`, `gebuehr`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
nummer:
|
|||
|
description: Suche nach Artikeln mit bestimmter Artikelnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
nummer_equals:
|
|||
|
description: Suche nach Artikeln mit bestimmter Artikelnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
nummer_startswith:
|
|||
|
description: Suche nach Artikeln mit bestimmter Artikelnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
nummer_endswith:
|
|||
|
description: Suche nach Artikeln mit bestimmter Artikelnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_de:
|
|||
|
description: Suche nach Artikeln mit bestimmtem deutschem Namen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_de_equals:
|
|||
|
description: Suche nach Artikeln mit bestimmtem deutschem Namen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_de_startswith:
|
|||
|
description: Suche nach Artikeln mit bestimmtem deutschem Namen (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_de_endswith:
|
|||
|
description: Suche nach Artikeln mit bestimmtem deutschem Namen (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_en:
|
|||
|
description: Suche nach Artikeln mit bestimmtem englischem Namen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_en_equals:
|
|||
|
description: Suche nach Artikeln mit bestimmtem englischem Namen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_en_startswith:
|
|||
|
description: Suche nach Artikeln mit bestimmtem englischem Namen (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_en_endswith:
|
|||
|
description: Suche nach Artikeln mit bestimmtem englischem Namen (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Artikel nach Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
adresse:
|
|||
|
description: Artikel nach Adresse filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
firma:
|
|||
|
description: Artikel nach Firma filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
katalog:
|
|||
|
description: Artikel nach Katalog filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
ausverkauft:
|
|||
|
description: Suche nach ausverkauften Artikeln (1 = ausverkauft / 0 = nicht ausverkauft)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
startseite:
|
|||
|
description: Suche nach Artikeln auf Startseite (1 = Startseite / 0 = nicht Startseite)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
topseller:
|
|||
|
description: Suche nach Topseller-Artikeln (1 = Topseller / 0 = kein Topseller)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=typ,-nummer`)
|
|||
|
|
|||
|
Verfügbare Felder: `name_de`, `name_en`, `nummer`, `typ`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt,verkaufpreise`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`, `verkaufspreise`, `dateien`, `lagerbestand`
|
|||
|
|
|||
|
###### Lagerbestand
|
|||
|
|
|||
|
**Beispiel – Lagerartikel**
|
|||
|
|
|||
|
```json
|
|||
|
"lagerbestand": {
|
|||
|
"lagernd": 12,
|
|||
|
"reserviert": 0,
|
|||
|
"offene_auftraege": 33,
|
|||
|
"offene_bestellungen": 1,
|
|||
|
"berechneter_bestand": -21,
|
|||
|
"verkaufbar": 0
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
**Beispiel – Kein Lagerartikel**
|
|||
|
|
|||
|
```json
|
|||
|
"lagerbestand": []
|
|||
|
```
|
|||
|
|
|||
|
**Erklärung**
|
|||
|
|
|||
|
* **Lagernd**: Lagernde Menge über alle Lager, außer Sperrlager;
|
|||
|
* **Reserviert**: Reservierte Menge
|
|||
|
* **Offene Aufträge**: Menge aus offenen Aufträgen;
|
|||
|
Es werden nur Aufträge mit dem Status FREIGEGEBEN berücksichtigt;
|
|||
|
Aufträge mit Status ANGELEGT werden nicht berücksichtigt;
|
|||
|
* **Offene Bestellungen**:
|
|||
|
Es werden nur Bestellungen mit dem Status FREIGEGEBEN berücksichtigt;
|
|||
|
Bestellungen mit Status ANGELEGT werden nicht berücksichtigt;
|
|||
|
* **Berechneter Bestand**: *Lagernder Bestand* minus *Offene Aufträge*
|
|||
|
* **Verkaufbar**: Wie *Berechneter Bestand*; wird nur nicht kleiner als `0`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
responses:
|
|||
|
200:
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": 1,
|
|||
|
"typ": "produkt",
|
|||
|
"nummer": "700001",
|
|||
|
"checksum": "",
|
|||
|
"projekt": 1,
|
|||
|
"inaktiv": "",
|
|||
|
"ausverkauft": 0,
|
|||
|
"warengruppe": "",
|
|||
|
"name_de": "Schraube M10x20",
|
|||
|
"name_en": "",
|
|||
|
"kurztext_de": "",
|
|||
|
"kurztext_en": "",
|
|||
|
"beschreibung_de": "",
|
|||
|
"beschreibung_en": "",
|
|||
|
"uebersicht_de": "",
|
|||
|
"uebersicht_en": "",
|
|||
|
"links_de": "",
|
|||
|
"links_en": "",
|
|||
|
"startseite_de": "",
|
|||
|
"startseite_en": "",
|
|||
|
"standardbild": "",
|
|||
|
"herstellerlink": "",
|
|||
|
"hersteller": "",
|
|||
|
"teilbar": "",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 2,
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
# post:
|
|||
|
# displayName: Artikel anlegen
|
|||
|
# description: Neuen Artikel anlegen
|
|||
|
# body:
|
|||
|
# application/json:
|
|||
|
# example: |
|
|||
|
# {
|
|||
|
# "name_de": "Name vom Artikel",
|
|||
|
# "aktiv": "1",
|
|||
|
# "hersteller": "Herstellername",
|
|||
|
# "herstellernummer": "123",
|
|||
|
# "ean": "234",
|
|||
|
# "zolltarifnummer": "345",
|
|||
|
# "mindestlager": "10",
|
|||
|
# "mindestbestellung": "5",
|
|||
|
# "gewicht": "1.5",
|
|||
|
# "lagerartikel": "1",
|
|||
|
# "einkaufspreise": {
|
|||
|
# "staffelpreis": {
|
|||
|
# "lieferantennummer": "70000",
|
|||
|
# "ab_menge": "1",
|
|||
|
# "bestellnummer": "123456789",
|
|||
|
# "bezeichnunglieferant": "Artikel 123456789",
|
|||
|
# "preis": "1.20",
|
|||
|
# "waehrung": "EUR"
|
|||
|
# }
|
|||
|
# },
|
|||
|
# "verkaufspreise": {
|
|||
|
# "staffelpreis": {
|
|||
|
# "ab_menge": "1",
|
|||
|
# "preis": "2.20",
|
|||
|
# "waehrung": "EUR"
|
|||
|
# }
|
|||
|
# }
|
|||
|
# }
|
|||
|
# responses:
|
|||
|
# 200:
|
|||
|
# description: Request erfolgreich; Angelegte Adresse wird zurückgeliefert
|
|||
|
# body:
|
|||
|
# application/json:
|
|||
|
# example: |
|
|||
|
# {
|
|||
|
# "data": {
|
|||
|
# "id": 20,
|
|||
|
# "typ": "",
|
|||
|
# "nummer": "1000005",
|
|||
|
# "projekt": 0,
|
|||
|
# "inaktiv": "0",
|
|||
|
# "ausverkauft": "0",
|
|||
|
# "name_de": "Name vom Artikel",
|
|||
|
# "name_en": "",
|
|||
|
# "kurztext_de": "",
|
|||
|
# "kurztext_en": "",
|
|||
|
# "beschreibung_de": "",
|
|||
|
# "beschreibung_en": "",
|
|||
|
# "hersteller": "Herstellername",
|
|||
|
# "gewicht": "1.5",
|
|||
|
# "lagerartikel": "1",
|
|||
|
# "mindestlager": "10",
|
|||
|
# "mindestbestellung": "5",
|
|||
|
# "herstellernummer": "123",
|
|||
|
# "ean": "234",
|
|||
|
# "...": "Ausgabe gekürzt",
|
|||
|
# "einkaufspreise": {
|
|||
|
# "staffelpreis": {
|
|||
|
# "ab_menge": "1.0000",
|
|||
|
# "preis": "1.20000000",
|
|||
|
# "waehrung": "EUR",
|
|||
|
# "lieferantennummer": "70000",
|
|||
|
# "projekt": "STANDARD",
|
|||
|
# "bestellnummer": "123456789",
|
|||
|
# "bezeichnunglieferant": "Artikel 123456789"
|
|||
|
# }
|
|||
|
# },
|
|||
|
# "verkaufspreise": {
|
|||
|
# "staffelpreis": {
|
|||
|
# "ab_menge": "1.0000",
|
|||
|
# "preis": "2.20000000",
|
|||
|
# "vpe": "1",
|
|||
|
# "waehrung": "EUR"
|
|||
|
# }
|
|||
|
# }
|
|||
|
# }
|
|||
|
# }
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnen Artikel per ID abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Artikel-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Artikel abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Artikel abrufen
|
|||
|
|
|||
|
Permission: `view_article`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"typ": "produkt",
|
|||
|
"nummer": "700001",
|
|||
|
"checksum": "",
|
|||
|
"projekt": 1,
|
|||
|
"inaktiv": "",
|
|||
|
"ausverkauft": 0,
|
|||
|
"warengruppe": "",
|
|||
|
"name_de": "Schraube M10x20",
|
|||
|
"name_en": "",
|
|||
|
"kurztext_de": "",
|
|||
|
"kurztext_en": "",
|
|||
|
"beschreibung_de": "",
|
|||
|
"beschreibung_en": "",
|
|||
|
"uebersicht_de": "",
|
|||
|
"uebersicht_en": "",
|
|||
|
"links_de": "",
|
|||
|
"links_en": "",
|
|||
|
"startseite_de": "",
|
|||
|
"startseite_en": "",
|
|||
|
"standardbild": "",
|
|||
|
"herstellerlink": "",
|
|||
|
"hersteller": "",
|
|||
|
"teilbar": "",
|
|||
|
"nteile": "",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Artikel wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
# put:
|
|||
|
# displayName: Artikel bearbeiten
|
|||
|
# description: Artikel bearbeiten
|
|||
|
# body:
|
|||
|
# application/json:
|
|||
|
# example: |
|
|||
|
# {
|
|||
|
# "nummer": "100001",
|
|||
|
# "name_de": "Name neu von Artikel",
|
|||
|
# "aktiv": "1",
|
|||
|
# "anabregs_text": "Text für Angebot, Auftrag, Rechnung usw.",
|
|||
|
# "hersteller": "Herstellername",
|
|||
|
# "herstellernummer": "123",
|
|||
|
# "ean": "234",
|
|||
|
# "zolltarifnummer": "345",
|
|||
|
# "mindestlager": "10",
|
|||
|
# "mindestbestellung": "5",
|
|||
|
# "gewicht": "1.5",
|
|||
|
# "lagerartikel": "1"
|
|||
|
# }
|
|||
|
# responses:
|
|||
|
# 200:
|
|||
|
# description: Request erfolgreich; Aktualisierter Artikel wird zurückgeliefert
|
|||
|
# body:
|
|||
|
# application/json:
|
|||
|
# example: |
|
|||
|
# {
|
|||
|
# "data": {
|
|||
|
# "id": 1,
|
|||
|
# "typ": "produkt",
|
|||
|
# "nummer": "700001",
|
|||
|
# "checksum": "",
|
|||
|
# "projekt": 1,
|
|||
|
# "inaktiv": "",
|
|||
|
# "ausverkauft": 0,
|
|||
|
# "warengruppe": "",
|
|||
|
# "name_de": "Schraube M10x20",
|
|||
|
# "name_en": "",
|
|||
|
# "kurztext_de": "",
|
|||
|
# "kurztext_en": "",
|
|||
|
# "beschreibung_de": "",
|
|||
|
# "beschreibung_en": "",
|
|||
|
# "uebersicht_de": "",
|
|||
|
# "uebersicht_en": "",
|
|||
|
# "links_de": "",
|
|||
|
# "links_en": "",
|
|||
|
# "startseite_de": "",
|
|||
|
# "startseite_en": "",
|
|||
|
# "standardbild": "",
|
|||
|
# "herstellerlink": "",
|
|||
|
# "hersteller": "",
|
|||
|
# "teilbar": "",
|
|||
|
# "nteile": "",
|
|||
|
# "...": "Ausgabe gekürzt"
|
|||
|
# }
|
|||
|
# }
|
|||
|
|
|||
|
|
|||
|
/v1/artikelkategorien:
|
|||
|
description: Artikelkategorien anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Artikelkategorien abrufen
|
|||
|
description: |
|
|||
|
Artikelkategorien abrufen
|
|||
|
|
|||
|
Permission: `list_article_categories`
|
|||
|
queryParameters:
|
|||
|
parent:
|
|||
|
description: Artikelkategorien mit Parent-ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Artikelkategorien mit Projekt filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
bezeichnung:
|
|||
|
description: Artikelkategorie mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_exakt:
|
|||
|
description: Artikelkategorie mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
id_ext:
|
|||
|
description: Artikelkategorie mit externer ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=parent,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `parent`, `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Artikelkategorie anlegen
|
|||
|
description: |
|
|||
|
Artikelkategorie anlegen
|
|||
|
|
|||
|
Permission: `create_article_category`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Name der Artikelkategorie
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
projekt:
|
|||
|
description: Projekt-ID
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
parent:
|
|||
|
description: ID der Elternkategorie
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Schaufelradbagger",
|
|||
|
"projekt": 1,
|
|||
|
"parent": 10
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Artikelkategorie wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 19,
|
|||
|
"bezeichnung": "Schaufelradbagger",
|
|||
|
"next_nummer": "",
|
|||
|
"projekt": 1,
|
|||
|
"geloescht": "0",
|
|||
|
"externenummer": "0",
|
|||
|
"parent": 10,
|
|||
|
"steuer_erloese_inland_normal": "",
|
|||
|
"steuer_aufwendung_inland_normal": "",
|
|||
|
"steuer_erloese_inland_ermaessigt": "",
|
|||
|
"steuer_aufwendung_inland_ermaessigt": "",
|
|||
|
"steuer_erloese_inland_steuerfrei": "",
|
|||
|
"steuer_aufwendung_inland_steuerfrei": "",
|
|||
|
"steuer_erloese_inland_innergemeinschaftlich": "",
|
|||
|
"steuer_aufwendung_inland_innergemeinschaftlich": "",
|
|||
|
"steuer_erloese_inland_eunormal": "",
|
|||
|
"steuer_erloese_inland_nichtsteuerbar": "",
|
|||
|
"steuer_erloese_inland_euermaessigt": "",
|
|||
|
"steuer_aufwendung_inland_nichtsteuerbar": "",
|
|||
|
"steuer_aufwendung_inland_eunormal": "",
|
|||
|
"steuer_aufwendung_inland_euermaessigt": "",
|
|||
|
"steuer_erloese_inland_export": "",
|
|||
|
"steuer_aufwendung_inland_import": "",
|
|||
|
"steuertext_innergemeinschaftlich": null,
|
|||
|
"steuertext_export": null,
|
|||
|
"id_ext": 0
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Artikelkategorie abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Artikelkategorie-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Artikelkategorie abrufen
|
|||
|
description: |
|
|||
|
Einzelne Artikelkategorie abrufen
|
|||
|
|
|||
|
Permission: `view_article_category`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"bezeichnung": "1000000 Sonstiges",
|
|||
|
"next_nummer": "1000000",
|
|||
|
"projekt": 0,
|
|||
|
"geloescht": "0",
|
|||
|
"externenummer": "0",
|
|||
|
"parent": 0,
|
|||
|
"...": "Ausgabe gekürzt",
|
|||
|
"id_ext": 0
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Artikelkategorie wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Artikelkategorie bearbeiten
|
|||
|
description: |
|
|||
|
Artikelkategorie bearbeiten
|
|||
|
|
|||
|
Permission: `edit_article_category`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Schwimmbagger"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Artikelkategorie wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 19,
|
|||
|
"bezeichnung": "Schwimmbagger",
|
|||
|
"next_nummer": "",
|
|||
|
"projekt": 1,
|
|||
|
"geloescht": "0",
|
|||
|
"externenummer": "0",
|
|||
|
"parent": 0,
|
|||
|
"...": "Ausgabe gekürzt",
|
|||
|
"id_ext": 0
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/eigenschaften:
|
|||
|
description: Eigenschaften für Artikel abrufen, erstellen, bearbeiten und löschen
|
|||
|
get:
|
|||
|
displayName: Eigenschaften abrufen
|
|||
|
description: |
|
|||
|
Eigenschaften abrufen
|
|||
|
|
|||
|
Permission: `list_property`
|
|||
|
queryParameters:
|
|||
|
artikel:
|
|||
|
description: Artikel Id der die Eigenschaft zugewiesen ist (genaue Übereinstimmung) - Standardmäßig 0, da die Zuordnung zum Artikel über den Wert realisiert wird
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
name:
|
|||
|
description: Name der Eigenschaft (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
typ:
|
|||
|
description: Typ der Eigenschaft (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Projekt dem die Eigenschaft zugewiesen ist (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
geloescht:
|
|||
|
description: Markiert die Eigenschaft als gelöscht (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=artikel,-name`)
|
|||
|
|
|||
|
Verfügbare Felder: `artikel`, `name`, `typ`, `projekt`, `geloescht`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Eigenschaft anlegen
|
|||
|
description: |
|
|||
|
Eigenschaft anlegen
|
|||
|
|
|||
|
Permission: `create_property`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
artikel:
|
|||
|
description: Artikel Id der die Eigenschaft zugewiesen werden soll
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
name:
|
|||
|
description: Name der Eigenschaft (muss eindeutig sein)
|
|||
|
type: string
|
|||
|
required: true
|
|||
|
typ:
|
|||
|
description: Typ der Eigenschaft
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Projekt dem die Eigenschaft zugewiesen ist
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
geloescht:
|
|||
|
description: Markiert die Eigenschaft als gelöscht
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
example: |
|
|||
|
{
|
|||
|
"name": "Farbe",
|
|||
|
"typ": "einzeilig"
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Eigenschaft wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 19,
|
|||
|
"artikel": 0,
|
|||
|
"name": "Farbe",
|
|||
|
"typ": "einzeilig",
|
|||
|
"projekt": 0,
|
|||
|
"geloescht": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Eigenschaft abrufen, bearbeiten, oder löschen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Eigenschaft-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Eigenschaft abrufen
|
|||
|
description: |
|
|||
|
Einzelne Eigenschaft abrufen
|
|||
|
|
|||
|
Permission: `view_property`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 19,
|
|||
|
"artikel": 0,
|
|||
|
"name": "Farbe",
|
|||
|
"typ": "einzeilig",
|
|||
|
"projekt": 0,
|
|||
|
"geloescht": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Eigenschaft wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Eigenschaft bearbeiten
|
|||
|
description: |
|
|||
|
Eigenschaft bearbeiten
|
|||
|
|
|||
|
Permission: `edit_property`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"name": "Material"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Eigenschaft wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 19,
|
|||
|
"artikel": 0,
|
|||
|
"name": "Material",
|
|||
|
"typ": "einzeilig",
|
|||
|
"projekt": 0,
|
|||
|
"geloescht": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
delete:
|
|||
|
displayName: Einzelne Eigenschaft löschen
|
|||
|
description: |
|
|||
|
Einzelne Eigenschaft löschen - Eigenschaften sollten nur dann gelöscht werden wenn auch keine Werte mehr für sie vorliegen
|
|||
|
|
|||
|
Permission: `delete_property`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 19
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Eigenschaft wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/eigenschaftenwerte:
|
|||
|
description: Eigenschaftenwerte für Artikel abrufen, erstellen, bearbeiten und löschen
|
|||
|
get:
|
|||
|
displayName: Eigenschaftenwerte abrufen
|
|||
|
description: |
|
|||
|
Eigenschaften abrufen
|
|||
|
|
|||
|
Permission: `list_property_value`
|
|||
|
queryParameters:
|
|||
|
artikel:
|
|||
|
description: Artikel Id der die Eigenschaft zugewiesen ist (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
artikeleigenschaften:
|
|||
|
description: Id der Eigenschaft (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
wert:
|
|||
|
description: Wert der Eigenschaft (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=artikel,-wert`)
|
|||
|
|
|||
|
Verfügbare Felder: `artikel`, `wert`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Eigenschaftwert anlegen
|
|||
|
description: |
|
|||
|
Eigenschaftenwert anlegen
|
|||
|
|
|||
|
Permission: `create_property_value`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
artikel:
|
|||
|
description: Artikel Id der der Eigenschaftenwert zugewiesen werden soll
|
|||
|
type: integer
|
|||
|
required: true
|
|||
|
artikeleigenschaften:
|
|||
|
description: Id der Eigenschaft
|
|||
|
type: integer
|
|||
|
required: true
|
|||
|
wert:
|
|||
|
description: Wert der Eigenschaft
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
example: |
|
|||
|
{
|
|||
|
"artikel": 1,
|
|||
|
"artikeleigenschaften": 19,
|
|||
|
"wert": "Gelb"
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegter Eigenschaftenwert wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 203,
|
|||
|
"artikel": 1,
|
|||
|
"artikeleigenschaften": 19,
|
|||
|
"wert": "Gelb"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnen Eigenschaftenwert abrufen, bearbeiten, oder löschen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Eigenschaftenwert-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Eigenschaftenwert abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Eigenschaftenwert abrufen
|
|||
|
|
|||
|
Permission: `view_property_value`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 203,
|
|||
|
"artikel": 1,
|
|||
|
"artikeleigenschaften": 19,
|
|||
|
"wert": "Gelb"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Eigenschaftenwert wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Eigenschaftenwert bearbeiten
|
|||
|
description: |
|
|||
|
Eigenschaftenwert bearbeiten
|
|||
|
|
|||
|
Permission: `edit_property_value`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"wert": "Holz"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierter Eigenschaftenwert wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 203,
|
|||
|
"artikel": 1,
|
|||
|
"artikeleigenschaften": 19,
|
|||
|
"wert": "Holz"
|
|||
|
}
|
|||
|
}
|
|||
|
delete:
|
|||
|
displayName: Einzelnen Eigenschaftenwert löschen
|
|||
|
description: |
|
|||
|
Einzelnen Eigenschaftenwert löschen
|
|||
|
|
|||
|
Permission: `delete_property_value`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 203
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Eigenschaftenwert wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/belege/angebote:
|
|||
|
description: Angebote abrufen
|
|||
|
get:
|
|||
|
displayName: Angebotsliste abrufen
|
|||
|
description: |
|
|||
|
Angebotsliste abrufen und Angebote suchen
|
|||
|
|
|||
|
Permission: `list_quotes`
|
|||
|
queryParameters:
|
|||
|
status:
|
|||
|
description: |
|
|||
|
Suche nach Angebotsstatus (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `angelegt`, `abgelehnt`, `beauftragt`, `bestellt`, `freigegeben`, `versendet`, `storniert`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr:
|
|||
|
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_equals:
|
|||
|
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_startswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_endswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_equals:
|
|||
|
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_startswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_endswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Angebote eines bestimmten Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=belegnr`)
|
|||
|
|
|||
|
Verfügbare Felder: `belegnr`, `datum`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
|||
|
|
|||
|
Verfügbare Includes: `positionen`, `protokoll`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnes Angebot abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Angebots-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnes Angebot abrufen
|
|||
|
description: |
|
|||
|
Einzelnes Angebot abrufen
|
|||
|
|
|||
|
Permission: `list_quotes`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 4,
|
|||
|
"firma": 1,
|
|||
|
"projekt": "1",
|
|||
|
"status": "versendet",
|
|||
|
"belegnr": "100003",
|
|||
|
"kundennummer": "10000",
|
|||
|
"datum": "2019-06-28",
|
|||
|
"gueltigbis": "2019-04-10",
|
|||
|
"adresse": 3,
|
|||
|
"typ": "firma",
|
|||
|
"name": "Max Muster",
|
|||
|
"titel": "",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"plz": "12345",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"land": "DE",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Angebot wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/belege/auftraege:
|
|||
|
description: Aufträge abrufen
|
|||
|
get:
|
|||
|
displayName: Auftragsliste abrufen
|
|||
|
description: |
|
|||
|
Auftragsliste abrufen und Aufträge suchen
|
|||
|
|
|||
|
Permission: `list_orders`
|
|||
|
queryParameters:
|
|||
|
status:
|
|||
|
description: |
|
|||
|
Suche nach Auftragssstatus (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `angelegt`, `bestellt`, `freigegeben`, `versendet`, `abgeschlossen`, `storniert`,
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr:
|
|||
|
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_equals:
|
|||
|
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_startswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_endswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_equals:
|
|||
|
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_startswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_endswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
angebot:
|
|||
|
description: Aufträge nach Angebotsnummer filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
angebotid:
|
|||
|
description: Aufträge nach Angebots-ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Aufträge eines bestimmten Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=belegnr`)
|
|||
|
|
|||
|
Verfügbare Felder: `belegnr`, `datum`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
|||
|
|
|||
|
Verfügbare Includes: `positionen`, `protokoll`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnen Auftrag abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Auftrag-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Auftrag abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Auftrag abrufen
|
|||
|
|
|||
|
Permission: `list_orders`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 4,
|
|||
|
"firma": 1,
|
|||
|
"projekt": "1",
|
|||
|
"status": "freigegeben",
|
|||
|
"belegnr": "200003",
|
|||
|
"kundennummer": "10002",
|
|||
|
"ihrebestellnummer": null,
|
|||
|
"datum": "2019-02-26",
|
|||
|
"adresse": 5,
|
|||
|
"typ": "firma",
|
|||
|
"name": "Hans Huber",
|
|||
|
"titel": "",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"plz": "12345",
|
|||
|
"ort": "Musterstadt",
|
|||
|
"land": "DE",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Auftrag wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/belege/lieferscheine:
|
|||
|
description: Lieferscheine abrufen
|
|||
|
get:
|
|||
|
displayName: Lieferscheinliste abrufen
|
|||
|
description: |
|
|||
|
Lieferscheinliste abrufen und Lieferscheine suchen
|
|||
|
|
|||
|
Permission: `list_delivery_notes`
|
|||
|
queryParameters:
|
|||
|
status:
|
|||
|
description: |
|
|||
|
Suche nach Lieferschein-Status (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `angelegt`, `freigegeben`, `abgeschlossen`, `versendet`, `storniert`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr:
|
|||
|
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_equals:
|
|||
|
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_startswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_endswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet:
|
|||
|
description: Suche nach Internetnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet_equals:
|
|||
|
description: Suche nach Internetnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet_startswith:
|
|||
|
description: Suche nach Internetnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet_endswith:
|
|||
|
description: Suche nach Internetnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_equals:
|
|||
|
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_startswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_endswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftrag:
|
|||
|
description: Lieferscheine nach Auftragsnummer filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftragid:
|
|||
|
description: Lieferscheine nach Auftrags-ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Lieferscheine eines bestimmten Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=belegnr`)
|
|||
|
|
|||
|
Verfügbare Felder: `belegnr`, `datum`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
|||
|
|
|||
|
Verfügbare Includes: `positionen`, `protokoll`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnen Lieferschein abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Lieferschein-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Lieferschein abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Lieferschein abrufen
|
|||
|
|
|||
|
Permission: `list_delivery_notes`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 4,
|
|||
|
"firma": 1,
|
|||
|
"projekt": "1",
|
|||
|
"status": "freigegeben",
|
|||
|
"lieferscheinart": "",
|
|||
|
"belegnr": "300003",
|
|||
|
"kundennummer": "10001",
|
|||
|
"ihrebestellnummer": "",
|
|||
|
"datum": "2019-06-12",
|
|||
|
"adresse": 4,
|
|||
|
"typ": "frau",
|
|||
|
"name": "Eva Müller",
|
|||
|
"strasse": "Musterweg 12a",
|
|||
|
"plz": "12345",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"land": "DE",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Lieferschein wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/belege/rechnungen:
|
|||
|
description: Rechnungen abrufen
|
|||
|
get:
|
|||
|
displayName: Rechnungsliste abrufen
|
|||
|
description: |
|
|||
|
Rechnungsliste abrufen und Rechnungen suchen
|
|||
|
|
|||
|
Permission: `list_invoices`
|
|||
|
queryParameters:
|
|||
|
status:
|
|||
|
description: |
|
|||
|
Suche nach Rechnungs-Status (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `angelegt`, `freigegeben`, `versendet`, `storniert`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr:
|
|||
|
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_equals:
|
|||
|
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_startswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_endswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_equals:
|
|||
|
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_startswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_endswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftrag:
|
|||
|
description: Rechnungen nach Auftragsnummer filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftragid:
|
|||
|
description: Rechnungen nach Auftrags-ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Rechnungen eines bestimmten Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=belegnr`)
|
|||
|
|
|||
|
Verfügbare Felder: `belegnr`, `datum`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
|||
|
|
|||
|
Verfügbare Includes: `positionen`, `protokoll`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Rechnung abrufen oder löschen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Rechnungs-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Rechnung abrufen
|
|||
|
description: |
|
|||
|
Einzelne Rechnung abrufen
|
|||
|
|
|||
|
Permission: `view_invoice`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 4,
|
|||
|
"firma": 1,
|
|||
|
"projekt": "1",
|
|||
|
"status": "versendet",
|
|||
|
"belegnr": "400002",
|
|||
|
"datum": "2019-05-21",
|
|||
|
"kundennummer": "10000",
|
|||
|
"adresse": 3,
|
|||
|
"typ": "firma",
|
|||
|
"name": "Max Muster",
|
|||
|
"strasse": "Musterstrasse 6",
|
|||
|
"plz": "12345",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"land": "DE",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Rechnung wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
delete:
|
|||
|
displayName: Einzelne Rechnung löschen
|
|||
|
description: |
|
|||
|
Einzelne Rechnung löschen
|
|||
|
|
|||
|
Permission: `delete_invoice`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 18
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Rechnung wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/belege/gutschriften:
|
|||
|
description: Gutschriften/Stornorechnungen abrufen
|
|||
|
get:
|
|||
|
displayName: Gutschriftenliste abrufen
|
|||
|
description: |
|
|||
|
Gutschriftenliste abrufen und Gutschriften suchen
|
|||
|
|
|||
|
Permission: `list_credit_memos`
|
|||
|
queryParameters:
|
|||
|
status:
|
|||
|
description: |
|
|||
|
Suche nach Gutschriften-Status (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `angelegt`, `freigegeben`, `versendet`, `storniert`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr:
|
|||
|
description: Suche nach Belegnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_equals:
|
|||
|
description: Suche nach Belegnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_startswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegnr_endswith:
|
|||
|
description: Suche nach Belegnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer:
|
|||
|
description: Suche nach Kundennummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_equals:
|
|||
|
description: Suche nach Kundennummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_startswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kundennummer_endswith:
|
|||
|
description: Suche nach Kundennummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Belegdatum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Belegdatum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
rechnung:
|
|||
|
description: Gutschriften nach Rechnungsnummer filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
rechnungid:
|
|||
|
description: Gutschriften nach Rechnungs-ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Gutschriften eines bestimmten Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=belegnr`)
|
|||
|
|
|||
|
Verfügbare Felder: `belegnr`, `datum`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=positionen`)
|
|||
|
|
|||
|
Verfügbare Includes: `positionen`, `protokoll`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Gutschrift abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Gutschriften-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Gutschrift abrufen
|
|||
|
description: |
|
|||
|
Einzelne Gutschrift abrufen
|
|||
|
|
|||
|
Permission: `view_credit_memo`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"firma": 1,
|
|||
|
"projekt": "1",
|
|||
|
"status": "versendet",
|
|||
|
"belegnr": "900000",
|
|||
|
"datum": "2019-08-07",
|
|||
|
"stornorechnung": 0,
|
|||
|
"kundennummer": "10001",
|
|||
|
"adresse": 4,
|
|||
|
"typ": "frau",
|
|||
|
"name": "Eva Müller",
|
|||
|
"strasse": "Musterweg 12a",
|
|||
|
"plz": "12345",
|
|||
|
"ort": "Musterdorf",
|
|||
|
"land": "DE",
|
|||
|
"...": "Ausgabe gekürzt"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Gutschrift wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/crmdokumente:
|
|||
|
description: CRM-Dokumente abrufen, anlegen und bearbeiten
|
|||
|
get:
|
|||
|
displayName: CRM-Dokumente abrufen
|
|||
|
description: |
|
|||
|
CRM-Dokumente abrufen und suchen
|
|||
|
|
|||
|
Permission: `list_crm_documents`
|
|||
|
queryParameters:
|
|||
|
typ:
|
|||
|
description: Suche nach CRM-Dokumenten eines Typs (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
typ_equals:
|
|||
|
description: |
|
|||
|
Suche nach CRM-Dokumenten eines Typs (genaue Übereinstimmung)
|
|||
|
|
|||
|
Verfügbare Typen: `brief`, `email`, `telefon`, `notiz`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
typ_exact:
|
|||
|
description: (deprecated) gleich wie typ_equals
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
betreff:
|
|||
|
description: Suche nach Betreff (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
betreff_equals:
|
|||
|
description: Suche nach Betreff (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
betreff_exakt:
|
|||
|
description: (deprecated) gleich wie betreff_equals
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Filtere nach Projekt (Projekt-ID)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
adresse_from:
|
|||
|
description: Filtere nach Absender (Adresse-ID)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
adresse_to:
|
|||
|
description: Filtere nach Empfänger (Adresse-ID)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`, `adresse_to`, `adresse_from`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: CRM-Dokument anlegen
|
|||
|
description: |
|
|||
|
CRM-Dokument anlegen
|
|||
|
|
|||
|
Permission: `create_crm_document`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
typ:
|
|||
|
description: Mögliche Werte sind `email`, `brief`, `telefon`, `notiz`
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
betreff:
|
|||
|
description: Betreff des CRM-Dokuments
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
content:
|
|||
|
description: Inhalt des CRM-Dokuments
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
adresse_from:
|
|||
|
description: Absender/Mitarbeiter (Adresse-ID)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
adresse_to:
|
|||
|
description: Empfänger/Kunde (Adresse-ID)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
von:
|
|||
|
description: Anzeigename Absender
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
an:
|
|||
|
description: Anzeigename Empfänger
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email_an:
|
|||
|
description: E-Mail Adresse Empfänger
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email_cc:
|
|||
|
description: E-Mail Adresse CC
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email_bcc:
|
|||
|
description: E-Mail Adresse BCC
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
adresse:
|
|||
|
description: Anschrift 1. Adresszeile
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
plz:
|
|||
|
description: Anschrift Postleitzahl
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
ort:
|
|||
|
description: Anschrift Ort
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
land:
|
|||
|
description: Anschrift Land
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
datum:
|
|||
|
description: Datum des Dokuments
|
|||
|
required: false
|
|||
|
type: date-only
|
|||
|
uhrzeit:
|
|||
|
description: Uhrzeit des Dokuments
|
|||
|
required: false
|
|||
|
type: time-only
|
|||
|
projekt:
|
|||
|
description: Projekt-ID
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
signatur:
|
|||
|
description: Signatur verwendet (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
printer:
|
|||
|
description: Nachricht wurde gedruckt (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
fax:
|
|||
|
description: Fax wurde versendet (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
sent:
|
|||
|
description: Nachricht wurde versendet (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
deleted:
|
|||
|
description: Nachricht wurde gelöscht (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"typ": "email",
|
|||
|
"betreff": "AW: Antwort auf eine Frage",
|
|||
|
"adresse_from": 1,
|
|||
|
"adresse_to": 7,
|
|||
|
"projekt": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 14,
|
|||
|
"adresse_from": 1,
|
|||
|
"adresse_to": 7,
|
|||
|
"typ": "email",
|
|||
|
"von": "",
|
|||
|
"an": "",
|
|||
|
"email_an": "",
|
|||
|
"send_as": "",
|
|||
|
"email": "",
|
|||
|
"email_cc": null,
|
|||
|
"email_bcc": null,
|
|||
|
"bearbeiter": null,
|
|||
|
"firma_an": "",
|
|||
|
"adresse": "",
|
|||
|
"ansprechpartner": null,
|
|||
|
"plz": "",
|
|||
|
"ort": "",
|
|||
|
"land": "",
|
|||
|
"datum": "0000-00-00",
|
|||
|
"uhrzeit": null,
|
|||
|
"betreff": "AW: Antwort auf eine Frage",
|
|||
|
"content": "",
|
|||
|
"projekt": 1,
|
|||
|
"internebezeichnung": "",
|
|||
|
"signatur": 0,
|
|||
|
"fax": 0,
|
|||
|
"sent": 0,
|
|||
|
"printer": 0,
|
|||
|
"deleted": 0
|
|||
|
}
|
|||
|
}
|
|||
|
400:
|
|||
|
description: Request Body Fehlerhaft
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7453,
|
|||
|
"http_code": 400,
|
|||
|
"message": "Validation error",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7453",
|
|||
|
"details": [
|
|||
|
"The attribute 'betreff' is required."
|
|||
|
]
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne CRM-Dokumente abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: CRM-Dokumenten-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnes CRM-Dokument abrufen
|
|||
|
description: |
|
|||
|
Einzelnes CRM-Dokument abrufen.
|
|||
|
|
|||
|
Permission: `view_crm_document`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 4,
|
|||
|
"adresse_from": 1,
|
|||
|
"adresse_to": 7,
|
|||
|
"typ": "telefon",
|
|||
|
"von": "",
|
|||
|
"an": "",
|
|||
|
"email_an": "",
|
|||
|
"send_as": "",
|
|||
|
"email": "",
|
|||
|
"email_cc": "",
|
|||
|
"email_bcc": "",
|
|||
|
"bearbeiter": "Mitarbeiter XY",
|
|||
|
"firma_an": "",
|
|||
|
"adresse": "",
|
|||
|
"ansprechpartner": "",
|
|||
|
"plz": "",
|
|||
|
"ort": "",
|
|||
|
"land": "",
|
|||
|
"datum": "2019-11-05",
|
|||
|
"uhrzeit": "12:04:00",
|
|||
|
"betreff": "Fragen zur Bedienung",
|
|||
|
"content": "- Keine Fragen, alles klar",
|
|||
|
"projekt": 1,
|
|||
|
"internebezeichnung": "",
|
|||
|
"signatur": 0,
|
|||
|
"fax": 0,
|
|||
|
"sent": 0,
|
|||
|
"printer": 0,
|
|||
|
"deleted": 0
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: CRM-Dokument wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: CRM-Dokument bearbeiten
|
|||
|
description: |
|
|||
|
CRM-Dokument bearbeiten
|
|||
|
|
|||
|
Permission: `view_crm_document`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
typ:
|
|||
|
description: Mögliche Werte sind `email`, `brief`, `telefon`, `notiz`
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
betreff:
|
|||
|
description: Betreff des CRM-Dokuments
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
content:
|
|||
|
description: Inhalt des CRM-Dokuments
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
adresse_from:
|
|||
|
description: Absender/Mitarbeiter (Adresse-ID)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
adresse_to:
|
|||
|
description: Empfänger/Kunde (Adresse-ID)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
von:
|
|||
|
description: Anzeigename Absender
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
an:
|
|||
|
description: Anzeigename Empfänger
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email_an:
|
|||
|
description: E-Mail Adresse Empfänger
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email_cc:
|
|||
|
description: E-Mail Adresse CC
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email_bcc:
|
|||
|
description: E-Mail Adresse BCC
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
adresse:
|
|||
|
description: Anschrift 1. Adresszeile
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
plz:
|
|||
|
description: Anschrift Postleitzahl
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
ort:
|
|||
|
description: Anschrift Ort
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
land:
|
|||
|
description: Anschrift Land
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
datum:
|
|||
|
description: Datum des Dokuments
|
|||
|
required: false
|
|||
|
type: date-only
|
|||
|
uhrzeit:
|
|||
|
description: Uhrzeit des Dokuments
|
|||
|
required: false
|
|||
|
type: time-only
|
|||
|
projekt:
|
|||
|
description: Projekt-ID
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
signatur:
|
|||
|
description: Signatur verwendet (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
printer:
|
|||
|
description: Nachricht wurde gedruckt (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
fax:
|
|||
|
description: Fax wurde versendet (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
sent:
|
|||
|
description: Nachricht wurde versendet (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
deleted:
|
|||
|
description: Nachricht wurde gelöscht (1=ja, 0=nein)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"typ": "brief",
|
|||
|
"betreff": "Test Brief 14"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 14,
|
|||
|
"adresse_from": 1,
|
|||
|
"adresse_to": 7,
|
|||
|
"typ": "brief",
|
|||
|
"von": "",
|
|||
|
"an": "",
|
|||
|
"email_an": "",
|
|||
|
"send_as": "",
|
|||
|
"email": "",
|
|||
|
"email_cc": null,
|
|||
|
"email_bcc": null,
|
|||
|
"bearbeiter": null,
|
|||
|
"firma_an": "",
|
|||
|
"adresse": "",
|
|||
|
"ansprechpartner": null,
|
|||
|
"plz": "",
|
|||
|
"ort": "",
|
|||
|
"land": "",
|
|||
|
"datum": "0000-00-00",
|
|||
|
"uhrzeit": null,
|
|||
|
"betreff": "Test Brief 14",
|
|||
|
"content": "",
|
|||
|
"projekt": 1,
|
|||
|
"internebezeichnung": "",
|
|||
|
"signatur": 0,
|
|||
|
"fax": 0,
|
|||
|
"sent": 0,
|
|||
|
"printer": 0,
|
|||
|
"deleted": 0
|
|||
|
}
|
|||
|
}
|
|||
|
400:
|
|||
|
description: Request Body Fehlerhaft
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7453,
|
|||
|
"http_code": 400,
|
|||
|
"message": "Validation error",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7453",
|
|||
|
"details": [
|
|||
|
"The attribute 'betreff' is required."
|
|||
|
]
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: CRM-Dokument wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
delete:
|
|||
|
displayName: CRM-Dokument löschen
|
|||
|
description: |
|
|||
|
CRM-Dokument löschen
|
|||
|
|
|||
|
Permission: `delete_crm_document`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 14
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: CRM-Dokument wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/dateien:
|
|||
|
description: Dateiliste abrufen und Dateien downloaden
|
|||
|
get:
|
|||
|
displayName: Dateiliste abrufen
|
|||
|
description: |
|
|||
|
Dateiliste abrufen.
|
|||
|
|
|||
|
Permission: `list_files`
|
|||
|
queryParameters:
|
|||
|
titel:
|
|||
|
description: Suche nach Dateititel (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
titel_equals:
|
|||
|
description: Suche nach Dateititel (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
titel_startswith:
|
|||
|
description: Suche nach Dateititel (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
titel_endswith:
|
|||
|
description: Suche nach Dateititel (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname:
|
|||
|
description: Suche nach Dateiname (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname_equals:
|
|||
|
description: Suche nach Dateiname (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname_startswith:
|
|||
|
description: Suche nach Dateiname (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname_endswith:
|
|||
|
description: Suche nach Dateiname (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegtyp:
|
|||
|
description: Suche nach Zuweisungen zu Belegtyp (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
stichwort:
|
|||
|
description: Suche nach Stichwort (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=dateiname`)
|
|||
|
|
|||
|
Verfügbare Felder: `dateiname`, `datum`, `titel`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=stichwoerter`)
|
|||
|
|
|||
|
Verfügbare Includes: `stichwoerter`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Datei anlegen/hochladen
|
|||
|
description: |
|
|||
|
Datei anlegen/hochladen
|
|||
|
|
|||
|
Permission: `create_files`
|
|||
|
body:
|
|||
|
application/x-www-form-urlencoded:
|
|||
|
properties:
|
|||
|
file_content:
|
|||
|
description: Datei-Inhalt (Raw-Daten)
|
|||
|
required: true
|
|||
|
type: file
|
|||
|
titel:
|
|||
|
description: Datei-Titel
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
dateiname:
|
|||
|
description: Dateiname (ohne Verzeichnis; Beispiel `foo.jpg`)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
beschreibung:
|
|||
|
description: Beschreibungstext
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Datei wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 123,
|
|||
|
"titel": "Rechnung 400027",
|
|||
|
"beschreibung": "Rechnung 400027 von Kunde Max Mustermann",
|
|||
|
"nummer": "",
|
|||
|
"firma": 1,
|
|||
|
"ersteller": "",
|
|||
|
"datum": "2018-11-15",
|
|||
|
"version": 1,
|
|||
|
"dateiname": "RE400027.pdf",
|
|||
|
"bemerkung": "Initiale Version",
|
|||
|
"size": "8427",
|
|||
|
"stichwoerter": null,
|
|||
|
"belegtypen": null,
|
|||
|
"mimetype": "application/pdf",
|
|||
|
"links": {
|
|||
|
"download": "http://www.example.com/api/v1/dateien/123/download",
|
|||
|
"base64": "http://www.example.com/api/v1/dateien/123/base64"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Informationen zu einer Datei abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Datei-ID
|
|||
|
get:
|
|||
|
displayName: Informationen zu einer Datei abrufen
|
|||
|
description: |
|
|||
|
Informationen zu einer Datei abrufen
|
|||
|
|
|||
|
Permission: `view_file`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 115,
|
|||
|
"titel": "Rechnung 400027",
|
|||
|
"beschreibung": "",
|
|||
|
"nummer": "",
|
|||
|
"firma": 1,
|
|||
|
"ersteller": "Max Mustermann",
|
|||
|
"datum": "2018-11-15",
|
|||
|
"version": 1,
|
|||
|
"dateiname": "RE400027.pdf",
|
|||
|
"bemerkung": "Initiale Version",
|
|||
|
"size": "8427",
|
|||
|
"stichwoerter": "Belege",
|
|||
|
"belegtypen": "Verbindlichkeiten",
|
|||
|
"mimetype": "application/pdf",
|
|||
|
"links": {
|
|||
|
"download": "http://www.example.com/api/v1/dateien/115/download",
|
|||
|
"base64": "http://www.example.com/api/v1/dateien/115/base64"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Datei wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
/download:
|
|||
|
description: Datei downloaden
|
|||
|
get:
|
|||
|
displayName: Datei downloaden
|
|||
|
description: |
|
|||
|
Datei downloaden
|
|||
|
|
|||
|
Permission: `handle_assets`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: |
|
|||
|
Request erfolgreich
|
|||
|
|
|||
|
Der Content-Type ist abhängig vom Mime-Type der Datei die gesendet wird.
|
|||
|
/base64:
|
|||
|
description: Dateiinhalt base64-kodiert abrufen
|
|||
|
get:
|
|||
|
displayName: Dateiinhalt base64-kodiert abrufen
|
|||
|
description: |
|
|||
|
Dateiinhalt base64-kodiert abrufen
|
|||
|
|
|||
|
Permission: `handle_assets`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
text/plain:
|
|||
|
example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=
|
|||
|
|
|||
|
/v1/docscan:
|
|||
|
description: DocumentScanner-Dateiliste abrufen und Dateien downloaden
|
|||
|
get:
|
|||
|
displayName: DocumentScanner-Dateiliste abrufen
|
|||
|
description: |
|
|||
|
DocumentScanner-Dateiliste abrufen
|
|||
|
|
|||
|
Permission: `list_scanned_documents`
|
|||
|
queryParameters:
|
|||
|
titel:
|
|||
|
description: Suche nach Dateititel (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
titel_equals:
|
|||
|
description: Suche nach Dateititel (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
titel_startswith:
|
|||
|
description: Suche nach Dateititel (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
titel_endswith:
|
|||
|
description: Suche nach Dateititel (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname:
|
|||
|
description: Suche nach Dateiname (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname_equals:
|
|||
|
description: Suche nach Dateiname (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname_startswith:
|
|||
|
description: Suche nach Dateiname (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
dateiname_endswith:
|
|||
|
description: Suche nach Dateiname (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach Datum (genaue Übereinstimmung; Format `YYYY-MM-DD`)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach Datum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach Datum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach Datum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach Datum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
belegtyp:
|
|||
|
description: Suche nach Zuweisungen zu Belegtyp (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
stichwort:
|
|||
|
description: Suche nach Stichwort (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
firma:
|
|||
|
description: Suche nach Firmen-ID
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=dateiname`)
|
|||
|
|
|||
|
Verfügbare Felder: `dateiname`, `datum`, `titel`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=stichwoerter`)
|
|||
|
|
|||
|
Verfügbare Includes: `stichwoerter`, `metadata`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: DocumentScanner-Datei anlegen/hochladen
|
|||
|
description: |
|
|||
|
DocumentScanner-Datei anlegen/hochladen
|
|||
|
|
|||
|
Permission: `create_scanned_documents`
|
|||
|
body:
|
|||
|
multipart/form-data:
|
|||
|
properties:
|
|||
|
file_content:
|
|||
|
description: Datei-Inhalt
|
|||
|
required: true
|
|||
|
type: file
|
|||
|
titel:
|
|||
|
description: Datei-Titel
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
dateiname:
|
|||
|
description: Dateiname (ohne Verzeichnis; Beispiel `beleg.pdf`)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
beschreibung:
|
|||
|
description: Datei-Beschreibungstext
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta:
|
|||
|
description: Meta-Daten
|
|||
|
required: false
|
|||
|
type: array
|
|||
|
meta.invoice_number:
|
|||
|
description: Rechnungsnummer
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_date:
|
|||
|
description: Rechnungsdatum (Format `YYYY-MM-DD`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_amount:
|
|||
|
description: Rechnungsbetrag brutto (Beispiel `12345.67`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_tax:
|
|||
|
description: Mehrwertsteuerbetrag der Rechnung (Beispiel `12345.67`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_currency:
|
|||
|
description: Währungscode der Rechnung (Beispiel `EUR`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
application/x-www-form-urlencoded:
|
|||
|
properties:
|
|||
|
file_content:
|
|||
|
description: Datei-Inhalt (Raw-Daten)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
titel:
|
|||
|
description: Datei-Titel
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
dateiname:
|
|||
|
description: Dateiname (ohne Verzeichnis; Beispiel `beleg.pdf`)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
beschreibung:
|
|||
|
description: Datei-Beschreibungstext
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta:
|
|||
|
description: Meta-Daten
|
|||
|
required: false
|
|||
|
type: array
|
|||
|
meta.invoice_number:
|
|||
|
description: Rechnungsnummer
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_date:
|
|||
|
description: Rechnungsdatum (Format `YYYY-MM-DD`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_amount:
|
|||
|
description: Rechnungsbetrag brutto (Beispiel `12345.67`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_tax:
|
|||
|
description: Mehrwertsteuerbetrag der Rechnung (Beispiel `12345.67`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
meta.invoice_currency:
|
|||
|
description: Währungscode der Rechnung (Beispiel `EUR`)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Datei wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 123,
|
|||
|
"titel": "Rechnung 400027",
|
|||
|
"beschreibung": "Rechnung 400027 von Kunde Max Mustermann",
|
|||
|
"nummer": "",
|
|||
|
"firma": 1,
|
|||
|
"ersteller": "",
|
|||
|
"datum": "2018-11-15",
|
|||
|
"version": 1,
|
|||
|
"dateiname": "RE400027.pdf",
|
|||
|
"bemerkung": "Initiale Version",
|
|||
|
"size": "8427",
|
|||
|
"mimetype": "application/pdf",
|
|||
|
"links": {
|
|||
|
"download": "http://www.example.com/api/v1/dateien/123/download",
|
|||
|
"base64": "http://www.example.com/api/v1/dateien/123/base64"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Informationen zu einer DocumentScanner-Datei abrufen
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Datei-ID
|
|||
|
get:
|
|||
|
displayName: Informationen zu einer DocumentScanner-Datei abrufen
|
|||
|
description: |
|
|||
|
Informationen zu einer DocumentScanner-Datei abrufen
|
|||
|
|
|||
|
Permission: `view_scanned_documents`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 115,
|
|||
|
"titel": "Rechnung 400027",
|
|||
|
"beschreibung": "",
|
|||
|
"nummer": "",
|
|||
|
"firma": 1,
|
|||
|
"ersteller": "Max Mustermann",
|
|||
|
"datum": "2018-11-15",
|
|||
|
"version": 1,
|
|||
|
"dateiname": "RE400027.pdf",
|
|||
|
"bemerkung": "Initiale Version",
|
|||
|
"size": "8427",
|
|||
|
"mimetype": "application/pdf",
|
|||
|
"links": {
|
|||
|
"download": "http://www.example.com/api/v1/dateien/115/download",
|
|||
|
"base64": "http://www.example.com/api/v1/dateien/115/base64"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Datei wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/gruppen:
|
|||
|
description: Gruppen anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Gruppenliste abrufen
|
|||
|
description: |
|
|||
|
Gruppenliste abrufen
|
|||
|
|
|||
|
Permission: `list_groups`
|
|||
|
queryParameters:
|
|||
|
name:
|
|||
|
description: Gruppe mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_exakt:
|
|||
|
description: Gruppe mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kennziffer:
|
|||
|
description: Gruppen mit bestimmter Kennziffer suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
kennziffer_exakt:
|
|||
|
description: Gruppen mit bestimmter Kennziffer suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
art:
|
|||
|
description: |
|
|||
|
Gruppen mit bestimmter Art suchen (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: `gruppe`, `preisgruppe`, `verband`, `regionalgruppe`, `kategorie`, `vertreter`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Gruppen mit bestimmten Projekt filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
kategorie:
|
|||
|
description: Gruppen mit bestimmter Kategorie filtern
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
aktiv:
|
|||
|
description: Aktive/Inaktive Gruppen filtern (1 = aktiv / 0 = inaktiv)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=projekt,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `name`, `art`, `kennziffer`, `projekt`, `kategorie`, `aktiv`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Gruppe anlegen
|
|||
|
description: |
|
|||
|
Gruppe anlegen
|
|||
|
|
|||
|
Permission: `create_groups`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
name:
|
|||
|
description: Bezeichnung der Gruppe
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
art:
|
|||
|
description: Mögliche Werte sind `gruppe`, `preisgruppe`, `verband`, `regionalgruppe`, `kategorie` , `vertreter`
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
kennziffer:
|
|||
|
description: Einmalige Kennziffer
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
projekt:
|
|||
|
description: Projekt-ID
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
kategorie:
|
|||
|
description: Projekt-ID
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
aktiv:
|
|||
|
description: Gruppe aktiv? (1 = Aktiv / 0 = Inaktiv)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"name": "Support",
|
|||
|
"art": "gruppe",
|
|||
|
"kennziffer": "SUPPORT",
|
|||
|
"projekt": 0,
|
|||
|
"kategorie": 0,
|
|||
|
"aktiv": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Gruppe wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "11",
|
|||
|
"name": "Support",
|
|||
|
"art": "gruppe",
|
|||
|
"kennziffer": "SUPPORT",
|
|||
|
"internebemerkung": "",
|
|||
|
"projekt": "0",
|
|||
|
"kategorie": "0",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Gruppe abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Gruppe-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Gruppe abrufen
|
|||
|
description: |
|
|||
|
Einzelne Gruppe abrufen
|
|||
|
|
|||
|
Permission: `view_group`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "1",
|
|||
|
"name": "Vertriebsleiter",
|
|||
|
"art": "vertreter",
|
|||
|
"kennziffer": "VETRL",
|
|||
|
"internebemerkung": "",
|
|||
|
"projekt": "0",
|
|||
|
"kategorie": "0",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Gruppe wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Gruppe bearbeiten
|
|||
|
description: |
|
|||
|
Gruppe bearbeiten
|
|||
|
|
|||
|
Permission: `update_group`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"name": "Support (inaktiv)",
|
|||
|
"art": "gruppe",
|
|||
|
"kennziffer": "SUPPORT",
|
|||
|
"aktiv": "0"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Gruppe wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "11",
|
|||
|
"name": "Support (inaktiv)",
|
|||
|
"art": "gruppe",
|
|||
|
"kennziffer": "SUPPORT",
|
|||
|
"internebemerkung": "",
|
|||
|
"projekt": "0",
|
|||
|
"kategorie": "0",
|
|||
|
"aktiv": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/laender:
|
|||
|
description: Länder anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Länderliste abrufen
|
|||
|
description: |
|
|||
|
Länderliste abrufen
|
|||
|
|
|||
|
Permission: `list_countries`
|
|||
|
queryParameters:
|
|||
|
eu:
|
|||
|
description: Länder innerhalb/außerhalb EU filtern (1 = EU / 0 = Nicht EU)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
iso:
|
|||
|
description: Länder mit ISO-Code filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_de:
|
|||
|
description: Länder mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_en:
|
|||
|
description: Länder mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
id_ext:
|
|||
|
description: Land mit externer ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=iso,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `bezeichnung_de`, `bezeichnung_en`, `iso` , `eu`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Land anlegen
|
|||
|
description: |
|
|||
|
Land anlegen
|
|||
|
|
|||
|
Permission: `create_countries`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung_de:
|
|||
|
description: Deutsche Bezeichnung des Landes
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
bezeichnung_en:
|
|||
|
description: Englische Bezeichnung des Landes
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
iso:
|
|||
|
description: ISO-Code (ISO-3166 ALPHA 2)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
eu:
|
|||
|
description: EU (1 = EU / 0 = Nicht EU)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung_de": "Republik Togo",
|
|||
|
"bezeichnung_en": "République Togolaise",
|
|||
|
"iso": "TG",
|
|||
|
"eu": 0
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegtes Land wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "246",
|
|||
|
"iso": "TG",
|
|||
|
"bezeichnung_de": "Republik Togo",
|
|||
|
"bezeichnung_en": "République Togolaise",
|
|||
|
"eu": "0",
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnes Land abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Land-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnes Land abrufen
|
|||
|
description: |
|
|||
|
Einzelnes Land abrufen
|
|||
|
|
|||
|
Permission: `view_country`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "43",
|
|||
|
"iso": "DE",
|
|||
|
"bezeichnung_de": "Deutschland",
|
|||
|
"bezeichnung_en": "Germany",
|
|||
|
"eu": "1",
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Land wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Land bearbeiten
|
|||
|
description: |
|
|||
|
Land bearbeiten
|
|||
|
|
|||
|
Permission: `edit_country`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung_de": "Togo",
|
|||
|
"bezeichnung_en": "Republique Togolaise",
|
|||
|
"iso": "TX",
|
|||
|
"eu": 0
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisiertes Land wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "246",
|
|||
|
"iso": "TX",
|
|||
|
"bezeichnung_de": "Togo",
|
|||
|
"bezeichnung_en": "Republique Togolaise",
|
|||
|
"eu": "0",
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/lagercharge:
|
|||
|
description: Lagercharge abrufen
|
|||
|
get:
|
|||
|
displayName: Lagercharge abrufen
|
|||
|
description: |
|
|||
|
Lagercharge abrufen
|
|||
|
|
|||
|
Permission: `view_storage_batch`
|
|||
|
queryParameters:
|
|||
|
artikelnummer:
|
|||
|
description: Suche nach bestimmter Artikelnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikelnummer_equals:
|
|||
|
description: Suche nach bestimmter Artikelnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikelnummer_startswith:
|
|||
|
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikelnummer_endswith:
|
|||
|
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikel:
|
|||
|
description: Suche nach bestimmter Artikel-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung_equals:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung_startswith:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung_endswith:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatz:
|
|||
|
description: Suche nach bestimmter Lagerplatz-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
charge:
|
|||
|
description: Suche nach bestimmter Charge (ungefähre Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
charge_equals:
|
|||
|
description: Suche nach bestimmter Charge (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
charge_startswith:
|
|||
|
description: Suche nach bestimmter Charge (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
charge_endswith:
|
|||
|
description: Suche nach bestimmter Charge (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Datum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Datum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Datum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Datum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Datum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=artikelnummer,-menge`)
|
|||
|
|
|||
|
Verfügbare Felder: `lagerplatzbezeichnung`, `artikelnummer`, `charge`, `datum` , `menge`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=artikel`)
|
|||
|
|
|||
|
Verfügbare Includes: `artikel`, `lagerplatz`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: |
|
|||
|
Request erfolgreich
|
|||
|
|
|||
|
Die Menge wird gruppiert über drei Felder: `artikel`, `lagerplatz` und `charge`.
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"artikel": 1,
|
|||
|
"artikelnummer": "700001",
|
|||
|
"lagerplatz": 1,
|
|||
|
"lagerplatzbezeichnung": "HL001A",
|
|||
|
"charge": "111111",
|
|||
|
"datum": "2018-12-21",
|
|||
|
"menge": "200.0000",
|
|||
|
"internebemerkung": ""
|
|||
|
},
|
|||
|
{
|
|||
|
"artikel": 1,
|
|||
|
"artikelnummer": "700001",
|
|||
|
"lagerplatz": 2,
|
|||
|
"lagerplatzbezeichnung": "HL001B",
|
|||
|
"charge": "222222",
|
|||
|
"datum": "2018-12-21",
|
|||
|
"menge": "300.0000",
|
|||
|
"internebemerkung": ""
|
|||
|
}
|
|||
|
],
|
|||
|
"pagination": {
|
|||
|
"items_per_page": 20,
|
|||
|
"items_current": 2,
|
|||
|
"items_total": 2,
|
|||
|
"page_current": 1,
|
|||
|
"page_last": 1
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/lagermhd:
|
|||
|
description: Lager-Mindesthaltbarkeitdatum abrufen
|
|||
|
get:
|
|||
|
displayName: Lager-Mindesthaltbarkeitdatum abrufen
|
|||
|
description: |
|
|||
|
Lager-Mindesthaltbarkeitdatum abrufen
|
|||
|
|
|||
|
Permission: `view_storage_best_before`
|
|||
|
queryParameters:
|
|||
|
artikelnummer:
|
|||
|
description: Suche nach bestimmter Artikelnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikelnummer_equals:
|
|||
|
description: Suche nach bestimmter Artikelnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikelnummer_startswith:
|
|||
|
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikelnummer_endswith:
|
|||
|
description: Suche nach bestimmter Artikelnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
artikel:
|
|||
|
description: Suche nach bestimmter Artikel-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung_equals:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung_startswith:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatzbezeichnung_endswith:
|
|||
|
description: Suche nach bestimmter Lagerplatzbezeichnung (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lagerplatz:
|
|||
|
description: Suche nach bestimmter Lagerplatz-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
charge:
|
|||
|
description: Suche nach bestimmter Charge (ungefähre Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
charge_equals:
|
|||
|
description: Suche nach bestimmter Charge (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
charge_startswith:
|
|||
|
description: Suche nach bestimmter Charge (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
charge_endswith:
|
|||
|
description: Suche nach bestimmter Charge (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mhddatum:
|
|||
|
description: Suche nach bestimmtem MHD-Datum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mhddatum_gt:
|
|||
|
description: Suche nach bestimmtem MHD-Datum (MHD-Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mhddatum_gte:
|
|||
|
description: Suche nach bestimmtem MHD-Datum (MHD-Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mhddatum_lt:
|
|||
|
description: Suche nach bestimmtem MHD-Datum (MHD-Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
mhddatum_lte:
|
|||
|
description: Suche nach bestimmtem MHD-Datum (MHD-Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum:
|
|||
|
description: Suche nach bestimmtem Datum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gt:
|
|||
|
description: Suche nach bestimmtem Datum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_gte:
|
|||
|
description: Suche nach bestimmtem Datum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lt:
|
|||
|
description: Suche nach bestimmtem Datum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
datum_lte:
|
|||
|
description: Suche nach bestimmtem Datum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=artikelnummer,-menge`)
|
|||
|
|
|||
|
Verfügbare Felder: `lagerplatzbezeichnung`, `artikelnummer`, `charge`, `mhddatum`, `datum` , `menge`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=artikel`)
|
|||
|
|
|||
|
Verfügbare Includes: `artikel`, `lagerplatz`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: |
|
|||
|
Request erfolgreich
|
|||
|
|
|||
|
Die Menge wird gruppiert über vier Felder: `artikel`, `lagerplatz`, `charge` und `mhddatum`.
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"artikel": 1,
|
|||
|
"artikelnummer": "700001",
|
|||
|
"lagerplatz": 1,
|
|||
|
"lagerplatzbezeichnung": "HL001A",
|
|||
|
"charge": "444444",
|
|||
|
"mhddatum": "2019-12-24",
|
|||
|
"datum": "2018-12-21",
|
|||
|
"menge": "300.0000",
|
|||
|
"internebemerkung": "Charge und / oder MHD angelegt"
|
|||
|
},
|
|||
|
{
|
|||
|
"artikel": 1,
|
|||
|
"artikelnummer": "700001",
|
|||
|
"lagerplatz": 4,
|
|||
|
"lagerplatzbezeichnung": "HL002",
|
|||
|
"charge": "555555",
|
|||
|
"mhddatum": "2019-12-23",
|
|||
|
"datum": "2018-12-21",
|
|||
|
"menge": "289.0000",
|
|||
|
"internebemerkung": "Produktion 400003 Einlagern"
|
|||
|
}
|
|||
|
],
|
|||
|
"pagination": {
|
|||
|
"items_per_page": 20,
|
|||
|
"items_current": 2,
|
|||
|
"items_total": 2,
|
|||
|
"page_current": 1,
|
|||
|
"page_last": 1
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/lieferadressen:
|
|||
|
description: Lieferadressen anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Lieferadressen abrufen
|
|||
|
description: |
|
|||
|
Lieferadressen abrufen
|
|||
|
|
|||
|
Permission: `list_delivery_addresses`
|
|||
|
queryParameters:
|
|||
|
adresse:
|
|||
|
description: Suche nach allen Lieferadressen einer bestimmten Hauptadresse
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
standardlieferadresse:
|
|||
|
description: Ist Standard-Lieferadresse? (0 = Keine Standard-Lieferadresse / 1 = Ist Standard-Lieferadresse)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
typ:
|
|||
|
description: |
|
|||
|
Nach bestimmten Adresstyp filtern (genaue Übereinstimmung)
|
|||
|
|
|||
|
Mögliche Werte: Siehe Adresstyp-Endpunkt: [GET /adresstyp](#adresstyp).
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name:
|
|||
|
description: Suche nach Name (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_equals:
|
|||
|
description: Suche nach Name (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_startswith:
|
|||
|
description: Suche nach Name (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
name_endswith:
|
|||
|
description: Suche nach Name (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
land:
|
|||
|
description: Suche nach Lieferadressen aus einem bestimmten Land (zweistelliger ISO-Code)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
id_ext:
|
|||
|
description: Lieferadresse mit externer ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=plz,-land`)
|
|||
|
|
|||
|
Verfügbare Felder: `typ`, `name`, `plz`, `land`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Lieferadresse anlegen
|
|||
|
description: |
|
|||
|
Lieferadresse anlegen
|
|||
|
|
|||
|
Permission: `create_delivery_address`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
name:
|
|||
|
description: Name der Firma bzw. Person
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
adresse:
|
|||
|
description: ID der Hauptadresse; Die angelegte Lieferadresse wird dieser Hauptadresse zugeordnet.
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
typ:
|
|||
|
description: Adresstyp; Siehe [Adresstyp-Endpunkt](#adresstyp) Feld `type`.
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
abteilung:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
strasse:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
ort:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
plz:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
telefon:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
telefax:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
email:
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
land:
|
|||
|
description: ISO-Code (ISO-3166 ALPHA 2)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
standardlieferadresse:
|
|||
|
description: |
|
|||
|
Als Standard-Lieferadresse markieren?
|
|||
|
|
|||
|
(`0` = Keine Standard-Lieferadresse / `1` = Ist Standard-Lieferadresse)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
ust_befreit:
|
|||
|
description: |
|
|||
|
Besteuerung
|
|||
|
|
|||
|
(`0` = Inland / `1` = EU-Lieferung / `2` = Export / `3` = Steuerfrei Inland)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"adresse": 5,
|
|||
|
"typ": "herr",
|
|||
|
"name": "Max Mustermann",
|
|||
|
"abteilung": "Musterabteilung",
|
|||
|
"strasse": "Musterweg",
|
|||
|
"ort": "Musterort",
|
|||
|
"plz": "12345",
|
|||
|
"land": "DE",
|
|||
|
"telefon": "0123-456789-9",
|
|||
|
"telefax": "0123-456789-0",
|
|||
|
"email": "max@mustermann.de",
|
|||
|
"standardlieferadresse": 1,
|
|||
|
"ust_befreit": 0
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Lieferadresse wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 23,
|
|||
|
"typ": "herr",
|
|||
|
"name": "Max Mustermann",
|
|||
|
"abteilung": "Musterabteilung",
|
|||
|
"...": "Ausgabe gekürzt",
|
|||
|
"standardlieferadresse": 1,
|
|||
|
"ust_befreit": 0,
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Lieferadresse abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Lieferadressen-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Lieferadresse abrufen
|
|||
|
description: |
|
|||
|
Einzelne Lieferadresse abrufen
|
|||
|
|
|||
|
Permission: `view_delivery_address`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"typ": "herr",
|
|||
|
"name": "Max Mustermann",
|
|||
|
"abteilung": "Musterabteilung",
|
|||
|
"...": "Ausgabe gekürzt",
|
|||
|
"standardlieferadresse": 1,
|
|||
|
"ust_befreit": 0,
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Lieferadresse wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Lieferadresse bearbeiten
|
|||
|
description: |
|
|||
|
Lieferadresse bearbeiten
|
|||
|
|
|||
|
Permission: `edit_delivery_address`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"typ": "firma",
|
|||
|
"name": "Mustermann Gmbh"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Lieferadresse wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 1,
|
|||
|
"typ": "firma",
|
|||
|
"name": "Mustermann Gmbh",
|
|||
|
"abteilung": "Musterabteilung",
|
|||
|
"...": "Ausgabe gekürzt",
|
|||
|
"standardlieferadresse": 1,
|
|||
|
"ust_befreit": 0,
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
delete:
|
|||
|
displayName: Lieferadresse löschen
|
|||
|
description: |
|
|||
|
Lieferadresse löschen
|
|||
|
|
|||
|
Permission: `delete_delivery_address`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; ID der gelöschten Lieferadresse wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 1
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/v1/reports:
|
|||
|
displayName: /v1/reports
|
|||
|
description: Berichte (neues Modul) abrufen
|
|||
|
|
|||
|
/{id}/download:
|
|||
|
description: |
|
|||
|
Einzelnen Bericht per ID herunterladen
|
|||
|
|
|||
|
Permission: `view_report`
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Bericht-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Bericht herunterladen
|
|||
|
description: Einzelnen Bericht herunterladen
|
|||
|
queryParameters:
|
|||
|
parameter:
|
|||
|
description: Jeder Parameter, der in der Abfrage des Berichts vorkommt.
|
|||
|
type: any
|
|||
|
required: false
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: |
|
|||
|
Request erfolgreich
|
|||
|
|
|||
|
Der Content-Type ist abhängig vom Mime-Type des Formats, das im Bericht hinterlegt ist.
|
|||
|
403:
|
|||
|
description: Der Bericht ist nicht für den Zugriff über diesen API Account freigegeben.
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"http_code": 403,
|
|||
|
"message": "Access denied"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Bericht wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
500:
|
|||
|
description: Der Bericht konnte nicht erstellt werden. Der Bericht ist eventuell fehlerhaft.
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7499,
|
|||
|
"http_code": 500,
|
|||
|
"message": "Unknown server error",
|
|||
|
"href": "http://localhost/xentral/20.1/www/api/docs.html#error-7499"
|
|||
|
}
|
|||
|
}
|
|||
|
/v1/steuersaetze:
|
|||
|
description: Steuersätze anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Steuersätze abrufen
|
|||
|
description: |
|
|||
|
Steuersätze abrufen
|
|||
|
|
|||
|
Permission: `list_tax_rates`
|
|||
|
queryParameters:
|
|||
|
bezeichnung:
|
|||
|
description: Steuersatz mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
satz:
|
|||
|
description: Nach Steuersatz filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
aktiv:
|
|||
|
description: Aktive/Inaktive Steuersätze filtern (1 = aktiv / 0 = inaktiv)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=satz,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `satz`, `aktiv`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Steuersatz anlegen
|
|||
|
description: |
|
|||
|
Steuersatz anlegen
|
|||
|
|
|||
|
Permission: `create_tax_rate`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Bezeichnung des Steuersatzes
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
satz:
|
|||
|
description: Steuersatz in Prozent (ohne Prozentzeichen; Dezimaltrenner = Punkt)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
aktiv:
|
|||
|
description: Aktiv (1 = aktiv / 0 = inaktiv)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Steuer DE ermäßigt",
|
|||
|
"satz": "7.00",
|
|||
|
"aktiv": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegter Steuersatz wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "14",
|
|||
|
"bezeichnung": "Steuer DE ermäßigt",
|
|||
|
"satz": "7.00",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelnen Steuersatz abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Steuersatz-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Steuersatz abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Steuersatz abrufen
|
|||
|
|
|||
|
Permission: `view_tax_rate`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "1",
|
|||
|
"bezeichnung": "Steuersatz DE normal",
|
|||
|
"country_code": "DE",
|
|||
|
"satz": "19.00",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Steuersatz wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Steuersatz bearbeiten
|
|||
|
description: |
|
|||
|
Steuersatz bearbeiten
|
|||
|
|
|||
|
Permission: `edit_tax_rates`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Bezeichnung des Steuersatzes
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
country_code:
|
|||
|
description: Ländercode des Steuersatzes
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
satz:
|
|||
|
description: Steuersatz in Prozent (ohne Prozentzeichen; Dezimaltrenner = Punkt)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
aktiv:
|
|||
|
description: Aktiv (1 = aktiv / 0 = inaktiv)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bezeichnung": "Steuer DE normal",
|
|||
|
"satz": "19.00"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierter Steuersatz wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "1",
|
|||
|
"bezeichnung": "Steuer DE normal",
|
|||
|
"country_code": "DE",
|
|||
|
"satz": "19.00",
|
|||
|
"aktiv": "1"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/trackingnummern:
|
|||
|
get:
|
|||
|
displayName: Trackingnummern abrufen
|
|||
|
description: |
|
|||
|
Endpunkt zum Abrufen von Trackingnummern
|
|||
|
|
|||
|
Permission: `list_tracking_numbers`
|
|||
|
queryParameters:
|
|||
|
tracking:
|
|||
|
description: Suche nach bestimmter Trackingnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
tracking_equals:
|
|||
|
description: Suche nach bestimmter Trackingnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
tracking_startswith:
|
|||
|
description: Suche nach bestimmter Trackingnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
tracking_endswith:
|
|||
|
description: Suche nach bestimmter Trackingnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferschein:
|
|||
|
description: Suche nach bestimmter Lieferscheinnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferschein_equals:
|
|||
|
description: Suche nach bestimmter Lieferscheinnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferschein_startswith:
|
|||
|
description: Suche nach bestimmter Lieferscheinnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
lieferschein_endswith:
|
|||
|
description: Suche nach bestimmter Lieferscheinnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftrag:
|
|||
|
description: Suche nach bestimmter Auftragsnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftrag_equals:
|
|||
|
description: Suche nach bestimmter Auftragsnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftrag_startswith:
|
|||
|
description: Suche nach bestimmter Auftragsnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
auftrag_endswith:
|
|||
|
description: Suche nach bestimmter Auftragsnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet:
|
|||
|
description: Suche nach bestimmter Internetnummer (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet_equals:
|
|||
|
description: Suche nach bestimmter Internetnummer (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet_startswith:
|
|||
|
description: Suche nach bestimmter Internetnummer (Übereinstimmung am Anfang)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
internet_endswith:
|
|||
|
description: Suche nach bestimmter Internetnummer (Übereinstimmung am Ende)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
versandart:
|
|||
|
description: Suche nach bestimmter Versandart (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
versendet_am:
|
|||
|
description: Suche nach bestimmtem Versanddatum (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
versendet_am_gt:
|
|||
|
description: Suche nach bestimmtem Versanddatum (Datum größer Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
versendet_am_gte:
|
|||
|
description: Suche nach bestimmtem Versanddatum (Datum größer gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
versendet_am_lt:
|
|||
|
description: Suche nach bestimmtem Versanddatum (Datum kleiner Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
versendet_am_lte:
|
|||
|
description: Suche nach bestimmtem Versanddatum (Datum kleiner gleich Suchwert)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
adresse:
|
|||
|
description: Suche nach bestimmter Adress-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Suche nach bestimmter Projekt-ID (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
land:
|
|||
|
description: Suche nach bestimmtem Ländercode (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=-versendet_am,lieferschein`)
|
|||
|
|
|||
|
Verfügbare Felder: `tracking`, `auftrag`, `lieferschein`, `versandart`, `versendet_am` , `abgeschlossen`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Trackingnummer anlegen
|
|||
|
description: |
|
|||
|
Trackingnummer anlegen
|
|||
|
|
|||
|
Eines der Felder `internet`, `auftrag` oder `lieferschein` muss mindestens gefüllt sein!
|
|||
|
|
|||
|
Permission: `create_tracking_number`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
tracking:
|
|||
|
description: Trackingnummer
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
internet:
|
|||
|
description: Internetnummer aus Auftrag (Pflichtfeld, wenn Auftragsnummer und Lieferscheinnummer leer)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
auftrag:
|
|||
|
description: Auftragsnummer (Pflichtfeld, wenn Internetnummer und Lieferscheinnummer leer)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
lieferschein:
|
|||
|
description: Lieferscheinnummer (Pflichtfeld, wenn Auftragsnummer und Internetnummer leer)
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
anzahlpakete:
|
|||
|
description: Anzahl Pakete
|
|||
|
required: true
|
|||
|
type: integer
|
|||
|
gewicht:
|
|||
|
description: Gewicht
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
versendet_am:
|
|||
|
description: Versanddatum im Format `YYYY-MM-DD`
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
example: |
|
|||
|
{
|
|||
|
"tracking": "11223344556677889900",
|
|||
|
"internet": "111001",
|
|||
|
"auftrag": "200001",
|
|||
|
"lieferschein": "300001",
|
|||
|
"anzahlpakete": 1,
|
|||
|
"gewicht": "2 kg",
|
|||
|
"versendet_am": "2019-07-25"
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Trackingnummer wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 8,
|
|||
|
"tracking": "11223344556677889900",
|
|||
|
"adresse": 5,
|
|||
|
"internet": "111001",
|
|||
|
"auftrag": "200001",
|
|||
|
"lieferschein": "300001",
|
|||
|
"projekt": 1,
|
|||
|
"versandart": "versandunternehmen",
|
|||
|
"land": "DE",
|
|||
|
"gewicht": "2 kg",
|
|||
|
"abgeschlossen": 0,
|
|||
|
"versendet_am": "2019-07-25",
|
|||
|
"anzahlpakete": 1,
|
|||
|
"retoure": 0,
|
|||
|
"klaergrund": ""
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Trackingnummer abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Trackingnummer-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Trackingnummer abrufen
|
|||
|
description: |
|
|||
|
Einzelne Trackingnummer abrufen
|
|||
|
|
|||
|
Permission: `view_tracking_number`
|
|||
|
put:
|
|||
|
displayName: Trackingnummer bearbeiten
|
|||
|
description: |
|
|||
|
Trackingnummer bearbeiten (Felder siehe "Trackingnummer anlegen")
|
|||
|
|
|||
|
Permission: `edit_tracking_number`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"tracking": "11223344556677889900",
|
|||
|
"versendet_am": "2019-06-22",
|
|||
|
"anzahlpakete": 2
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierter Trackingnummern-Eintrag wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 8,
|
|||
|
"tracking": "11223344556677889900",
|
|||
|
"adresse": 5,
|
|||
|
"internet": "111001",
|
|||
|
"auftrag": "200001",
|
|||
|
"lieferschein": "300001",
|
|||
|
"projekt": 1,
|
|||
|
"versandart": "versandunternehmen",
|
|||
|
"land": "DE",
|
|||
|
"gewicht": "2 kg",
|
|||
|
"abgeschlossen": 0,
|
|||
|
"versendet_am": "2019-06-22",
|
|||
|
"anzahlpakete": 2,
|
|||
|
"retoure": 0,
|
|||
|
"klaergrund": ""
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/versandarten:
|
|||
|
description: Versandarten anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Versandarten abrufen
|
|||
|
description: |
|
|||
|
Versandarten abrufen
|
|||
|
|
|||
|
Permission: `list_shipping_methods`
|
|||
|
queryParameters:
|
|||
|
bezeichnung:
|
|||
|
description: Versandart mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_exakt:
|
|||
|
description: Versandart mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
type:
|
|||
|
description: Versandart eines bestimmten Typs suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
type_exakt:
|
|||
|
description: Versandart eines bestimmten Typs suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Versandarten eines Projekts filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
modul:
|
|||
|
description: Versandarten mit bestimmtem Modul filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
aktiv:
|
|||
|
description: Aktive/Inaktive Versandarten filtern (1 = aktiv / 0 = inaktiv)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=type,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `type`, `projekt`, `modul`, `aktiv`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Versandart anlegen
|
|||
|
description: |
|
|||
|
Versandart anlegen
|
|||
|
|
|||
|
Permission: `create_shipping_method`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Bezeichnung der Versandart
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
type:
|
|||
|
description: Versandart-Typ (einmaliger Wert)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
projekt:
|
|||
|
description: Projekt
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
aktiv:
|
|||
|
description: Aktiv (1 = aktiv / 0 = inaktiv)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"type": "DHL",
|
|||
|
"bezeichnung": "DHL",
|
|||
|
"aktiv": 1,
|
|||
|
"projekt": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Versandart wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "15",
|
|||
|
"type": "DHL",
|
|||
|
"bezeichnung": "DHL",
|
|||
|
"aktiv": "1",
|
|||
|
"projekt": "1",
|
|||
|
"modul": "",
|
|||
|
"paketmarke_drucker": "0",
|
|||
|
"export_drucker": "0",
|
|||
|
"ausprojekt": "1",
|
|||
|
"versandmail": "0",
|
|||
|
"geschaeftsbrief_vorlage": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Versandart abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Versandarten-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Versandart abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Versandart abrufen
|
|||
|
|
|||
|
Permission: `view_shipping_method`
|
|||
|
queryParameters:
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "15",
|
|||
|
"type": "DHL",
|
|||
|
"bezeichnung": "DHL",
|
|||
|
"aktiv": "1",
|
|||
|
"projekt": "1",
|
|||
|
"modul": "",
|
|||
|
"paketmarke_drucker": "0",
|
|||
|
"export_drucker": "0",
|
|||
|
"ausprojekt": "1",
|
|||
|
"versandmail": "0",
|
|||
|
"geschaeftsbrief_vorlage": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Versandart wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Versandart bearbeiten
|
|||
|
description: |
|
|||
|
Versandart bearbeiten
|
|||
|
|
|||
|
Permission: `edit_shipping_method`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"type": "DHL_Paket",
|
|||
|
"bezeichnung": "DHL Paket",
|
|||
|
"aktiv": "1",
|
|||
|
"projekt": "1"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Versandart wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "15",
|
|||
|
"type": "DHL_Paket",
|
|||
|
"bezeichnung": "DHL Paket",
|
|||
|
"aktiv": "1",
|
|||
|
"projekt": "1",
|
|||
|
"modul": "",
|
|||
|
"paketmarke_drucker": "0",
|
|||
|
"export_drucker": "0",
|
|||
|
"ausprojekt": "1",
|
|||
|
"versandmail": "0",
|
|||
|
"geschaeftsbrief_vorlage": "0"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/wiedervorlagen:
|
|||
|
description: Wiedervorlagen anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Wiedervorlagen abrufen
|
|||
|
description: |
|
|||
|
Wiedervorlagen abrufen
|
|||
|
|
|||
|
Permission: `list_resubmissions`
|
|||
|
queryParameters:
|
|||
|
adresse:
|
|||
|
description: Wiedervorlagen mit bestimmter Address-ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
adresse_mitarbeiter:
|
|||
|
description: Wiedervorlagen filtern die einem bestimmten Mitarbeiter (Address-ID) zugewiesen sind (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bearbeiter:
|
|||
|
description: Wiedervorlagen filtern die einem bestimmten Bearbeiter (Address-ID) zugewiesen sind (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Wiedervorlagen mit bestimmter Projekt-ID filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
stages:
|
|||
|
description: Wiedervorlagen mit bestimmter Stage-ID filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
id_ext:
|
|||
|
description: Wiedervorlage mit externer ID filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=iso,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `datum_angelegt`, `zeit_angelegt`, `datum_erinnerung` , `zeit_erinnerung`,
|
|||
|
`stages`, `prio`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Wiedervorlage anlegen
|
|||
|
description: |
|
|||
|
Wiedervorlage anlegen
|
|||
|
|
|||
|
Permission: `create_resubmission`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
datum_erinnerung:
|
|||
|
description: Fälligkeits-Datum der Wiedervorlage (Format `2019-12-31`)
|
|||
|
required: true
|
|||
|
type: date-only
|
|||
|
zeit_erinnerung:
|
|||
|
description: Fälligkeits-Uhrzeit der Wiedervorlage (Format `23:59:59`)
|
|||
|
required: true
|
|||
|
type: time-only
|
|||
|
datum_angelegt:
|
|||
|
description: Anlage-Datum der Wiedervorlage (Format `2019-12-31`)
|
|||
|
required: false
|
|||
|
type: date-only
|
|||
|
zeit_angelegt:
|
|||
|
description: Anlage-Uhrzeit der Wiedervorlage (Format `23:59:59`)
|
|||
|
required: false
|
|||
|
type: time-only
|
|||
|
bezeichnung:
|
|||
|
description: Kurzbeschreibung
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
beschreibung:
|
|||
|
description: Langbeschreibung
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
bearbeiter:
|
|||
|
description: Address-ID des Bearbeiters
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
adresse_mitarbeiter:
|
|||
|
description: Address-ID des zuständigen Mitarbeiters
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
datum_abschluss:
|
|||
|
description: Abschlussdatum der Wiedervorlage (Format `2019-12-31`)
|
|||
|
required: false
|
|||
|
type: date-only
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bearbeiter": 4,
|
|||
|
"bezeichnung": "Blumengießen",
|
|||
|
"beschreibung": "Alle Blumen im Büro gießen",
|
|||
|
"datum_erinnerung": "2019-12-31",
|
|||
|
"zeit_erinnerung": "23:59:59",
|
|||
|
"datum_abschluss": "2020-01-06",
|
|||
|
"adresse_mitarbeiter": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Wiedervorlage wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": 49,
|
|||
|
"adresse": 0,
|
|||
|
"projekt": 0,
|
|||
|
"bezeichnung": "Blumengießen",
|
|||
|
"beschreibung": "Alle Blumen im Büro gießen",
|
|||
|
"bearbeiter": 4,
|
|||
|
"adresse_mitarbeiter": 1,
|
|||
|
"datum_erinnerung": "2019-12-31",
|
|||
|
"zeit_erinnerung": "23:59:59",
|
|||
|
"datum_abschluss": "2020-01-06",
|
|||
|
"oeffentlich": 0,
|
|||
|
"abgeschlossen": 0,
|
|||
|
"prio": 0,
|
|||
|
"stages": 0,
|
|||
|
"color": "",
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Wiedervorlage abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Wiedervorlage-ID
|
|||
|
get:
|
|||
|
displayName: Einzelne Wiedervorlage abrufen
|
|||
|
description: |
|
|||
|
Einzelne Wiedervorlage abrufen
|
|||
|
|
|||
|
Permission: `view_resubmission`
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 49,
|
|||
|
"adresse": 1,
|
|||
|
"projekt": 1,
|
|||
|
"bezeichnung": "Blumengießen",
|
|||
|
"beschreibung": "Alle Blumen im Büro gießen",
|
|||
|
"ergebnis": "",
|
|||
|
"betrag": "5.00",
|
|||
|
"erinnerung_per_mail": 0,
|
|||
|
"bearbeiter": 4,
|
|||
|
"adresse_mitarbeiter": 1,
|
|||
|
"datum_angelegt": null,
|
|||
|
"zeit_angelegt": null,
|
|||
|
"datum_erinnerung": "2019-12-31",
|
|||
|
"zeit_erinnerung": "23:59:00",
|
|||
|
"datum_abschluss": "2020-01-06",
|
|||
|
"oeffentlich": 0,
|
|||
|
"abgeschlossen": 1,
|
|||
|
"chance": 100,
|
|||
|
"prio": 0,
|
|||
|
"stages": 2,
|
|||
|
"color": "",
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Wiedervorlage wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Wiedervorlage bearbeiten
|
|||
|
description: |
|
|||
|
Wiedervorlage bearbeiten
|
|||
|
|
|||
|
Permission: `edit_resubmission`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"bearbeiter": 1,
|
|||
|
"bezeichnung": "Blumengießen",
|
|||
|
"datum_erinnerung": "2019-12-31",
|
|||
|
"zeit_erinnerung": "23:59:59"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Wiedervorlage wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": 49,
|
|||
|
"adresse": 1,
|
|||
|
"projekt": 1,
|
|||
|
"bezeichnung": "Blumengießen",
|
|||
|
"beschreibung": "Alle Blumen im Büro gießen",
|
|||
|
"ergebnis": "",
|
|||
|
"betrag": "5.00",
|
|||
|
"erinnerung_per_mail": 0,
|
|||
|
"bearbeiter": 1,
|
|||
|
"adresse_mitarbeiter": 1,
|
|||
|
"datum_angelegt": null,
|
|||
|
"zeit_angelegt": null,
|
|||
|
"datum_erinnerung": "2019-12-31",
|
|||
|
"zeit_erinnerung": "23:59:00",
|
|||
|
"datum_abschluss": "2020-01-06",
|
|||
|
"oeffentlich": 0,
|
|||
|
"abgeschlossen": 1,
|
|||
|
"chance": 100,
|
|||
|
"prio": 0,
|
|||
|
"stages": 2,
|
|||
|
"color": "",
|
|||
|
"id_ext": null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/v1/zahlungsweisen:
|
|||
|
description: Zahlungsweisen anlegen, bearbeiten und abrufen
|
|||
|
get:
|
|||
|
displayName: Zahlungsweisen abrufen
|
|||
|
description: |
|
|||
|
Zahlungsweisen abrufen
|
|||
|
|
|||
|
Permission: `list_payment_methods`
|
|||
|
queryParameters:
|
|||
|
bezeichnung:
|
|||
|
description: Zahlungsweise mit bestimmter Bezeichnung suchen (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
bezeichnung_exakt:
|
|||
|
description: Zahlungsweise mit bestimmter Bezeichnung suchen (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
type:
|
|||
|
description: Nach bestimmten Typ filtern (ungefähre Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
type_exakt:
|
|||
|
description: Nach bestimmten Typ filtern (genaue Übereinstimmung)
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
projekt:
|
|||
|
description: Zahlungsweise eines Projekts filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
modul:
|
|||
|
description: Nach bestimmtem Modul filtern (genaue Übereinstimmung)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
aktiv:
|
|||
|
description: Aktive/Inaktive Zahlungsweise filtern (1 = aktiv / 0 = inaktiv)
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
sort:
|
|||
|
description: |
|
|||
|
Sortierung (Beispiel: `sort=type,-bezeichnung`)
|
|||
|
|
|||
|
Verfügbare Felder: `bezeichnung`, `type`, `projekt`, `modul`, `aktiv`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
page:
|
|||
|
description: Seitenzahl
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 1
|
|||
|
maximum: 1000
|
|||
|
items:
|
|||
|
description: Anzahl der Ergebnisse pro Seite
|
|||
|
type: integer
|
|||
|
required: false
|
|||
|
default: 20
|
|||
|
maximum: 1000
|
|||
|
post:
|
|||
|
displayName: Zahlungsweisen anlegen
|
|||
|
description: |
|
|||
|
Zahlungsweisen anlegen
|
|||
|
|
|||
|
Permission: `create_payment_method`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
properties:
|
|||
|
bezeichnung:
|
|||
|
description: Bezeichnung der Zahlungsweise
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
type:
|
|||
|
description: Zahlungsweise-Typ (einmaliger Wert)
|
|||
|
required: true
|
|||
|
type: string
|
|||
|
verhalten:
|
|||
|
description: Verhalten; Zulässige Werte sind `vorkasse`, `rechnung`, `lastschrift`
|
|||
|
required: false
|
|||
|
type: string
|
|||
|
projekt:
|
|||
|
description: Projekt
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
aktiv:
|
|||
|
description: Aktiv (`1` = aktiv / `0` = inaktiv)
|
|||
|
required: false
|
|||
|
type: integer
|
|||
|
example: |
|
|||
|
{
|
|||
|
"type": "vorkasse",
|
|||
|
"bezeichnung": "Vorkasse",
|
|||
|
"verhalten": "vorkasse",
|
|||
|
"aktiv": 1,
|
|||
|
"projekt": 1
|
|||
|
}
|
|||
|
responses:
|
|||
|
201:
|
|||
|
description: Request erfolgreich; Angelegte Zahlungsweise wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "10",
|
|||
|
"type": "vorkasse",
|
|||
|
"bezeichnung": "Vorkasse",
|
|||
|
"freitext": "",
|
|||
|
"aktiv": "1",
|
|||
|
"automatischbezahlt": "0",
|
|||
|
"automatischbezahltverbindlichkeit": "0",
|
|||
|
"projekt": "1",
|
|||
|
"vorkasse": "0",
|
|||
|
"verhalten": "vorkasse",
|
|||
|
"modul": ""
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/{id}:
|
|||
|
description: Einzelne Zahlungsweise abrufen oder bearbeiten
|
|||
|
uriParameters:
|
|||
|
id:
|
|||
|
type: integer
|
|||
|
description: Zahlungsweisen-ID
|
|||
|
get:
|
|||
|
displayName: Einzelnen Zahlungsweise abrufen
|
|||
|
description: |
|
|||
|
Einzelnen Zahlungsweise abrufen
|
|||
|
|
|||
|
Permission: `view_payment_method`
|
|||
|
queryParameters:
|
|||
|
include:
|
|||
|
description: |
|
|||
|
Unter-Resourcen in Resource einbinden (Beispiel: `include=projekt`)
|
|||
|
|
|||
|
Verfügbare Includes: `projekt`
|
|||
|
type: string
|
|||
|
required: false
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"id": "1",
|
|||
|
"type": "vorkasse",
|
|||
|
"bezeichnung": "Vorkasse",
|
|||
|
"freitext": "",
|
|||
|
"aktiv": "1",
|
|||
|
"automatischbezahlt": "0",
|
|||
|
"automatischbezahltverbindlichkeit": "0",
|
|||
|
"projekt": "0",
|
|||
|
"vorkasse": "0",
|
|||
|
"verhalten": "vorkasse",
|
|||
|
"modul": ""
|
|||
|
}
|
|||
|
}
|
|||
|
404:
|
|||
|
description: Zahlungsweise wurde nicht gefunden
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"error": {
|
|||
|
"code": 7452,
|
|||
|
"http_code": 404,
|
|||
|
"message": "Resource not found",
|
|||
|
"href": "http://www.example.com/api/docs.html#error-7452"
|
|||
|
}
|
|||
|
}
|
|||
|
put:
|
|||
|
displayName: Zahlungsweise bearbeiten
|
|||
|
description: |
|
|||
|
Zahlungsweise bearbeiten
|
|||
|
|
|||
|
Permission: `edit_payment_method`
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"type": "lastschrift",
|
|||
|
"bezeichnung": "Lastschrift",
|
|||
|
"aktiv": "1",
|
|||
|
"projekt": "1",
|
|||
|
"verhalten": "lastschrift"
|
|||
|
}
|
|||
|
responses:
|
|||
|
200:
|
|||
|
description: Request erfolgreich; Aktualisierte Zahlungsweise wird zurückgeliefert
|
|||
|
body:
|
|||
|
application/json:
|
|||
|
example: |
|
|||
|
{
|
|||
|
"success": true,
|
|||
|
"data": {
|
|||
|
"id": "10",
|
|||
|
"type": "lastschrift",
|
|||
|
"bezeichnung": "Lastschrift",
|
|||
|
"freitext": "",
|
|||
|
"aktiv": "1",
|
|||
|
"automatischbezahlt": "0",
|
|||
|
"automatischbezahltverbindlichkeit": "0",
|
|||
|
"projekt": "1",
|
|||
|
"vorkasse": "0",
|
|||
|
"verhalten": "lastschrift",
|
|||
|
"modul": ""
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#types:
|
|||
|
# ZeroValue:
|
|||
|
# description: Zero-value numbers, accepting either 0 or 0.00
|
|||
|
# type: number
|
|||
|
# enum:
|
|||
|
# - 0
|
|||
|
# - 0.00
|
|||
|
# HundredthsValue:
|
|||
|
# description: Non-zero two-decimal place values (positive and negative)
|
|||
|
# type: number
|
|||
|
# multipleOf: 0.01
|
|||
|
# decimal:
|
|||
|
# description: this type describes any monetary value comprised between -9,999,999,999,999.99 and 9,999,999,999,999.99
|
|||
|
# type: ZeroValue | HundredthsValue
|
|||
|
# default: 0.00
|
|||
|
# minimum: -9999999999999.99
|
|||
|
# maximum: 9999999999999.99
|
|||
|
# examples:
|
|||
|
# zero: 0
|
|||
|
# zerozero: 0.00
|
|||
|
# tenten: 10.10
|
|||
|
# negative: -0.10
|