Thursday, May 15, 2025
24 changes · saas-17.4
Resolved issues and error corrections
Clicking an employee avatar could cause an error when Planning was not installed or when employee information came from limited employee records. The fix makes the avatar card use the correct employee data source and adds shared support so the card opens reliably across these setups.
Original PR description
Steps to reproduce: - When the planning module is not installed and we click on employee avatar - This leads to a traceback, especially when the related employee data is available only in…
Steps to reproduce: - When the planning module is not installed and we click on employee avatar - This leads to a traceback, especially when the related employee data is available only in hr.employee.public or hr.employee. Cause: - The avatar card component was using a hardcoded model instead of dynamically using props.record.model. Although a custom get_avatar_card_data method was introduced to centralize data logic, it was not implemented on all relevant models (hr.employee, hr.employee.public), which caused traceback in certain setups. Solution: - Replaced the hardcoded model with props.record.model to dynamically resolve the model. - Added the get_avatar_card_data method to hr.employee.base to ensure compatibility. Ensured the logic works correctly even when the planning module is not installed. Follow-up to: - Commit : https://github.com/odoo/odoo/pull/187171 https://github.com/odoo/enterprise/pull/75121 - prevent component destruction which moved avatar card data fetching into a parent method to avoid lifecycle issues. Related task-4210513 task - 4777570
Subscription product pages now correctly show the tax indication when that setting is enabled in the website editor. This helps customers see expected tax information consistently before purchasing subscriptions, reducing confusion at checkout.
Original PR description
**Steps to reproduce** - Install website_sale_subscription - On the website page of a product, enter the editor and enable the "Tax Indication" setting for the product page. - The tax indication information doesn't appear for subscription products.  **Cause** Issue since commit 7d160198be779095660e7f6fb68ae231e4621972 which hides default pricing information from `website_sale` for subscription products, including the tax indication. opw-4637308
This fixes an error that could block appointment managers from adding closing days when their user profile had no timezone selected. The system now handles the missing timezone safely, keeping resource booking schedule management available.
Original PR description
When timezone of user is empty and the user clicks on Add Closing Day(s) button, a traceback will appear. Steps to reproduce the error: - Open Profile > Preferences > Select empty in timezone > Save…
When timezone of user is empty and the user clicks on Add Closing Day(s) button,
a traceback will appear.
Steps to reproduce the error:
- Open Profile > Preferences > Select empty in timezone > Save
- Install ``Appointments``
- Go to Appointments > Schedule > Resource Bookings > Add Closing Day(s)
Traceback:
```
File "/home/odoo/src/enterprise/appointment/wizard/appointment_manage_leaves.py", line 19, in <lambda>
leave_start_dt = fields.Datetime('Start Date', required=True, default=lambda self: self._default_time(0, 0))
File "/home/odoo/src/enterprise/appointment/wizard/appointment_manage_leaves.py", line 14, in _default_time
user_timezone = pytz.timezone(self.env.user.tz or self.env.context.get('tz', 'utc'))
File "/home/odoo/src/odoo/odoo/_monkeypatches/pytz.py", line 129, in timezone
return original_pytz_timezone(name)
File "__init__.py", line 183, in timezone
if zone.upper() == 'UTC':
AttributeError: 'bool' object has no attribute 'upper'
```
https://github.com/odoo/enterprise/blob/2c938b66fc1b526a360f4b199a47bcc53991bcb9/appointment/wizard/appointment_manage_leaves.py#L14
When the user selects an empty timezone, tz will be False.
So, It will lead to the above traceback.
Forward port https://github.com/odoo/enterprise/pull/64948 was closed in master,
so the issue is still present in saas-17.4 and all later versions.
sentry-6537084290Miscellaneous changes
Fixes an issue where copying an account report correctly update the formulas of the report but not the subformulas. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208071
Original PR description
Fixes an issue where copying an account report correctly update the formulas of the report but not the subformulas. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208071
When the `odoo-enterprise/iot/x509` encounters an unexpected error, we still get an OK response but the result is empty and instead there is an error object returned. Before this commit, we never checked for this error object and so continued to process an empty result, causing a crash. After this commit, we check for these errors and log them, with a different message to distinguish them from the existing errors that we already check for. task-4793795 --- I confirm I have signed the C
Original PR description
When the `odoo-enterprise/iot/x509` encounters an unexpected error, we still get an OK response but the result is empty and instead there is an error object returned. Before this commit, we never checked for this error object and so continued to process an empty result, causing a crash. After this commit, we check for these errors and log them, with a different message to distinguish them from the existing errors that we already check for. task-4793795 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209819
Because an exception raised by the `_unlink_forbid_parts_of_chain` method when attempting to delete journal entries. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190019
Original PR description
Because an exception raised by the `_unlink_forbid_parts_of_chain` method when attempting to delete journal entries. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#190019
Description: This PR adjusts the alignment of the `TOTAL` and `CHANGE` labels on the POS receipts by modifying the CSS. Specifically, it changes the `padding-left: 6em` rule to `text-align: start`. The reason for this update is to ensure that the labels are consistently aligned at the start, improving readability and layout in different screen sizes and environments. Previous behavior: The `TOTAL` and `CHANGE` labels used excessive left padding (`padding-left: 6em`), which caused misalignme
Original PR description
Description: This PR adjusts the alignment of the `TOTAL` and `CHANGE` labels on the POS receipts by modifying the CSS. Specifically, it changes the `padding-left: 6em` rule to `text-align: start`.…
Description: This PR adjusts the alignment of the `TOTAL` and `CHANGE` labels on the POS receipts by modifying the CSS. Specifically, it changes the `padding-left: 6em` rule to `text-align: start`. The reason for this update is to ensure that the labels are consistently aligned at the start, improving readability and layout in different screen sizes and environments. Previous behavior: The `TOTAL` and `CHANGE` labels used excessive left padding (`padding-left: 6em`), which caused misalignment in some cases.  New behavior: The labels are now aligned to the start using `text-align: start`, resulting in a cleaner and more consistent layout.  This change enhances the overall appearance of the POS receipts and maintains consistency across different locales and layouts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#185014
before this commit, in the profitability dashboard the cogs section is show with label cost_of_goods_sold  after this commit, the label will be shown as Cost of Goods Sold  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo
Original PR description
before this commit, in the profitability dashboard the cogs section is show with label cost_of_goods_sold  after this commit, the label will be shown as Cost of Goods Sold  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209868
After more discussion and consideration, this error is considered to have relatively low value and furthermore to possibly be triggered by the chrome shutdown itself e.g. `Page.stopLoading` is documented as > Force the page stop all navigations and pending resource fetches. so that can be the source of "failed to fetch" errors, maybe (didn't actually test it). Note that this is hooked to `_result.done()` aka `not _result.running()`, so there is a window where the issue can still occur (
Original PR description
After more discussion and consideration, this error is considered to have relatively low value and furthermore to possibly be triggered by the chrome shutdown itself e.g. `Page.stopLoading` is documented as > Force the page stop all navigations and pending resource fetches. so that can be the source of "failed to fetch" errors, maybe (didn't actually test it). Note that this is hooked to `_result.done()` aka `not _result.running()`, so there is a window where the issue can still occur (at least as a result of `stopLoading`) while we're waiting for service workers to shut down as well as pending responses. If this is still an issue, we may want to add a separate flag and set it right before or after the `Page.stopLoading` call. Hides runbot errors 54858, 55676, 109214, 109473, 110840, 134469, 162284, 162340, 193182, 198562, and 199232 Forward-Port-Of: odoo/odoo#209902
The selectionchange event is triggered in the next microtask tick. Any test that relies on the effect of a selectionchange but does not explicitely wait for it before running its step function or checking its expected result is likely to fail non-deterministically on newer versions of Chrome. This is basically a generalized version of the fix at https://github.com/odoo/odoo/pull/206969. Forward-Port-Of: odoo/odoo#209907 Forward-Port-Of: odoo/odoo#209844
Original PR description
The selectionchange event is triggered in the next microtask tick. Any test that relies on the effect of a selectionchange but does not explicitely wait for it before running its step function or checking its expected result is likely to fail non-deterministically on newer versions of Chrome. This is basically a generalized version of the fix at https://github.com/odoo/odoo/pull/206969. Forward-Port-Of: odoo/odoo#209907 Forward-Port-Of: odoo/odoo#209844
Scenario: in mobile, edit the link of the category back button Result: the link is changed, but it is overriden by t-att-href so will not be taken into account. Fix: add o_not_editable on parent to prevent editing this part, this prevent to change style but there is no simple way to prevent editing only the link and there is no information that there is a "t-att-href". opw-4725198 Forward-Port-Of: odoo/odoo#209500
Original PR description
Scenario: in mobile, edit the link of the category back button Result: the link is changed, but it is overriden by t-att-href so will not be taken into account. Fix: add o_not_editable on parent to prevent editing this part, this prevent to change style but there is no simple way to prevent editing only the link and there is no information that there is a "t-att-href". opw-4725198 Forward-Port-Of: odoo/odoo#209500
Description of the issue/feature this PR addresses: Adding 2 new accounts that addresses newly enacted law for cash payment rounding. [Legal doc (only in Lithuanian)](https://e-seimas.lrs.lt/portal/legalAct/lt/TAD/5d1b9590e33711ef8cdff2c320e69444?jfwid=m8xvfl87c) approving chart of account with the new added accounts. [Legal doc](https://www.e-tar.lt/portal/lt/legalAct/9926c840f1be11ee9f5b8ffa077f9188) approving the cash rounding itself. As a bonus I added translations for the new accounts
Original PR description
Description of the issue/feature this PR addresses: Adding 2 new accounts that addresses newly enacted law for cash payment rounding. [Legal doc (only in Lithuanian)](https://e-seimas.lrs.lt/portal/legalAct/lt/TAD/5d1b9590e33711ef8cdff2c320e69444?jfwid=m8xvfl87c) approving chart of account with the new added accounts. [Legal doc](https://www.e-tar.lt/portal/lt/legalAct/9926c840f1be11ee9f5b8ffa077f9188) approving the cash rounding itself. As a bonus I added translations for the new accounts, but unsure if I should have done that, let me know if I should remove them. [MORE INFO ABOUT IT ALL](https://www.lb.lt/en/rounding-of-cash-payments) Current behavior before PR: No `5009` and `6319` accounts Desired behavior after PR is merged: Accounts `5009` and `6319` present --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209096 Forward-Port-Of: odoo/odoo#208306
Some views use a domain widget to edit/save a domain and use it afterwards in several places where domains must have literals only. Typically, a literal_eval is used to evaluate the (string) domain. Thus expressions like "uid" or "context_today()"" should not be used in those contexts. Here we introduce an option "allow_expressions" (default False) for the domain field and use it to mark as invalid domains that contain expressions when the option is set to False. A notification is displayed whe
Original PR description
Some views use a domain widget to edit/save a domain and use it afterwards in several places where domains must have literals only. Typically, a literal_eval is used to evaluate the (string) domain.…
Some views use a domain widget to edit/save a domain and use it afterwards in several places where domains must have literals only. Typically, a literal_eval is used to evaluate the (string) domain. Thus expressions like "uid" or "context_today()"" should not be used in those contexts. Here we introduce an option "allow_expressions" (default False) for the domain field and use it to mark as invalid domains that contain expressions when the option is set to False. A notification is displayed when a domain contains an unwanted expressions. Since we cannot expect modules like base to be updated, we have to find another system to allow the usage of expressions in the form views for the models ir.filters and base.automation: we simply hardcode those models as allowing expressions. Since for these models, the evaluation of domains is done via safe_eval but with a restricted evaluation context, we also display a notification that alerts the user that the evaluation of expressions (although accepted by the domain field) can fail. We revert the recent commit https://github.com/odoo/odoo/commit/f95c494c3b86b34f2eaa84ae2a5da0d5b7502269 that introduced potentially problematic calls to safe_eval in order to allow evaluation of expressions. Forward-Port-Of: odoo/odoo#208876
### Steps to reproduce: - install fsm_industry - run any of these tests: - test_change_parent_plan - test_change_parent_plan_conflict - test_change_parent_plan_with_intermediate - test_change_plan - test_change_plan_conflict - test_change_plan_no_conflict #### > create access right error for the `account.analytic.line` model ### Cause of the issue: The following three record rules provide the creation of `account.analytic.line` for users related to projec
Original PR description
### Steps to reproduce: - install fsm_industry - run any of these tests: - test_change_parent_plan - test_change_parent_plan_conflict - test_change_parent_plan_with_intermediate - test_change_plan -…
### Steps to reproduce:
- install fsm_industry
- run any of these tests:
- test_change_parent_plan
- test_change_parent_plan_conflict
- test_change_parent_plan_with_intermediate
- test_change_plan
- test_change_plan_conflict
- test_change_plan_no_conflict
#### > create access right error for the `account.analytic.line` model
### Cause of the issue:
The following three record rules provide the creation of `account.analytic.line` for users related to project or timesheet access rights unless the analytic line it self is linked to a project: https://github.com/odoo/odoo/blob/e7bd20e64e023c279bf574630e2d8c8a45ba2fe2/addons/hr_timesheet/security/hr_timesheet_security.xml#L52-L64 https://github.com/odoo/odoo/blob/e7bd20e64e023c279bf574630e2d8c8a45ba2fe2/addons/hr_timesheet/security/hr_timesheet_security.xml#L66-L76 https://github.com/odoo/odoo/blob/e7bd20e64e023c279bf574630e2d8c8a45ba2fe2/addons/hr_timesheet/security/hr_timesheet_security.xml#L78-L83 Since the analytic module is unrelated to the project module, these tests will inevitably fail.
### Note:
These record rules do not stop the record creation once the account module is installed since the following record rules override the creation access rights for `account.group_account_invoice` users: https://github.com/odoo/odoo/blob/e7bd20e64e023c279bf574630e2d8c8a45ba2fe2/addons/account/security/account_security.xml#L102-L107
Similar issue treated in commit 9d164c1d2cd8e532109b9859ab776fcf2f71d115
### Note 2:
A priori, the same problem would occur if we were to write post install analytic tests for portal users:
https://github.com/odoo/odoo/blob/e7bd20e64e023c279bf574630e2d8c8a45ba2fe2/addons/hr_timesheet/security/hr_timesheet_security.xml#L33-L50
runbot-160013
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#208978**Description of the issue/feature this PR addresses:** - The contact-us form allows task creation without a project (project_id = None). These tasks are assigned to odoobot, have no followers, and no project, making them inaccessible due to ACL restrictions. **steps to reproduce** 1. Install website_form_project. 2. Edit the contact-us form submit button. 3. Set action to 'Create a task' and select 'None' for the project. 4. Save and submit the form. **Observation** - Tasks creat
Original PR description
**Description of the issue/feature this PR addresses:** - The contact-us form allows task creation without a project (project_id = None). These tasks are assigned to odoobot, have no followers, and…
**Description of the issue/feature this PR addresses:** - The contact-us form allows task creation without a project (project_id = None). These tasks are assigned to odoobot, have no followers, and no project, making them inaccessible due to ACL restrictions. **steps to reproduce** 1. Install website_form_project. 2. Edit the contact-us form submit button. 3. Set action to 'Create a task' and select 'None' for the project. 4. Save and submit the form. **Observation** - Tasks created under such configuration are hidden in the UI and trigger access errors when trying to open them.  Desired behavior after PR is merged: - Making the project field required, the created tasks will now be accessible/visible [opw-4664601](https://www.odoo.com/odoo/project/49/tasks/4664601) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207871
Better phrasing, better compatilibity of the colors. Removal of tracking. task-4782004 Forward-Port-Of: odoo/odoo#210049
Original PR description
Better phrasing, better compatilibity of the colors. Removal of tracking. task-4782004 Forward-Port-Of: odoo/odoo#210049
### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 10 units in stock. - Create a rental order for 6 units of that product and confirm it. #### > The rental forecast turns red and incorrectly shows only 4 units available for rent. In the related Gantt view (accessible via the forecast), the record is red and displays the message: "The product is not available during this period." ### Cause of the issue: Since commit d
Original PR description
### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 10 units in stock. - Create a rental order for 6 units of that product and…
### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 10 units in stock. - Create a rental order for 6 units of that product and confirm it. #### > The rental forecast turns red and incorrectly shows only 4 units available for rent. In the related Gantt view (accessible via the forecast), the record is red and displays the message: "The product is not available during this period." ### Cause of the issue: Since commit d3253de24ba5397eaed63948edaaf11e10f34e96, the rental forecast availability has been based on the stock forecast at the start of the rental period. This forecast considers incoming and outgoing stock moves, including those from sales or purchase orders. However, as these moves includes these generated by rental transfers and since the `rented_qty_during_period` was already taken into account by the rental order's them self, commit d3253de24ba5397eaed63948edaaf11e10f34e96 attempted to reconcile these moves with the already computed `rented_qty_during_period`. However, this new computation did not not exclude the transfers generated by the order itself. ### Fix: We revert commit 053f18ee403c274c9fc57c911ee0bee866523356 and instead reconcile rented_qty_during_period using a simpler computation including the rental order’s own moves. This approach takes advantage of the `ignored_soline_id` parameter in the `_get_unavailable_qty` to ignore stock moves from the current rental order and restores the `_get_unavailable_qty` logic to match its cleaner pre-fixed behavior which used to be independent of the rental transfer setting. opw-4713071 Forward-Port-Of: odoo/enterprise#83689
## Version: 17.0+ ## Issue: Stripe payments with an unregistered card on backdated subscriptions lead to Stripe API refusal. ## Steps to reproduce: Ensure Stripe is well configured in `Test Mode` with `Credentials`; Create a new Sale Order with `Monthly Cleaning` as `Quotation Template` for any customer: - Under `Other Info` tab, change the `Subscription` `Start Date` for a date at least 2 days before current date; - Confirm and create regular invoice: - Set `Invoice Date` to the s
Original PR description
## Version: 17.0+ ## Issue: Stripe payments with an unregistered card on backdated subscriptions lead to Stripe API refusal. ## Steps to reproduce: Ensure Stripe is well configured in `Test Mode`…
## Version:
17.0+
## Issue:
Stripe payments with an unregistered card on backdated subscriptions lead to Stripe API refusal.
## Steps to reproduce:
Ensure Stripe is well configured in `Test Mode` with `Credentials`; Create a new Sale Order with `Monthly Cleaning` as `Quotation Template` for any customer:
- Under `Other Info` tab, change the `Subscription` `Start Date` for a date at least 2 days before current date;
- Confirm and create regular invoice:
- Set `Invoice Date` to the same date as the subscription;
- Confirm and go to the invoice's preview and start payment process:
- Use a new card for payment;
- Check `Save my payment details` checkbox and pay.
## Cause:
The Stripe mandate needs to be filled with a start date at least equal to yesterday (https://docs.stripe.com/api/payment_intents/create#create_payment_intent-payment_method_options-card-mandate_options-start_date). Subscription app sets the start date to the SO's `start_date` via https://github.com/odoo/enterprise/blob/5642ad28919081a44bb47c0d936aa51980178d09/sale_subscription/models/payment_transaction.py#L51-L52. The values are retrieved by `_stripe_prepare_mandate_options()` via https://github.com/odoo/odoo/blob/d231565ec9054556d025b093195a934f28d067c3/addons/payment_stripe/models/payment_transaction.py#L206 and sent to Stipe under a new structure given by https://github.com/odoo/odoo/blob/d231565ec9054556d025b093195a934f28d067c3/addons/payment_stripe/models/payment_transaction.py#L209-L220
## Fix:
Initial suggestion made in the `payment_stripe` module (https://github.com/odoo/odoo/pull/207451), but later moved to the origin of the issue. As of 2025-05-12, Stripe seems to have fixed the issue, but this patch is still applied as a safety measure.
opw-4654142
Forward-Port-Of: odoo/enterprise#85314**Steps** 1. Upload a PDF & Sign > Upload PDF 2. Add a text item 3. Sign Now > Sign Now 4. Enter 123456789123456789 as text 5. Validate & Send Completed Document 6. Go to Documents > All Documents > Open the Document The number displayed is wrong by a small amount (123456789123456780). This happens because the number is bigger than Javascript's MAX_SAFE_INTEGER. Other problematic example: a sign item with "false" as text. **Solution** We can avoid parsing the text of the sign item.
Original PR description
**Steps** 1. Upload a PDF & Sign > Upload PDF 2. Add a text item 3. Sign Now > Sign Now 4. Enter 123456789123456789 as text 5. Validate & Send Completed Document 6. Go to Documents > All Documents > Open the Document The number displayed is wrong by a small amount (123456789123456780). This happens because the number is bigger than Javascript's MAX_SAFE_INTEGER. Other problematic example: a sign item with "false" as text. **Solution** We can avoid parsing the text of the sign item. opw-4479406 Forward-Port-Of: odoo/enterprise#77422
This reverts commit https://github.com/odoo/enterprise/commit/38c24178b33c33a2f6de24ebb30e8ecf54d92789. Indeed, for security reasons, it is preferable to avoid calling safe_eval whenever possible. Note that in https://github.com/odoo/odoo/pull/208876 a new mechanism is introduced in order to block the creation of expressions in domain fields where we only want domains with literals because they are evaluated with literal_eval. Forward-Port-Of: odoo/enterprise#85298
Original PR description
This reverts commit https://github.com/odoo/enterprise/commit/38c24178b33c33a2f6de24ebb30e8ecf54d92789. Indeed, for security reasons, it is preferable to avoid calling safe_eval whenever possible. Note that in https://github.com/odoo/odoo/pull/208876 a new mechanism is introduced in order to block the creation of expressions in domain fields where we only want domains with literals because they are evaluated with literal_eval. Forward-Port-Of: odoo/enterprise#85298
Currently a traceback occurs if no QST instutions were defined, making it hard for users to understand where the error is coming from, in this PR we specify the missing institution. Forward-Port-Of: odoo/enterprise#85104
Original PR description
Currently a traceback occurs if no QST instutions were defined, making it hard for users to understand where the error is coming from, in this PR we specify the missing institution. Forward-Port-Of: odoo/enterprise#85104
When user quickly presses the ``Enter`` key multiple times to record a timesheet, A traceback will appear. Steps to reproduce the error: - Go to Timesheets > My Timesheets - Now, Quickly press the ``Enter`` key multiple times to record a timesheet Traceback: ``` ValueError: Expected singleton: timer.timer(1, 2) File "home/odoo/src/enterprise/18.0/timesheet_grid/models/analytic.py", line 433, in action_start_new_timesheet_timer timesheet.action_timer_start() File "home/odoo/
Original PR description
When user quickly presses the ``Enter`` key multiple times to record a timesheet, A traceback will appear. Steps to reproduce the error: - Go to Timesheets > My Timesheets - Now, Quickly press the…
When user quickly presses the ``Enter`` key multiple times to record a timesheet,
A traceback will appear.
Steps to reproduce the error:
- Go to Timesheets > My Timesheets
- Now, Quickly press the ``Enter`` key multiple times to record a timesheet
Traceback:
```
ValueError: Expected singleton: timer.timer(1, 2)
File "home/odoo/src/enterprise/18.0/timesheet_grid/models/analytic.py", line 433, in action_start_new_timesheet_timer
timesheet.action_timer_start()
File "home/odoo/src/enterprise/18.0/timesheet_grid/models/analytic.py", line 460, in action_timer_start
super().action_timer_start()
File "home/odoo/src/enterprise/18.0/timer/models/timer_mixin.py", line 86, in action_timer_start
self._stop_timer_in_progress()
File "home/odoo/src/enterprise/18.0/timer/models/timer_mixin.py", line 140, in _stop_timer_in_progress
model = self.env[timer.res_model].browse(timer.res_id)
File "odoo/fields.py", line 1228, in __get__
record.ensure_one()
File "odoo/models.py", line 6196, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
https://github.com/odoo/enterprise/blob/58348c5f9276e5cb4397f0f73d23b41f5a454868/timer/models/timer_mixin.py#L128-L131 When a user quickly presses the ``Enter`` key,
``timer`` will have multiple records,
So, It will lead to the above traceback.
sentry-6557099219
Forward-Port-Of: odoo/enterprise#73984- In the check report, the amount in numbers are now moved leftward so that it is closer to the beginning of the line 4720121 Forward-Port-Of: odoo/enterprise#85342
Original PR description
- In the check report, the amount in numbers are now moved leftward so that it is closer to the beginning of the line 4720121 Forward-Port-Of: odoo/enterprise#85342
Issue: ---------- A user with Sale Manager access is unable to confirm a recurring service type sale order. Root Cause: -------- The Sale Manager lacks write access to task and recurrence records, which are updated during order confirmation. Fix: ------- Used sudo() when updating the recurrence to bypass access restrictions, allowing the Sale Manager to confirm the sale order successfully. Steps to Reproduce: ------------- - Install the project_sale_subscription module
Original PR description
Issue: ---------- A user with Sale Manager access is unable to confirm a recurring service type sale order. Root Cause: -------- The Sale Manager lacks write access to task and recurrence records, which are updated during order confirmation. Fix: ------- Used sudo() when updating the recurrence to bypass access restrictions, allowing the Sale Manager to confirm the sale order successfully. Steps to Reproduce: ------------- - Install the project_sale_subscription module. - Create a user with Sale Manager access only. - Log in as that user and create a subscription-based sale order. - Add a recurring service product to the order line. Forward-Port-Of: odoo/enterprise#85489