Tuesday, May 20, 2025
21 changes · master
Enhancements to existing features
The SMS-related test coverage was adjusted to account for a new record lock added during message sending. This helps keep automated checks reliable and protects business workflows from false failures as the messaging process becomes more robust.
Original PR description
A lock on the record is added by the send function.
The WhatsApp module was updated to stay aligned with a related messaging infrastructure rename. This helps keep WhatsApp-related status, member list, and security behavior working consistently after the underlying change.
Original PR description
PR community: https://github.com/odoo/odoo/pull/208544 task-4675778
This update aligns WhatsApp test data with the current partner-based recipient field naming. It helps keep automated security tests accurate and easier to maintain, with no expected impact on everyday users.
Original PR description
PR community: https://github.com/odoo/odoo/pull/208412 task-4675786
Resolved issues and error corrections
This update prevents Belgian tax report forms from failing when no partner is selected, improving reliability during form edits. It also removes a temporary rental workaround because the underlying issue has been fixed elsewhere, keeping rental behavior aligned with the main system.
Original PR description
In the community PR, onchange has been fixed to legitimely recompute more fields. Fix _compute_partner_address() to manage empty partner_id (issue discovered by the new test of all Form). #### [REV] sale_renting: revert of 01149e9fd550bcf8c3f18ba90339cf4bd659e247 Revert since the root cause has been solved in the community version. (keep the test for now but update the comment). https://github.com/odoo/odoo/pull/209587
Code cleanup and technical improvements
The Chilean electronic invoicing email retrieval process was aligned with recent platform changes. This improves error handling when fetching emails, reducing the chance that one problem interrupts broader processing.
Original PR description
Align the function `_fetch_mail` with the refactoring in the community repository. We add a savepoint to handle errors properly. Note: this does not implement the progress notification for cron jobs as we do not know the global state here, the recommendation is to move the processing of e-mails to `message_process` as we now handle the case where there is a lot of new e-mails on an IMAP server. odoo/odoo#191911
Miscellaneous changes
…line are postpaid Forward-Port-Of: odoo/enterprise#85644 Forward-Port-Of: odoo/enterprise#73731
Original PR description
…line are postpaid Forward-Port-Of: odoo/enterprise#85644 Forward-Port-Of: odoo/enterprise#73731
After ELM Certification, monthly summary was not properly adapted for the two available aggregation modes Forward-Port-Of: odoo/enterprise#85754 Forward-Port-Of: odoo/enterprise#85287
Original PR description
After ELM Certification, monthly summary was not properly adapted for the two available aggregation modes Forward-Port-Of: odoo/enterprise#85754 Forward-Port-Of: odoo/enterprise#85287
Since https://github.com/odoo/enterprise/pull/81766 the itsme dialog was not working anymore. Some methods have been moved from SignablePDFIframe to the Document component. As a result, some overrides were not called anymore. taskid: 4770756 Forward-Port-Of: odoo/enterprise#84738
Original PR description
Since https://github.com/odoo/enterprise/pull/81766 the itsme dialog was not working anymore. Some methods have been moved from SignablePDFIframe to the Document component. As a result, some overrides were not called anymore. taskid: 4770756 Forward-Port-Of: odoo/enterprise#84738
Steps to print the check: 1. Ensure l10n_us_check_printing is installed 2. Set the check layout to Print Check (Middle) - US in the settings 3. Create a PO and a bill from it. 4. Create a payment for the bill using checks as your payment method 5. Click Print Check on the payment The printed check will now match the format and alignment of the templates used [here](https://checkdepot.net/collections/odoo-checks?_pos=1&_psq=odoo&_ss=e&_v=1.0). Additionally, the check will now avoid printi
Original PR description
Steps to print the check: 1. Ensure l10n_us_check_printing is installed 2. Set the check layout to Print Check (Middle) - US in the settings 3. Create a PO and a bill from it. 4. Create a payment for…
Steps to print the check: 1. Ensure l10n_us_check_printing is installed 2. Set the check layout to Print Check (Middle) - US in the settings 3. Create a PO and a bill from it. 4. Create a payment for the bill using checks as your payment method 5. Click Print Check on the payment The printed check will now match the format and alignment of the templates used [here](https://checkdepot.net/collections/odoo-checks?_pos=1&_psq=odoo&_ss=e&_v=1.0). Additionally, the check will now avoid printing the issuing company name on the stubs when the manual numbering setting on the bank journal is switched off. This assumes that the checks are preprinted with the company name and check number. Before the fix, the checks printed the vendor's name in the stubs, and the date alignment in the (middle) format overlapped with the check number. After the fix, the checks are aligned with the expected format and conditionally render the correct fields in the document's intended areas. opw-4557006 opw-4738359 odoo PR: https://github.com/odoo/odoo/pull/208357 Forward-Port-Of: odoo/enterprise#85578 Forward-Port-Of: odoo/enterprise#84644
This commit fixes the issue brought by the forward-port PR https://github.com/odoo/enterprise/pull/83866 The field `uom_po_id` used has been removed in version 18.1 and replaced by `uom_id`. task-4751991 Forward-Port-Of: odoo/enterprise#84102
Original PR description
This commit fixes the issue brought by the forward-port PR https://github.com/odoo/enterprise/pull/83866 The field `uom_po_id` used has been removed in version 18.1 and replaced by `uom_id`. task-4751991 Forward-Port-Of: odoo/enterprise#84102
Issue 1: === Steps to reproduce: ------- - Install `pos_restaurant`. - Open a restaurant session and the preparation display. - Open any table and add two combo items. - Press the order button and go to the preparation display. Issue: ------- - The combo items do not appear, and the stage cannot be changed. Cause: ------- - The combo parent order line does not have an `id`. - Since there are two combo parents, the `t-foreach` encounters multiple lines with the same `undefined`
Original PR description
Issue 1: === Steps to reproduce: ------- - Install `pos_restaurant`. - Open a restaurant session and the preparation display. - Open any table and add two combo items. - Press the order button and go…
Issue 1: === Steps to reproduce: ------- - Install `pos_restaurant`. - Open a restaurant session and the preparation display. - Open any table and add two combo items. - Press the order button and go to the preparation display. Issue: ------- - The combo items do not appear, and the stage cannot be changed. Cause: ------- - The combo parent order line does not have an `id`. - Since there are two combo parents, the `t-foreach` encounters multiple lines with the same `undefined` id. Fix: ------- - Use `orderline_index` instead of `orderline.id`.. Issue 2: === Steps to reproduce: ------- - Install `pos_restaurant`. - Open a restaurant session and the preparation display. - Open any table and add an order line. - Press the order button so the line appears in the preparation display. - Remove the line and press order again to cancel it. - Go to the preparation display. - Click on the cancelled order line. - A traceback appears. Issue: ------- - You are unable to strike out the cancelled order line. Cause: ------- - When all quantities of a prep line are cancelled, there are no corresponding `pos_order_line_id` available. - The code attempts to compute `order_completion_seconds` using `max()` on an empty list, which raises a `ValueError`. Fix: ------- - Added a guard condition to ensure `completion_time` is only computed when there is `pos_order_line_id`. - This prevents calling `max()` on an empty sequence and avoids the traceback when clicking cancelled lines in the preparation display. Task: 4800284 Forward-Port-Of: odoo/enterprise#85698
## 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#85813
Forward-Port-Of: odoo/enterprise#85314In the Italian balance sheet, the section for “d-bis. Other enterprises” is not added to the calculation for the section “1. Holdings in:”. As a result, it is not included in the calculation for assets in the balance sheet. This commit adds the section “d-bis. Other enterprises” to the calculation of “1. Holdings in”. This specification is based on Article 2424(1) of the Italian Civil Code: https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:regio.decreto:1942-03-16;262 Steps to Repro
Original PR description
In the Italian balance sheet, the section for “d-bis. Other enterprises” is not added to the calculation for the section “1. Holdings in:”. As a result, it is not included in the calculation for assets in the balance sheet. This commit adds the section “d-bis. Other enterprises” to the calculation of “1. Holdings in”. This specification is based on Article 2424(1) of the Italian Civil Code: https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:regio.decreto:1942-03-16;262 Steps to Reproduce on Runbot: 1. Install l10n_it_reports 2. Create an account starting with 1306 3. Create a journal entry using account 1306 as the debit line and balance it with a credit line 4. Check the Italian balance sheet and notice that “d-bis. Other enterprises” is not included in the calculation for assets in the Italian balance sheet Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4763868) opw-4763868 Forward-Port-Of: odoo/enterprise#84586
This commit will replace some occurrence of the balance for the amount residual and amount currency for the amount residual currency. In this example: Invoice of 100$ A first statement line of 20 A second statement line of 100 We do the reconciliation between the invoice and the first statement line. The invoice will be partially reconciled. Before this commit since we used the balance we wouldn't take this reconciliation into account when doing the reconciliation between the remainin
Original PR description
This commit will replace some occurrence of the balance for the amount residual and amount currency for the amount residual currency. In this example: Invoice of 100$ A first statement line of 20 A second statement line of 100 We do the reconciliation between the invoice and the first statement line. The invoice will be partially reconciled. Before this commit since we used the balance we wouldn't take this reconciliation into account when doing the reconciliation between the remaining amount of the invoice and the second statement line. no task id Forward-Port-Of: odoo/enterprise#85118
The overhaul of html editor into knowledge introduced an issue involving the auto-vaccuum. This commit https://github.com/odoo/enterprise/commit/08d84f8b61450a0ebd0d2aadfe8f227bda283edd passes the res_id value of the currently existing knowledge.cover record. However, when we set a new cover image, we will always create a new cover record and the new cover image attachments are linked to the previous cover record. The auto-vaccuum then deletes unused cover images and any attachments linked,
Original PR description
The overhaul of html editor into knowledge introduced an issue involving the auto-vaccuum. This commit https://github.com/odoo/enterprise/commit/08d84f8b61450a0ebd0d2aadfe8f227bda283edd passes the res_id value of the currently existing knowledge.cover record. However, when we set a new cover image, we will always create a new cover record and the new cover image attachments are linked to the previous cover record. The auto-vaccuum then deletes unused cover images and any attachments linked, which will delete the actual cover image. The web_unsplash/attachment/add does not need to pass in a res_id of the cover image since we always create a new record at the end of the workflow. opw-4629300 Forward-Port-Of: odoo/enterprise#85549
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#73984This commit removes the useless big space between the entered phone number and the list of suggestions in the calee suggestions tab. ## Before  ## After  Forward-Port-Of: odoo/enterprise#85705
Original PR description
This commit removes the useless big space between the entered phone number and the list of suggestions in the calee suggestions tab. ## Before  ## After  Forward-Port-Of: odoo/enterprise#85705
- 18.0 **Steps to Reproduce:** - Create a subscription with a custom end date (e.g., 2025-04-09). - Manually generate an invoice covering a specific period (e.g., March 10 to April 9). - Wait until after the end date has passed (e.g., run expiration cron on 10 April or later). - The expiration cron triggers and overwrites the manually set end_date with the current date **Issue:** - The expiration cron overrides the existing end_date of the subscription. **Cause:** - The _get_c
Original PR description
- 18.0 **Steps to Reproduce:** - Create a subscription with a custom end date (e.g., 2025-04-09). - Manually generate an invoice covering a specific period (e.g., March 10 to April 9). - Wait until after the end date has passed (e.g., run expiration cron on 10 April or later). - The expiration cron triggers and overwrites the manually set end_date with the current date **Issue:** - The expiration cron overrides the existing end_date of the subscription. **Cause:** - The _get_closing_end_date method sets the end_date unconditionally during closure, even when an end_date is already defined. **Solution:** - Update the _get_closing_end_date logic to return the existing end_date if it is already set and valid, preventing it from being overridden when called by the expiration cron. task-4703577 Forward-Port-Of: odoo/enterprise#85465 Forward-Port-Of: odoo/enterprise#84475
**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#85195 Forward-Port-Of: odoo/enterprise#77422
Purpose ======= Fix the missing action buttons when: - uploading files - doing a select all using CTRL+A Specification ============= The showActions method is responsible for the display of the different action buttons. The actions are currently shown only if the right panel doesn't have any previewed document and no focused document or a focused document which is selected. When uploading files, the uploaded documents are selected but there is no focused document meaning the action
Original PR description
Purpose ======= Fix the missing action buttons when: - uploading files - doing a select all using CTRL+A Specification ============= The showActions method is responsible for the display of the…
Purpose ======= Fix the missing action buttons when: - uploading files - doing a select all using CTRL+A Specification ============= The showActions method is responsible for the display of the different action buttons. The actions are currently shown only if the right panel doesn't have any previewed document and no focused document or a focused document which is selected. When uploading files, the uploaded documents are selected but there is no focused document meaning the action buttons are hidden. Fixing that by focusing the first uploaded document when all the uploaded documents have been selected. When selecting all the documents using CTRL+A, the records are also selected but there could be no focused document or it could be out of the selection meaning the action buttons are hidden. Fixing the issue by making sure that, in those cases, the focused document is the first of the selection. related commit: odoo/enterprise@d6d3d3fd07c6174bd8c5a84a420876415f2b271a Task-4737797 Forward-Port-Of: odoo/enterprise#84513
**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 produc
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 Forward-Port-Of: odoo/enterprise#84669