---
title: "Sales"
description: "Quotations and orders. Write quotations for customers and turn them into confirmed orders."
canonical: "https://obop-platform.sliplane.app/apps/sales/"
lang: "en"
---

# Sales

## What it is for

Write quotations for customers and turn them into confirmed orders. Orders point at a contact, carry a total and a currency, and confirmed orders are what Invoicing bills.

## What the package does and does not do

Quotations and confirmed orders for customers.

## Models

### `sale_order`

A quotation or confirmed order for a customer

Read group: `sales.user`. Write group: `sales.user`.

| Field | Kind | Data class | Personal data | Group | Agents see | Description |
|---|---|---|---|---|---|---|
| `party_id` | ref → party | `none` | no | `sales.user` | in clear | Customer party id |
| `state` | select (draft, confirmed, cancelled) | `none` | no | `sales.user` | in clear | Lifecycle: draft, confirmed or cancelled |
| `total_minor` | money | `none` | no | `sales.user` | in clear | Order total in minor units |
| `currency` | text | `none` | no | `sales.user` | in clear | ISO 4217 currency code |

## Workflows

### `sale_order`

| Action | Moves | Who may run it | Approval |
|---|---|---|---|
| `sale_order.confirm` | state: draft → confirmed | `sales.user` | no |
| `sale_order.cancel` | state: * → cancelled | `sales.user` | no |
| `sale_order.reset_to_draft` | state: cancelled → draft | `sales.user` | no |

## Permission groups

Groups used by this app:

- `sales.user`

## Approval steps

No step in this app needs an approval, apart from deleting records.

## What agents can and cannot do

An agent can read, search, create and update records of this app, and run the actions that need no approval, within the permission groups of its token.

It can only propose these steps, and a person must approve them: `sale_order.delete`.

## Dependencies

- `base`

## Install

Built in. It is available in every instance and cannot be removed.

## Build your own

[The module guide shows how apps like this one are written](/docs/reference/module-manifest/)
