Monday, March 17, 2025
21 changes · master
Enhancements to existing features
This update aligns the enterprise e-invoicing integration with a shared approach for fetching electronic invoices and notifying users when new invoices arrive. It helps prepare Odoo for consistent e-invoice workflows across Peppol and future localizations such as Nemhandel.
Original PR description
We start accumulating buttons for fetching electronic invoices and their statuses with different localisations. In addition to peppol, there l10n_tk and soon l10n_dk (with Nemhandel: https://github.com/odoo/odoo/pull/190474) which also needs such a button In addition to these buttons, we also need a standard way of notifying users when receiving einvoices for these different modules This commit just adapts enterprise function signature for the changes made in community related prs: - odoo/upgrade#7205 - odoo/odoo#197233 task-4457146
The IoT system now keeps its websocket connection open by default instead of only opening it for report printing. This simplifies future IoT features while keeping server load low because one shared connection is used per company.
Original PR description
We used to open the websocket channel between iot box and db only when a report was set, to opening a useless connection. In order to simplify the code and reduce complexity when using ws for anything else than printing a report, we removed this logic. Note that we only use one ws channel for all iot boxes on the same company, making the load very small. Upgrade: odoo/upgrade#7383 Task: 4648490
Code cleanup and technical improvements
The spreadsheet global filters editor was reorganized to manage its screen state in a central store. This is an internal cleanup that should make the editor easier to maintain and prepare it for future improvements, without changing the expected user workflow.
Original PR description
This commit simplifies the global filters editors by using a store to manage the state of the editor. Task: 4589753
Miscellaneous changes
Steps to reproduce: - Ensure the Colombian localization is installed and set up - Make an invoice with taxes "19%" and "15% RteVAT 19%" - Try to sign the invoice - Get the error Occurs after the global rounding refactor d5da2b62263f85fbce0f2548085c066cbbf10371 By mistake, the operation is using now the tax percent instead of the tax amount opw-4446123 Forward-Port-Of: odoo/enterprise#81288
Original PR description
Steps to reproduce: - Ensure the Colombian localization is installed and set up - Make an invoice with taxes "19%" and "15% RteVAT 19%" - Try to sign the invoice - Get the error Occurs after the global rounding refactor d5da2b62263f85fbce0f2548085c066cbbf10371 By mistake, the operation is using now the tax percent instead of the tax amount opw-4446123 Forward-Port-Of: odoo/enterprise#81288
This update cleans up parts of Odoo's messaging system ahead of a major release. It removes duplicate mobile notification logic so muted chat channels are handled consistently and users are less likely to receive unwanted notifications.
This update reorganizes internal WhatsApp messaging logic so it sits in the modules where it is most relevant. It also centralizes timezone handling, reducing duplicate code and making future maintenance safer without changing the user experience.
LATAM Task 1300 - ADHOC Task 47476 Forward-Port-Of: odoo/enterprise#81489 Forward-Port-Of: odoo/enterprise#79635
Original PR description
LATAM Task 1300 - ADHOC Task 47476 Forward-Port-Of: odoo/enterprise#81489 Forward-Port-Of: odoo/enterprise#79635
We're adding support for recaptcha in appointment forms to prevent bots from easily filling up slots. In 17.0 cloudflare turnstile is added as an alternative and/or fallback for recaptcha. We adapt the js code to call the cloudflare client API which gives us support of this feature "for free" as all of the logic is already implemented for the check. task-4335141 Forward-Port-Of: odoo/enterprise#81247 Forward-Port-Of: odoo/enterprise#76672
Original PR description
We're adding support for recaptcha in appointment forms to prevent bots from easily filling up slots. In 17.0 cloudflare turnstile is added as an alternative and/or fallback for recaptcha. We adapt the js code to call the cloudflare client API which gives us support of this feature "for free" as all of the logic is already implemented for the check. task-4335141 Forward-Port-Of: odoo/enterprise#81247 Forward-Port-Of: odoo/enterprise#76672
Add a step that ensures a name_search has been fired. The hypothesis is that the dropdown item is already present before editing the m2o's value (that triggers a name_search) The tour advances, captures a trigger but right there the rpc returns, modifies the DOM and the captured element is not there anymore, crashing as a consequence. runbot-error-67580 Forward-Port-Of: odoo/enterprise#80918 Forward-Port-Of: odoo/enterprise#80598
Original PR description
Add a step that ensures a name_search has been fired. The hypothesis is that the dropdown item is already present before editing the m2o's value (that triggers a name_search) The tour advances, captures a trigger but right there the rpc returns, modifies the DOM and the captured element is not there anymore, crashing as a consequence. runbot-error-67580 Forward-Port-Of: odoo/enterprise#80918 Forward-Port-Of: odoo/enterprise#80598
PR #75203 removed the mobile field, and so updated search domains that used it in VoIP, but the corresponding ORs weren't correctly cleaned up, breaking the search. This commit gets rid of the obsolete ORs. Forward-Port-Of: odoo/enterprise#81353
Original PR description
PR #75203 removed the mobile field, and so updated search domains that used it in VoIP, but the corresponding ORs weren't correctly cleaned up, breaking the search. This commit gets rid of the obsolete ORs. Forward-Port-Of: odoo/enterprise#81353
**Issue:** An error is raised when trying to discard a timesheet entry. **Steps to reproduce:** - Open Timesheets. - Open an existing entry by clicking on the magnifying glass. - Start a timesheet entry by clicking "Start". - Click on "Discard". opw-4614472 Forward-Port-Of: odoo/enterprise#81385 Forward-Port-Of: odoo/enterprise#81186
Original PR description
**Issue:** An error is raised when trying to discard a timesheet entry. **Steps to reproduce:** - Open Timesheets. - Open an existing entry by clicking on the magnifying glass. - Start a timesheet entry by clicking "Start". - Click on "Discard". opw-4614472 Forward-Port-Of: odoo/enterprise#81385 Forward-Port-Of: odoo/enterprise#81186
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131 Forward-Port-Of: odoo/enterprise#81425 Forward-Port-Of: odoo/enterprise#81226
Original PR description
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131 Forward-Port-Of: odoo/enterprise#81425 Forward-Port-Of: odoo/enterprise#81226
Steps to reproduce: - Create an invoice with the following lines: 1. Price Unit 3163.79 | Qty 1 | Discount 25% | Tax 16% 2. Price Unit 2992.41 | Qty 1 | Discount 25% | Tax 16% 3. Price Unit 3025.86 | Qty 1 | Discount 25% | Tax 16% - Confirm, Send to validation Issue: Validation will fail with error ``` Message : Error de validaciones adicionales [Error #CFDI40111] El TipoDeComprobante no es I,E o N, y un concepto incluye el campo descuento. Folio: 1. Serie: INV/2025/. El valo
Original PR description
Steps to reproduce: - Create an invoice with the following lines: 1. Price Unit 3163.79 | Qty 1 | Discount 25% | Tax 16% 2. Price Unit 2992.41 | Qty 1 | Discount 25% | Tax 16% 3. Price Unit 3025.86 | Qty 1 | Discount 25% | Tax 16% - Confirm, Send to validation Issue: Validation will fail with error ``` Message : Error de validaciones adicionales [Error #CFDI40111] El TipoDeComprobante no es I,E o N, y un concepto incluye el campo descuento. Folio: 1. Serie: INV/2025/. El valor del atributo Descuento (2295.51) no coincide con la suma de los importes (790.947500 + 748.090000 + 756.465000 = 2295.50) ``` This occurs because when correcting the discount rounding we round the biggest discount amount so the amounts might not add up correctly anymore opw-4596741 Forward-Port-Of: odoo/enterprise#80695
…sepa Steps to reproduce: - have EU loca (l10n_be) - activate sepa - activate a mandate for a customer - create two invoices for this customer - in invoice list view, select the two invoices > click on pay > select sepa and group payment > create payments Issue: Two separate payments are being created, which significantly increases transaction fees. Cause: A write operation on line_ids triggers a chain of computations that deactivates group_payment. Solution: To minimize unne
Original PR description
…sepa Steps to reproduce: - have EU loca (l10n_be) - activate sepa - activate a mandate for a customer - create two invoices for this customer - in invoice list view, select the two invoices > click on pay > select sepa and group payment > create payments Issue: Two separate payments are being created, which significantly increases transaction fees. Cause: A write operation on line_ids triggers a chain of computations that deactivates group_payment. Solution: To minimize unnecessary writes, we prevent modifications when wizard.line_ids.partner_id consists of partners with valid mandates. Additionally, we explicitly include the current group_payment state in the write operation. This ensures that if multiple partners are selected—some with valid mandates and some without—the group payment setting remains correctly applied. opw-4551825 Forward-Port-Of: odoo/enterprise#81391
Issue ===== When logged in a branch company, it is not possible, in the Barcode app inventory adjustment, to select a product with its `company_id` set on the parent company. How to reproduce ================ 1. Create a branch company; 2. Create a product and set its company field on parent company; 3. Select the branch company as the current user company; 4. Go to Barcode > Inventory Count > Add Product; 5. In the product field, search the parent company's product -> Nothing found.
Original PR description
Issue ===== When logged in a branch company, it is not possible, in the Barcode app inventory adjustment, to select a product with its `company_id` set on the parent company. How to reproduce ================ 1. Create a branch company; 2. Create a product and set its company field on parent company; 3. Select the branch company as the current user company; 4. Go to Barcode > Inventory Count > Add Product; 5. In the product field, search the parent company's product -> Nothing found. Cause of the issue ================== There was a domain on the `product_id` field who restrain products only to the current company (both for quants and stock move line.) [OPW-4603831](https://www.odoo.com/odoo/project/49/tasks/4603831) Forward-Port-Of: odoo/enterprise#81453
__Current behavior before commit:__ When clicking on the share button of a knowledge article, the `/knowledge/get_article_permission_panel_data` call is made twice. This is because the call to `loadPanel` is made inside the `onWillStart` as well as in the `useEffect`. The call made in the `onWillStart` was already removed in [this PR][1]. However it was added back in the [saas-17.1 forward-port][2] probably by mistake. __Description of the fix:__ Removed the call to `loadPanel` in the
Original PR description
__Current behavior before commit:__ When clicking on the share button of a knowledge article, the `/knowledge/get_article_permission_panel_data` call is made twice. This is because the call to `loadPanel` is made inside the `onWillStart` as well as in the `useEffect`. The call made in the `onWillStart` was already removed in [this PR][1]. However it was added back in the [saas-17.1 forward-port][2] probably by mistake. __Description of the fix:__ Removed the call to `loadPanel` in the `onWillStart`. opw-4603551 [1]: https://github.com/odoo/enterprise/pull/58825 [2]: https://github.com/odoo/enterprise/pull/59561 Forward-Port-Of: odoo/enterprise#81355
Before this commit: When a (SO) with subcontracted service product is confirmed, a (PO) is created. However, if a second SO is created with referrer for the same vendor, a new PO is generated, even if an RFQ already exists for that vendor. After this commit: When confirming an SO with a referrer and a subcontracted service product , and if an RFQ already exists for the same vendor, the PO lines are added to the existing RFQ instead of creating a new PO. task-4578812 Forward-Port-Of: odo
Original PR description
Before this commit: When a (SO) with subcontracted service product is confirmed, a (PO) is created. However, if a second SO is created with referrer for the same vendor, a new PO is generated, even if an RFQ already exists for that vendor. After this commit: When confirming an SO with a referrer and a subcontracted service product , and if an RFQ already exists for the same vendor, the PO lines are added to the existing RFQ instead of creating a new PO. task-4578812 Forward-Port-Of: odoo/enterprise#80847
Related to odoo/odoo#201029 Now that Can publish is based on access rights, some extra queries are needed when website is installed. Note that the appointment-only counts are unchanged. task-3175890 Forward-Port-Of: odoo/enterprise#81322 Forward-Port-Of: odoo/enterprise#81164
Original PR description
Related to odoo/odoo#201029 Now that Can publish is based on access rights, some extra queries are needed when website is installed. Note that the appointment-only counts are unchanged. task-3175890 Forward-Port-Of: odoo/enterprise#81322 Forward-Port-Of: odoo/enterprise#81164
**Issue** The project's Gantt view doesn't work if the "Project Stages" setting is not enabled. **Steps to reproduce** - Install `project_enterprise` and Studio. - Have project stages disabled. - Open Projects app. - Click on Studio button > Views > Try to activate Gantt view. -> `AccessError for read on stage_id` **Cause** The `stage_id` field used on the project gantt view is only readable if the project stages feature is enabled. https://github.com/odoo/enterprise/blob/b911ed1
Original PR description
**Issue** The project's Gantt view doesn't work if the "Project Stages" setting is not enabled. **Steps to reproduce** - Install `project_enterprise` and Studio. - Have project stages disabled. -…
**Issue** The project's Gantt view doesn't work if the "Project Stages" setting is not enabled. **Steps to reproduce** - Install `project_enterprise` and Studio. - Have project stages disabled. - Open Projects app. - Click on Studio button > Views > Try to activate Gantt view. -> `AccessError for read on stage_id` **Cause** The `stage_id` field used on the project gantt view is only readable if the project stages feature is enabled. https://github.com/odoo/enterprise/blob/b911ed1e857e1534c86495cd4934c1adb8ae9597/project_enterprise/views/project_views.xml#L12 **Solution** A hack is to add in the model metadata the `colorField` key used by the gantt renderer to color the pills: https://github.com/odoo/enterprise/blob/28f2fba988b1b225c97d15729020962ed4dee73b/web_gantt/static/src/gantt_renderer.js#L778 It is normally set when parsing the view here: https://github.com/odoo/enterprise/blob/dfe2795b820527a8226d8cf1afa5bf7ac8fcb53d/web_gantt/static/src/gantt_arch_parser.js#L194 This avoids trying to read the field if the user doesn't have the necessary `project.group_project_stages` group. Note: some missing views are also added in this commit, they were missing when the project stage feature wasn't enabled. opw-4592110 Forward-Port-Of: odoo/enterprise#81388 Forward-Port-Of: odoo/enterprise#79968
The unfold all options wasn't working correctly in the colombian reports since we added the line, and we only checked if the line was unfolded manually. Now we also check if the unfold all options is activated opw-4621274 Forward-Port-Of: odoo/enterprise#81377
Original PR description
The unfold all options wasn't working correctly in the colombian reports since we added the line, and we only checked if the line was unfolded manually. Now we also check if the unfold all options is activated opw-4621274 Forward-Port-Of: odoo/enterprise#81377
In this commit, we fix the following error that can occurs in tour hr_contract_salary_tour_hr_sign. ``` AssertionError: The test code "odoo.startTour('hr_contract_salary_tour_ hr_sign', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false, "startUrl": "/", "delayToCheckUndeterminisms": 0})" failed UncaughtTypeError: Cannot read properties of null (reading 'querySelector') ``` Forward-Port-Of: odoo/enterprise#81460 Forward-Port-Of: odoo/enterprise#81366
Original PR description
In this commit, we fix the following error that can occurs in tour hr_contract_salary_tour_hr_sign.
```
AssertionError: The test code "odoo.startTour('hr_contract_salary_tour_
hr_sign', {"stepDelay": 0, "keepWatchBrowser": false, "debug": false,
"startUrl": "/", "delayToCheckUndeterminisms": 0})" failed
UncaughtTypeError: Cannot read properties of null
(reading 'querySelector')
```
Forward-Port-Of: odoo/enterprise#81460
Forward-Port-Of: odoo/enterprise#81366