Positions de commande / Articles
Les positions de commande, également appelées articles ou produits dans X4Fleet, sont les éléments effectivement transportés avec l'envoi. Les différents types tels que les marchandises en vrac, liquides ou services relèvent tous de cette entité et de cet endpoint.
En général, les données de base des articles sont importées une seule fois au début. Les envois font ensuite référence aux articles existants ou utilisent de nouvelles positions qui ne sont pas automatiquement enregistrées dans les données de base. Pour synchroniser les données de base des articles entre le système source et X4Fleet, les endpoints suivants peuvent être utilisés :
Endpoints
POST /x4gateway/v1/import/product
ainsi que
GET /x4gateway/v1/import/product/{id} --> requête GET normale via ID
GET /x4gateway/v1/import/product --> requête GET via RefID
PUT /x4gateway/v1/import/product/{id} --> requête UPDATE via ID
DELETE /x4gateway/v1/import/product/{id} --> requête DELETE normale via ID
Request
POST product
{
"name": "string",
"hasVariants": true, //obsolète
"type": "string", //type d'article en chaîne, voir énumérations
"unit": "string", //unité, voir énumérations
"notes": "string",
"description": "string",
"diameter": 0,
"palletCount": 0,
"weight": 0,
"serviceTimeDepotPickupSecondsPerUnit": 0,
"serviceTimeDepotDropoffSecondsPerUnit": 0,
"serviceTimeSitePickupSecondsPerUnit": 0,
"serviceTimeSiteDropoffSecondsPerUnit": 0,
"volume": 0,
"width": 0,
"height": 0,
"length": 0,
"cargoAreaConsumption": 0,
"centiLiters": 0,
"squareCentimetersPerUnit": 0,
"loadingCentimeters": 0,
"storageLocation": "string",
"vevaCodeNumber": "string",
"language": "string", //code de langue à 2 lettres : de, en, fr, it, es
"isVisibleOnApp": true, //contrôle la visibilité de l'article pour les chauffeurs
"specialities": [{}],
"skills": [{}], //compétences requises pour cet article
"nameTranslation": {}, //Traduction du nom de l'article DE, FR, IT, EN, ES
"descriptionTranslation": {}, //Traduction de la description de l'article DE, FR, IT, EN, ES
"notesTranslation": {}, //Traduction de la remarque de l'article DE, FR, IT, EN, ES
"synonymNames": "string", //obsolète, pertinent uniquement pour le workflow TSG
"qualifications": [{}],
"code": "string", //numéro d'article
"isPilable": true, //p.ex. pour les plaques, pertinent pour le calcul de hauteur max.
"isStackable": true, //p.ex. pour les boîtes, pertinent pour la consommation d'espace
"isFastCreatable": true, //rarement utilisé, pertinent uniquement pour certains workflows
"skipDriverTaskCreationForPickup": true, //contrôle la génération de points de transport
"skipDriverTaskCreationForDropoff": true, //contrôle la génération de points de transport
"bookkeepingAccount": {}, //pertinent pour la facturation
"bookkeepingVatRate": {}, //pertinent pour la facturation
"productGroup": {}, //groupe de marchandises
"refId": "string",
}
Énumérations utilisées : Type d'article, Unité d'article.
POST shipment, section products
Dans la structure de l'envoi, en plus de l'article lui-même (product), il existe la structure complète Position (products). Une position de commande définit une série d'attributs et contient un ou plusieurs articles. Beaucoup d'attributs peuvent être définis aussi bien au niveau de la position qu'au niveau de l'article. La structure est décrite ci-après :
{
"products": [
{
"product": {}, //voir structure ci-dessus
"requiredQuantity": 0, //quantité à transporter
"description": "string",
"sortOrder": 0, //ordre de tri, position dans la liste
"refStr": "string", //RefID de la position
"storageLocation": "string",
"barCode": "string",
"pickupNotes": "string",
"dropoffNotes": "string",
"totalPallets": 0,
"totalServiceTimeDepotPickupSecondsPerUnit": 0,
"totalServiceTimeDepotDropoffSecondsPerUnit": 0,
"totalServiceTimeSiteDropoffSecondsPerUnit": 0,
"totalServiceTimeSitePickupSecondsPerUnit": 0,
"totalWeight": 0,
"totalVolume": 0,
"totalCentiLiters": 0,
"totalSquareCentimetersPerUnit": 0,
"totalLoadingCentimeters": 0,
"totalPrice": 0,
"totalShippingPrice": 0,
"price": 0,
"isExplosive": true,
"isHazardous": true,
"isRefrigerated": true,
"isTire": true,
"code": "string",
"serialNumber": "string",
"inventoryNumber": "string",
"bookkeepingAccount": {},
"bookkeepingVatRate": {},
"isQuantityRecalculatable": true,
"isFrancoPosition": true, //uniquement pertinent pour le workflow franco
"vevaCodeNumber": "string",
"transportationDocumentNumber": "string", //uniquement pertinent pour le workflow documents de transport
"skipDriverTaskCreationForPickupActual": true,
"skipDriverTaskCreationForDropoffActual": true,
"productGroup": {},
}
]
}
Toutes les dimensions total sont automatiquement calculées à partir des dimensions individuelles de l'article. Les valeurs explicitement définies remplacent les valeurs calculées automatiquement.
POST shipment, section products, structure de conteneurs
X4Fleet peut également représenter des structures de conteneurs, p.ex. une cage de transport avec plusieurs petits colis à l'intérieur. Le chauffeur n'a alors besoin de vérifier que le conteneur entier lors du chargement. De telles structures peuvent être représentées comme suit :
{
"products": [
{
"product": {},
"refStr": "Container",
"localContainerGuid": "40f36433-d274-42c0-966a-7eacafd61887",
},
{
"product": {},
"refStr": "Package1",
"referenceToContainer": "40f36433-d274-42c0-966a-7eacafd61887",
},
{
"product": {},
"refStr": "Package2",
"referenceToContainer": "40f36433-d274-42c0-966a-7eacafd61887",
}
]
}
Le localContainerGuid peut être défini lors de l'import et doit être un GUID valide (p.ex. Guid.NewGuid();). N'importe quel type et nombre de produits peuvent être référencés dans un conteneur.
Response
La structure de la réponse est analogue à la structure de la requête ; toutes les informations envoyées dans le POST ainsi que les informations complétées par le système sont renvoyées.
L'ID est une information importante qui devrait idéalement être mémorisée dans le système source.