Skip to content

Sales

1. Purpose

Sales turns a customer enquiry into a quotation, a quotation into a confirmed order, and a confirmed order into a delivery and an invoice. It is where selling prices, discounts, payment terms and delivery commitments are agreed and recorded.

It is the bridge between the commercial conversation and the two things that follow from it: stock leaving the warehouse and money becoming due.

2. Features

  • Quotations with validity dates, sent to customers as PDF or by email
  • Conversion of a quotation to a confirmed sales order in one step
  • Order lines with product, quantity, unit price, discount, tax and unit of measure
  • Pricelists — different prices per customer, per currency, per quantity break, or per date
  • Customer-specific payment terms and fiscal positions, defaulted from the customer record
  • Automatic creation of the delivery order on confirmation (sale_stock)
  • Invoicing on ordered quantity or on delivered quantity, per product
  • Down payments and partial invoicing
  • Sales teams and salesperson assignment, with per-team reporting
  • Customer portal access to their own quotations, orders and invoices
  • Sales reporting — by product, customer, salesperson, period
  • Order templates for repeat business (sale_management)

3. Where to find it

  • Menu: Sales → Orders / Products / Reporting / Configuration
  • Technical names: sale, sale_management, sale_stock
  • Tier: Odoo core (Community Edition)
  • Available in: Odoo 16, 17 and 18

4. Modules used

Module Tier Why it is needed
sale Odoo core Quotations, sales orders, order lines
sale_management Odoo core The Sales app UI, order templates, pricelist management
sale_stock Odoo core Links sales orders to delivery orders
account Odoo core Invoicing the order
product Odoo core What is being sold, and its price and tax defaults
multi_branch_base Third-party (vendor to confirm) Branch separation of sales documents

NestERP custom modules that build on Sales

Module Odoo version What it adds
sales_order_override 17 · 18 Sales order customisation for client-specific rules
sales_dashboard 17 Sales performance dashboard drawing on accounting data
inventory_dashboard 16 Includes sales movement in the stock picture
thalia_mgmt_dashboard_v17 17 Sales figures inside the consolidated management dashboard

5. Configuration

  1. Prerequisite — products and taxes must be configured first. A sales order inherits price and tax from the product; configuring Sales before Products means re-doing work.
  2. Set the invoicing policy default — Sales → Configuration → Settings. Ordered quantities invoices what was sold; Delivered quantities invoices what actually shipped. This can also be set per product and the product wins.
  3. Enable the features needed: Discounts, Pricelists, Sales Order Templates, Customer Portal, Margins.
  4. Create pricelists — Sales → Configuration → Pricelists. Decide early whether pricing is per customer, per currency or per volume; retrofitting pricelists after go-live means re-pricing open orders.
  5. Create sales teams and assign salespeople, if the client reports by team.
  6. Set the quotation validity default and the order confirmation email template.
  7. Configure payment terms and fiscal positions on customers — these drive the invoice, not the order.
  8. Set the delivery lead time on products and the warehouse, so commitment dates are realistic.

Configuration traps

  • Invoicing policy is set in two places — a global default and a per-product setting. The product overrides the default. Mixed policies across products in one order produce invoices that look wrong until you check each line.
  • Discounts must be enabled before the discount column appears. Salespeople otherwise edit unit prices directly, which destroys margin reporting.
  • Pricelists apply by customer, currency and date. A customer with no pricelist gets the product's list price, silently.
  • A confirmed order that has been delivered cannot be freely edited. Cancel and re-create, or amend before delivery.

6. How it's used

Quotation to cash

  1. Salesperson — Sales → Orders → Quotations → New. Selects the customer; payment terms, pricelist and fiscal position default from the customer record.
  2. Salesperson — adds order lines, applies any discount, sets the delivery date.
  3. SalespersonSend by Email. The quotation moves to Quotation Sent.
  4. Customer — accepts, in person or through the portal.
  5. SalespersonConfirm. The order becomes a Sales Order and the delivery order is created automatically.
  6. Storekeeper — picks and validates the delivery (see Inventory).
  7. AccountantCreate Invoice from the order, then confirms and sends it (see Accounting).
  8. Accountant — registers the payment when it arrives.

Repeat business

  1. Salesperson — starts from a sales order template rather than an empty quotation.

Screenshots needed

Save to docs/assets/sales/: quotation list · quotation form · confirmed sales order with the Delivery and Invoice smart buttons · pricelist configuration · sales reporting pivot · the NestERP sales_dashboard.

7. Access rights

Group Can do
Sales / User: Own Documents Only Create and manage their own quotations and orders
Sales / User: All Documents See and manage all sales documents
Sales / Administrator All of the above, plus pricelists, teams and configuration
Portal (customer) View their own quotations, orders and invoices

Multi-company deployments restrict orders by company. Branch-level separation requires multi_branch_base.

8. Version differences (16 / 17 / 18)

  • Views use attrs / states.
  • sale_management and sale_stock are separate installs on top of sale.
  • attrs and states removed from views.
  • sale_management and sale_stock are required by multi_branch_base on this version.
  • The version of the Thalia reference instance.
  • <tree> elements superseded by <list>.
  • sales_order_override installed on 18 with no code changes required during the upgrade, so behaviour is unchanged from 17 as far as our customisation is concerned.

9. Known limitations

  • No CRM pipeline in this module. Odoo's crm is a separate Community app; lead and opportunity management is not part of Sales and is not currently in the NestERP stack.
  • No subscription or recurring billing. Enterprise.
  • No electronic signature on quotations. Odoo Sign is Enterprise; portal acceptance is the Community equivalent.
  • No commission calculation for salespeople in core.
  • No approval workflow on discounts — a salesperson with edit rights can discount without a second signature. Compare with purchasing, where we added purchase_multi_approval.
  • Margin reporting requires the Margins setting, and is only meaningful if product cost is maintained.

Needs verification on the Thalia live instance

  • Whether the invoicing policy is ordered or delivered quantities, globally and per product
  • Which pricelists exist and how they are assigned
  • Whether discounts are enabled
  • Whether sales teams are in use
  • Whether the customer portal is enabled and actually used by customers
  • What sales_order_override actually changes on the live instance
  • Whether multi_branch_base is separating sales by branch