Wednesday, March 12, 2025
32 changes · master
Enhancements to existing features
The Knowledge comments feature has been adjusted to work with the updated editor toolbar. This keeps comment-related actions available and properly described as the toolbar moves to a compact, expandable layout.
Original PR description
The following changes have been made in the toolbar in html_editor: - the `namespace` parameter in the toolbar item definition has been changed to `namespaces`, supporting multiple namespaces for a toolbar group or item. - the toolbar opens in a compact mode, with a small subset of buttons, and can be expanded to display a larger set of buttons (namely those in the "expanded" namespace). - the `title` parameter has been replaced with `description`, which is used to define the content of the tooltip displayed when hovering over the item. This commit adapts the Comments plugin to these changes. Community: https://github.com/odoo/odoo/pull/201037 task-4535289
Budget report queries were adjusted to skip unnecessary checks on fields that are always empty in the temporary budget data. This helps the reporting system avoid redundant work and supports more efficient budget report generation without changing what users see.
Original PR description
To allow to ORM to remove SQL checks for null values. When querying the temporary budget table, some required fields are set to NULL. We should ignore the conditions on these fields as they are constant anyways. task-4415011 https://github.com/odoo/odoo/pull/191236
The schedule interview email template is now included by default instead of only in demo data. This helps Recruitment users follow the documentation and find the expected template in their own databases without extra setup.
Original PR description
The schedule interview mail template was part of the demo data only. Odoo clients following the Recruitment app docs were not able to find the template in their DBs. So, this commit makes it part of the default data, to stay consistent with the documentation. task-4637146
The Knowledge app no longer carries an old internal export that has moved to the shared HTML editor. This keeps the codebase cleaner and aligns naming with standard Odoo migration practices, with no expected change for end users.
Original PR description
`HtmlUpgradeManager` was exported from the `knowledge` module for historical reason. This commit removes that file (`HtmlUpgradeManager` is now in `html_editor` module). `upgrade` functions are renamed `migrate` to be more consistent with the `migrate` function of the classic Odoo `upgrade` repository.
Resolved issues and error corrections
The timesheet list view no longer shows an empty timer status column. This removes confusing, non-useful information from the screen and keeps the timesheet view cleaner for users.
Original PR description
Before this commit, the `is_timer_running` field defined timesheet model is displayed in the list but the column is always empty. This commit makes sure the column is also hidden in the list view since no data is displayed. The field is in fact just a technical field and not really useful for the user.
This change moves a Belgian payroll accounting test into the appropriate Belgian localization test module. It helps keep automated checks reliable by avoiding dependency errors, with no expected impact on day-to-day product use.
Original PR description
Move the test to the l10n_be test module to avoid dependencies error
This update aligns the Enterprise appointment app with a related core fix so frontend appointment pages can use the shared formatting and HTML utilities they expect. It helps prevent display or interaction issues in appointment scheduling without changing the user workflow.
Original PR description
Enterprise counter-part. runbot-134831 https://github.com/odoo/odoo/pull/201247
This update fixes an issue that could prevent online bank synchronization records from being created after a recent platform change. It helps keep account connections working reliably without changing user workflows.
Original PR description
`create` only accepts a list or a tuple now, not dict_values
A typo was corrected in the appraisal campaign wizard. This helps keep the employee appraisal experience clear and professional without changing how the feature works.
Features or functions removed from Odoo
An empty leftover module directory was removed after its functionality had already been merged into the main US payroll module. This keeps the system cleaner and avoids confusion from unused payroll components.
Original PR description
A file was missed when merging the module to l10n_us_hr_payroll in this PR (https://github.com/odoo/enterprise/pull/70310). The whole module directory should be removed.
Miscellaneous changes
Steps to reproduce: 1. Upload a link and Video type documents 2. Create a shortcut 3. Go to My drive 4. Kanban card not displayed correctly Technical Reason: When creating a shortcut via 'action_create_shortcut', missing 'mimetype' and 'url' fields caused improper rendering of link/video shortcuts. After this commit: will display the proper format of the link/video. Task-4477679 Forward-Port-Of: odoo/enterprise#80887 Forward-Port-Of: odoo/enterprise#78677
Original PR description
Steps to reproduce: 1. Upload a link and Video type documents 2. Create a shortcut 3. Go to My drive 4. Kanban card not displayed correctly Technical Reason: When creating a shortcut via 'action_create_shortcut', missing 'mimetype' and 'url' fields caused improper rendering of link/video shortcuts. After this commit: will display the proper format of the link/video. Task-4477679 Forward-Port-Of: odoo/enterprise#80887 Forward-Port-Of: odoo/enterprise#78677
Forward-Port-Of: odoo/enterprise#81196 Forward-Port-Of: odoo/enterprise#81017
Original PR description
Forward-Port-Of: odoo/enterprise#81196 Forward-Port-Of: odoo/enterprise#81017
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the com
Original PR description
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the company_id.check_account_audit_trail, but also we should consider move.posted_before and if not, it should be deleted not reversed. Fix: - Replace the company_id.check_account_audit_trail check with _is_protected_by_audit_trail() which includes checking if the move is posted before or not. opw - 4562732 Forward-Port-Of: odoo/enterprise#81061
[FIX] l10n_ar: price unit precision digits on invoice report. This pr was created to adapt l10n_ar_reports/tests/IVA_Ventas.txt and l10n_ar_reports/tests/Ventas.txt files to the changes of https://github.com/odoo/odoo/pull/171131/commits/95bd2d3677f6b534e9eb660e9757e87cf778d7b5 Ticket Adhoc side: 77471 Task latam: 1226 Forward-Port-Of: odoo/enterprise#80650 Forward-Port-Of: odoo/enterprise#77800
Original PR description
[FIX] l10n_ar: price unit precision digits on invoice report. This pr was created to adapt l10n_ar_reports/tests/IVA_Ventas.txt and l10n_ar_reports/tests/Ventas.txt files to the changes of https://github.com/odoo/odoo/pull/171131/commits/95bd2d3677f6b534e9eb660e9757e87cf778d7b5 Ticket Adhoc side: 77471 Task latam: 1226 Forward-Port-Of: odoo/enterprise#80650 Forward-Port-Of: odoo/enterprise#77800
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/189710 --- I confirm I have signed
Original PR description
## Pull Request HOOT (PRHOOT) 28 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/189710 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#80292 Forward-Port-Of: odoo/enterprise#78636
Issue: When we export a report to xlsx containing some amounts in foreign currency, those amounts are exported as values in the file, and loose any kind of currency symbols. It then becomes impossible to know what currency they were expressed in. Solution: When a column has an expression label with the 'currency' word inside, adds a new column right next to it, with the currency 3 letters code as value. This is done in the accounting reports framework and so is used on all reports using a c
Original PR description
Issue: When we export a report to xlsx containing some amounts in foreign currency, those amounts are exported as values in the file, and loose any kind of currency symbols. It then becomes impossible to know what currency they were expressed in. Solution: When a column has an expression label with the 'currency' word inside, adds a new column right next to it, with the currency 3 letters code as value. This is done in the accounting reports framework and so is used on all reports using a custom engine. task-4011008 Forward-Port-Of: odoo/enterprise#80638 Forward-Port-Of: odoo/enterprise#76441
*l10n_nl_intrastat,l10n_nl_reports,l10n_nl_reports_sbr, l10n_nl_reports_sbr_icp,l10n_nl_reports_sbr_ob_nummer, l10n_nl_reports_sbr_status_info [task-4421055](https://www.odoo.com/odoo/project.task/4421055) Forward-Port-Of: odoo/enterprise#81032 Forward-Port-Of: odoo/enterprise#78111
Original PR description
*l10n_nl_intrastat,l10n_nl_reports,l10n_nl_reports_sbr, l10n_nl_reports_sbr_icp,l10n_nl_reports_sbr_ob_nummer, l10n_nl_reports_sbr_status_info [task-4421055](https://www.odoo.com/odoo/project.task/4421055) Forward-Port-Of: odoo/enterprise#81032 Forward-Port-Of: odoo/enterprise#78111
Steps to reproduce ================== - Install documents,project - Go to documents - Open any document - Click on share - Click on "Copy link" - Go to a project task - Click on a log note - Open the full composer - Type some text and select it - Paste the copied url - Post the log note - Click on the link => Missing Action: the action "..." does not exist Cause of the issue ================== Documents [redirects] `/odoo/documents/<access-token>` to either the backend o
Original PR description
Steps to reproduce ================== - Install documents,project - Go to documents - Open any document - Click on share - Click on "Copy link" - Go to a project task - Click on a log note - Open the full composer - Type some text and select it - Paste the copied url - Post the log note - Click on the link => Missing Action: the action "..." does not exist Cause of the issue ================== Documents [redirects] `/odoo/documents/<access-token>` to either the backend or the portal. There is a global click handler in the router that intercepts click on links to update and push the router state. Solution ======== We should not handle those links, the http redirection will take care of it. --- [redirects]: https://github.com/odoo/enterprise/blob/882e4453c8eadae8e39ea02314377c617d3b9e0f/documents/controllers/home.py#L24 opw-4611260 Forward-Port-Of: odoo/enterprise#81016
No need to fetch available embedded actions on inaccessible folders. FU of d391313e. Task-4525850 Forward-Port-Of: odoo/enterprise#81049
Original PR description
No need to fetch available embedded actions on inaccessible folders. FU of d391313e. Task-4525850 Forward-Port-Of: odoo/enterprise#81049
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An image placeholder appears when no image is set for a product. This behavior is inconsistent with the product catalog page in the Sales app. Solution: - Removed the XPath that adds the image placeholder in the product catalog. task-4302221 Forward-Port-Of: odoo/enterprise#78937
Original PR description
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An image placeholder appears when no image is set for a product. This behavior is inconsistent with the product catalog page in the Sales app. Solution: - Removed the XPath that adds the image placeholder in the product catalog. task-4302221 Forward-Port-Of: odoo/enterprise#78937
Since the change of res.users from view (UI for groups), the sequence is used, but the data has not been updated. related: https://github.com/odoo/odoo/commit/2258fe4071f15ae72ab3384de6bbe43ff0db5848 Forward-Port-Of: odoo/enterprise#80212
Original PR description
Since the change of res.users from view (UI for groups), the sequence is used, but the data has not been updated. related: https://github.com/odoo/odoo/commit/2258fe4071f15ae72ab3384de6bbe43ff0db5848 Forward-Port-Of: odoo/enterprise#80212
Problem ---------- wrong behaviour with the number_of_days_display / number_of_hours_display / number_of_days : Objective ---------- Fix the TestHR.test_flow : in the creation of leave allocation. Only number_of_days_display can have a value. But with a leave_type.request_unit = 'hour', number_of_hours_display should be used Solution ---------- Depends on the visibility of number_of_days_display and number_of_hours_display, put the value in the good field task-4521658 Forward-Po
Original PR description
Problem ---------- wrong behaviour with the number_of_days_display / number_of_hours_display / number_of_days : Objective ---------- Fix the TestHR.test_flow : in the creation of leave allocation. Only number_of_days_display can have a value. But with a leave_type.request_unit = 'hour', number_of_hours_display should be used Solution ---------- Depends on the visibility of number_of_days_display and number_of_hours_display, put the value in the good field task-4521658 Forward-Port-Of: odoo/enterprise#80400
Handle the case where goal.deadline is False when the goal is duplicated. Forward-Port-Of: odoo/enterprise#81158
Original PR description
Handle the case where goal.deadline is False when the goal is duplicated. Forward-Port-Of: odoo/enterprise#81158
### Steps to reproduce: - Create a manufacturing order - Navigate to the Miscellaneous tab and add an Analytic Distribution - Add a component to the manufacturing order with the quantity set to 10000, for example - Produce the manufacturing order - Navigate to the analytic account line associated with the stock move with 10000 units - Update the analytic account line’s date to be in the previous week - Navigate to Timesheets > Timesheets > All Timesheets and then navigate to the pr
Original PR description
### Steps to reproduce: - Create a manufacturing order - Navigate to the Miscellaneous tab and add an Analytic Distribution - Add a component to the manufacturing order with the quantity set to…
### Steps to reproduce: - Create a manufacturing order - Navigate to the Miscellaneous tab and add an Analytic Distribution - Add a component to the manufacturing order with the quantity set to 10000, for example - Produce the manufacturing order - Navigate to the analytic account line associated with the stock move with 10000 units - Update the analytic account line’s date to be in the previous week - Navigate to Timesheets > Timesheets > All Timesheets and then navigate to the previous week - Observe that your user has worked a very large amount of overtime ### Cause: This is happening because for MO when creating an analytic line in some cases we store the unit_amount as the quantity of the materials used. https://github.com/odoo/odoo/blob/ee7fbcb759fd8257ed2f52d1d5acfc6921d42870/addons/stock_account/models/stock_move.py#L437-L438 And when fetching the worked hours for the overtime indication we don't check if the analytic line is a timesheet or not https://github.com/odoo/enterprise/blob/ca935872fd70b9fc5b2d13359424916b3afa01eb/timesheet_grid/models/hr_employee.py#L120-L126 https://github.com/odoo/enterprise/blob/ca935872fd70b9fc5b2d13359424916b3afa01eb/timesheet_grid_holidays/models/hr_employee.py#L10-L16 ### Fix: Since we are only fetching timesheets so we will check if the project is set or not as if it is set it means that the record is a timesheet opw-4179137 Forward-Port-Of: odoo/enterprise#81109 Forward-Port-Of: odoo/enterprise#81026
…versing Steps to reproduce: - In settings, set a default "Default invoice transaction code" and "Default refund transaction code" - Create an invoice with an invoice line and post it - Reverse it Issue: - The intrastat code will be the one from the invoice (and not the default refund one) Cause: When copying the lines we keep the one from the invoice Solution: Delete the default values when copying the data so the compute is triggered correctly which will set the correct value
Original PR description
…versing Steps to reproduce: - In settings, set a default "Default invoice transaction code" and "Default refund transaction code" - Create an invoice with an invoice line and post it - Reverse it Issue: - The intrastat code will be the one from the invoice (and not the default refund one) Cause: When copying the lines we keep the one from the invoice Solution: Delete the default values when copying the data so the compute is triggered correctly which will set the correct value opw-4417566 Forward-Port-Of: odoo/enterprise#79267
When users attempt to send a template with 10 body variables, the sample values for `Free Text 1` and `Free Text 10` are swapped. Steps to Produce: - Create a template with 10 body variables - Give sample value for `Body - {{1}}` as 1 and `Body - {{10}}` as 10 - Open the WhatsApp composer using the created template - `Free text 1` will have a value of 10 instead of 1 - `Free text 10` will have a value of 1 instead of 10 Problem: The variables are sorted by name, causing `{{10}}`
Original PR description
When users attempt to send a template with 10 body variables, the sample values for `Free Text 1` and `Free Text 10` are swapped.
Steps to Produce:
- Create a template with 10 body variables
- Give sample value for `Body - {{1}}` as 1 and `Body - {{10}}` as 10
- Open the WhatsApp composer using the created template
- `Free text 1` will have a value of 10 instead of 1
- `Free text 10` will have a value of 1 instead of 10
Problem:
The variables are sorted by name, causing `{{10}}` to appear before `{{1}}`, which leads to the values being swapped.
Solution:
Sort the variables by extracting the index from the variable name, so they are ordered numerically rather than alphabetically.
Task-4212923
Forward-Port-Of: odoo/enterprise#80534
Forward-Port-Of: odoo/enterprise#71307This commit add a new xml export (DES) for intrastat report. Regarding the legal specifications at: https://www.douane.gouv.fr/sites/default/files/uploads/files/2020-10/ManuelDesXML.pdf task-4402569 Forward-Port-Of: odoo/enterprise#77866
Original PR description
This commit add a new xml export (DES) for intrastat report. Regarding the legal specifications at: https://www.douane.gouv.fr/sites/default/files/uploads/files/2020-10/ManuelDesXML.pdf task-4402569 Forward-Port-Of: odoo/enterprise#77866
Adding a condition for Avatax not being enabled on the taxes column in portal view of sales orders. task: 4423974 Forward-Port-Of: odoo/enterprise#80616 Forward-Port-Of: odoo/enterprise#77683
Original PR description
Adding a condition for Avatax not being enabled on the taxes column in portal view of sales orders. task: 4423974 Forward-Port-Of: odoo/enterprise#80616 Forward-Port-Of: odoo/enterprise#77683
Currently, when `marketing_automation_whatsapp` is installed, marketing automation campaign statistics are not computed correctly. ### Steps to Reproduce 1. Install `marketing_automation_whatsapp`. 2. Create a marketing automation campaign with an email activity. 3. Ensure one or more traces are rejected (e.g., by using invalid email addresses). 4. View the activity statistics. Expected Result: The rejected count on the right correctly displays the number of rejected traces. Actu
Original PR description
Currently, when `marketing_automation_whatsapp` is installed, marketing automation campaign statistics are not computed correctly. ### Steps to Reproduce 1. Install `marketing_automation_whatsapp`.…
Currently, when `marketing_automation_whatsapp` is installed, marketing automation campaign statistics are not computed correctly. ### Steps to Reproduce 1. Install `marketing_automation_whatsapp`. 2. Create a marketing automation campaign with an email activity. 3. Ensure one or more traces are rejected (e.g., by using invalid email addresses). 4. View the activity statistics. Expected Result: The rejected count on the right correctly displays the number of rejected traces. Actual Result: The rejected count on the right always displays `0`, even when rejected traces exist. ### Cause The `marketing_automation_whatsapp` module overrides `_get_full_statistics` to include WhatsApp-related statistics in addition to the marketing data. However, the override currently concatenates the results from the base `_get_full_statistics` and the WhatsApp-specific statistics. And because `MarketingActivity._compute_statistics` doesn't expect `_get_full_statistics` to return multiple entries for a given `activity_id`, the values from the WhatsApp-specific results end up overwriting the base values. opw-4292488 opw-4523885 opw-4585705 opw-4585779 Forward-Port-Of: odoo/enterprise#79348
Since 3.13, leading whitespace is automatically stripped in a docstring (python/cpython#81283). The `info` field of an ir.model is a copy of the docstring, so running :TestStudioExports.test_export_customizations on 3.13 fails because the documents are different (the content of the info field is indented and has a leading space matching `Model`'s docstring). Instead of duplicating the info field, just inject it in the document we're creating from the record, that way it doesn't break if so
Original PR description
Since 3.13, leading whitespace is automatically stripped in a docstring (python/cpython#81283). The `info` field of an ir.model is a copy of the docstring, so running :TestStudioExports.test_export_customizations on 3.13 fails because the documents are different (the content of the info field is indented and has a leading space matching `Model`'s docstring). Instead of duplicating the info field, just inject it in the document we're creating from the record, that way it doesn't break if someone decides to improve the docstring either. Forward-Port-Of: odoo/enterprise#81087 Forward-Port-Of: odoo/enterprise#81045
- Sign > Documents > Click on any of the Kanban record - Reload the view (either reload the browser, or activate the debug, or change to dark mode on the user menu). Before this commit, on reloading the sign document page user was redirected back to kanban view. This occurs because, the client action 'sign.Document' requires attributes which are found in the context - { id, token, create_uid, state, request_item_states} that was lost when reloading. Now, { id, token, create_uid, state,
Original PR description
- Sign > Documents > Click on any of the Kanban record
- Reload the view (either reload the browser, or activate
the debug, or change to dark mode on the user menu).
Before this commit, on reloading the sign document page user was redirected back to kanban view. This occurs because, the client action 'sign.Document' requires attributes which are found in the context - { id, token, create_uid, state, request_item_states} that was lost when reloading.
Now, { id, token, create_uid, state, request_item_states} is put in the query string of the URL, in that way, when reloading, the client action 'sign.Document' will have the needed attributes. Note that, this is also the behavior of the base_import 'ImportAction' action [1].
task-4391729
[1] : https://github.com/odoo/odoo/pull/182744/commits/a6801ce4aa65cd023e2a762ab5c42755a4599c95
Forward-Port-Of: odoo/enterprise#77399task-4610498 Forward-Port-Of: odoo/enterprise#80929
Original PR description
task-4610498 Forward-Port-Of: odoo/enterprise#80929