General
1. Company Switching Shortcut
Odoo 17:
* Users had to switch companies through the user interface manually
Odoo 18:
* Switching between companies has been made faster with the introduction of a keyboard shortcut (ALT + SHIFT + U) via the new and improved company switcher.
2. Debug menu
Odoo 17:
Odoo 18:
* Advanced features in Debug Menu, Model can access directly from the Debug menu.
3. Error Popups
Odoo 17:
* Default Error Messages
Odoo 18:
* Error messages are easier to read and allow users to share technical details.
4. Search panel
Odoo 17:
* No Change When clicking the Glass icon in the search bar.
Odoo 18:
* Re-launch a search by clicking on the magnifying glass icon in the search bar.
5. URL
Odoo 17:
* URLs are less user-friendly and harder to modify manually.
Odoo 18:
* These URLs are more user-friendly and can be manually edited for easier navigation, enhancing both usability and SEO for websites. This feature allows users to identify and modify URLs directly, improving the overall experience when sharing or accessing specific records or pages.
6. Tour Revamp
Odoo 17:
* Tours require more manual actions.
Odoo 18:
* Introduces a tour revamp, allowing users to record, manage, and customize onboarding and testing tours with a new, user-friendly interface. Users can also enable or disable these onboarding tours directly from the user menu.
1. Sales
1. Product types and Tracking
Odoo 17:
* Separate physical product types: Storable and Consumable
* Tracking options based on Storable Product (Inventory)
Odoo 18:
* Simplified to a single type called Goods (Widget = Radio button)
* Introduced a new Track inventory field instead of Tracking in inventory
2. Combo products
Odoo 17:
* Combo products only for the point of sales (Combo Choices Page in Product)
* Selecting Combo Products in POS
Odoo 18:
* Available also in e-commerce and Sales - Combo products with multiple options for customers
* Instead of a notebook page and one2many, here we used a many2many widget field Directly
* Selecting Combo products in Sales
* Selecting Combo products on the Website
3. Product Description In Sale Order Line
Odoo 17:
* Product names and descriptions are in separate columns
Odoo 18:
* Product Name and Description Combined into a single column when editing sales order lines
4. Product Prices On Sale Order Line
Odoo 17:
* Prices are automatically recalculated when the quantity changes.
* When the quantity changes, Recompute the original price
Odoo 18:
* Prices remain fixed when modified, even if the quantity changes.
* When the quantity changes, the price does not change
5. Attribute Values Management
Odoo 17:
* After removing them from associated products, you can’t delete used attribute values.
* Products will not automatically updated when new attribute values are added or existing values are modified.
Odoo 18:
* You can delete both used and unused attribute values, after removing them from associated products
* Products are automatically updated when new attribute values are added or existing values are modified.
6. Pricelist in Odoo
Odoo 17:
* Two separate options for configuring pricelists: Multiple and Advanced
* No built-in option to print
Odoo 18:
* Pricelists are now configured in a single, simplified configurator
* The advanced print setup allows exporting pricelists in PDF, CSV, or XLSX formats
* Exports can include detailed comparisons of products and their respective prices
7. Pdf Quote Builder In Odoo
Odoo 17:
* Less flexible; limited customization options
Odoo 18:
* More flexible, allowing custom zones to be added to quotes. You can decide when to use the builder, which documents to apply it to, and add specific text to each quote.
* In 18, we have a separate menu for Headers/Footers where we can manage the Templates for Pdf Quote Builder.
* Each quotation can be customized, allowing you to choose when to use the builder, specify which documents it applies to, and add personalized text to each quote. Additionally, you can configure dynamic fields within the quotation.
2. Purchase
1. Purchase Agreement types
Odoo 17:
* Enable the Purchase Agreements (call for tenders, Blanket Orders)
* No separate option is required for Purchase Alternatives, as the Purchase Order form already includes an 'Alternatives' tab by default, along with the option to link to existing RFQs.
* There is a 'Blanket Order' menu where, when creating an order, you can choose the agreement type. Additionally, you can create custom agreement types beyond just blanket orders.
Odoo 18:
* Introducing the new Purchase Agreement Purchase Template
* Purchase Alternatives, the 'Alternatives' tab and the option to link to existing RFQs will only appear on the Purchase Order form if this feature is enabled.
* The 'Blanket Orders' menu is replaced by a 'Purchase Agreement' menu. Unlike previous versions, you cannot create new purchase agreement types. The agreement type is a selection field with only two options: 'Blanket Order' and 'Purchase Templates.'
2. RFQ Management from Portal
Odoo 17:
* In Odoo 17, customers can view the details of a request for quotation (RFQ) from the customer portal, but there is no option to accept or decline the RFQ from the portal.
Odoo 18:
* In Odoo 18, a new feature has been introduced that allows customers to accept or decline RFQs directly from the portal or via email.
3. Product Tracking using Lot
Odoo 17:
* When assigning lot or serial numbers, the wizard only offers the option to import lot numbers.
Odoo 18:
* A new 'Generate' option has been added alongside the import option, allowing users to automatically generate lot numbers for tracked products during receipt.
3. Invoicing
1. Auto Post Bills
Odoo 17:
* There is no option in Vendors to auto post the bills.
Odoo 18:
* After importing three consecutive bills from a vendor without any changes, Odoo will suggest automatically validating future bills for that vendor. This 'Auto-validate Bills' feature can be enabled or disabled at any time in the vendor's profile.
2. Register Payment in Invoice/Bills
Odoo 17:
* The option to register payments is only available for posted invoices.
Odoo 18:
* It is now possible to register payments on draft invoices and bills directly from the action menu.
3. Sales Tax Price Included/Excluded
Odoo 17:
* The option to indicate whether a tax is included in the price is a boolean field.
Odoo 18:
* It has been upgraded to a selection field, allowing users to set standard sales taxes as either price-included or price-excluded based on a company setting. Users can also specify individual taxes as price-included or price-excluded.
4. Document layout
Odoo 17:
* The Default Document Layout
Odoo 18:
* Three new document layouts were added for more customizations.
5. Legal Note on Taxes
Odoo 17:
* There is no option to add specific legal notes to taxes.
Odoo 18:
* Users can add legal notes to taxes that will be displayed on documents when the tax is applied.
6. Catalog View Of Products
Odoo 17:
* The Catalog view is not available for customer invoices and vendor bills.
Odoo 18:
* This feature has been introduced, allowing users to access the Catalog view for improved management of invoicing processes
7. Journal Types
Odoo 17:
* The available journal types are limited to sales, purchase, bank, cash and Miscellaneous.
Odoo 18:
* A new credit card journal type has been introduced to facilitate the registration of credit card payments.
4. Inventory
1. Dashboard
Odoo 17:
* The default dashboard
Odoo 18:
* The Inventory dashboard has undergone a redesign to enhance user experience.
2. Location
Odoo 17:
* The default locations.
Odoo 18:
* Introduced a new feature to see which locations are empty from the locations list view.
5. Project
1. Subtask Creation
Odoo 17:
* We can see the subtasks in kanban, but it is not possible to create sub-tasks directly from Kanban cards.
Odoo 18:
* A new feature allows users to create sub-tasks directly from the Kanban cards of their tasks, improving task management and organization
6. Point Of Sale
1. Product Creation
Odoo 17:
* Creating or editing products is only possible from the backend.
Odoo 18:
* Users can create and edit products directly from the Point of Sale (PoS) application, streamlining the process.
* When clicking the create product, a wizard will appear to configure the Product.
2. Cash Difference Logging
Odoo 17:
* The opening and closing cash register counts are not logged in the PoS session record.
Odoo 18:
* The opening and closing cash register counts are always logged, providing better tracking and transparency within the PoS session.
3. POS Front End
Odoo 17:
* The PoS frontend design is functional but relatively minimalistic. The interface, while user-friendly, lacks some of the modern UI elements and visual enhancements that improve the user experience.
Odoo 18:
* The PoS front end in Odoo 18 has received a significant design overhaul. The UI is more polished with a clean, modern look, improved iconography, and better color contrasts, making it visually appealing and easier to navigate.
4. Editable Payment Methods
Odoo 17:
* Once a payment is validated, the payment method cannot be edited before printing the receipt.
Odoo 18:
* Payment methods can now be edited before printing, offering more flexibility in managing transactions.
5. Restaurant: Internal Notes
Odoo 17:
* Internal notes must be entered manually for each order
Odoo 18:
* Predefined internal notes can be set up, allowing users to quickly add commonly used notes (e.g., 'No dressing' or 'Emergency') to orders with just a click, streamlining the process.
6. Customer Display
Odoo 17:
* The customer display feature requires the use of IoT devices.
Odoo 18:
* The customer display can now be used on any remote device without the need for an IoT box, offering more flexibility and ease of use.
7. Restaurant: Table Merge
Odoo 17:
* Merging tables is not possible
Odoo 18:
* Tables can be quickly merged to centralize orders, making it easier to manage large groups and combine orders efficiently.
* In Actions, there is a Control button for Transfer/Merge. By clicking this, we can merge or transfer the tables.
7. Website
1. Color Pallets
Odoo 17:
* Limited Colors
Odoo 18:
* The color palette has been updated to reflect current design standards, ensuring a more vibrant and up-to-date appearance.
2. Theme Selection
Odoo 17:
* Default Theme Selection.
Odoo 18:
* The theme selection page has been improved.
* Improved Website Builder
3. Website Layouts for Blogs/Events
Odoo 17:
* Default layout and can customize the blog page only; the blog header customization is not possible.
Odoo 18:
* Additional layout options have been introduced for blog posts, enhancing the overall design. These improvements include customizable header layouts for blog, event, and eLearning pages, allowing for a more tailored and engaging presentation
4. Snippets Library
Odoo 17:
* Snippet library includes several drag-and-drop options, it lacks these enhanced preview and keyword-based selection features.
Odoo 18:
* Over 60 new snippets have been added to the library, along with significant enhancements to snippet selection. Users can now view actual previews of snippets before adding them, making it easier to choose the right one. The new discovery system, which allows snippet selection based on keywords, further simplifies the process. Additionally, users can now replace a dropped snippet with another one seamlessly.
8. Employee
1. Organization chart
Odoo 17:
* Organization Chart with no filters
Odoo 18:
* Organization Chart with filters
2. Skill Types
Odoo 17:
* Default Skill Types
Odoo 18:
* Define colors on skill categories.
3. Department
Odoo 17:
* Default kanban view
Odoo 18:
* Enhanced kanban view
9. Time Off
1. TimeOff Overview
Odoo 17:
* No option to approve or reject timeoff from overview
Odoo 18:
* Can Approve/Reject a leave directly from the overview screen.
2. TimeOff Requests
Odoo 17:
* There is a draft State in time off Requests (To Submit)
Odoo 18:
* Removed the Draft State from Timeoff requests
3. TimeOff Policies
Odoo 17:
* Lacks the ability to handle public holidays separately for different time off categories
Odoo 18:
* A new feature allows public holidays to be included or excluded for specific time off types, providing greater flexibility in configuring time off policies.
* There's an option to control whether a time off type should appear on employee dashboards, providing better customization and visibility of time off types.
9. Recruitment
1. Jobs Menu in the Website
Odoo 17:
* No menu for Jobs in the Website
Odoo 18:
* The jobs page of your website is now included in the menu.
2. Candidates
Odoo 17:
* Managing candidates and applications required a more manual process.
Odoo 18:
* The Candidate model is a new feature introduced to handle multiple job applications simultaneously, offering streamlined processing and better management of candidates.
10. Attendance
1. Automatic check-out and Absence management
Odoo 17:
* There is no option for Automatic check-out and Missing hours
Odoo 18:
* A new feature for automatic check-out and missing hours has been introduced, including settings for automatic check-out and absence management. This functionality helps manage employee attendance by automatically checking out employees at the end of their shift and tracking any missing hours
11. Discuss
1. Configuration
Odoo 17:
* Does not have a dedicated configuration menu with enhanced features.
Odoo 18:
* There are configuration improvements that allow for better notification management and adjustable default settings through the general configuration menu. This provides more control and flexibility for users in managing system behavior.
* Canned Responses now require you to manually select the response for it to be inserted, giving you more control over which responses are used. Canned responses can also be categorized as private or shared, allowing for more flexible use, where private responses are only visible to the user, and shared ones are accessible to a broader group.
2. Mobile Push to Talk
Odoo 17:
* In the channel’s call settings, there's an option to enable Push to Talk. When this is enabled, voice detection gets disabled. However, the UI interaction is more limited, as both options are not simultaneously visible for selection like in Odoo 18.
Odoo 18:
* Mobile Push to Talk has been introduced in the call settings, allowing users to choose between Voice Detection or Push to Talk options.
3. Sub Thread
Odoo 17:
* This feature is not available in Odoo 17.
Odoo 18:
* In Odoo 18, sub-threads have been introduced, allowing for secondary discussions within a channel
4. Copy message link
Odoo 17:
* This functionality is not available in Odoo 17.
Odoo 18:
* In Odoo 18, the copy message link feature allows you to share the content of a message from another thread via a link.
12. Live Chat
1. Visibility
Odoo 17:
* Does not have a Visibility feature.
Odoo 18:
* There is a visibility option for event registration, allowing you to choose between everyone, only logged-in users, or anyone with a link.
2. Events from POS
Odoo 17:
* Does not have a Selling feature for events in POS.
Odoo 18:
* You can sell events directly from the Point of Sale (POS), This feature integrates event sales seamlessly with the POS interface.
13. Maintenance
1. Property Field
Odoo 17:
* No option to add Property field.
Odoo 18:
* Option to create property fields for maintenance tasks.
14. Survey
1. Reward for Quick Answer
Odoo 17:
Odoo 18:
* Improvements in Quick Answer Rewards
2. Scale Type for Questions
Odoo 17:
* There is no Type called ‘Scale’ for questions.
Odoo 18:
* Added a new question type: scale.
3. QR Code for Live session
Odoo 17:
* No QR Code option to join Live Session.
Odoo 18:
* Display a QR code to join a live session.
15. Dashboard
1. Company in Dashboard Configuration
Odoo 17:
* You can’t specify the company in Dashboard Configuration.
Odoo 18:
* Option to define a company for your dashboards.
Odoo 17 v/s Odoo 18: Technical Side Comparison Report
1. Chatter
Odoo 17:
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
Odoo 18:
<chatter/>
2. Tree/List View
Odoo 17:
* Used Tree view.
Given the example below.
<tree editable="bottom" create="false">
<field name="employee_id" column_invisible="1"/>
<field name="filename" column_invisible="1"/>
<field name="finger_id" create="false" edit="false"/>
<field name="finger_template" create="false" widget="binary" filename="filename"/>
</tree>
* Given tree in Actions for tree view
<field name="view_mode">tree</field>
Odoo 18:
* Changed into list view
<list>
<field name="name"/>
<field name="widget_type"/>
<field name="size_x"/>
<field name="size_y"/>
<field name="sequence" widget="handle"/>
</list>
<field name="view_mode">list</field>
3. Changes In Schedule Actions
Odoo 17:
<record id="autovacuum_job" model="ir.cron">
<field name="name">Base: Auto-vacuum internal data</field>
<field name="model_id" ref="model_ir_autovacuum"/>
<field name="state">code</field>
<field name="code">model._run_vacuum_cleaner()</field>
<field name='interval_number'>1</field>
<field name='interval_type'>days</field>
<field name="numbercall">-1</field>
<field name="priority">3</field>
</record>
Odoo 18:
* Removed the numbercall.
<record id="autovacuum_job" model="ir.cron">
<field name="name">Base: Auto-vacuum internal data</field>
<field name="model_id" ref="model_ir_autovacuum"/>
<field name="state">code</field>
<field name="code">model._run_vacuum_cleaner()</field>
<field name='interval_number'>1</field>
<field name='interval_type'>days</field>
<field name="priority">3</field>
</record>
4. Read-Only Decorator
Odoo 17:
* Default Decorators like depends, onchange, constrains, returns, etc.
Odoo 18:
* Added a new decorator readonly.
@api.readonly
def activity_format(self):
return Store(self).get_result()
5. Name Search
Odoo 17:
* _name_search: This method was traditionally used to search a model's records based on the user's input in the UI. It typically returns a list of matching records, but its functionality was somewhat limited and tied to the _name field of a model, meaning it could only search basic name fields.
def _name_search(self, name, domain=None, operator='ilike', limit=None, order=None):
if operator in ("ilike", "like"):
name = AccountTax._parse_name_search(name)
return super()._name_search(name, domain, operator, limit, order)
Odoo 18:
* _search_display_name: With Odoo 18, _search_display_name expands upon the capabilities of _name_search. It allows for more advanced searches and is no longer restricted to just the _name field. This method can provide more flexibility by searching across various fields, improving user experience when interacting with the system's search capabilities.
def _search_display_name(self, operator, value):
domain = []
if operator != 'ilike' or (value or '').strip():
criteria_operator = ['|'] if operator not in expression.NEGATIVE_TERM_OPERATORS else ['&', '!']
name_domain = criteria_operator + [('code_prefix_start', '=ilike', value + '%'), ('name', operator, value)]
domain = expression.AND([name_domain, domain])
return domain
6. Access Rights/Rules
Odoo 17:
* check_access_rights() for access rights and check_access_rule() for access rules. These must be called independently.
self.check_access_rights('read')
self.check_access_rule('read')
* Conditional Return Types: Depending on the parameters passed (like whether checking for read, write, or create permissions), the return types can vary, adding complexity to the code.
article.user_has_access = article.user_permission != 'none' if article.user_permission else False
* _filter_access_rule(): This method filters access based on rules but doesn't integrate access rights checks.
Model._filter_access_rules('read')
Odoo 18:
* check_access(): A single method that handles both access rights and rules. It simplifies access control checks by reducing the number of method calls required, even when dealing with empty recordsets. This ensures that security is enforced consistently without needing separate checks.
record.check_access("read")
* has_access() Method: A new method returns a simple boolean value, making it easier to integrate access checks into the business logic.
display_link = record.has_access('read')
* _filtered_access(): This replaces _filter_access_rule() and _filter_access_rule_python(). The method now checks both access rights and rules in one go, returning an empty recordset if the user doesn't have access to the model.
valid_records = self._filtered_access('write')
7. Translation function _()
Odoo 17:
* The _() function relies on inspecting the caller’s stack, which can lead to occasional issues with language and module resolution.
raise ValidationError(_('Invalid model name %r in action definition.', action.res_model))
Odoo 18:
* The env._() function simplifies translation by directly using the environment’s language property. The LazyTranslate factory also improves efficiency, particularly for lazy translations.
raise UserError(self.env._("You cannot invoice a refund whose linked order hasn't been invoiced."))
8. SQL Operator Change in _search Functions
Odoo 17:
* The internal SQL operator inselect is used in the _search functions. This operator is specific to Odoo and is used for performing checks on lists of values within SQL queries.
* While functional, this approach is less standard and can be harder to read or maintain.
if (operator == '=' and value is True) or (operator == '!=' and value is False):
operator_new = 'inselect'
else:
operator_new = 'not inselect'
Odoo 18:
* Replaces inselect with the standard SQL IN clause. This change simplifies the SQL queries by making them more intuitive and easier to understand.
* Using the IN clause is a more efficient and universally recognized practice in SQL, improving both query readability and performance.
9. Date Granularity in Reporting
Odoo 17:
* Limited to "absolute" date granularities like Year, Quarter, Month, Week, and Day.
Odoo 18:
* Adds more flexible grouping by introducing month_number, quarter_number, and week_number, allowing for date grouping across different years.
* This enhancement in Odoo 18 offers more flexibility and control when working with date-based reports.
* The new granularities can be used in read_group or _read_group to group data by these new date fields (e.g., date_field:month_number).
* You can also filter by specific months, quarters, or weeks in the domain. For instance, ('date_field.month_number', '=', 2) would return all data for February, regardless of the year.
result = self.env["test_new_api.person"].search([('birthday.month_number', '=', '2')])
10. Grouping and Sorting of Related Fields
Odoo 17:
* Related fields had to be stored to be grouped, aggregated, or sorted.
* The group_operator attribute of the field.
Odoo 18:
* It is now possible to group/aggregate/sort by a no-store-related field. It is only possible for those that have related_sudo=True (or compute_sudo=True), but it targets the majority of them.
* Create a new groupable description attribute on the Field class. Also, modify the existing _description_sortable and _description_group_operator to take in account related no-store fields.
self.assertFalse(field_info['foo_id_name']['groupable'])
* The group_operator attribute of the field is renamed into aggregator
allocated_percentage = fields.Float("Allocated Time (%)", readonly=True, aggregator="avg")
11. Deprecation of _flush_search() Method
Odoo 17:
* Utilizes _flush_search() for flushing fields during search queries.
self.env['project.task']._flush_search(task_specific_domain, fields=self.task_specific_fields)
Odoo 18:
* Deprecates _flush_search() and delegates flushing to execute_query(), improving the ORM's internal efficiency and access rights checks.
placeholder_codes = self.env.execute_query(query_account.select(placeholder_code_alias))
12. Rpc Method In js
Odoo 17:
* Used jsonrpc for making RPC calls
import { jsonrpc } from "@web/core/network/rpc_service";
Odoo 18:
* Introduces the more streamlined rpc method, removing the need to handle jsonrpc directly.
import { rpc } from "@web/core/network/rpc";
In summary, the main differences between Odoo 17 and Odoo 18 highlight better functionality and ease of use. With Odoo 18, you can customize quotes more easily, manage combo products, control event registration visibility, and use improved notification settings. These updates make Odoo 18 a valuable upgrade for businesses looking for more flexibility and smoother processes.
To read more about What are the Expected Features in Odoo 18 ERP Software, refer to our blog What are the Expected Features in Odoo 18 ERP Software.