Daily updates from Odoo
Navigate
Branch
Tuesday, May 20, 2025
49 changes
24 changes
Enhancements to existing features
Gantt charts now show the date range alongside each week number, making schedules easier to read at a glance. When a week falls in another year, the year is included to avoid confusion across year boundaries.
Original PR description
This commit enhances the display of week group headers in the Gantt view. In addition to the week number (as before), headers now show the week's start and end dates in a short format. If the week belongs to a different year than the current one, the year is also displayed for clarity. task-4613165
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.
Spreadsheet pivot tables now show controls directly in the grid to expand or collapse rows and columns. This makes large pivot reports easier to navigate and review, with added test coverage to ensure collapsed pivot behavior remains reliable.
Original PR description
The pivots now have icons in the grid to collapse/expand the rows and columns. This commit adds some tests for collapsed `odoo_pivot`. Task: [4674387](https://www.odoo.com/web#id=4674387&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
Spreadsheet users can now click a person in the connected users popover to move directly to that collaborator's current location. This makes live collaboration easier by helping team members quickly follow or check what others are working on.
Original PR description
Add a move to user when clicking on an user on the "connected user" popover. task-id: 4607572
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
25 changes
New functionality added to Odoo
This change introduces a shared withholding tax feature that can be reused by country-specific accounting localizations, including support needed for Uruguay withholding workflows. It helps businesses record withholding taxes at payment time more consistently while reducing country-specific custom handling.
Original PR description
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
Enhancements to existing features
Tag fields now show the available tooltip text when users hover over them, making extra context easier to access without changing the main screen. This helps users understand tag meanings or details more quickly in forms and lists.
Original PR description
https://github.com/odoo/enterprise/pull/85591
Resolved issues and error corrections
Restaurant receipt wording is now translated as complete phrases instead of separate fragments, making translations more natural across languages. This also avoids confusion between restaurant tables and spreadsheet tables in translated text.
Original PR description
Do not use t-out/t-esc to build human-readable content. This is basically the same as string concatenation. This commit wraps the entire string in a gettext call to prevent it from being split into several non-reorderable translations. As a lucky side effect, it also creates a separate translation for the word "table" (as in restaurant tables) which won't overlap with the translation for spreadsheet tables. opw-4754410
This update refreshes the spreadsheet engine used in Odoo and fixes several issues affecting formulas, pivot tables, and localized content. Users should see more reliable spreadsheet behavior and faster handling of cell references, especially in larger or formula-heavy sheets.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/8213c0e66 [REL] 18.0.29 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/8213c0e66 [REL] 18.0.29 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/1c0365d55 [PERF] range: faster reference parsing [Task: 4771804](https://www.odoo.com/odoo/2328/tasks/4771804) https://github.com/odoo/o-spreadsheet/commit/24e0b5a9a [PERF] coordinate: faster xc parsing [Task: 4771804](https://www.odoo.com/odoo/2328/tasks/4771804) https://github.com/odoo/o-spreadsheet/commit/85faffbba [FIX] pivot: add `invalid` indicator for wrong calculated measure [Task: 4724069](https://www.odoo.com/odoo/2328/tasks/4724069) https://github.com/odoo/o-spreadsheet/commit/14b2d89ba [FIX] standalone composer: localize content [Task: 4724069](https://www.odoo.com/odoo/2328/tasks/4724069) https://github.com/odoo/o-spreadsheet/commit/ae307391b [IMP] tests: add additional jest matchers [Task: 4724069](https://www.odoo.com/odoo/2328/tasks/4724069) https://github.com/odoo/o-spreadsheet/commit/2600d6804 [FIX] evaluation: fix issue when writing formula on spilled data [Task: 4757650](https://www.odoo.com/odoo/2328/tasks/4757650) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This fix makes an internal stock landed costs test use a reliable ordering method so automated checks no longer fail unpredictably. It helps keep the development pipeline stable without changing business functionality or user workflows.
Original PR description
Issue ===== In the test `test_stock_landed_costs_lots`, there is this `assertRecordValues`: ```python self.assertRecordValues(lc.stock_valuation_layer_ids.sorted('product_id'), [ {'lot_id':…
Issue
=====
In the test `test_stock_landed_costs_lots`, there is this `assertRecordValues`:
```python
self.assertRecordValues(lc.stock_valuation_layer_ids.sorted('product_id'), [
{'lot_id': lot_product_b[0].id, 'product_id': product2.id, 'stock_valuation_layer_id': og_p2_layers[0].id, 'quantity': 0, 'value': 1.5},
{'lot_id': lot_product_b[1].id, 'product_id': product2.id, 'stock_valuation_layer_id': og_p2_layers[1].id, 'quantity': 0, 'value': 1.5},
{'lot_id': lot_product_a[0].id, 'product_id': self.product1.id, 'stock_valuation_layer_id': og_p1_layers[0].id, 'quantity': 0, 'value': 1},
{'lot_id': lot_product_a[1].id, 'product_id': self.product1.id, 'stock_valuation_layer_id': og_p1_layers[1].id, 'quantity': 0, 'value': 1},
{'lot_id': lot_product_a[2].id, 'product_id': self.product1.id, 'stock_valuation_layer_id': og_p1_layers[2].id, 'quantity': 0, 'value': 1},
])
```
This issue is sometime the records order is not the expected one.
Cause of the issue
==================
By doing `recordset.sorted('product_id')`, it will sort the records by compare their `product_id` records, using the python built-in `sorted`. The built-in `sorted` function simply check if record A is lower than record B, using the < operation. But in Odoo, comparing two recordsets is equal than comparing their ids as a `set`:
```python
def __lt__(self, other):
try:
if self._name == other._name:
return set(self._ids) < set(other._ids)
except AttributeError:
pass
return NotImplemented
```
In python, the comparaison between two sets compares is a set is a subset of the other one, which means than:
```python
{1} < {2} # is false
{1} < {2, 1} # is true
```
So, comparing SVLs by their product won't sort them by their product's id. If we want to do that, we have to explicitly do it by passing a function as the `sorted` `key` argument.
For more information, see:
-https://docs.python.org/3/library/functions.html#sorted -https://docs.python.org/3/reference/expressions.html#comparisons
runbot-build-error: 99086Inventory users can now validate inventory adjustments even when their write access to location settings has been removed. This lets businesses better protect warehouse location configuration without disrupting routine stock correction workflows.
Original PR description
PR #210777 Fix the issue for master (18.4) Currently the write access right is given to the inventory user. However some customer want to revoke this access in order to avoid user messing with their location configuration. But it's not possible since it will also raise an access error when validation an inventory adjustement. opw-4782515
Customers can now open their invoice pages even when an early-payment discount date was manually removed. The system safely handles the missing date instead of showing an error, improving reliability for customer self-service invoices.
Original PR description
When manually changing the `discount_date` field to null in an invoice related to a customer with an Early price discount payment term, the customer will face a type error on the website when…
When manually changing the `discount_date` field to null in an invoice related to a customer with an Early price discount payment term, the customer will face a type error on the website when accessing their invoices. **Steps to reproduce:** * Install the accountant module * Create a new invoice for the current user as a customer (e.g., Mitchel Admin). * Set `2/7 Net 30` in payment terms and add any product. * Go to Journal Items and make Discount Date visible if not already visible. * Under the account field `121000 Account Receivable` remove the discount date and confirm the invoice. * Open portal View (/my) and click on Your Invoices >>> Error occurs. `TypeError: unsupported operand type(s) for -: 'bool' and 'datetime.date'` **Solution:** We use if else blocks to check if `discount_date` exists for the `days_left calculation`; if it exists, do the calculation as usual if `discount_date` is in future. Otherwise, set `days_left` to zero and continue the function as usual. Sentry-6395559503 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
DIN5008 formatted reports now show partner and shipping addresses with the same font size. This fixes a visual inconsistency in printed quotations, making customer-facing documents look more polished and uniform.
Original PR description
### Steps to reproduce: - Install "l10n_din5008" - In Settings > Layout, select DIN5008 as the report layout - Create a quotation, print it - The address of the partner and the sipping address have different font size ### Cause: Since this [commit](https://github.com/odoo/odoo/commit/92e4c3cb3bec0b3d5537a50fd441a22fa6509ed1) the partner address is a span which is applied a [`font-size: 0.8em;`](https://github.com/odoo/odoo/blob/f77b40bba0c92a9a225eb7ade694e79cb804f7bf/addons/l10n_din5008/static/src/scss/report_din5008.scss#L51). But not the shipping address. ### Solution: Remove the restriction of `span` to apply the font-size. This way all text in address should have the same font-size. Before:  After:  opw-4725169
Rental availability forecasts now correctly account for product security or preparation time before a rental starts. This prevents stock from appearing available when it is already reserved for an upcoming rental, helping teams avoid overbooking rentable products.
Original PR description
…vailability ### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock and add a `Security Time` of 24 hours. - Create…
…vailability ### Steps to reproduce: - In the settings enable "Rental transfers" - Create a storable product that can be rented put 100 units in stock and add a `Security Time` of 24 hours. - Create a rental order for 10 units of that product planed for the period : [today + 2 days, today + 3 days] and confirm it. - Create a rental order for 10 units of that product planed for the period : [today + 1 days, today + 2 days] and confirm it. - Look at the forecast rentable quantity. #### > It should be 90 but it is 100. ### Cause of the issue: The `preparation_time` (`Security Time`) field is used at the sale order line creation to modify the `reservation_begin` value: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L447-L453 In particular, the `preparation_time` of the product creates a difference between the `order_id.rental_start_date` and the `reservation_begin`. This is porblematic since the `rental_start_date` is used to generate the dates of the deliveries taken into account by the forecast: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L354-L362 but the quantity considered as rented does not and is purely based on the `reservation_begin` of the line: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/product_product.py#L113-L117 In particular, the qunaities are not yet accounted ithe stock forecast by the `virtual_available` value of the product: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L129-L132 But will incorrectly be found and read by the rental forecast: https://github.com/odoo/enterprise/blob/bc3db24f83473d5646f7c2cfca8ed1c5b064ea2e/sale_stock_renting/models/sale_order_line.py#L133-L140 opw-4552760
Duplicating a sales quote now also duplicates its quote calculator spreadsheet, including its saved change history. This prevents the copied quote from reverting to default calculator values and helps sales teams avoid accidentally resetting pricing details.
Original PR description
1. Create a quote using a quote template that uses the quote calculator (e.g. the demo one, works fine), 2. Modify it using the quote calculator, 3. Duplicate it, 4. Open the quote calculator in the new quote -> it's filled with default values instead of the one from the other quote you dpulicated one could expect after duplication (and so if you save without changing anything in the spreadsheet, you 'reset' the quote even though it's probably not what you wanted to do), Expected behaviour: the quote calculator spreadsheet is duplicated for the new quote with the same values. Implementation note: Why not just `copy=True` on field `spreadsheet_ids`? Because the spreadsheet should be copied, but not only! The `spreadsheet.revision` linked to the spreadsheet also need to be copied. If they are not copied, revisions which are not part of the last snapshot will be lost on the new spreadsheet record and it won't lead to the same spreadsheet data. Task: 4801418
The checkout billing address form now correctly shows and requires both Identification Type and Identification Number for Colombian electronic invoicing. This prevents customers from getting stuck in repeated checkout redirects and helps businesses collect the mandatory invoicing details for compliant sales.
Original PR description
Following a discussion with the product owner, it was clarified that in Colombia, customers must provide both an Identification Type and an Identification Number (VAT) for electronic invoicing, as these details are mandatory for all sales. Additionally, for extra billing addresses, the fields should also be visible and required. To address this, all billing addresses in the Colombian localization must include these fields as required. 1. Install the module "l10n_co_edi_website_sale." 2. Change the default company of the current user to a Colombian company and switch to it. 3. Go to the partner record for the user and change the address to a Colombian address. 4. Add a contact as an invoice address with a Colombian address. 5. Go to the shop, add a product to the cart, and click "Go to checkout." 6. On the address page, click "Save address." The page redirects to itself repeatedly. opw-4309448 Forward-Port-Of: odoo/enterprise#77722 Forward-Port-Of: odoo/enterprise#76609
Documentation and clarification updates
This update records a signed contributor agreement for Ricardo-MC. It supports the project’s legal compliance by documenting permission for contributions to be included in Odoo.
Miscellaneous changes
This reverts commit d413a9895742594d064084cd6dafbf1f2ec97221. This fix was decided after https://github.com/odoo/enterprise/pull/74127 that was trying to prevent invoicing users to see accounting features, when it seemed to be unwanted to have the two property accounts fields required while having no CoA installed. The issue is, now when having Accounting installed, we can create a user without having CoA as these two fields are not required anymore, but we end up with a error message when cre
Original PR description
This reverts commit d413a9895742594d064084cd6dafbf1f2ec97221. This fix was decided after https://github.com/odoo/enterprise/pull/74127 that was trying to prevent invoicing users to see accounting…
This reverts commit d413a9895742594d064084cd6dafbf1f2ec97221.
This fix was decided after https://github.com/odoo/enterprise/pull/74127
that was trying to prevent invoicing users to see accounting features,
when it seemed to be unwanted to have the two property accounts fields
required while having no CoA installed.
The issue is, now when having Accounting installed, we can create a user
without having CoA as these two fields are not required anymore, but
we end up with a error message when creating an invoice ('no CoA
installed') although we could be have added accounts manually instead
of installing a CoAi (which is not possible for invoicing user).
In this situation, we should be able to create a contact, and having these
fields required will force the user to create them.
Finally, it is ok to revert the full chain, as the original issue is
fixed by this commit https://github.com/odoo/enterprise/commit/68f6c1f9fd3ff6762c98e1a405ade035129efce0
Forward-Port-Of: odoo/odoo#210344
Forward-Port-Of: odoo/odoo#209832When you settle a sale order that has a payment term, it was always ignored in the PoS. But it should only be ignored when the payment term has an early discount. Steps to reproduce: ------------------- * Create a sale order with a payment term that has no early discount * Go to the PoS and settle the sale order * Invoice and validate the order > Observation: In the backend, the sale order has the payment term applied on the invoice Why the fix: ------------ Some modules needs
Original PR description
When you settle a sale order that has a payment term, it was always ignored in the PoS. But it should only be ignored when the payment term has an early discount. Steps to reproduce: ------------------- * Create a sale order with a payment term that has no early discount * Go to the PoS and settle the sale order * Invoice and validate the order > Observation: In the backend, the sale order has the payment term applied on the invoice Why the fix: ------------ Some modules needs the invoice to have payment terms set (l10n_mx for example). But the PoS invoice was always ignoring it. We should only ignore it if the payment terms has an early discount. opw-4670234 Forward-Port-Of: odoo/odoo#209999 Forward-Port-Of: odoo/odoo#207231
Originally, we compute rules for stock orderpoints based on product_id through `product_id._get_rules_from_location`, however, this function only relies on `product_id.route_ids` or `product_id.categ_id.total_route_ids` which usually don't change a lot per product. This PR leverages this idea that we can simply extend the caching key to include the routes_ids and categ_id.total_route_ids of products so we don't have to calculate the same value twice. For products without route_ids, it simply
Original PR description
Originally, we compute rules for stock orderpoints based on product_id through `product_id._get_rules_from_location`, however, this function only relies on `product_id.route_ids` or `product_id.categ_id.total_route_ids` which usually don't change a lot per product. This PR leverages this idea that we can simply extend the caching key to include the routes_ids and categ_id.total_route_ids of products so we don't have to calculate the same value twice. For products without route_ids, it simply falls back to the original cache key. Benchmarks |Num. orderpoints| Before PR | After PR | |---------------------|---------------|--------------| |5636| 56.2 s| 39.5 s| opw-4649249 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202365
**[FIX] web_editor, website: prevent snippet tabs nav items removal** Steps to reproduce: 1. Go to Website edit mode. 2. Add a "Tabs" block. 3. Double-click a tab title to select it. 4. Start typing a new title. :white_check_mark: Expected: The tab title is replaced with the new text. :x: Actual: The tab is deleted and merged with the next one. This commit fixes the bug by preventing the deletion of elements with the `data-bs-toggle: 'tab'` attribute. These are clearly not eleme
Original PR description
**[FIX] web_editor, website: prevent snippet tabs nav items removal** Steps to reproduce: 1. Go to Website edit mode. 2. Add a "Tabs" block. 3. Double-click a tab title to select it. 4. Start typing a new title. :white_check_mark: Expected: The tab title is replaced with the new text. :x: Actual: The tab is deleted and merged with the next one. This commit fixes the bug by preventing the deletion of elements with the `data-bs-toggle: 'tab'` attribute. These are clearly not elements that an user should ever be allowed to delete. This commit also adds a test for the "Tab" snippet to prevent the bug from coming back. It also covers other flows that were previously known to be buggy in the "Tabs" snippet. opw-4791238 Forward-Port-Of: odoo/odoo#210187 Forward-Port-Of: odoo/odoo#209935
Versions -------- - 17.0+ Steps ----- 1. Create a coupon that grants a discount; 2. add a second reward giving free products; 3. use a product tag to turn it into a multiproduct reward; 4. save program, generate coupons, and copy a code; 5. add the free product tag to two or more products; 6. go to eCommerce; 7. add any product to cart and go to checkout; 8. apply coupon code; 9. claim a reward. Issue ----- - Claiming a free product results in a traceback. - Claiming the dis
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Create a coupon that grants a discount; 2. add a second reward giving free products; 3. use a product tag to turn it into a multiproduct reward; 4. save…
Versions -------- - 17.0+ Steps ----- 1. Create a coupon that grants a discount; 2. add a second reward giving free products; 3. use a product tag to turn it into a multiproduct reward; 4. save program, generate coupons, and copy a code; 5. add the free product tag to two or more products; 6. go to eCommerce; 7. add any product to cart and go to checkout; 8. apply coupon code; 9. claim a reward. Issue ----- - Claiming a free product results in a traceback. - Claiming the discount does not apply the discount. Cause ----- Commit db3ffae3ef5a5 modified the reward claiming logic to allow for multiproduct rewards, but overlooked the possibility of the program having multiple rewards, multiproduct being one of them. It therefore passes all of the coupon's rewards to `_apply_reward`, which only expects a single reward. This is also a consequence of commit 6525d5fba40c, which moved part of the `claim_reward` logic to `pricelist`, without passing which reward was claimed to `pricelist`. Solution -------- Add an optional `reward_id` parameter to `pricelist`, letting it know which reward we intend to claim. opw-4778945 Forward-Port-Of: odoo/odoo#210214 Forward-Port-Of: odoo/odoo#209610
**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
The `subscribe to known partner presences` test ensures that a bus subscription is sent when discovering a new partner whose presence needs tracking. However, the test triggers a channel join, which itself causes a bus subscription. Since both `add_channel` and `force_update_channels` are debounced, the outcome depends on which one executes first. As a result, `force_update_channels` may or may not include the newly added channel, making the test non-deterministic. In practice, this doesn'
Original PR description
The `subscribe to known partner presences` test ensures that a bus subscription is sent when discovering a new partner whose presence needs tracking. However, the test triggers a channel join, which itself causes a bus subscription. Since both `add_channel` and `force_update_channels` are debounced, the outcome depends on which one executes first. As a result, `force_update_channels` may or may not include the newly added channel, making the test non-deterministic. In practice, this doesn't matter: if `force_update_channels` omits the new channel, `add_channel` will later update the subscription as needed. This commit resolves the issue by ignoring `force_update_channels` in the test, since it's irrelevant in this context. fixes runbot-161223,182043,182044 Forward-Port-Of: odoo/odoo#210534
Steps to reproduce: - Install Stock and Field Service apps. - Create a product that tracks inventory by lot. - Add some on-hand quantity with a created lot. - In Field Service, create a task with `under_warranty` checked. - Add the created product to the task. Issue: - A sale order is generated with order lines at the product's price. - The price should be 0 since the customer should not be charged. Fix: - Ensure the sale order line price is set to 0 when `under_warranty` is checke
Original PR description
Steps to reproduce: - Install Stock and Field Service apps. - Create a product that tracks inventory by lot. - Add some on-hand quantity with a created lot. - In Field Service, create a task with `under_warranty` checked. - Add the created product to the task. Issue: - A sale order is generated with order lines at the product's price. - The price should be 0 since the customer should not be charged. Fix: - Ensure the sale order line price is set to 0 when `under_warranty` is checked in the _generate_lot() which is called on adding product tracked by lot. opw-4648542 opw-4646960 Forward-Port-Of: odoo/enterprise#82341
Currently, entering only spaces in the Full Name field when signing in auto mode enables the sign button, allowing users to proceed without a valid name. Steps to reproduce: 1. Sign > Create a request 2. Attempt to sign in auto mode with only spaces in the Full Name field 3. Observe that the sign button becomes enabled Cause: The system does not checks for whitespace-only name Solution: Add a validation to disable the sign button if the trimmed name is empty in auto mode. opw-462
Original PR description
Currently, entering only spaces in the Full Name field when signing in auto mode enables the sign button, allowing users to proceed without a valid name. Steps to reproduce: 1. Sign > Create a request 2. Attempt to sign in auto mode with only spaces in the Full Name field 3. Observe that the sign button becomes enabled Cause: The system does not checks for whitespace-only name Solution: Add a validation to disable the sign button if the trimmed name is empty in auto mode. opw-4628577 Forward-Port-Of: odoo/enterprise#85694 Forward-Port-Of: odoo/enterprise#84613
The xsd changed. Now the rounding needs to be to 2 decimals everywhere. The official xsd does not mention it, but the field submit_more must appear on the xml. Also, while it's not blocking directly, the declaration will be rejected if the special deduction is filled without specifying the special %age. So we add a banner warning the user of it. opw-4789154 Forward-Port-Of: odoo/enterprise#85593 Forward-Port-Of: odoo/enterprise#85464
Original PR description
The xsd changed. Now the rounding needs to be to 2 decimals everywhere. The official xsd does not mention it, but the field submit_more must appear on the xml. Also, while it's not blocking directly, the declaration will be rejected if the special deduction is filled without specifying the special %age. So we add a banner warning the user of it. opw-4789154 Forward-Port-Of: odoo/enterprise#85593 Forward-Port-Of: odoo/enterprise#85464
How to reproduce: - Install document in v17.0 with demo data - In the kanban view, upload an image in Marketing folder - The image is displayed as thumbnail in the kanban card - Upgrade to saas-17.4 - Open Document and go to marketing folder There is no thumbnail for the uploaded image. In v17, _compute_thumbnail_status write a False status when the thumbnail is updated because when it is trigerred the attachment is not yet created. So the thumbnail is present but its status is inco
Original PR description
How to reproduce: - Install document in v17.0 with demo data - In the kanban view, upload an image in Marketing folder - The image is displayed as thumbnail in the kanban card - Upgrade to saas-17.4…
How to reproduce: - Install document in v17.0 with demo data - In the kanban view, upload an image in Marketing folder - The image is displayed as thumbnail in the kanban card - Upgrade to saas-17.4 - Open Document and go to marketing folder There is no thumbnail for the uploaded image. In v17, _compute_thumbnail_status write a False status when the thumbnail is updated because when it is trigerred the attachment is not yet created. So the thumbnail is present but its status is incorrect. It works in v17 because the status is ignored by the view for images but in v17.4, the status is not ignored and the thumbnail is then not displayed. This temporary fix allows already migrated user to see thumbnail (as the view could not be modified in stable without an upgrade). We force the status of the thumbnail to "present" when there is no status for a thumbnail of an image which should cover the case where the status was not updated after the thumbnail creation. We have chosen this solution as the thumbnail will be updated in the upgrade and the URL returns anyway a placeholder image if the image is not present. We modify some tests to check that the patch is applied. As the kanban test data includes an image with a False status, the patch turns automatically the status to "present". So instead of having the generic mime type thumbnail, we get the actual thumbnail of the image. We change the assertions accordingly to test the new behavior and test the generic mime type thumbnail in the pdf case of the test "document inspector: document preview". Task-4642866 Forward-Port-Of: odoo/enterprise#81558
**Steps to reproduce:** - Install Planning app - Set the type of view to Gantt - (Create a shift if there is none) - Click on `Publish` button - The period end date doesn't take the last day into account (time is 00:00) **Issue:** Gantt model default `_buildMetaData` computation behavior was changed multiple times during previous refactoring: Previously used: ``` export function computeRange(scale, date) { let start = date; let end = date; if (scale === "week") {
Original PR description
**Steps to reproduce:** - Install Planning app - Set the type of view to Gantt - (Create a shift if there is none) - Click on `Publish` button - The period end date doesn't take the last day into…
**Steps to reproduce:**
- Install Planning app
- Set the type of view to Gantt
- (Create a shift if there is none)
- Click on `Publish` button
- The period end date doesn't take the last day into account (time is 00:00)
**Issue:**
Gantt model default `_buildMetaData` computation behavior was changed multiple times during previous refactoring:
Previously used:
```
export function computeRange(scale, date) {
let start = date;
let end = date;
if (scale === "week") {
// startOf("week") does not depend on locale and will always give the
// "Monday" of the week... (ISO standard)
const { weekStart } = localization;
const weekday = start.weekday < weekStart ? weekStart - 7 : weekStart;
start = start.set({ weekday }).startOf("day");
end = start.plus({ weeks: 1, days: -1 }).endOf("day");
} else {
start = start.startOf(scale);
end = end.endOf(scale);
}
return { start, end };
}
```
Which became:
```
export function getRangeFromDate(rangeId, date) {
const startDate = localStartOf(date, rangeId);
const stopDate = startDate.plus({ [rangeId]: 1 }).minus({ day: 1 });
return { focusDate: date, startDate, stopDate, rangeId };
}
```
**Fix:**
Added `localStartOf` function in the context setup of PlanningGanttModel.
To avoid overwriting current changes for other modules (which could be intended), this was done instead of :
```
export function getRangeFromDate(rangeId, date) {
const startDate = localStartOf(date, rangeId);
const stopDate = localEndOf(startDate, rangeId);
return { focusDate: date, startDate, stopDate, rangeId };
}
```
related commits:
https://github.com/odoo/enterprise/commit/d18639785e622d97102227103d62ddb3a2716be6 https://github.com/odoo/enterprise/commit/c175a848369057cc69596737dcd9d21dd24c9d5c
opw-4580458
Forward-Port-Of: odoo/enterprise#85608**Steps to reproduce:** 1. Install `website_sale_renting` 2. Go to the website editor. 3. Drag and drop the `rental search` snippet. 4. Set the rental timing to `hour` **Issue:** - The default date was always set to the next day with the current time, making it impossible for users to select the current date without adjusting the time manually. https://github.com/odoo/enterprise/blob/a6ec35e94bdd4f721982c32716f716948f74c875/website_sale_renting/static/src/js/website_sale_renting_dateran
Original PR description
**Steps to reproduce:** 1. Install `website_sale_renting` 2. Go to the website editor. 3. Drag and drop the `rental search` snippet. 4. Set the rental timing to `hour` **Issue:** - The default date was always set to the next day with the current time, making it impossible for users to select the current date without adjusting the time manually. https://github.com/odoo/enterprise/blob/a6ec35e94bdd4f721982c32716f716948f74c875/website_sale_renting/static/src/js/website_sale_renting_daterangepicker.js#L147-L148 **Solution:** - Updated the logic for hourly rentals to set the default date next day with adding one hour from the current time, to allow customers to select the current date. - For daily rentals, the logic remains unchanged and defaults to the next day. opw-4770823 Forward-Port-Of: odoo/enterprise#85613