- API v1
- API v2
- Configuration de l'imprimante
- Configuration du Pi
- DataLogic DL-AXIST / MEMOR 1 / MEMOR 10
- DataLogic Heron / Gryphon / QuickScan (Nouveaux appareils)
- Installer EasyFlor sur Android
- Installer EasyFlor sur Chromebook / Chromebox / Chromebit
- Installer EasyFlor sur iPhone
- Installer EasyFlor sur Windows / Mac / Linux
- Opticon OPN2006
- Photomaton : Activer EasyFlor Scan
- Test du scanner
- Zebra EC30
- Zebra TC21 / TC26
- Zebra TC25
API v1
Table des matières
Premiers pas
Données de référence
Articles et produits
Boutique en ligne
Commandes et achats
Facturation - Débit
- Factures
- Facture en PDF
- Créer une facture débit pour un débiteur
- Achats distribués facturés
- Chariots facturés
- Emballages facturés
- Emballages dans les achats facturés
- Lignes personnalisées sur facture
Facturation - Crédit
Paiements
Synchronisation
Prévisions
Journal des modifications
| Version | Description | Date | Auteur |
|---|---|---|---|
| 1.2.10 | Réorganisation de la structure du document pour correspondre à la table des matières, ajout d'en-têtes de section | 2026-01-08 | DDH |
| 1.2.9 | Ajout de la table des matières, correction des numéros de version en double, corrections de descriptions, cohérence linguistique | 2026-01-07 | DDH |
| 1.2.8 | Ajout des endpoints Pronostics | 2026-01-06 | DDH |
| 1.2.7 | Ajout de TransportRegion | 2025-11-17 | DDH |
| 1.2.6 | Ajout de Features à Purchase + Ajout de MarkupCategory | 2023-10-14 | DDH |
| 1.2.5 | Ajout de ListPreOrderGroupItem | 2023-06-02 | JJ |
| 1.2.4 | Ajout de InvoiceSync | 2022-12-09 | JJ |
| 1.2.3 | Ajout de RMAReason au tableau | 2022-11-14 | JJ |
| 1.2.2 | Ajout de PreOrderSync | 2022-06-11 | DDH |
| 1.2.1 | Ajout des remarques débiteur | 2022-04-06 | DDH |
| 1.2.0 | Ajout des endpoints boutique | 2022-03-29 | JJ |
| 1.1.11 | Ajout des raisons RMA à DistributedPurchaseSync | 2022-03-24 | DDH |
| 1.1.10 | Ajout de QuantityPlates/QuantityAttachments au chariot | 2022-03-24 | DDH |
| 1.1.9 | Ajout d'exemples supplémentaires | 2022-03-03 | JJ |
| 1.1.8 | Ajout d'endpoints | 2022-01-20 | JJ |
| 1.1.6 | Ajout des endpoints Location et Administration | 2021-11-20 | JJ |
| 1.1.5 | Ajout des requêtes Sync | 2021-11-03 | JJ |
| 1.1.4 | Documentation facture modifiée | 2021-03-14 | JJ |
| 1.1.3 | Ajout de ManufacturerSupplierId | 2021-03-14 | JJ |
| 1.1.2 | Ajout des endpoints DateFrom/DateTo | 2021-03-08 | DDH |
| 1.1.1 | Ajout de l'autorisation par jeton JWT | 2020-11-11 | JJ |
| 1.1.0 | Entrées obsolètes | 2020-10-21 | DDH |
| 1.0.12 | Ajustements mineurs | 2020-04-30 | DDH |
| 1.0.11 | Ajout d'informations sur Date | 2018-04-05 | DDH |
| 1.0.10 | Ajout de quantity à List | 2017-12-03 | DDH |
| 1.0.9 | Ajout de priceDefault | 2017-08-01 | DDH |
| 1.0.8 | Ajout de debtor PUT/PATCH (niveau principal) | 2017-07-10 | DDH |
| 1.0.7 | Ajout de purchase, invoice, invoice items et payments | 2017-07-07 | CB |
| 1.0.6 | Ajout de OriginalPrice à ListArticleSort | 2017-06-12 | DDH |
| 1.0.5 | Ajout de la requête tableau ListArticleSort | 2017-06-08 | DDH |
| 1.0.4 | Ajout de la documentation articleSort | 2017-03-01 | DDH |
| 1.0.3 | Modifications mineures | 2017-02-08 | DDH |
| 1.0.2 | MaxCancellationTime, Features, FeatureTypes | 2017-01-12 | DDH |
| 1.0.1 | Article id changé de int à string / factures | 2016-10-31 | DDH |
| 1.0.0 | Autorisation, distributed supprimé, codes de statut ajoutés | 2016-10-12 | DDH |
| 0.9.1 | Autorisation, pièces jointes, événements | 2016-09-07 | DDH |
| 0.9 | Version mise à jour | 2016-06-07 | DDH |
| 0.4 | Version initiale pour usage externe | 2015-11-18 | DDH |
Premiers pas
Introduction
Vous pouvez utiliser diverses commandes Get() qui fournissent des fichiers JSON, que vous pouvez ensuite importer dans d'autres bases de données et/ou outils de reporting. Veuillez noter que les commandes Get() pour les collections volumineuses telles que les articles, les lignes de facture et les achats ne peuvent être utilisées qu'en dehors des heures de bureau (avant 5h UTC ou après 18h UTC).
Pour utiliser l'API, vous devez être autorisé pour chaque base de données (d'un client) à laquelle vous vous connectez. Si vous n'êtes pas autorisé, vous recevrez un code HTTP 401 (Non autorisé). Plus de détails dans la section Autorisation API. Une fois votre session terminée, utilisez la commande Unauthorize.
Dans la section « général », vous trouverez des informations utiles pour développer votre application.
Les sections suivantes de ce document sont les commandes API disponibles. Chaque section contient :
- une brève explication du type d'enregistrement qu'elle contient
- par commande put/get/post :
- les paramètres utilisables
- la syntaxe de la commande
- le retour de sortie
- un exemple
Général
JSON
Informations sur les types spécifiques et leur formatage en JSON.
Format DateTime
| Symbole | Description | Exemple |
|---|---|---|
| yyyy | année | 2015 |
| MM | mois | 01 |
| dd | jour | 31 |
| HH | heure | 13 |
| mm | minute | 01 |
| ss | secondes | 22 |
| tttttt | fuseau horaire | +02:00 |
| Z | fuseau horaire UTC | Z |
Date
- **Format 😗*
yyyy-MM-dd - **Exemple 😗*
2015-12-30
DateTime
- **Format 😗*
yyyy-MM-dd\THH:mm:ssttttttt - **Exemple 😗*
2015-12-30T13:40:20+02:00 - **Remarques 😗* Utilisez le fuseau horaire du débiteur
TimeSpan
- **Format 😗*
((-)dd.)HH:mm:ss - **Exemples 😗*
-01.13:50:01(moins un jour, à 13:50:01)01.13:50:01(plus un jour, à 13:50:01)13:50:01(même jour, à 13:50:01)00.13:50:01(identique au précédent)
LanguageValue
Objet contenant toutes les langues disponibles (ISO-639-1).
{
"nl": "Nederlandse benaming",
"de": "Deutsch-Bezeichnung",
"fr": "titre francais"
}
Valeur null
N'envoyez pas de paramètres sans valeur.
**Incorrect 😗*
{
"RequiredParameter": "text",
"OptionalParameter": null
}
**Correct 😗*
{
"RequiredParameter": "text"
}
Encodage
UTF-8
Codes de statut
| Code | Description |
|---|---|
| 200 | OK - Requête réussie |
| 400 | BadRequest - Objet contenant une erreur |
| 401 | Unauthorized - Authentification requise ou échouée |
| 500 | ServerError - Erreur de traitement du message, non récupéré |
**Format de réponse d'erreur 😗*
{
"error": "<erreur>",
"message": "<erreur lisible>"
}
**Erreurs connues 😗*
NoOrInvalidJsonNoOrInvalidRequestArgumentNotFoundDocumentNotFoundApiOpeningHoursException(requête trop volumineuse pour être traitée pendant les heures de bureau). Ne peut être effectuée qu'avant 5h UTC ou après 18h UTC.
Conseils
- L'API est construite de manière asynchrone, vous pouvez donc lancer plusieurs commandes simultanément.
- L'ordre des propriétés disponibles dans l'API n'est pas garanti. Assurez-vous de parser le fichier en fonction du nom de la propriété, pas de sa position. Les parseurs JSON devraient avoir ce comportement par défaut.
- Cette documentation API a été écrite d'un point de vue C#. Si vous n'êtes pas familier avec le C#, vous devriez au moins vous familiariser avec les types de données IEnumerable et Dictionary, qui sont peu courants dans d'autres langages de programmation.
- Toute propriété non requise peut avoir NULL comme valeur.
- Si un IEnumerable est requis, cela signifie que la liste est initialisée (valeur []) mais peut ne contenir aucun enregistrement.
Autorisation / connexion
Autorisation basée sur les cookies
**Commande 😗* api/authorization
Une fois autorisé avec succès, vous recevrez un cookie contenant une session. Veuillez ajouter ce cookie à tout autre appel que vous effectuerez. La session est liée à l'utilisateur. La session expirera lorsqu'un autre appel sera effectué avec le même nom d'utilisateur, en cas de connexion valide.
Lorsque vous recevez un code HTTP 401, veuillez vous réautoriser.
Paramètres Post
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Username | Nom d'utilisateur d'un utilisateur dans la base de données à laquelle vous souhaitez vous connecter | string | oui |
| Password | Mot de passe d'un utilisateur dans la base de données à laquelle vous souhaitez vous connecter | string | oui |
| Database | La base de données à laquelle vous souhaitez vous connecter | string | oui |
Exemple Post
POST https://api.easyflor.eu/api/authorization
{
"Username": "api",
"Password": "wouldntyouliketoknow",
"Database": "EasyFlor-Demo"
}
**Retourne 😗* 200 OK / 401 Unauthorized
Autorisation basée sur le jeton JWT Bearer
**Commande 😗* api/authorizationtoken
Une fois autorisé avec succès, vous recevrez un modèle contenant un Token. Pour utiliser ce Token, ajoutez un en-tête avec le token à tout autre appel. Le Token est lié à l'utilisateur et expirera après la date d'expiration, un nouveau token devra alors être généré.
Lorsque vous recevez un code HTTP 401, veuillez vous réautoriser.
Paramètres Post
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Username | Nom d'utilisateur d'un utilisateur dans la base de données à laquelle vous souhaitez vous connecter | string | oui |
| Password | Mot de passe d'un utilisateur dans la base de données à laquelle vous souhaitez vous connecter | string | oui |
| Database | La base de données à laquelle vous souhaitez vous connecter | string | oui |
Exemple Post
POST https://api.easyflor.eu/api/authorizationtoken
{
"Username": "api",
"Password": "wouldntyouliketoknow",
"Database": "EasyFlor-Demo"
}
**Retourne 😗* 200 OK / 401 Unauthorized
| Nom de propriété | Description | Type de données |
|---|---|---|
| Token | Token utilisé pour l'authentification avec chaque requête | string |
| Expiration | La date d'expiration à partir de laquelle le Token ne sera plus valide | DateTime |
Exemple de requête autorisée
curl --location --request GET 'https://api.easyflor.eu/api/debtor' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer ##TOKEN##'
Déconnexion
**Note 😗* La déconnexion n'est utilisée que pour l'autorisation basée sur les cookies. Lors de l'utilisation de l'autorisation par jeton JWT Bearer, le token expirera de lui-même après un certain temps.
**Commande 😗* api/unauthorization
Déconnexion basée sur les cookies. Lorsqu'elle est envoyée, le cookie qui a démarré la session est invalidé et toute commande ultérieure recevra une exception 401 non autorisé.
**Paramètres Post 😗* Aucun
**Exemple Post 😗*
POST http://api.easyflor.eu/api/unauthorization
**Retourne 😗* Rien
Données de référence
Débiteurs
**Commandes 😗*
api/debtorapi/debtor/idapi/debtorsincedate/id(date étant la date de modification du débiteur)
Une entreprise ou une personne à laquelle des marchandises sont livrées et des factures envoyées.
Exemple Get
GET https://api.easyflor.eu/api/debtor
GET https://api.easyflor.eu/api/debtor/20
Débiteur au format JSON
[{
"Id": 417,
"ParentId": null,
"Name": "test debiteur",
"PaysVAT": true,
"Language": "nl",
"Config": {
"Id": "ShopWhyDebtorConfigs/debtors/417",
"DebtorId": "debtors/417",
"SalesUnits": [],
"DirectPay": false
},
"Addresses": null,
"Numbers": null,
"Contacts": [{
"Initials": "m",
"FirstName": "marco",
"MiddleName": null,
"LastName": "kleine",
"PlaceOfBirth": null,
"DateOfBirth": "1970-12-10T00:00:00Z",
"Function": null,
"Gender": "Man",
"Nationality": "Nederlandse",
"MailAddresses": [{
"Category": "MAIL_1",
"Value": "testje@hotmail.nl"
}],
"Numbers": null,
"Users": [{
"Username": "Testje",
"Password": "+TEkLGxMMyknX6ZcN6BRg8MTlyeWOzphnXXQQUZDm8E=",
"PasswordSalt": "hCJjTLQJchM=",
"CanOrder": true
}]
}],
"MailAddresses": null,
"CurrencyISOCode": "EUR",
"CreatedOn": "DateTime",
"OrderDays": [{
"Id": "orderdays/1",
"Name": "Levering dinsdag",
"Day": 2,
"MaxDefaultOrderTime": "-1.15:30:00",
"Lists": [{
"Id": 73,
"MaxOrderTime": "-1.15:30:00",
"MinOrderTime": "00:00:00"
}, {
"Id": 98,
"MaxOrderTime": "-1.15:30:00",
"MinOrderTime": "00:00:00"
}]
}]
}]
Retours Get
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Code | Code de référence du débiteur. Utilisé principalement pour faciliter la recherche. | string | oui |
| ParentDebtorCode | Code du débiteur dont celui-ci est un sous-débiteur | string | non |
| Administration | Chaque débiteur appartient à une administration | string | oui |
| Name | Nom du débiteur | string | oui |
| SecondName | Un deuxième nom pour le débiteur | string | non |
| Category | Le nom de la catégorie à laquelle le débiteur appartient | string | oui |
| Country | Code pays 3 du pays où réside le débiteur | string | non |
| Currency | Code ISO de la devise utilisée par le débiteur (Obsolète : égal à CurrencyISOCode) | string | oui |
| Language | Nom de la langue utilisée par le débiteur | string | oui |
| TransporterCode | Code du transporteur utilisé pour les livraisons à ce débiteur. | string | non |
| TransporterName | Nom du transporteur utilisé pour les livraisons à ce débiteur. | string | non |
| TransportRegion | Nom de la région, à des fins de transport | string | non |
| Employees | Les employés pouvant passer des commandes pour ce débiteur. | IEnumerable<string> | non |
| OrderDayNames | Liste d'identifiants vers la collection des jours de commande, détaillant quand le débiteur peut commander depuis la boutique en ligne. | IEnumerable<string> | non |
| ToInvoice | Liste d'identifiants de débiteurs pour lesquels ce débiteur est facturé. Ex : nous livrons à différentes filiales, mais l'entreprise principale paie. | IEnumerable<string> | non |
| Locations | IEnumerable<string> | non | |
| InvoiceCreditTemplate | Modèle utilisé pour créer les factures de crédit. | string | non |
| InvoiceDebetTemplate | Modèle utilisé pour créer les factures de débit. | string | non |
| InvoiceCSVTemplate | Modèle utilisé pour créer les factures CSV de débit | string | non |
| InvoiceEventsTodo | Les événements par défaut à effectuer pour une facture après sa création. | IEnumerable<string> | non |
| Price | Nom des paramètres de prix par défaut utilisés par ce débiteur | string | non |
| PriceUseMarkupCategories | Si les catégories de marge dans les paramètres de prix par défaut sont utilisées pour calculer les prix du débiteur. | bool? | non |
| PriceUseOriginalPrice | Si le prix d'achat est utilisé lors de l'application des catégories de marge pour calculer les prix du débiteur. | bool? | non |
| MarkupCategories | Quelles catégories de marge (contient les identifiants des catégories de marge réelles) sont à utiliser pour calculer les prix du débiteur. | IEnumerable<string> | non |
| DistributionPackagingVATRate | Code du taux de TVA à utiliser pour les emballages facturés à ce débiteur. | string | non |
| DistributionTrolleyVATRate | Code du taux de TVA à utiliser pour les chariots facturés à ce débiteur. | string | non |
| DistributionSellingLocation | Lorsque des articles sont vendus à ce débiteur, ils peuvent être ajoutés au stock d'un emplacement. Ce champ contient le nom de cet emplacement si l'option est activée. | string | non |
| Block | Bloquer le débiteur pour les achats en boutique en ligne | bool | oui |
| Id | Partie entière de l'identifiant du débiteur | int | oui |
| ParentId | Partie entière de l'identifiant du débiteur parent | int | non |
| PaysVAT | Si activé, la TVA est ajoutée à la facture | bool | oui |
| CurrencyISOCode | Code ISO de la devise utilisée par le débiteur | string | oui |
| CreatedOn | Date de création | DateTime | oui |
InvoiceSettings (Objet non requis)
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| PaymentMethodId | Identifiant de la méthode de paiement par défaut | string | non |
| PaymentCondition | Jours dont dispose le débiteur pour payer les factures | int | non |
| PaymentConditionNotify | Jours avant l'envoi des notifications de paiement | int | non |
| PaymentConditionBlock | Jours pendant lesquels le débiteur peut avoir des factures en cours | int | non |
| PaymentConditionAmountBlock | decimal? | non | |
| SepaState | Les valeurs sont First, WaitApproval, Recurring | string | non |
| CreditInvoiceTemplate | string | non | |
| DebetInvoiceTemplate | string | non | |
| DebetInvoiceCSVTemplate | string | non | |
| Settings | Les valeurs peuvent être MailExport, CSVExport | List<string> | non |
| PaymentConditionLineTypes | Quelles lignes de facture doivent apparaître dans les statistiques « montant à payer » | List<string> | non |
| EventsTodo | Les événements par défaut à effectuer pour une facture après sa création. | IEnumerable<string> | non |
DistributionSettings (Objet non requis)
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| PreOrderSettings | Les valeurs peuvent être : NoRemainder (ne pas distribuer le reste au débiteur), NoStock (ne pas préférer la distribution depuis le stock), NoSalesUnit (ne pas utiliser les unités de vente, correspondre à la quantité), NoLeadingPrice (ne pas utiliser le prix directeur, toujours l'indication) | List<string> | non |
| FreshDaysExtra | Augmenter le nombre de jours avant expiration du produit avec le montant spécifié pour ce débiteur. |
Config (Objet non requis)
Contient la configuration spécifique au débiteur.
OrderDays (IEnumerable<object> non requis)
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| Id | string | oui | |
| Name | string | oui | |
| Day | string | non | |
| MaxDefaultOrderTime | string | non | |
| Lists | non utilisé | IEnumerable<object> | non |
| Hide | bool | oui | |
| MinDefaultOrderTime | string | non |
Addresses (IEnumerable<object>)
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| DebtorId | int | oui | |
| Category | string | oui | |
| Line1 | string | oui | |
| Line2 | string | non | |
| ZipCode | string | non | |
| City | string | oui | |
| State | string | non | |
| Country | string | oui | |
| DefaultAddresses | Les valeurs peuvent être : ShippingAddress, BillingAddress | string array | non |
Numbers (IEnumerable<object>)
Numéros pour ce débiteur spécifique, comme le numéro IBAN.
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| DebtorCode | string | oui | |
| DebtorName | string | oui | |
| Category | LanguageValues | oui | |
| Value | string | oui | |
| DebtorId | int | oui |
Contacts (IEnumerable<object>)
Contacts connus au sein de l'entreprise.
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| Id | string | oui | |
| DebtorId | string | oui | |
| DebtorCode | string | oui | |
| Initials | string | non | |
| FirstName | string | non | |
| MiddleName | string | non | |
| LastName | string | oui | |
| DateOfBirth | string | non | |
| PlaceOfBirth | string | non | |
| Nationality | string | non | |
| Function | string | non | |
| Gender | string | non | |
| MailAddresses | Voir la propriété mailaddresses du débiteur. | IEnumerable<object> | non |
| Numbers | Voir la propriété numbers du débiteur. | IEnumerable<object> | non |
| Users | Propriétés : Username (string), Password (byte[]), PasswordSalt (byte[]), CanOrder (bool), DebtorContactPersonId (string) | IEnumerable<object> | non |
| Defaults | Les valeurs peuvent être Order, Invoice | IEnumerable<string> | non |
MailAddresses (IEnumerable<object>)
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| Category | Nom de la catégorie dans la langue par défaut | string | oui |
| Value | Adresse e-mail | string | oui |
Remarks (IEnumerable<object>)
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| Category | Catégorie de l'élément | string | oui |
| Description | Contenu de la remarque | string | oui |
| Date | Date/heure de l'insertion | DateTime | oui |
**Note 😗* Certaines propriétés peuvent être obsolètes (seront supprimées dans une des versions suivantes) ou ne pas être activement utilisées dans l'application. Vérifiez les descriptions des propriétés pour plus de détails.
PUT débiteur
**Endpoint 😗* api/debtor/
**Envoi 😗*
{
"ParentId": 1234,
"Code": "TEST",
"Name": "test debiteur",
"PaysVAT": true,
"Language": "nl",
"CurrencyISOCode": "EUR",
"CountryCode": "NL"
}
**Retour 😗* 200 response: <int:DebtorId>
PATCH débiteur
**Endpoint 😗* api/debtor/<int:Debtor Id>
{
// (Identique au PUT débiteur)
}
**Retour 😗* 200 response
PUT config boutique débiteur
**Endpoint 😗* api/debtor/<int:Debtor id>/webshop
**Envoi 😗*
{
"DirectPay": true
}
**Retourne 😗* 200 response
PATCH config boutique débiteur
**Endpoint 😗* api/debtor/<int:Debtor Id>/webshop
**Envoi 😗*
{
"DirectPay": true
}
**Retour 😗* 200 response
PUT informations débiteur
**Endpoint 😗* api/debtor/<int:Debtor Id>/(addresses|contacts|numbers)
addresses :
{
"Line1": "",
"Line2": "",
"ZipCode": "",
"City": "",
"State": "",
"Country": "",
"DefaultAddresses": []
}
**Retour 😗* 200 response
contacts :
{
"Initials": "",
"FirstName": "",
"MiddleName": "",
"LastName": "",
"DateOfBirth": "",
"Function": ""
}
**Retour 😗* 200 response: <int:contactId>
numbers :
{
"Code": "Code connu dans les catégories de numéros dans EasyFlor",
"Value": "Valeur de ce numéro"
}
**Retour 😗* 200 response
PUT informations contact débiteur
**Endpoint 😗* api/debtor/<int:Debtor Id>/<int:Contact Id>/(users|mailAddresses|numbers)
users :
{
"Username": "",
"Password": "",
"CanOrder": true
}
**Retour 😗* 200 response
mailAddresses :
{
"Value": "test@test.tt"
}
**Retour 😗* 200 response
numbers (numéro de téléphone) :
{
"Value": "00312310630587"
}
**Retour 😗* 200 response
PATCH informations débiteur
**Endpoint 😗* api/debtor/<int:Debtor Id>/(addresses|contacts|numbers)/<int:index>
**Retour 😗* 200 response
PATCH informations contact débiteur
**Endpoint 😗* api/debtor/<int:Debtor Id>/<int:Contact Id>/(users|mailAddresses)/<int:index>
**Retour 😗* 200 response
DELETE
**Endpoint 😗* api/debtor/<int:Debtor Id>/(addresses|contacts|mailAddresses)/<int:index>
**Retour 😗* 200 response
Actuellement non supporté.
Vérification du mot de passe
- Obtenir l'entrée utilisateur (Password + Username)
SHA256(<entrée utilisateur:Password> . "" . <PasswordSalt du Username>)doit être égal à<Password du Username>
Fournisseurs
Une entreprise ou une personne qui livre des marchandises à l'entreprise dont vous vous connectez à la base de données.
GET
GET /api/supplier
**Reçu 😗* [{<Objet Supplier>}, ...]
GET /api/supplier/<string:supplierId>
**Reçu 😗*
{
"Id": "string - Id du fournisseur dans Easyflor",
"Name": "string - Nom du fournisseur",
"Code": "string - Code du fournisseur",
"Category": "string - Catégorie du fournisseur (Manufacturer/Supplier/Grower)",
"Country": "string - Nom complet du pays",
"Language": "string - ISO-639-1",
"MarkupCategories": ["IEnumerable<string>"]
}
Employé
Un employé travaillant dans l'entreprise dont vous vous connectez à la base de données.
GET
GET /api/employee
**Reçu 😗* [{<Objet Employee>}, ...]
GET /api/employee/<string:employeeId>
**Reçu 😗*
{
"Id": "string - Id de l'employé dans Easyflor",
"Name": "string - Nom de l'employé",
"Code": "string - Code de l'employé",
"ArticleGroups": ["IEnumerable<string>"]
}
Pays
Un pays stocké dans notre base de données. Lié aux débiteurs, factures, fournisseurs, etc.
Commande
GET api/country
Retours Get
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Id | Id du pays | string | oui |
| Name | Nom dans les différentes langues | LanguageValue | oui |
| CountryCode2 | Code à 2 lettres selon ISO-3166 alpha 2 | string | non |
| CountryCode3 | Code à 3 lettres selon ISO-3166 alpha 3 | string | non |
Administrations
Administrations stockées dans notre base de données. Liées aux débiteurs, emplacements, etc.
Commandes
GET api/administration
GET api/administration/{id}
Retours Get
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Id | Id de l'administration | string | oui |
| Name | Nom de l'administration | LanguageValue | oui |
Emplacements
Emplacements stockés dans notre base de données. Liés aux débiteurs, achats, etc.
Commandes
GET api/location
GET api/location/{id}
Retours Get
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Id | Id de l'emplacement | string | oui |
| Name | Nom de l'emplacement | string | oui |
| OwnerAdministrationId | L'administration du propriétaire de cet emplacement | string | non |
Articles et produits
Article
Un article, comme des roses rouges.
GET*
GET /api/article
**Reçu 😗* [{Objet Article}, ...]
GET /api/article/<string:articleId>
**Reçu 😗*
{
"id": "string - PK",
"articleGroupId": "int - FK vers ArticleGroup",
"name": "LanguageValue - Nom de l'article",
"code": "string - Code de l'article",
"primaryColor": "string - Code RHS",
"secondaryColor": "string - Code RHS",
"VBNCode": "string - Code VBN de l'article",
"MPSCode": "string - Code MPS de l'article",
"features": [
{
"code": "string - Code Floricode de la caractéristique (050)",
"sort": "string - Sort Floricode de la caractéristique (S01)",
"codeName": "LanguageValues - Nom complet du code (50 cm)",
"sortName": "LanguageValues - Nom complet du Sort (Potmaat)"
}
],
"sorts": [
{
"id": "string - ArticleSortId",
"name": "LanguageValue - Nom de l'article",
"attachments": "string - Id de la pièce jointe | chapitre pièces jointes",
"features": [],
"tags": ["LanguageValue - Tags d'article étendus (Valentine)"]
}
],
"tags": ["LanguageValue - Tags donnés à un article (Autumn)"],
"MarkupCategories": ["string - Catégories de marge appliquées aux produits commandés chez ce fournisseur"],
"Employees": ["string - Employés pouvant commander chez le fournisseur"],
"Currency": "string - Code ISO de la devise du fournisseur",
"Country": "string - Nom du pays du fournisseur",
"Language": "string - Code ISO de la langue du fournisseur",
"Category": "string - Nom de la catégorie du fournisseur"
}
Ce document continue avec les sections restantes de l'API (ArticleSort, ArticleGroup, Markup Categories, Attachments, Webshop, Orders & Purchases, Invoicing - Debet, Invoicing - Credit, Payments, Synchronization, Forecasting) qui suivent la même structure que le document original. Les noms de propriétés, endpoints et exemples de code restent inchangés car ce sont des éléments techniques. Seuls les textes descriptifs et les en-têtes sont traduits en français.
ArticleSort
Une variation de l'article, par exemple vous avez les roses rouges, dont il existe une variante de 50CM et de 60CM.
PUT
PUT /api/articlesort
**Envoi 😗*
{
"articleSorts": ["articleSortId"]
}
**Reçu 😗*
[{
"id": "string - ArticleSortId",
"name": "LanguageValue - Nom de l'article",
"attachments": "string - Id de la pièce jointe | chapitre pièces jointes",
"features": [
{
"code": "string - Code Floricode de la caractéristique (050)",
"sort": "string - Sort Floricode de la caractéristique (S01)",
"codeName": "LanguageValues - Nom complet du code (50 cm)",
"sortName": "LanguageValues - Nom complet du Sort (Potmaat)"
}
],
"tags": ["LanguageValue - Tags d'article étendus (Valentine)"]
}]
ArticleGroup
Une catégorie pour les articles. Les catégories peuvent être imbriquées dans d'autres catégories. Ex : la catégorie Roses est sous la catégorie Fleurs.
GET
GET /api/articlegroup
**Reçu 😗* [{Objet ArticleGroup}, ...]
GET /api/articlegroup/<int:articlegroupid>
**Reçu 😗*
{
"id": "int - PK",
"parentId": "int - FK de ArticleGroup",
"name": "LanguageValues - Nom du groupe d'articles",
"featureTypes": ["string - Liste des types de caractéristiques à afficher pour le groupe"],
"hide": "bool - true = non affiché en boutique"
}
Catégories de marge
Obtenir les catégories de marge.
Commande
GET /api/MarkupCategories
Retours Get
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| Id | Id de la catégorie de marge au format string (MarkupCategories/203) | string | oui |
| Name | Nom de la catégorie | LanguageValues | oui |
Pièces jointes
Une pièce jointe stockée dans notre base de données, par exemple la photo d'un article.
GET
GET https://images.easyflor.eu/vk_1297_ef/Website/Photos/<id:string>.jpg
Supprimez la chaîne
attachments/de l'ID
Retourne
Image aux formats : jpg/png/gif/bmp non redimensionnée
Boutique en ligne
ListGroup
Un groupe de listes est une collection de listes affichées sous un même en-tête dans la boutique.
GET
GET /api/listgroup
**Reçu 😗* [{<ListGroup>}, ...]
GET /api/listgroup/<int:listgroupid>
**Reçu 😗*
{
"id": "int - PK",
"name": "string - Nom de la liste",
"lists": ["Array(ListObj) - ListId's"],
"debtors": ["Array(int) - Débiteurs"]
}
ListObject
{
"id": "string - PK List",
"order": "int - Ordre de la liste",
"dateFrom": "datetime - Date à partir de laquelle elle est active",
"dateTo": "datetime - Date à partir de laquelle elle est fermée",
"maxCancellationTime": "timespan - Délai avant qu'une commande ne puisse plus être modifiée"
}
ListArticleSort
Une variante d'article proposée sur une liste de boutique en ligne.
Événements
- **Nom 😗* ListArticleSort
- **Payload 😗*
[{ Id: <string:id>, Type: <PUT|DELETE> }, ...] - Se déclenche lorsqu'un ListArticleSort est ajouté/modifié/supprimé
GET
GET /api/listarticlesort
**Reçu 😗* [{<ListArticleSort>}, ...]
GET /api/list/<string:list>
GET /api/listArticleSort/<string:id>
PUT
PUT /api/listarticlesort
**Envoi 😗*
{
"listArticleSorts": ["string:id", "string:id"]
}
**Reçu 😗*
{
"id": "string - PK",
"articleSortId": "string - FK ArticleSort",
"articleSortTags": ["LanguageValues - Combinaison de tous les tags"],
"listId": "string - FK List",
"salesUnits": [
{
"quantity": "int - quantité par unité",
"salesUnit": "int - unité"
}
],
"features": [
{
"code": "string - Code Floricode de la caractéristique (050)",
"sort": "string - Sort Floricode de la caractéristique (S01)",
"codeName": "LanguageValues - Nom complet du code (50 cm)",
"sortName": "LanguageValues - Nom complet du Sort (Potmaat)"
}
],
"quantityAvailable": "int - Quantité disponible",
"isCheckedIn": "bool - Est enregistré ?",
"supplierId": "string - FK Supplier",
"manufacturerId": "string - FK Manufacturer",
"attachments": "string - Pièces jointes | Chapitre Pièces jointes",
"dateFrom": "Date - Date de début d'activité",
"dateTo": "Date - Date de fin d'activité",
"packagings": ["string - Tableau avec codes d'emballage (577)"],
"minQuantity": "int - Nombre minimum à commander",
"originalPrice": "decimal - Prix original de l'article"
}
DebtorListArticleSortPrice
Un prix pour un ListArticleSort
PUT
PUT /api/debtorlistarticlesortprice
**Envoi 😗*
{
"debtorId": "int - DebtorId (Requis)",
"listArticleSorts": ["string - ListArticleSortId (Requis)"]
}
**Reçu 😗*
[
{
"id": "string - PK ListArticleSortId",
"stock": "int - Articles en stock",
"prices": [
{
"quantity": "int - Quantité",
"price": "decimal - Prix dans la devise du débiteur",
"priceDefault": "decimal - Prix dans la devise de la boutique"
}
]
}
]
Favoris
Favoris stockés dans notre base de données.
Commande
GET api/ShopFavorites
Retours Get
| Propriété | Description | Type de données | Requis |
|---|---|---|---|
| DebtorId | Id du débiteur | string | oui |
| ArticleSorts | Tableau de variantes d'articles | array | oui |
DebtorSessions
L'enregistrement de session du débiteur contient les dernières activités connues.
Commandes
GET api/ShopDebtorSession
GET api/ShopDebtorSession/{id}
Retours Get
| Nom de propriété | Description | Type de données | Requis |
|---|---|---|---|
| DebtorId | Id du débiteur | string | oui |
| LastActivityOn | Date et heure de la dernière activité | DateTime | oui |
Commandes et achats
Pré-commandes
La demande pour une certaine variante d'article d'un débiteur.
GET
GET /api/preorder/<int:PreOrderId>
**Reçu 😗*
{
"price": "decimal - Dans la devise du débiteur",
"date": "date - Date de la pré-commande",
"listArticleSortId": "string - FK ListArticleSort",
"articleSortId": "string - FK ArticleSortId",
"packagings": ["string - Code de l'emballage (577)"],
"quantity": "int - Nombre d'articles commandés par le client",
"quantityOrdered": "int - Nombre d'articles déjà commandés par le back-office",
"quantityDistributed": "int - Nombre d'articles attribués au client",
"dateTimeLastModified": "datetime - DateTime de la dernière modification",
"salesUnits": [
{
"quantity": "int - quantité pour salesUnit",
"salesUnit": "int - salesUnit"
}
],
"orderResponses": [
{
"quantity": "int - nombre commandé",
"state": "enum - Ok, Error, Inconclusive, PreOrder, Cancelled"
}
]
}
Explication des quantités
- Quantity = Quantité nécessaire au client (le montant commandé par le client)
- QuantityOrdered = Quantité commandée chez le fournisseur externe par le back-office. Lorsque Quantity égale QuantityOrdered, la commande est entièrement commandée chez le fournisseur externe
- QuantityDistributed = Quantité attribuée d'articles en stock par le back-office. Lorsque Quantity égale QuantityDistributed, la commande est entièrement attribuée au client
Flux
**Directement depuis le stock 😗*
- Quantity = 100 exemple
- QuantityOrdered égale 0 ou vide (ce n'est pas commandé mais directement donné)
- QuantityDistributed égale Quantity
**Commandé chez un fournisseur externe mais pas encore confirmé 😗*
- Quantity = 100
- QuantityOrdered égale Quantity
- QuantityDistributed est inférieur à Quantity (peut être déjà partiellement confirmé)
**Commandé chez un fournisseur externe et confirmé 😗*
- Quantity égale QuantityOrdered égale QuantityDistributed.
Explication des états
**Lorsque Quantity est positif 😗*
| État | Description |
|---|---|
| Ok | Commandé avec succès |
| Error | Non disponible |
| Inconclusive | Le tiers a retourné un message inattendu |
| PreOrder | En commande, pas de mise à jour de statut |
**Lorsque Quantity est négatif (commande partiellement ou totalement annulée) 😗*
| État | Description |
|---|---|
| Cancelled | Commande annulée avec succès |
| Error | Commande non annulée |
| Inconclusive | Le tiers a retourné un message inattendu |
PUT
PUT /api/preorder
**Envoi 😗*
{
"Id": "int - Optionnel, le remplir mettra à jour la commande au lieu d'en créer une nouvelle.",
"debtorId": "int",
"listArticleSortId": "string - FK ListArticleSort",
"date": "Date - en UTC (se termine par Z)",
"quantity": "int - Nombre d'articles choisis par le débiteur fois QuantityPerUnit donné par DebtorListArticleSortPrice",
"price": "decimal - Prix, donné par DebtorListArticleSortPrice"
}
**Reçu 😗*
{
"id": "string - preOrder id",
"result": "int - Quantité non ajoutée (si commandé 20, peut retourner 5, donc votre quantité réelle est 15)"
}
PreOrderDate
GET
GET api/preorderdate/YYYY-MM-DD/<int:debtorid>
**Reçu 😗* Voir Pré-commande
Achats
Un achat est une action d'achat de l'entreprise dont vous êtes dans la base de données, auprès d'un fournisseur. Un achat peut être le résultat d'une pré-commande.
Commandes
| Endpoint | Notes |
|---|---|
api/purchase |
* uniquement en dehors des heures de bureau |
api/purchase/id |
|
api/PurchaseSinceDate/** |
** uniquement les 7 derniers jours pendant les heures de bureau. Date étant la date de livraison de l'achat |
api/PurchaseSinceChangeDate/** |
** uniquement les 7 derniers jours pendant les heures de bureau. Date étant la date de livraison de l'achat |
api/purchase/stock |
liste de tous les achats non entièrement vendus |
**Exemples DateFrom/DateTo (DateTo est optionnel) 😗*
api/PurchaseSinceDate/20170317api/PurchaseSinceDate/20170301/20170330api/PurchaseSinceChangeDate/20170317api/PurchaseSinceChangeDate/20170301/20170330
Les sections restantes (DistributedPurchase, Invoicing - Debet, Invoicing - Credit, Payments, Synchronization, Forecasting) suivent la même structure technique avec les endpoints, propriétés et exemples de code inchangés.
Facturation - Débit
Factures
Une facture créée pour un débiteur, qui peut être divisée en sous-types facture de crédit et facture de débit.
Commandes
GET /api/invoice/
GET /api/InvoiceSinceDate/<dateFrom: yyyyMMdd>/<dateTo: yyyyMMdd>
GET /api/debtorinvoice/<int : debtor id>
Note : dateTo n'est pas requis
Facture en PDF
Obtenir la facture PDF par ID.
Commande
GET /api/invoicepdf/<string:InvoiceId>
Retourne
Fichier PDF contenant la facture
Créer une facture débit pour un débiteur
Créer une facture débit contenant toutes les commandes distribuées jusqu'au moment donné.
Commande
POST /api/debtordebetinvoicecreate/<int:DebtorId>
Reçu
<string:InvoiceId>
ou
<vide> quand la facture ne peut pas être créée
Paiements
Paiements
Vous pouvez enregistrer les paiements effectués pour une facture dans Easyflor. Par exemple les transactions bancaires, les paiements en espèces et les chèques. Le paiement peut ensuite être lié à une ou plusieurs factures.
Commandes
GET api/payment
GET api/payment/id
GET api/paymentsincedate/id
date étant la date de paiement
Synchronisation
Sync
Avec ces options, vous pouvez synchroniser entre Easyflor et votre application.
Lors de la première synchronisation, effectuez une synchronisation complète de toutes les données disponibles. À partir de là, obtenez la date/heure de modification la plus élevée (DateTimeLastModified) des enregistrements exportés lors de la synchronisation complète et utilisez-la pour votre prochaine requête. Ainsi, vous n'aurez pas besoin de faire une synchronisation complète à chaque fois.
Ces appels sont limités à 2000 enregistrements par appel. Lors d'une synchronisation complète, synchronisez d'abord avec l'endpoint FULL SYNC, puis prenez le MAX(DateTimeLastModified) et synchronisez à partir de cette date pour obtenir les 2000 enregistrements suivants.
Commandes
| Endpoint | Description |
|---|---|
api/DistributedPurchaseSync/ |
synchronisation complète |
api/DistributedPurchaseSync/{DateTime} |
synchronisation depuis une date |
api/PreOrderSync/ |
synchronisation complète |
api/PreOrderSync/{DateTime} |
synchronisation depuis une date |
api/DistributedTrolleySync/{DateTime} |
synchronisation depuis une date |
api/PurchaseSync/ |
synchronisation complète |
api/PurchaseSync/{DateTime} |
synchronisation depuis une date |
api/DebtorSync/ |
synchronisation complète |
api/DebtorSync/{DateTime} |
synchronisation depuis une date |
api/InvoiceSync/ |
synchronisation complète |
api/InvoiceSync/{DateTime} |
synchronisation depuis une date |
api/ListPreOrderGroupItemSyncAll/{Id} |
synchronisation complète |
api/ListPreOrderGroupItemSync/{DateTime}/{Id} |
synchronisation depuis une date |
Prévisions
Pronostics
Données de prévision par année et par semaine. Tous les endpoints sont en lecture seule (GET) et supportent la pagination lorsque applicable.
Commandes
| Endpoint | Notes |
|---|---|
api/prognoses/{year} |
paginé (128 éléments par page) |
api/prognoses/{year}/{week} |
|
api/prognoses/price/{year}/{week} |
paginé (256 éléments par page) |
api/prognoses/quantity/{year}/{week} |
paginé (256 éléments par page) |
GET tous les pronostics pour une année
GET /api/prognoses/{year}?page={page}
Récupère tous les pronostics pour l'année spécifiée, triés par numéro de semaine (décroissant). Contient uniquement les métadonnées et statistiques, pas de lignes d'articles.
GET un pronostic spécifique
GET /api/prognoses/{year}/{week}
Récupère un pronostic spécifique. Retourne 404 si le pronostic n'existe pas.
GET pronostics de prix par article
GET /api/prognoses/price/{year}/{week}?page={page}
Retourne uniquement les articles pour lesquels un pronostic de prix existe. Enrichi avec le nom de l'article et le code VBN.
GET pronostics de quantité par article
GET /api/prognoses/quantity/{year}/{week}?page={page}
Retourne uniquement les articles pour lesquels une quantité a été spécifiée. Contient les quantités et, si disponible, la répartition par jour.
Vous avez des questions ou besoin d'aide? N'hésitez pas à nous contacter par téléphone au +31 (0)71 30 20 310 ou envoyez un e-mail à support@easyflor.nl.