Daily updates from Odoo
Navigate
Branch
Wednesday, June 12, 2024
62 changes
21 changes
New functionality added to Odoo
New US databases will automatically include key accounting and compliance tools such as US reports, 1099 reporting, check layouts, NACHA payments, and Avatax. This helps new users start with the expected US localization setup without manually finding and installing each related app.
Original PR description
[ADD] l10n_us_account: Auto load the localization pack and related reports automatically Problem: Users, especially newer ones, don't have the experience; or don't know how to install modules…
[ADD] l10n_us_account: Auto load the localization pack and related reports automatically Problem: Users, especially newer ones, don't have the experience; or don't know how to install modules manually to their database. This will create the incorrect idea that Odoo doesn't fulfill the minimum requirements to operate in the US. - Examples of those uninstalled requirements are ABA routing for payments, correct layout for checks, 1099 reports, and Avatax for tax calculation. Desired behavior:- Auto load the following when creating odoo US database - US Accounting: l10n_us_account - United States Localization: l10n_us - US Accounting Reports: l10n_us_reports - 1099 Reporting: l10n_us_1099 - US Checks Layout: l10n_us_check_printing - NACHA Payments: l10n_us_payment_nacha - Avatax: account_avatax Solution: Create new module l10n_us_account to separate the accounting dependent stuff and auto load it and l10n_us which is going to load the mentioned packages above for US-db. Task-3865230 Enterprise PR: https://github.com/odoo/enterprise/pull/60644 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Duplicating website pages now gives each copy a unique internal identifier, preventing errors when users open or edit the original or duplicated pages. This improves reliability for website managers who create pages by copying existing ones.
Original PR description
When a user duplicates a view of a website page and then attempts to open either the original or duplicated view and click on ``edit``, a traceback will appear. Steps to reproduce: - Install the…
When a user duplicates a view of a website page and then attempts to open either the original or duplicated view and click on ``edit``, a traceback will appear. Steps to reproduce: - Install the ``website`` module - Website > Site > Pages - Create one new page > Actions > Duplicate - Repeat 2-3 times - Click on the newly created page or a duplicated one > ``Edit`` Traceback : - ``Expected singleton: ir.ui.view(2224, 2225)`` When duplicating a website page view, we encounter an issue where the ``key`` value remains unchanged, leading to an error. This occurs because, after calling the super in the ``copy_data`` method, the ``key`` is already set on the fields that are being copied to the new record, and ``website.page`` delegates some of its fields to the ``ir.ui.view`` that it holds. This commit will fix the above error by calling the ``copy`` method instead of ``copy_data``. sentry - 4991676595 opw-3936237 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Manufacturing orders now keep component quantities that users manually enter instead of recalculating them from the bill of materials when using Produce All. This prevents unexpected changes to recorded material consumption and helps keep production records accurate.
Original PR description
### Steps to reproduce: - Create a product FP with a BOM consuming 1 unit of a product COMP - Create and confirm a MO for 1 unit of FP using the BOM - Set the consumed quantity of COMP to 2 and tick…
### Steps to reproduce: - Create a product FP with a BOM consuming 1 unit of a product COMP - Create and confirm a MO for 1 unit of FP using the BOM - Set the consumed quantity of COMP to 2 and tick consumed - Save and "Produce All" #### > the consumed quantity of COMP was updated to 1 according to the BOM ### Cause of the issue: Clicking on "Produce All" will trigger the `pre_button_mark_done` that will update the qty_producing according to the bom proportions because of these lines: https://github.com/odoo/odoo/blob/86f977f8f4b9859790ad77af3a40234c8eb374e9/addons/mrp/models/mrp_production.py#L1217-L1227 However, this update should be bypassed if the quantity was set on the move. This is the role of these lines: https://github.com/odoo/odoo/blob/86f977f8f4b9859790ad77af3a40234c8eb374e9/addons/mrp/models/mrp_production.py#L1218-L1220 The issue does not appear in 17.0 because, thanks to commit https://github.com/odoo/odoo/commit/5bb0f96f1973fa7e19b6701944b4a29577f3314f the `manual_consumption` field of the stock moves related to a manufacturing order is set to be True as soon as the quantity is changed because of these lines: https://github.com/odoo/odoo/blob/9a11717c17b860ec2f1b2e228517c0d3945c474a/addons/mrp/static/src/widgets/mrp_consumed.js#L25-L27 However, this js file was removed in saas-17.2 by commit https://github.com/odoo/odoo/commit/e143345193577442ffd1f46272a09d7a5801d567. opw-3934942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Signatures now keep their intended size on high-resolution displays, including 4K screens with scaling enabled. Automatically generated signatures are also better centered, making signed documents look more consistent and professional.
Original PR description
Before this commit, when a 4K screen was used with devicePixelRatio > 1, the signature svg size was divided by the devicePixelRatio value. We would have small automatic signature shrinked. taskid: 3971056 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where website live chat replies could fail for visitors whose browser language was not installed in the database. Notifications are now sent without depending on the visitor's session language, so operators' responses reach guests reliably.
Original PR description
Use case: On a database that has only the "English (US)" (`en_US`) language installed, 1. A visitor having set his browser prefered language to `fr_FR` browse the website, open the livechat and ask a question. 2. A livechat operator pick-up and respond 3. The visitor never see the reponse On the server we see an error: ```odoo.addons.bus.websocket: Invalid language code: fr_FR``` That crash prevent sending the operator response back to the guest (website visitor). As we don't need the language at all to dispatch bus notification, set it to `None`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Modules related to multiple countries are historically named without `l10n_` prefix. Also, it is not always linked to the country but just used for the `auto_install` feature like in `account_reports_cash_basis` for instance, where we don't want to make it sound like a localization feature. Forward-Port-Of: odoo/odoo#163730
Original PR description
Modules related to multiple countries are historically named without `l10n_` prefix. Also, it is not always linked to the country but just used for the `auto_install` feature like in `account_reports_cash_basis` for instance, where we don't want to make it sound like a localization feature. Forward-Port-Of: odoo/odoo#163730
This traceback arises when the user tries to remove the Batch Limit value and test the imported file. To reproduce this issue: 1) Import a file with large data in any module 2) You see the Batch limit at the left side pannel 3) Remove the default "Batch Limit" value 4) Test the file 5) A traceback will encountered Error:- ``` TypeError: '<' not supported between instances of 'int' and 'str' ``` when the user removes the default batch limit its value will be an empty string.
Original PR description
This traceback arises when the user tries to remove the Batch Limit value and test the imported file. To reproduce this issue: 1) Import a file with large data in any module 2) You see the Batch…
This traceback arises when the user tries to remove the Batch Limit value and test the imported file.
To reproduce this issue:
1) Import a file with large data in any module
2) You see the Batch limit at the left side pannel
3) Remove the default "Batch Limit" value
4) Test the file
5) A traceback will encountered
Error:-
```
TypeError: '<' not supported between instances of 'int' and 'str'
```
when the user removes the default batch limit its value will be an empty string.
You can see in [1] that parseFloat('') is "NaN" so it directly assigns the limit as the value which is an empty string.
[1]
https://github.com/odoo/odoo/blob/2c40a55232fb501dd70b64f7ddbdc4244f365139/addons/base_import/static/src/import_data_sidepanel/import_data_sidepanel.js#L34-L36
which leads to a traceback when a comparison is done between int and str.
https://github.com/odoo/odoo/blob/106c343027e3bab1c94c414f30e914cf673cceec/odoo/models.py#L1318-L1319
After applying this commit will resolve the issue of getting an int value instead of a str.
sentry-5298904064
Forward-Port-Of: odoo/odoo#167323This only adds an id to the div containing the date in the order receipt so that it can be xpath easily in the enterprise PR. Enterprise PR: odoo/enterprise#63966 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168270
Original PR description
This only adds an id to the div containing the date in the order receipt so that it can be xpath easily in the enterprise PR. Enterprise PR: odoo/enterprise#63966 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168270
This commit implements two changes to prevent search engines from crawling and indexing content on websites marked as neutralized: - Robots.txt update: The robots.txt field in the website database is updated with a rule disallowing all crawling (User-agent: * \n Disallow: /). - Robots meta tag injection: An XPath expression is used to inject a robots meta tag with content="noindex, nofollow" within the web.neutralize_banner view's <head> section. These combined changes ensure a strong sig
Original PR description
This commit implements two changes to prevent search engines from crawling and indexing content on websites marked as neutralized: - Robots.txt update: The robots.txt field in the website database is updated with a rule disallowing all crawling (User-agent: * \n Disallow: /). - Robots meta tag injection: An XPath expression is used to inject a robots meta tag with content="noindex, nofollow" within the web.neutralize_banner view's <head> section. These combined changes ensure a strong signal to search engines to not index neutralized databases. task-3895772 Forward-Port-Of: odoo/odoo#167963
Before, we could not send any simplified invoice for Bizkaia, because it would give error B4_2000026: "Las Claves indicadas no son compatibles". En las validaciones dice que "Las claves 51 y 52 sólo son compatibles entre sí" But normally we send 01 and 52 in case of a simplified invoice. By removing the 52 however, we see that we can send the simplified invoice. Also, elsewhere in the XML, it is already clearly indicated that the invoice is simplified anyways. So, the simple fix for n
Original PR description
Before, we could not send any simplified invoice for Bizkaia, because it would give error B4_2000026: "Las Claves indicadas no son compatibles". En las validaciones dice que "Las claves 51 y 52 sólo son compatibles entre sí" But normally we send 01 and 52 in case of a simplified invoice. By removing the 52 however, we see that we can send the simplified invoice. Also, elsewhere in the XML, it is already clearly indicated that the invoice is simplified anyways. So, the simple fix for now is to remove the 52 key if the agency is Bizkaia opw-3938800 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#167566
Steps to reproduce ================== - Install mrp - Enable debug mode - Go to products - Open the "Acoustics Bloc Screens" form - Click on the "Forecasted" smart button - Click on the debug icon > "View access rights" A traceback occurs when evaluating the domain Cause of the issue ================== ir.actions.client is supposed to be a string but is an id in this case. `ir.model.search([["model", "=", action.res_model]])` returns nothing. [0] --- [0]: https://gith
Original PR description
Steps to reproduce ================== - Install mrp - Enable debug mode - Go to products - Open the "Acoustics Bloc Screens" form - Click on the "Forecasted" smart button - Click on the debug icon > "View access rights" A traceback occurs when evaluating the domain Cause of the issue ================== ir.actions.client is supposed to be a string but is an id in this case. `ir.model.search([["model", "=", action.res_model]])` returns nothing. [0] --- [0]: https://github.com/odoo/odoo/blob/c07181b20bf4f06b783136ffdb3b7a304be6b136/addons/web/static/src/webclient/actions/debug_items.js#L147 opw-3955762 Forward-Port-Of: odoo/odoo#168498
Since early June 2024, on new individual accounts, Stripe validates Indian mandate parameters even if they are irrelevant (e.g. mandates are not needed and won't be created). This prevents payments not compatible with Indian mandates from being made, like those made with MXN currency. With this fix, mandate parameters will be sent only if the payment's currency is supported by Indian mandates. Note: Accounts created before June 2024 or accounts linked to a platform created before June 2024
Original PR description
Since early June 2024, on new individual accounts, Stripe validates Indian mandate parameters even if they are irrelevant (e.g. mandates are not needed and won't be created). This prevents payments not compatible with Indian mandates from being made, like those made with MXN currency. With this fix, mandate parameters will be sent only if the payment's currency is supported by Indian mandates. Note: Accounts created before June 2024 or accounts linked to a platform created before June 2024 that have already used mandates are not affected by this bug. opw-3946505 Forward-Port-Of: odoo/odoo#168760 Forward-Port-Of: odoo/odoo#168465
Due to Stripe sending multiple confirmations regarding authorized payment, multiple mails were send to customer that their payment was succesful, now only transactions that were not processed yet result in mail sending. opw-3967807 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168298
Original PR description
Due to Stripe sending multiple confirmations regarding authorized payment, multiple mails were send to customer that their payment was succesful, now only transactions that were not processed yet result in mail sending. opw-3967807 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168298
This commit just add a new tour method used in another commit opw-3902869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168335 Forward-Port-Of: odoo/odoo#168150
Original PR description
This commit just add a new tour method used in another commit opw-3902869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168335 Forward-Port-Of: odoo/odoo#168150
Steps to reproduce: - Install "Time Off" and `l10n_be` - "Time Off" -> "Reporting" -> "by Type" - Unselect the company with the time off Issues: All the time off will be shown, company selection will not be taken into account. This is due to a missing security rules. opw-3954393 Forward-Port-Of: odoo/odoo#168516
Original PR description
Steps to reproduce: - Install "Time Off" and `l10n_be` - "Time Off" -> "Reporting" -> "by Type" - Unselect the company with the time off Issues: All the time off will be shown, company selection will not be taken into account. This is due to a missing security rules. opw-3954393 Forward-Port-Of: odoo/odoo#168516
opw-3863382 Forward-Port-Of: odoo/odoo#168755
Original PR description
opw-3863382 Forward-Port-Of: odoo/odoo#168755
KBC has been added to Mollie. Cards support refund. Refund is now checked based on payment method refund support, not brand. "Cleared" mapping has been added to done state in PayPal in order to properly support echeck. opw-3880431 Forward-Port-Of: odoo/odoo#162837
Original PR description
KBC has been added to Mollie. Cards support refund. Refund is now checked based on payment method refund support, not brand. "Cleared" mapping has been added to done state in PayPal in order to properly support echeck. opw-3880431 Forward-Port-Of: odoo/odoo#162837
With an IT Company setup but without the withholding module: - Set fiscal position to split payment - Set tax on product to SP type tax - Click send and print to generate XML Error: XML generation is blocked with message "Invoices must have exactly one VAT tax set per line" This occurs because the system find 2 VAT taxes, but only the positive one should count for the validation Ticket [link](https://www.odoo.com/web#model=project.task&id=3945046) opw-3945046 Forward-Port-Of: odoo
Original PR description
With an IT Company setup but without the withholding module: - Set fiscal position to split payment - Set tax on product to SP type tax - Click send and print to generate XML Error: XML generation is blocked with message "Invoices must have exactly one VAT tax set per line" This occurs because the system find 2 VAT taxes, but only the positive one should count for the validation Ticket [link](https://www.odoo.com/web#model=project.task&id=3945046) opw-3945046 Forward-Port-Of: odoo/odoo#166893
The project sharing search view is inheriting the wrong base search view (instead of inheriting `view_task_search_form_project_base`, it should be inheriting `view_task_search_form_base`), which causes some fields and filters to be visible in project sharing when they shouldn't. This commit makes those fields and filters invisible for portal users. Task-3978479 Forward-Port-Of: odoo/odoo#168761 Forward-Port-Of: odoo/odoo#168523
Original PR description
The project sharing search view is inheriting the wrong base search view (instead of inheriting `view_task_search_form_project_base`, it should be inheriting `view_task_search_form_base`), which causes some fields and filters to be visible in project sharing when they shouldn't. This commit makes those fields and filters invisible for portal users. Task-3978479 Forward-Port-Of: odoo/odoo#168761 Forward-Port-Of: odoo/odoo#168523
Since Commit 4c58d82c7e582c11eb967b6ed7c918a6da3ebd23 refactored `test_delivery_ui`, the check for the `payment_custom` module was moved to individual tests, however, the new `setUpClass` function now uses code that requires `payment_custom` and fails when the server tries to run tests. Solution: Move the initialization of `transfer_provider` to the individual tests instead of within the setup function. opw-3957075 Forward-Port-Of: odoo/odoo#168792
Original PR description
Since Commit 4c58d82c7e582c11eb967b6ed7c918a6da3ebd23 refactored `test_delivery_ui`, the check for the `payment_custom` module was moved to individual tests, however, the new `setUpClass` function now uses code that requires `payment_custom` and fails when the server tries to run tests. Solution: Move the initialization of `transfer_provider` to the individual tests instead of within the setup function. opw-3957075 Forward-Port-Of: odoo/odoo#168792
This traceback arises when the user tries to create a new journal from the payment. To reproduce this issue: 1) Install `accounting` 2) Create a new payment from `Accounting/vendors/payments` 3) save the record and now remove the `journal` or make the `journal` field empty 5) A traceback arises. Error:- ``` KeyError: ('res.company', <function Company.__accessible_branches at 0x7fabdfc69c60>, (1,), False, 2) File "odoo/tools/cache.py", line 99, in lookup r = d[key] File
Original PR description
This traceback arises when the user tries to create a new journal from the payment. To reproduce this issue: 1) Install `accounting` 2) Create a new payment from `Accounting/vendors/payments` 3) save…
This traceback arises when the user tries to create a new journal from the payment.
To reproduce this issue:
1) Install `accounting`
2) Create a new payment from `Accounting/vendors/payments`
3) save the record and now remove the `journal` or make the `journal` field empty
5) A traceback arises.
Error:-
```
KeyError: ('res.company', <function Company.__accessible_branches at 0x7fabdfc69c60>, (1,), False, 2)
File "odoo/tools/cache.py", line 99, in lookup
r = d[key]
File "<decorator-gen-8>", line 2, in __getitem__
File "odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "odoo/tools/lru.py", line 34, in __getitem__
a = self.d[obj]
ValueError: not enough values to unpack (expected 1, got 0)
File "odoo/models.py", line 5941, in ensure_one
_id, = self._ids
ValueError: Expected singleton: res.company()
File "odoo/http.py", line 2251, in __call__
response = request._serve_db()
File "odoo/http.py", line 1826, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1847, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1824, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1832, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2057, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 222, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 740, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 34, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 30, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/web/models/models.py", line 1074, in onchange
todo = [
File "addons/web/models/models.py", line 1077, in <listcomp>
if field_name not in done and snapshot0.has_changed(field_name)
File "addons/web/models/models.py", line 1190, in has_changed
return self[field_name] != self.record[field_name]
File "odoo/models.py", line 6664, in __getitem__
return self._fields[key].__get__(self, self.env.registry[self._name])
File "odoo/fields.py", line 1138, in __get__
self.recompute(record)
File "odoo/fields.py", line 1353, in recompute
apply_except_missing(self.compute_value, recs)
File "odoo/fields.py", line 1326, in apply_except_missing
func(records)
File "odoo/fields.py", line 1375, in compute_value
records._compute_field_value(self)
File "addons/mail/models/mail_thread.py", line 416, in _compute_field_value
return super()._compute_field_value(field)
File "odoo/models.py", line 4982, in _compute_field_value
fields.determine(field.compute, self)
File "odoo/fields.py", line 102, in determine
return needle(*args)
File "addons/account/models/account_payment.py", line 369, in _compute_reconciliation_status
liquidity_lines, counterpart_lines, writeoff_lines = pay._seek_for_lines()
File "addons/account/models/account_payment.py", line 192, in _seek_for_lines
if line.account_id in self._get_valid_liquidity_accounts():
File "addons/account/models/account_payment.py", line 211, in _get_valid_liquidity_accounts
accessible_branches = journal_comp.with_company(journal_comp)._accessible_branches()
File "odoo/addons/base/models/res_company.py", line 420, in _accessible_branches
return self.browse(self.__accessible_branches())
File "<decorator-gen-107>", line 2, in __accessible_branches
File "odoo/tools/cache.py", line 104, in lookup
value = d[key] = self.method(*args, **kwargs)
File "odoo/addons/base/models/res_company.py", line 402, in __accessible_branches
self.ensure_one()
File "odoo/models.py", line 5944, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
When the user removes the journal, the company ID is taken from the journal, which leads to a traceback from the line below.
https://github.com/odoo/odoo/blob/53d6d795ddf6cc9e470bfeb48bb31bc728acedbe/addons/account/models/account_payment.py#L207-L208
After applying this commit, resolve this issue by taking the default company,
when there is no journal.
sentry-5054332731
Forward-Port-Of: odoo/odoo#169048
Forward-Port-Of: odoo/odoo#15733725 changes
Enhancements to existing features
Spreadsheet pivot side panels now reflect updates without waiting for deferred processing. This improves responsiveness and keeps displayed pivot information aligned with user actions.
Original PR description
This commit adapts the tests of the side panels because the update is now not defered. Task: 3953753
Studio now retrieves approval requirements for form buttons in one request instead of checking each button separately. This should make forms with approval-controlled buttons load more efficiently, improving the editing and usage experience without changing the approval process itself.
Original PR description
Studio approval is the mechanism that allows to restrict some buttons to some users until they are approved by a manager. Before, the approval was fetched one by one, for each button in the form view. This commit changes this to fetch all the approvals in one request in order to improve the performance. task-3601171
This update improves how Odoo filters records in several enterprise apps, allowing the system to stop searching once it has found enough matching items. This can make everyday actions feel faster and reduce unnecessary processing, with no expected change to user workflows.
Original PR description
https://github.com/odoo/odoo/pull/168300
Resolved issues and error corrections
The shop floor screen now shows the 'no content' message only in the relevant disabled work order area instead of covering the whole display. This keeps the employee panel visible and avoids clutter on smaller screens.
Original PR description
Before this commit, the 'no content' message was showing in the entire display, taking the employee panel account. Now, it is fixed, the message just stay at the disabled workorders, and when the screen is less than md, the message is hidded. rebased branch: https://github.com/odoo/enterprise/pull/64435 task: 3794286
GST return period totals now avoid counting invoiced point-of-sale orders twice. This helps businesses report more accurate GST amounts when POS orders are converted into invoices.
Original PR description
After odoo/enterprise#55370 all POS journal entries were included in the return period, regardless of whether an invoice was created. Therefore, if a user created an invoice for an order, its amount was added twice for the same GST return period, once from the POS journal entry and once from the invoice. After this PR, invoices from POS orders will not be included in the GST return period. Task [link](https://www.odoo.com/web#model=project.task&id=3908555) task-3908555
This update corrects several small issues across appointments, payroll, and knowledge management. It also aligns appointment page customization with the updated editor, helping users avoid editing problems and improving reliability in related workflows.
Features or functions removed from Odoo
Spreadsheet list and pivot side panels have been removed to align with the updated spreadsheet experience. This simplifies the interface and keeps Odoo Enterprise compatible with the latest spreadsheet engine changes.
Original PR description
This commit adapts the codebase to https://github.com/odoo/o-spreadsheet/pull/4375. It also removes the side panel with all lists. Task: 3975491
Miscellaneous changes
[ADD] l10n_us_account: Auto load the localization pack and related reports automatically Problem: Users, especially newer ones, don't have the experience; or don't know how to install modules manually to their database. This will create the incorrect idea that Odoo doesn't fulfill the minimum requirements to operate in the US. - Examples of those uninstalled requirements are ABA routing for payments, correct layout for checks, 1099 reports, and Avatax for tax calculation. Desired behav
Original PR description
[ADD] l10n_us_account: Auto load the localization pack and related reports automatically Problem: Users, especially newer ones, don't have the experience; or don't know how to install modules…
[ADD] l10n_us_account: Auto load the localization pack and related reports automatically Problem: Users, especially newer ones, don't have the experience; or don't know how to install modules manually to their database. This will create the incorrect idea that Odoo doesn't fulfill the minimum requirements to operate in the US. - Examples of those uninstalled requirements are ABA routing for payments, correct layout for checks, 1099 reports, and Avatax for tax calculation. Desired behavior:- Auto load the following when creating odoo US database - US Accounting: l10n_us_account - United States Localization: l10n_us - US Accounting Reports: l10n_us_reports - 1099 Reporting: l10n_us_1099 - US Checks Layout: l10n_us_check_printing - NACHA Payments: l10n_us_payment_nacha - Avatax: account_avatax Solution: Create new module l10n_us_account to separate the accounting dependent stuff and auto load it and l10n_us which is going to load the mentioned packages above for US-db. Task-3865230 Community PR: https://github.com/odoo/odoo/pull/161709 Forward-Port-Of: odoo/enterprise#60644
When trying to reconcile to debit or credit lines with different currencies, we get a singleton error on `wizard.reco_currency_id` in `_compute_is_write_off_required` opw-3833477 Forward-Port-Of: odoo/enterprise#64418 Forward-Port-Of: odoo/enterprise#64011
Original PR description
When trying to reconcile to debit or credit lines with different currencies, we get a singleton error on `wizard.reco_currency_id` in `_compute_is_write_off_required` opw-3833477 Forward-Port-Of: odoo/enterprise#64418 Forward-Port-Of: odoo/enterprise#64011
- move link to Last Statemement to Invoicing Enterprise - move link to Unreconciled Payments to Invoicing - remove Import File links - standardize the "x to reconcile" secondary button - remove new transaction links and buttons - adapt tours to use the new secondary reconcile button - ensure there is always an unconfigured bank journal button for the account_accountant_tour - reposition miscellaneous journal onboarding - change the soda upload link to a secondary button - small modifica
Original PR description
- move link to Last Statemement to Invoicing Enterprise - move link to Unreconciled Payments to Invoicing - remove Import File links - standardize the "x to reconcile" secondary button - remove new transaction links and buttons - adapt tours to use the new secondary reconcile button - ensure there is always an unconfigured bank journal button for the account_accountant_tour - reposition miscellaneous journal onboarding - change the soda upload link to a secondary button - small modification to the tax return link text - add an upload button to the bank recon kanban & list view (statement import module) - enable drag and drop on the bank recon kanban & list view (statement import module) - add an upload button, and some text to the bank recon's no content helper (statement import module) part of task-3636384 Forward-Port-Of: odoo/enterprise#63933
With [1], the time range menu dropdown has been replaced by two date pickers allowing to select any time range. Here we reintroduce that time range menu but it will now also contain the two date pickers. In that way, standard time ranges like "Today", "This week",... can easily be selected but we keep the same possibilities as before. A new arch attribute "default_range" with possible values "day", "week", "month", "quarter", "year" has been introduced. Set it will make the gantt view pres
Original PR description
With [1], the time range menu dropdown has been replaced by two date pickers allowing to select any time range. Here we reintroduce that time range menu but it will now also contain the two date…
With [1], the time range menu dropdown has been replaced by two date pickers allowing to select any time range. Here we reintroduce that time range menu but it will now also contain the two date pickers. In that way, standard time ranges like "Today", "This week",... can easily be selected but we keep the same possibilities as before. A new arch attribute "default_range" with possible values "day", "week", "month", "quarter", "year" has been introduced. Set it will make the gantt view present initially a period of the selected type centered on the chosen initial date (default now). We have also improved a bit the set of buttons and added some hotkeys. The order buttons appear to have litle value so they have been removed. We have make the planning gantt view use the default_range "week" and its button "Copy previous week" be only available when the range and the scale are set to "week". Task Id: `3950898` [1]: https://github.com/odoo/enterprise/pull/55618 Co-authored-by: Bruno Boi <boi@odoo.com> Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com> Forward-Port-Of: odoo/enterprise#63523
Purpose ======= Do not crash when grouping by a property, instead we want to disable the group by like it has been done for the gantt view. Clean a test about the group by in the gantt view. Task-3876726 Forward-Port-Of: odoo/enterprise#64408 Forward-Port-Of: odoo/enterprise#62551
Original PR description
Purpose ======= Do not crash when grouping by a property, instead we want to disable the group by like it has been done for the gantt view. Clean a test about the group by in the gantt view. Task-3876726 Forward-Port-Of: odoo/enterprise#64408 Forward-Port-Of: odoo/enterprise#62551
This commit adds the missing neutralization necessary for the l10n_co_dian module introduced in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly usef
Original PR description
This commit adds the missing neutralization necessary for the l10n_co_dian module introduced in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates. [1] https://github.com/odoo/enterprise/pull/57925 Forward-Port-Of: odoo/enterprise#63734
In `pos_restaurant`, the user will see the upcoming appointment for each table underneath it. The text should be styled differently based on the situation. Late arrivals should be shown in red; future appointments should be shown with decreased opacity. During the refactoring in bb06fde, a bug was introduced that made the time computation invalid. This commit addresses the issue. Task: 3978801 Forward-Port-Of: odoo/enterprise#64218
Original PR description
In `pos_restaurant`, the user will see the upcoming appointment for each table underneath it. The text should be styled differently based on the situation. Late arrivals should be shown in red; future appointments should be shown with decreased opacity. During the refactoring in bb06fde, a bug was introduced that made the time computation invalid. This commit addresses the issue. Task: 3978801 Forward-Port-Of: odoo/enterprise#64218
Current behavior: When an iot device is linked to the PoS and invoice report, you had an error because action service and iot_websocket service where not available. Steps to reproduce: - Install pos_iot - Set an iot_device printer on the pos session - Set an iot_device on the report of the invoice - Open session, make an order and invoice it - You get an error opw-3792576 Forward-Port-Of: odoo/enterprise#63280 Forward-Port-Of: odoo/enterprise#61697
Original PR description
Current behavior: When an iot device is linked to the PoS and invoice report, you had an error because action service and iot_websocket service where not available. Steps to reproduce: - Install pos_iot - Set an iot_device printer on the pos session - Set an iot_device on the report of the invoice - Open session, make an order and invoice it - You get an error opw-3792576 Forward-Port-Of: odoo/enterprise#63280 Forward-Port-Of: odoo/enterprise#61697
Commit 36b238b934f1b7e4ddf1dfd6089d36ea0b8ac7eb introduced a new transparent way to save payment methods on a subscription. This new checkbox causes various bugs in the payment flow when paying an invoice linked to a subscription: - Stripe inline form was not updated when the save my payment method was checked; - Adyen implementation skips the override of `_initiatePaymentFlow` in `sale_subscription` to update the transaction route; - The token inline form is only shown for Demo and Raz
Original PR description
Commit 36b238b934f1b7e4ddf1dfd6089d36ea0b8ac7eb introduced a new transparent way to save payment methods on a subscription. This new checkbox causes various bugs in the payment flow when paying an invoice linked to a subscription: - Stripe inline form was not updated when the save my payment method was checked; - Adyen implementation skips the override of `_initiatePaymentFlow` in `sale_subscription` to update the transaction route; - The token inline form is only shown for Demo and Razorpay; - The checkbox of the automated payment sought may be that of another payment method. This commit addresses all the previously mentioned issues. opw-3893592 opw-3946899 Forward-Port-Of: odoo/enterprise#63788
When a new contract is created (or if we change the vehicle_id on an existing one, it'll take the default value on the contract, or the previous contract value as default values for the cost Forward-Port-Of: odoo/enterprise#64026
Original PR description
When a new contract is created (or if we change the vehicle_id on an existing one, it'll take the default value on the contract, or the previous contract value as default values for the cost Forward-Port-Of: odoo/enterprise#64026
Problem --------- When doing the Send & Print on one invoice, or when multiple invoices are selected and the "Download" option is ticked, the PDF generation of the invoices is made synchronously. Generating a simple invoice takes ~2 seconds. When you're doing the mass Send&Print for 10+ invoices, you can have your screen loading for >20seconds just to get 10+pages of PDF. Objective --------- Start digging into that part to see if optimisation can be done to reduce that loading time for
Original PR description
Problem --------- When doing the Send & Print on one invoice, or when multiple invoices are selected and the "Download" option is ticked, the PDF generation of the invoices is made synchronously.…
Problem --------- When doing the Send & Print on one invoice, or when multiple invoices are selected and the "Download" option is ticked, the PDF generation of the invoices is made synchronously. Generating a simple invoice takes ~2 seconds. When you're doing the mass Send&Print for 10+ invoices, you can have your screen loading for >20seconds just to get 10+pages of PDF. Objective --------- Start digging into that part to see if optimisation can be done to reduce that loading time for UX improvements. Solution --------- Rather than calling wkhtmltopdf once per invoice, we allow the creation of all invoices' PDF together through one single call to the library. The PDF containing all the invoices will then be split and return as a dictionary. To do so we decoupled the `_render_qweb_pdf` function: - `_render_qweb_pdf` returns a aggregate of all the PDF - `_pre_render_qweb_pdf` returns the dictionary of all PDF split Furthermore, this commit batches some of the ORM calls; namely, attachments creation and cache invalidations. Results --------- | # Input data | Before PR | After PR | |:-------------:|:----------:|:---------:| | 1 | 3.3 s | 3.3 s | | 5 | 13.9 s | 4.4 s | | 10 | 27.5 s | 5.4 s | | 20 | 55.16 s | 8.4 s | odoo-167729 task-3695628 Forward-Port-Of: odoo/enterprise#63706
plan_id coming from '/shop/cart/update' is always a string so plan is never found using browse fix is to cast the plan_id before browsing opw-3921644 Forward-Port-Of: odoo/enterprise#64021
Original PR description
plan_id coming from '/shop/cart/update' is always a string so plan is never found using browse fix is to cast the plan_id before browsing opw-3921644 Forward-Port-Of: odoo/enterprise#64021
Fix display and functionality of tax type filter - Corrected the display of dropdown items to show tax type names instead of object references. - Updated the `onSelected` event handler to ensure the tax filter is correctly applied when a dropdown item is selected. opw-3976746 Forward-Port-Of: odoo/enterprise#64252
Original PR description
Fix display and functionality of tax type filter - Corrected the display of dropdown items to show tax type names instead of object references. - Updated the `onSelected` event handler to ensure the tax filter is correctly applied when a dropdown item is selected. opw-3976746 Forward-Port-Of: odoo/enterprise#64252
Currently, an error is generated when run 'Mail: Fetchmail Service' scheduled action. Step to produce: - Install the 'l10n_cl_edi' module. - And manually trigger the 'Mail: Fetchmail Service' scheduled action. Stacktrace ``` TypeError: FetchmailServer.fetch_mail() got an unexpected keyword argument 'raise_exception' File "odoo/tools/safe_eval.py", line 383, in safe_eval return unsafe_eval(c, globals_dict, locals_dict) File "ir.actions.server(128,)", line 1, in <module>
Original PR description
Currently, an error is generated when run 'Mail: Fetchmail Service' scheduled action. Step to produce: - Install the 'l10n_cl_edi' module. - And manually trigger the 'Mail: Fetchmail Service'…
Currently, an error is generated when run 'Mail: Fetchmail Service' scheduled action.
Step to produce:
- Install the 'l10n_cl_edi' module.
- And manually trigger the 'Mail: Fetchmail Service' scheduled action.
Stacktrace
```
TypeError: FetchmailServer.fetch_mail() got an unexpected keyword argument 'raise_exception'
File "odoo/tools/safe_eval.py", line 383, in safe_eval
return unsafe_eval(c, globals_dict, locals_dict)
File "ir.actions.server(128,)", line 1, in <module>
File "addons/mail/models/fetchmail.py", line 186, in _fetch_mails
return self.search([('state', '=', 'done'), ('server_type', '!=', 'local')]).fetch_mail(raise_exception=False)
ValueError: <class 'TypeError'>: "FetchmailServer.fetch_mail() got an unexpected keyword argument 'raise_exception'" while evaluating
'model._fetch_mails()'
File "odoo/addons/base/models/ir_cron.py", line 388, in _callback
self.env['ir.actions.server'].browse(server_action_id).run()
File "home/odoo/src/custom/trial/saas_trial/models/sentry.py", line 33, in run
res = super().run()
File "odoo/addons/base/models/ir_actions.py", line 972, in run
res = runner(run_self, eval_context=eval_context)
File "odoo/addons/base/models/ir_actions.py", line 802, in _run_action_code_multi
safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self)) # nocopy allows to return 'action'
File "odoo/tools/safe_eval.py", line 397, in safe_eval
raise ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr))
```
The issue arises during the execution of the 'Mail: Fetchmail Service' scheduled action because the 'fetch_mail()' method call without argument, as we can see at [1], And this argument is added from this PR https://github.com/odoo/odoo/pull/152637.
link [1]: https://github.com/odoo/enterprise/blob/ba99dd4c236353c43376210a9aabcb0af5bd0299/l10n_cl_edi/models/fetchmail_server.py#L51
To resolve the issue, Add a default keyword argument at [2] to prevent an issue.
link [2]: https://github.com/odoo/enterprise/blob/ba99dd4c236353c43376210a9aabcb0af5bd0299/l10n_cl_edi/models/fetchmail_server.py#L51
sentry-5284073241
Forward-Port-Of: odoo/enterprise#64326
Forward-Port-Of: odoo/enterprise#61836Since the recent chart options refactoring, the title of the chart is not longer a string but an object with different style-related keys and the title string is set in the key `text`. The getter `getOdooChartDIsplayName` was not adapted to this change. This commit adapts the tests in Enterprise. task-3978637 Forward-Port-Of: odoo/enterprise#64196
Original PR description
Since the recent chart options refactoring, the title of the chart is not longer a string but an object with different style-related keys and the title string is set in the key `text`. The getter `getOdooChartDIsplayName` was not adapted to this change. This commit adapts the tests in Enterprise. task-3978637 Forward-Port-Of: odoo/enterprise#64196
By default, tables automatically adjust their width to accommodate the content of their cells, That causes table row to grow in size and make "X" button invisible. Here I'm constraining table layout so it doesn't matter how long the content of columns is [Reproduce] - Install documents - Add tag with a very long name - Go to all Documents, Select a document, Add the tag on a doc - BUG: "X" button is not visible* opw-3937326 BEFORE / AFTER https://github.com/odoo/enterprise/assets
Original PR description
By default, tables automatically adjust their width to accommodate the content of their cells, That causes table row to grow in size and make "X" button invisible. Here I'm constraining table layout so it doesn't matter how long the content of columns is [Reproduce] - Install documents - Add tag with a very long name - Go to all Documents, Select a document, Add the tag on a doc - BUG: "X" button is not visible* opw-3937326 BEFORE / AFTER https://github.com/odoo/enterprise/assets/33809926/5f2fc861-cd68-4478-8b8b-b8843b7d4944 Forward-Port-Of: odoo/enterprise#63279
Steps to reproduce: - Install Planning - Click on Schedule -> By Resource - Select multiple slots without a resource - Select a resource to add Issues: A traceback is shown because this line in the write function wasn't coded to work with recordset. https://github.com/odoo/enterprise/blob/70f0ce78ac5f976f93abd0b9ee239a998d6d7445/planning/models/planning.py#L803-L806 opw-3948517 Forward-Port-Of: odoo/enterprise#64217 Forward-Port-Of: odoo/enterprise#63450
Original PR description
Steps to reproduce: - Install Planning - Click on Schedule -> By Resource - Select multiple slots without a resource - Select a resource to add Issues: A traceback is shown because this line in the write function wasn't coded to work with recordset. https://github.com/odoo/enterprise/blob/70f0ce78ac5f976f93abd0b9ee239a998d6d7445/planning/models/planning.py#L803-L806 opw-3948517 Forward-Port-Of: odoo/enterprise#64217 Forward-Port-Of: odoo/enterprise#63450
Steps to reproduce ================== - Enable debug mode - Go to accounting app - reporting - balance sheet - three wheels on top right - click on the icon to show new columns -> Invalid portal target Cause of the issue ================== The uniqueRendererClass is used to target a portal for the dropdown, but that class isn't applied in the AccountReportListRenderer. https://github.com/odoo/odoo/pull/160566 opw-3974195 Forward-Port-Of: odoo/enterprise#64316
Original PR description
Steps to reproduce ================== - Enable debug mode - Go to accounting app - reporting - balance sheet - three wheels on top right - click on the icon to show new columns -> Invalid portal target Cause of the issue ================== The uniqueRendererClass is used to target a portal for the dropdown, but that class isn't applied in the AccountReportListRenderer. https://github.com/odoo/odoo/pull/160566 opw-3974195 Forward-Port-Of: odoo/enterprise#64316
16 changes
Security fixes and vulnerability patches
This update adds access controls to prevent unauthorized users from removing the 281.50 tax tag on partner records. Only users with Bookkeeper or Accountant permissions can now modify this tag, preventing accidental accounting errors that could occur when non-accounting staff inadvertently unset critical tax classification tags.
Original PR description
Anyone that has access to the partner form can currently unset the 281.50 tag on any partner, later causing accounting errors. This commit forbids unsetting this tag by users who do not have 'Bookkeeper' (or 'Accountant', implied from 'Bookkeeper') access group. task-3955109
Enhancements to existing features
Users can now attach CFDI invoice files directly to existing vendor bills instead of having to create bills from scratch. When a CFDI invoice is attached to a bill without an associated invoice, the fiscal folio information is automatically populated, making it easier to match bills with their corresponding CFDI documents even when line items or prices differ.
Original PR description
Previously, you could only link a vendor bill with a CFDI invoice file by creating the bill directly from it. In a lot of cases, Odoo is unable to match bills created from the CFDI file with the corresponding purchase order for various reasons (eg: different line items, different prices, etc), and it is currently impossible to link them by hand. This commit makes it so that when you attach a CFDI invoice to a vendor bill, if that bill does not already have an associated CFDI invoice, it becomes associated with that CFDI invoice, and the fiscal folio is automatically filled in from the document. If there are lines on the vendor bill, lines from the CFDI invoice are ignored, if there are none they are filled in as normal. task-3731034
The AHL (Annual Housing Levy) deduction calculation for Kenya payroll has been updated to apply a 15% deduction on the AHL amount with a maximum cap of 9,000 KES. This ensures accurate and compliant payroll processing for Kenyan employees by implementing the latest AHL computation rules.
Original PR description
This commit adds the new rule for the AHL computation where a deduction is applied as 15 percent of the AHL amount capped at 9ksh. Note the l10n_ke_employees_salary_ahl_amount is the same except the sequence its just reordered task-3911725
The WhatsApp messaging feature in Odoo's Discuss app now displays dynamic partner avatars for each WhatsApp channel instead of a generic static image. This makes conversations more personalized and easier to identify, as each channel now shows the actual profile picture of the associated contact.
Original PR description
In the Discuss app, update the avatar for each WhatsApp channel category message, from a static to a dynamic one. The avatar image is fetched from the associated partner. task-3908710 Forward-Port-Of: odoo/enterprise#64102 Forward-Port-Of: odoo/enterprise#63078
Resolved issues and error corrections
This fix resolves an issue where the "Disabled children" toggle was not appearing in the salary configurator for Belgian employees, even when disabled children were configured in their profile. The problem occurred because a method was being called without proper event handling, causing the disabled children field to be incorrectly hidden. The fix ensures the toggle displays correctly so HR teams can properly configure salary options for employees with disabled dependents.
Original PR description
## Issue: When configuring an employee before sending the salary configurator, if we set up children and disabled children for the employee, the option to enable/disable them in the salary…
## Issue: When configuring an employee before sending the salary configurator, if we set up children and disabled children for the employee, the option to enable/disable them in the salary configurator does not appear. ## Steps To Reproduce: - on the runbot change the company to "my Belgian company". - In Laurie Poiret's employee profile, on the "personal information" tab, change the value for children to 2 and set 1 as disabled. - Go to Laurie Poiret's contract (stat button) and generate an offer. - From the offer, navigate to the salary configurator. - In the salary configurator, proceed until you reach the family status section. - Notice that the "Disabled children" Toggle does not appear unless you change the value of the children input. ## Solution: - The `onchangeChildren` method is being invoked in the `start` method without an `event` argument (`event` is `undefined`). This results in `event.currentTarget` being `undefined`, causing the `childCount` variable to be `NaN` and `disabledChildrenNumber` to get disabled at the end of the method. - to fix the problem, we added a check for `event` argument in the event handler, if it is not present, we fallback to getting the children input value using JQuery and it solves the issue. **opw-3925640** Forward-Port-Of: odoo/enterprise#64347 Forward-Port-Of: odoo/enterprise#63535
A recent update to the subscription module inadvertently prevented non-sales users (such as stock managers) from accessing the product creation form. This fix restores access by properly configuring user permissions for the new subscription pricing field, allowing all relevant team members to work with products without restrictions.
Original PR description
A new field of type 'sale.subscription.pricing' was added to the 'product.template' model. This breaks product creation form for users who don't have sales permissions (e.g. stock managers). This commit fixes the issue by adding `groups` to the field.
This fix addresses two validation issues in the Documents module when users clear required fields in the document inspector. When a required field like Name or Workspace is cleared, the system now properly displays an alert dialog and reverts the changes when the user confirms, instead of either showing no alert or incorrectly saving empty values. This ensures data integrity by preventing documents from being saved with missing required information.
Original PR description
**Steps to reproduce:** - Go to list view or kanban view. - Select the document to preview in the inspector. - Clear the input value of a required field (here, Name or Workspace), and click elsewhere…
**Steps to reproduce:**
- Go to list view or kanban view.
- Select the document to preview in the inspector.
- Clear the input value of a required field (here, Name or Workspace), and click elsewhere or press 'Enter'.
**Issues:**
- _**Workspace field**_
A validation error is raised when a Workspace name is cleared. However, an alert dialog is not displayed.
- _**Name field**_
An alert dialog indicating a validation error is shown yet on clicking the `OK` button, the unnamed document is saved as is.
Instead, the changes should be reverted.
**Causes:**
- _**Workspace field**_
The `required` attribute was not added to `folder_id` field in the view. As a result, alert dialog was not shown.
- _**Name field**_
The config mode never changes to 'edit'. Even when a user is editing an inspector field, the mode is 'readonly'.
As a result, the boolean `isInEdition` remains false and the code-block meant to be executed
on click of the confirm button of alert dialog does not execute as intended.
**Fix:**
- _**Workspace field**_
The `required` attribute is forcefully set to true for the `folder_id` field so that an empty value for workspace
is not considered to be a 'validSelection' and the user faces an alert popup.
- _**Name field**_
This PR fixes the issue by switching to edit mode whenever user changes the value of a document inspector field.
This PR also adds a testcase in `documents_kanban_tests.js` to ensure that the confirm ('OK') button works as intended.
Task: [3799280](https://www.odoo.com/web#id=3799280&menu_id=4722&cids=2&action=333&active_id=10888&model=project.task&view_type=form)This fix prevents chatbot configuration errors by validating that an Email step exists before a Create Ticket step. Previously, misconfigured chatbots would break during operation. Now, the system catches these configuration issues upfront with a clear validation error message, ensuring a smoother user experience.
Original PR description
**Before this PR:** When you have a `Create ticket` step in your ChatBot script steps, but you don't have an `Email` step prior to that. Then it will break the flow of ChatBot, as an email is required to create a helpdesk ticket. **After this PR:** It will raise a `ValidationError` if it fails to validate the steps while configuring the chatbot script steps. **task**-[3547675](https://www.odoo.com/web#id=3547675&menu_id=6478&cids=2&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#64394 Forward-Port-Of: odoo/enterprise#56802
This fix resolves an error that occurred when users attempted to reconcile accounting lines with different currencies using the write-off wizard. The system was incorrectly trying to process multiple currency records at once, causing the reconciliation process to fail. Users can now successfully reconcile multi-currency transactions without encountering this error.
Original PR description
When trying to reconcile to debit or credit lines with different currencies, we get a singleton error on `wizard.reco_currency_id` in `_compute_is_write_off_required` opw-3833477 Forward-Port-Of: odoo/enterprise#64011
Fixed an issue where project administrators couldn't rename projects when the Documents module was installed. The system now properly handles folder name updates in the Documents module without requiring additional permissions, allowing project admins to manage their projects seamlessly.
Original PR description
To reproduce: ============= - install Project and Documents - create a project - give the user the project admin rights and **User** rights for the Documents module - try to rename a project -> access error Problem: ======== when Document is installed, every project has a related folder in the Documents. When renaming a project, the folder name should be updated as well. As the user has no rights to write on Documents, the renaming fails. Solution: ========= set the folder name as `sudo` to avoid access errors opw-3928018 Forward-Port-Of: odoo/enterprise#63787
This fix ensures that when users select an email template with CC recipients for follow-up emails in the Accounting module, those CC addresses are properly added to the email recipients list. Previously, CC addresses from templates were only included when loading the template in the full view, not when selecting it in the quick template field. This update makes the behavior consistent across both methods.
Original PR description
### Steps to reproduce the issue: 1. Go to _Settings > Technical > Email > Email Templates_ 2. Select a template that applies to a Contact 3. Add a mail address in the Cc field 4. Go to _Accounting >…
### Steps to reproduce the issue: 1. Go to _Settings > Technical > Email > Email Templates_ 2. Select a template that applies to a Contact 3. Add a mail address in the Cc field 4. Go to _Accounting > Customers > Follow-up Reports_ select one of the reports 5. Click on "Follow up" 6. Select the template with the Cc in the Content Template field 7. The Cc address is not added to the Email Recipients field 8. Click on Send Message in the chatter 9. Open the full view and add the template with the Cc in the Load template field 10. The Cc address is added to the Recipients field ### Explanation: The field `email_recipient_ids` is not a computed field. Because of it, there is no change called when `template_id` is assigned a new value. ### Suggested fix: We need to change `email_recipients_ids` according to `template_id` while keeping its current properties (stored, writable). The method is adapted from `mail.compose.message._compute_partner_ids`. https://github.com/odoo/odoo/blob/1849b709f1acf0f5546582bf7551129a870e3113/addons/mail/wizard/mail_compose_message.py#L482-L496 opw-3878125 Forward-Port-Of: odoo/enterprise#63918 Forward-Port-Of: odoo/enterprise#61861
Fixed an issue in the Documents module where the delete button (X) for tags was hidden when tag names were very long. The fix adjusts how the tag table is displayed so that long tag names don't cause the table to expand and hide the delete button, improving usability when working with documents that have lengthy tags.
Original PR description
By default, tables automatically adjust their width to accommodate the content of their cells, That causes table row to grow in size and make "X" button invisible. Here I'm constraining table layout so it doesn't matter how long the content of columns is [Reproduce] - Install documents - Add tag with a very long name - Go to all Documents, Select a document, Add the tag on a doc - BUG: "X" button is not visible* opw-3937326 BEFORE / AFTER https://github.com/odoo/enterprise/assets/33809926/5f2fc861-cd68-4478-8b8b-b8843b7d4944 Forward-Port-Of: odoo/enterprise#63279
This fix resolves a validation error that occurred when generating delivery guides for products that may be hazardous under Mexican regulations. The system now properly handles products with uncertain hazard classifications by allowing users to explicitly indicate whether such products should be treated as hazardous or non-hazardous, preventing delivery guide generation failures.
Original PR description
With an MX company setup Create a product with: - UNSPSC Category: 12352106 Ácidos orgánicos o sus sustitutos - Hazardous Material Designation Code (MX): - Hazardous Packaging (MX): - Tariff…
With an MX company setup Create a product with: - UNSPSC Category: 12352106 Ácidos orgánicos o sus sustitutos - Hazardous Material Designation Code (MX): - Hazardous Packaging (MX): - Tariff Fraction: 2917190800 Ácido fumárico. - UMT Aduana: kg - Weight: 1.00 Create a Sale Order with the product Confirm Go to Delivery Set: - Tansport Type: Federal Highways - In MX Tab add 'Vehicle Setup' and 'Gross Vehicle Weight' Validate and Generate Delivery Guide Error: Code : CP155 Message : El valor registrado en el atributo "Mercancia:MaterialPeligroso" no es válido o el valor registrado en el atributo “Mercancias:Mercancia:BienesTransp” contiene el valor "0" (cero) en la columna "Material peligroso" del catálogo catCartaPorte:c_ClaveProdServCP. This occurs because the MarierialPeligroso element is not filled In the ClaveProdServ tab of the CatalogoCartaPorte30 it is specified if a product or service is (1), not is (0) or may be (0,1) considered hazardous When having to deal with "may be" hazardous products it is required to set the 'MaterialPeligroso' element. Currently, the system does not allow to specify if the "may be" product is actually hazardous, but if the 'Hazardous Material Designation Code (MX)' field is not set the MaterialPeligroso element will not be filled, failing the validation The proposed workaround is to use the value '0' as flag to indicate that the maybe hazardous product should not be considered hazardous and 'MaterialPeligroso' will be set to 'No' opw-3955361 task-3668225 Forward-Port-Of: odoo/enterprise#64153 Forward-Port-Of: odoo/enterprise#63832
This update fixes an issue where appointment type intro messages couldn't be edited through the website editor if they hadn't been set yet. The fix adjusts how the intro message element is positioned and selected in the editor, making it properly editable for users who want to customize their appointment booking pages.
Original PR description
Purpose ======= Fix the appointment type intro message which, if not set yet, wasn't available for edition using the website editor. Specification ============= The "o_appointment_intro" element has been changed from inside, to next to the "o_appointment" element. Changing the selector to match the new "o_appointment_intro" position. Ref commit: https://github.com/odoo/enterprise/commit/4f68079b535c1ea54c42ae8dabae903f88d6e87f Also combining the 2 separate conditions that adds the d-none class into 1 single OR-ed condition for readability. Task-3976356
This fix resolves an issue where quotations created from CRM opportunities were not automatically using the partner's configured usage value. Previously, quotations would always default to "General Usage" instead of inheriting the partner's setting. Now the system correctly applies the partner's usage preference when creating new quotations.
Original PR description
Problem: When the user creates a new quotation from a CRM opportunity, the quotation does not compute to the partner's usage value and always default to "General Usage". The default prevents the compute from getting called. Purpose: The compute method "_compute_l10n_mx_edi_usage" should be called when a new quotation is created from the crm opportunity. Steps to Reproduce on Runbot17: 1. Install Sales, l10n_mx, l10n_mx_edi, CRM, Contacts 2. Set a value for field "Usage" (l10n_mx_edi_usage) on a partner whose country is Mexico in Contacts 3. Create a CRM opportunity with the partner above 4. Create a new quotation from the opportunity and observe that the "Usage" value is not the same as defined on the partner opw-3934009
This update fixes a crash that occurred when users tried to access call activities that had been removed from the Call Queue. The system now properly refreshes the display when call activities are added or removed, ensuring users always see current information and can safely interact with their call queue without encountering errors.
Original PR description
When call activity gets deleted or added, the related component has to be re-rendered so that most uptodate information is shown, otherwise this might lead to crash if those activities are accessed. To mitigate the issue, component re-rendering is invoked when call activity gets added or removed from the queue. The activity removal happens when `delete_call_activity` function is invoked directly, which crafts domain, to search the activies that are outdated. Steps to reproduce: - on crm lead schedule call activity and make sure that activity is old - book activity and save it - add it to Call Queue - remove it from Call Queue - try to access it/click on it Forward-Port-Of: odoo/enterprise#64325