Daily updates from Odoo
Monday, July 6, 2026
9 changes · 17.0
Resolved issues and error corrections
Fixed an issue where loading the next page of a bank journal report could fail when the previous page ended with an unreconciled payment. Users can now continue paging through the report without encountering an error.
Original PR description
When a bank journal report is loaded in pages (with `load_more_limit`), the balance from the last line of a page is passed as `progress` to calculate the starting balance for the next page. If the last line is an unreconciled payment, it has no balance display, resulting in an empty string being passed as progress. When the next page attempts to use this progress to accumulate balances, it tries to add a float to a string, causing: `TypeError: can only concatenate str (not "float") to str` Steps to reproduce: 1. Setup a bank journal so that it has an unreconciled payment as the last line of the journal report page, and some bank transactions on the following page (use "load more limit", "sort by date" and date filter to achieve that). 2. Open the bank journal report and click "Load more" to load the next page. 3. A TypeError is thrown. Fix: Only update `next_progress` when processing non-unreconciled payment lines. opw- 6316508
Fixed an issue where weekly recurring planning shifts could incorrectly become open shifts instead of staying assigned to the selected resource. The system now checks whether the resource is genuinely overbooked before unassigning them, improving schedule accuracy and reducing manual corrections.
Original PR description
Steps to reproduce: ------------------------ 1. Install Planning 2. Create a slot for any resource spanning a full month (e.g., 05/01 08:00 - 05/31 17:00) 3. Enable repeat, set occurrence to "Week"…
Steps to reproduce: ------------------------ 1. Install Planning 2. Create a slot for any resource spanning a full month (e.g., 05/01 08:00 - 05/31 17:00) 3. Enable repeat, set occurrence to "Week" 4. Save and observe generated slots Issue: -------- Some recurring weekly slots are created as open shifts (resource_id = False) even though the resource is not actually busy during that period. Cause: ---------- The overlap check used to detect resource conflicts: https://github.com/odoo/enterprise/blob/a739c6c03c6629bad80f3fe61b1035ce156d59c6/planning/models/planning_recurrency.py#L122-L127 For a full-month slot (05/01 - 05/31), the first weekly recurrence starts on 05/08. Since 05/08 <= 05/31 (the original slot's end_datetime), the overlap condition evaluates to True and incorrectly sets resource_id to False. This issue does not reproduce for monthly recurrence because the next occurrence (06/01) is always greater than the current month's end_datetime (05/31), so the overlap condition evaluates to False. Fix: ------ Instead of stripping the resource on any overlap, we now compute total planned hours vs total available hours in the overlap window. The resource is only unassigned if it is truly overbooked (total_hours_planned > total_hours_in_overlap). NOTE: --------- This issue has been resolved from version 18 with this 079b0ba. opw-6144096
The Twitter social integration now disables the reply option when Twitter rules do not allow a response, such as when the account was not mentioned or the post does not quote one of its tweets. This helps prevent failed or inappropriate automated replies and reduces the risk of unwanted user outreach.
Original PR description
Purpose ======= To prevent LLM from spamming Twitter users, Twitter does not allow to reply to a tweet if we are not mentioned in it, or if the tweet does not quote one of our tweet. For that reason, we disable the reply button when needed. Task-5964524 Forward-Port-Of: odoo/enterprise#112128
Fixed an issue where clicking "Load More" in bank journal reports could fail when the running balance was blank. Users can now continue loading additional journal entries without the report crashing.
Original PR description
Steps to reproduce: - Install Accounting module - Accounting > Reporting > Journal Report > Ensure that the last line of the report has an empty balance column, and that the Load More button is…
Steps to reproduce:
- Install Accounting module
- Accounting > Reporting > Journal Report > Ensure that the last line of the report has an empty balance column, and that the Load More button is displayed immediately after it [image](https://www.awesomescreenshot.com/image/61045422?key=3ee9914f6472026aafa130253a9a32f9)
- Scroll down to the bottom of the Bank journal section and click load more
Traceback:
`TypeError: can only concatenate str (not "float") to str`
When opening a bank journal in the Journal Report and clicking "Load More" to fetch additional entries, the running balance calculation would crash and the report would fail to load further lines.
This was caused by the browser sending an empty string ('') as the current running balance instead of 0.0 when no cumulated balance had been rendered yet. Since the key already exists in the progress dict, the fallback default of 0.0 was never used, causing float arithmetic to fail on an empty string when updating the cumulated balance for each journal entry.
Fixed by sanitizing the progress values before use, converting any empty or missing balance values to 0.0, allowing "Load More" to work correctly on bank journal reports.
opw-6264616The timesheet grid now marks unavailable days using each employee's own working schedule instead of always relying on the company default. Approved personal time off is also shown as unavailable, making Timesheets consistent with the Time Off app and reducing scheduling confusion.
Original PR description
Steps to Reproduce --- - Create two different working schedules with different public holidays - Assign employees to specific working schedules - Set company default working schedule to a different…
Steps to Reproduce --- - Create two different working schedules with different public holidays - Assign employees to specific working schedules - Set company default working schedule to a different schedule - Login as employee with specific working schedule - Navigate to Timesheets app -> My Timesheets - Observe public holidays and personal time-off displayed in the timesheet grid Issue --- - The timesheet grid displays unavailable dates (public holidays, weekends) from the company's default working schedule instead of the employee's assigned working schedule. - Personal time-off requests are not reflected as unavailable dates in the timesheet grid. Current Behaviour --- - Public holidays shown are always from the company's default working schedule, ignoring employee-specific working schedule assignments. - Employee's approved time-off requests don't appear as unavailable in the timesheet. Expected Behaviour --- - Public holidays should display based on the employee's assigned working schedule, with company schedule as fallback only when no specific schedule is assigned. - Employee's personal time-off requests should appear as unavailable dates. - This should align with Time Off app behavior. Fix --- - Included employee-specific work interval calculation with personal time-off requests. - Added support for contract-based calendar changes and calendar validity periods. - Implemented proper fallback when valid intervals are not found. task-4997080
Vendor bills imported from Chilean electronic invoices now use the correct amount when the document is issued in a currency other than Chilean pesos. This prevents overstated or understated bills and helps accounting teams keep foreign-currency purchases accurate.
Original PR description
**STEP TO REPRODUCE** 1. Create a invoice to a chilian company, using another currency (for example UF, don't forget setup up a currency rate). 2. Confirm. 3. Download the xml in the chatter, and import it as a vendor bill. 4. Notice the imported bill amount are wrong (Pesos amount are used, with the currency being UF). opw-6269662
The Turkish Central Bank currency feed now uses the official selling rate instead of averaging buying and selling rates. This helps produce more accurate accounting and import valuation figures aligned with Turkish customs requirements.
Original PR description
## Short fix summary: The TCMB (Central Bank of Turkey) provider computed the exchange rate as an average of the buying and selling rates (`2 / (ForexBuying + ForexSelling)`). This is inaccurate for real accounting flows and does not follow Turkish customs regulation (Customs Law No. 4458, Art. 30), which requires the Central Bank's selling rate for goods import valuation. This now uses the selling rate (`ForexSelling`) only. task-6227500 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update strengthens the security of website forms by preventing unauthorized modifications. Customizations made through the website editor are now properly secured, ensuring data integrity. The system prioritizes error handling over attempting to correct user-modified form values, maintaining data consistency.
Original PR description
Website forms can be customized using the website editor. These customized values are directly embedded in the form in a hidden input or injected via the `data-for` js mechanism. This commit ensures that these values are not modified by the client. It is necessary to generate the token after the rendering (in `_render_template`) because we don't know all the values to sign using only the stored arch. In fact, several values are dynamically computed during the rendering (see `data-for` and `t-att-data-values` tags attributes); these "js injected" values take precedence over the default values. It is better to raise an error than to correct the values when the form has been improperly modified by the end user. Task-6320608
This update fixes an issue where users with access to multiple companies were only appearing as interviewers for jobs within their default company. The change ensures that users with access to multiple companies can be selected as interviewers for jobs across all companies they are authorized to work with, improving recruitment efficiency.
Original PR description
Issue: ---------------------------------------- A user allowed in multiple companies will only show as an interviewer in job positions from its default company. Steps to reproduce: ---------------------------------------- - Configure a user with multiple allowed companies (A and B) - Set the user's default company to A - Create or open a job position belonging to company B. - Try to add the user as an interviewer Cause: ---------------------------------------- To compute `allowed_user_ids` we group the users by `company_id` (i.e. the default company), so the allowed companies are ignored. Solution: ---------------------------------------- Group the users by `company_ids`, the aggregate then separates the companies in case they're a recordset. opw-6314373