Work Order API
Gérez les bons de travail (appels de service) à travers différents systèmes ERP avec une API REST unifiée.
Lisez et créez les bons de travail pour Servex, Servicentre et autres systèmes ERP supportés.
/Entity/WorkOrder/Entity/WorkOrderAperçu
L’entité WorkOrder représente un bon de travail / appel de service dans votre système ERP.
Cette API permet d’effectuer des opérations de lecture (GET) et de création (POST) sur les bons de travail
de manière standardisée, peu importe le système ERP sous-jacent.
L’API utilise des endpoints REST standards avec les méthodes HTTP appropriées :
GET /Entity/WorkOrder– Récupérer une liste de bons de travailPOST /Entity/WorkOrder– Créer un nouveau bon de travail
Matrice de Support
Opérations supportées pour l’entité WorkOrder par système ERP :
| Système ERP | GET | POST | PUT |
|---|---|---|---|
| Acomba | ✗ Non | ✗ Non | ✗ Non |
| QuickBooks Online | ✗ Non | ✗ Non | ✗ Non |
| Avantage | ✗ Non | ✗ Non | ✗ Non |
| Sage 50 | ✗ Non | ✗ Non | ✗ Non |
| Servex | ✓ Oui | ✓ Oui | ✗ Non |
| Servicentre | ✓ Oui | ✗ Non | ✗ Non |
GET WorkOrder
Récupère une liste de bons de travail avec support de filtrage, pagination et sélection de champs.
/Entity/WorkOrderParamètres de requêtes
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| $filter | string | Optionnel | Expression de filtrage (voir filtres supportés ci-dessous) |
| $select | string | Optionnel | Champs à retourner (séparés par des virgules) |
| $expand | string | Optionnel | Champs à épandre (ex: ExtendedProperties) |
| $top | integer | Optionnel | Nombre maximum de résultats |
| $skip | integer | Optionnel | Nombre de résultats à ignorer (pagination) |
Un seul filtre est supporté à la fois. Les champs filtrables sont : Id (eq, in), WorkOrderNumber (eq, in) et LastModifiedDate (gt, ge, lt, le).
Pour plus de détails sur la composition des requêtes, consultez : Composer une requête à l’API d’ERP Connector
GET /Entity/WorkOrder?$filter=LastModifiedDate ge '2024-01-01'&$select=WorkOrderNumber,CustomerName,TechnicianName,CreationDate&$expand=ExtendedProperties Host: https://v4.api.onlineerp.solution.quebec/api Content-Type: application/json
GET /Entity/WorkOrder?$select=WorkOrderId,CustomerId,CustomerName Host: https://v4.api.onlineerp.solution.quebec/api Content-Type: application/json
[
{
"ErpInternalId": "4521",
"Id": "10234",
"WorkOrderNumber": "10234",
"CreationDate": "2024-03-15T08:30:00",
"LastModifiedDate": "2024-03-15T14:22:00",
"ExpectedDate": "2024-03-16T10:00:00",
"ServiceRequestType": "2",
"ServiceType": "1",
"PriorityCode": "3",
"CustomerId": "152",
"CustomerNumber": "C-001",
"CustomerName": "Acme Corporation",
"CustomerAddressLine": "123 Rue Principale",
"CustomerCity": "Montréal",
"CustomerCountry": "CA",
"CustomerPostalCode": "H2X 1Y4",
"CustomerPhone": "514-555-1234",
"CustomerEmail": "contact@acme.com",
"CustomerContact": "Jean Tremblay",
"SalesRepId": "5",
"SalesRepNumber": "5",
"TechnicianId": "12",
"TechnicianNumber": "12",
"TechnicianName": "Pierre Dupont",
"DispatcherId": "3",
"DispatcherNumber": "3",
"DispatcherName": "Marie Lavoie",
"LabourCode": "1",
"TravelCode": "1",
"PaymentMethod": "1",
"ExtendedProperties": {
"WorkOrderStatus": 1,
"ReferenceOrderNumber": "REF-2024-001",
"RecurrenceDate": "2024-06-15T10:00:00",
"ProblemNote": "Système de ventilation défaillant",
"ReferenceNote": "Réf. contrat 2024",
"LogFR": "Appel reçu le 15 mars...",
"LogEN": "Call received on March 15..."
}
}
]
[
{
"WorkOrderId": "10234",
"CustomerId": "514-555-1234",
"CustomerName": "Acme Corporation"
},
{
"WorkOrderId": "10235",
"CustomerId": "450-555-6789",
"CustomerName": "Tech Industries"
},
{
"WorkOrderId": "10180",
"CustomerId": "514-555-9876",
"CustomerName": "Services Montréal Inc."
}
]
POST WorkOrder (Création)
Crée un nouveau bon de travail dans le système ERP. Le bon de travail peut optionnellement inclure des lignes de détail (produits/services).
/Entity/WorkOrderLe numéro du bon de travail est généré automatiquement par Servex.
Champs requis (Servex)
| Champ | Type | Requis | Description |
|---|---|---|---|
| CustomerId | string | ✓ Required | Clé unique (Id) du client dans Servex |
| TechnicianNumber | string | ✓ Required | Numéro du technicien assigné |
| DispatcherNumber | string | ✓ Required | Numéro du répartiteur |
| PaymentMethod | string | ✓ Required | Mode de paiement |
| CreationDate | datetime | Optionnel | Date de création (par défaut : maintenant) |
| ExpectedDate | datetime | Optionnel | Date prévue (par défaut : maintenant + 1h) |
| ProductLines | array | Optionnel | Liste des lignes de détail (produits/services) |
Structure d’une ligne de détail (WorkOrderProduct)
| Champ | Type | Requis | Description |
|---|---|---|---|
| ProductId | string | ✓ Required | Id du produit ou service |
| ProductNumber | string | Optionnel | Numéro du produit |
| LineDescription | string | Optionnel | Description de la ligne |
| QuantityOrdered | decimal | Optionnel | Quantité commandée |
| QuantityInvoiced | decimal | Optionnel | Quantité facturée |
| UnitPrice | decimal | Optionnel | Prix unitaire |
| SellingPrice | decimal | Optionnel | Prix de vente |
| ExtendedProperties.Cost | decimal | ✓ Required | Coût du produit (requis dans ExtendedProperties) |
POST /Entity/WorkOrder
Host: https://v4.api.onlineerp.solution.quebec/api
Content-Type: application/json
{
"ExpectedDate": "2025-11-05T10:00:00", // Optionnel, colonne « Promis le », par défaut : maintenant + 1h
// La section client ci-dessous doit provenir d'un Get Customer de la compagnie Acomba
"CustomerId": "1234", // FicheClient.NoUniqueSystemeSource
"CustomerNumber": "BPRO0", // FicheClient.NoClient
"CustomerName": "BOUTIQUE SPORT", // FicheClient.NomClient
"CustomerAddressLine": "123 1RE AVENUE", // FicheClient.Adresse
"CustomerCity": "Quebec, Quebec", // FicheClient.Ville
"CustomerCountry": "CA", // FicheClient.Pays
"CustomerPostalCode": "A0B0C0", // FicheClient.CodePostal
"CustomerPhone": "1234567890", // FicheClient.Telephone_Principal.Numero
"CustomerEmail": "john.doe@exemple.ca", // FicheClient.EmailPrincipal_Adresse
"CustomerContact": "JOHN DOE", // FicheClient.NomPersonneContact
"SalesRepId": "8", // FicheClient.NoVendeur_NoUniqueSystemSource
"SalesRepNumber": "3", // FicheClient.NoVendeur
"TechnicianNumber": "5", // Servex -> Get WorkOrderTechnician.Number
"DispatcherNumber": "2", // Servex -> Get WorkOrderDispatcher.Number
"PaymentMethod": "0", // Acomba -> Get CompanyInfo.ARDefaultPaymentMode
"ExtendedProperties": {
"WorkOrderStatus": 2, // WorkOrderStatus.Number (doit être un int!)
"ReferenceOrderNumber": "WO-1234567", // NoFacture du Post Acomba CustomerOrder
"ProblemNote": "Hello World", // Champ Problème Servex
"ReferenceNote": "Reference Note" // Champ Référence Servex
},
// Lignes de produits
"ProductLines": [
{
"ProductId": "12345", // NoUniqueSystemeSource (CardPos) du Produit Acomba
"ProductNumber": "123456789", // Numéro du produit Acomba
"LineDescription": "Produit à vendre", // Description du produit
"ProductCategoryId": "12", // NoUniqueSystemeSource (CardPos) du groupe de produit Acomba (doit être un int!)
"ProductCategoryNumber": "123", // Numéro du groupe de produit
"SupplierId": "123", // NoUniqueSystemSource (CardPos) du fournisseur Acomba
"SupplierNumber": "1234", // Numéro du fournisseur
"QuantityInvoiced": 1, // Quantité facturée
"QuantityOrdered": 1, // Quantité commandée
"QuantityShipped": 0, // Quantité expédiée
"UnitCost": 30.0, // Prix coûtant unitaire
"UnitPrice": 60.0, // Prix unitaire
"DiscountPercentage": 5, // Pourcentage de rabais
"SellingPrice": 60.0, // Prix de vente
"TaxAmount": 12.0, // Montant taxe 1
"Tax2Amount": 25.0, // Montant taxe 2
"TotalAmount": 72, // Prix total de la ligne
"ExtendedProperties": {
"Cost": 1.00 // Prix coûtant total de la ligne
}
}
]
}
{
"Success": true,
"BusinessKey": "10236",
"ErpInternalId": "10236",
"ErrorMessage": null
}
Les champs TechnicianName et DispatcherName sont récupérés automatiquement par Servex à partir des numéros fournis. Les valeurs par défaut pour ServiceRequestType, ServiceType, PriorityCode, LabourCode, TravelCode et ClassificationCode sont automatiquement chargées depuis la configuration Servex. Pour chaque ligne de détail, le champ Cost est obligatoire dans les ExtendedProperties.
Modèle de Données Complet
En-tête d’Appel de Service (WorkOrderHeader) – Servex
Structure retournée lors de l’extraction des bons de travail depuis Servex :
| Champ | Type | Description | |
|---|---|---|---|
| ErpInternalId | string | Clé unique interne du système ERP | |
| Id | string | Identifiant de l’appel de service | |
| WorkOrderNumber | string | Numéro de l’appel de service | |
| CreationDate | datetime | Date de création de l’appel | |
| LastModifiedDate | datetime | Dernière date de modification | |
| ExpectedDate | datetime | Date prévue d’intervention | |
| ServiceRequestType | string | Type de l’appel de service | |
| ServiceType | string | Type de service | |
| PriorityCode | string | Code de priorité | |
| CustomerId | string | Clé unique du client | |
| CustomerNumber | string | Numéro du client | |
| CustomerName | string | Nom du client | |
| CustomerAddressLine | string | Adresse du client | |
| CustomerCity | string | Ville du client | |
| CustomerCountry | string | Code pays ISO du client | |
| CustomerPostalCode | string | Code postal du client | |
| CustomerPhone | string | Téléphone du client | |
| CustomerEmail | string | Email du client | |
| CustomerContact | string | Personne contact du client | |
| SalesRepId | string | Clé unique du représentant des ventes | |
| SalesRepNumber | string | Numéro du représentant des ventes | |
| TechnicianId | string | Clé unique du technicien | |
| TechnicianNumber | string | Numéro du technicien | |
| TechnicianName | string | Nom du technicien | |
| DispatcherId | string | Clé unique du répartiteur | |
| DispatcherNumber | string | Numéro du répartiteur | |
| DispatcherName | string | Nom du répartiteur | |
| LabourCode | string | Code de travail | |
| TravelCode | string | Code de déplacement | |
| PaymentMethod | string | Mode de paiement | |
| ProductLines | List<WorkOrderProduct> | Lignes de détail (produits/services) | |
| ExtendedProperties | Dictionary | Propriétés étendues (voir tableau ci-dessous) |
ExtendedProperties (Servex)
Propriétés additionnelles disponibles via $expand=ExtendedProperties en GET ou passables en POST :
| Clé | Type | Description |
|---|---|---|
| WorkOrderStatus | int | Statut du bon de travail |
| ReferenceOrderNumber | string | Numéro de commande de référence |
| RecurrenceDate | datetime | Date de récurrence |
| ProblemNote | string | Note de problème |
| ReferenceNote | string | Note de référence |
| LogFR | string | Journal d’événements (français) |
| LogEN | string | Journal d’événements (anglais) |
Lignes de Détail (WorkOrderProduct) – Servex
| Champ | Type | Description |
|---|---|---|
| WorkOrderHeaderNumber | string | Numéro de l’appel de service parent |
| LineNumber | int | Numéro de séquence de la ligne |
| LineDescription | string | Description de la ligne |
| ProductId | string | Id du produit ou service |
| ProductNumber | string | Numéro du produit |
| ProductCategoryId | string | Id de la catégorie du produit |
| ProductCategoryNumber | string | Numéro de la catégorie du produit |
| SupplierId | string | Id du fournisseur |
| SupplierNumber | string | Numéro du fournisseur |
| QuantityOrdered | decimal | Quantité commandée |
| QuantityShipped | decimal | Quantité expédiée |
| QuantityInvoiced | decimal | Quantité facturée |
| UnitPrice | decimal | Prix unitaire |
| UnitCost | decimal | Coût unitaire |
| SellingPrice | decimal | Prix de vente |
| DiscountPercentage | decimal | Pourcentage de remise |
| TaxAmount | decimal | Montant de la première taxe |
| Tax2Amount | decimal | Montant de la deuxième taxe |
| TotalAmount | decimal | Montant total de la ligne |
Fiche Bon de Travail (ServicentreWorkOrder) – Servicentre
Structure simplifiée retournée lors de l’extraction des bons de travail depuis Servicentre :
| Champ | Type | Description |
|---|---|---|
| WorkOrderId | string | Identifiant unique du bon de travail |
| CustomerId | string | Numéro de téléphone du client associé |
| CustomerName | string | Nom du client associé |
Servex utilise le modèle complet avec de nombreux champs et le support des ExtendedProperties. Servicentre utilise un modèle simplifié