API des bons de commande
đ Pourquoi utiliser lâAPI des bons de commande?â
Les bons de commande sont des Ă©lĂ©ments essentiels de la gestion des stocks et de la logistique dans DataDocks. Ils reprĂ©sentent des ententes pour des produits devant ĂȘtre livrĂ©s dans vos entrepĂŽts (entrant) ou expĂ©diĂ©s Ă partir de ceux-ci (sortant). LâAPI des bons de commande vous permet de crĂ©er, suivre et gĂ©rer ces documents essentiels de façon automatisĂ©e, connectant ainsi directement vos systĂšmes de chaĂźne dâapprovisionnement Ă vos opĂ©rations dâentrepĂŽt.
ProblĂšmes rĂ©els rĂ©solus par cette APIâ
- Rationaliser le traitement des commandes : Créez et mettez à jour automatiquement des bons de commande depuis votre ERP ou votre systÚme de gestion des commandes
- Améliorer la visibilité sur les stocks : Suivez les arrivées et départs prévues avec des informations détaillées sur les produits
- Simplifier la gestion des transporteurs : Associez des transporteurs aux bons de commande pour optimiser la logistique
- AmĂ©liorer la planification : DĂ©finissez des horaires prĂ©vus pour mieux gĂ©rer les ressources de lâentrepĂŽt
- Activer lâanalyse avancĂ©e : AccĂ©dez Ă des donnĂ©es structurĂ©es de bons de commande pour le suivi et lâanalyse
DĂ©marrage rapide en 5 minutesâ
PrĂȘt Ă crĂ©er votre premier bon de commande via lâAPI? Suivez ces Ă©tapes simples :
- Obtenez votre jeton API auprĂšs du support
- Identifiez le sous-domaine de votre emplacement (ex. :
your-warehouse.datadocks.com) - Créez un bon de commande de base avec cette commande :
Voir exemple cURL
curl -X POST \
https://your-warehouse.datadocks.com/api/v1/purchase_orders \
-H 'Authorization: Token YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"purchase_order": {
"po_number": "PO-2023-001",
"carrier_name": "Express Logistics",
"outbound": false,
"expected_starts_at": "2023-06-01T08:00:00-04:00",
"expected_ends_at": "2023-06-01T16:00:00-04:00",
"purchase_order_items": [
{
"product_name": "Widgets",
"unit_name": "Pallet",
"quantity": 10,
"weight": 500
}
]
}
}'
- Câest fait ! Votre bon de commande est maintenant dans DataDocks. VĂ©rifiez votre tableau de bord pour le voir.
Architecture gĂ©nĂ©rale de lâAPIâ
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â Votre systĂšme ââââââââ¶â API DataDocks ââââââââ¶â OpĂ©rations â
â (ERP/OMS/TMS) ââââââââ†(REST/JSON) ââââââââ†dâentrepĂŽt â
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â âČ
â â
⌠â
âââââââââââââââââââ
â Rendez-vous & â
â planification â
â â
âââââââââââââââââââ
Authentificationâ
Toutes les requĂȘtes API doivent inclure votre jeton dâAPI dans lâen-tĂȘte Authorization :
Authorization: Token YOUR_API_TOKEN
Lister les bons de commandeâ
Objectifâ
RĂ©cupĂ©rer une liste paginĂ©e de bons de commande avec filtrage optionnel par numĂ©ro de BC. Utilisez ce point de terminaison pour synchroniser les bons de commande avec vos systĂšmes, vĂ©rifier le statut des livraisons attendues ou prĂ©parer des rapports dâactivitĂ©s de lâentrepĂŽt.
Cas dâusages mĂ©tierâ
- Synchroniser les bons de commande avec votre ERP ou systĂšme de gestion des commandes
- GĂ©nĂ©rer des rapports sur les mouvements dâinventaire attendus
- Surveiller les prochaines livraisons ou expéditions
- Suivre la performance des transporteurs Ă travers les bons de commande
RequĂȘte HTTPâ
GET https://[location_subdomain].datadocks.com/api/v1/purchase_orders
ParamĂštres de requĂȘteâ
| ParamĂštre | Type | Obligatoire | Description | Exemple |
|---|---|---|---|---|
page | Integer | Non | Numéro de page pour la pagination (1 par défaut) | page=2 |
po_number | String | Non | Filtrer par le numéro de BC (insensible à la casse) | po_number=A-1000 |
Format de la rĂ©ponseâ
La rĂ©ponse contient un tableau dâobjets bon de commande, chacun avec les champs suivants :
| Champ | Type | Description |
|---|---|---|
id | Integer | Identifiant unique du bon de commande |
po_number | String | Numéro du bon de commande |
name | String | Nom généré automatiquement selon les détails du BC |
carrier_name | String | Nom du transporteur assigné |
location_name | String | Nom de lâemplacement dâentrepĂŽt |
outbound | Boolean | Sâil sâagit dâune commande sortante (true) ou entrante (false) |
expected_starts_at | String | Horodatage ISO8601 de début prévu |
expected_ends_at | String | Horodatage ISO8601 de fin prévu |
custom_values | Objet | Paires clé-valeur de champs personnalisés |
purchase_order_items | Tableau | Liste des articles associés à ce bon de commande |
Chaque article dans purchase_order_items comprend :
| Champ | Type | Description |
|---|---|---|
id | Integer | Identifiant unique de lâarticle |
customer_name | String | Nom du client associĂ© Ă lâarticle |
product_name | String | Nom du produit |
unit_name | String | Unité de mesure (ex. : « Palette », « Boßte ») |
quantity | Number | Quantité de produit |
weight | Number | Poids de lâarticle |
custom_values | Objet | Champs personnalisés pour cet article |
Exemples de codeâ
cURLâ
Voir exemple cURL
# Liste de base
curl -H "Authorization: Token YOUR_API_TOKEN" \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders
# Filtré par numéro de bon de commande
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders?po_number=A-1000"
JavaScriptâ
Voir exemple JavaScript
// Utilisation de fetch API avec filtre sur le numéro de BC
const getPurchaseOrders = async (poNumber) => {
const params = new URLSearchParams();
if (poNumber) params.append("po_number", poNumber);
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders?${params.toString()}`,
{
method: "GET",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
}
);
if (!response.ok) {
const errorData = await response.json();
throw new Error(
`Ăchec de rĂ©cupĂ©ration des bons de commande : ${JSON.stringify(errorData)}`
);
}
return response.json();
};
Exemple de rĂ©ponseâ
Voir exemple de réponse
[
{
"id": 1,
"po_number": "A-1000",
"name": "A-1000-FastCo-Cereal",
"carrier_name": "FastCo",
"location_name": "Toronto",
"outbound": false,
"expected_starts_at": "2020-10-09T13:35:00-04:00",
"expected_ends_at": "2020-10-15T13:35:00-04:00",
"custom_values": {
"expected_at": "2020-10-09",
"travel_type": "Plane",
"forklift_operator": "Joe"
},
"purchase_order_items": [
{
"id": 2,
"customer_name": "FishCo",
"product_name": "Trout",
"unit_name": "Skid",
"quantity": 16,
"weight": 102,
"custom_values": {}
},
{
"id": 1,
"customer_name": "FishCo",
"product_name": "Cereal",
"unit_name": "Skid",
"quantity": 33,
"weight": 581,
"custom_values": {}
}
]
}
]
RĂ©cupĂ©rer un bon de commande uniqueâ
Objectifâ
Obtenir lâinformation dĂ©taillĂ©e pour un bon de commande spĂ©cifique par identifiant. Utilisez ce point de terminaison lorsque vous avez besoin de toutes les donnĂ©es dâun bon de commande, y compris tous ses articles et champs personnalisĂ©s.
Cas dâusages mĂ©tierâ
- Afficher les dĂ©tails dâun bon de commande dans votre application
- Vérifier un bon de commande avant traitement/livraison/réception
- AccĂ©der Ă la liste complĂšte des articles dâune commande spĂ©cifique
- VĂ©rifier les valeurs de champs personnalisĂ©s pour lâintĂ©gration avec dâautres systĂšmes
RequĂȘte HTTPâ
GET https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštres dâURLâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Integer | Oui | Identifiant unique du bon de commande |
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un 200 OK avec lâobjet complet du bon de commande (mĂȘme format que la rĂ©ponse de liste).
Exemples de codeâ
cURLâ
Voir exemple cURL
curl -H "Authorization: Token YOUR_API_TOKEN" \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/1
JavaScriptâ
Voir exemple JavaScript
const getPurchaseOrder = async (purchaseOrderId) => {
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/${purchaseOrderId}`,
{
method: "GET",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
}
);
if (!response.ok) {
if (response.status === 404) {
throw new Error(`Bon de commande #${purchaseOrderId} introuvable`);
}
const errorData = await response.json();
throw new Error(
`Ăchec de rĂ©cupĂ©ration du bon de commande : ${JSON.stringify(errorData)}`
);
}
return await response.json();
} catch (error) {
console.error("Erreur lors de la récupération du bon de commande :", error);
throw error;
}
};
CrĂ©er un bon de commandeâ
Objectifâ
CrĂ©er un nouvel enregistrement de bon de commande dans DataDocks. Ce point de terminaison vous permet dâajouter de nouveaux bons de commande et leurs articles de ligne de façon automatisĂ©e, en intĂ©grant votre systĂšme de gestion de commandes directement Ă vos opĂ©rations dâentrepĂŽt.
Arbre de dĂ©cision : Quand crĂ©er un BC via APIâ
âââââââââââââââââââ
â Ajouter un bon â
â de commande ? â
ââââââââââŹâââââââââ
â
âŒ
âââââââââââââââââââââââ Oui ââââââââââââââââ
â IntĂ©gration avec ââââââââââââ¶â IdĂ©al API â
â votre ERP/SystĂšme ? â â â
ââââââââââŹâââââââââââââ ââââââââââââââââ
â Non
âŒ
ââââââââââââââââââââââ Oui ââââââââââââââââââ
â En crĂ©er plusieurs ââââââââââââââ¶â Utiliser importâ
â dâun coup ? â â en lot â
ââââââââââŹââââââââââââ ââââââââââââââââââ
â Non
âŒ
ââââââââââââââââââââââ
â Utiliser lâUI â
â web â
ââââââââââââââââââââââ
Cas dâusages mĂ©tierâ
- Intégration systÚme : Créez des bons de commande directement depuis votre ERP ou gestion de commandes
- Traitement automatisé : Convertissez automatiquement des commandes clients en bons de commande
- Intégration EDI : Transformez des documents EDI 850 en BC DataDocks
- Intégration fournisseurs : Permettez à vos fournisseurs de soumettre des bons via vos systÚmes
RequĂȘte HTTPâ
POST https://[location_subdomain].datadocks.com/api/v1/purchase_orders
Corps de la requĂȘteâ
| ParamÚtre | Type | Obligatoire | Description | Contraintes | Par défaut | Exemple |
|---|---|---|---|---|---|---|
po_number | String | Oui | NumĂ©ro de bon de commande | Doit ĂȘtre unique | Aucun | "PO-2023-001" |
carrier_name | String | Non * | Nom du transporteur | Aucun | Aucun | "Express Logistics" |
carrier_number | String | Non | Numéro de société du transporteur | Doit correspondre à un transporteur existant | Aucun | "EXP-001" |
location_name | String | Non | Nom de lâemplacement | Doit correspondre Ă un emplacement existant | Emplacement actuel | "Toronto Warehouse" |
outbound | Boolean | Non | Commande sortante ou non | Aucun | false | true |
expected_starts_at | String | Non | Horodatage ISO8601 du début prévu | Format ISO8601 valide | Aucun | "2023-06-01T08:00:00-04:00" |
expected_ends_at | String | Non | Horodatage ISO8601 de fin prévue | Format ISO8601 valide | Aucun | "2023-06-01T16:00:00-04:00" |
alternate_reference_number | String | Non | NumĂ©ro de rĂ©fĂ©rence alternatif | Doit ĂȘtre unique | Aucun | "REF-123" |
reference_numbers | Tableau | Non | Autres numéros de référence | Aucun | Aucun | ["BOL-123", "SHIP-456"] |
closed | Boolean | Non | Si le BC est fermé | Aucun | false | true |
custom_values | Objet | Non * | Valeurs de champs personnalisĂ©s. La clĂ© est en minuscules, les espaces remplacĂ©s par des tirets bas. | Selon la configuration de lâemplacement | {} | {"department": "Produce"} |
purchase_order_items | Tableau | Non | Articles pour le BC | Au moins un fortement recommandé | [] | Voir ci-dessous |
Chaque article dans purchase_order_items peut inclure :
| ParamĂštre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
customer_name | String | Non * | Nom du client | Aucun | "Acme Corp" |
customer_number | String | Non * | Numéro de société du client | Doit correspondre à un client existant | "ACME-001" |
product_name | String | Non * | Nom du produit | Aucun | "Widgets" |
unit_name | String | Non * | Unité de mesure | Aucun | "Pallet" |
quantity | Number | Non * | QuantitĂ© du produit | Doit ĂȘtre positif | 10 |
weight | Number | Non * | Poids de lâarticle | Doit ĂȘtre positif | 500 |
custom_values | Objet | Non * | Champs personnalisĂ©s pour cet article. MĂȘme convention que ci-dessus. | Selon emplacement | {"color": "Blue"} |
* Certains champs peuvent ĂȘtre obligatoires selon la configuration de lâemplacement
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un 200 OK avec lâobjet complet du bon de commande, incluant lâid gĂ©nĂ©rĂ© et autres valeurs attribuĂ©es par le systĂšme.
Exemples de codeâ
cURLâ
Voir exemple cURL
curl -H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"purchase_order": {
"po_number": "PO-2023-001",
"carrier_name": "Express Logistics",
"outbound": false,
"expected_starts_at": "2023-06-01T08:00:00-04:00",
"expected_ends_at": "2023-06-01T16:00:00-04:00",
"custom_values": {
"department": "Electronics",
"priority": "High"
},
"purchase_order_items": [
{
"product_name": "Laptops",
"unit_name": "Box",
"quantity": 50,
"weight": 250,
"custom_values": {
"model": "XPS 13"
}
},
{
"product_name": "Monitors",
"unit_name": "Pallet",
"quantity": 10,
"weight": 500,
"custom_values": {
"size": "27-inch"
}
}
]
}
}' \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders
JavaScriptâ
Voir exemple JavaScript
const createPurchaseOrder = async (purchaseOrderData) => {
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders`,
{
method: "POST",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({ purchase_order: purchaseOrderData }),
}
);
if (!response.ok) {
const errorData = await response.json();
const errorMessages = Object.entries(errorData.errors || {})
.map(([field, messages]) => `${field}Â : ${messages.join(", ")}`)
.join("\n");
throw new Error(`Ăchec de crĂ©ation du bon de commande :\n${errorMessages}`);
}
return await response.json();
} catch (error) {
console.error("Erreur APIÂ :", error);
throw error;
}
};
Mettre Ă jour un bon de commandeâ
Objectifâ
Mettre Ă jour les dĂ©tails dâun bon de commande existant. Ce point de terminaison vous permet de modifier tout aspect dâun bon de commande, y compris ses articles, dates, information transporteur et champs personnalisĂ©s.
Cas dâusages mĂ©tierâ
- DonnĂ©es Ă jour : Mettez Ă jour les dates de livraison ou lâinformation sur le transporteur si nĂ©cessaire
- Modifier le contenu : Ajoutez, retirez ou changez des articles selon les besoins
- Changer le statut : Marquez les bons de commande comme fermés une fois traités
- Ajouter de lâinformation : Mettez Ă jour les champs personnalisĂ©s avec les numĂ©ros de suivi ou donnĂ©es de livraison
RequĂȘte HTTPâ
PUT https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštres dâURLâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Integer | Oui | Identifiant unique du bon de commande |
Corps de la requĂȘteâ
Le corps accepte les mĂȘmes paramĂštres que la crĂ©ation. Seuls les champs Ă modifier doivent ĂȘtre inclus.
ScĂ©narios communs de mise Ă jourâ
Mettre Ă jour les datesâ
{
"purchase_order": {
"expected_starts_at": "2023-06-05T08:00:00-04:00",
"expected_ends_at": "2023-06-05T16:00:00-04:00"
}
}
Changer le transporteurâ
{
"purchase_order": {
"carrier_name": "Fast Transit Inc",
"carrier_number": "FTI-001"
}
}
Fermer un bon de commandeâ
{
"purchase_order": {
"closed": true
}
}
Mettre Ă jour les articlesâ
{
"purchase_order": {
"purchase_order_items": [
{
"id": 123,
"quantity": 15
},
{
"product_name": "New Product",
"unit_name": "Box",
"quantity": 5,
"weight": 25
}
]
}
}
Exemples de codeâ
cURLâ
Voir exemple cURL
curl -H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-X PUT \
-d '{
"purchase_order": {
"carrier_name": "Updated Logistics Co",
"expected_starts_at": "2023-06-02T08:00:00-04:00",
"custom_values": {
"tracking_number": "TRK12345"
}
}
}' \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/1
JavaScriptâ
Voir exemple JavaScript
const updatePurchaseOrder = async (purchaseOrderId, updateData) => {
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/${purchaseOrderId}`,
{
method: "PUT",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({ purchase_order: updateData }),
}
);
if (!response.ok) {
const errorData = await response.json();
throw new Error(
`Ăchec de mise Ă jour du bon de commande : ${JSON.stringify(errorData)}`
);
}
return await response.json();
} catch (error) {
console.error("Erreur lors de la mise à jour du bon de commande :", error);
throw error;
}
};
Retirer tous les articles du bon de commandeâ
Pour supprimer tous les articles dâun bon de commande, incluez le paramĂštre clear_po_items avec la valeur true :
{
"purchase_order": {
"clear_po_items": "true",
"purchase_order_items": [
{
"product_name": "New Product",
"unit_name": "Box",
"quantity": 10
}
]
}
}
Cela supprime tous les articles existants et les remplace par ceux précisés (le cas échéant).
Lister les bons de commande avec rendez-vous rĂ©servĂ©sâ
Objectifâ
RĂ©cupĂ©rer les bons de commande liĂ©s Ă des rendez-vous rĂ©servĂ©s, avec leurs dĂ©tails. Ce point de terminaison est conçu pour les clients qui prĂ©fĂšrent lâinterrogation pĂ©riodique (polling) aux webhooks pour surveiller les modifications et rĂ©servations.
Cas dâusages mĂ©tierâ
- Alternative aux webhooks : Surveillez les réservations de rendez-vous sans webhook
- Suivi de statut de rendez-vous : Vérifiez quels BC sont associés à des réservations confirmées
- Synchronisation incrémentale : Utilisez
updated_sincepour ne récupérer que les changements - Suivi de la livraison prévue : Voyez quand les BC sont prévus pour livraison/ramassage réelle
- Rapports par emplacement : Obtenez lâactivitĂ© de rendez-vous par site dâentrepĂŽt
RequĂȘte HTTPâ
GET https://[location_subdomain].datadocks.com/api/v1/purchase_orders/with_booked_appointments
ParamĂštres de requĂȘteâ
| ParamĂštre | Type | Obligatoire | Description | Exemple |
|---|---|---|---|---|
start_time | String | Non | Horodatage ISO8601 â rendez-vous aprĂšs ou Ă©gal Ă cette date | start_time=2023-06-01T08:00:00-04:00 |
end_time | String | Non | Horodatage ISO8601 â rendez-vous avant ou Ă©gal Ă cette date | end_time=2023-06-30T17:00:00-04:00 |
limit | Integer | Non | Nombre max de résultats (défaut : 100, max : 250) | limit=50 |
offset | Integer | Non | Nombre de résultats à ignorer (pagination, défaut : 0) | offset=100 |
updated_since | String | Non | ISO8601 â POs créés/mis Ă jour depuis cette date | updated_since=2023-06-01T00:00:00-04:00 |
Format de la rĂ©ponseâ
La réponse est un tableau de BC ayant au moins un rendez-vous réservé. Chaque objet inclut :
| Champ | Type | Description |
|---|---|---|
po_number | String | Numéro du bon de commande |
appointments | Tableau | Liste des rendez-vous liés à ce BC |
Chaque rendez-vous dans appointments contient :
| Champ | Type | Description |
|---|---|---|
appointment_id | String | Identifiant unique du rendez-vous |
appointment_number | String | Numéro humainement lisible du rendez-vous |
scheduled_at | String | Horodatage ISO8601 de réservation du rendez-vous |
location | String | Nom du site oĂč le rendez-vous est rĂ©servĂ© |
Remarques importantesâ
- Résultats filtrés : Seuls les BC avec au moins un rendez-vous réservé sont retournés
- Données en temps réel : Les rendez-vous reflÚtent le statut actuel
- Fuseau horaire : Les dates sont retournĂ©es selon le fuseau de lâemplacement
- Pagination : Utilisez
limitetoffsetpour gérer les grands résultats
Exemples de codeâ
cURLâ
Voir exemple cURL
# RequĂȘte de base
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/with_booked_appointments"
# Avec filtres temporels et pagination
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/with_booked_appointments?start_time=2023-06-01T08:00:00-04:00&end_time=2023-06-30T17:00:00-04:00&limit=50&offset=0"
# Synchronisation incrémentale
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/with_booked_appointments?updated_since=2023-06-15T12:00:00-04:00"
JavaScriptâ
Voir exemple JavaScript
const getPurchaseOrdersWithAppointments = async (filters = {}) => {
const params = new URLSearchParams()
// Ajout des filtres optionnels
if (filters.startTime) params.append('start_time', filters.startTime)
if (filters.endTime) params.append('end_time', filters.endTime)
if (filters.limit) params.append('limit', filters.limit)
if (filters.offset) params.append('offset', filters.offset)
if (filters.updatedSince) params.append('updated_since', filters.updatedSince)
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/with_booked_appointments?${params.toString()}`,
{
method: 'GET',
headers: {
Authorization: 'Token YOUR_API_TOKEN',
'Content-Type': 'application/json',
},
},
)
if (!response.ok) {
const errorData = await response.json()
throw new Error(
`Ăchec de rĂ©cupĂ©ration des bons de commande avec rendez-vous : ${JSON.stringify(errorData)}`,
)
}
return await response.json()
} catch (error) {
console.error('Erreur lors de la récupération des bons de commande avec rendez-vous :', error)
throw error
}
}
// Exemple de synchronisation incrémentale
const syncAppointments = async (lastSyncTime) => {
const data = await getPurchaseOrdersWithAppointments({
updatedSince: lastSyncTime,
limit: 100,
})
// Traitement des données de rendez-vous
data.forEach((po) => {
console.log(`BC ${po.po_number} a ${po.appointments.length} rendez-vous`)
po.appointments.forEach((appointment) => {
console.log(` - ${appointment.appointment_number} prévu pour ${appointment.scheduled_at}`)
})
})
return data
}
Exemple de rĂ©ponseâ
Voir exemple de réponse
[
{
"po_number": "PO123456",
"appointments": [
{
"appointment_id": "appt_001",
"appointment_number": "A123",
"scheduled_at": "2025-06-24T14:00:00-04:00",
"location": "Toronto DC"
},
{
"appointment_id": "appt_002",
"appointment_number": "A124",
"scheduled_at": "2025-06-25T09:00:00-04:00",
"location": "Toronto DC"
}
]
},
{
"po_number": "PO789012",
"appointments": [
{
"appointment_id": "appt_003",
"appointment_number": "A125",
"scheduled_at": "2025-06-26T11:30:00-04:00",
"location": "Toronto DC"
}
]
}
]
Supprimer un bon de commandeâ
Objectifâ
Retirer un bon de commande du systĂšme. Ce point de terminaison vous permet de supprimer des bons de commande devenus inutiles.
Points importants Ă considĂ©rerâ
Avant de supprimer un BC, tenez compte des points suivants :
- Le BC ne doit pas ĂȘtre associĂ© Ă des rendez-vous actifs
- La suppression est permanente et irréversible
- Dans bien des cas, il vaut mieux marquer un BC comme « fermé » plutÎt que de le supprimer
Cas dâusages mĂ©tierâ
- Nettoyer des données de test : Retirer des BC de test ou fictifs
- Enlever des doublons : Nettoyer aprÚs déduplication des données
- Maintenance du systĂšme : Retirer dâanciens BC inutilisĂ©s
RequĂȘte HTTPâ
DELETE https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštres dâURLâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Integer | Oui | Identifiant unique du bon de commande |
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un 204 No Content, indiquant que le BC a bien Ă©tĂ© supprimĂ©.
Exemples de codeâ
cURLâ
Voir exemple cURL
curl -H "Authorization: Token YOUR_API_TOKEN" \
-X DELETE \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/1
JavaScriptâ
Voir exemple JavaScript
const deletePurchaseOrder = async (purchaseOrderId) => {
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/${purchaseOrderId}`,
{
method: "DELETE",
headers: {
Authorization: "Token YOUR_API_TOKEN",
},
}
);
if (!response.ok) {
if (response.status === 404) {
throw new Error(`Bon de commande #${purchaseOrderId} introuvable`);
}
const errorData = await response.json();
throw new Error(
`Ăchec de suppression du bon de commande : ${JSON.stringify(errorData)}`
);
}
return true; // SuccĂšs
} catch (error) {
console.error("Erreur lors de la suppression du bon de commande :", error);
throw error;
}
};
RĂ©solution automatique des entitĂ©sâ
RĂ©solution de transporteurâ
Lors de la crĂ©ation ou mise Ă jour dâun bon de commande, vous pouvez fournir soit carrier_name soit carrier_number (ou les deux) :
- Si vous fournissez
carrier_number, le systĂšme tentera de trouver un transporteur correspondant par numĂ©ro de sociĂ©tĂ© - Sâil y a une correspondance, le nom et lâID du transporteur seront automatiquement associĂ©s au BC
- Sinon, le systĂšme utilisera la valeur de
carrier_numbercomme nom
RĂ©solution des produitsâ
Lors de la crĂ©ation ou modification dâarticles de BC :
- Si le nom du produit correspond (insensible à la casse) à un produit existant, il sera utilisé
- Si non, lâarticle sera créé mais non liĂ© Ă un enregistrement produit complet
- Contactez le support si vous voulez créer un produit inexistant
RĂ©solution de lâunitĂ©â
Comme pour les produits :
- Si le nom de lâunitĂ© correspond Ă une unitĂ© existante (insensible Ă la casse), elle sera utilisĂ©e
- Sinon, lâarticle ne sera pas liĂ© Ă une unitĂ©
- Contactez le support pour créer une nouvelle unité si nécessaire
Bonnes pratiquesâ
Gestion des donnĂ©esâ
- Numéros de BC uniques : Assurez-vous que chaque bon de commande a un identifiant unique
- Utilisez les numĂ©ros de sociĂ©tĂ© du transporteur : Quand câest possible, privilĂ©giez ce champ
- Validez cĂŽtĂ© client : Assurez-vous de lâintĂ©gritĂ© des donnĂ©es avant lâenvoi
- Utilisez le drapeau âfermĂ©â plutĂŽt que la suppression : Sceller les BC terminĂ©s au lieu de les effacer
- Gérez bien vos champs personnalisés : Utilisez uniquement ceux configurés pour votre site
Optimisation des performancesâ
- Inclure toutes les données pertinentes : Privilégiez un seul appel API complet
- Utilisez les opérations par lot : Groupez les synchronisations liées
- Soyez prĂ©cis dans vos requĂȘtes : Utilisez les filtres pour rĂ©duire la volumĂ©trie
Erreurs frĂ©quentes et dĂ©pannageâ
- UnicitĂ© du numĂ©ro de BC : Les numĂ©ros de commande doivent ĂȘtre exclusifs Ă chaque emplacement
- Format de la date : Les dates doivent ĂȘtre au format ISO8601 (ex. : "2023-06-01T08:00:00-04:00")
- Association du transporteur : En cas de souci dâassociation, vĂ©rifiez le numĂ©ro de sociĂ©tĂ© utilisĂ©
- Types de champs personnalisés : Les champs JSON resteront JSON, les autres seront convertis en texte
- Nettoyer les articles : Utilisez bien le paramÚtre
clear_po_itemslors de la réécriture complÚte des lignes
Gestion des erreursâ
| Code dâerreur | Description | Cause possible |
|---|---|---|
| 400 | Mauvaise requĂȘte | Valeurs ou format invalides |
| 404 | Introuvable | LâID du bon de commande nâexiste pas |
| 422 | Entité non traitable | Validation non réussie (ex. : champ obligatoire absent) |
| 401 | Non autorisé | Jeton API invalide ou absent |
| 403 | Interdit | Permissions insuffisantes |
Exemple de rĂ©ponse en cas dâerreurâ
{
"errors": {
"po_number": ["ne peut pas ĂȘtre vide"],
"purchase_order_items": ["doit inclure au moins un article"]
}
}
Aide et supportâ
Si vous rencontrez des problÚmes non couverts ici :
- VĂ©rifiez la rĂ©ponse dâerreur : La plupart des erreurs API dĂ©taillent le problĂšme exact
- Vérifiez les permissions : Assurez-vous que votre jeton API est autorisé
- Testez par étapes : Découpez les appels complexes pour dépister la source du problÚme