Multiple sequence numbers for sales orders

As standard, Odoo has a single sequence number for all Quotations / Sales Orders. It’s quite easy to customize this so that there are different sequences for each types of order.

Sequence numbers

Start by enabling developer mode and navigate to Settings / Technical / Sequences

Create a new sequence (or copy an existing one):

  • The name is for information only, but it should be meaningful.
  • The Sequence Code [] will be used later.
  • Company can be left blank if you want numbering to be common across all companies, or you can specify different numbering for each company (if you do this, it is recommended to include part of the company name in the prefix, or have some other way of identifying the company).
  • The prefix and suffix can be a combination of fixed elements and variables (year, month, day, time).
  • You can have sub-sequences by date. This allows you to specify the numbering for each week / month / year.
  • Sequence size needs to be large enough to cover the expected number of orders (3 = 1-999, 4 = 1-9,999, 5 = 1 – 99,999, etc.)
  • Normally the step will be 1
  • Next Number defaults to 1 but could be set to something else if you already have documents from an old system and don’t want to re-use those numbers.
    • This is updated by Odoo as invoices are created.

More information about Sequences

Automated Action

Now we can start using it through an Automated Action

Navigate to Settings / Technical / (Automation) / Automated Actions and create a new Automated Action:

Python Code:

for record in records:
  if record.x_studio_order_type == "Consumer":
    ref = env['ir.sequence'].next_by_code('')
    record['name'] = ref

This example uses a new field for Order Type (it’s a selection field created using Odoo Studio), but it could be conditioned on any other field.

  • We need to use the Sequence Code [] that we defined earlier.

Now when we create a “Consumer” Sales Order it will use this numbering:

2 thoughts on “Multiple sequence numbers for sales orders

  1. name = fields.Char(string=”Task No”, readonly=True, required=True, copy=False, default=’New’)


    def create(self, vals):
    if vals.get(‘name’, ‘New’) == ‘New’:
    vals[‘name’] = self.env[‘ir.sequence’].next_by_code(‘project.task’) or ‘New’

    result = super(FlightReport, self).create(vals)

    return result

    what is next_by_core here i m facing issue to get this


  2. I’m not a Python programmer, but in your example project.task should be the sequence code ( in my example).


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s