---
title: "Purchase"
description: "Fournisseurs et commandes d'achat. Chaque application est un module sur un même modèle de données."
canonical: "https://obop.dev/fr/apps/purchase/"
lang: "fr"
---

# Purchase

## À quoi elle sert

Keep vendors and the purchase orders you send them, with order lines and a draft to received flow. Totals are entered, not summed from the lines.

## Ce que fait et ne fait pas le paquet

Vendors, purchase orders and order lines with a draft, sent, confirmed, received and cancelled flow. An order has a number from a series, its total is the sum of its lines, and receiving the goods creates a draft stock move per line at the receiving location (the warehouse validates them).

## Détails du module

- **Version:** `0.3.0`
- **Auteur:** SpaceCorps
- **Licence:** [AGPL-3.0-or-later](https://spdx.org/licenses/AGPL-3.0-or-later.html)
- **Noyau requis:** `^0.2` (le noyau actuel est 0.2.0)
- **Maturité:** Bêta
- **Catégories:** Chaîne logistique

## Modèles

### `purchase_vendor`

Purchasing terms for a contact you buy from

Groupe de lecture: `purchase.user`. Groupe d'écriture: `purchase.manager`.

| Champ | Type | Classe de données | Données personnelles | Groupe | Vu par les agents | Description |
|---|---|---|---|---|---|---|
| `party_id` | ref → party | `none` | non | `purchase.user` | en clair | The contact record of the vendor |
| `vendor_reference` | text | `none` | non | `purchase.user` | en clair | Your customer number at this vendor |
| `payment_terms_days` | number | `none` | non | `purchase.user` | en clair | Days allowed to pay an invoice |
| `lead_time_days` | number | `none` | non | `purchase.user` | en clair | Usual days between order and delivery |
| `iban` | text | `financial` | oui | `purchase.manager` | non communiqué | Bank account the vendor is paid into |
| `active` | bool | `none` | non | `purchase.user` | en clair | Whether you still buy from this vendor |

### `purchase_order`

A request to a vendor to supply goods or services

Groupe de lecture: `purchase.user`. Groupe d'écriture: `purchase.user`.

| Champ | Type | Classe de données | Données personnelles | Groupe | Vu par les agents | Description |
|---|---|---|---|---|---|---|
| `number` | sequence | `none` | non | `purchase.user` | en clair | Purchase order number such as PO-00042, assigned when the order is created |
| `reference` | text | `none` | non | `purchase.user` | en clair | Order number printed on the document |
| `vendor_id` | ref → purchase_vendor | `none` | non | `purchase.user` | en clair | The vendor ordered from |
| `ordered_on` | date | `none` | non | `purchase.user` | en clair | Date the order was placed (YYYY-MM-DD) |
| `expected_on` | date | `none` | non | `purchase.user` | en clair | Date the goods are expected (YYYY-MM-DD) |
| `currency` | text | `none` | non | `purchase.user` | en clair | ISO 4217 currency code, for example EUR |
| `receive_location_id` | ref → inventory_location | `none` | non | `purchase.user` | en clair | Where the goods are to be received; receiving the order creates the stock moves to this location |
| `total` | money | `none` | non | `purchase.user` | en clair | Order total: the sum of the line amounts (minor currency units, e.g. cents) |
| `notes` | longtext | `none` | non | `purchase.user` | en clair | Delivery instructions and remarks for the vendor |
| `state` | select (draft, sent, confirmed, received, cancelled) | `none` | non | `purchase.user` | en clair | Order status: draft, sent, confirmed, received, cancelled |

### `purchase_order_line`

One product or service on a purchase order

Groupe de lecture: `purchase.user`. Groupe d'écriture: `purchase.user`.

| Champ | Type | Classe de données | Données personnelles | Groupe | Vu par les agents | Description |
|---|---|---|---|---|---|---|
| `order_id` | ref → purchase_order | `none` | non | `purchase.user` | en clair | The order the line belongs to |
| `product_id` | ref → product | `none` | non | `purchase.user` | en clair | The product ordered |
| `description` | text | `none` | non | `purchase.user` | en clair | Wording for the vendor if different from the product name |
| `quantity` | number | `none` | non | `purchase.user` | en clair | Units ordered |
| `unit_price` | money | `none` | non | `purchase.user` | en clair | Agreed price per unit (minor currency units, e.g. cents) |
| `amount` | money | `none` | non | `purchase.user` | en clair | Line amount: quantity times unit price (minor currency units) |
| `received_quantity` | number | `none` | non | `purchase.user` | en clair | Units received so far |

## Flux de travail

### `purchase_order`

| Action | Transition | Qui peut l'exécuter | Approbation |
|---|---|---|---|
| `purchase_order.send` | state: draft → sent | `purchase.user` | non |
| `purchase_order.confirm` | state: sent → confirmed | `purchase.manager` | oui |
| `purchase_order.receive` | state: confirmed → received | `purchase.user` | non |
| `purchase_order.cancel` | state: draft → cancelled | `purchase.user` | non |

## Groupes de permissions

Groupes utilisés par cette application :

- `purchase.manager`
- `purchase.user`

## Étapes d'approbation

Étapes qu'un agent ne peut que proposer :

- `purchase_order.confirm`

## Ce que les agents peuvent et ne peuvent pas faire

Un agent peut lire, rechercher, créer et modifier les enregistrements de cette application, et exécuter les actions qui ne requièrent pas d'approbation, dans les limites des groupes de permissions de son jeton.

Il ne peut que proposer ces étapes, qu'une personne doit approuver : `purchase_order.confirm`, `purchase_vendor.delete`, `purchase_order.delete`, `purchase_order_line.delete`.

Ces champs ne sont pas communiqués aux agents : `purchase_vendor.iban`.

## Dépendances

Chaque dépendance indique les versions qu’elle accepte. Les applications intégrées suivent les versions du noyau : une exigence à leur égard est donc vérifiée par rapport à la version du noyau.

- [Contacts](/fr/apps/contacts/): `^0.2` (intégré)
- [Inventory](/fr/apps/inventory/): `>=0.3, <1`
- [Products](/fr/apps/products/): `^0.2` (intégré)

Installer cette application depuis la place de marché installe aussi les dépendances manquantes, dans un seul plan à confirmer une fois.

## Installation

Installez-la depuis l'application Customize (Place de marché), ou en ligne de commande :

```bash
obop modules install-from purchase
```

Nécessite une base de données et des droits d'administrateur.

## Créer la vôtre

[Le guide des modules montre comment sont écrites les applications de ce type](/fr/docs/reference/module-manifest/)
