Aller au contenu principal

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 :

  1. Obtenez votre jeton API auprĂšs du support
  2. Identifiez le sous-domaine de votre emplacement (ex. : your-warehouse.datadocks.com)
  3. 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
}
]
}
}'
  1. 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ĂštreTypeObligatoireDescriptionExemple
pageIntegerNonNuméro de page pour la pagination (1 par défaut)page=2
po_numberStringNonFiltrer 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 :

ChampTypeDescription
idIntegerIdentifiant unique du bon de commande
po_numberStringNuméro du bon de commande
nameStringNom généré automatiquement selon les détails du BC
carrier_nameStringNom du transporteur assigné
location_nameStringNom de l’emplacement d’entrepît
outboundBooleanS’il s’agit d’une commande sortante (true) ou entrante (false)
expected_starts_atStringHorodatage ISO8601 de début prévu
expected_ends_atStringHorodatage ISO8601 de fin prévu
custom_valuesObjetPaires clé-valeur de champs personnalisés
purchase_order_itemsTableauListe des articles associés à ce bon de commande

Chaque article dans purchase_order_items comprend :

ChampTypeDescription
idIntegerIdentifiant unique de l’article
customer_nameStringNom du client associĂ© Ă  l’article
product_nameStringNom du produit
unit_nameStringUnité de mesure (ex. : « Palette », « Boßte »)
quantityNumberQuantité de produit
weightNumberPoids de l’article
custom_valuesObjetChamps 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ĂštreTypeObligatoireDescription
idIntegerOuiIdentifiant 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ÚtreTypeObligatoireDescriptionContraintesPar défautExemple
po_numberStringOuiNumĂ©ro de bon de commandeDoit ĂȘtre uniqueAucun"PO-2023-001"
carrier_nameStringNon *Nom du transporteurAucunAucun"Express Logistics"
carrier_numberStringNonNuméro de société du transporteurDoit correspondre à un transporteur existantAucun"EXP-001"
location_nameStringNonNom de l’emplacementDoit correspondre à un emplacement existantEmplacement actuel"Toronto Warehouse"
outboundBooleanNonCommande sortante ou nonAucunfalsetrue
expected_starts_atStringNonHorodatage ISO8601 du début prévuFormat ISO8601 valideAucun"2023-06-01T08:00:00-04:00"
expected_ends_atStringNonHorodatage ISO8601 de fin prévueFormat ISO8601 valideAucun"2023-06-01T16:00:00-04:00"
alternate_reference_numberStringNonNumĂ©ro de rĂ©fĂ©rence alternatifDoit ĂȘtre uniqueAucun"REF-123"
reference_numbersTableauNonAutres numéros de référenceAucunAucun["BOL-123", "SHIP-456"]
closedBooleanNonSi le BC est ferméAucunfalsetrue
custom_valuesObjetNon *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_itemsTableauNonArticles pour le BCAu moins un fortement recommandé[]Voir ci-dessous

Chaque article dans purchase_order_items peut inclure :

ParamĂštreTypeObligatoireDescriptionContraintesExemple
customer_nameStringNon *Nom du clientAucun"Acme Corp"
customer_numberStringNon *Numéro de société du clientDoit correspondre à un client existant"ACME-001"
product_nameStringNon *Nom du produitAucun"Widgets"
unit_nameStringNon *Unité de mesureAucun"Pallet"
quantityNumberNon *QuantitĂ© du produitDoit ĂȘtre positif10
weightNumberNon *Poids de l’articleDoit ĂȘtre positif500
custom_valuesObjetNon *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ĂštreTypeObligatoireDescription
idIntegerOuiIdentifiant 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_since pour 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ĂštreTypeObligatoireDescriptionExemple
start_timeStringNonHorodatage ISO8601 – rendez-vous aprĂšs ou Ă©gal Ă  cette datestart_time=2023-06-01T08:00:00-04:00
end_timeStringNonHorodatage ISO8601 – rendez-vous avant ou Ă©gal Ă  cette dateend_time=2023-06-30T17:00:00-04:00
limitIntegerNonNombre max de résultats (défaut : 100, max : 250)limit=50
offsetIntegerNonNombre de résultats à ignorer (pagination, défaut : 0)offset=100
updated_sinceStringNonISO8601 – POs créés/mis Ă  jour depuis cette dateupdated_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 :

ChampTypeDescription
po_numberStringNuméro du bon de commande
appointmentsTableauListe des rendez-vous liés à ce BC

Chaque rendez-vous dans appointments contient :

ChampTypeDescription
appointment_idStringIdentifiant unique du rendez-vous
appointment_numberStringNuméro humainement lisible du rendez-vous
scheduled_atStringHorodatage ISO8601 de réservation du rendez-vous
locationStringNom 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 limit et offset pour 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ĂštreTypeObligatoireDescription
idIntegerOuiIdentifiant 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_number comme 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_items lors de la réécriture complĂšte des lignes

Gestion des erreurs​

Code d’erreurDescriptionCause possible
400Mauvaise requĂȘteValeurs ou format invalides
404IntrouvableL’ID du bon de commande n’existe pas
422Entité non traitableValidation non réussie (ex. : champ obligatoire absent)
401Non autoriséJeton API invalide ou absent
403InterditPermissions 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 :

  1. VĂ©rifiez la rĂ©ponse d’erreur : La plupart des erreurs API dĂ©taillent le problĂšme exact
  2. Vérifiez les permissions : Assurez-vous que votre jeton API est autorisé
  3. Testez par étapes : Découpez les appels complexes pour dépister la source du problÚme