Skip to main content
iVentureTeam

Odoo 20 Purchase Release Notes

All 9 Purchase changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 4Enhancement 5In Community 8Enterprise only 1
Type
Edition

Change 1 of 9

Alternatives comparison

EnhancementCommunity

The alternatives comparison screen has been improved to make it simpler for users to choose the best option.

Official Odoo 20 release note

In plain words

The Compare Product Lines screen for alternative RFQs was reworked: quantities can be edited inline (also on several lines at once), each RFQ's status is shown as a coloured badge, cancelled or zero-quantity lines are greyed out, and the Choose button is hidden on orders that are already confirmed or cancelled. The best unit price now converts each line to the product's own unit, so offers in different units (packs versus units) are compared fairly.

Purchase > Orders > Requests for Quotation > (RFQ) > Alternatives > Compare Product LinesTwo alternative RFQs for the same product line up with a Status badge, and the cheaper line is shown in green with a Choose button next to it.

Where to find it

  1. Install Purchase Alternatives (purchase_alternative).
  2. Open an RFQ > Alternatives tab > Compare Product Lines.

For users

Choosing the best vendor among alternative RFQs takes fewer clicks.

For developers

Alternatives moved from purchase_requisition into a new module purchase_alternative (plus purchase_alternative_stock and purchase_alternative_sale). The compare view id is now purchase_alternative.purchase_order_line_view_compare_list.

Upgrading from Odoo 19

Custom code that inherited the alternatives views or models from purchase_requisition must now depend on purchase_alternative.

Change 2 of 9

Default Incoterm per vendor

New featureCommunity

Select a default Incoterm for purchases on a vendor form to have that Incoterm automatically set on all quotations and purchase orders related to the vendor.

Official Odoo 20 release note

In plain words

The vendor form has a default purchase Incoterm and Incoterm Location (Sales & Purchase tab, Purchase section). New RFQs and purchase orders for that vendor take these values automatically.

Contacts > vendor > Sales & PurchaseThe new vendor Incoterm and Incoterm Location fields in the Purchase section (values set for this demo).

Where to find it

  1. Open a vendor > Sales & Purchase tab.
  2. Set Incoterm and Incoterm Location under Purchase.
  3. Create an RFQ for that vendor: the Incoterm is filled in (Other Info tab).

For users

No need to pick the Incoterm on each PO for a vendor that always ships the same way.

For developers

New res.partner fields purchase_incoterm_id and purchase_incoterm_location; purchase.order.incoterm_id and incoterm_location are now computed (store, readonly=False) from the partner.

Upgrading from Odoo 19

Existing POs keep their value; the defaults only apply to new or changed vendors.

Change 3 of 9

End-customer address in portal

EnhancementCommunity

The customer's address is shown on purchase orders on the vendor portal.

Official Odoo 20 release note

In plain words

When a purchase order has a dropship address (the end customer), the vendor portal page now shows it as the Shipping address, so the vendor knows where to deliver.

Portal > Purchase Orders > open an orderThe customer's shipping address is now printed on the portal purchase order.

Where to find it

  1. Create a PO with a dropship address (dest_address_id).
  2. Open it in the vendor portal (Send by email > portal link, or /my/purchase/<id>).

For users

Vendors see the end customer's address directly on the portal order.

For developers

portal_templates.xml renders order.dest_address_id next to the company address.

Upgrading from Odoo 19

Templates overriding the portal purchase order page may need to add the new block.

Change 4 of 9

Expected arrival date

New featureCommunity

Edit the expected arrival date for goods directly from the purchase order while keeping track of the original date provided by the vendor to ensure accurate on-time delivery rate calculations.

Official Odoo 20 release note

In plain words

The Expected Arrival of a confirmed order can be changed on the PO. The date first agreed with the vendor is kept in a new Promised Date field, and the vendor On-Time Rate is computed against that promised date.

Purchase > Orders > confirmed PO > Other InfoExpected Arrival was moved to Sep 30, while the Promised Date keeps the original Sep 25.

Where to find it

  1. Confirm a PO.
  2. Change Expected Arrival.
  3. Other Info tab: Promised Date still shows the original date.

For users

Move the expected date when the vendor warns of a delay without spoiling the on-time statistics.

For developers

New fields purchase.order.line.date_promised (set from date_planned at confirmation) and purchase.order.date_promised (min of lines); res.partner._compute_on_time_rate uses date_promised.

Upgrading from Odoo 19

Confirmed POs migrated from Odoo 19 have no promised date, so they are left out of the on-time rate until one is set.

Change 5 of 9

Product unit cost versus purchase unit cost

EnhancementCommunity + Enterprise

When purchasing in a unit or packaging that differs from the product unit, the cost in the product unit is displayed beside the cost in the purchase unit in the product catalog.

Official Odoo 20 release note

In plain words

In the product catalog, when the purchase unit differs from the product unit (for example Pack of 6 versus Units), the card shows the price per product unit below the price per purchase unit.

Purchase > RFQ > Catalog$27.00 per Pack of 6, and below it the cost per product unit ($4.50/Units). Demo product created for this shot.

Where to find it

  1. Give a product a vendor price in another unit (Pack of 6).
  2. Open an RFQ > Catalog and add the product.

For users

Easier to compare packs and single units while ordering.

For developers

Catalog data now includes productUomFactor and availableUoms; the order line shows productUnitPrice/productUomDisplayName when the units differ.

Upgrading from Odoo 19

None.

Change 6 of 9

Purchase agreement structure

EnhancementCommunity

Sections and notes can now be added in purchase agreements/blanket orders, similar to purchase orders.

Official Odoo 20 release note

In plain words

Purchase agreements (blanket orders and call for tenders) now have Add a section and Add a note on their product lines, like purchase orders. Sections also show the total of their lines.

Purchase > Orders > Purchase AgreementsA section line (with its $280.00 total) and a note line in a blanket order, with the new Add a section and Add a note links.

Where to find it

  1. Purchase > Orders > Purchase Agreements > open or create one.
  2. Use Add a section or Add a note under the products.

For users

Organise long agreements in groups and add remarks between lines.

For developers

purchase.requisition.line gets display_type (line_section, line_subsection, line_note) and parent_id; the lines use the product_label_section_and_note_field_o2m widget.

Upgrading from Odoo 19

Code that loops over requisition lines should skip lines with a display_type.

  • In this development snapshot the section and note text did not render in the agreement list (the stored names exist); the rows and their totals do render.

Change 7 of 9

Recompute Expected Arrival when deadline is in the past

New featureCommunity

When you have not been able to confirm your purchase order before the order deadline, recalculate the new expected arrival dates for products with a single click.

Official Odoo 20 release note

In plain words

When an RFQ's Order Deadline is in the past, a refresh button appears next to it. One click resets the deadline to today and recomputes the expected arrival of every line from the vendor lead times.

Purchase > RFQ with a past deadlineThe refresh button next to the overdue Order Deadline recomputes the expected arrival.

Where to find it

  1. Open an RFQ whose Order Deadline is in the past (shown in red).
  2. Click the refresh icon next to the date.

For users

Late RFQs get realistic arrival dates again with one click.

For developers

New purchase.order.button_reset_date_order(); lines without a vendor keep the same gap to the deadline.

Upgrading from Odoo 19

None.

Change 8 of 9

Total amounts on purchase order sections

EnhancementCommunity

Purchase orders sections and subsections can now show total amounts.

Official Odoo 20 release note

In plain words

Section and subsection lines on purchase orders now show the total amount of the lines they contain.

Purchase > RFQ > ProductsThe Hardware section shows $80.00, the sum of its two lines.

Where to find it

  1. Create an RFQ with sections (Add a section) and products under them.

For users

See the cost of each group of products at a glance.

For developers

order_line uses aggregated_fields="price_subtotal" with options subsections on the section and note one2many widget.

Upgrading from Odoo 19

None.

Change 9 of 9

Vendor quality rate

New featureEnterprise only

View a vendor's quality performance based on quality checks performed on their products.

Official Odoo 20 release note

In plain words

Vendors get a Quality Rate: the share of passed quality checks on their receipts over the last year. It appears as a smart button on the vendor and on purchase orders and opens a quality check report.

Contacts > vendor > MoreQuality Rate on the vendor: 50% of its receipt checks passed.

Where to find it

  1. Validate quality checks on receipts from a vendor.
  2. Open the vendor: Quality Rate smart button (under More if needed).

For users

Pick vendors on quality as well as price and delivery time.

For developers

New quality.check.quality_rate (stored, avg aggregator) and computed res.partner.quality_rate / quality_check_count, restricted to quality users.

Upgrading from Odoo 19

The stored quality_rate column is computed for existing checks during the update.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Purchase: common questions

What is new in Odoo 20 Purchase?

The official Odoo 20 release notes list 9 Purchase changes (4 new features, 5 enhancements). They include Alternatives comparison, Default Incoterm per vendor, End-customer address in portal, Expected arrival date and more.

Are the Odoo 20 Purchase changes available in Community edition?

8 of the 9 changes are in Odoo 20 Community (and Enterprise). 1 is Enterprise only. Each change on this page is labeled with its edition.

Do Odoo 20 Purchase changes affect my customizations when upgrading from Odoo 19?

6 of the 9 changes have something to check when upgrading from Odoo 19, for example Alternatives comparison, Default Incoterm per vendor, End-customer address in portal. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade Purchase to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Purchase, then test your main Purchase flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

By industry

More Odoo 20 release notes

Planning your Odoo 20 move

Want these Purchase changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.