Monday, March 10, 2025
16 changes · 17.0
Resolved issues and error corrections
This fix ensures Danish electronic invoices use the VAT number, including the country prefix, when the PEPPOL 0184 identifier scheme is selected. It helps keep invoices compliant with PEPPOL validation rules and reduces the risk of rejected electronic documents.
Original PR description
Based on PEPPOL-COMMON-R042 (https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-COMMON-R042/) when using the 0184 scheme the VAT number should be used (CVR number prefixed by the country code) This is a backport of already merged PR https://github.com/odoo/odoo/pull/190952 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The sales invoicing wizard now shows the right help text depending on whether a percentage or fixed amount is selected. This avoids misleading guidance for users creating advance invoices and helps reduce entry mistakes.
Original PR description
On the amount field, the tip for percentage amount was always displayed, whether the percentage or fixed amount option was selected. Fwd port of https://github.com/odoo/odoo/commit/c63f6c2308ab9d0c7216b592c7873a6db24f0378 16.0 PR : https://github.com/odoo/odoo/pull/200919
Website publishing permission checks now use the same customizable rules used elsewhere in website editing. This helps avoid incorrectly blocking users or custom workflows that are allowed to modify website content.
Original PR description
In [1] when forward-porting the adaptation of the right to publish, the check was done with strict access rules instead of relying on the customization-friendly `_check_user_can_modify`. This commit delegates those checks to that method. [1]: https://github.com/odoo/odoo/commit/b77fbc8467352800f63cfb5cd9a1982612746dfa task-3175890
Duplicating a job applicant no longer carries over the assigned interviewers, helping teams avoid accidental interviewer assignments on copied records. The duplicated applicant name is also clearly marked as a copy, making it easier to distinguish from the original.
Original PR description
- disable duplicate for interviewer_ids - add `(copy)` to the name Task: 4606811 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where currency fields from invoice lists could appear blank when referenced in an Odoo spreadsheet. The spreadsheet now fetches the currency's display name correctly, so users see the expected currency information in list formulas.
Original PR description
Steps to reproduce: - Go to Accounting > Customers > Invoices - Insert the list into a spreadsheet - in any cell, type `=ODOO.LIST(1,1,"company_currency_id")` => the currency is not displayed. The reason is that the `company_currency_id` is fetched as part of a monetary field. When the new `=ODOO.LIST(1,1,"company_currency_id")` is typed, the list data source thinks it has the data, but actually the `dislay_name` is missing. Task: 4633078 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that could stop SMS messages from being sent when launched from a user profile, such as Mitchell Admin after setting up live chat. The system now correctly uses the linked contact details, preventing failed sends and improving reliability for staff messaging workflows.
Original PR description
This error occurs when the user attempts to send a message using the ``Mitchell Admin`` mobile number after creating a new ``Website Live Chat Channels``. Steps to reproduce: - Install the…
This error occurs when the user attempts to send a message using the ``Mitchell Admin`` mobile number after creating a new ``Website Live Chat Channels``. Steps to reproduce: - Install the ``im_livechat`` module - Create new ``Website Live Chat Channels`` > Click on ``Mitchell Admin`` - Add mobile number > Click on the ``SMS`` smart button on the right side of the mobile field - Add mobile number in ``Recipient`` and add a message in ``Message`` > ``Send SMS`` Traceback : ``AttributeError 'bool' object has no attribute 'split'`` Here at [1], we're encountering the error because the ``sanitized_numbers`` is getting False and this error is occuring only when we are sending sms message from ``res.users`` because we didn't get records of partner from it due to that we do not have any number in composer at [2] so it will take ``sanitized_numbers`` as False. This commit will resolve the above error by mapping ``partner_id`` in records. [1]- https://github.com/odoo/odoo/blob/8780f8d9799eed7188d6577c6bb2690df598196e/addons/sms/wizard/sms_composer.py#L207 [2]- https://github.com/odoo/odoo/blob/b6c82de598f512750ddf80c7b4aade96346207e5/addons/sms/wizard/sms_composer.py#L155 sentry-4681535519 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This pull request updates a contributor's CLA record to reflect their current email address. It keeps Odoo's contributor legal records accurate and has no expected impact on product functionality.
Original PR description
Description of the issue/feature this PR addresses: My email changed since signing the CLA Current behavior before PR: wrote email in my CLA Desired behavior after PR is merged: correct email in my CLA --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Current behavior before commit: creating cut-off journal entries for a vendor bill in a previous year using a new sequence reset period in current year will raise an error due to the accrual move date mismatch with the destination move fetched from the move in _get_accounting_date Reason: due to the accrual move date mismatch with the destination move fetched from the move in _get_accounting_date Fix: Added a function to compute a reference move for each get_lock_safe_date call an
Original PR description
Current behavior before commit: creating cut-off journal entries for a vendor bill in a previous year using a new sequence reset period in current year will raise an error due to the accrual move…
Current behavior before commit: creating cut-off journal entries for a vendor bill in a previous year using a new sequence reset period in current year will raise an error due to the accrual move date mismatch with the destination move fetched from the move in _get_accounting_date Reason: due to the accrual move date mismatch with the destination move fetched from the move in _get_accounting_date Fix: Added a function to compute a reference move for each get_lock_safe_date call and compare approrpiate dates for accrual moves. Steps to reproduce on runbot: 1. ensure the sequence for the Miscellaneous Operations journal (l10n_fr for example) resets yearly for the previous year (ex 2024) 2. create a new journal entry in the Miscellaneous Operations journal in current year and rename it to "Name 3000" 3. Create a vendor bill and set the date field to be 12/12/2024 for example and post it 4. Create cut-off journal entries with a recognition date set as today and the same journal "Miscellaneous Operations" and observe the traceback. opw-4507925 Forward-Port-Of: odoo/odoo#196836
This commit fixes the following issues: - Only re-raise `InsufficientCreditError` from IAP. `UserError`, `AccessError` and `ReadTimeout` shouldn't be re-raised, they should considered as an internal error of the IAP server. - Instead of raising a `requests.exceptions.ConnectionError` in case of an unknown error from IAP (which didn't make much sense), it will now raise a `IAPServerError` - The logging level has been changed from `exception` to `warning`. There is indeed no useful information
Original PR description
This commit fixes the following issues: - Only re-raise `InsufficientCreditError` from IAP. `UserError`, `AccessError` and `ReadTimeout` shouldn't be re-raised, they should considered as an internal error of the IAP server. - Instead of raising a `requests.exceptions.ConnectionError` in case of an unknown error from IAP (which didn't make much sense), it will now raise a `IAPServerError` - The logging level has been changed from `exception` to `warning`. There is indeed no useful information in the logged traceback as the interesting part is in the traceback on the IAP server logs. Forward-Port-Of: odoo/odoo#199286
## Summary 1. `--test-tags ".test_js[mail > widgets]"` will start all test_js starting with "mail > widgets" 2. `--test-tags "/web,-.test_js[Components > CheckBox]"` will start all web test, but skip Components > CheckBox qunit 3. ` --test-tags ".test_js[utils,-utils > Hooks,-utils > Patch]"` start all test_js utils tests except the Hooks and Patch ones 4. `--test-tags "-.test_js[Components > CheckBox]"` will start **all** tests, but skip Components > CheckBox qunit ## Motivation Tag
Original PR description
## Summary 1. `--test-tags ".test_js[mail > widgets]"` will start all test_js starting with "mail > widgets" 2. `--test-tags "/web,-.test_js[Components > CheckBox]"` will start all web test, but skip…
## Summary
1. `--test-tags ".test_js[mail > widgets]"` will start all test_js starting with "mail > widgets"
2. `--test-tags "/web,-.test_js[Components > CheckBox]"` will start all web test, but skip Components > CheckBox qunit
3. ` --test-tags ".test_js[utils,-utils > Hooks,-utils > Patch]"` start all test_js utils tests except the Hooks and Patch ones
4. `--test-tags "-.test_js[Components > CheckBox]"` will start **all** tests, but skip Components > CheckBox qunit
## Motivation
Tags are used by runbot to *disable* randomly failing tests without the need to commit changes.
They can precisely target a python test method, class or module.
They can also be used by developer to run a *specific* test.
The problem is that the qunit is a special case, a js test suite inside the test_suite. It is only possible to disable all of them, or none of them.
Adding the possibility to enable/disable some of them was requested for a long time.
## Using test tags
The solution to use test-tags as multiple pros:
- avoid a new command line argument
- runbot already manages test-tags for errors meaning that this solution would imply minimal changes on this side
- passing arguments to a specific tests, without regard of the qunit needs looks like a decent solution. This is a generic solution that could lead to other posibilities (profiling, test mode, ...)
Test tags are not aware of the purpose of the parameters, they will only be passed to the test. The tests has the responsibility to parse them.
## Chosen syntax and behavior
The main need is to be enable/disable some qunit. This means that we may want to support having parameters using comma `,` Unfortunately this may conflict with comma used to split tags if the syntax is not well defined.
The main idea to solve this issue was that it would be intuitive to give parameters as a function call would, between parentheses.
The opening and closing of the parentheses would allow to identify if a comma is part of the parameters or a tag separator. But using parenthesis is not a good idea in a command line since it could be interpreted by the shell.
The chosen alternative was to use `[]` to have a opening and closing symbol. Depending on how the parameters are interpreted, it can also be quite intuitive to understand: we select a specific element.
`.test_js[mail,stock]`
to run only js tests concerning mail and stock.
The idea to disable some qunit would be to specify a negative filter as for tags:
`.test_js[-some_module]`
Multiple matching tags may be given, in this case all parameters are given to the test. This is why test_parameters are a list of strings.
`.test_js[-m1,-m2],.test_js[-m3]` will be given to the test as `['-m1,-m2', '-m3']`
## Splitting the tags
The idea to support nested [] in params was considered but this would complexify a lot the parsing
`.test_method[filters=[mail,crm],failfast=0]`
This is NOT supported even if it could be.
Parsing such tags would need a more complex parser (to split the , )
The final decision was made to keep it simple for now since it wouldn't be a problem to add this in the future if needed.
## Negating a parametric tag
A test tag can be negated to disable a test `-.test_js` (no op if test_js was not expected to run)
The question is, what is the expected behaviour of `-.test_js[mail]`.
### 1. Forbid this form
Simple solution, consider it as disabling a test, so passing the parameters would be usellesss and we should just don't allow that. But forbidding this form may force to make some complex development in runbot, since the current logic to disable a test is to add a '-' in front of the tag extected to run the test.
### 2. Transform it to negate the parameter
It could be as simple as transforming `-.test_js[mail]` to `.test_js[-(mail)]`, or to manage the case when we could have already negated arguments (and multiple ones), tansform it to `.test_js[-mail-]`
The only cons of this solution is that adding the tag -.test_js[mail] would actually enable the test_js even if it is not the case, and be more equivalent to `.test_js,.test_js[-mail]`
### 3. Consider them apart: negated but not including.
With this last solution, it is not possible to translate it as a tag, it would mean `.test_js[-mail]` if test_js is already enabled. This is whats looks to be the most robust solution. Adding a negated test-tag should not enable a test that wouldn't if not present
### 4. Always considered as parameters
`.test_js[mail]` would not enable test_js, but pass mail as parameter to test_js if another test enables it.
This means that to start the mail js test, we would use --test-tags .test_js,.test_js[mail]
This could make sence but would be less practical.
Since the main goal is to be able to disable a specific qunit from the runbot, 2, 3 and 4 could work in most cases
but 2 could be problematic in edge cases, and for odoosh were we may want to use autotags but only enable test from one module. /my_module,.test_js[-some_test] would enable the test_js.
3 and 4 are equivalent for negation, but the automatic generation of config wouldn't work with 4.
The current chosen solution is 3 since it looks to be the more practical.
Forward-Port-Of: odoo/odoo#200413Steps to reproduce: - add a payment reference on a vendor bill - confirm - register a payment - see the memo takes the payment reference value - update the payment reference on the invoice, register (no matter if you reset the invoice into draft or not) - register a payment Issue: see the memo takes the same vale as the initial payment reference Cause: We use the `line.name` which is not wrong as when we update the payment reference the it will be updated. But whenever we update th
Original PR description
Steps to reproduce: - add a payment reference on a vendor bill - confirm - register a payment - see the memo takes the payment reference value - update the payment reference on the invoice, register (no matter if you reset the invoice into draft or not) - register a payment Issue: see the memo takes the same vale as the initial payment reference Cause: We use the `line.name` which is not wrong as when we update the payment reference the it will be updated. But whenever we update the payment reference again, the `line.name` will not be updated https://github.com/odoo/odoo/blob/0bec22df0a34c6bc201d2627cf1123509d272a6d/addons/account/models/account_move_line.py#L482-L483 Solution: We prioritize the payment reference for the communication as it is the case in 18.0 opw-4405999 Forward-Port-Of: odoo/odoo#196611
Before this commit, customers were facing problems during the first synchronization related to the abundance of invitations sent through Outlook from previously created events in Odoo side. This should not happen because most of the time it is not useful synchronizing events that were already created before starting the synchronization with Outlook (from feedbacks discussed with customers and internally). After this commit, we no longer synchronize events that were created before the first sy
Original PR description
Before this commit, customers were facing problems during the first synchronization related to the abundance of invitations sent through Outlook from previously created events in Odoo side. This should not happen because most of the time it is not useful synchronizing events that were already created before starting the synchronization with Outlook (from feedbacks discussed with customers and internally). After this commit, we no longer synchronize events that were created before the first synchronization of any user in a database if we don't find any token created in it (i.e. if no user synchronized its Odoo Calendar with Outlook before this improvement). In case of any user already have synchronized its calendar with Outlook, we won't change the synchronization behavior (since the biggest part of the invitations were already sent). task-4294884 Forward-Port-Of: odoo/odoo#185911
Reduce the memory footprint and slightly improve the performance of export, especially when we traverse multiple levels of relational fields. We replace the https://github.com/odoo/odoo/pull/22494 solution because it is only works at the top level of the export, to avoid invalidating records that may be used by the next iteration, and because the cache memory footprint of the cache has been reduced in recent years anyway. Instead, we explicitly read the only asked fields recursively. Memo
Original PR description
Reduce the memory footprint and slightly improve the performance of export, especially when we traverse multiple levels of relational fields. We replace the https://github.com/odoo/odoo/pull/22494…
Reduce the memory footprint and slightly improve the performance of export, especially when we traverse multiple levels of relational fields. We replace the https://github.com/odoo/odoo/pull/22494 solution because it is only works at the top level of the export, to avoid invalidating records that may be used by the next iteration, and because the cache memory footprint of the cache has been reduced in recent years anyway. Instead, we explicitly read the only asked fields recursively. Memory/Performance changes: For exporting 10K of stock.picking (Transfers) with basic fields of the list view: ``` Before: 25 Mb of memory peak - 31 SQL requests, +- 55 ms of queries, +- 2440 ms of Python After : 29 Mb of memory peak - 31 SQL requests, +- 45 ms of queries, +- 2402 ms of Python ``` For exporting 10K of stock.picking (Transfers) with their stock moves (30K) and their stock move line (4K): ``` Before: 191 Mb of memory peak - 162 SQL requests, +- 455 ms of queries, +- 7050 ms of Python After : 140 Mb of memory peak - 129 SQL requests, +- 315 ms of queries, +- 6930 ms of Python ``` Forward-Port-Of: odoo/odoo#199218
Steps to reproduce the issue: 1. Activate the Odoo Mexican Localization Reports module 2. In a Mexican company, create a new Account with 1 as code 3. Go to Trial Balance and download COA SAT (XML) 5. In the General Settings with developer mode active, Download XSD files 6. Go to Trial Balance and download COA SAT (XML) again 7. You get a UserError with an unclear message Explanation: The Mexican Chart of Accounts have clear rules regarding `account.account.code`. The only way to v
Original PR description
Steps to reproduce the issue: 1. Activate the Odoo Mexican Localization Reports module 2. In a Mexican company, create a new Account with 1 as code 3. Go to Trial Balance and download COA SAT (XML)…
Steps to reproduce the issue: 1. Activate the Odoo Mexican Localization Reports module 2. In a Mexican company, create a new Account with 1 as code 3. Go to Trial Balance and download COA SAT (XML) 5. In the General Settings with developer mode active, Download XSD files 6. Go to Trial Balance and download COA SAT (XML) again 7. You get a UserError with an unclear message Explanation: The Mexican Chart of Accounts have clear rules regarding `account.account.code`. The only way to verify those accounts is through the XSD files check, but they are not automatically downloaded and the error received with those files downloaded is not user friendly. Fix reasoning: Instead of regulating the code when downloading the XML. We'll add warnings on the Chart of Accounts to notify the user when a code is incorrect. To make the report error clearer to the user, we added a RedirectWarning that displays the accounts with faulty codes before generating the xml. opw-4287338 Forward-Port-Of: odoo/enterprise#73943
The Expense Account column was missing from the Asset Models list view. task-4402982 Forward-Port-Of: odoo/enterprise#78432
Original PR description
The Expense Account column was missing from the Asset Models list view. task-4402982 Forward-Port-Of: odoo/enterprise#78432
This commit upgrades the image upload endpoint to the one available in the v2 API. This is done because X is deprecating the old upload API endpoint. We also needed to update how the media id was fetched from the response as it changed between versions. task-4606722 Forward-Port-Of: odoo/enterprise#80232
Original PR description
This commit upgrades the image upload endpoint to the one available in the v2 API. This is done because X is deprecating the old upload API endpoint. We also needed to update how the media id was fetched from the response as it changed between versions. task-4606722 Forward-Port-Of: odoo/enterprise#80232