Wednesday, January 15, 2025
25 changes · 18.0
Enhancements to existing features
This update lets teams run Odoo's data obfuscation command in automated scripts without needing a manual confirmation step. It reduces friction for operational workflows such as testing, staging refreshes, or repeatable maintenance processes.
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
Resolved issues and error corrections
Avatar profile cards now use better colors and rounded edges in dark theme, making status indicators, borders, and text easier to see. The light theme remains essentially unchanged, so this mainly improves readability and polish for users who prefer dark mode.
Original PR description
- im status background was white in all themes, this is now the card color in all themes. - avatar card color was too grey in dark theme, which made reading text content in card hard. This is now darker for better contrast. - border is darker in dark theme too, so it's less harsh. - borders in corners of avatar card were cut due to lack of rounded of card container. This commit adds `.rounded` to not cut corners. Style in white theme is essentially unchanged. Before / After  
Code cleanup and technical improvements
Demo records for IoT and self-ordering IoT have been moved from regular data files into dedicated demo files. This keeps sample content separate from operational data, reducing the chance of demo examples being loaded where they are not needed.
Original PR description
Demo data in those modules were in `data/` folder, they are now in the `demo/` one. Tasks: 4399091, 4464497
Miscellaneous changes
Description of the issue this commit addresses: The Italian tax report lacks clarity and can be improved both in readabilty and usability by splitting the monthly and the annual reports. --- Desired behavior after this commit is merged: The Italian tax report is now split in a monthly and an annual report. The report uses the sections mechanism to be split in the different parts it is made from and clean the UI by not having everything on the same sreen. --- Enterprise PR: h
Original PR description
Description of the issue this commit addresses: The Italian tax report lacks clarity and can be improved both in readabilty and usability by splitting the monthly and the annual reports. --- Desired behavior after this commit is merged: The Italian tax report is now split in a monthly and an annual report. The report uses the sections mechanism to be split in the different parts it is made from and clean the UI by not having everything on the same sreen. --- Enterprise PR: https://github.com/odoo/enterprise/pull/62405 Task-3479785 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193558 Forward-Port-Of: odoo/odoo#164064
Fixes how incoterms appear on printed requests for quotation after the document layout redesign. This ensures purchase documents show delivery terms in the right place, reducing confusion for buyers and vendors.
Original PR description
Since the [document layout redesign](odoo/odoo@e19efd2f54014425b14defd6015b9a71c1142385), the incoterms in rfq are wrongly displayed.
This is due to the dynamic title which breaks the xpath, xpathing the incoterms in the `<h2>` instead of after it.
This commit fixes the xpath to properly display the incoterms.
opw-4380886
task-4453695
<h3>Steps to reproduce</h3>
- Choose any document layout
- Have purchase & Inventory installed
- Create a request for quotation
- In the "other information" tab, choose an incoterm
- Print the RFQ
| Issue | Fix |
|--------|--------|
|  |  |
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix prevents automatic typo corrections from running during system upgrades, reducing the risk of unintended text or configuration changes. It helps keep upgraded databases closer to their original content and improves upgrade reliability.
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 fixes a display issue where linked images in a website image gallery could shift left when the page was zoomed out. Image galleries now keep their intended centered layout whether or not an image has a link, improving visual consistency for visitors and editors.
Original PR description
Steps to reproduce the issue: - In Website edit mode, drag and drop an "Image Gallery" block onto the page. - Select "Full" as the "Content Width" option for the "Image Gallery" block. - Click on the image. - Add a link to the image. - Zoom the page to 50% using the browser tool. - Bug: the image is aligned to the left instead of being centered. - Remove the link: the image is correctly centered. opw-4458747
This fixes an issue where clicking a button could incorrectly display a tooltip. Users now get a cleaner interface with fewer distracting popups during normal actions.
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 fixes an error that prevented users from printing Ecuadorian withholding documents after creating them from a vendor bill. The report now uses the right tax summary data, avoiding a crash and allowing normal document printing.
Original PR description
Since https://github.com/odoo/odoo/commit/d0e7be7832672d476f1b289af52d3a425990d719 we're trying to access some keys in `account.document_tax_totals_template` that are not present in the subtotals dict from the withhold tax summary. Steps: - Create and confirm a bill - Add a withhold and open it - Try to print it -> TB: 'KeyError' opw-4433279
This fixes an incorrect field reference used when accessing a private key for Belgian payroll certificates. It helps prevent failures in certificate handling caused by the system looking for the wrong key name.
Original PR description
The code currently tries to access `private_key_id_id` which is actually `private_key_id`. opw-4466293
Creating an automation rule from Documents now correctly carries over the predefined trigger settings into the new rule form. This prevents users from having to manually reselect expected options and makes the Documents-to-Automations workflow more reliable.
Original PR description
The purpose of this commit is to ensure that when a user comes from Documents to Automations Rules, the pre-filled creation form takes into account the 'default_trigger_ids' defined in the window action. see odoo/odoo#193206 see odoo/enterprise#75179 task-4481308
Versions -------- - 16.0+ Steps ----- 1. Have a payment provider like Demo published; 2. create a discount program that expired yesterday; 3. change time of PC to yesterday; 4. go to eCommerce, add product to cart, go to checkout; 5. follow steps until you get to the "Pay Now" button; 6. change time of PC to today; 7. finalize payment. Issue ----- The payment transaction proceeds, but doesn't cover the entire amount, as the promotion was removed afterwards. Cause ----- Whe
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have a payment provider like Demo published; 2. create a discount program that expired yesterday; 3. change time of PC to yesterday; 4. go to eCommerce, add product to cart, go to checkout; 5. follow steps until you get to the "Pay Now" button; 6. change time of PC to today; 7. finalize payment. Issue ----- The payment transaction proceeds, but doesn't cover the entire amount, as the promotion was removed afterwards. Cause ----- When initiating payment, there's check on whether the applied rewards are still valid. Solution -------- Add an override for `_validate_transaction_for_order`, which compares the order amount before and after updating programs & rewards. If they don't match, raise a `ValidationError`, forcing the user reload the order without expired programs & rewards. opw-4304241 Forward-Port-Of: odoo/odoo#193485 Forward-Port-Of: odoo/odoo#191256
The tax tags are translatable but never translated automatically because they are generated dynamically from the tax report. This commit aims at improving this by translating automatically the tags that match exactly the name of the tax report line, for instance in Israel. Forward-Port-Of: odoo/odoo#192233
Original PR description
The tax tags are translatable but never translated automatically because they are generated dynamically from the tax report. This commit aims at improving this by translating automatically the tags that match exactly the name of the tax report line, for instance in Israel. Forward-Port-Of: odoo/odoo#192233
Use fully qualified names as columns in related table can have a same name and this query could raise an error. Like the one below error below was shown in 18.0 ``` psycopg2.errors.AmbiguousColumn: column reference "state" is ambiguous LINE 3: AND state = 'validate' ``` Note: error occured in 18.0 will be fixed in forward port, using fully qualified names was the purpose so made sense to start from 16.0 and fix for all versions after Description of the issue/
Original PR description
Use fully qualified names as columns in related table can have a same name and this query could raise an error. Like the one below error below was shown in 18.0 ``` psycopg2.errors.AmbiguousColumn: column reference "state" is ambiguous LINE 3: AND state = 'validate' ``` Note: error occured in 18.0 will be fixed in forward port, using fully qualified names was the purpose so made sense to start from 16.0 and fix for all versions after 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#193568
Renaming session to __session leverages Python's name mangling and ensures the attribute is treated as a private to the class. Forward-Port-Of: odoo/odoo#193501
Original PR description
Renaming session to __session leverages Python's name mangling and ensures the attribute is treated as a private to the class. Forward-Port-Of: odoo/odoo#193501
The get_text_content is not powerful enough to extract translated attributes. As a result, get_text_content will return empty string '' for terms whose translated contents are only in attributes. When the result is used to build the mapping text2terms, users will get strange result after write. opw-4147913 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 g
Original PR description
The get_text_content is not powerful enough to extract translated attributes. As a result, get_text_content will return empty string '' for terms whose translated contents are only in attributes. When the result is used to build the mapping text2terms, users will get strange result after write. opw-4147913 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#193574
**Description of the issue/feature this PR addresses:** When odoo is deployed with Reverse Proxy , like cloudflare, and cache rule is enabled. The login page is cached by cloudflare, "Cf-Cache-Status" is set to "HIT" in the reponse header  But in the html content, csrf_token is unavailable.  Error when try to
Original PR description
**Description of the issue/feature this PR addresses:** When odoo is deployed with Reverse Proxy , like cloudflare, and cache rule is enabled. The login page is cached by cloudflare, "Cf-Cache-Status" is set to "HIT" in the reponse header  But in the html content, csrf_token is unavailable.  Error when try to login.  **Current behavior before PR:** User can not login. **Desired behavior after PR is merged:** User can login. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191453
Currently, when buying a product in pos and using a new lot id, the quantities do not reflect this lot id. Steps to reproduce: ------------------- * Create a product: * Storable * Available in POS * Tracked by lots * Open shop session * Select the product just created * Enter anything as the lot number * Finalize order * Close session * In the back-end, navigate to the product page * Select the smart button **On hand** > Observation: The lot is not reflected Why the fix:
Original PR description
Currently, when buying a product in pos and using a new lot id, the quantities do not reflect this lot id. Steps to reproduce: ------------------- * Create a product: * Storable * Available in POS * Tracked by lots * Open shop session * Select the product just created * Enter anything as the lot number * Finalize order * Close session * In the back-end, navigate to the product page * Select the smart button **On hand** > Observation: The lot is not reflected Why the fix: ------------ When the session in closed, `stock.lot` are created but not reflected on the inventory quantity updates. We can add the `lot_id` when creating move lines as where we mention it, it will always have a related existing lot as per: https://github.com/odoo/odoo/blob/ba21b59d1234d13b5d4460facd60c586648048b8/addons/point_of_sale/models/stock_picking.py#L290 opw-4359435 Forward-Port-Of: odoo/odoo#193450
CLA change. Added new resource to corporate CLA file --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193539
Original PR description
CLA change. Added new resource to corporate CLA file --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193539
Due to an error in the condition, `ProprietaryID` was always used, even if IBANID should be used instead. That lead to customers missing information (`ProprietaryID` is not always picked up by other software, while IBANID is). Ticket link: https://odoo.com/odoo/69/tasks/4414985 opw-4414985 Forward-Port-Of: odoo/odoo#192519
Original PR description
Due to an error in the condition, `ProprietaryID` was always used, even if IBANID should be used instead. That lead to customers missing information (`ProprietaryID` is not always picked up by other software, while IBANID is). Ticket link: https://odoo.com/odoo/69/tasks/4414985 opw-4414985 Forward-Port-Of: odoo/odoo#192519
Steps to produce: - Drop 'Text - Image' block - Replace image by illustration - Try to crop image - A notification is displayed - Try saving The issue is ImageCrop is still not opened and we are trying to wait for image_cropper_destroyed to trigger, so here we check if ImageCrop is not opened. task-4246644 Forward-Port-Of: odoo/odoo#188577
Original PR description
Steps to produce: - Drop 'Text - Image' block - Replace image by illustration - Try to crop image - A notification is displayed - Try saving The issue is ImageCrop is still not opened and we are trying to wait for image_cropper_destroyed to trigger, so here we check if ImageCrop is not opened. task-4246644 Forward-Port-Of: odoo/odoo#188577
Using a payment method which rely on websocket (viva wallet, adyen, mercado pago, etc.) trigger a callback on all browser session of a given PoS session. If a browser session happen to not have any current session, a JS traceback will pop: ```js TypeError: Cannot read properties of undefined (reading 'payment_ids') ``` due to the webscoket listener checking if there is on-going order using the payment method opw-4374450 --- I confirm I have signed the CLA and read the PR guidelines at
Original PR description
Using a payment method which rely on websocket (viva wallet, adyen, mercado pago, etc.) trigger a callback on all browser session of a given PoS session. If a browser session happen to not have any current session, a JS traceback will pop: ```js TypeError: Cannot read properties of undefined (reading 'payment_ids') ``` due to the webscoket listener checking if there is on-going order using the payment method opw-4374450 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193474
Description of the issue this commit addresses: The Italian annual tax report lacks an integer rounding feature. --- Desired behavior after this commit is merged: The Italian annual tax report uses the HALF-UP rounding method. --- Community PR: https://github.com/odoo/odoo/pull/164064 Task-3479785 Forward-Port-Of: odoo/enterprise#76756 Forward-Port-Of: odoo/enterprise#62405
Original PR description
Description of the issue this commit addresses: The Italian annual tax report lacks an integer rounding feature. --- Desired behavior after this commit is merged: The Italian annual tax report uses the HALF-UP rounding method. --- Community PR: https://github.com/odoo/odoo/pull/164064 Task-3479785 Forward-Port-Of: odoo/enterprise#76756 Forward-Port-Of: odoo/enterprise#62405
This commit change the account_move field we use to compute mod349 report. Before, we used amount_total. Now we use amount_untaxed, as the mod349 only need to show taxable bases. opw-4320487 Forward-Port-Of: odoo/enterprise#76516
Original PR description
This commit change the account_move field we use to compute mod349 report. Before, we used amount_total. Now we use amount_untaxed, as the mod349 only need to show taxable bases. opw-4320487 Forward-Port-Of: odoo/enterprise#76516
The aim of this commit is changing 36000 banks for the real number (~26000 banks). no task id Proof:  Forward-Port-Of: odoo/enterprise#77047
Original PR description
The aim of this commit is changing 36000 banks for the real number (~26000 banks). no task id Proof:  Forward-Port-Of: odoo/enterprise#77047