Black Diamond Software
  • Odoo
  • Modules
  • Custom Dev
  • AI
  • Work
  • Blog
  • Contact
  • Managed IT →
Black Diamond Software
OdooSolutionsSupportContact

Downtown Toronto, ON  ·  1-888-BDS-NET1

Also from Black DiamondBDS Networks →

Managed IT, cybersecurity & networking across the GTHA

© 2026 Black Diamond Software Inc.

Sale Order Import

Import multi-line sale orders from CSV or Excel directly in Odoo. Test the file first, review errors in red, then import. Odoo assigns the quotation number — your ID only groups the rows.

Odoo 19 | Free | CSV & Excel

Available on the Odoo Apps Store.

Import Sale Order wizard

The Import Wizard

Open it from the Quotations list, a quotation form, the Action menu, or Sales → Orders → Import Sale Order. Upload a file, test it, then import. The wizard always creates new quotations — it does not fill the order you currently have open.

  • Test File — same validation as import, with no quotations created and no sequence numbers consumed
  • Errors in Red — failed IDs are listed in red so you can fix the file before anything is created
  • Product Match — match PRODUCT by Name (default), Internal Reference, or Barcode; exact match only
  • Missing Products — Sales Managers review each name, set a sales price and customer taxes, then confirm
  • Sections & Notes — LINE_TYPE of section or note becomes an Odoo display line on the quotation
  • Download Template — starter CSV with the header row and a worked example, downloaded from the wizard
  • Open Imported Orders — jump straight to the quotations that succeeded — list if several, form if one
  • Per-Order Savepoints — one bad ID does not roll back the rest of the file; each order is isolated

Import Behaviour

  • CSV & Excel — upload a .csv or .xlsx file; type is detected from the file name; maximum size 10 MB; .xls is not supported
  • One ID, One Quotation — rows that share the same ID become one quotation with multiple lines; Odoo always assigns the number from the Sales sequence (S0…)
  • Quotation or Confirm — import as a draft quotation, or confirm automatically to a sales order — the same confirm as the Sales form
  • Sensible Defaults — blank UoM, price, description, and taxes come from the product; blank salesperson is the user running the import
  • Customers Never Created — missing or duplicate customer names fail that ID; add the contact in Contacts first, then import again
  • Price & Taxes on New Products — on confirm, set a sales price (prefilled from PRICE when present) and customer taxes from your company’s sale taxes

How It Works

  1. Open the wizard from Quotations (Import Sale Orders), the quotation form, or Sales → Orders → Import Sale Order.
  2. Download Template if you need a starter file with the header row and an example.
  3. Choose how to match products (Name, Internal Reference, or Barcode) and whether to import as a quotation or confirm automatically.
  4. Upload a .csv or .xlsx file and click Test File.
  5. If the test looks good, click Import. If products are missing, set price and taxes, then confirm.
  6. Use Open Imported Orders to jump to the quotations that succeeded.

File Format

Headers are case-insensitive. Spaces and hyphens become underscores (Line Type → LINE_TYPE). There is no TAX column — sale taxes come from the product.

ColumnRequiredNotes
IDYesGroups rows into one quotation. Not the Odoo quotation number. Aliases: ORDER, ORDER_NUMBER.
CUSTOMERYesExact partner name. Missing or duplicate names fail that order. Contacts are never created.
PRODUCTProduct rowsExact match by the wizard’s match mode. Blank on section/note rows.
QUANTITYProduct rowsGreater than zero. Accepts 1.5 or 1,5.
PRICELISTNoExact pricelist name. Otherwise the customer / company default.
DATENoOne quotation date per ID. Prefer YYYY-MM-DD.
LINE_TYPENoBlank or product for a normal line. section or note for display lines.
DESCRIPTIONNoLeave blank to use the product. Required text for section/note rows.
UOMNoLeave blank to use the product’s sales unit.
PRICENoLeave blank to use the pricelist / product price. Cannot be negative.
SALESPERSONNoLeave blank to assign the user running the import.
CUSTOMER_REFERENCENoOptional customer PO. Aliases: CUSTOMER_REF, CLIENT_ORDER_REF, PO.

CUSTOMER, PRICELIST, SALESPERSON, and DATE are one value per ID. Fill the first row and leave extra rows blank, or repeat the same value.

Access Rights

  • Sales User — can open the wizard, test a file, and import quotations; cannot create missing products
  • Sales Manager — everything a Sales User can do, plus Create Missing Products — review names, set sales price and customer taxes, then confirm

Requirements

  • Odoo 19.0
  • Sales (sale_management)
  • Python openpyxl on the server for .xlsx files (pip install openpyxl). CSV does not need it.
  • Contacts must already exist. Products must exist unless you use Create Missing Products (Name match, Sales Managers).

Screenshots

Test File with validation results

Create Missing Products — price and taxes

Imported orders on the Quotations list