Daily updates from Odoo
Monday, August 11, 2025
29 changes · saas-18.3
Resolved issues and error corrections
When a replied-to message is deleted in Discuss or chatter, Odoo now also hides the visible reference to its parent message. This avoids confusing users with leftover reply context after the original message content has been removed.
Original PR description
**Current behavior before PR:** When a user replies to a message and then deletes it, the message body changes to 'This message has been removed.' However, the mention of the parent message remains visible. **Desired behavior after PR is merged:** The parent message mention is no longer shown if the message is deleted. Task-4593293 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198768
Sales order lines now recalculate unit prices when quantity changes trigger a different pricelist rule. This prevents incorrect pricing on larger orders and avoids manual pricelist switching to force the right price.
Original PR description
**Steps to reproduce**: 1. Install the `sale` module. 2. Enable `Pricelists` under `Settings > Sales > Pricing > Pricelists`. 3. Create two pricelists: - Pricelist A with two fixed-price rules: -…
**Steps to reproduce**:
1. Install the `sale` module.
2. Enable `Pricelists` under `Settings > Sales > Pricing > Pricelists`.
3. Create two pricelists:
- Pricelist A with two fixed-price rules:
- `0.75` for quantity ≥ 0
- `0.50` for quantity ≥ 1000
- Pricelist B with a `-10%` discount applied to Pricelist A.
4. Create a Sales Order using Pricelist B.
5. Add a product to the order line.
6. Increase the quantity to 1000.
**Observed behavior**:
- The unit price does not update according to the pricelist rule for quantity ≥ 1000.
- If you switch the pricelist to another and then back again, the `Update prices` button appears and correctly updates the price.
**Root cause**:
- The price is not recomputed when the quantity changes because the `price_unit` is not updated because it does not match the `technical_price_unit`.
- Since PR [#21392](https://github.com/odoo/odoo/pull/213912), `price_unit` is rounded (2 decimals), but `technical_price_unit` is not. This causes a mismatch in comparison logic due to rounding differences.
**Solution**:
- Replace direct float comparison with `currency_id.compare_amounts()` to ensure proper comparison with rounding precision.
opw-4944644
Forward-Port-Of: odoo/odoo#221389The manufacturing unbuild form now accepts product quantities with the same decimal precision as the product’s unit of measure. This prevents valid manufacturing quantities, such as 1.234 units, from being rounded or blocked when reversing a production order.
Original PR description
Steps to reproduce the bug:
- Set the decimal precision and rounding accuracy for the unit of measure to more than 2 digits (e.g. 3)
- Create a storable product “P1”
- Create a manufacturing order to produce 1.234 units
- Confirm and validate it
- Try to unbuild the MO
Problem:
The unbuild form does not respect the product's UoM decimal precision, allowing only 2 digits for product_qty.
opw-4818591
Forward-Port-Of: odoo/odoo#220308
Forward-Port-Of: odoo/odoo#211944This fixes an issue where certain combo products in Point of Sale skipped the required product configuration step. It also prevents cashiers from being asked to choose options that were already selected, reducing mistakes and making checkout smoother.
Original PR description
When a combo contained a product that had variant with type 'no_variant' and 'always', if you added the product to the cart the product configuration popup would not open. Also, in the combo you can…
When a combo contained a product that had variant with type 'no_variant' and 'always', if you added the product to the cart the product configuration popup would not open. Also, in the combo you can only select product_product and not product_template, so the product configuration popup should not propose the variant linked to the 'always' type, as you already selected a product template in the combo configuration popup. Steps to reproduce: ------------------- * Create a product attribute PA1 with type 'no_variant' and 2 values V1 and V2 * Create a product attribute PA2 with type 'always' and 2 values V3 and V4 * Create a product template PT1 with PA1 and PA2 * Create a combo choice PC1 with the 2 variants of PT1 * Create a combo product CP1 with PC1 * Open PoS and add CP1 to the cart * The combo configurator popup opens, click on the version with V2 > Observation: The product configurator popup does not open > Second fix: The product configurator allows you to select the variant linked to the 'always' type, which is not correct as you already selected it through the combo configurator popup Why the fix: ------------ The first fix just make sure that the product configuration popup opens when it is necessary. The second fix filters the variants proposed in the product configuration popup to only show the variants that are not linked to the 'always' type. But this only happens when we do it from the combo configuration popup. opw-4719258 Forward-Port-Of: odoo/odoo#220994 Forward-Port-Of: odoo/odoo#215603
Creating or editing a milestone from the All Tasks view now automatically uses the related project information. This prevents an unnecessary required field error and lets users save milestones without extra manual steps.
Original PR description
### Steps to Reproduce: - Install sale project - Go to All Tasks - Open any task create and edit a new milestone and click on save ### Issue: - A required field error is raised because `project_id` is not set by default. - It should not be the case. ### Cause: - The `milestone_id` field's attributes are overridden in `sale_project`. - The context is missing `default_project_id` when accessing the milestone from the "All Tasks" view. ### Fix: - Passed project_id as default_project_id when opening milestone form. task-4953620 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The project stock workflow now avoids opening a map view that is not available in the community edition. This prevents an error when users click the 'From WH' button on a project task, keeping the action reliable while allowing enterprise editions to add the map view separately.
Original PR description
* STEP TO REPRODUCE: go to task of a project, enable 'From WH' in top bar button. Click on it -> error because no map view * SOLUTION: in community version we should remove map view then in enterprise we can overide to add it 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#222003
Project profitability figures now use the accounting line balance rather than recalculating amounts with current or table-based currency rates. This prevents outdated or manually adjusted currency rates from causing differences between project dashboards and analytic accounting reports.
Original PR description
Issue description: The profitability items for projects were not matching the numbers from analytic accounting reports due to discrepancies in currency rate calculations. This issue was traced to two…
Issue description: The profitability items for projects were not matching the numbers from analytic accounting reports due to discrepancies in currency rate calculations. This issue was traced to two main causes: 1. Profitability items were using the currency rate of today, even for old move lines. ```rates = self.env['res.currency'].browse(list(currency_ids))._get_rates(self.company_id, date.today())``` While this was deemed acceptable for performance reasons in #113146, it caused mismatches with analytic accounting reports. 2. Some move lines use a changed currency rate that differs from the rate stored in the currency table for the same date (due to manual change in the currency rate), leading to further mismatches. To resolve this: - The `balance` is now used instead of `price_subtotal` for calculations. This ensures accurate amounts without relying on conversion rates when the project currency matches the company currency. Steps to Reproduce: 1. Create a project with an associated analytic account. 2. Enable any foreign currency and add different rates for it for today and yesterday. 3. Create a new vendor bill with: - Date = yesterday - Currency = the new foreign currency - Analytic distribution set to the created project's analytic account. 4. Check the project dashboard profitability. You will see the numbers are incorrect because it uses the currency rate of today. opw - 4881380 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222388 Forward-Port-Of: odoo/odoo#217337
The update adds pm.me to the list of generic email providers used by Odoo's IAP features. This helps avoid treating Proton Mail short-domain addresses as company-specific emails, improving lead or contact handling consistency.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215290 Forward-Port-Of: odoo/odoo#214036
Purchase orders now consistently use the supplier's preferred currency, even when they are created automatically from approvals instead of manually in the interface. This prevents purchases from being recorded in the company currency by mistake, reducing pricing and accounting errors.
Original PR description
Steps to reproduce: - Go to Invoicing > Configuration > Accounting > Currencies: - Enable the Euro currency - Set company currency to USD - Go to any partner form (e.g. Azure Interior): - In Sales &…
Steps to reproduce:
- Go to Invoicing > Configuration > Accounting > Currencies:
- Enable the Euro currency
- Set company currency to USD
- Go to any partner form (e.g. Azure Interior):
- In Sales & Purchase tab: - Set Supplier Currency to Euro
- Create a purchase order from the UI:
- Select Azure Interior → Currency is correctly updated to Euro (via onchange)
- Install the Approvals module
- Create a storable product "P1":
- Under Purchase tab: - Vendor: Azure Interior - Price unit: 5 EUR
- Create an approval request:
- Request Owner: Marc Demo
- Product: P1
- Approver: Mitchel Admin
- Submit and approve the request
- Click on "Create Purchase Order"
Issue:
The purchase order is created with the correct partner and product. But the currency is incorrectly set to the company currency (USD), instead of the supplier's currency (Euro).
Cause:
The currency was updated via an `@onchange`, which is only triggered in the UI.
When creating a PO programmatically (e.g. via approvals or in a test), the onchange is not executed and the currency falls back to the company default.
Solution:
Replace the `@onchange` logic for `currency_id` with a stored compute field.
This ensures that the correct currency is always computed, regardless of how the purchase order is created.
opw-4938390
Forward-Port-Of: odoo/odoo#222044
Forward-Port-Of: odoo/odoo#221907Product images shown on shared purchase portal pages are now kept to a small, consistent size instead of appearing at their original oversized dimensions. This keeps purchase documents readable and professional for external viewers accessing shared links.
Original PR description
Issue ----- Images on the purchase portal are displayed in their original size instead, making it a visual mess. Steps to reproduce ----- - Create a product with a large image - Create a purchase for…
Issue ----- Images on the purchase portal are displayed in their original size instead, making it a visual mess. Steps to reproduce ----- - Create a product with a large image - Create a purchase for the product - Click the cog wheel > Share - Open the link in a new tab (with no active session, eg private window) --> The image is way too big Cause ----- Images are now converted to Webp: https://github.com/odoo/odoo/commit/1a978183001e0503104285f4bd5bed983beb0efb The problem is that Webp images cannot be resized through the Python backend: https://github.com/odoo/odoo/blob/0c6622294b7117ec5eb1cbf8a9270636b2dd807f/odoo/tools/image.py#L81-L83 However, the product model has multiple sizes for the image: https://github.com/odoo/odoo/blob/3ddf2bcdf16b5b43db4c4abe2cdbc4384cf683cc/addons/product/models/product_product.py#L91-L94 What we can do is load the smallest possible image and then use styling to limit the display size. The 48px comes from the hardcoded values in https://github.com/odoo/odoo/blob/0c6622294b7117ec5eb1cbf8a9270636b2dd807f/addons/purchase/controllers/portal.py#L99 This fix will no longer be needed when (if) Webp images get resized in backend. Comparison ----- Left is before, right is after fix.  Image used -----  ----- Ticket: opw-4625113 Forward-Port-Of: odoo/odoo#221139 Forward-Port-Of: odoo/odoo#217990
Invoice PDFs sent by email now follow the same custom report name configured for printed invoices. This avoids confusion for customers and staff by keeping invoice file names consistent across printing and email delivery.
Original PR description
**Steps to reproduce**: - install the `accounting` module. - Go to `Settings -> Technical -> Actions -> Reports -> Invoice or Invoice without payment` - Change the printed report name - Try to print…
**Steps to reproduce**:
- install the `accounting` module.
- Go to `Settings -> Technical -> Actions -> Reports -> Invoice or Invoice without payment`
- Change the printed report name
- Try to print the report via the print menu (gear icon -> print) -> The report is shown with the new updated name.
- Try sending the invoice the regular way -> the attached invoice has the default name, Odoo ignores the changes.
**Observation**:
When printing the invoice manually, the file name correctly reflects the custom name configured in the report action. However, when sending the invoice by email, the attachment file name does not match the updated name and remains hardcoded.
**Issue**:
The email attachment file name is hardcoded in the mail sending logic. in the method:
```python
def _get_invoice_report_filename(self, extension='pdf'):
self.ensure_one()
return f'{self.name.replace('/', '_')}.{extension}'
```
It does not dynamically fetch the updated report name from the configured report action.
**Solution**:
When a custom report template is configured on the customer on field `(invoice_template_pdf_report_id)`, the system now dynamically uses the corresponding name from the report action for the email attachment.
opw-4923035
Forward-Port-Of: odoo/odoo#219279This fixes a calendar synchronization issue where an invited attendee could incorrectly become the organizer of an event in Google Calendar. Events are now held back from attendee sync until the actual organizer synchronizes, helping keep ownership consistent between Odoo and Google Calendar.
Original PR description
Before this commit, when an user A is invited by an event of user B and none of these users are synchronized with Google, when the synchronization of user A starts or resumes, the event will be…
Before this commit, when an user A is invited by an event of user B and none of these users are synchronized with Google, when the synchronization of user A starts or resumes, the event will be synchronized with the user A as organizer in Google. In the meanwhile, in Odoo, the event ownership will be shown as user B, mismatching the organizer field between the two ends. This is problematic because the ownership of the event will be forever wrong in Google. After this commit, when user A starts or resumes its synchronization with Outlook, previous Odoo events which user A is attendee but not organizer won't be synchronized until the organizer synchronizes its calendar. This will keep the ownership of the event intact in Odoo, and when the organizer synchronizes its calendar with Google, it will be correctly synchronized in Google as well. Recently, we had to revert this PR due to an emergency at odoo/odoo#215449. The issue got solved, so we're adding this fix back. task-4269432 Forward-Port-Of: odoo/odoo#219178 Forward-Port-Of: odoo/odoo#218856
This fixes cases where livechat visitors could see blank author names in chat messages. The mail interface now uses the correct displayed author name, including the livechat username when regular contact details are not available.
Original PR description
Before this commit, using author.name directly could lead to not showing anything to livechat visitors. This is because the information is not send to the visitor. By using the authorName getter, we leverable the override in livechat and correctly use the livechat_username. task-4965911 Forward-Port-Of: odoo/odoo#220104
This fix adds the missing Oman localization data needed to show the Returns button in the Tax Report. Oman companies can now access the tax closing form as expected, avoiding a blockage in tax reporting workflows.
Original PR description
### Issue: This commit adds a missing account.return.type data in the Oman localization. This is related to the new Accounting Returns [feature](https://github.com/odoo/enterprise/pull/81569). The…
### Issue: This commit adds a missing account.return.type data in the Oman localization. This is related to the new Accounting Returns [feature](https://github.com/odoo/enterprise/pull/81569). The l10n_om module did not include an account.return.type record, which prevents the "Returns" button (linked to the action_open_returns) from appearing in the Tax Report. As a result, users in Oman are unable to access the Tax Closing form. ### Issue: This commit adds a missing account.return.type data in the Oman localization. This is related to the new Accounting Returns feature (#81569). The l10n_om module did not include an account.return.type record, which prevents the "Returns" button (linked to the action_open_returns) from appearing in the Tax Report. As a result, users in Oman are unable to access the Tax Closing form. The visibility of the button is controlled by the following condition: [Code](https://github.com/odoo/enterprise/blob/f924f120cbd04002e21c78b081e1c8006b56a4b6/account_reports/models/account_report.py#L1776) #### Affected Versions: 18.3 and later ### Steps to reproduce: 1.Install the l10n_om module 2.Switch to the Oman company 3.Go to Accounting > Reporting > Tax Report 4.The "Returns" button is not visible ### Expected behavior The "Returns" button should be visible, allowing the user to generate the closing tax form. ### Current behavior The button is hidden due to missing account.return.type data in the Oman localization. OPW-4943024 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures product forecasts correctly include stock movements created by multi-step delivery routes. Businesses will see more accurate availability figures and clearer links between sales orders and outgoing delivery operations.
Original PR description
### Steps to reproduce: - In the settings enable Multi-Steps routes - Put your warehouse in delivery in 2 steps - Create and confirm a sale order for 1 units of a storable product #### > While the…
### Steps to reproduce: - In the settings enable Multi-Steps routes - Put your warehouse in delivery in 2 steps - Create and confirm a sale order for 1 units of a storable product #### > While the pick move was created and confirmed the forecast is still at 0 even tho it should be at -1 and the outgoing pick move should be matched with the SO line in the forecast report. ### Cause of the issue: The issue has been introduced by commit 5b40fb086a0e5677678c312b42dc1f2c8991dc9e The issue being that since the `location_final_id` should not have been considered for the past forecast based on done move chains (because each done move of the chain will refer to the same external `final_dest_id`). The proposed fix was therefore to change the dest_loc_domain as such: https://github.com/odoo/odoo/commit/5b40fb086a0e5677678c312b42dc1f2c8991dc9e#diff-1f24ce9f94c5795040749acca5924384d7d17c0ac39b1993cef3b484e4bd30afR324-R326 However, the new domain: https://github.com/odoo/odoo/blob/995a7072cb3315fc03544b281b1ed5ca4e81e901/addons/stock/models/product.py#L322-L326 ignores completely the part of the condition refering to `final_dest_id` for outgoing moves since the condition is negated here: https://github.com/odoo/odoo/blob/995a7072cb3315fc03544b281b1ed5ca4e81e901/addons/stock/models/product.py#L328-L333 The logical `OR` (`|`) becoming an `AND` (`&`) for the `domain_move_out_loc`. opw-4997982 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222241
This fixes an internal automated test for the Time Off app that was failing after a previous change. The test was rewritten to avoid a fragile screen-tour step, improving reliability without changing business features.
Original PR description
The #217517 PR is causing a test failure on runbot.
The problem was due to use of ```$('.o_stat_info:contains("Time Off")')``` to get the element in tour.
To avoid unnecessary use of tour, the test is re-written.
runbot-230486
Forward-Port-Of: odoo/odoo#222022
Forward-Port-Of: odoo/odoo#221706This fixes an accounting test that used a fixed 2025 payment sequence, which would cause automated checks to fail from 2026 onward. The change keeps validation reliable over time without changing accounting features or user workflows.
Original PR description
The test test_resequence_change_payment_name had hardcoded 2025 in the sequence name, meaning that the test will fail in 2026. opw-4437481 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#222220
This fixes an error that could stop invoices from printing when online payment QR codes were enabled. Sales invoices now use the correct context during PDF generation, so businesses can print customer invoices with payment QR codes as expected.
Original PR description
### Issue When "Add QR-code link on PDF" is enabled, printing an invoice in a regular Sales → Accounting flow raises an error. The report printing process internally calls…
### Issue
When "Add QR-code link on PDF" is enabled, printing an invoice in a regular Sales → Accounting flow raises an error.
The report printing process internally calls
`_generate_portal_payment_qr`, which creates a `payment.link.wizard` record. This model overrides `default_get` and reads `self.env.context.get('active_model')`.
At that moment, the context still contains `'sale.advance.payment.inv'`, a model that does not implement `_get_default_payment_link_values`. This causes:
AttributeError: 'sale.advance.payment.inv' object has no attribute '_get_default_payment_link_values'
#### Affected versions
- saas-18.3 and later
### Steps to reproduce
1. Install `account_accountant`, `sale_management`
2. Go to Settings
3. Enable "Invoice Online Payment" and "Add QR-code link on PDF"
4. Go to Sales → Quotations
5. Create any quotation
6. Confirm quotation
7. Create invoice (full)
8. Confirm invoice
9. Click "Print"
#### Current behavior
- Error is raised
#### Expected behavior
- Invoice prints with QR code without error
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe Spanish VAT Record Books export no longer fails with a technical error when the company’s IAE Group or Heading is missing. Instead, users are directed to complete the required company setting, helping them resolve the issue without support intervention.
Original PR description
**Steps to reproduce:** 1. Install the `l10n_es_reports` module. 2. Remove the value from the `IAE Group or Heading` field in company settings. 3. Navigate to `Accounting -> Reporting -> Tax Report -> Generic Tax Report`. 4. Click the down arrow and select `VAT Record Books (XLSX)`. **Observed behavior:** * A traceback error occurs when attempting to export the VAT books. **Root cause:** * The system attempts to traverse the `IAE Group or Heading` field, which is empty, causing the traceback. **ref**: https://github.com/odoo/enterprise/blob/d8539dff5f3dcecfeb99fd7fc22a6915aaa02c4b/l10n_es_reports/models/libros_export.py#L126-L138 **Solution:** * If field `IAE Group or Heading` not configured, a RedirectWarning is raised to guide the user to the company form view for proper setup. opw-4981531 Forward-Port-Of: odoo/enterprise#92049 Forward-Port-Of: odoo/enterprise#91607
The French FEC import now keeps each account's existing name when applying account templates. This prevents multiple accounts with similar codes from being incorrectly renamed during import, preserving clearer accounting records.
Original PR description
Steps to reproduce: - import a fec with different account 164*** with different names Issue: All the account's name will be overriden Cause: Before 18.0, apparently, code and name were joined and was not an issue solution: update the code to the new logic by filtering out the name from the override (`_apply_template`) opw-4690284 Forward-Port-Of: odoo/enterprise#86809
This fix updates a Point of Sale Enterprise test so it includes a required accounting-related setting. It prevents related automated checks from failing during builds, helping keep releases reliable without changing business functionality.
Original PR description
steps to reproduce: 1. install pos_enterprise 2. run the test `test_should_not_affect_other_pos_config` or `test_is_header_or_footer_to_false` this commit adds the missing_field `account_tax_return_journal_id` to the test build_error-230301
Expiration dates shown in the Barcode app could appear one day early for some users because server dates were interpreted in the wrong timezone. This fix displays receipt expiration dates using the user's local timezone, helping warehouse teams avoid confusion when validating lots and products.
Original PR description
**Issue**: The expiration date displayed in the barcode app's scan screen may appear incorrect. **Steps to reproduce**: - Go to Settings > Inventory, and enable the `Expiration Date` field - Open the…
**Issue**: The expiration date displayed in the barcode app's scan screen may appear incorrect. **Steps to reproduce**: - Go to Settings > Inventory, and enable the `Expiration Date` field - Open the Purchase app - Create a new Request For Quotation - Select a product that: - is a good tracked by lot - has the `Expiration Date` field enabled (Inventory tab > Traceability) - Confirm the RFQ - Click the `Receipt` smart button - Click the `hamburger button` and enter an expiration date at midnight. - Go to the Barcode application > Operation > Receipts - Open the corresponding RFQ - Click Edit and increase the quantity to 1, then Validate - Observe that the date is displayed as one day earlier **Cause**: The code https://github.com/odoo/enterprise/blob/b5ad18b101f4a2608758762edf0f49270a67ba20/stock_barcode_product_expiry/static/src/components/line.js#L17 assumes that the date is encoded using the local while the date comes from the server https://github.com/odoo/enterprise/blob/b5ad18b101f4a2608758762edf0f49270a67ba20/stock_barcode_product_expiry/static/src/components/line.js#L13, and thus is utc encoded. So for example, if the user's timezone is `Europe/Brussels`, a midnight timestamp will appear as 10 PM the previous day. **Solution**: To solve this issue, use this method https://github.com/odoo/odoo/blob/7a40285fd03f75f07a74f05d4b60e760e1c83eb3/addons/web/static/src/core/l10n/dates.js#L619-L622 instead of https://github.com/odoo/odoo/blob/7a40285fd03f75f07a74f05d4b60e760e1c83eb3/addons/web/static/src/core/l10n/dates.js#L514-L516. This way, it would parse the utc-base server date as a utc-base date. opw-4865513 Forward-Port-Of: odoo/enterprise#91517 Forward-Port-Of: odoo/enterprise#88526
Rental availability now stays accurate after an order is picked up when Rental Transfer is turned off. This prevents available items from being incorrectly shown as unavailable, helping sales teams confirm valid rental orders with confidence.
Original PR description
Steps to reproduce: - Do not enable “Rental Transfer” in settings - Create a storable product “P1”: - Enable “Can be rented” - update available quantity to 10 units - Create a first rental order for…
Steps to reproduce:
- Do not enable “Rental Transfer” in settings
- Create a storable product “P1”:
- Enable “Can be rented”
- update available quantity to 10 units
- Create a first rental order for 24h:
- 9 units of P1
- Confirm the order
- Create a second rental order for the same 24h period:
- 1 unit of P1
-> Expected: The availability widget is green and indicates 1 unit available (correct).
Problem:
After picking up the first order, the widget on the second order turns red and incorrectly shows no availability.
The current logic checks virtual_available (1 unit) and subtracts rented_qty_during_period (9 units), resulting in -8. It then takes max(0, -8) → 0. However, the actual picked quantity should be taken into account, regardless of whether “Rental Transfer” is enabled, since disabling it merely omits the creation of a picking—not the move itself.
opw-4901017
opw-4906162
Forward-Port-Of: odoo/enterprise#92056
Forward-Port-Of: odoo/enterprise#91155This fix ensures products that are not marked for sale or rental no longer appear as selectable items on standard quotations. It helps avoid accidental inclusion of unavailable products in customer quotes and keeps sales workflows consistent.
Original PR description
Versions
--------
- saas-18.3
Steps
-----
1. Have a product that's neither salable not rentable;
2. open a quotation;
3. click "Add a product".
Issue
-----
It's possible to select the unsalable product.
Cause
-----
Commit d5f72c201bf0 added a `_domain_product_id` override to `sale_renting` which includes `('rent_ok', '=', order_is_rental)`. As a consequence, whenever you have a quotation that isn't a rental, this domain will retrieve *any* product that isn't rental either.
Solution
--------
Add a `('rent_ok', '=', True)` condition to ensure the override only affects rental orders, and that non-rental orders won't retrieve all non-rental products.
opw-4983348UPS Commercial Invoices now use the currency from the related customer order instead of the company's default currency. This prevents incorrect customs paperwork when orders are sold in a foreign currency, reducing confusion and potential delivery delays.
Original PR description
The automatically generated UPS Commercial Invoice is using the company's currency instead of the currency of the invoiced order. ### How to reproduce: * Setup UPS Delivery Method. * Create a sale order with a currency different from the company's. * Assign a customer in a different country. * Validate the delivery. * Check the UPS Commercial Invoice — it shows the company's currency. opw-4973217 Forward-Port-Of: odoo/enterprise#92064 Forward-Port-Of: odoo/enterprise#91883
The Swedish SIE4 import now skips accounting entries that contain no transaction lines. This prevents empty journal entries from being created in Odoo, keeping imported accounting data cleaner and more reliable.
Original PR description
The aim of this commit is making sure that we don't import move without transaction in it. In SIE4, we can have moves with BTRANS and RTRANS tags that we are ignoring. It means that we could have move without any move lines. It's not an expected behavior in Odoo. This commit checks that the move data are created only if we have lines for that move. no task id Forward-Port-Of: odoo/enterprise#91783
Project profitability reports now keep previously invoiced amounts when a linked subscription is renewed. This prevents revenue from disappearing after renewal, giving businesses a more accurate view of project performance.
Original PR description
To reproduce: ============= - create a subscription with a service and link it to a project - confirm the subscription and invoice it - check the profitability of the project, everything is fine - renew the subscription and invoice it - check the profitability of the project, the invoiced amount is not taking into account the previous invoiced amount Problem: ======== renewed subscriptions are excluded from the profitability computation because they are closed by the renewal and not bringing any profitability, but with that we loose the profitability of the previous invoiced amount. Solution: ========= keep renewed subscriptions in computing `Invoiced` amount. opw-4755016 Forward-Port-Of: odoo/enterprise#92052 Forward-Port-Of: odoo/enterprise#91437
The restaurant appointment editor now keeps its formatting controls consistent while scrolling. When the toolbar disappears because it moves out of view, the color selector closes too, avoiding a confusing floating popup for users.
Original PR description
**Current behaviour before PR:** Steps to reproduce the issue: - Have a long text content in editable, making the container scrollable. - Select first line of the text, in toolbar open color selector. - Scroll down until the toolbar overflows and becomes hidden. Notice that the toolbar disappears when it overflows its container while color picker remains open, floating at the top of container. **Desired behaviour after PR:** Now, when the toolbar overflows and gets hidden, the color selector becomes hidden along with toolbar. Community PR: https://github.com/odoo/odoo/pull/202889 task-4581884 Forward-Port-Of: odoo/enterprise#90458 Forward-Port-Of: odoo/enterprise#84579
Colombian electronic invoices now send document type codes in the two-character format required by DIAN. This prevents avoidable submission rejections caused by incorrectly formatted invoice type values.
Original PR description
The DIAN endpoint only accepts Electronic Invoice types with a length of 2 characters. This fix adds zero-padding to the problematic edi types. task: 4882683 Forward-Port-Of: odoo/enterprise#89925