Tuesday, December 2, 2025
23 changes · 19.0
Enhancements to existing features
This update enhances the generation of UBL (Universal Business Language) files for key accounting formats like NLCIUS and XRechnung. By default, new, more reliable helpers are now used, ensuring accurate and compliant UBL file creation for these essential processes. This change improves the quality and reliability of our accounting data exchange.
Original PR description
Since commit 52e984037 we have enabled the new helpers by default for generating BIS3 UBLs. But we didn't enable them in the UBL formats that depend on BIS3 (NLCIUS, XRechnung, Chorus Pro etc). That was to first fix any issues in BIS3 in case the new helpers had broken something. Since the new helpers seem to be working fine for BIS3, we are now making them the default for all the formats that depend on BIS3 as well. We also add comments in the old helper methods to indicate that they are no longer used by default for BIS3 and its extensions. task-none Forward-Port-Of: odoo/odoo#237410 Forward-Port-Of: odoo/odoo#229231
Resolved issues and error corrections
This update resolves an issue where PayPal payments were failing due to missing country information in customer addresses. The fix ensures that a valid country code is always included in address data, preventing errors and improving payment processing reliability. It adds safeguards to handle missing address information gracefully.
Original PR description
When the address step is skipped during checkout or a partner has no country set, the PayPal address formatting would include falsey values (False/None) for country_code, which caused PayPal API requests to fail with 'Country: False' errors. This fix: 1. Adds null checks for state_id and country_code to prevent accessing attributes on missing relationships 2. Ensures only truthy values are included in the address dictionary 3. Adds fallback country code selection (company currency 'US') for public partners to guarantee a valid country code is always sent Fixes #237360 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
This update fixes an issue where product moves after a failed repair didn't correctly reflect the selected failure location. Now, when a quality check fails during a repair, the product's destination is automatically set to the user-specified failure location, improving traceability and simplifying stock adjustments. This ensures accurate tracking of defective products.
Original PR description
Before this commit: ------------------------- - In the Repair module, when a quality check for a product was marked as failed, Even after selecting a failure location, the final product move showed…
Before this commit: ------------------------- - In the Repair module, when a quality check for a product was marked as failed, Even after selecting a failure location, the final product move showed an Incorrect destination location. - Instead of showing the selected failure location, the system displayed another location as the move destination after completing the repair process. Steps to reproduce: ------------------------- 1. Install the Repair and Quality modules. 2. In Quality, create a Control Point with: - Type = Pass-Fail - Control Per = Product - Set at least 1 Failure Location 3. Create a Repair Order for any product and start the repair process. 4. Perform a quality check, set it to Fail, and select a failure location. 5. Open the product moves, the destination location is incorrect (not the selected failure location). Cause of the issue ------------------------- The failure location was not correctly assigned when the quality check failed during the repair process because the logic relied on stock pickings to determine the destination location. However, in repairs, quality checks are performed independently of stock pickings. After this commit: ----------------------- - When a quality check fails in a repair order, the product’s destination location is correctly set to the failure location selected by the user. - This ensures accurate traceability of failed products and simplifies stock adjustments across locations. Task ID: 5254334
This update fixes an issue where the invoice date was unexpectedly changing after a company partner's address was modified. The fix prevents the invoice date from being recalculated when the invoice is in the 'posted' state, ensuring accurate invoice dates. This improves data consistency and reduces potential errors in financial reporting.
Original PR description
**Steps to reproduce** 1.Install Accounting, Contacts, and l10n_cz. 2.Create an invoice with a future `invoice date` and confirm it. 3.Go to Contacts → open the company (res.partner). 4.Modify any…
**Steps to reproduce** 1.Install Accounting, Contacts, and l10n_cz. 2.Create an invoice with a future `invoice date` and confirm it. 3.Go to Contacts → open the company (res.partner). 4.Modify any address field (street, zip, etc.) and save. 5.Return to the invoice → in the chatter, the `date` field has change unexpectedly > Note: The `date` field is not shown in invoice default form view. Add it manually for clearer reproduction. **Issue** - The confirmed invoice `date` changes when updating the company partner’s address. **Cause** https://github.com/odoo/odoo/blob/7a1b27e5985b3b16768bea450c51226ae3659c76/addons/l10n_cz/models/account_move.py#L20-L24 - When creating an invoice, the `date` field is correctly set based on the `taxable_supply_date` while the invoice is in the draft state. After confirming (posting) the invoice, it moves to the `posted` state. - However, when updating the partner address, the `_compute_date` method is triggered again, which calls `super()` and recomputes the `date` field using the standard logic. Since the invoice is already in the `posted` state, the CZ-specific condition is not satisfied, and the `date` gets updated incorrectly. **Solution** - Update `_compute_date` to only call super() for invoices in draft state. - This prevents unwanted recomputation of the `date` on post invoices. opw - 5086961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238045 Forward-Port-Of: odoo/odoo#229513
This update allows HR staff to link portal users directly to employee records within Odoo. Previously, it was difficult to associate these users, now the system displays all portal users in the employee selection field and defaults to showing internal users in search views. This improves data accuracy and simplifies employee management.
Original PR description
- Display all portal users in the user field. - Set the default filter in the search view to show internal users. - Change the placeholder text for the `user_id`. task-5176046 Forward-Port-Of: odoo/odoo#237564
This update fixes an issue where Brazilian vendor bills incorrectly applied sales taxes instead of purchase taxes (like COFINS) due to a flaw in the tax selection process. The fix ensures that the correct tax type is used when calculating taxes for vendor bills within the Brazilian localization, improving financial accuracy.
Original PR description
**Steps to reproduce:** - Install accountant, l10n_br and l10n_br_avatax - Switch to a Brazilian company - In Accounting settings, configure AvaTax (require credentials) - Create a bill - Compute taxes with AvaTax **Issue:** If a tax like "COFINS Incl." should be added, the Sales tax is added instead of the Purchases one, resulting in an incorrect account for the tax line. **Cause:** Brazilian localization allows to use AvaTax for vendor bills, but the external tax feature doesn't take into account the type of the tax when searching for one. It just returns the first one based on the name, the amount and some other domains. **Solution:** Add the tax type in the domain when searching a Brazilian tax. **PR (Community):** https://github.com/odoo/odoo/pull/236930 opw-5044423 Forward-Port-Of: odoo/enterprise#100340
This update fixes a critical issue where purchase taxes for Brazilian accounting were missing from the Odoo system. The changes also correct the tax tags for accurate reporting and compliance with Brazilian tax regulations. This ensures accurate financial reporting for businesses operating in Brazil.
Original PR description
**Issue:** Many purchase taxes for Brazilian localization were missing. Also some taxes have an incorrect tax tag. **PR (Enterprise)**: https://github.com/odoo/enterprise/pull/100340 opw-5044423 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236930
This update fixes a bug where error messages weren't being properly handled during retry attempts, leading to build failures. The change ensures that traceback errors, previously logged as messages, are now correctly processed, and also addresses an OSError related to websocket handling when a browser disconnects. This improves overall system stability and reliability.
Original PR description
The auto-retry is supposed to catch error logs as well as tracebacks. In some cases a traceback is logged as a message, and not as a logger arg, bypassing the replace already in place. This pr simply replaces the traceback string in the message as well. Build error [234619](https://runbot.odoo.com/odoo/runbot.build.error/234619) Also fixes OSError while handling request paused Build error [229906](https://runbot.odoo.com/odoo/runbot.build.error/229906) Forward-Port-Of: odoo/odoo#238133
This update resolves a technical issue preventing PayPal checkout from functioning correctly when address information is incomplete. The fix ensures that valid country codes are always included in API requests, preventing errors and improving the reliability of the PayPal payment process. It adds safeguards to handle missing address details and provides a default country code for public partners.
Original PR description
When the address step is skipped during checkout or a partner has no country set, the PayPal address formatting would include falsey values (False/None) for country_code, which caused PayPal API…
When the address step is skipped during checkout or a partner has no country set, the PayPal address formatting would include falsey values (False/None) for country_code, which caused PayPal API requests to fail with 'Country: False' errors. This fix: 1. Adds null checks for state_id and country_code to prevent accessing attributes on missing relationships 2. Ensures only truthy values are included in the address dictionary 3. Adds fallback country code selection (company currency 'US') for public partners to guarantee a valid country code is always sent Fixes #237360 Description of the issue/feature this PR addresses: When checking for missing country codes during PayPal checkout, the system would include falsey values (False/None) in the address dictionary, causing API validation errors. Current behavior before PR: PayPal API requests fail with 'Country: False' or similar errors when address country or state information is missing or the address step is skipped during checkout. Desired behavior after PR is merged: The PayPal address formatter should gracefully handle missing address information by filtering out falsey values and providing fallback country codes, ensuring all API requests have valid address data. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update automatically verifies the PEPPOL status of partners when invoices are generated from the e-commerce website with automatic invoicing enabled. This ensures consistent and accurate PEPPOL status information, preventing potential issues with batch invoice submissions and improving user experience.
Original PR description
### PURPOSE
- While an order is created from the e-commerce website and The automatic invoice is on.
- The people status of the newly created partner is not verified in invoices.
- This may lead to inconsistent user behavior if users want to send invoices in a batch to peppol.
### SPECIFICATION
- Added the functionality that if
- Invoice is generated from the eCommerce
- Automatic invoice is enabled.
- than auto-verify the peppol status of the partner.
task-5025176This update resolves an issue where users with 'holiday responsible' permissions couldn't create multi-leave requests for employees. The fix ensures these users have the necessary access to read employee data, preventing access right errors. New tests have been added to verify this functionality across various scenarios.
Original PR description
purpose: fix the issue when a user who is `hr_holiday_responsible` creates a multi timeoff request, where an access right error appears because they don't have access on Employee. Steps to reproduce:…
purpose: fix the issue when a user who is `hr_holiday_responsible` creates a multi timeoff request, where an access right error appears because they don't have access on Employee. Steps to reproduce: - login as someone who has `group_hr_holidays_responsible` - create group leaves for employees you are responsible for - create conflicting leaves - you get access right error because you can't read field `private_name` Current behavior: - fixed access right error on creating group leaves for `group_hr_holidays_responsible` - added `test_create_conflicting_group_leave_without_hr_right` for creating conflicting group leave with `group_hr_holidays_responsible` access right - added `test_create_group_leave_form_allocation_mode_without_hr_right` for creating group leave directly from allocation mode (without choosing specific employees) with `group_hr_holidays_responsible` access right - added `test_create_differnt_calendars_group_leave_without_hr_right` for creating group leaves for employees with different calendars with `group_hr_holidays_responsible` access right task-id: 5051859 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a potential issue where the RPCCache database could grow excessively, leading to errors and performance problems. The fix automatically clears the database when a 'QuotaExceededError' occurs, preventing Odoo from consuming excessive disk space. This ensures a stable and efficient web client experience.
Original PR description
Writing in indexeddb can throw a QuotaExceededError (or a DOMError with QuotaExceededError message in firefox). Before this commit, this error was basically ignored, so it wasn't shown to the user,…
Writing in indexeddb can throw a QuotaExceededError (or a DOMError with QuotaExceededError message in firefox). Before this commit, this error was basically ignored, so it wasn't shown to the user, but from that point, all writes in idb would fail with that same error, until a database schema change or an hard reload. This commit handles the error quite radically: when it is thrown, we delete the rpc database to start over. More elaborated strategies could be considered, like removing oldest entries, but we decided to go for the simplest solution. In master, we may introduce a more complex garbage collect strategy as for the offline mode, it might be interesting to keep some entries alive. In 19.0 though, the caches are only used to speed up the webclient, so it's not an issue to clear them completely and start over. We also want to avoid Odoo to use an unreasonable disk space. However, the storage capacity depends on the browser (e.g. 10Gb on firefox, up to 60% of disk space on chrome). To prevent Odoo from taking tens or hundreds of gigabytes on the user's disks, we limit the storage to 2Gb. Task~5217456 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
This update resolves an issue where users were encountering errors when creating filters in spreadsheets with broken data sources. The fix extends a previous safeguard to all filter types, allowing users to safely manage and delete invalid data sources across charts, lists, and pivots, improving spreadsheet usability.
Original PR description
Forward-Port-Of: odoo/enterprise#100887 Forward-Port-Of: odoo/enterprise#98448
This update resolves an issue preventing batch payments from correctly transitioning to 'reconciled' status, particularly when dealing with complex scenarios like early payment discounts and currency differences. The fix ensures accurate reconciliation processing, streamlining the bank reconciliation workflow and improving financial reporting.
Original PR description
In the goal of fixing the batch payments with EPD in the bank rec widget, we discovered another bug that was preventing the batch payments to change their state to "reconciled". This was due to some compute not being triggered again when one of its dependences did change (during another compute). task-4681366 Forward-Port-Of: odoo/odoo#236131 Forward-Port-Of: odoo/odoo#222303
This update ensures that early payment discounts (EPD) are accurately displayed within the bank reconciliation widget when processing batch payments containing invoices. Previously, EPDs weren't correctly reflected, now the system handles partial payments and EPDs associated with invoices, providing a more accurate reconciliation view.
Original PR description
In the bank reconciliation widget, it is now possible to have batch payments containing payments linked to only invoice_ids. Such batch payment, once mounted in the widget, should reflect the invoice or move amounts of its payments, and not only the payments amount. In the case of a payment-invoice combo that's elligible for an early payment discount, the early payment discount should also be displayed in the widget. Example: Invoice of 1000$ with possible EPD of 2%. A payment (with no move) is done (paid in the "early" period) for 980$. The payment is then put into a batch payment. Once in the bank rec widget, when mounting the 980$ batch payment to a statement line of 980$, the widget should display it as a batch payment line of 1000$ and add another 20$ Early payment Discount line. task-4681366 Forward-Port-Of: odoo/enterprise#99728 Forward-Port-Of: odoo/enterprise#83077
This update fixes an issue where Shift + Click within a table cell didn't correctly select text, leading to inconsistent behavior. The fix ensures Shift + Click works as expected with standard browsers, providing a more reliable text selection experience. Additionally, the fix addresses a flickering issue when resizing tables.
Original PR description
**Current behaviour before PR:** Steps to reproduce: - Create a table - Write a sentence in one of the cell - Put your caret somewhere in your sentence (e.g. "He[]llo wold") - Shift + click in the same sentence (e.g. "Hello wor[]ld") The expect result should be "He[llo wor]ld", but it's "[Hello wor]ld". This issue happens because in `onMousedown` method of table_plugin, cursor is set to the starting of `anchorNode`, which leads to wrong selection on shift + click. **Desired behaviour after PR:** This PR ensures that Shift + Click sets the selection in the same way as the default browser behavior. task-5152807 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237499 Forward-Port-Of: odoo/odoo#230716
This update corrects a bug where duplicated subscription deliveries weren't correctly reflecting delivered quantities. The change ensures that delivery dates are properly used to calculate quantities, leading to accurate tracking of delivered items. The fix also removes redundant date updates within subscription pickings.
Original PR description
The use of date_deadline instead of date in the filter messes up the calculation of delivered quantities when you duplicate a delivery. Task: 4910572
This update resolves several bugs preventing the website builder from functioning correctly, particularly when editing blog posts. The changes ensure accurate preview updates and correct behavior when saving or discarding edits, improving the overall user experience.
Original PR description
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
This update fixes a bug in the shop floor component consumption process when tracking components by lot. Previously, the system incorrectly consumed large quantities (e.g., 1000kg instead of 50g). The fix addresses an issue with how lot quantities were handled, ensuring accurate consumption amounts.
Original PR description
**PROBLEM** Component consumption behavior in shop floor is buggy when the component is tracked by lot. When "selecting" a lot to take from, the consumed amount is not correct. (ex, we ask for 50g,…
**PROBLEM** Component consumption behavior in shop floor is buggy when the component is tracked by lot. When "selecting" a lot to take from, the consumed amount is not correct. (ex, we ask for 50g, and it consumes 1000kg). **STEP TO REPRODUCE** 1. create a product. 2. create a bom with: - a component tracked by lot, with kg as product uom, but g as the bom uom. - create a step, during which 50g of the component is consumed. 3. create two lots of the component, with 1kg each. 4. create a MO for the product with the bom. 5. in the shop floor, try consuming the component and select one of the lot as a source. 6. the consumed amount should be 50g, remove the move line created (pencil icon, then remove). 7. recreate the move line, the consume amount will be nonsensical (something like 1 000 000g). **CAUSE** 1. The dialog opened for selecting the lot create a new `stock.quant` record, instead of returning the existing quant for the lot. This quant will have a quantity of 0, impacting the computation we do for the quantity we should take from this quant. 2. The formula for the quantity to take from the quant was : `max(min(remaining_qty, quant.available_quantity), 1)`. The `max(...,1)` doesn't work well when `remaining_qty` is between 0 and 1. For example, when using UoM like we do in the repro steps, `remaining_qty = 50g = 0.05kg`. But instead of taking 50g, because of the max we take 1kg = 1000g. 3. There was a double UoM conversion (`_prepare_move_line_vals` already does the conversion, so we don't need to do it before passing qty_to_take as parameter). opw-5136050 Forward-Port-Of: odoo/enterprise#97005
This update resolves an internal server error that occurred when generating PDF reports for Annual Audit Reports. The fix ensures the correct custom PDF export function is used, improving the reliability of report printing. This prevents disruptions to users generating these important financial reports.
Original PR description
Steps to reproduce: - Go to "Accounting/Review/Audit/Annual Report" and create an Audit Report. - click "Print" -> Internal Server Error This happens when generating the Journal Audit pdf, this report needs to uses the `export_to_pdf` that is defined in its custom handler `account.journal.report.handler`. The solution is to use `dispatch_report_action`, as it will determine which function to use in order to export the pdf for each report. no-task
This update resolves an issue where changes to employee records in the Odoo system weren't consistently triggering related updates. The fix ensures that when you modify employee details, the appropriate changes are reflected correctly, improving data accuracy and consistency. This enhancement impacts the employee management workflow.
Original PR description
purpose: when changing fields of employee in the UI, the `_onchange` of the fields doesn't trigger because it's defined on `hr.version` -added `test_related_fields_on_version_onchange` to check if `_onchange` methods are implemented on `hr.employee` to call the corresponding methods on `hr.version` task-id: 5173389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235093
This update fixes an issue where changing certain employee settings (like insurance or company car) didn't automatically update related sub-fields within the configuration. This resulted in incorrect default values being displayed. The update ensures that changes to master employee settings are correctly reflected in dependent fields, improving data accuracy and usability.
Original PR description
'*' = be, ch purpose: currently when you change the values of fields like insurance or company car the onchange doesn't reflect on the subfields which is the case for cars, insurances, etc. this makes the fields have wrong default values in the configurator - added `_onchange` methods for related fields of `hr_version` in `hr_employee` to call the corresponding `_onchange` in `hr_version` - optimized the method `_compute_l10n_be_mobility_budget_amount` to use binary search instead of linear loop task-id: 5173389 Forward-Port-Of: odoo/enterprise#97472
This update resolves issues where changes to spreadsheet data inputs were unexpectedly lost due to system updates or user actions. The fix ensures that input values are correctly saved and reflected, providing a more reliable experience for users updating sales data. This improves data accuracy and reduces potential data loss.
Original PR description
Currently, the FieldSync record input suffers from two issues: 1) The input value can be reset by parasitic renders While the user is inputting a value, if they did not confirm it and a global render occurs (other user joining the session, dragging the mouse on the grid), the input value will be reset to the one stored in the plugin, therefore erasing the last change of the user 2) In Chrome-based navigators, users can change the value of the input by using their mouse scrolling wheel. Such action *does not* trigger an `onChange` event; which means that the new value is never directly saved. Both issues are addressed in this commit by keeping an internal state inside the component `FieldSyncSidePanel` and ensure this state is properly reflected in the plugin once we stop editing the input. Task-5123069 Forward-Port-Of: odoo/enterprise#101017 Forward-Port-Of: odoo/enterprise#96431