Thursday, August 7, 2025
15 changes · saas-18.3
Enhancements to existing features
This change lets the system confirm that a database operation has write access before attempting changes. It helps avoid noisy warnings and tracebacks in read-only situations, improving reliability for internal testing and transaction handling.
Original PR description
Before this commit, when a readonly transaction tried to write data, a warning would be logged upon raised psycopg2.errors.ReadOnlySqlTransaction The system would have to try to write before it would retry with a RW cursor. For some methods used in test, this can be an issue because the warning will raise a traceback. In this case, we would like a mechanism to make sure the cursor is RW before it tries and raise the ReadOnlySqlTransaction error. taskid-4982555 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This fixes an error that could occur when a company added its chart of accounts after initial setup and then tried to validate the tax return wizard. The accounting onboarding steps are now created as needed, helping users complete tax return setup without interruptions.
Original PR description
For companies that didn't have COA installed, they didn't have onboarding created leading to traceback when setting up fiscal year onboarding for Tax Returns. Steps to reproduce: * A company installed but don't have COA. * Install COA from settings. * In Accounting Dashboard -> Tax Returns * Traceback when validating the return wizard. task-4981853 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where newly created calendar meetings could lose the intended contact link and be saved with an empty placeholder instead. Users creating meetings from a contact will now see the meeting correctly associated with that contact, reducing confusion and follow-up errors.
Original PR description
To reproduce:
=============
- Pick any contact
- Click on meeting
- Select the time for the meeting with that contact
- Click on more options
- Add a meeting and save
- Click on meeting & contact
Problem:
========
- When creating calendar events, res_id=0 is passed in vals_list
- Events are created with res_id=0 instead of using default value
Solution:
=========
- Add separate handling for res_id in vals_list processing
- Apply defaults.get('res_id') when vals.get('res_id') is falsy
opw-4892445
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#221767
Forward-Port-Of: odoo/odoo#216042The ORM now ignores empty index definitions instead of trying to create invalid database indexes. This prevents module installations from failing when an index setting is accidentally left blank or returns no value.
Original PR description
Currently when trying to create an index with a falsy definition, either a string or a callable, psql raises a SyntaxError preventing the installation of the module. This commit fixes that by skipping the index creation in case of a falsy definition. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222080
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log int
Original PR description
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct…
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log into to one of the demo Argentinean Companies: (AR) Responsable Inscripto 4. Create a customer invoices of type "B" 5. Go to the partner and change the Language to Spanish 6. Return to the invoice and print the PDF 7. Check that the VAT Content section is not translated. ### **Current behavior before PR:** <img width="572" height="407" alt="image" src="https://github.com/user-attachments/assets/e28e609e-2cd2-4ace-9509-f969692ec893" /> ### **Desired behavior after PR is merged:** The "VAT Content section should appear as "IVA Contenido" when printing the report in Spanish. opw-4938520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221832 Forward-Port-Of: odoo/odoo#219912
This update fixes grammatical mistakes in invitation and password reset notifications. It improves the clarity and professionalism of messages users receive during account signup and recovery flows.
Original PR description
**Before this commit:** - The notifications for `Send an Invitation Email` and `Send Password Reset Instructions` contained grammatical mistakes. **After this commit:** - The grammatical mistakes have been corrected. task-4975439 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220840
Portal users can now read marketing cards, matching the access already available to public users. This helps intended recipients, who are often customer or partner contacts, view the cards without unnecessary access errors.
Original PR description
The access right that allows public users to read cards should obviously apply equaly to portal users. Recipients will very often be partners so them not being allowed is very annoying. task-5000332 Forward-Port-Of: odoo/odoo#222037
This fix prevents an error when website editors quickly add, remove, and add carousel slides. It makes carousel editing more reliable by checking that the selected slide still exists before continuing.
Original PR description
Previously, when rapidly adding and removing slides in the Carousel snippet (s_carousel), a JavaScript traceback would occur under certain conditions. Step to reproduce: 1. Drag and Drop a Carousel Snippet (s_carousel) on the page. 2. Rapidly `add -> remove -> add` slides button in editor. 3. Traceback occurs. Cause: - The issue occurred because the currently active slide was passed as the target to activate a snippet. During rapid DOM changes, the active slide could be destroyed or not yet rendered, resulting in a race condition and JavaScript error. Solution: - Additional guards have been added in the `_activateSnippet` function to ensure the `editorToEnable` target is still present in the DOM. task-4270369 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222055 Forward-Port-Of: odoo/odoo#214721
The Stripe documentation link in Point of Sale payment provider settings now points to the correct setup instructions. This helps users configure Stripe payments without running into a broken help link.
Original PR description
Before this commit: ---------------- - The Stripe documentation link in the POS payment provider configuration was broken, leading to a poor user experience. After this commit: ------------------------------- - The Stripe documentation link has been corrected to ensure proper access to setup instructions. Task - 4797691 Forward-Port-Of: odoo/odoo#210515
This fix prevents an error when users create a new payroll work entry from the list view without start or end dates. It improves reliability for French payroll workflows by allowing record creation to proceed safely instead of showing a traceback.
Original PR description
Currently, a traceback occurs when a user attempts to create a work entry in the list view. **To reproduce this issue:** 1) Install the `l10n_fr_hr_work_entry_holidays` module. 2) Switch to the `French` company and open the payroll. 3) Open the work entries in list view and try to create a new record. **Error:** ``` AttributeError: 'int' object has no attribute 'seconds' ``` **Cause:** By default, when creating a work entry through the list view, no `start` or `end` date is provided. This leads to the traceback originating from the following line when computing the duration. https://github.com/odoo/odoo/blob/84b15dc1f866e27d5c8a5fe3e457c2f982bcb133/addons/l10n_fr_hr_work_entry_holidays/models/hr_work_entry.py#L28-L32 **Solution:** Adding an extra check of the `start` and `end` date would resolve this issue. opw-4943104 Forward-Port-Of: odoo/odoo#221442 Forward-Port-Of: odoo/odoo#220127
This fixes an error that could appear when an employee without Time Off permissions changed the type of a time off request. Users can now complete the request flow without being blocked by an internal overtime field access issue.
Original PR description
Steps: ([demo](https://drive.google.com/file/d/1nphgXlAc_w3z0oE7ickuTaGhl5khLhxo/view?usp=drive_link)) - Remove Time Off access to "Demo" user - Login as demo - Request a "Paid Time Off" - Change the Request time off type to "Sick" Actual result: - overtime_id field access error Expected result: - no error Caused by: https://github.com/odoo/odoo/pull/207780 opw-4929659 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218095
Purchase Order PDFs now handle very long product purchase descriptions more reliably when they continue across multiple pages. This prevents the description text from overlapping table headers, making printed purchase documents easier to read and share.
Original PR description
**Steps to reproduce**: 1. Install the `purchase` module. 2. Go to a product's `Purchase` tab and add a long purchase description (approx. 40–45 lines). 3. Create a Purchase Order using this product.…
**Steps to reproduce**: 1. Install the `purchase` module. 2. Go to a product's `Purchase` tab and add a long purchase description (approx. 40–45 lines). 3. Create a Purchase Order using this product. 4. Print the PDF of the Purchase Order (via gear icon). **Observation**: The long product description overlaps with the table header when the table spans multiple pages in the generated PDF. **Issue**: wkhtmltopdf does not handle multi-page table headers properly by default. causing header/content overlap when the table breaks across pages. **Solution**: Apply a known wkhtmltopdf workaround by explicitly setting: `<thead style='display: table-row-group;'>` This ensures headers will not repeat same as sale order. ref(https://github.com/odoo/odoo/pull/53909) Before: <img width="1003" height="426" alt="image" src="https://github.com/user-attachments/assets/38b7b4de-ea81-445f-8cd2-ae164fcb7531" /> After: <img width="1000" height="414" alt="image" src="https://github.com/user-attachments/assets/ef09ef94-2a26-468a-b6e7-03d93b4515b8" /> opw-4908457 Forward-Port-Of: odoo/odoo#219830
The VoIP call timer now uses the user's device timing consistently instead of mixing it with server timing. This prevents calls from showing a negative starting time when device and server clocks are slightly out of sync.
Original PR description
It was reported that the timer for the call would sometimes start as a negative number. Examining the code that computes it suggests that the timestamp sent by the server was a few seconds in the future compared to luxon.DateTime.now() (client time). This discrepancy is most likely due to the clock skew between the client and the server. This commit adapts the code so that it only computes time based on client-side values, effectively preventing clock skew issues. Task-4930666 Forward-Port-Of: odoo/enterprise#91738
Menu synchronization now sends a supported selection limit for multi-checkbox product options on Doordash. This keeps checkbox-style choices displaying correctly instead of appearing as single-choice radio buttons.
Original PR description
Steps: - Configure urban piper in pos.config - Select products that has attribute and its type is multi-checkbox - Sync menu. Issue: - For Doordash multi-checkbox appears as radio instead of checkbox. Cause: - max_selectable is -1 which is not supported by Doordash. Fix: - Send static value as 30 instead of -1. task- 4971545 Forward-Port-Of: odoo/enterprise#91499
This fixes a timing issue when processing Spanish Amazon sales invoices that could lock the invoice name too early. The change helps ensure invoice references are handled correctly, reducing the risk of incorrect or blocked invoice processing.
Original PR description
Accessing `invoice_line_ids` was flushing and protecting `move_name` too early. runbot-162079 Forward-Port-Of: odoo/enterprise#91703