Monday, December 1, 2025
21 changes
2 changes
Enhancements to existing features
This update enhances Odoo's tax calculations to properly account for taxes based on volume, such as VAT on sales of goods. This change, requested during Odoo Exp 2025, ensures more accurate tax calculations for businesses using volume-based tax models. It impacts the account_tax_python module and related components.
Original PR description
The use case to cover is when you have a volume based tax. Requested during Odoo Exp 2025. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237434 Forward-Port-Of: odoo/odoo#232146
This update improves the speed of retrieving product information within the Odoo system. By processing multiple attributes and values in batches, the system now completes this task significantly faster – reducing the time from 2.7 seconds to just 0.8 seconds. This change enhances the overall responsiveness of the sales and product configuration processes.
Original PR description
Performing read operations on attributes and values in batch yields a significant performance improvement and is standard practice. Tested with 60 attributes and 8000 values: went from 2.7s to 0.8s (-70%) No task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235170
12 changes
Enhancements to existing features
This update significantly improves the speed of auditing large financial reports. By caching report data and line expansions, users avoid lengthy reloads and blank screens when navigating between reports and their details. A warning banner indicates when data is being refreshed in the background.
Original PR description
When auditing large reports, users often navigate back and forth between the report and its underlying move lines. Each time the user returns to the report, it triggers a full reload, resulting in a blank screen and long wait time making auditing slow and painful. This commit caches the report information, and line expansion rpc calls in disk with validity of 90 minutes. RPC calls are being called asynchronously and report is updated if data changed. While data is being refreshed in the background, cached report is displayed along with a warning banner informing the user that report is being loaded. task-5145462
This update enhances tax reports by allowing labels to be associated with cell values. This solves the issue of using codes in multi-column reports, making it easier to understand and reference data directly within the report UI. It improves the clarity and usability of tax reporting.
Original PR description
Tax reports often denote values by codes. While these are easily added to line names in simple reports, this is insufficient for multi-column reports where every cell corresponds to a code needed for reference. This commit introduces a mechanism to attach specific labels to report cells using a reserved expression prefix: `_cell_label_`. When an expression is named with this prefix (e.g`_cell_label_balance`), its value computed using the 'text' engine is treated as a label for the target expression (e.g `balance`). The label is then displayed next to the cell value in report UI. task-5233075
This update enhances Odoo's automation performance by logging the duration of each action. The logging system now uses increasing log levels based on action duration, helping the Odoo Infra team identify and address slow-running automations. Additionally, statistics on automation run times are now included in server dumpstacks.
Original PR description
The Odoo Infra team wants to be able to track down the base automations that slow down the server, but at the same time they don't want to fill logs with silly data. In this work we refactored the logging to log the run duration, the log level increases with the action duration. The longer the action takes to run, the more severe the log level is. Also as per request of the Infra team, we also included some statistics about base automations in the SIGQUIT dumpstack. At the moment the stats are a mapping action_id: accumulated run duration.
This update enhances the reliability of our website generation process by proactively verifying URLs before sending requests to the website scraper. The system now checks URLs on the IAP server to filter out invalid or unauthorized links, preventing wasted resources and potential errors. This ensures a smoother and more efficient website generation experience.
Original PR description
This PR adds the client side verification of an url for the request we make to generate a website using the website scraper. **The goal is to filter all the unwanted requests (invalid urls, banned urls) before launching the scraper process.** The check is done on the IAP server, and retrieved on the DB. The reason is that we don't want to send a request directly from the db [as this was already discussed](https://github.com/odoo/enterprise/pull/92724). Since the IAP server is also the one that will eventually do the scraping request, it also makes more sense that it is the one to check (to avoid the case where odooDB has access to an URL and IAP server does not).
This update enhances the initial guidance provided to users when running payruns within the Odoo Enterprise system. The previous implementation relied heavily on custom JavaScript and lacked robust testing, leading to potential instability. This change introduces a more structured tour to guide users through the payrun process, improving usability and reducing the risk of errors.
Original PR description
Payruns are currently heavily customized with javascript, and we have weak integration tests. So everytime framework makes a change in the ORM, it is likely that it might break. Such as with this PR https://github.com/odoo/odoo/pull/233635, that lead to this fix https://github.com/odoo/enterprise/pull/99771. Task: 5323872
This update ensures Odoo's Swissdec ELM certification is compatible with version 5.3. It includes key enhancements for payroll calculations, specifically related to French-crossborder workers, retirement regulations, and allowance calculations, improving compliance and accuracy.
Original PR description
This Pull request extends the Odoo Swissdec ELM Certification to the minor version 5.3. By doing so we add the following features : - Telework Percentage declaration for French-crossborder comuters - Adapting to AVS21 regulation, where retired employees can refuse their right to retirement - Adding automatic Child and education allowance calculation - Add the calculation of LPP in % - Allowing the specification of custom employer parts for LAAC and IJM Forward-Port-Of: odoo/enterprise#95518
This update enhances the payroll system by providing specific warnings for employees not included in completed pay runs. Instead of a general alert, users now see a message for each missing employee with an option to add a payslip. This improves clarity and streamlines the process of ensuring all employees are accounted for in payroll.
Original PR description
Replace the global warning for missing employees with a per-employee message. Now, employees not included in a confirmed but not validated pay run show a warning with an option to add a payslip. The message disappears when the pay run is closed. task-5156963.
This pull request focuses on improving the Equity app within Odoo Enterprise. It includes enhanced user interface elements, expanded unit testing for UBO calculations, and resolutions for previously identified issues. These changes aim to streamline the equity valuation process and improve data accuracy.
Original PR description
1. Unit tests for UBO 2. UI/UX improvements 3. Fixes for detected issues task-5078906
This update prepares Odoo to store sales achievement data for faster reporting. Previously, generating reports took a significant amount of time, especially with large sales volumes. By allowing the system to 'materialize' this data, performance will be noticeably improved for sales commission reports.
Original PR description
This commits aims to ease the possibility to materialize the achievements. The achievement table was a report built on the fly. Several commits were introduced to speed up the performances but on big systems with thousands of invoices, reading the achievements takes a few seconds. On big databases, it may be needed to materialized the achievement view to speed up reads. This commit reorganize the code to ease the materialization in a simple override commit. task-5170644 Forward-Port-Of: odoo/enterprise#97268
This update makes the employee benefits and personal information sections more relevant by showing only data applicable to the selected company’s country. Previously, all country-specific fields were displayed, leading to potentially confusing information. This change ensures users see the most accurate and useful data for each organization.
Original PR description
This change improves data relevance and user experience by making the Benefits and Personal Info sections context-aware. Previously, all country-specific fields and benefits were displayed regardless of the selected company or salary structure corresponding country. Now, the Benefits and Personal Info list views display only records related to the selected company’s country, ensuring users see data applicable to that organization’s jurisdiction. In the Benefits form view, the Related Fields section dynamically shows only fields relevant to the selected Salary Structure’s country, preventing the display of irrelevant or non-applicable country fields. task-5152545 (https://www.odoo.com/odoo/my-tasks/5152545)
This update enhances the bank reconciliation process by providing a clearer display of transaction details, statement information, and improved usability. Key changes include a streamlined interface, enhanced communication features, and expanded functionality for handling longer payment references, ultimately improving efficiency and accuracy.
Original PR description
See commits' description Forward-Port-Of: odoo/enterprise#99529
This update automatically notifies users when invoices are canceled due to DGI rejections, preventing unnoticed cancellations and ensuring invoices are corrected promptly. It also allows users to manually update invoice statuses if DGI changes its acceptance, resolving inconsistencies and maintaining accurate invoice records.
Original PR description
Added 3 improvements to the process of updating the state of an invoice in Odoo, according to the state in DGI: **For invoices that have been rejected by DGI:** - Added logic to automatically notify…
Added 3 improvements to the process of updating the state of an invoice in Odoo, according to the state in DGI: **For invoices that have been rejected by DGI:** - Added logic to automatically notify relevant users when an electronic invoice (CFE) is rejected by the DGI and, as a result, canceled in the system. The goal is to ensure that there is always someone responsible who is informed to correct and resend the receipt. - Added logs in the terminal to make the debug easier in case we want to identify rejected invoices. **Particular case of an invoice that had been rejected by DGI but the user somehow fixes it and then DGI accepts it:** - Added logic to verify both DGI state and Invoice state and adjust it accordingly when updating invoice DGI status. - Make 'Update DGI status' button always visible to be able to adjust invoices states. **== Context of the Problem ==** Previously, when Odoo detected that a CFE had been rejected by the DGI, the system proceeded to cancel the invoice automatically. However, this process was carried out silently, without generating any notification. This could mean that if no user or salesperson was actively monitoring the status of the receipts, the cancellation would go unnoticed, resulting in invoices that were never corrected or reissued. For the case of a previously rejected and then accepted invoice, we always thought that 'Rejected' state in DGI was a definite state and could not suffer any change. But recently it has been a case that this state changed, creating inconsistencies in Odoo invoices states as they appear as cancelled. With these changes, the user can adjust the invoices state by clicking 'Update DGI status' button. **== Automatic Notification Logic ==** With the new functionality, every time an invoice is automatically canceled due to a DGI rejection, the system posts a message in the document chatter to report the situation. The logic for determining who is notified is as follows: _Scenario 1: Invoice with Internal Followers_ - If the canceled invoice has at least one internal follower (an Odoo user), the system will perform the following actions: - It will post a message in the invoice chatter. - It will tag (@) all internal followers to notify them directly. _Scenario 2: Invoice without Internal Followers_ - If the invoice does not have any internal followers, the system will search for a more general but relevant audience to ensure that the notification is addressed: - It will post a message in the invoice chat. - It will tag (@) all users who belong to the “Accounting Manager” permission group (technical name: group_account_manager). Task ODOO: #[1362](https://latam-localizations.odoo.com/web?debug=1#id=1362&cids=1&menu_id=88&action=131&active_id=16&model=project.task&view_type=form) Task ADHOC: #[54799](https://www.adhoc.inc/odoo//project.task/54799) Forward-Port-Of: odoo/enterprise#100523 Forward-Port-Of: odoo/enterprise#94502
4 changes
Enhancements to existing features
This update enhances the emails sent for equity transactions and UBO form requests, making them more professional and user-friendly. Specifically, the email design has been modernized, and the ability to send to both subscriber and seller parties has been added for greater flexibility. This improves communication and streamlines processes related to equity management.
Original PR description
This commit improves the emails sent for equity notice and UBO form request. The following improvements are applied: 1. Make the equity/UBO button fixed at the top of the email without being editable for the user (to not mess up the token) 2. Make the rendered email look more odooish (used mail_notification_light) 3. Allow for sending to subscriber and seller at the same time in an equity transaction task-5123366
This update improves the equity tracking application by refining the email sending wizard. The changes include new unit tests for UBO records, UI/UX enhancements for a better user experience, and fixes for previously identified issues. This results in more reliable and user-friendly equity valuation communication.
This update automatically notifies users when invoices are canceled due to DGI rejections, ensuring someone is responsible for correcting and reissuing them. It also addresses a previous inconsistency where rejected invoices could unexpectedly change state, now allowing users to manually update the DGI status and maintain accurate invoice records.
Original PR description
Added 3 improvements to the process of updating the state of an invoice in Odoo, according to the state in DGI: **For invoices that have been rejected by DGI:** - Added logic to automatically notify…
Added 3 improvements to the process of updating the state of an invoice in Odoo, according to the state in DGI: **For invoices that have been rejected by DGI:** - Added logic to automatically notify relevant users when an electronic invoice (CFE) is rejected by the DGI and, as a result, canceled in the system. The goal is to ensure that there is always someone responsible who is informed to correct and resend the receipt. - Added logs in the terminal to make the debug easier in case we want to identify rejected invoices. **Particular case of an invoice that had been rejected by DGI but the user somehow fixes it and then DGI accepts it:** - Added logic to verify both DGI state and Invoice state and adjust it accordingly when updating invoice DGI status. - Make 'Update DGI status' button always visible to be able to adjust invoices states. **== Context of the Problem ==** Previously, when Odoo detected that a CFE had been rejected by the DGI, the system proceeded to cancel the invoice automatically. However, this process was carried out silently, without generating any notification. This could mean that if no user or salesperson was actively monitoring the status of the receipts, the cancellation would go unnoticed, resulting in invoices that were never corrected or reissued. For the case of a previously rejected and then accepted invoice, we always thought that 'Rejected' state in DGI was a definite state and could not suffer any change. But recently it has been a case that this state changed, creating inconsistencies in Odoo invoices states as they appear as cancelled. With these changes, the user can adjust the invoices state by clicking 'Update DGI status' button. **== Automatic Notification Logic ==** With the new functionality, every time an invoice is automatically canceled due to a DGI rejection, the system posts a message in the document chatter to report the situation. The logic for determining who is notified is as follows: _Scenario 1: Invoice with Internal Followers_ - If the canceled invoice has at least one internal follower (an Odoo user), the system will perform the following actions: - It will post a message in the invoice chatter. - It will tag (@) all internal followers to notify them directly. _Scenario 2: Invoice without Internal Followers_ - If the invoice does not have any internal followers, the system will search for a more general but relevant audience to ensure that the notification is addressed: - It will post a message in the invoice chat. - It will tag (@) all users who belong to the “Accounting Manager” permission group (technical name: group_account_manager). Task ODOO: #[1362](https://latam-localizations.odoo.com/web?debug=1#id=1362&cids=1&menu_id=88&action=131&active_id=16&model=project.task&view_type=form) Task ADHOC: #[54799](https://www.adhoc.inc/odoo//project.task/54799) Forward-Port-Of: odoo/enterprise#100523 Forward-Port-Of: odoo/enterprise#94502
This update improves the look and feel of the website builder's floating toolbars by unifying their design and functionality. This creates a more polished and consistent user experience, making the editor easier to use and more professional-looking.
Original PR description
<h1><strong>Standardize Floating Toolbar Layout </strong></h1> <p>This PR unifies the look and feel of the floating toolbars inside the website builder.<br> Over time, subtle inconsistencies slipped…
<h1><strong>Standardize Floating Toolbar Layout </strong></h1> <p>This PR unifies the look and feel of the floating toolbars inside the website builder.<br> Over time, subtle inconsistencies slipped in — animation dropdowns looked different from font popovers, highlight pickers used custom layouts, scrollbars behaved differently depending on the browser, and sublevel options in highlight configuration had no hierarchy.</p> <p>This work brings all those elements together into <strong>one cohesive design</strong>, improving usability and giving the editor a more mature, polished visual identity.</p> <hr> <h1><strong>Key Changes Before and After </strong></h1> 1. Animation Dropdown Styling <img width="290" height="290" alt="image" src="https://github.com/user-attachments/assets/35f31160-1ece-4bc6-9d2a-6ac055ef80ca" />|<img width="290" height="290" alt="image" src="https://github.com/user-attachments/assets/5cf42575-cb6b-4480-a665-505aeb022f24" /> 2. Highlight Picker Grid & Scroll Behavior <img width="270" height="299" alt="image" src="https://github.com/user-attachments/assets/da732527-03ea-42b0-8a46-514eabfa66b0" />|<img width="269" height="304" alt="image" src="https://github.com/user-attachments/assets/9a55eba5-7c2f-4441-9699-847e276938aa" /> 3. Highlight Configurator Sublevels <img width="266" height="123" alt="image" src="https://github.com/user-attachments/assets/5aa7422c-e07c-476f-a770-aa3290cdd728" />|<img width="271" height="125" alt="image" src="https://github.com/user-attachments/assets/35a80c61-ce23-45f8-af36-ea6a6709a10e" /> 4. Row Labels alignment <img width="312" height="231" alt="image" src="https://github.com/user-attachments/assets/4d014c03-1e81-44eb-8980-69f7cd065577" /> <img width="305" height="228" alt="image" src="https://github.com/user-attachments/assets/7056700e-71a2-4b05-b6ae-a07d7fec5b23" /> <hr> <h1><strong> What This PR Solves</strong></h1> <h3><strong>Before</strong></h3> <ul> <li> <p>Floating toolbar components each had their own styling quirks.</p> </li> <li> <p>The animation dropdown looked visually disconnected from other popovers.</p> </li> <li> <p>Highlight picker used a custom popover with inconsistent scroll behavior.</p> </li> <li> <p>Nested highlight options lacked indentation or visual hierarchy.</p> </li> <li> <p>Font size selector didn’t use the system font.</p> </ul> <h3><strong>After</strong></h3> <ul> <li> <p>All floating toolbar dropdowns now share a <strong>standardized design</strong>.</p> </li> <li> <p>Animation options match the layout and behavior of the <strong>font style popover</strong>.</p> </li> <li> <p>Highlight picker now uses <code inline="">dropdown-menu</code> styling with consistent scrollbars.</p> </li> <li> <p>Sublevel rows in highlight configurator now show a clear hierarchy.</p> </li> <li> <p>Font size selector uses system fonts for typographic consistency.</p> </li> <li> <p>Scrollbars are thin, predictable, and uniform.</p> </li> </ul> <hr> <h1><strong> Technical Breakdown</strong></h1> <h3><strong>1. Unified Dropdown & Popover Styling</strong></h3> <ul> <li> <p>Added thin-scrollbar styling at the web level for consistent behavior.</p> </li> </ul> <h3><strong>2. Floating Toolbar Awareness</strong></h3> <ul> <li> <p>Introduced <code inline="">dropdownClass</code> logic to let floating toolbars override default select styling.</p> </li> <li> <p>Removed the <code inline="">o-hb-select-dropdown</code> class when not needed to match the font popover.</p> </li> </ul> <h3><strong>3. Sublevel Rows in Highlight Configurator</strong></h3> <ul> <li> <p>Added <code inline="">hb-row-sublevel-1</code> to represent nested highlight styles.</p> </li> <li> <p>Updated <code inline="">--o-hb-row-bg-color</code> to align with sidebar styling and improve contrast.</p> </li> </ul> <h3><strong>4. System Font in Font Size Selector</strong></h3> <ul> <li> <p>Font size preview now uses the system font defined in CSS variables.</p> </li> </ul> <h3><strong>5. Improved Test Coverage</strong></h3> <ul> <li> <p>Ensures highlight picker grid scrolls correctly.</p> </li> <li> <p>Confirms animation dropdown matches the font popover visually.</p> </li> <li> <p>Verifies correct indentation of nested highlight configurations.</p> </li> </ul> <hr> <h1><strong>Affected Modules</strong></h1> <ul> <li> <p><code inline="">website</code></p> </li> <li> <p><code inline="">web</code></p> </li> <li> <p><code inline="">html_builder</code></p> </li> <li> <p><code inline="">html_editor</code></p> </li> </ul> <hr> <h1><strong>Task</strong></h1> <p><strong>task-5075191</strong></p>
1 change
Enhancements to existing features
This update enhances the user experience by providing clearer placeholders for Peppol identifiers and automatically verifying this information when key data changes. A new feature has been added specifically for Belgium, leveraging the VAT number to streamline the Peppol identifier process through the company registry endpoint. This improves data accuracy and simplifies integration for Belgian businesses.
Original PR description
This commit improves the UX by displaying more intuitive placeholders for the peppol identifier. The peppol information is also automatically verified when important data changes. It also adds a special case for Belgium in which we try to use the vat number as the peppol identifier with the company registry endpoint. task: 5172378
2 changes
Enhancements to existing features
This update enhances the way users manage currencies within Odoo. It now allows searching for both active and inactive currencies, and provides a toggle in the mobile kanban view to easily switch between currency states. This simplifies currency management for users and improves data accessibility.
Original PR description
This commit does 2 things: 1. In account.move form view, when the user click on search more of the currency, they would only see active ones they can then show inactive currencies using filters 2. The kanban view of the currency now shows a toggle which can toggle between active and inactive states for the currency so that the users on the mobile view can easily toggle through kanbans without having to go to form view task-5354516 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures Odoo correctly handles German B2G electronic invoices (XRechnungen). It adds a mandatory 'Leitweg-ID' to the invoice format, directing invoices to the appropriate government entity as required by German regulations. This improves compliance and accuracy for transactions in Germany.
Original PR description
*= l10n_account_edi_ubl_cii_tests For B2G transactions in Germany, the Leitweg-ID is a mandatory routing identifier to direct the invoice to the correct public entity. Adding this Leitweg-ID for the UBL syntax. task-5194484 Description of the issue/feature this PR addresses: For electronic invoicing in Germany, for B2G transactions, the Leitweg-ID is a mandatory routing identifier to direct the invoice to the correct public entity. We want to add this identifier for the XRechnung format. Current behavior before PR: The Leitweg-ID is not present in the UBL xml format. Desired behavior after PR is merged: The Leitweg-ID is added in the header of the invoice in the cbc:BuyerReference tag. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr