Friday, February 28, 2025
44 changes · saas-18.2
Resolved issues and error corrections
Restored a missing selection count helper used by stock orderpoint list buttons. This prevents those buttons from breaking when users select records, keeping inventory replenishment workflows usable.
Original PR description
Buttons in the `stock.StockOrderpoint.listView` template depend on the `nbSelected` method that was moved out of the list controller, so we're adding it back. Task ID: [4614152](https://www.odoo.com/odoo/project/966/tasks/4614152)
The Gantt view now displays fold and unfold icon spacing correctly for right-to-left languages. This improves the visual consistency and usability of the schedule view for users working in RTL interfaces.
Original PR description
This commit fixes a display issue in RTL mode where the padding separating fold/unfold icons appears on the wrong side. This occurs because Font Awesome icons are rotated using a transform in RTL, which also affects padding. The fix replaces padding with a gap to ensure correct spacing.
This fix corrects how purchase order updates are handled when linked to approvals. It avoids extra database work and prevents incorrect internal reassignment, helping purchase approval flows behave more reliably.
Original PR description
The `write` method for `purchase.order` was not correctly overridden in `approvals_purchase`. This commit fixes it so as to avoid unnecessary db queries (i.e. `search` calls) and incorrect reassignment of the values of the `self` recordset. Also does a small improvement of using a defaultdict instead of manually recreating its logic for a normal dict. follow-up to: odoo/enterprise#71294 odoo/enterprise#79559 backport of: https://github.com/odoo/enterprise/pull/79953
The point of sale restaurant appointment Gantt view no longer shows an irrelevant booking helper message. This keeps the POS experience cleaner and avoids confusing staff with appointment-specific guidance in the wrong place.
Original PR description
Purpose ========= An unnecessary action helper was present in the pos Gantt view. Technical ========= https://github.com/odoo/enterprise/commit/427697ac326a7dc41b7e5a43634188b6d1650b69#diff-425f25c619962deff7d699cd67856a5081924b21d1f8f57190abcd719f1da464R26 Here we were using the active_model to prepare showNoContentHelp for the action helper when we go into the Gantt from appointment but this context is also used in the ```pos_restaurant_appointment```. Added our own context for the custom action helper. Task-4607266
Miscellaneous changes
Before this commit: === - there was preset demo data was not enabled for self order After this commit: === - updated preset demo data to default enabled in pos self order Task: 4501570 Forward-Port-Of: odoo/odoo#194777
Original PR description
Before this commit: === - there was preset demo data was not enabled for self order After this commit: === - updated preset demo data to default enabled in pos self order Task: 4501570 Forward-Port-Of: odoo/odoo#194777
- Fix issue where an error occur when trying to open the customer popup on mobile from the ticket screen (while reviewing a paid order). - Now we don't display the `Customer` selection button when we're on the ticket screen (like it was already done for the "actions" button) to avoid this error (like it's done in desktop). Also, it does not make sense to try to change the customer of a paid order. task-id: 4571914 Description of the issue/feature this PR addresses: Current behavior bef
Original PR description
- Fix issue where an error occur when trying to open the customer popup on mobile from the ticket screen (while reviewing a paid order). - Now we don't display the `Customer` selection button when we're on the ticket screen (like it was already done for the "actions" button) to avoid this error (like it's done in desktop). Also, it does not make sense to try to change the customer of a paid order. task-id: 4571914 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#198453 Forward-Port-Of: odoo/odoo#197565
check commit message for description Forward-Port-Of: odoo/odoo#198835
Original PR description
check commit message for description Forward-Port-Of: odoo/odoo#198835
The Romanian SPV servers are slow. When sending a request to them, we previously set a hard timeout limit at 10 seconds and mark the request as failed if it exceeds it. However, recently we have found a critical issue where some users found that their invoice has been sent twice (or more) to the Romanian SPV. After investigating, we found that what's likely to happen is that the SPV takes more than 10 seconds to send the response back when we're making a request, and since in our side we c
Original PR description
The Romanian SPV servers are slow. When sending a request to them, we previously set a hard timeout limit at 10 seconds and mark the request as failed if it exceeds it. However, recently we have…
The Romanian SPV servers are slow. When sending a request to them, we previously set a hard timeout limit at 10 seconds and mark the request as failed if it exceeds it. However, recently we have found a critical issue where some users found that their invoice has been sent twice (or more) to the Romanian SPV. After investigating, we found that what's likely to happen is that the SPV takes more than 10 seconds to send the response back when we're making a request, and since in our side we consider the request as failed and requires the user to send a new request again, we make the user send a second request on the same invoice, where the SPV actually acknowledges all of the received invoices. After discussing with the PO, a temporary workaround for now is to increase the timeout limit to 60 seconds (1 full minute) to reduce the likelihood of this issue happening, and log error messages on the chatter if the request (either for send/fetch/download) failed, so that the user are aware when it is timeout and be more wary not to send another request right away, in case the new timeout limit are still not enough. Other small changes in this PR: - Handle response code 401, (which is a JSON object, invalid access token) - Remove the "Error when sending the document to the SPV:" template in error documents (because not all error documents are for sending, some are from fetch/download) opw-4571713 Forward-Port-Of: odoo/odoo#199290 Forward-Port-Of: odoo/odoo#198604
- While calling `_generate_primary_snippet_templates`, `create_missing_views` fetches the existing snippet views. However, archived snippet is ignored, causing `create_missing_views` to attempt to create the snippet again, mistakenly considering it as a missing view. This leads to a traceback: ```py File "/data/build/odoo/odoo/sql_db.py", line 332, in execute res = self._obj.execute(query, params) psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "ir_mod
Original PR description
- While calling `_generate_primary_snippet_templates`, `create_missing_views` fetches the existing snippet views. However, archived snippet is ignored, causing `create_missing_views` to attempt to create the snippet again, mistakenly considering it as a missing view. This leads to a traceback:
```py
File "/data/build/odoo/odoo/sql_db.py", line 332, in execute
res = self._obj.execute(query, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "ir_model_data_module_name_uniq_index"
DETAIL: Key (module, name)=(website, new_page_template_services_0_s_website_form) already exists.
```
- To prevent such errors, it's better to fetch inactive views as well during creation.
opw-4510585
upg-2452055
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#197107In this commit: === - When a reward is available, the More action button is visually highlighted . Forward-Port-Of: odoo/odoo#199122 Forward-Port-Of: odoo/odoo#198970
Original PR description
In this commit: === - When a reward is available, the More action button is visually highlighted . Forward-Port-Of: odoo/odoo#199122 Forward-Port-Of: odoo/odoo#198970
Before this PR, rtc invitations were only canceled when the user clicked on the decline button. Sometimes, users are busy and having this call invitation that keeps ringing forever is cumbersome. This PR removes this invitation after 30s. task-4345479 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: od
Original PR description
Before this PR, rtc invitations were only canceled when the user clicked on the decline button. Sometimes, users are busy and having this call invitation that keeps ringing forever is cumbersome. This PR removes this invitation after 30s. task-4345479 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#199425 Forward-Port-Of: odoo/odoo#199272
To reproduce: 1. Create an Analytic Account 2. Use this Analytic Account in an account move and post it. 3. Return to the Analytic Account and delete it. The deletion goes through. 4. The move no longer has the Analytic Account. The issue: Currently, an Analytical Account can be deleted even if it has been used in an analytic item, be it a move or an analytic simulation. Hence, the move no longer has the analytic account that was added when the move was posted, without any warnings to th
Original PR description
To reproduce:
1. Create an Analytic Account
2. Use this Analytic Account in an account move and post it.
3. Return to the Analytic Account and delete it. The deletion goes through.
4. The move no longer has the Analytic Account.
The issue:
Currently, an Analytical Account can be deleted even if it has been used in an analytic item, be it a move or an analytic simulation. Hence, the move no longer has the analytic account that was added when the move was posted, without any warnings to the user.
Solution:
Make the fields "x_plan{id_}_id" on analytic lines ondelete='restrict'. An upgrade script is added to handle existing analytic accounts.
task-4567137
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#199305
Forward-Port-Of: odoo/odoo#197886Steps to reproduce: 1) Enable Click and Collect 2) Configure pick up in store and add a store in US with state set 3) Set the available country to US and available state as in the store's partner 4) Enable Pay on site 5) Go to /shop page and add a storable product 6) Proceed to payment and pay choosing pickup in store delivery method and pay on site payment method 7) Observe an error Reason: /shop/payment/validate checks for payment errors. When confirming a sales
Original PR description
Steps to reproduce:
1) Enable Click and Collect
2) Configure pick up in store and add a store in US with state set
3) Set the available country to US and available state as in the
store's partner
4) Enable Pay on site
5) Go to /shop page and add a storable product
6) Proceed to payment and pay choosing pickup in store delivery method
and pay on site payment method
7) Observe an error
Reason:
/shop/payment/validate checks for payment errors. When confirming a
sales order with pickup in-store dm the partner_shipping_id is set to
the created partner from the selected pickup point address.
However, the state was missing which resulted in creating a partner
with an empty state causing the `_get_delivery_methods` called by
`_get_shop_payment_errors` show an error.
Solution:
Save a state for pickup location data
opw-4592939
Forward-Port-Of: odoo/odoo#199601This line would consistently crash with: `NameError: name '_' is not defined` Forward-Port-Of: odoo/odoo#199629
Original PR description
This line would consistently crash with: `NameError: name '_' is not defined` Forward-Port-Of: odoo/odoo#199629
This commit:https://github.com/odoo/odoo/commit/134324c5cf0e2e62f02d212ac27a9442e1f7a824 removed the auto-install for l10n_fr. Which has the consequence of not having l10n_fr_account installed when we have account and l10n_fr. This commit will reintroduce that but also removing the countries since it depends on l10n_fr that already has the country set up. task: 4296946 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odo
Original PR description
This commit:https://github.com/odoo/odoo/commit/134324c5cf0e2e62f02d212ac27a9442e1f7a824 removed the auto-install for l10n_fr. Which has the consequence of not having l10n_fr_account installed when we have account and l10n_fr. This commit will reintroduce that but also removing the countries since it depends on l10n_fr that already has the country set up. task: 4296946 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198884 Forward-Port-Of: odoo/odoo#197269
This commit enhances the display of the website name in the dropdown menu and the website systray item by utilizing the `text-truncate` class to manage long names more effectively. task-4069591 Forward-Port-Of: odoo/odoo#178206
Original PR description
This commit enhances the display of the website name in the dropdown menu and the website systray item by utilizing the `text-truncate` class to manage long names more effectively. task-4069591 Forward-Port-Of: odoo/odoo#178206
Before this commit, in the lot kanban view, if a lot was expired, the alert icon and the overpass days were on different lines. This commit fixes that so the alert icon is just beside the date. Before / After:   Enterprise PR: odoo/enterprise#80338 For
Original PR description
Before this commit, in the lot kanban view, if a lot was expired, the alert icon and the overpass days were on different lines. This commit fixes that so the alert icon is just beside the date. Before / After:   Enterprise PR: odoo/enterprise#80338 Forward-Port-Of: odoo/odoo#199554
In this commit: === - Updated tour test to verify the presence of both the unique code and portal URL instead of a QR code check. runbot: 111424 Forward-Port-Of: odoo/odoo#199488 Forward-Port-Of: odoo/odoo#199231
Original PR description
In this commit: === - Updated tour test to verify the presence of both the unique code and portal URL instead of a QR code check. runbot: 111424 Forward-Port-Of: odoo/odoo#199488 Forward-Port-Of: odoo/odoo#199231
Before this commit, loading the PoS with several products was slow due to inefficient data handling. The `addItem` function operated in O(n) time and, because it was called repeatedly over datasets, this led to major performance issues. After this commit, `addItem` now runs in O(1) by using a map/dictionary approach. This significantly reduces loading times for PoS when many products are present. opw-4584930 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com
Original PR description
Before this commit, loading the PoS with several products was slow due to inefficient data handling. The `addItem` function operated in O(n) time and, because it was called repeatedly over datasets, this led to major performance issues. After this commit, `addItem` now runs in O(1) by using a map/dictionary approach. This significantly reduces loading times for PoS when many products are present. opw-4584930 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198123
Current behavior before PR: - After this [fix](https://github.com/odoo/odoo/commit/56d5c9f4861b3509043660c97a702bfe0e636e3f) , any type searching is not possible for `placeholder_code` field. - For every filter applied, it just return `invalid domain error`. - this is because ` _search_placeholder_code` uses `=like` operator, but this makes it, unsearchable from frontend, as filters supports `ilike` and its related operators.  , any type searching is not possible for `placeholder_code` field. - For every filter applied, it just return `invalid domain error`. - this is because ` _search_placeholder_code` uses `=like` operator, but this makes it, unsearchable from frontend, as filters supports `ilike` and its related operators.  Desired behavior after PR is merged: - This PR fixes this issue, by changing the operator from `=like` -> `=ilike` - `placeholder_code` field can now be searched for filters like `starts with` and `ends with` .  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198284
Currently, a traceback occurs when the user deletes the presets and try to open a new restaurant session. To reproduce this issue: 1) Install `Restaurant` without demo 2) Delete all the `presets` data from the POS/Configuration 3) Now open the `Restaurant` from the POS Dashboard Error:- ``` IndexError: list index out of range ``` When the user tries to open a new `Restaurant` from the Dashboard, the `load_onboarding_restaurant_scenario` method triggers. In that method, we try
Original PR description
Currently, a traceback occurs when the user deletes the presets and try to open a new restaurant session. To reproduce this issue: 1) Install `Restaurant` without demo 2) Delete all the `presets`…
Currently, a traceback occurs when the user deletes the presets and try to open a new restaurant session. To reproduce this issue: 1) Install `Restaurant` without demo 2) Delete all the `presets` data from the POS/Configuration 3) Now open the `Restaurant` from the POS Dashboard Error:- ``` IndexError: list index out of range ``` When the user tries to open a new `Restaurant` from the Dashboard, the `load_onboarding_restaurant_scenario` method triggers. In that method, we try to assign the `default_preset_id` value from presets[0]. We get presets as an empty list because the user deleted all the `presets` data. https://github.com/odoo/odoo/blob/4aa3f035f9e633ee50e8538abf0bffc5a246e643/addons/pos_restaurant/models/pos_config.py#L116-L120 https://github.com/odoo/odoo/blob/4aa3f035f9e633ee50e8538abf0bffc5a246e643/addons/pos_restaurant/models/pos_config.py#L131 This leads to the above traceback when accessing the first index from presets. **Note:-** When resolving the above issue we get the `ParseError`, This will also resolved in this PR. sentry-6327697722,6329224724,6328865117 Forward-Port-Of: odoo/odoo#199161
**Problem**: When selecting all content with `Ctrl+A`, the main `o_editable` element is selected, which has an `ltr` direction by default. If we switch the direction while having a single `rtl` paragraph, the toolbar appears on the left instead of above the text. **Solution**: When `Ctrl+A` is used (selection is on `o_editable`), use deep position on the container edges. This simulates the browser’s default `Ctrl+A` behavior. **Example**: content: `<div contenteditable=true><p>tex[
Original PR description
**Problem**: When selecting all content with `Ctrl+A`, the main `o_editable` element is selected, which has an `ltr` direction by default. If we switch the direction while having a single `rtl`…
**Problem**: When selecting all content with `Ctrl+A`, the main `o_editable` element is selected, which has an `ltr` direction by default. If we switch the direction while having a single `rtl` paragraph, the toolbar appears on the left instead of above the text. **Solution**: When `Ctrl+A` is used (selection is on `o_editable`), use deep position on the container edges. This simulates the browser’s default `Ctrl+A` behavior. **Example**: content: `<div contenteditable=true><p>tex[]t</p></div>` Existing Ctrl+A: `<div contenteditable=true>[<p>text</p>]</div>` New Ctrl+A: `<div contenteditable=true><p>[text]</p></div>` Default Ctrl+A (done by browser): `<div contenteditable=true><p>[text]</p></div>` **Steps to reproduce**: 1. Add some text. 2. Switch the text direction to `rtl`. 3. Press `Ctrl+A`. 4. The toolbar appears on the left instead of above the text. opw-4557762 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199002 Forward-Port-Of: odoo/odoo#198100
**Problem**: When searching for a product variant using its barcode, the product does not appear in the results. **Solution**: Ensure that the barcode of product variants is checked when matching products during the search. **Steps to Reproduce**: 1. Create a product with variants. 2. Assign a barcode to a variant product. 3. Start a PoS session (ensure the variant can be sold here). 4. Use the search bar to look up the variant's barcode. - **Issue**: No results are found. opw
Original PR description
**Problem**: When searching for a product variant using its barcode, the product does not appear in the results. **Solution**: Ensure that the barcode of product variants is checked when matching products during the search. **Steps to Reproduce**: 1. Create a product with variants. 2. Assign a barcode to a variant product. 3. Start a PoS session (ensure the variant can be sold here). 4. Use the search bar to look up the variant's barcode. - **Issue**: No results are found. opw-4561663 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198953
Discuss find or search conversation makes use of ctrl-k in `@` mode (= conversation mode). Using ctrl-k in discuss app is very likely to find or search conversations, therefore this should be the default rather than global ctrl-k. This commit makes ctrl-k inside discuss app have the `@` conversation mode. task-4510185 Forward-Port-Of: odoo/odoo#199298
Original PR description
Discuss find or search conversation makes use of ctrl-k in `@` mode (= conversation mode). Using ctrl-k in discuss app is very likely to find or search conversations, therefore this should be the default rather than global ctrl-k. This commit makes ctrl-k inside discuss app have the `@` conversation mode. task-4510185 Forward-Port-Of: odoo/odoo#199298
**Current behavior before PR**: Pressing Ctrl + K while focused on the chat window did not open the command palette, as the event was captured by the chat window and prevented from propagating further. **Desired behavior after PR is merged**: Ctrl + K is now properly handled when the chat window is focused, allowing the @ command palette to open as expected. **task-id**:[4593364](https://www.odoo.com/odoo/project/1519/tasks/4593364) --- I confirm I have signed the CLA and read th
Original PR description
**Current behavior before PR**: Pressing Ctrl + K while focused on the chat window did not open the command palette, as the event was captured by the chat window and prevented from propagating further. **Desired behavior after PR is merged**: Ctrl + K is now properly handled when the chat window is focused, allowing the @ command palette to open as expected. **task-id**:[4593364](https://www.odoo.com/odoo/project/1519/tasks/4593364) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199531
Forward-Port-Of: odoo/odoo#199563
Original PR description
Forward-Port-Of: odoo/odoo#199563
Before this commit, the `project_update_tour` sometimes fails because the save action takes more time than usually and so the UI does not get the click event on the new milestone created and so the line does not go back in edit mode. This commit adds a new step to make sure the create action is correctly made before doing the next steps. runbot-104048 Forward-Port-Of: odoo/odoo#199545
Original PR description
Before this commit, the `project_update_tour` sometimes fails because the save action takes more time than usually and so the UI does not get the click event on the new milestone created and so the line does not go back in edit mode. This commit adds a new step to make sure the create action is correctly made before doing the next steps. runbot-104048 Forward-Port-Of: odoo/odoo#199545
**Current behavior before PR:** The Systray Call menu in the community edition displayed incorrect styles due to improperly written CSS. **Desired behavior after PR is merged:** The issue is resolved by applying the correct conditions in the CSS. Before / After   Task-[4458263](https://www.odoo.com/odoo/my
Original PR description
**Current behavior before PR:** The Systray Call menu in the community edition displayed incorrect styles due to improperly written CSS. **Desired behavior after PR is merged:** The issue is resolved by applying the correct conditions in the CSS. Before / After   Task-[4458263](https://www.odoo.com/odoo/my-tasks/4458263) Enterprise-https://github.com/odoo/enterprise/pull/76910 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192862
This error occurs when attempting to create a lead and forward it from the live chat. Traceback : --- ``` StopIteration: null File "odoo/http.py", line 2420, in __call__ response = request._serve_db() File "odoo/http.py", line 1946, in _serve_db return self._transactioning( File "odoo/http.py", line 2010, in _transactioning return service_model.retrying(func, env=self.env) File "odoo/service/model.py", line 137, in retrying result = func() File "odoo/htt
Original PR description
This error occurs when attempting to create a lead and forward it from the live chat. Traceback : --- ``` StopIteration: null File "odoo/http.py", line 2420, in __call__ response =…
This error occurs when attempting to create a lead and forward it from the live chat.
Traceback :
---
```
StopIteration: null
File "odoo/http.py", line 2420, in __call__
response = request._serve_db()
File "odoo/http.py", line 1946, in _serve_db
return self._transactioning(
File "odoo/http.py", line 2010, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 137, in retrying
result = func()
File "odoo/http.py", line 1977, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2228, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 335, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 741, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/mail/models/discuss/mail_guest.py", line 38, in wrapper
return func(self, *args, **kwargs)
File "addons/im_livechat/controllers/chatbot.py", line 69, in chatbot_trigger_step
posted_message = next_step._process_step(discuss_channel)
File "addons/crm_livechat/models/chatbot_script_step.py", line 42, in _process_step
return self._process_step_create_lead_and_forward(discuss_channel)
File "addons/crm_livechat/models/chatbot_script_step.py", line 107, in _process_step_create_lead_and_forward
user = next(user for user in users if user.partner_id == operator_partner)
```
The error occurs at [1] because both `users` and `teams` are empty. As a result, `next()` attempts to retrieve an item from an empty iterator, leading to a `StopIteration` exception.
This issue arises when the bot assigned in the script is changed during an active session. Consequently, `operator_partner` refers to the old bot (the one configured at the start of the session) rather than the new one. This discrepancy causes the condition to be evaluated as True, leading to the error.
This commit resolves the error by saving the value of `operator_partner` before calling `_process_step_forward_operator`. This ensures that `operator_partner` remains the same until the end of the session.
[1]- https://github.com/odoo/odoo/blob/db62ec3b72b30b01ff04b067cf2c235bd9a8411e/addons/crm_livechat/models/chatbot_script_step.py#L101-L109
sentry-6296911936
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#197764It happens due to many reasons that the `stock.quant` object and `stock.move.line` loose their synchronisation and it could have a difference between the sum of `stock.move.line` and the quantity/reserved quantity on the `stock.quant` It's important to keep tracking why the desycnh happens and to fix all the root causes of it. However, it's hard for the user to clean the data himself or even worst to lock him when it happens (as before 18.0). For quantity: It's not a big deal to have a
Original PR description
It happens due to many reasons that the `stock.quant` object and `stock.move.line` loose their synchronisation and it could have a difference between the sum of `stock.move.line` and the…
It happens due to many reasons that the `stock.quant` object and `stock.move.line` loose their synchronisation and it could have a difference between the sum of `stock.move.line` and the quantity/reserved quantity on the `stock.quant` It's important to keep tracking why the desycnh happens and to fix all the root causes of it. However, it's hard for the user to clean the data himself or even worst to lock him when it happens (as before 18.0). For quantity: It's not a big deal to have a huge difference between the quantity and all the long time history. As in real life, the inventory adjustement can help to clean the data. For reserved quantity: It's a bigger problem since the user can't edit it. A first step would be to never write it to a negative value (since it should never happen). That way when the user empty the stock, it will also probably clean the reserved quantity. But in case where there is more reservation than on `stock.move.line`. We should also clean it to be able to reserve them. Currently, we will try in the scheduler for that part A last step, could be to create a constraint during test that ensure the synch is never broken and it could raise directly if the developer made a mistake 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#199293 Forward-Port-Of: odoo/odoo#188201
For visitors, the name of the author might not be known, only their live chat user name. Use the getter that takes this into account when displaying the author name of notifications such as "join", "left" or "invited to the channel" to actually display the live chat user name rather than nothing. task-4433078 Forward-Port-Of: odoo/odoo#199470
Original PR description
For visitors, the name of the author might not be known, only their live chat user name. Use the getter that takes this into account when displaying the author name of notifications such as "join", "left" or "invited to the channel" to actually display the live chat user name rather than nothing. task-4433078 Forward-Port-Of: odoo/odoo#199470
Update the official numbers of the Luxembourg payroll rules for 2025. task-4577491 Forward-Port-Of: odoo/enterprise#79805
Original PR description
Update the official numbers of the Luxembourg payroll rules for 2025. task-4577491 Forward-Port-Of: odoo/enterprise#79805
**To reproduce:** 1. Create two branches within a company. 2. Set a bank account linked to the journal defined in the parent company 3. Create one payment, such as a SEPA payment or check, to be batched later, in each branch. 4. Selecting both branches and the parent company, create a batch payment with both payments. 5. The error "All payments in the batch must belong to the same company." is raised. **Desired behavior:** The payments in different companies that are branches of a commo
Original PR description
**To reproduce:** 1. Create two branches within a company. 2. Set a bank account linked to the journal defined in the parent company 3. Create one payment, such as a SEPA payment or check, to be…
**To reproduce:** 1. Create two branches within a company. 2. Set a bank account linked to the journal defined in the parent company 3. Create one payment, such as a SEPA payment or check, to be batched later, in each branch. 4. Selecting both branches and the parent company, create a batch payment with both payments. 5. The error "All payments in the batch must belong to the same company." is raised. **Desired behavior:** The payments in different companies that are branches of a common head office should not trigger the error. They should be allowed to be batched. **Cause:** The function `_check_payments_constrains()` in account_batch_payments raises an error if more than one company_id is present in the payments being batched. **Solution:** Change the check in `_check_payments_constrains()` to raise an error only if more than one root_id for the companies in the payments is present. This way, payments from several companies, branches of the same head office, can be batched. Payments from companies that do not share the same root_id, however, still raise an error when attempting to batch them. task-4568317 Forward-Port-Of: odoo/enterprise#80285 Forward-Port-Of: odoo/enterprise#79359
Steps to reproduce: 1) Configure 2 rental products (product1 and product2) 2) Add at least 1 pricing period to product2 3) Set product2 as accessory product to product1 4) Go to /shop page and add product1 5) Go to the cart and observe the broken layout of suggested accessories opw-4463981 Forward-Port-Of: odoo/enterprise#80385
Original PR description
Steps to reproduce:
1) Configure 2 rental products (product1 and product2)
2) Add at least 1 pricing period to product2
3) Set product2 as accessory product to product1
4) Go to /shop page and add product1
5) Go to the cart and observe the broken layout of suggested
accessories
opw-4463981
Forward-Port-Of: odoo/enterprise#80385Steps to reproduce the bug: - Create a “quality.point”: - Operations: Manufacturing - Add a Work Order Operation - save - Update the operations to Receipt. Problem: The Work Order Operation field becomes invisible, but it is still filled so the quality point will still be applied. opw-4536136 Forward-Port-Of: odoo/enterprise#80123 Forward-Port-Of: odoo/enterprise#79868
Original PR description
Steps to reproduce the bug:
- Create a “quality.point”:
- Operations: Manufacturing
- Add a Work Order Operation
- save
- Update the operations to Receipt.
Problem:
The Work Order Operation field becomes invisible, but it is still filled so the quality point will still be applied.
opw-4536136
Forward-Port-Of: odoo/enterprise#80123
Forward-Port-Of: odoo/enterprise#79868When your spouse has no income or low income, you can benefit from withholding taxes reduction. Before this commit, only the case where the spouse had no income was implemented. This PR includes the case where the spouse has low income to also benefit for the withholding taxe reduction. task-4582221 Forward-Port-Of: odoo/enterprise#80346 Forward-Port-Of: odoo/enterprise#80052
Original PR description
When your spouse has no income or low income, you can benefit from withholding taxes reduction. Before this commit, only the case where the spouse had no income was implemented. This PR includes the case where the spouse has low income to also benefit for the withholding taxe reduction. task-4582221 Forward-Port-Of: odoo/enterprise#80346 Forward-Port-Of: odoo/enterprise#80052
Add a default field for each analytic plans when exporting journal items from list view task-4378083 Forward-Port-Of: odoo/enterprise#80279 Forward-Port-Of: odoo/enterprise#78530
Original PR description
Add a default field for each analytic plans when exporting journal items from list view task-4378083 Forward-Port-Of: odoo/enterprise#80279 Forward-Port-Of: odoo/enterprise#78530
Taskid: 4471762 Forward-Port-Of: odoo/enterprise#80258
Original PR description
Taskid: 4471762 Forward-Port-Of: odoo/enterprise#80258
This PR removes empty replace possibly breaking view inheritence Forward-Port-Of: odoo/enterprise#80200
Original PR description
This PR removes empty replace possibly breaking view inheritence Forward-Port-Of: odoo/enterprise#80200
This PR fixes two small visual issues, both related to the redesign of the Barcode app: - The "Sign" button was not updated when the Barcode app was redesigned; Before / After:  ](https://github.com/user-attachments/assets/c0457e5a-f442-49f3-b71b-4795a4947009)  - The `expiration_date` field design wasn't updated when the Barcode app design was, so it was off regarding the other fields. Before / After:   [OPW-4609284](https://www.odoo.com/odoo/project.task/4609284) Community PR: odoo/odoo#199554 Forward-Port-Of: odoo/enterprise#80338
Sometimes, when opening the documents folder, folders were not being completely loaded, which gave errors. This fix checks if the folders are properly loaded on the page and only then lets tours continue. Runbot build errors [1](https://runbot.odoo.com/odoo/action-573/109605), [2](https://runbot.odoo.com/odoo/action-573/109607), [3](https://runbot.odoo.com/odoo/action-573/113711), [4](https://runbot.odoo.com/odoo/action-573/113712) Forward-Port-Of: odoo/enterprise#79588
Original PR description
Sometimes, when opening the documents folder, folders were not being completely loaded, which gave errors. This fix checks if the folders are properly loaded on the page and only then lets tours continue. Runbot build errors [1](https://runbot.odoo.com/odoo/action-573/109605), [2](https://runbot.odoo.com/odoo/action-573/109607), [3](https://runbot.odoo.com/odoo/action-573/113711), [4](https://runbot.odoo.com/odoo/action-573/113712) Forward-Port-Of: odoo/enterprise#79588
Currently a `ParseError` arises when the user installs the `helpdesk` module after deleting `Your Odoo Periodic Digest` from the `Digest Emails` in Settings. Steps to reproduce: --- - Install `digest` module (without demo data) - Settings > Technical > Email > Digest Emails > Delete `Your Odoo Periodic Digest` - Now install `helpdesk` module Traceback: --- ``` Exception: Cannot update missing record 'digest.digest_digest_default' ParseError: while parsing /home/odoo/src/enterpris
Original PR description
Currently a `ParseError` arises when the user installs the `helpdesk` module after deleting `Your Odoo Periodic Digest` from the `Digest Emails` in Settings. Steps to reproduce: --- - Install…
Currently a `ParseError` arises when the user installs the `helpdesk` module after deleting `Your Odoo Periodic Digest` from the `Digest Emails` in Settings.
Steps to reproduce:
---
- Install `digest` module (without demo data)
- Settings > Technical > Email > Digest Emails > Delete `Your Odoo Periodic Digest`
- Now install `helpdesk` module
Traceback:
---
```
Exception: Cannot update missing record 'digest.digest_digest_default'
ParseError: while parsing /home/odoo/src/enterprise/saas-18.1/helpdesk/data/digest_data.xml:4, somewhere inside <record id="digest.digest_digest_default" model="digest.digest">
<field name="kpi_helpdesk_tickets_closed">True</field>
</record>
```
The error occurs because the user deleted `Your Odoo Periodic Digest` and then installed the `helpdesk` module. which requires a particular record.
This commit solves the above issue by using `forcecreate="False"` to bypass record creation if it violates checks.
https://github.com/odoo/odoo/blob/b794f0f332f473deb2c04eba60baf4761db3b508/odoo/tools/convert.py#L364-L366
sentry-5731062091
Forward-Port-Of: odoo/enterprise#79676This PR adds a redirect warning sending the user to the Accounting settings when the certificate or the key is missing before an xbrl export to avoid a traceback and give a friendlier feedback to the user. --- linked to opw-4563442 Forward-Port-Of: odoo/enterprise#80050
Original PR description
This PR adds a redirect warning sending the user to the Accounting settings when the certificate or the key is missing before an xbrl export to avoid a traceback and give a friendlier feedback to the user. --- linked to opw-4563442 Forward-Port-Of: odoo/enterprise#80050
Clarify owner on share panel: ============================ The panel must still indicate the owner (except for Odoobot) of the folder/document, when the partner list with access is empty. In addition, we don't want the owner to appear twice in this list, and there's no point in displaying his role. It may happen because someone sets the document's owner permission using the invitation member component of the panel. To avoid this, the owner can no longer be found from this component.
Original PR description
Clarify owner on share panel: ============================ The panel must still indicate the owner (except for Odoobot) of the folder/document, when the partner list with access is empty. In addition, we don't want the owner to appear twice in this list, and there's no point in displaying his role. It may happen because someone sets the document's owner permission using the invitation member component of the panel. To avoid this, the owner can no longer be found from this component. Access to permission panel data: =============================== As portals users can't use the share panel, access to the permission panel data is restricted to internal users. Editing permission expiration date: ================================== We don't want users with limited read access to a document/folder to be able to edit/remove their expiration date. task-4527397 Forward-Port-Of: odoo/enterprise#79057 Forward-Port-Of: odoo/enterprise#78199