Daily updates from Odoo
Tuesday, April 22, 2025
12 changes · 18.0
New functionality added to Odoo
Adds a custom sales extension for Polo Metriks to manage product templates and additional pricing information on sales orders. This helps tailor Odoo’s sales process to the company’s specific product and pricing workflow.
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
Enhancements to existing features
This update adds payroll support for Belgium’s CCT90 bonus structure, helping employers handle this specific employee benefit more accurately. It updates payroll rules, inputs, reporting, and related data so Belgian payroll calculations and declarations better match local requirements.
Resolved issues and error corrections
Odoo now handles web pages that include an XML-style header when creating link previews. This prevents an error that could block users from saving links in Documents workspaces and other areas that use link previews.
Original PR description
## Details: The function get_link_preview_from_html is a common tool used in many modules, one of them documents. When you add a link on a workspace that response with a content with a xml…
## Details: The function get_link_preview_from_html is a common tool used in many modules, one of them documents. When you add a link on a workspace that response with a content with a xml declaration (ex. "<!--?xml version="1.0" encoding="UTF-8"?-->"), this will raise the next ValueError: "Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration." At the moment that the string is being parsed as a html element, this string has been cleaned, to avoid the issue, we can only remove this xml declaration because this element is only being used to extract information about the page. ## Impacted versions: 18.0 and later ## Steps to reproduce: 1. Go to Documents App 2. Add a link in any workspace with xml declaration (ex. https://www.buffalo.jp/s3/guide/crmm/userguide/99/en/pc_index.html) ## Current behavior: Raise Value Error "Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration." ## Expected behavior: Link should be saved. ### Task OPW-4675813
This fix allows inventory users without administrator rights to validate deliveries for products tracked and valued by lot. It prevents an access-rights error during delivery validation, helping warehouse teams complete normal shipping operations without extra permissions.
Original PR description
### Steps to reproduce: - Create a storable product tracked by lot and lot valuated - Create a lot for 10 units of that product in stock - login a user that is not administrator in inventory - Create and confirm a delivery for 1 units of your product - Try to validate the delivery #### > access right error ### Cause of the issue: During the `_action_done` of the `stock.move` we will need to change the valuated price of the product after done: https://github.com/odoo/odoo/blob/6beb3ea82d75513803ae78f5bc71024313938a97/addons/stock_account/models/stock_move.py#L378 https://github.com/odoo/odoo/blob/6beb3ea82d75513803ae78f5bc71024313938a97/addons/stock_account/models/stock_move.py#L461-L464 However, only admin inventory users have the read access rights to the `stock.valuation.layer` model. opw-4680641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Stock validation now reserves the next move from the same procurement group first, making make-to-stock-order flows behave more like dedicated make-to-order reservations. This helps prevent related stock moves from being overtaken by unrelated demand, improving fulfillment consistency.
Original PR description
this commit makes the validation of stock moves assign next stock move of same procurement group first. This will makes the MTSO moves reservation acts like hard MTO. Task: 4374225 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 fix prevents inventory transfers from stopping too early when goods reach an intermediate stock location. It helps purchase and delivery flows continue to the intended final destination, reducing manual corrections and blocked movements.
Original PR description
Currently we block the push propagation when a move reach its final location. However it causes issue on some cases and it's not really helpful. E.g.of blocked flow - Special location in customer zone. - PO (set the final loc to stock). Arrived in stock don't push to wanted location
This fix ensures Spanish Basque tax reporting files use the correct XML information for LROE 140 freelancer submissions. It helps prevent rejected or incorrect electronic tax filings for affected businesses in Bizkaia.
Original PR description
is_freelancer is not passed, but freelancer is as value to the XML opw-4634677 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
Odoo now handles spreadsheet imports where date columns mix real date cells and text dates in the user's chosen format. This prevents valid imports from failing when tools like Google Sheets automatically convert some dates but not others.
Original PR description
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime…
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime object, which are automatically converted into the `datetime.date`/`datetime.datetime` when the xls(x) file is parsed in python. When an xls(X) file contains at the same time date values under date/datetime objects and under strings with the user format `%d/%m/%Y` (rather than the server format `%Y-%m-%d`), the import was failing with the error `time data '06/30/2025' does not match format '%Y-%m-%d'` This error normally happens when the user tries to do an import with different kind of date formats under strings in the same file e.g. `06/30/2025` and `2025-07-01` and this is understandable that Odoo doesn't know what to do in such a case. But, if you stick to the same format, either only `%d/%m/%Y` either only '%Y-%m-%d'`, Odoo supports it. However the case here is trickier: it's when the file contains at the same time dates under a string format, e.g. `06/30/2025` and under date objects, e.g. `datetime.date(2025, 6, 30)`. Which can happen quite easily, as Google Spreadsheet for instance tends to automatically convert the cells holding a date value into date object. And it's then easy to have a file containing both date objects and strings for date, which looks visually the same in the Google Spreadsheet interface. In addition Google Spreadsheet tends to convert automatically only dates below the 12 of the month because of the american format. e.g. if you set `01/06/2025`, it gets converted into a datetime object if you set `13/06/2025`, it doesn't get converted into a datetime object, the value stays as a string. The goal of this revision is to support to have the possibility of having date values under date objects and string in a user format The problem lied in the fact, during the xls parsing, date objects were converted into strings using the server date format. And then you could finish with data containing both the user format and the server format. The idea is to no longer automatically convert date objects and to support having date objects in the import parsing. And when trying to guess the date/datetime format of the file, date objects are simply ignored, as they do not need to be parsed.
Approval requests can now generate a request for quotation after a seller is added to the product, without requiring users to reset the approval to draft. This removes an unnecessary step and helps purchasing continue smoothly when supplier information is completed later.
Original PR description
-- Context -- When no seller is defined on the product that is included in the approval request, you cannot generate an RFQ. Adding a seller in the product should allow creating the RFQ without re-setting the request to draft. -- Behavior before the fix -- You had to reset the request to draft before being able to generate the RFQ when a seller has been added to the product. -- Behavior after the fix -- You can. There was a missing field in the depends of the compute method for the seller ids. task-4680780
Fixes certificate generation for Argentinian companies when localization modules for other Latin American countries are also installed. This helps affected businesses complete required electronic invoicing setup without conflicts from other country configurations.
Original PR description
Fix certificate generation for AR companies when other LATAM countries are installed. opw-4584457
Fixed an issue where sending customer statements for multiple partners could generate PDFs showing all companies and extra currencies instead of the current company only. This ensures statements display the correct company context, reducing confusion for customers and accounting teams.
Original PR description
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question an…
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question an dopen the generated PDF - All current companies show in the header and other currencies are present ### Cause: When sending to multiple partners, the action is dispatched with to cron_threads so a new `env` is created. This `env` has a key `companies` containing all companies that exist in the DB. When the `_init_options_companies` is called for the report it adds `self.env.companies` to the option ([code](https://github.com/odoo/enterprise/blob/4ef74fd9527a28616bf81c9716d6000aa25b839e/account_reports/models/account_report.py#L1276)). So in the end all companies appear on the report. ### Solution: Add 'forced_companies' in the options before calling the `cron`. The format of 'forced_companies' had to be changed to only contain ids because fields cannot be added in `send_and_print_values` as it's a JSON fields. opw-4635283
Fixes an accounting issue where reconciling a batch payment for multiple vendor bills could mark only one bill as paid while leaving others incorrectly in payment. This ensures payment statuses are updated consistently after batch payment reconciliation, reducing manual follow-up for accounting teams.
Original PR description
**Steps to reproduce:** - Install Accounting - In Bank journal settings, make sure that there's no Outstanding Payments account - Create a bill for a customer - Confirm it - Create a second bill for…
**Steps to reproduce:** - Install Accounting - In Bank journal settings, make sure that there's no Outstanding Payments account - Create a bill for a customer - Confirm it - Create a second bill for the same customer - Confirm it - Go to the bills list - Select the 2 created bills - Create a payment via "Pay" button: * Journal: Bank * Payment Method: Manual Payment * Group Payments: [checked] - Do not validate the payment - Go to "Accounting / Vendors / Payments" - Select the created payment and create a batch - Validate the batch payment => The payment status of both bills is "In Payment" - From Accounting dashboard, go to transactions of Bank journal (reconciliation widget) - Create a new transaction for the previous customer with the amount of the batch payment - In the reconciliation widget, go to "Batch Payments" tab - Select the created batch payment - Validate to reconcile - Check the bills list **Issue:** Only one of the bills has its payment status set to "Paid", the other one staying in "In Payment" status. **Cause:** In the method that checks which account move lines are included in the batch payment, we loop on each linked move line and take the "min" between the remaining amount of the batch payment and the amount of the move line until the remaining amount reaches 0. However, for vendor bills, these amounts are negative and taking the "min" amount returns the remaining amount directly, resulting in only having 1 move line set to reconcile. opw-4595006