Documentation API – Work Order

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.

GET/Entity/WorkOrder
POST/Entity/WorkOrder

Aperç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 travail
  • POST /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.

GET/Entity/WorkOrder

Paramè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)
⚠️ Filtres supportés (Servex)

Un seul filtre est supporté à la fois. Les champs filtrables sont : Id (eq, in), WorkOrderNumber (eq, in) et LastModifiedDate (gt, ge, lt, le).

💡 Note importante

Pour plus de détails sur la composition des requêtes, consultez : Composer une requête à l’API d’ERP Connector

Get WorkOrder (Servex)
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 WorkOrder (Servicentre)
GET /Entity/WorkOrder?$select=WorkOrderId,CustomerId,CustomerName
Host: https://v4.api.onlineerp.solution.quebec/api
Content-Type: application/json
Response Servex (200 OK)
[
    {
        "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..."
        }
    }
]
Response Servicentre (200 OK)
[
    {
        "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).

POST/Entity/WorkOrder
💡 Numéro automatique

Le 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)
Créer un bon de travail (Servex)
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
            }
        }
    ]
}
Response (201 Created)
{
    "Success": true,
    "BusinessKey": "10236",
    "ErpInternalId": "10236",
    "ErrorMessage": null
}
⚠️ Important

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é
⚠️ Différences entre ERP

Servex utilise le modèle complet avec de nombreux champs et le support des ExtendedProperties. Servicentre utilise un modèle simplifié