# Commandes

L'API Orders gère les achats des clients, le cycle de vie des commandes, le routage vers les boutiques vendeuses et les expéditions.

## Qu'est-ce qu'une commande ?

Une commande représente un achat en cours ou terminé dans une ou plusieurs boutiques. Au paiement, Tradly crée une commande parente contenant le paiement, le client, l'adresse et les totaux (`list_total`, `offer_total`, `shipping_total`, `tax_total`, `grand_total`). Elle contient des `Order Details` (lignes d'articles/variantes). En cas de traitement par plusieurs vendeurs, les articles sont associés à leur compte (`account_id`) et des expéditions suivent l'exécution de chaque vendeur.

## Statuts de commande

| ID | Statut | Description |
|---:|---|---|
| `0` | `Draft` | Brouillon créé avant le paiement du panier. |
| `1` | `Incomplete` | Création en cours ; commande non payée. |
| `2` | `Order Placed` | Commande passée et paiement confirmé ; en attente du vendeur. |
| `3` | `In Process` | Commande acceptée et en préparation. |
| `4` | `Shipped` | Articles expédiés avec suivi. |
| `5` | `Delivered` | Commande livrée à destination. |
| `6` | `Cancelled by Customer` | Annulée par le client avant l'exécution. |
| `7` | `Cancelled by Admin` | Annulée par un administrateur du tenant ou un vendeur. |
| `8` | `Completed` | Transaction terminée. |

## Statuts d'expédition

| ID | Statut | Description |
|---:|---|---|
| `1` | `Created` | Enregistrement d'expédition créé pour les lignes. |
| `2` | `In Progress` | Le vendeur prépare le colis. |
| `3` | `Shipped` | Colis remis au transporteur. |
| `4` | `Ready for Pickup` | Colis prêt au retrait chez le vendeur ou par le transporteur. |
| `5` | `Out for Delivery` | Le transporteur livre à l'adresse du client. |
| `6` | `Undelivered / Returned` | Échec de livraison ; retour à l'expéditeur. |
| `7` | `Delivered` | Colis marqué livré par le transporteur. |
| `8` | `Delivered & Confirmed` | Réception vérifiée par le client ou l'administrateur. |
| `9` | `Customer Return Initiated` | Le client a demandé un retour ou un échange. |
| `10` | `Customer Return Picked` | Le transporteur a récupéré le colis retourné. |
| `11` | `Customer Return Confirmed` | Articles retournés reçus et vérifiés par le vendeur. |
| `12` | `Cancelled by Account` | Expédition annulée par le compte vendeur. |
| `13` | `Cancelled by Customer` | Expédition annulée par le client. |
| `14` | `Arrived at Location` | Colis arrivé dans un centre de transit ou consigne. |
| `15` | `Cancelled by Admin` | Expédition annulée par l'administrateur du tenant. |

## Statuts de paiement

| ID | Statut | Description |
|---:|---|---|
| `1` | `Unpaid / Pending` | Paiement non encore encaissé. |
| `2` | `Paid` | Paiement encaissé. |
| `3` | `Failed` | Échec du paiement. |
| `4` | `Refunded` | Paiement remboursé au client. |

## Objet commande

L'objet commande comprend les totaux, le profil client, le paiement et la livraison, les articles, les revenus vendeur et le suivi des expéditions.

- Champs principaux : `id`, `reference_number`, `tenant_id`, `user_id`, `user` (profil), `account_ids`, `order_status`, `order_status_description`, `payment_status`, `payment_status_description`, `completed`, `currency` (code ISO à 3 lettres), `created_at` et `updated_at` (horodatages Unix).
- Les montants monétaires sont des objets `{ amount, formatted }`. `list_total` est le sous-total au prix catalogue ; `offer_total` tient compte des remises ; `tax_total` et `shipping_total` sont les taxes et frais d'envoi ; `grand_total` correspond à `offer_total + shipping_total + tax_total`.
- `customer_pricing` détaille le prix client (`grand_total`, `customer_sub_total`, `customer_shipping_charge`, `customer_tax`, `customer_coupon`). `account_pricing` détaille, pour un `account_id`, les revenus vendeur, commissions, expédition et taxes.
- `payment_method` contient `id`, `name`, `type`, `gateway_name`. `shipping_method` contient `id`, `name`, `type`, `shipping_charge`. `shipping_address` décrit le destinataire. `shipment` contient le suivi actif (`shipment_status`, `tracking_number`, `courier_name`, `shipped_at`, `delivered_at`).

### Lignes (`order_details`)

Chaque ligne représente un article acheté. Elle comprend `id`, `listing_id`, `quantity`, les montants `list_price`, `offer_price`, `special_price`, `tax_charges`, `shipping_charges`, les dates de réservation `schedule_start_at`/`schedule_end_at`, l'objet `listing`, la variante `variant`, les attributs d'options `order_detail_attributes` et les attributs saisis par unité `order_detail_item_attributes`.
