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 la livraison de produits Ă vos entrepĂŽts (entrants) ou leur expĂ©dition (sortants). LâAPI des bons de commande vous permet de crĂ©er, suivre et gĂ©rer ces documents essentiels de façon programmatique, en connectant directement vos systĂšmes de la chaĂźne dâapprovisionnement Ă vos opĂ©rations dâentrepĂŽt.
ProblĂšmes rĂ©solus par cette APIâ
- Rationaliser le traitement des commandes : Créez et mettez à jour automatiquement des bons de commande à partir de votre ERP ou systÚme de gestion des commandes
- Améliorer la visibilité sur les stocks : Suivez les arrivées et départs prévus avec des informations détaillées sur les produits
- Simplifier la gestion des transporteurs : Associez des transporteurs aux bons de commande pour simplifier la logistique
- Optimiser la planification : DĂ©finissez les Ă©chĂ©anciers prĂ©vus pour mieux gĂ©rer les ressources de lâentrepĂŽt
- Permettre lâanalyse avancĂ©e : AccĂ©dez Ă des donnĂ©es structurĂ©es sur les bons de commande pour le reporting 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 votre sous-domaine dâemplacement (ex. :
votre-entrepot.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 consulter.
Aperçu de lâarchitecture de lâAPIâ
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â Votre systĂšme ââââââââ¶â API DataDocksââââââââ¶â Ops EntrepĂŽt â
â (ERP/OMS/TMS) ââââââââ†(REST/JSON) ââââââââ†(BC/Articles) â
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â âČ
â â
⌠â
âââââââââââââââââââ
â Rendez-vous â
â & horaires â
â â
âââââââââââââââââââ
Authentificationâ
Toutes les requĂȘtes API doivent inclure votre jeton API dans lâen-tĂȘte Authorizationâ:
Authorization: Token YOUR_API_TOKEN
Liste des bons de commandeâ
Objectifâ
RĂ©cupĂšre une liste paginĂ©e des bons de commande, avec possibilitĂ© de filtrer par numĂ©ro de bon. Utilisez ce point dâaccĂšs pour synchroniser vos bons de commande avec vos systĂšmes, vĂ©rifier lâĂ©tat des livraisons attendues ou prĂ©parer vos rapports dâactivitĂ© dâentrepĂŽt.
Cas dâutilisation mĂ©tierâ
- Synchroniser les bons de commande avec votre ERP ou systĂšme de gestion de commandes
- Générer des rapports sur les mouvements de stocks attendus
- Surveiller les livraisons ou expéditions à venir
- 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 | Entier | Non | N° de page pour la pagination (par défaut à 1) | page=2 |
po_number | Texte | Non | Filtrer par le numéro exact de bon (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 | Entier | Identifiant unique du bon de commande |
po_number | Texte | Numéro du bon de commande |
name | Texte | Nom auto-généré basé sur les détails du bon |
carrier_name | Texte | Nom du transporteur affecté au bon |
location_name | Texte | Nom du site/entrepĂŽt |
outbound | Booléen | Sortant (true) ou entrant (false) |
expected_starts_at | Texte | Horodatage ISO8601 du début prévu |
expected_ends_at | Texte | Horodatage ISO8601 de la fin prévue |
custom_values | Objet | Paires clé/valeur de champs personnalisés |
purchase_order_items | Tableau | Liste des articles associés à ce bon |
Chaque item dans purchase_order_items contientâ:
| Champ | Type | Description |
|---|---|---|
id | Entier | Identifiant unique de lâarticle |
customer_name | Texte | Nom du client associĂ© Ă lâarticle |
product_name | Texte | Nom du produit |
unit_name | Texte | UnitĂ© de mesure (ex.â: «âPaletteâ», «âBoĂźteâ») |
quantity | Nombre | Quantité du produit |
weight | Nombre | 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
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders?po_number=A-1000"
JavaScriptâ
Voir exemple JavaScript
// Utiliser fetch API avec filtre sur le numéro de bon
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 lâobtention 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": {}
}
]
}
]
Obtenir un bon de commande spĂ©cifiqueâ
Objectifâ
RĂ©cupĂšre lâinformation dĂ©taillĂ©e sur un bon de commande Ă partir de son identifiant. Utilisez ce point d'accĂšs lorsque vous avez besoin de toutes les donnĂ©es relatives Ă une commande particuliĂšre, y compris tous ses articles et champs personnalisĂ©s.
Cas dâutilisation mĂ©tierâ
- Afficher les dĂ©tails dâun bon de commande dans votre application
- Vérifier les données avant traitement
- AccĂ©der Ă la liste complĂšte des articles dâune commande donnĂ©e
- VĂ©rifier des champs personnalisĂ©s pour intĂ©gration avec dâautres systĂšmes
RequĂȘte HTTPâ
GET https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštres de cheminâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Entier | Oui | ID unique du bon de commande |
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un code 200 OK et lâobjet complet du bon de commande, au mĂȘme format que la rĂ©ponse de la 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Ă©ation dâun bon de commandeâ
Objectifâ
CrĂ©er un nouveau bon de commande dans DataDocks. Ce point dâaccĂšs vous permet dâajouter de nouveaux bons et leurs lignes dâarticles de façon programmatique, en intĂ©grant votre systĂšme de gestion des commandes Ă vos opĂ©rations dâentrepĂŽt.
Arbre de dĂ©cisionâ: Quand crĂ©er un BC via APIâ?â
âââââââââââââââââââ
â Faut-il ajouter â
â un bon de â
â commandeâ? â
ââââââââââŹâââââââââ
â
âŒ
âââââââââââââââââââ Oui âââââââââââââââââââ
â IntĂ©gration ââââââââââââââ¶â Parfait pour â
â avec votre ERP/ â â lâAPIâ! â
â systĂšme de com. â â â
ââââââââââŹâââââââââ âââââââââââââââââââ
â Non
âŒ
âââââââââââââââââââ Oui âââââââââââââââââââ
â Plusieurs bons ââââââââââââââ¶â Utiliser lâ â
â Ă traiterâ? â â importation â
ââââââââââŹâââââââââ â en vrac â
â Non
âŒ
âââââââââââââââââââ
â Utiliser lâ â
â interface web â
âââââââââââââââââââ
Cas dâutilisation mĂ©tierâ
- IntĂ©gration systĂšmeâ: CrĂ©ez des bons de commande directement Ă partir de votre ERP
- Traitement automatisĂ©â: Transformez automatiquement des commandes de vente en BCs
- IntĂ©gration EDIâ: Convertissez des EDI 850 en bons de commande DataDocks
- IntĂ©gration fournisseurâ: Permettez Ă vos fournisseurs de soumettre des bons depuis leurs 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 | Valeur par défaut | Exemple |
|---|---|---|---|---|---|---|
po_number | Texte | Oui | NumĂ©ro du bon de commande | Doit ĂȘtre unique | Aucune | "PO-2023-001" |
carrier_name | Texte | Non * | Nom du transporteur | Aucune | Aucune | "Express Logistics" |
carrier_number | Texte | Non | Numéro de société du transporteur | Doit exister dans le systÚme | Aucune | "EXP-001" |
location_name | Texte | Non | Nom du site | Doit exister déjà | Site courant | "Toronto Warehouse" |
outbound | Booléen | Non | Bon sortant ou entrant | Aucune | false | true |
expected_starts_at | Texte | Non | Horaire prévu de début (ISO8601) | Format ISO8601 valide | Aucune | "2023-06-01T08:00:00-04:00" |
expected_ends_at | Texte | Non | Horaire prévu de fin (ISO8601) | Format ISO8601 valide | Aucune | "2023-06-01T16:00:00-04:00" |
alternate_reference_number | Texte | Non | Numéro de référence alternatif | Aucune | Aucune | "REF-123" |
closed | Booléen | Non | Si le bon est clos | Aucune | false | true |
custom_values | Objet | Non * | Champs personnalisĂ©s (clĂ© en minuscules, espace par _). | Selon configuration de lâemplacement | {} | {"department": "Produce"} |
purchase_order_items | Tableau | Non | Lignes de commande | Au moins un article recommandé | [] | Voir ci-dessous |
Chaque article dans purchase_order_items peut inclureâ:
| ParamĂštre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
customer_name | Texte | Non * | Nom du client | Aucune | "Acme Corp" |
customer_number | Texte | Non * | Numéro de société du client | Doit exister déjà | "ACME-001" |
product_name | Texte | Non * | Nom du produit | Aucune | "Widgets" |
unit_name | Texte | Non * | Unité de mesure | Aucune | "Pallet" |
quantity | Nombre | Non * | QuantitĂ© | Doit ĂȘtre positif | 10 |
weight | Nombre | Non * | Poids | Doit ĂȘtre positif | 500 |
custom_values | Objet | Non * | Champs personnalisĂ©s (clĂ© = lowercase, espace = _). | Selon configuration de lâemplacement | {"color": "Blue"} |
* Certaines zones peuvent devenir obligatoires selon la configuration du site
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un code 200 OK ainsi que lâobjet du bon de commande complet (avec lâid gĂ©nĂ©rĂ© et autres valeurs 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;
}
};
Mise Ă jour dâun bon de commandeâ
Objectifâ
Met Ă jour les dĂ©tails dâun bon de commande existant. Ce point dâaccĂšs vous permet de modifier tout aspect dâun BC, notamment ses articles, dates, transporteur ou champs personnalisĂ©s.
Cas dâutilisation mĂ©tierâ
- Tenir lâinformation Ă jourâ: Modifier des dates de livraison ou transporteur au besoin
- Modifier le contenuâ: Ajouter, retirer ou modifier des lignes comme nĂ©cessaire
- Changer le statutâ: Marquer des bons comme fermĂ©s Ă lâexĂ©cution
- Ajouter info de suiviâ: Mettre Ă jour champs personnalisĂ©s (suivi, livraison, etc.)
RequĂȘte HTTPâ
PUT https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštres de cheminâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Entier | Oui | Identifiant unique du BC |
Corps de la requĂȘteâ
Le corps accepte les mĂȘmes champs que pour la crĂ©ation. Ne transmettez que les champs Ă modifier.
ScĂ©narios frĂ©quents de mise Ă jourâ
Mise Ă jour de 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"
}
}
Fermeture dâun bonâ
{
"purchase_order": {
"closed": true
}
}
Mise Ă jour des 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 :", error);
throw error;
}
};
Supprimer tous les articles dâun bon de commandeâ
Pour retirer tous les articles du bon, inclure le paramĂštre clear_po_items Ă trueâ:
{
"purchase_order": {
"clear_po_items": "true",
"purchase_order_items": [
{
"product_name": "New Product",
"unit_name": "Box",
"quantity": 10
}
]
}
}
Cela supprimera tous les articles existants et les remplacera par ceux fournis (sâil y a lieu).
Lister les bons de commande avec rendez-vous rĂ©servĂ©sâ
Objectifâ
RĂ©cupĂ©rer les bons de commande qui sont associĂ©s Ă des rendez-vous rĂ©servĂ©s, ainsi que le dĂ©tail de ces rendez-vous. Cette requĂȘte est conçue pour les clients qui prĂ©fĂšrent lâinterrogation pĂ©riodique (polling) plutĂŽt que les webhooks.
Cas dâutilisation mĂ©tierâ
- Alternative au webhookâ: Suivre les prises de rendez-vous sans infrastructure webhook
- Suivi dâĂ©tatâ: VĂ©rifier quels BCs sont associĂ©s Ă des rendez-vous
- Synchronisation incrĂ©mentaleâ: Utiliser
updated_sincepour ne recevoir que les changements depuis la derniĂšre requĂȘte - Suivi de la livraison planifiĂ©eâ: Voir quand les BCs sont horaires pour une livraison ou un ramassage exacts
- Rapports par siteâ: Suivre lâactivitĂ© des rendez-vous par emplacement
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 | Texte | Non | ISO8601 - Rendez-vous Ă partir de ce moment | start_time=2023-06-01T08:00:00-04:00 |
end_time | Texte | Non | ISO8601 - Rendez-vous jusquâĂ ce moment | end_time=2023-06-30T17:00:00-04:00 |
limit | Entier | Non | Nb maximum dâenregistrements (defautâ: 100, maxâ: 250) | limit=50 |
offset | Entier | Non | Nb à ignorer pour pagination (défaut : 0) | offset=100 |
updated_since | Texte | Non | ISO8601â: BC créés / maj. depuis ce moment | updated_since=2023-06-01T00:00:00-04:00 |
Format de la rĂ©ponseâ
La rĂ©ponse contient un tableau de bons ayant au moins un rendez-vous rĂ©servĂ©. Chaque objet inclutâ:
| Champ | Type | Description |
|---|---|---|
po_number | Texte | Numéro du bon de commande |
appointments | Tableau | Liste des rendez-vous associés à ce bon |
Chaque rendez-vous dans appointments contientâ:
| Champ | Type | Description |
|---|---|---|
appointment_id | Texte | Identifiant unique du rendez-vous |
appointment_number | Texte | Numéro humain du rendez-vous |
scheduled_at | Texte | Horodatage ISO8601 prévu du rendez-vous |
location | Texte | Nom du site oĂč le rendez-vous est pris |
Notes importantesâ
- Résultats filtrés : Ne retourne que les bons associés à au moins un rendez-vous pris
- DonnĂ©es en temps rĂ©el : La rĂ©ponse reflĂšte lâĂ©tat courant
- Fuseau horaire : Les horodatages sont retournés selon le site
- Pagination : Utilisez
limitetoffsetpour de grands ensembles
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 plages horaires 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()
// Ajouter les filtres
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 BC avec rendez-vous : ${JSON.stringify(errorData)}`,
)
}
return await response.json()
} catch (error) {
console.error('Erreur lors de la récupération des BC avec rendez-vous :', error)
throw error
}
}
// Ex utilisation pour synchronisation
const syncAppointments = async (lastSyncTime) => {
const data = await getPurchaseOrdersWithAppointments({
updatedSince: lastSyncTime,
limit: 100,
})
// Traiter les données
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"
}
]
}
]
Suppression dâun bon de commandeâ
Objectifâ
Supprimez un bon de commande du systĂšme. Cette opĂ©ration permet dâĂ©liminer un bon qui nâest plus requis.
Points Ă considĂ©rerâ
Avant suppression, considérez :
- Le bon ne doit pas ĂȘtre liĂ© Ă un rendez-vous actif
- LâopĂ©ration est irrĂ©versible
- Dans bien des cas, fermez le bon au lieu de le supprimer
Cas dâutilisation mĂ©tierâ
- Effacer des donnĂ©es de testsâ: Supprimer des BC de test/dĂ©mo
- Supprimer des doublonsâ: Nettoyer aprĂšs une dĂ©duplication
- Maintenance des donnĂ©esâ: Supprimer des anciens bons inutiles
RequĂȘte HTTPâ
DELETE https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštresâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Entier | Oui | Identifiant unique du bon |
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un code 204 No Content, indiquant la suppression rĂ©ussie.
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; // Supprimé avec succÚs
} catch (error) {
console.error("Erreur lors de la suppression du bon de commande :", error);
throw error;
}
};
RĂ©solution automatique dâentitĂ©sâ
RĂ©solution du transporteurâ
Lors de la crĂ©ation ou mise Ă jour dâun bon, vous pouvez donner soit carrier_name soit carrier_number (ou les deux)â:
- Si vous donnez
carrier_number, le systĂšme cherche le transporteur correspondant - Si une correspondance est trouvĂ©e, le nom et lâID seront associĂ©s au bon
- Sinon, la valeur de
carrier_numbersera utilisée comme nom
RĂ©solution produitâ
Lors de création ou MAJ des articles :
- Si le nom du produit correspond (insensible à la casse), il sera utilisé
- Si aucun produit ne correspond, lâarticle sera créé mais sans association exacte
- Contactez le support pour crĂ©er un produit qui nâexisterait pas encore
RĂ©solution unitĂ©â
Idem produits :
- Si le nom de lâunitĂ© correspond (insensible Ă la casse), il sera utilisĂ©
- Sinon, lâarticle nâaura pas de liaison dâunitĂ© exacte
- Contactez le support pour ajouter une nouvelle unité si nécessaire
Bonnes pratiquesâ
Gestion de donnĂ©esâ
- Numéros uniques : Chaque bon de commande doit avoir un identifiant unique
- Privilégier les numéros de transporteurs : Pour une association fiable des transporteurs
- Valider cĂŽtĂ© client : VĂ©rifiez les donnĂ©es cĂŽtĂ© client avant la requĂȘte
- Utiliser le statut «âfermé⻠: Fermez plutĂŽt que supprimer un bon si possible
- GĂ©rer les champs personnalisĂ©s : Nâutiliser que ceux configurĂ©s pour votre site
Optimisation de performanceâ
- Inclure toutes les données nécessaires dans un seul appel lorsque possible
- Utiliser les opérations de lot : Groupez les mises à jour connexes
- Ătre prĂ©cis dans les filtres : Limitez les transferts en Ă©tant prĂ©cis
ProblĂšmes frĂ©quents et dĂ©pannageâ
- UnicitĂ© des numĂ©ros : Veillez Ă lâunicitĂ© des BC par site
- Format des dates : Les dates doivent ĂȘtre en ISO8601 (ex. «â2023-06-01T08:00:00-04:00â»)
- Association des transporteurs : Confirmez lâexactitude du numĂ©ro de sociĂ©tĂ©
- Types de champs personnalisés : Les champs JSON sont préservés, le reste converti en texte
- Vider les articles : Utilisez
clear_po_itemspour remplacer tous les articles
Gestion des erreursâ
| Code | Description | Cause possible |
|---|---|---|
| 400 | RequĂȘte invalide | Valeur ou format invalide |
| 404 | Introuvable | LâID du bon nâexiste pas |
| 422 | Entité non traitable | Validation échouée (ex. : champ requis manquant) |
| 401 | Non autorisé | Jeton API invalide ou manquant |
| 403 | Interdit | Permissions insuffisantes |
Exemple de rĂ©ponse dâerreurâ
{
"errors": {
"po_number": ["ne peut ĂȘtre vide"],
"purchase_order_items": ["doit avoir au moins un article"]
}
}
Aide et supportâ
Si vous avez des difficultĂ©s non couvertes ci-dessusâ:
- Consultez la rĂ©ponse dâerreurâ: La plupart des erreurs API sont prĂ©cises
- VĂ©rifiez les permissionsâ: Votre jeton API a-t-il les droits suffisantsâ?
- ProcĂ©dez par Ă©tapesâ: DĂ©composez les opĂ©rations complexes pour cibler lâorigine du problĂšme