Daily updates from Odoo
Monday, January 26, 2026
30 changes
4 changes
Enhancements to existing features
This update makes the payment screen in the Point of Sale module more user-friendly by increasing the font size of the 'amount due' and 'amount by guest' displays. This improves clarity for staff when processing payments and ensures accurate amounts are clearly visible to customers.
Original PR description
Little improvement of the font size of amount due and amount by guest on the payment screen. task: 5473324 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243733
This update introduces a new service to simplify remote debugging of IoT boxes experiencing issues. Users can now easily grant support access through a form on the 'IoT Box is down' page, enabling faster troubleshooting and resolution. This enhancement improves the overall support experience for our customers.
Original PR description
We add a separate service that hosts a simple http server with a controller to start Tailscale. We make this controller available through a form on the "IoT Box is down" page, so that clients can easily grant access to the support to get help. Task: 5871829
This update improves how price labels are generated within Odoo, specifically in the product pricing module. The addition of a new method allows for more flexible and customizable formatting of price labels, ensuring consistent and accurate presentation of pricing information. This change enhances the user experience and data clarity for price-related features.
Original PR description
Add `_get_price_label_base_str()` method in order to exend it @Tecnativa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243861
This update optimizes the way Odoo generates reports by grouping related database queries. Previously, each report filter triggered a separate query, which was slow. Now, multiple related filters are processed together, significantly reducing report generation times. This change improves the speed of key reports like the Generic Balance Sheet.
Original PR description
Before this commit, the 'domain' engine was never batched: one expression to evaluate caused one SQL query to be run just for it. With this commit, we group domains that could be evaluated together. Essentially, when we have domains targetting the same many2one field of account.move.line (typically account_id, with conditions like 'account_id.code' or 'account_id.account_type'), we run only one SQL query for all of them, targetting all the move lines according to the report filters. Then, we iterate on its result for each domain to evaluate. When iterating over the results, we filter the ones we keep by searching separately on each traversing model (in our example, account.account), to isolate the ones that are actually targetted by each expression. Tested on our prod. With this, opening the Generic Balance Sheet goes from 1min 35s to 36s. opw-5130725 Forward-Port-Of: odoo/enterprise#105068 Forward-Port-Of: odoo/enterprise#101725
2 changes
Enhancements to existing features
This update ensures continued functionality for Danish VAT (Nemhandel) integration by switching to a new directory lookup method (IAP) due to the discontinuation of the previous CNAME lookup. Additionally, the code has been updated to align with Peppol standards for document type support, ensuring compatibility and stability.
Original PR description
We need to switch the lookup on the directory to NAPTR, as the CNAME one is discontinued on January. We now go through IAP to do the lookup. It's also ensuring _check_document_type_support has always the same format as the super() coming from Peppol. task-4486039 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240203
This update improves how product prices are displayed in Odoo. A new method, `_get_price_label_base_str()`, has been added to the product pricelist item model. This change allows for more flexible and customizable formatting of price labels, ensuring consistent and accurate presentation of product costs.
Original PR description
Add `_get_price_label_base_str()` method in order to exend it @Tecnativa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243861
1 change
Enhancements to existing features
This update expands Odoo's language support to include Spanish, recognizing the significant number of Spanish speakers. By adding Spanish translations, we improve the usability of Odoo for a wider range of customers and users. This enhancement aligns with our commitment to global accessibility.
Original PR description
The official language is English, but Spanish is spoken by ~41 million. task-5247124 Forward-Port-Of: odoo/enterprise#105246
16 changes
Enhancements to existing features
This update ensures Odoo correctly handles the new 11% and 21% VAT rates introduced in Romania's updated tax laws. By adding necessary tax mappings, the system now accurately reflects these changes, ensuring proper accounting and fiscal position calculations.
Original PR description
The new 11% and 21% taxes introduced with the updated Romanian VAT law were added with this commit https://github.com/odoo/odoo/commit/2026212d0f7ffc217be3c6a2ff2abe5288c18afb , but some tax mappings were missing. This commit completes the setup by adding the required tax mappings, ensuring the new rates work correctly with fiscal positions. task-5480159 Forward-Port-Of: odoo/odoo#245050 Forward-Port-Of: odoo/odoo#243452
This change updates the source of lead mining data within Odoo from Clearbit to Dun & Bradstreet. This aligns with existing data usage for partner autocomplete and ensures we're leveraging a reliable provider for improved lead insights. This update is part of a broader IAP migration.
Original PR description
Before this commit: - Lead mining data was fetched from `clearbit` provider on IAP which is now going to be removed for discovery service After this Commit: - Data will now be fetched from `dun_and_bradstreet` provider on IAP which we are already using for the `partner_autocomplete` IAP PR: https://github.com/odoo/iap-apps/pull/1274 task-4873238 Forward-Port-Of: odoo/odoo#245474 Forward-Port-Of: odoo/odoo#235521
This update enhances the reliability of electronic invoice synchronization by moving tracking of last fetched dates from configuration settings to dedicated fields within the company record in Odoo. This change improves performance and simplifies future maintenance, ensuring invoices are processed correctly.
Original PR description
To store the last fetched date in stable to allow for synchronization, config parameters were used. In master, these are now replaced with dedicated fields on the company model for better performance and easier maintenance. This commit adds dedicated fields on res.company for einvoice and earchive dates. task-5865683 Upgrade PR: https://github.com/odoo/upgrade/pull/9315
This update adjusts the font size of the 'amount due' and 'amount by guest' displays on the payment screen within the Point of Sale module. This enhancement improves readability for staff processing payments, leading to a smoother and more efficient customer checkout experience.
Original PR description
Little improvement of the font size of amount due and amount by guest on the payment screen. task: 5473324 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243733
This update simplifies the user experience by changing all 'Cancel' buttons in Odoo to 'Discard'. This clarifies the button's function – whether it closes a dialog or sets a record's status – and avoids potential user confusion.
Original PR description
Purpose ======= Rename all the "Cancel" buttons in wizards/modals/dialogs to "Discard". Specification ============= The "Cancel" label can be confusing for new users as they don't actually know if clicking on "Cancel" will close the wizard/modal/dialog or set the state/stage of the record to "Cancelled". "Discard" is preferred as it does not have this confusing connotation. => If clicking on the cancel button actually changes the state/stage of a specific record to "Cancelled", keeping the "Cancel" label, else changing the label to "Discard". Task-5172291
This update changes the label of 'Cancel' buttons in various Odoo wizards and dialogs to 'Discard'. This simplifies the user experience by removing potential confusion about whether the button closes the window or modifies the record's status. This aligns with best practices for clarity and usability.
Original PR description
Purpose ======= Rename all the "Cancel" buttons in wizards/modals/dialogs to "Discard". Specification ============= The "Cancel" label can be confusing for new users as they don't actually know if clicking on "Cancel" will close the wizard/modal/dialog or set the state/stage of the record to "Cancelled". "Discard" is preferred as it does not have this confusing connotation. => If clicking on the cancel button actually changes the state/stage of a specific record to "Cancelled", keeping the "Cancel" label, else changing the label to "Discard". Task-5172291
This update makes it easier to create all-day events in the calendar by allowing users to click the date header, mirroring the Google Calendar experience. Previously, users had to click a specific row, and this change addresses a usability issue while also refining the event placement logic to ensure accurate time settings during drag-and-drop operations.
Original PR description
Add the option to create all day events by clicking the date header, similar to google calendar. This was previously doable by clicking the unlabeled 'all day' row below the header. Task-5421331
This update modifies the button labels in sales order emails to 'View Quotation' instead of 'Sign & Pay Quotation' and similar terms. This change reduces potential customer confusion and encourages them to easily access the order details.
Original PR description
Change the label button to view SO in email from "Sign & Pay Quotation" and similars to "View Quotation", as they are a little bit too engaging and can block the customer from actually clicking on it. task-5379535
This update enables VoIP calls to proceed without requiring a microphone when calls are automatically redirected to a desk phone. This improves the user experience for desk phone calls by eliminating unnecessary microphone prompts. Additionally, the commit addresses a bug where users were stuck in an in-call screen after rejecting microphone usage, ensuring calls terminate correctly.
Original PR description
(Originally started at https://github.com/odoo/enterprise/pull/105183 in preparation of https://github.com/odoo/enterprise/pull/103404, those were replaced by this one for part 1 and…
(Originally started at https://github.com/odoo/enterprise/pull/105183 in preparation of https://github.com/odoo/enterprise/pull/103404, those were replaced by this one for part 1 and https://github.com/odoo/enterprise/pull/105217 for part 2 (not done yet))
Main goal of this part 1: allow no-microphone calls when auto-redirect (desk phone)
When a user calls someone and that their profile is configured to use their desk phone (in which case it will call the desk phone and then call the callee to redirect them to the desk phone call), it simply did not make sense to ask for the microphone: it won't be used. This commit makes it so the call proceeds without microphone so it can be automatically redirected immediately.
Then needed commit to fix related things:
[FIX] voip: properly leave in-call after all UserMedia errors
Steps to reproduce:
- Call someone via the softphone
- When asked, reject the use of the microphone
- An error appears, close it
=> You are now on the in-call screen and you have no way to leave it
even though the call is terminated.
This cames from a combination of [1] and [2]. The parent commit from
here provides some additional details: `activeSession` is not set at
the same place anymore (which is wanted to ask the microphone before
reaching the in-call screen), but because of [2] it ends up being set
while it should not. See extra details below.
This commit takes the opportunity to fix two other related issues:
- When calling, if the microphone was rejected (but existing), it
used to make a traceback before [1]. After [1], it overrode the error
indicating the problem by another one. This originated from [2] which
blocked "NotAllowed" microphones, ignoring the other causes and
ignoring the fact the traceback occurred because all the "invite"
calling stack was not properly awaited/guarded. Now, after [1],
everything is properly awaited/guarded so this can simply be removed.
As a bonus, we mark all microphone errors already handled so they are
not removed by another less understandable error later.
- Kinda the same thing and actually found by [1] too: when *accepting*
a call, microphone issues were shown but then overridden by less
understandable error messages too. This is now fixed the same way.
[1]: https://github.com/odoo/enterprise/commit/942f32316ab02d8c739fe7fdd5ec2bdde472a68e
[2]: https://github.com/odoo/enterprise/commit/6570a9735de62130b6451202fb33fac70a0e7901
[FIX] voip: properly access voip Session during UserMedia failure
Commit [1] changed quite a lot of things when it comes to call creation
and acceptation, sip session and call record creation order, etc. The
problem here is due to a particular change: before, the `activeSession`
was set before trying to `invite`/`accept`. It is now only set before
for `accept`, but not for `invite`. This makes it so that rejecting the
microphone during call acceptation works but rejecting the microphone
while trying to call not work. Indeed the `hangup` call being done on
microphone access check failure, it needs the `activeSession` to be set.
This resulted in the call (and its record) not being updated as we wish,
but terminated on SIP.js side.
However, simply restoring the `activeSession` being set earlier would
not be ideal: it came with the advantage of not starting the in-call
screen and dial ringtone before the microphone was actually accepted
when trying to call.
Instead this commit makes it so the VoIP Session object is passed
through SIP options objects and then accessible in the UserMedia failure
callbacks. Maybe using the VoIP Session object inside a callback used by
SIP.js to configure the inner SIP session is not ideal but it can always
be improved later.
Note: after calling and blocking the microphone, you are stuck on the
in-call screen after discarding the error, this will be fixed in another
commit.
[1]: https://github.com/odoo/enterprise/commit/942f32316ab02d8c739fe7fdd5ec2bdde472a68e
[IMP] voip: simplify `mediaStreamFactory` definition
Instead of having a getter returning a function, make that function part
of the `UserAgent` object directly (and pass it (bound properly) to
the SIP.js library).
[FIX] voip: convert bad call to `triggerError` to new API
Commit [1] introduced a call to VoIP's `triggerError` but used the old
API, that was changed at [2].
Steps to reproduce:
- Make a call to someone without a microphone on your computer (not
blocked by the browser: disabled on the OS side) (or tweak
`mediaStreamFactory` to simulate that).
=> The error message contains no helpful information.
This commit uses the right API to display the error correctly.
[1]: https://github.com/odoo/enterprise/commit/942f32316ab02d8c739fe7fdd5ec2bdde472a68e
[2]: https://github.com/odoo/enterprise/commit/49e1595f31c9f8a23d9b18a33b859d3d01221024
task-4947771This update enhances the softphone's keypad search functionality by allowing users to navigate suggestions using the up and down arrow keys. Additionally, the softphone has been redesigned for a more consistent user experience, improving focus management and overall usability. This change simplifies the process of finding and interacting with the softphone.
Original PR description
While using the keypad search input, the user can now navigate the potential suggestion + more buttons using the up/down keys of their keyboard. Also: [IMP] voip: improve softphone keyboard…
While using the keypad search input, the user can now navigate the
potential suggestion + more buttons using the up/down keys of their
keyboard.
Also:
[IMP] voip: improve softphone keyboard management
Make the softphone closer to a dialog and other overlay elements of the
Odoo webclient:
- Now trap the focus inside the softphone (using tab cycles inside the
softphone itself).
- Make sure event handlers of the home screen menu in enterprise are not
in conflict (e.g. the next commit after this one will allow using
up/down to navigate keypad search results, the home screen should not
mess with that).
- The Escape key now allows to hide the softphone.
[IMP] voip: prevent focusing the backspace button
It is never useful to focus the keypad search's backspace button using
the keyboard: you would have to tab your way through the search input
itself anyway, in which case it is easier to use the backspace key on
your keyboard instead of trying to use the UI one.
Doing this, this also allows to focus the first search result with one
tab press while inside the input, instead of having to go through the
backspace button.
And potential follow-up at https://github.com/odoo/enterprise/pull/105047
task-5441808This update streamlines the accounting process for Ecuadorian businesses within Odoo. It simplifies expense categorization by consolidating accounts and adding a new account for specific benefits, while also preventing unnecessary reconciliation for income-related expense accounts. This improves accuracy and efficiency.
Original PR description
Improve the distribution of expense and cost of revenue accounts in Ecuadorian localization We avoided not creating subcategories of expenses by eliminating the group called "Other employee benefit plan expense", which generated duplicity in the accounts. We fixed this by merging the accounts into the main "Employee benefit plan expense" group. Additionally, the account "Other employee benefits' was added to record any other benefits granted directly by the Ecuadorian companies. This ensures a better organization of the accounting setup. Mark as non-reconcilable the expense accounts (salaries and wages, travel expenses, contributions, etc) to avoid unnecessary reconciliation processes, these accounts are income statements and they are not accounts payable/receivable, therefore, they are closed at the end of the accounting period ### opw-4846355 Forward-Port-Of: odoo/odoo#208047
This update improves the website's helpdesk slides forum by updating how content is targeted. Previously, the system relied on links (hrefs) for location, which is now unreliable due to translation features. This change ensures the forum content remains accessible and correctly displayed.
Original PR description
`href` cannot be used anymore as an xpath expression because it is now translatable. We target a specific class instead. task-3626918
This update simplifies the appraisal campaign wizard by removing unnecessary fields for most users. Specifically, access to certain manager and company fields has been restricted, enhancing usability and reducing complexity. This change improves the overall user experience for appraisal management.
Original PR description
Some changes have been implemented in the UX for the appraisal campaign wizard, such as removing the mode field and hiding the manager field for non administrator/Officer users, as well as hiding the company,coach,and manager fields from the search employee view.
This update improves the employee contract workflow by intelligently hiding the 'New Contract' button when it's not relevant. Specifically, it prevents users from creating a new contract if the start date is missing, the employee only has one version, or the employee hasn't been created. This streamlines the process and avoids unnecessary actions.
Original PR description
- added a condition to hide New Contract button if contract start date is empty and the employee only has 1 version or if the employee is not created task-id: 5075255 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the employee contract creation process in the Odoo Enterprise system. Specifically, a new condition now prevents users from creating a new contract if the start date is missing and the employee has only one version or hasn't been fully created. This streamlines the workflow and avoids potential errors.
Original PR description
- added a condition to hide New Contract button if contract start date is empty and the employee only has 1 version or if the employee is not created task-id: 5075255
This update enhances the user experience within the Odoo Discuss meeting view by increasing the size of key buttons and refining the visual design. Specifically, the layout and button styling have been adjusted for better usability, along with smaller avatar images and a modernized card name appearance.
Original PR description
- bottom buttons in meeting view are bigger - layout buttons in meeting view are moved with side meeting actions - side meeting actions uses non-bg visual - meeting bottom buttons now have hover effect Also makes these other UI changes to discuss calls: - card name has text-shadow instead of dark bg color - avatar img size has been reduced (100px to 80px, was too big) Task-5462123 Before / After <img width="959" height="644" alt="Screenshot 2026-01-02 at 18 16 50" src="https://github.com/user-attachments/assets/b2bd4128-c298-4bfe-9843-4ff9aa2a7595" /> <img width="954" height="639" alt="Screenshot 2026-01-02 at 18 01 24" src="https://github.com/user-attachments/assets/5b954d86-e65e-4c97-8485-9c62200f60b0" /> Forward-Port-Of: odoo/odoo#241924
4 changes
Enhancements to existing features
This update ensures continued functionality for our Danish Nemhandel integration. We’ve switched to a new lookup method (NAPTR) as the previous CNAME method is no longer supported. This change guarantees seamless data retrieval and avoids potential disruptions.
Original PR description
We need to switch the lookup on the directory to NAPTR, as the CNAME one is discontinued on January. We now go through IAP to do the lookup. It's also ensuring _check_document_type_support has always the same format as the super() coming from Peppol. task-4486039 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240203
This update enhances Intervat integration by automatically refreshing refresh tokens every two days, ensuring continuous connection. It also addresses a key issue for accounting firms, allowing them to correctly submit VAT returns using their VAT number instead of the client's company number. A new setting has been added to manually close the connection if needed.
Original PR description
### 1) Refresh Token & Cron Intervat API's provide use both access & refresh tokens. As long as we keep a valid refresh token, we can keep the connection opened by requesting a new refresh token.…
### 1) Refresh Token & Cron Intervat API's provide use both access & refresh tokens. As long as we keep a valid refresh token, we can keep the connection opened by requesting a new refresh token. Currently, we force the connection to close after 4 hours, but it's too short. This commit goes to the opposite way, and keep the connection opened as long as the user wants. As we need to keep a valid refresh token, we add a cron who execute once each 2 days to fetch new refresh tokens. Also, to prevent being stuck, add a new button in res settings to manually close the connection. ### 2) Accounting firm When submitting vat return to Intervat API, we have 2 situations: 1. The user submit his own declaration 2. An accounting firm submit the declaration for the client The current implementation works nicely with situation 1, but not 2. The problem is when starting the authentication proccess, we give Intervat a company number, the current company number. But when an accounting firm is set on the company, we should use the VAT number of the firm instead of the current company, as it will be an accountant from the accounting firm who will submit the return. So this commit try to find the accounting firm VAT before the current company VAT for the authentication proccess. Also, add a new settings in Intervat settings to change the accounting firm from there. ### 3) Small fixes Small fixes done for corner cases, see commits messages. task-5420287,5500052,5495079
This update improves how product prices are displayed in Odoo by adding a new method. This allows for more flexible and customizable price label formatting, ensuring consistent and accurate pricing information for customers. This change was approved through a legal agreement and is a standard improvement to the product.
Original PR description
Add `_get_price_label_base_str()` method in order to exend it @Tecnativa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243861
This update enhances the Point of Sale interface by providing clear visibility into LNA permission status. A new button in the navigation bar displays the current status and opens a popup with detailed information, allowing users to quickly understand access rights. This improves transparency and streamlines operations related to LNA permissions.
Original PR description
Before this commit it was not possible to know if LNA permission was granted, denied or not yet granted from the POS interface. This commit adds a button in the navbar to show the current LNA status and open a popup with more information. taskId: 5874947
3 changes
Enhancements to existing features
This update expands Odoo's language support to include Spanish, recognizing the significant number of Spanish speakers. Enabling Spanish translations improves usability and accessibility for a wider range of users. This enhancement aligns with Odoo's commitment to global business solutions.
Original PR description
The official language is English, but Spanish is spoken by ~41 million. task-5247124
This update expands Odoo Enterprise's language support to include Spanish, recognizing the significant Spanish-speaking population. Enabling Spanish translations improves usability for a wider customer base and aligns with global market needs. This change enhances the overall user experience for Spanish-speaking users.
Original PR description
The official language is English, but Spanish is spoken by ~41 million. task-5247124
This update simplifies how businesses can customize event registration pages. By separating the registration logic, developers can now easily inherit and modify the underlying system using the 'prepare' method, leading to more flexible and tailored event experiences. This change enhances the extensibility of the website event module.
Original PR description
Since this controller returns raw markup, it is impossible to inherit. By splitting the controller `registration_new`, allows to manage custom developments with the inheritance of the prepare method instead. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr