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 [
consumer.sale.order
] 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('consumer.sale.order')
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 [
consumer.sale.order
] that we defined earlier.
Now when we create a “Consumer” Sales Order it will use this numbering:

name = fields.Char(string=”Task No”, readonly=True, required=True, copy=False, default=’New’)
@api.model
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
LikeLike
I’m not a Python programmer, but in your example project.task should be the sequence code (consumer.sale.order in my example).
LikeLike
I nedd this happen base on the warehouse so I change this: record.x_studio_order_type == “Consumer” for record.warehouse_id == 1 but it did not work , I also type the warehouse name “branch1” instead of 1 neither works, please help.
LikeLike
Can you try:
if record.warehouse_id.id == 1
or I think it should also work with:
if record.warehouse_id.name == "branch1"
LikeLike
Yes now it is working both ways but I think the first one is moore secure, thanks a lot Chris
LikeLike
Hey,
I have been trying to apply the same rule to the purchase order sequences.
In this case, instead of record.warehouse_id.name, I am trying to punch in the record.picking_type_id.name==”Unit A”: so that deliver to address can be used to generate the sequence. But it is not working. Kindly share your thoughts on the same.
LikeLike