Daily updates from Odoo
Saturday, September 6, 2025
11 changes
1 change
Resolved issues and error corrections
This fixes an issue where the final automatic follow-up reminder could be sent to the same customer every day for an already-processed overdue invoice. Odoo now recognizes invoice items that were already included in that follow-up level, helping prevent duplicate customer communications.
Original PR description
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Configuration / Invoicing / Follow-up Levels" - Create a unique follow-up level: * Remind 1 day after due date * Send Email:…
**Steps to reproduce:** - Install Accounting - Go to "Accounting / Configuration / Invoicing / Follow-up Levels" - Create a unique follow-up level: * Remind 1 day after due date * Send Email: [checked] * Automatic: [checked] - Create an invoice: * Customer: [any] * Invoice Date: [1 month ago] * Due Date: [1 month ago] * Invoice Lines: [any] - Confirm the invoice - Go to "Settings / Technical / Automation / Scheduled Actions" - Open "Account Report Followup; Execute followup" - Run it manually => A reminder is correctly sent to customer (i.e. message on partner record) - Wait for the following day - Run the scheduled action again **Issue:** The same reminder in sent again. The last reminder will be sent every day even if there is no new invoice. **Cause:** When computing the follow-up status for a contact, all the entries that are due are taken into account. The entries that have already been included in a follow-up should be ignored when computing the same follow-up again. **Solution:** A field on a journal item (i.e. followup_line_id) tracks in which follow-up level the item has been included. We can exclude the journal items that has this field set to the next follow-up level. opw-4964103 Forward-Port-Of: odoo/enterprise#94026 Forward-Port-Of: odoo/enterprise#92191
2 changes
Resolved issues and error corrections
This update prevents IoT boxes from being treated as new devices when they connect to databases on older versions. By sharing both the serial number and MAC address, the system can recognize and update the existing IoT box instead of ignoring it, reducing setup and connection failures.
Original PR description
We are currently experiencing a bug with the image 25_07 build on saas-18.4 In this version the "identifier" used in iot app is the iot box's serial number In versions < 18.4 the identifier used is the iot box's mac address When connecting to a database in version 18.3 or less, the iot box: 1) Calls send_all_devices --> create a new iot box in the database with identifier = serial number 2) Runs git checkout to align itself to the database version 3) Calls send_all_devices again, this time with identifier = mac address 4) The database ignores the request because it considers it a new iot box with a different token This PR fixes the issue by sending both mac address and serial number to the database If the database has an iot box with the corresponding serial number as an identifier, it updates it. Enterprise PR: https://github.com/odoo/enterprise/pull/93657 Forward-Port-Of: odoo/odoo#225431 Forward-Port-Of: odoo/odoo#225043
This fix ensures IoT boxes remain correctly recognized when connecting across versions that use different device identifiers. It prevents duplicate or ignored IoT box records, helping connected hardware keep working after version alignment.
Original PR description
We are currently experiencing a bug with the image 25_07 build on saas-18.4 In this version the "identifier" used in iot app is the iot box's serial number In versions < 18.4 the identifier used is the iot box's mac address When connecting to a database in version 18.3 or less, the iot box: 1) Calls send_all_devices --> create a new iot box in the database with identifier = serial number 2) Runs git checkout to align itself to the database version 3) Calls send_all_devices again, this time with identifier = mac address 4) The database ignores the request because it considers it a new iot box with a different token This PR fixes the issue by sending both mac address and serial number to the database If the database has an iot box with the corresponding serial number as an identifier, it updates it. community PR: https://github.com/odoo/odoo/pull/225043 Forward-Port-Of: odoo/enterprise#93848 Forward-Port-Of: odoo/enterprise#93657
6 changes
Resolved issues and error corrections
Spreadsheet menus now keep pivot, list, and chart options in the correct order, even when many lists are added. This prevents actions such as reinserting a static pivot from appearing in the wrong place and keeps spreadsheet navigation clearer for users.
Restaurant point-of-sale sessions now correctly load calendar bookings linked to restaurant tables. This helps staff see relevant appointments on the floor plan and reduces missed reservations or scheduling confusion.
Original PR description
Issue: The calendar envents that have a restaurant table ressource are not loaded in the pos if the config is in restaurant mode. Fix: If the config is a restaurant the calendar_event pos domain will return a domain containing the appointment_ressources linked to the config restaurant tables. This commit also fixes the test that checks for the appointment-label on the floor plan. Task-id: 4970986 Forward-Port-Of: odoo/enterprise#93134 Forward-Port-Of: odoo/enterprise#90809
Creating Intrastat tax returns no longer triggers an error caused by date handling in the system context. This helps accounting users complete required Intrastat filings without interruption.
Original PR description
Before this PR: - Creating Intrastat tax returns raised a type error. - The error came from date objects (`forced_date_from` / `forced_date_to`) being stored in the action context. Since date objects are not JSON-serializable, hence the `.create()` in refresh_checks fails. After this PR: - Converted `forced_date_from` and `forced_date_to` into strings before passing them in the context. - Parsed these values back into date objects using `fields.Date.from_string()` when needed in `_try_create_returns_for_fiscal_year` of the `account.return.type` model. - Intrastat tax return are created without errors. Task-5059218
This fix prevents Point of Sale order validation from getting stuck in an endless loading loop. It ensures downloaded POS orders use the correct process to include related order data, improving reliability for affected POS workflows.
Original PR description
*: pos_settle_due, pos_urban_piper The `pos.order` model was missing from pohibitedAutoLoadedModels which was causing infinite loop when validating an order. This commit add this models to the pohibitedAutoLoadedModels variable. Now when downloading an order from the PoS the `read_pos_orders` method should be used, it will returns all related order data. Forward-Port-Of: odoo/enterprise#93532
Fixed a problem that could prevent users from opening the rental schedule from product and quantity views. This restores access to rental planning information and avoids an error interrupting daily rental workflows.
Original PR description
Issue ----- When opening the rental schedule view from the `qty_at_date` widget or from the form view of a product, an error occurs: ``` Traceback (most recent call last): ... File…
Issue
-----
When opening the rental schedule view from the `qty_at_date` widget or
from the form view of a product, an error occurs:
```
Traceback (most recent call last):
...
File "/data/build/enterprise/sale_stock_renting/models/product_product.py", line 162, in action_view_rentals
result = super().action_view_rentals()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/sale_renting/models/product_product.py", line 66, in action_view_rentals
context: dict = ast.literal_eval(action.get('context', '{}'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/_monkeypatches/ast.py", line 28, in literal_eval
return orig_literal_eval(expr)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/ast.py", line 66, in literal_eval
node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/ast.py", line 52, in parse
return compile(source, filename, mode, flags,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<unknown>", line 2
{
IndentationError: unexpected indent
```
Introduced by https://github.com/odoo/enterprise/pull/87234
Fix
---
This commit fixes the action `sale_renting.action_rental_order_schedule`
by removing the leading newline in the action context, which caused the
evaluation to fail.
task-4720184Salary contract signing no longer assumes every contract has exactly two signatures. This prevents signing errors for contracts with more or fewer required signers, improving reliability for HR contract workflows.
Original PR description
The issue was that it was assumed all contracts will have the same number of signatures(2). This is now generalized for any number of signatures. Task - 5005069 Forward-Port-Of: odoo/enterprise#92000
2 changes
Resolved issues and error corrections
This fix prevents image report generation from failing on Windows when temporary files are accessed by the external conversion tool. Businesses using Odoo on Windows should see fewer report export errors and smoother document/image generation.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: On Windows tempfile.NamedTemporaryFile won't allow access from external process. This result in "ContentAccessDenied" error when wkhtmltoimage process is executed. Below is the example error message on Windows: 2025-09-06 13:11:52,587 15780 WARNING odoo_insights odoo.addons.base.models.ir_actions_report: Wkhtmltoimage failed (error code: 1). Message: Exit with code 1 due to network error: ContentAccessDenied The only solution used by most projects is to use delete=False argument and delete the temp file manually later Desired behavior after PR is merged: I should work without error on Windows. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how Twilio SMS sending problems are detected, reported, and shown in related notifications and mailing records. It also fixes SMS test flows so test messages are sent to the intended number and users receive clearer feedback when messages succeed or fail.
Original PR description
Followup of odoo/odoo#206818 and odoo/enterprise#93495 Provide various improvements in testing tools, notably to better cover twilio feedback and error type management. Provide various fixes linked to error types, propagation, error messages. Fix propagation to mail notification and mailing traces, which was missing in original PR. For more details see sub commits. Task-5053537 Forward-Port-Of: odoo/odoo#225036