Daily updates from Odoo
Wednesday, August 6, 2025
38 changes · saas-18.4
Resolved issues and error corrections
Payment receipt PDFs now show the real foreign-currency payment amount after reconciliation. This prevents misleading receipts, such as showing 100 Bs instead of 10,000 Bs when a foreign-currency payment settles a company-currency invoice.
Original PR description
**Steps to reproduce**: 1. Install the `accounting` module. 2. Activate a foreign currency form `Accounting -> Configuration -> Currencies` and fetch its exchange rate. <img width="599" height="267"…
**Steps to reproduce**: 1. Install the `accounting` module. 2. Activate a foreign currency form `Accounting -> Configuration -> Currencies` and fetch its exchange rate. <img width="599" height="267" alt="image" src="https://github.com/user-attachments/assets/34e7c719-20f7-4cd0-a1d6-0e94764461ba" /> 3. Create an invoice using the company’s default currency (e.g., USD). 4. Register a payment using the foreign currency (e.g., VES). 5. Reconcile the payment with the invoice. 6. Print the payment receipt PDF. **Observations**: In the printed PDF, under the `Amount In Currency` column, the amount is incorrectly displayed. For example, suppose `1 USD` = `100 VES`. - An invoice of `100 USD` is created. - A payment of `10,000 Bs` is registered (equivalent to 100 USD). - When the payment receipt is printed, the output appears as: ``` | Invoice Number | Reference | Amount In Currency | Amount | |--------------------|-------------------|--------------------|-------------| | INV/2025/00001 | | | 100.00 USD | | PBNK1/2025/00001 | INV/2025/00001 | -100.00 Bs | -100.00 USD | ``` Here, the `Amount In Currency` for the payment line shows **100 Bs** instead of the correct **10,000 Bs**. **Issue**: The payment receipt uses the `_get_reconciled_invoices_partials()` method to fetch details about reconciled invoices. However, the report incorrectly uses the `amount` field (in company currency) for the `Amount In Currency` column, leading to this mismatch. **Solution**: The report now uses `(debit/credit)_amount_currency` instead of `amount` to correctly reflect the foreign currency values in the `Amount In Currency` column. opw-4898706 Forward-Port-Of: odoo/odoo#221964 Forward-Port-Of: odoo/odoo#219439
This update fixes two web editor problems that could disrupt content editing: pasted list items now keep a correct structure, and bold or italic formatting can be removed even when selected text includes line breaks. This makes editing pasted content more reliable and reduces cleanup work for users.
Original PR description
**Current behavior before PR:** **Issue 1:** - Paste a content with multiple `<li>` elements without `ol/ul` tag, each `<li>` having a paragraph element inside. - Try to create a list from these…
**Current behavior before PR:** **Issue 1:** - Paste a content with multiple `<li>` elements without `ol/ul` tag, each `<li>` having a paragraph element inside. - Try to create a list from these elements. - List is created with wrong element structure. The problem occurs because when pasting multiple `<li>` elements without an `<ol>/<ul>` tag, `sanitizeNode` replaces existing `<li>` elements with new `<p>` elements. Since each `<li>` already contains a `<p>`, this results in paragraphs being nested inside other paragraphs. As a result, creating the list from these paragraphs leads to an incorrect structure. **Issue 2:** If there are multiple paragraph selected along with newline character nodes `(\n)`, it is not possible to remove bold or italic format from selected content using toolbar. The issue happens because `isSelectionFormat` method fails to give correct value if traversed nodes contains one or more newline `(\n)` characters. **Desired behavior after PR is merged:** **Issue 1:** Now, if an `<li>` contains a `<p>`, the `<li>` is unwrapped instead of creating a new paragraph, resulting in a correct element structure when creating a list. **Issue 2:** Now, `\n` nodes are filtered from traversed nodes so that format can be removed from selected content. task-4752385 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219461 Forward-Port-Of: odoo/odoo#208127
This fix ensures that when users duplicate a pivot table in a spreadsheet, any matching global filters remain applied to the copy. This prevents duplicated reports from showing unfiltered or misleading data and keeps spreadsheet analysis consistent.
Original PR description
Steps to reproduce: - insert a pivot in a spreadsheet - create a global filter matching one of the pivot fields - use the global filter to restrict the values - duplicate the pivot => the filter is not applied on the duplicated pivot Task:4966634 opw-4950469 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220996 Forward-Port-Of: odoo/odoo#220588
The invoicing dashboard now uses customer credit notes, rather than vendor credit notes, when calculating key sales views such as top countries, categories, products, and salespeople. It also excludes draft and cancelled entries from Top Invoices, making dashboard figures and drill-downs more accurate for business reporting.
Original PR description
Problem:- In Invoicing Dashboard, in some parts we get wrong values because of wrongly set domain making dashboard consider Vendor Credit Note instead of Customer Credit Note. Before this commit:- - In Invoicing Dashboard, reports Top Countries, Top Categories, Top Products, and Top Salespeople considers Customer Invoice and Vendor Credit Note. - When clicked on Top Invoices, moves in draft and cancel state are also displayed. After this commit:- - In Invoicing Dashboard, reports Top Countries, Top Categories, Top Products, and Top Salespeople considers Customer Invoice and Customer Credit Note only. - When clicked on Top Invoices, moves in draft and cancel state are not displayed. task-4851920 Forward-Port-Of: odoo/odoo#222004 Forward-Port-Of: odoo/odoo#213723
The messaging menu now shows the right helper message when a quick search returns no conversations. This prevents users from seeing conflicting messages and makes it clearer whether there are no search results or no conversations at all.
Original PR description
**Steps to reproduce:** - Open the messaging menu with 20+ threads (quick search btn shows on 20+ threads) - Dismiss (or install) the 'Install Odoo' notification - Dismiss (or allow) the 'Turn on notifications' notification - Use quick search to look for a thread that doesn't exist => Both 'No thread found.' and 'No conversation yet...' messages are displayed This happens due to an incorrectly handled condition. This PR ensures only the relevant message is shown: - 'No thread found.' is displayed when the search yields no results. - 'No conversation yet...' is shown only when the user has no threads at all. <img width="565" height="279" alt="image" src="https://github.com/user-attachments/assets/689bc007-dfb4-4041-8543-18bc4ad2e19d" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221878
This fixes an issue where website editors could accidentally edit the shop sorting control and trigger an error when saving the page. The sorting display remains visible, but is no longer editable in the website editor, preventing save failures for shop pages.
Original PR description
Step to reproduce: - install website_sale - open website -> shop page - open editor, by clicking on `Edit` from right corner observation: - you are now able to edit sort by element - on saving, traceback is received. Issue: After odoo/odoo@9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 , we know make every t-field [editable](https://github.com/odoo/odoo/blob/saas-18.4/addons/html_builder/static/src/core/setup_editor_plugin.js#L23-L36), from `SetupEditorPlugin.setup()` when editing a website. This makes `shop_default_sort` field editable, (which is a sequence field) and tries to update its name/value from `ir.qweb.field.selection()` ,raising traceback on save() Fix: Use t-out instead of t-field, to prevent it from being editable opw-4937025 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now chooses the correct Paymob payment method when multiple options share the same gateway type. This helps merchants avoid enabling outdated or unsupported Paymob methods, especially for card payments that should exclude MOTO or authorization-only integrations.
Original PR description
Paymob allows for multiple payment methods to have the same gateway type Which one should be enabled on Odoo is determined based on: 1. The most recently created payment method on the user's paymob account 2. For card: Exclude Integration IDs where integration_type = 'moto' or is_auth = true. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A small issue in Odoo's shared date utilities was fixed so time values are converted correctly. This helps prevent incorrect duration calculations in features that rely on this common helper.
Original PR description
'time_to_float' method in the date utils is using 'time' to make its computation but 'time' is actually the type of the parameter (datetime.time). Using the actual duration parameter. related PR: odoo/odoo#207882 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures a base system view test is included when localization-specific tests run on their own. It helps catch localization-related issues earlier, reducing the risk of nightly build failures after changes are merged.
Original PR description
This test is not run during the l10n standalone tests leading to error in nightly that are not detected before the merge. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219473 Forward-Port-Of: odoo/odoo#219376
The Profiling screen no longer allows creating new profiling records that could generate broken Open links before being saved. This prevents users from hitting an error when clicking a profiling report link on an unsaved record.
Original PR description
Currently, the speedscope URL is generates even for unsaved records and clicking this URL resulted in an error. **Steps to reproduce:** - Open Profiling. - Create new Ir Profile. - Without saving the record, click on the speedscope URL in the 'Open' field. **Error:** `ValueError - invalid literal for int() with base 10: 'NewId_0x789d07a57b80'` **Cause:** The `speedscope_url` compute method [1] generated the URL using a temporary `NewId`. When this URL was accessed, the controller [2] attempted to process it as an integer, which resulted in the error. **Fix:** This fix prevents the creation of new `ir.profile` records. [1] - https://github.com/odoo/odoo/blob/679d99b8bd233a1046e3219ddb3e23e8465f6107/odoo/addons/base/models/ir_profile.py#L109-L112 [2] - https://github.com/odoo/odoo/blob/679d99b8bd233a1046e3219ddb3e23e8465f6107/addons/web/controllers/profiling.py#L33 sentry-6753780250
Products received from purchase orders with a 100% discount are now valued at zero instead of using their standard cost. This prevents overstated inventory value and keeps accounting aligned with the actual purchase price.
Original PR description
**Current behavior:** Receiving some real-time valuated, non-standard cost product from an order with 100% discount will value the product at its `standard_price`. **Expected behavior:** Valuated at 0. **Steps to reproduce:** 1 Create an average cost, real-time valuated product with non-zero `standard_price` 2. Create a purchase order for some of the avco product, confirm and receive 3. Create and post the bill -> check valuation from inventory **Cause of the issue:** Currently from 6ba1106ae we will ignore a 100% discount in calculating `_get_gross_unit_price()`. **Fix:** Return 0 in this method if we are in a 100% discount case. opw-4862883 Forward-Port-Of: odoo/odoo#220998 Forward-Port-Of: odoo/odoo#217726
The editor now properly clears empty nested content blocks that could previously remain after users deleted their content. This prevents leftover invisible structure from interfering with editing features and keeps pages cleaner after content removal.
Original PR description
Problem: In some cases, content with nested `div` elements is added to the editor. These `div`s can break certain editor features and cannot be deleted through the UI. Solution: Add support to remove empty `div` elements when clearing content. Steps to reproduce: - Add `<div><div>abc</div></div>` to the editor - Focus inside and remove all content - The `div` elements remain and are not removed opw-4805901 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix restores the missing keypad dropdown in the point-of-sale self-ordering flow. It ensures staff or customers can access the expected numeric input options again, avoiding confusion during order entry.
Original PR description
The forwardport https://github.com/odoo/odoo/commit/621bc2ed48ce4e2486f1604fdfe4d85cc4dc179b introduced a `t-if=!isEditMode` that was making the latest `t-else` statement never reached, thus making `NumpadDropdown` never displayed. Therefore, we simply remove the t-if statement and adjust the xpath inherit to place the `QrOrderButton` just before the `NumpadDropdown` button Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221642
The website editor now hides the irrelevant theme color tab when configuring the map color filter. This reduces confusion and helps users choose the appropriate custom or gradient color settings for map styling.
Original PR description
The "theme" tab does not make any sense with the color filter option since it will generally apply an opaque color. Only the custom and gradient tabs are relevant. This commit removes this tab for the s_map color filter option. task-4367641
This fix ensures Point of Sale automated tests can run correctly without an internet connection. It helps keep development and quality checks reliable in offline or restricted environments, with no direct impact on day-to-day users.
Original PR description
Ensure hoot tests are correctly running offline. rb-error: 229927 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221268
Employees can now access subtasks in private projects when they should have permission to do so. This prevents legitimate project work from being blocked and adds stronger test coverage for the corrected access scenario.
Original PR description
same as https://github.com/odoo/odoo/commit/0d75ce1d3912bbd94c5ce3bc199b40134dfab69f but different field `has_template_ancestor`. the test was fragile and didn't cover the case correctly, it was improved in this commit. opw-4980443 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221728
This update corrects a small typo in the website/page builder's internal warning handling. It helps ensure warning messages are recorded properly in the browser console, making troubleshooting more reliable without changing user-facing behavior.
This fix prevents image editing controls from remaining on screen after an image is deleted. It also ensures the crop tool reliably opens after using image transform, reducing confusing editor behavior for users working with images.
Original PR description
### Steps to reproduce: **Issue 1:** - Add an image in the editor. - Apply image transformation (e.g., shrink it). - Open the image cropper tools. - Press the Backspace key. - Observe that cropper…
### Steps to reproduce: **Issue 1:** - Add an image in the editor. - Apply image transformation (e.g., shrink it). - Open the image cropper tools. - Press the Backspace key. - Observe that cropper still visible. **Issue 2:** - Go to To-Do and insert an image. - Click on Image Transform, then on Image Crop — observe that Image Crop opens correctly. - Click the Discard button in the Image Crop UI. - Again select the image, click Image Transform, then Image Crop. - Notice that Image Crop no longer opens. ### Description of the issue/feature this PR addresses: - Pressing Backspace removes the image from the editor. - However, the cropper remains open, and focus returns to editable area, allowing to type with the cropper still visible. - Clicking Image Crop while Image Transform was active could destroy both due to async loadBundle() timing. On subsequent attempts, ImageCrop was added before ImageTransform was removed, causing Owl to destroy both in the same frame. ### Desired behavior after PR is merged: - When the image is removed, the associated cropper is also closed. - Clicking Image Crop button while Image Transform is active now works. task-4859869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220477 Forward-Port-Of: odoo/odoo#213914
Changing the journal on a payment no longer automatically replaces the selected partner with the journal company's partner. This lets users manually choose the correct partner when adjusting payment journals, avoiding incorrect payment assignments.
Original PR description
Reproducing steps: - Create a payment and select a journal. - Partner is set to the journal's company partner. - Try to change the journal manually. Before this PR: - Partner is reset to the journal's company partner. - Cannot assign a different journal for the journal's company partner. After this PR: - Removed unwanted compute dependency. - Partner is no longer reset and can be changed manually. opw-4769153 Forward-Port-Of: odoo/odoo#221867
Non-admin accounting users can now print Saudi ZATCA invoices without encountering an error. The fix ensures the invoice QR code can be generated despite restricted access to related electronic invoicing attachments, reducing disruption in day-to-day invoicing.
Original PR description
**Steps to reproduce:** 1. Install Accounting and l10n_sa_edi 2. Switch to a SA company 3. Go to Accounting > Configuration > Journals > Sales > ZATCA > Re-onboard 4. Create or duplicate a customer…
**Steps to reproduce:** 1. Install Accounting and l10n_sa_edi 2. Switch to a SA company 3. Go to Accounting > Configuration > Journals > Sales > ZATCA > Re-onboard 4. Create or duplicate a customer invoice > Confirm 5. Click on blue banner "Process Now" 6. Log in as a non-admin user (e.g., Marc Demo) and Switch to a SA company 7. Go to invoice > Open Same invoice > Click to "PRINT" **Issue:** - A traceback is raised when trying to access the attachment linked to the ZATCA document. **Cause:** - Since commit https://github.com/odoo/odoo/commit/44a4cdb3944a4b722dcfbca5e2947a4372b8501d, access to EDI document's attachment (`attachment_id`) is restricted to users belonging to "Role > Administrator" group (`group_system`). - This was introduced as part of changes from Task [#4341594](https://www.odoo.com/odoo/project/49/tasks/4341594) As a result, non-admin users (even with accounting rights) are unable to access the attachment causing a traceback. **Solution:** - Apply `compute_sudo`to field `l10n_sa_qr_code_str` to bypass the restrictive access rights. So even if for any case any other field causes issues in the future, compute_sudo will take care of it **opw-4923399** Forward-Port-Of: odoo/odoo#219820
Changing the product on a sales quotation line now refreshes the price instead of keeping a previously manually entered amount. This helps sales teams avoid incorrect quotation totals when replacing products in an order.
Original PR description
step to reproduce - Create a quotation, - Select a product - Update the price manually - change the product - The amount stays the same expectation: with change of product in SO, price should also recompute issue: currently,`_compute_price_unit` depends on `technical_price_unit` such that `price_unit` won't update if `price_unit` and `technical_price_unit` are not same. which is the case when price_unit was manually set, regardless of the product https://github.com/odoo/odoo/blob/12ef230df58122fbdac0b4c1b4781c535b8516ba/addons/sale/models/sale_order_line.py#L567-L570 we should reset to original price with change of product opw-4813069 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219584 Forward-Port-Of: odoo/odoo#213912
Opening a payment link for an unpaid invoice no longer triggers an error caused by an incorrect amount conversion. This helps customers complete invoice payments smoothly without encountering a technical traceback.
Original PR description
Versions
--------
- 18.0+
Steps
-----
1. Go to Accounting/Invoicing;
2. open an unpaid invoice;
3. generate payment link;
4. open payment link.
Issue
-----
Traceback on a `ValueError`.
Cause
-----
Commit 5697493e00915 added a `amount and float('amount')`, trying to convert a string into a float.
Solution
--------
Convert the variable into a float instead.
opw-4996783
Forward-Port-Of: odoo/odoo#221914This fixes an inventory issue where changing a product's on-hand quantity to zero did not save correctly, causing the previous stock amount to reappear after refreshing. Businesses can now accurately clear stock levels for products without creating unnecessary zero-quantity inventory movements.
Original PR description
<b>Steps to reproduce:</b> 1) Install stocks 2) Create a product variant with storable true 3) Change the on-hand quantity to some positive value and save 4) Now update the on-hand quantity to 0 and…
<b>Steps to reproduce:</b> 1) Install stocks 2) Create a product variant with storable true 3) Change the on-hand quantity to some positive value and save 4) Now update the on-hand quantity to 0 and refresh the page <b>Issue:-</b> The on-hand quantity doesn't update to 0. <b>Cause:-</b> When the user manually changes the on-hand quantity, an inverse method `_inverse_qty_available` is triggered to create a new stock.quant, but because of this condition, no new quant is created. https://github.com/odoo/odoo/blob/b2e845c46a0b152899ee630770abc15751493069/addons/stock/models/product.py#L236-L238 As a result, the qty_available value will remain same because it will be updated based on the stock.quant's record from the below line. https://github.com/odoo/odoo/blob/b2e845c46a0b152899ee630770abc15751493069/addons/stock/models/product.py#L185 https://github.com/odoo/odoo/blob/b2e845c46a0b152899ee630770abc15751493069/addons/stock/models/product.py#L217 <b>Solution:-</b> We can resolve this issue by modifying the condition in the inverse method to create a new stock.quant if the on-hand qty is 0 or more. Also skip creating a SM with 0 quantity when applying inventory from `_inverse_qty` opw-4761491 Forward-Port-Of: odoo/odoo#208739
The DHL delivery integration now sends commodity code information using the field name expected by DHL's API. This helps avoid shipment creation issues caused by rejected or misread customs data.
Original PR description
Changed the field name in commodityCodes from `code` to `value` to match with DHL API documentation. Check ticket log notes for details of DHL documentation. opw-4892324 Forward-Port-Of: odoo/enterprise#91645
The accountant test tour now waits for the page to settle before clicking key buttons. This reduces intermittent failures during statement creation and helps keep automated checks stable.
Original PR description
Steps --------- 1. Install account 2. Run the following test-tags `.test_accountant_tour` Problem --------- Sometimes, the tour fails in the statement creation step because the "New" button is not correctly pressed. The error does not always occur. Solution --------- Adding some intermediary steps so that the page settles before pressing on buttons. build-error-226436 Forward-Port-Of: odoo/enterprise#91785
This fixes a test failure that could occur when the Accountant app is not installed. It improves reliability of the accounting batch payment test suite without changing business functionality.
Original PR description
**Issue:** "test_partner_account_batch_payments" test may fail when "accountant" module is not installed. **Solution:** Handle the case when "accountant" module is not installed separately as it is done in previous versions. runbot-230480 Forward-Port-Of: odoo/enterprise#91621
This fix ensures that when receiving serial-numbered products in the Barcode app, removing scanned lines targets the correct serial number. It prevents valid serial numbers from being incorrectly marked as already used, reducing receiving errors and rework for warehouse teams.
Original PR description
Steps to reproduce: - Install Purchase, Stock and Barcode apps - Create a product tracked by serial number - Create a PO of this product and confirm it (demand 3) - Open Barcode application for the PO's receipt - Start entering serial numbers for the 3 products - For each line, use the decrement button and remove all 3 lines - Make sure the last removed line is not the first scanned serial - Re-enter the serial number of the last removed line Issue: The parent line of the 3 sublines has the lot_name fixed on the first scanned serial_number. So when decrementing the last_line, it will always use the virtual_id of the first serial_number scanned, leading to decrementing the wrong serial number. It starts showing that the next scanned number is already used, because it wasn't properly removed in the first place. opw-4646765 Forward-Port-Of: odoo/enterprise#88966 Forward-Port-Of: odoo/enterprise#88130
Fixes an issue in Documents where changes made to a folder from the details panel could fail to appear immediately in the search panel or briefly show outdated information. This keeps folder names and related navigation details accurate after users save changes.
Original PR description
Something changed in 18.4 (fw or documents) such that we * sometimes we didn't trigger a reload of the search panel after modifying a folder * sometimes the reload of the searchpanel was triggered *before* the initiation (and return) of the write call, so the search panel was updated with the old values Note that this asynchronous misbehavior was not easily visible in hoot tests, but the call count enables to highlight the problem (and drive a suitable solution). The fix is actually an opportunity to keep reloading the search panel on update inside `update` (i.e., saving) flows. Also last style cleanups in documents_details_panel.js. Task-4992298
Searching for loans in the Loan Analysis view now uses the correct loan label field. This prevents users from seeing an error when looking up loan records and makes the analysis view usable again.
Original PR description
Behaviour before this commit: While searching for 'Loan' in the Loan Analysis view, a traceback appears since the filter_domain for the search is on `name` but `name` is not present in account.loan.line, instead it is `loan_name`. Desired behaviour after this commit: The filter_domain for 'Loan' is updated to search for `loan_name` instead of `loan`, and domain for `display_name` is removed. TaskID:4991369 Forward-Port-Of: odoo/enterprise#91637
Users with the proper Sign permissions can now cancel sign requests linked to salary package offers without being blocked by an unrelated access error. This prevents administrative sign workflows from getting stuck when the user does not have direct access to salary offer records.
Original PR description
After this commit https://github.com/odoo/enterprise/commit/40d3314d1b06c8110b476690d2264e86b3492b3e we are not able to cancel a sign request, if user do not have read/write access on…
After this commit https://github.com/odoo/enterprise/commit/40d3314d1b06c8110b476690d2264e86b3492b3e we are not able to cancel a sign request, if user do not have read/write access on `hr.contract.salary.offer` model **step to reproduce:** - install `hr_contract_salary` - create a new user with following right: `Sign -> Administrator` `Contracts -> Employee Manager` `Recruitment -> Interviewer` - login with test user - open sign -> All Documents (with demo data 2, there should be 2 documents) - try to cancel one of them <img width="1572" height="689" alt="config for user" src="https://github.com/user-attachments/assets/72e89ac7-fed3-4a38-918f-5dbb198bd1e3" /> **Observation:** - even with Admin rights of Sign, we are not able to cancel a sign request and we receive a Access Error `You are not allowed to access 'Salary Package Offer' (hr.contract.salary.offer) records` **Fix:** we use `sudo()` to allow everyone to cancel their sign request opw-4859774 Forward-Port-Of: odoo/enterprise#91471 Forward-Port-Of: odoo/enterprise#89865
This change fixes incorrect asset depreciation schedules for imported assets when prior software used different depreciation amounts. It prevents Odoo from carrying unexpected differences into future periods while preserving corrected remaining and depreciated value calculations.
Original PR description
This reverts commit 79aa48867de14a6d2315ec95b271004084d74b14. A lot of customers reported that the data was wrong in a lot of cases. For instance, when the previous software computed a lower depreciation than Odoo, Odoo was then moving the difference into the next period. The change for the computation of `asset_remaining_value` and `asset_depreciated_value` has been kept. opw-4968367 opw-4977970 opw-4961381 opw-4991216 opw-4965451 Forward-Port-Of: odoo/enterprise#91751 Forward-Port-Of: odoo/enterprise#91723
Bank reconciliation now preserves the original foreign currency amount when recalculated values are close enough, avoiding tiny rounding differences caused by exchange-rate precision. This helps prevent valid invoices from showing incorrect residual differences, such as a one-cent mismatch, during accounting reconciliation.
Original PR description
The aim of this commit is to keep the original foreign amount currency if the computation ends up close enough to it. Before this commit: The reconciliation process was losing so much precision that…
The aim of this commit is to keep the original foreign amount currency if the computation ends up close enough to it. Before this commit: The reconciliation process was losing so much precision that it could mess up the reconciliation of one single invoice. After this commit: We keep the original amount as it is most probably the correct one. Context: With a rate of 1 US$ = 5.421327349 R$ and an invoice of 143.62 R$, we convert the amount in US$ which is 26.491668921649627 US$. As we have to round it for the accounting, we end up with 26.49 US$ as company currency amount, losing the rest of the decimals. During the reconciliation process, we convert back the US$ to R$ ending up with 143.61096147501 R$ that have to be rounded to 143.61 R$. This creates a difference of 0.01 R$ which surfaces later on. Chosen solution: As we still have the original currency amount and the rate, we are able to recompute the raw numbers and we are able to make "fairer" comparison between the amounts. If we can confidently tell that the amounts are close enough, we can just keep the original amount and prevent all those rounding errors to be taken into account. opw-4937508 Forward-Port-Of: odoo/enterprise#91462
A test for down payments in Peru e-invoicing was failing in setups without demo data because the test user lacked the needed sales access. The change adds that access so automated checks run reliably, reducing false failures during validation.
Original PR description
The new downpayment test failed in without demo due to missing sales group on the user. This fix adds the missing group. runbot-230456
Sales achievements recorded on the final day of a commission period are now included in that period's commission calculations. This ensures commission reports reflect the correct achieved amounts and prevents eligible sales from being missed.
Original PR description
**Issue** Achievements realised on the last day of the period were not taken into account (neither in the expected one, or the next period). **Steps to reproduce** - Create a commission plan with a monthly target frequency and an achievement on "Amount sold" - Have a Sale order with a `date_order` on the last day of a month - Click on the "Commissions" smart button to open the `sale.commission.report` list view -> achieved amount for the SO's month is missing. - Click on "Details" for the line -> there should be one `sale.commission.achievement.report` record. **Cause** We were comparing a Timestamp coming from the commission line with the start/end date of the period. To perform the comparison, the date was cast to a Timestamp with 0:00:00 as the hour, resulting in all commission lines on the last day of the period to be missed. opw-4857936 opw-4934168 Forward-Port-Of: odoo/enterprise#91707 Forward-Port-Of: odoo/enterprise#90658
Invoices in the Mexico localization can now be saved when they contain only a section or note line. This removes an unnecessary validation error and helps users create draft invoices with descriptive lines without needing tax details.
Original PR description
Issue: When we try to save an invoice with only a line section or line note, an error is thrown indicating invalid fields: invoice lines. This happens because the `l10n_mx_edi_tax_object` is required on account move lines. Purpose of this PR: Allow for line sections and line notes to be saved without tax objects. Steps to reproduce on Runbot: install l10n_mx switch to MX company and create an invoice with just a line section or line note save Invalid Fields error is raised opw-4987040
Opening a room from the Rooms menu now loads the room page correctly instead of showing a blank screen. This prevents users from being blocked when accessing room details or bookings.
Original PR description
**How to reproduce:** - Go to Rooms menu. - Open any room. - Click on 'Open' button. **Before this PR:** The screen appears blank. **Technical reason:** The issue was introduced by this commit: https://github.com/odoo/odoo/commit/0b6cab2cae6a084a6d2ed9b33d50342c08caa0f6 Here, 'public.interactions' is null because the `interaction_service` acts on `#wrapwrap`, which is not present in the template. As we are now using `#wrapwrap`, we have to keep vertical height as 100% manually. **After this PR:** The screen will load correctly and will no longer be blank. Task-4915155
This fix updates an internal barcode inventory test so it no longer depends on sample data being present. It helps keep automated checks stable and reduces the chance of false failures during release validation.
Original PR description
Add group 'stock.group_production_lot' to user to enable lots/SN runbot-error-230495 Forward-Port-Of: odoo/enterprise#91709
Chilean vendor bills can now be imported by accounting users who do not have administrator rights. This prevents failed imports and ensures bill details are filled in correctly during the import process.
Original PR description
### Issue: Vendor bills are not importing when the user has no administration rights. ### Steps to reproduce: - Install `l10n_cl_edi` and switch to a Chilean company - Create a new user without Administration access rights but with Accounting rights - Switch to this user - Go in Accounting > Vendor Bills - Import a Chilean vendor bill - On the created bill, we can see an error in the chatter, no fields have been filled ### Cause: This [commit](https://github.com/odoo/enterprise/commit/b26a7905cbcbfdb59d55a7ecf9e963e267b8f0a5) aadded a line writing on `l10n_cl_dte_file` but the field is only accessible to [`base.group_system`](https://github.com/odoo/enterprise/blob/bcd42d624587a968ec0b7023855ba4083894baf7/l10n_cl_edi/models/account_move.py#L1071). ### Solution: Use `sudo()` like everywhere in the file. opw-4943499 Forward-Port-Of: odoo/enterprise#91574 Forward-Port-Of: odoo/enterprise#91254