Daily updates from Odoo
Wednesday, July 15, 2026
24 changes · master
Enhancements to existing features
Spreadsheet screen position and viewport behavior are now managed through a shared store instead of an internal plugin, making the experience more consistent across spreadsheet features. Comment popovers now follow the same scroll behavior as other persistent popovers, reducing inconsistent interface behavior.
Original PR description
The `SheetViewPlugin` and the viewport handling was moved into a store rather than a plugin. This commit make the necessary changes to odoo. The test `Scrolling the viewport should hide the comments popover` was deleted. Other persistent popover would automatically be hidden when scrolling, and re-open if scrolling back. There's no reason to have a different behaviour for comments. Task: 6314784
Restricted website editors will no longer see the AI Assistant as an available editing option when they cannot save page changes. A tooltip now explains why the assistant is unavailable, reducing confusion and setting clearer expectations.
Original PR description
Restricted Editors do not have permission to edit website pages. However, the AI Assistant button remains available, giving the impression that the feature can be used even though any changes cannot be saved. This commit disables the AI Assistant button for users without 'Editor and Designer' access and adds a tooltip explaining why the feature is unavailable Forward-Port-Of: odoo/enterprise#123047
Signature requests created from other apps now include the template name alongside the related record name. This makes request names, filenames, and email subjects easier to recognize and less likely to be confused with the signer's name.
Original PR description
When requesting a signature from another app, the request name, filename and email subject only showed the linked record name, which often read as the signer's name. The template name is now added so all three follow the same "<prefix> - <template> - <record>" format. task-6317174 Forward-Port-Of: odoo/enterprise#122963
The AI website assistant now includes added design guidance in its prompts. This should help generate website content with better visual direction and more consistent design recommendations.
This update makes deferred account settings appear based on the account type, reducing confusion when configuring accounts. It also adds clearer guidance in the interface so users better understand the deferred option.
Original PR description
*accountant, reports Purpose: Some improvements missed in the initial commit: https://github.com/odoo/enterprise/commit/65ea8b266d8024736bec388425c90d9efd9a8cce will be addressed here. - Changed the deferred_account_id invisibility to be based on the account type since it should not be based on is_deferred as they are not related to each other - Added a tooltip to is_deferred for further clarity task-6293902
Resolved issues and error corrections
Payslips sent by email now show a neutral message saying they were sent, instead of incorrectly saying they were re-sent on the first send. When sending payslips for multiple employees, each payslip now receives only one chatter note, reducing confusion in payroll records.
Original PR description
**Issue:** Clicking Send By Email on a payslip opens the hr.payslip.send.mail wizard. Its action_send() always logs "The payslip has been re-send to the employee." in the payslip chatter, even when…
**Issue:** Clicking Send By Email on a payslip opens the hr.payslip.send.mail wizard. Its action_send() always logs "The payslip has been re-send to the employee." in the payslip chatter, even when the payslip is being sent for the first time. The log call also runs inside the loop over the employees and goes through all the payslips of the wizard on each pass, so when the wizard sends payslips of several employees every payslip gets the same note once per employee. This started with the rework of the wizard in https://github.com/odoo/enterprise/commit/39e0488a7e076ee648b47cc3d1cad41cadfd692e **Fix:** The wizard cannot tell a first send from a resend. There is no field on the payslip that keeps track of a previous send, and the chatter cannot be used for that either because the mail sent automatically on validation can be deleted after sending. The fix changes the log in action_send() to say the payslip has been sent by email, which is true in both cases, and moves it out of the employee loop so each payslip gets exactly one note. **Steps to reproduce:** 1. In Payroll > Configuration > Settings, set "Send payslips to employees" to When Paid and save 2. In Payroll > Payslips, create an off-cycle payslip for an employee, click Compute, then Validate 3. Go back to the settings and set "Send payslips to employees" to When Confirmed 4. On the payslip, click Pay, then Mark as Paid 5. Click Print so the payslip document is generated 6. Click Send By Email and send the mail 7. Check the payslip chatter => The chatter shows "The payslip has been re-send to the employee." while the payslip was never sent before Ticket [link](https://www.odoo.com/odoo/project.task/6324204) opw-6324204 Forward-Port-Of: odoo/enterprise#123298
Chilean export invoice PDFs now keep customs information in the correct columns even when origin or destination port details are missing. This prevents package quantities and other export details from appearing under the wrong headings, improving document accuracy for customers and customs processes.
Original PR description
### Issue: On Chilean export invoices, the customs information table may display data in the wrong columns When `Origin Port` or `Destination Port` is not set, the corresponding `td` is omitted by…
### Issue: On Chilean export invoices, the customs information table may display data in the wrong columns When `Origin Port` or `Destination Port` is not set, the corresponding `td` is omitted by QWeb, causing the remaining columns to shift left This results in `Qty of Packages` appearing under `Origin Port` or `Destination Port` in the printed document ### Cause: `l10n_cl_port_origin_id` and `l10n_cl_port_destination_id` have no default value and are optional fields `t-out` on a falsy value omits the `td` entirely in QWeb, breaking the column alignment Adding `or ''` ensures an empty `td` is always rendered, preserving the table structure regardless of whether the fields are set ### Steps to reproduce: - Install `l10n_cl_edi_exports` and switch to CL Company - Create an Invoice (any customer, any line) - In the gear menu, select Print > Invoice PDF copy (Chile) Before the fix, `Qty of Packages` appears under `Origin Port` when neither port field is set opw-6304670 Forward-Port-Of: odoo/enterprise#123150 Forward-Port-Of: odoo/enterprise#121923
Belgian termination holiday attest payslips now use the employee's private address directly, so the address is shown correctly in the required places. This helps ensure departing employees receive complete and accurate payroll documents.
Original PR description
[FIX] l10n_be: missing employee address on holiday attest Bug reproduction: Belgium -> create employee -> fire the employee -> look to the holiday attest payslips (N and N-1) -> private address of the employee is missing in 2 places in payslip Bug cause: o.employee_id.work_contact_id work contact id was used in report but we can just use private_street, private_city etc. instead. Bug solution: Use private_street, private_city etc. fields directly from the employee model. task - 6361457 Forward-Port-Of: odoo/enterprise#123528
Fixed an issue where outbound FedEx shipment labels could lose their reference field when return labels were enabled. This helps businesses keep the expected shipment reference visible on original delivery labels while still supporting return labels.
Original PR description
Issue ----- When setting the delivery method to create return labels aswell, the reference (`REF`) field is not present on the original outbound shipment. <img width="438" height="148" alt="image" src="https://github.com/user-attachments/assets/42acce7b-6177-4f8f-81d3-ad6dfd3e4bb2" /> Steps to reproduce ----- - Setup Fedex - Enable returns - Create a product (set weight) - Create a delivery for the product - Set carrier as Fedex - Validate delivery - Open the label > REF field is empty Cause ----- Fedex doesn't include references on the label of returns. When the option for returns is enabled, the outbound shipment is marked as a "Courtesy return". It doesn't make sense to specify a return reason on the original shipment. Expected outcome (after fix) ---- <img width="428" height="146" alt="image" src="https://github.com/user-attachments/assets/0d22e147-da90-4aa4-b3ca-2d996c7cc147" /> ----- Ticket: opw-6101620 Forward-Port-Of: odoo/enterprise#118659
Payroll runs now correctly identify when expected payslips are missing. This ensures payroll teams receive the right warning and can address gaps before processing payroll.
Original PR description
The missing payslip in a payrun warning wasn't triggered correctly because we were filtering on the schedule pay of the payrun and this field was removed in a previous PR. task-6329134 Forward-Port-Of: odoo/enterprise#121641
Sales commission plans now reject salesperson start dates that fall outside the plan's effective period. This prevents invalid commission setup and helps ensure salespeople are assigned only within eligible plan dates.
Original PR description
Version: 18.0 Steps to reproduce: - open sale commission plans and create a new plan with an effective period - go to the salesperson tab and add a salesperson - set the salesperson from date after the plan end date issue: salesperson period start date was accepted even if it was set after the plan end date fix: added validation to raise an error when the salesperson start date falls outside the plan effective period task id: 6241188 Forward-Port-Of: odoo/enterprise#122870 Forward-Port-Of: odoo/enterprise#118289
The database authentication module was added to the translation workflow so translators can provide localized text. The update also corrects wording mistakes and tidies an internal error check, improving clarity with minimal user impact.
Original PR description
The aim of this commit is to allow the translator to work on this module translation and fix a typo that was made. Task-id: None Forward-Port-Of: odoo/enterprise#124038
Printing an appraisal form from the action menu now waits briefly so the menu can close first. This prevents the dropdown from appearing on the printed document, giving users a cleaner and more professional printout.
Original PR description
When printing the appraisal form from the action (cog) menu, the drop down menu itself was incorrectly showing up in the printed document. This happened because the browser started printing immediately before the menu had time to close. By adding a small delay before triggering the print action, the menu now has time to completely close, so it no longer appears in the final print. task-6369240 Forward-Port-Of: odoo/enterprise#123242
This update corrects a database query issue in the Peru electronic invoicing module. It helps prevent errors when processing accounting documents, improving reliability for affected users.
This change updates an accounting reports screen so it continues to work with the latest underlying interface framework. It prevents a compatibility issue that could affect the display or behavior of the account return check kanban view.
Original PR description
The previous code worked because owl was too permissive.
Mexican payroll payslip forms no longer crash when users add Daily Salary or Integration Factor fields with Odoo Studio. This helps payroll teams review salary-related calculations safely, including while creating off-cycle payslips before an employee is selected.
Original PR description
Users frequently use Odoo Studio to display the Daily Salary (`l10n_mx_daily_salary`) and Integration Factor (`l10n_mx_integration_factor`) fields on the payslip form to verify salary rule…
Users frequently use Odoo Studio to display the Daily Salary (`l10n_mx_daily_salary`) and Integration Factor (`l10n_mx_integration_factor`) fields on the payslip form to verify salary rule computations. However, doing so raises a traceback immediately upon closing the Studio editor, as well as when attempting to create a new Off-Cycle payslip.
### Steps to reproduce:
* Install `l10n_mx_hr_payroll` and `web_studio`.
* Switch to "INNOVACION VALOR Y DESARROLLO SA SA" company.
* Go to Payroll > Payslips > Payslips and create a "New Off-Cycle"
* Use the Studio editor to add `l10n_mx_daily_salary` or `l10n_mx_integration_factor` fields.
* Close the Studio editor.
### Current behavior:
A traceback is raised depending on the field added
#### For the Daily Salary field:
```py
File "/Users/ivgm/odev/worktrees/19.0/enterprise/l10n_mx_hr_payroll/models/hr_payslip.py", line 21, in _compute_daily_salary
payslip.l10n_mx_daily_salary = payslip.version_id.wage / payslip._rule_parameter('l10n_mx_schedule_table')[payslip.version_id.schedule_pay]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: False
```
#### For the Integration Factor field:
```py
File "/Users/ivgm/odev/worktrees/19.0/enterprise/l10n_mx_hr_payroll/models/hr_payslip.py", line 33, in _compute_integration_factor
payslip.employee_id.with_context(before_date=payslip.date_from)._get_first_contract_date()
File "/Users/ivgm/odev/worktrees/19.0/odoo/addons/hr/models/hr_employee.py", line 493, in _get_first_contract_date
versions = self._get_first_versions_filtered(no_gap=no_gap).filtered(lambda x: x.contract_date_start)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ivgm/odev/worktrees/19.0/odoo/addons/hr/models/hr_employee.py", line 461, in _get_first_versions_filtered
self.ensure_one()
File "/Users/ivgm/odev/worktrees/19.0/odoo/odoo/orm/models.py", line 5942, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: hr.employee()
```
### Expected behavior:
No error is raised, and the fields are correctly displayed on the form view.
### Solution:
* Add Guard Clause: When creating a "New Off-Cycle" payslip, `payslip.version_id` is not initially set because no employee has been selected yet. Added a condition to check if `version_id` exists before computing the values to prevent the traceback.
* View Update: Since displaying these fields is a highly requested feature for traceability, they have now been added to the form view.
target: 19.0
task-6267003
Forward-Port-Of: odoo/enterprise#121718The attendance Gantt view now hides empty parentheses in progress bar labels when there is no extra information to show. This removes confusing visual clutter and makes attendance planning information easier to read.
Original PR description
The label should not display empty parenthesis if there is no extra info to display task-6391439
Point of Sale receipts will no longer include the separate terminal receipt generated by Worldline payments. This keeps customer receipts cleaner and avoids redundant payment information being printed or shown.
Original PR description
This PR removes the terminal receipt from Worldline we are currently inserting in the Point Of Sale receipt We don't adapt the driver code to get the receipt as we cannot change C method prototypes task-6373975 Forward-Port-Of: odoo/enterprise#123770
The payroll payrun chatter panel and button are now limited to the correct payrun screens. This prevents confusing extra options from appearing in unrelated payroll views, giving users a cleaner and more predictable experience.
Original PR description
The global `PayRunChatterService` was leaking state across shared views, causing the chatter panel and button to appear on views accessed outside the PayRun layout (e.g., via the main Payroll > Time Offs menu). Fix this by introducing a `useEffect` hook in `PayRunLayout` that checks for a valid `payrun_id` or `payRunReactive` state on view render. If absent, the chatter service state is explicitly reset and closed. The control panel button is also wrapped in a contextual `t-if` check, fully isolating the feature to its intended screens. Task : 6347871 Forward-Port-Of: odoo/enterprise#123570
Payroll start warnings now include the evaluation logic needed to determine when they should appear. This helps payroll teams receive the right warning before starting a pay run, reducing confusion and the risk of missed checks.
Original PR description
In this commit, we finxed the definition of start payrun warning to include the evaluation code in the warning definition. task-6179707
Sendcloud shipping labels now correctly handle delivery addresses where the house number contains a dot, such as “12.345”. This prevents incorrect address data from being sent to the carrier and helps avoid malformed labels or delivery issues.
Original PR description
Issue ----- Labels have unexpected format when the delivery address has a dot (`.`) in the number. Steps to reproduce ----- - Set up Sendcloud (carrier shouldn't matter) - Enable logs - Create a customer (with valid address, phone and email) - Address must contain a dot, eg Grand Place 12.345 - Deliver a product to the customer - Add sendcloud as delivery method - Go to the logs - Open the "sendcloud request parcels" log > house_number is 12 Cause ----- The `house_number` field is populated using `_get_house_number`, where the regex used to extract the number from the address line does not accept the `.` character. https://github.com/odoo/enterprise/blob/f93882555864a1f0a2a3e3863780096c78923bfa/delivery_sendcloud/models/sendcloud_service.py#L323 ----- Ticket: opw-6295904 Forward-Port-Of: odoo/enterprise#123820 Forward-Port-Of: odoo/enterprise#123266
Features or functions removed from Odoo
Odoo is removing an obsolete report setting that is no longer used to generate QWeb reports. Reports now rely on the existing report name setting, reducing redundant configuration with no expected change to normal reporting behavior.
Original PR description
The `report_file` field on `ir.actions.report` is no longer used by the QWeb reporting engine. QWeb reports rely on `report_name` to locate and render the template. This commit removes this redundant field from report actions. Community PR:- https://github.com/odoo/odoo/pull/275521 Upgrade PR:- https://github.com/odoo/upgrade/pull/10750
Code cleanup and technical improvements
The payroll module received an internal technical update to stay compatible with the latest Odoo web interface framework. This helps keep payroll screens reliable and maintainable without changing day-to-day user workflows.
Original PR description
As part of the Owl 3 migration, replace onWillUpdateProps hook with the appropriate Owl 3 alternatives.
This update modernizes internal Studio code by replacing a deprecated technical component with newer supported alternatives. It helps keep Studio easier to maintain and reduces future upgrade risk, without changing visible business functionality.
Original PR description
This commit removes the use of the deprecated 'useComponent' hook to use other more appropriate Owl features instead.