Wednesday, September 24, 2025
77 changes
8 changes
Resolved issues and error corrections
Chilean electronic delivery guide XML now shows the quantity actually delivered instead of the quantity originally requested. This prevents customers and compliance documents from showing overstated product quantities when only part of an order is delivered.
Original PR description
**Issue** When the delivered quantity of a product is less than the originally demanded quantity, the generated Delivery Guide XML shows the demand (product_uom_qty) instead of the actual delivered…
**Issue** When the delivered quantity of a product is less than the originally demanded quantity, the generated Delivery Guide XML shows the demand (product_uom_qty) instead of the actual delivered quantity (quantity). This results in an incorrect quantity being displayed in the DTE. **Steps to Reproduce** 1. Install the Accounting module, Chilean localization, Sales module, and l10n_cl_edi_stock. 2. Create and confirm a new Sale Order. 3. Click on the Delivery smart button. 4. Adjust the delivered quantity to a value lower than the demand, save, and validate with no backorder. 5. Generate the Delivery Guide. 6. Open the generated DTE XML and observe that the quantity is incorrect. **Root Cause** The quantity displayed in the DTE is taken from product_uom_qty, which represents the planned quantity to be moved, not the actual delivered quantity. The correct field to use is quantity, which reflects the real delivered amount. **Fix** Change the XML output to use quantity instead of product_uom_qty to accurately reflect the actual delivered quantity in the DTE. Opw-4892276 Forward-Port-Of: odoo/enterprise#89633
Barcode transfers now keep kit components separate from the same component added independently when lot tracking is used. This prevents incorrect grouping in the barcode flow and avoids unnecessary backorders after users enter the correct quantities.
Original PR description
**Problem:** when the components of a kit are tracked by lot, and that a picking is made of the components of a kit (exploded from the kit) and separatly one of the components on its own: if we open…
**Problem:** when the components of a kit are tracked by lot, and that a picking is made of the components of a kit (exploded from the kit) and separatly one of the components on its own: if we open the picking in barcode, the line of the component separated and line of the components of the kit are grouped, which leads to an unwanted backorder creation when validating **Steps to reproduce:** - create two products tracked by lot (comp A and comp B) - set an on hand quantity for both - create a storable product (final product) and create a BOM - in the BOM add comp A and comp B - create an internal transfer for 1 final product and 1 comp B - click on "mark as todo" - open this transfer in barcode, we see that the two lines from the comp B are grouped - scan the source location, click on +1 and +2 button to fulfill the quantities and validate **Current behavior:** a backorder is created **Expected behavior:** no backorder should be created as we entered the right quantities of the picking **Cause of the issue:** the lines from comp B should not have been grouped in the barcode picking. When doing the same scenario but with product not tracked those lines are not grouped opw-4998766 Forward-Port-Of: odoo/enterprise#93947 Forward-Port-Of: odoo/enterprise#93262
This fix prevents website editing actions from trying to load administrator-only view data for non-admin users. Website editors can now update the menu bar without encountering an access error, improving reliability for day-to-day site management.
Original PR description
Scenario: - get a user with "Editor and Designer" and no admin rights - with this user, edit the website and change the menu bar Result: A traceback error is shown with this access error the logs: You do not have enough rights to access the field "visibility_password" on View (ir.ui.view). Please contact your system administrator. Operation: read Groups: allowed for groups 'Role / Administrator' Issue: In 9830f77d827c6efeb5f796caac604904350f5a80 the method ir.ui.view()._get_combined_archs was changed to prefetch more fields than before, but prefetching the "visibility_password" field was causing an access error when checking if we had access to it. Fix: prevent prefetching restricted fields. Note: the added test without the fix, fails because of the security warning error, and having the custom view still disabled. opw-4935489
This fixes an issue where users could not add a custom field from the optional columns menu in Knowledge article lists. The change ensures Studio correctly recognizes when the action can be edited, restoring the expected customization flow.
Original PR description
Steps to reproduce ================== - Install knowledge, web_studio - Go to knowledge > Articles - Click on the optional columns dropdown - Click on "Add Custom Field" => This action is not editable by Studio Cause of the issue ================== Since https://github.com/odoo/odoo/pull/205129/commits/c18e93191c516f6e37093f068e8934cba8495891 the event ACTION_MANAGER:UI-UPDATED is triggered before the list renderer has a chance to register for it. Solution ======== We don't actually need to listen to that event to get the info we need. The action xml_id was missing, but it was added in the view subenv config. opw-5066488 Forward-Port-Of: odoo/enterprise#94794
The Point of Sale now applies the same fiscal position tax rules as the accounting backend. This prevents customers from seeing one tax-inclusive price at checkout while the confirmed order shows different tax details later.
Original PR description
If a fiscal position is not related to any tax, when selecting said fiscal position in the pos, the tax from the product is kept. When looking at the paid order in the backend the tax is removed on…
If a fiscal position is not related to any tax, when selecting said fiscal position in the pos, the tax from the product is kept. When looking at the paid order in the backend the tax is removed on the order line and the price unit and price with taxes are different (although no tax recorder on the line). Steps to reproduce: ------------------- * Create a fiscal position and assign no tax to it * On the pos config, add this fiscal position and the domestic one to the available fiscal positions * Open pos session * Select a product that has a 15% tax * Change the fiscal position to the one just created > Observation: We still see that the tax is computed based on the 15% * Pay the order * Go see the order in backend > Observation: price unit: 100, no tax, price with taxes 115 Why the fix: ------------ A recent refactoring happened on the accounting side related to fiscal positions: https://github.com/odoo/odoo/commit/9a97157920c845120861dda49d81d3150e015974 https://github.com/odoo/odoo/blob/e284dfd80bde632e6446fc0b8d3276689da35200/addons/account/models/partner.py#L155-L163 The behavior after this refactoring is the following: When changing fiscal position: - If the original tax is available for the fiscal position, we use it - If the original tax is not available but the fiscal position has an available tax that is set to be replacement for the original one, we use the replacement tax - If the original tax is not available but the fiscal position has an available tax which is NOT a replacement for the original one, we keep the original one - If the fiscal position has no tax available, we remove the tax In this fix we apply the same logic inside the pos. Without the fix we would keep the original tax in the frontend but when passed in the backend the tax with fiscal position was recomputed with the logic from accounting. This explained the difference we observed. opw-4978056 Forward-Port-Of: odoo/odoo#223164
Brazilian service invoices using Avatax now clear taxes before calculating installment details. This prevents invoice rejection caused by mismatched installment and line totals, helping affected invoices process correctly.
Original PR description
Service invoices require us to send installments without taxes. If we include taxes we get an error: **Errors**: Rejection: Total Installments doesn’t match Total Lines ∑ installments[m]grossValue - ∑ (lines[n].lineAmount-line[n].lineTaxedDiscount) <> 0 This **PR** clears taxes before tax calculation to ensure the installments we send are correct. **task**-4761630 Forward-Port-Of: odoo/enterprise#95269 Forward-Port-Of: odoo/enterprise#85108
This update makes Odoo IoT boxes more reliable during upgrades and startup, preventing blank screens after checkout and avoiding future connection issues. It also ensures the IoT box remains reachable on the network and can correctly switch to the intended Odoo version.
Original PR description
This PR is made of 3 small commits: - `[FIX] iot_drivers: fix blank homepage after checkout` Due to the `odoo.service` starting before the `rc.local` file has finished updating the Odoo code, you can…
This PR is made of 3 small commits: - `[FIX] iot_drivers: fix blank homepage after checkout` Due to the `odoo.service` starting before the `rc.local` file has finished updating the Odoo code, you can end up with the old Python code running but the updated JS code loading in the browser. This can lead to a blank screen as a traceback occurs trying to read the MAC address. We fix this in two ways: - A quick fix, which is just making the JS code robust to the missing value to avoid crashing. - A proper fix that will require a new image, as it modifies the `odoo.service` file to add `rc-local.service` as a dependency. This means Odoo will not start until `rc.local` has finished executing. - `[FIX] iot_box_image: set http_interface explicitly` From Odoo 19.0, a warning is logged when your `http_interface` config setting is not explicitly set. From Odoo 20.0, the default value will change from `0.0.0.0` to `127.0.0.1`, which would break the IoT box as it would only listen to localhost requests. To fix this we explicitly set the `http_interface` value to `0.0.0.0` in `odoo.conf` so that the IoT box will listen to all requests. - `[FIX] iot_drivers: use FETCH_HEAD when checking out` The current 25.07 IoT box image cannot checkout to 19.0 databases due to an issue where the `git reset origin/19.0 --hard` command fails. In the other places where we use `git reset` in the IoT box this was fixed by using `FETCH_HEAD` (an alias for the last branch that was fetched). In this commit we apply the same fix to the `upgrade.py` checkout. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Czech VAT return entries without a partner VAT number are now consistently reported in section A5, regardless of invoice amount. Entries under special VAT regimes for travel services or margin schemes are also placed in A5, improving compliance with Czech reporting rules.
Original PR description
Before this commit, the l10n_cz VAT return report classified entries in section A4 if their total amount exceeded 10,000 CZK, and in section A5 if the amount was 10,000 CZK or less. - In l10n_cz, create an invoice with a cz partner without vat, over 10000. - In tax return the entry will be in section A4. With this commit: - Entries with no partner VAT number are now always classified under A5, regardless of the total amount. - Entries using a special VAT regime (l10n_cz_scheme_code), corresponding to Section 89 – travel services and Section 90 – margin scheme) are also always classified under A5, regardless of the amount. opw-4953787 Forward-Port-Of: odoo/enterprise#92833
4 changes
Resolved issues and error corrections
Quality checks for serial-tracked products now correctly record failed units when no failure location is configured. This prevents failed checks from being incorrectly counted as passed, giving warehouse and quality teams more reliable inspection results.
Original PR description
2 changes
Resolved issues and error corrections
This fix prevents barcode database updates from replacing an existing eCommerce product description. Businesses can safely use barcode lookup to fill missing product details without losing manually written website content.
Original PR description
Scenario: - enable "Barcode Database" in general settings - set an eCommerce description on a product - set a barcode in the database on that product (eg. 799439112766) Result: the eCommerce description has been overwritten by the barcode lookup result. Fix: do like other _update_product_by_barcodelookup methods and only update value that are not yet set. Note: also fixes the return of the overridden methods. opw-5061231 Forward-Port-Of: odoo/enterprise#94098
7 changes
Resolved issues and error corrections
The Indian reporting document summary is no longer recreated every time a user opens it, preventing accidental loss of existing summary data. The summary card also correctly avoids showing a missing-data label when the document summary already exists.
Original PR description
Issue: - Document summary was regenerated every time the user clicked on the document summary card. - This caused data loss for already existing summaries and unnecessary restart of the process. - 'Missing' tag appeared in document summary even when data was present. - Additionally, record_name was passed in _check_suite_in_gstr1_report, but as a computed field it never worked as intended. Fix: - Adjusted logic so the document summary is generated only when empty. - Subsequent clicks now reuse the existing summary instead of regenerating it. - No missing tag appears if document summary exists. - Replaced record_name with record_model to ensure correct record count and computed record name.
2 changes
Resolved issues and error corrections
Engineering change orders now correctly track small quantity changes when products use more precise units of measure. This prevents tiny but important bill of materials updates from being rounded to zero, improving accuracy for manufacturing teams.
Original PR description
Steps to reproduce the bug:
- Go to Decimal Accuracy → Product Unit of Measure → set digits to 4
- Go to Units of Measure Categories → select a unit → set rounding to 0.0001
- Create a storable product “P1” with a BoM:
- Component C1: 1.0000 unit
- Create an ECO for the BoM with type BoM update
- Start the revision
- Go to V2
Problem:
You cannot update the quantity of C1 to 1.0003 (for example) because the system uses the default 2 digits instead of the UoM digits.
opw-50824882 changes
Resolved issues and error corrections
This fix stops locked sanitized bank account numbers from being updated. It helps preserve the integrity of stored bank account information and reduces the risk of accidental or unauthorized changes.
Original PR description
Before this fix it was possible to update sanitized_acc_number even if it is locked.
Issue: --------------------------------- When a serial-tracked product has a quantity-type quality point and a check is failed, the system incorrectly marked it as passed. Steps to reproduce:…
Issue: --------------------------------- When a serial-tracked product has a quantity-type quality point and a check is failed, the system incorrectly marked it as passed. Steps to reproduce: --------------------------------- - Install the `quality_control` module. - Create a quantity-type quality point for a serial-tracked product and a receipt operation type. - Do not set a failure location on the quality point. - Create a receipt for the serial-tracked product with 3 units. - Assign serial numbers to the receipt. - Perform the quality checks: * Pass 2 checks * Fail 1 check - Result: all checks are marked as passed. Cause: --------------------------------- When a quantity-type quality check without a failure location is failed, the `do_fail` method directly calls `confirm_fail`. In this method, `qty_failed` was set to 0, which caused the system to treat the failed check as if all quantities had passed. Fix: --------------------------------- Ensure that `qty_failed` is correctly set in this case, so failed checks are properly recorded. This allows the quality control flow to behave as expected and gives users accurate results for passed and failed quantities.
Point of Sale now shows the optional product popup when an item is added by scanning its barcode, not just when it is selected manually. This gives cashiers a consistent checkout experience and helps ensure related add-on products are not missed.
Original PR description
Before this commit, the optional product popup was only displayed when adding a product by clicking on it. When the product was added through barcode scanning, the popup did not appear. This commit ensures that the optional product popup is consistently shown both when clicking on a product and when scanning its barcode. opw-5089175 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Czech VAT control statement entries without a customer VAT number are now placed in section A5 even when they exceed 10,000 CZK. Entries under special VAT regimes for travel services and margin schemes are also consistently reported in A5, helping businesses file more accurate VAT returns.
Original PR description
Before this commit, the l10n_cz VAT return report classified entries in section A4 if their total amount exceeded 10,000 CZK, and in section A5 if the amount was 10,000 CZK or less. - In l10n_cz, create an invoice with a cz partner without vat, over 10000. - In tax return the entry will be in section A4. With this commit: - Entries with no partner VAT number are now always classified under A5, regardless of the total amount. - Entries using a special VAT regime (l10n_cz_scheme_code), corresponding to Section 89 – travel services and Section 90 – margin scheme) are also always classified under A5, regardless of the amount. opw-4953787 Forward-Port-Of: odoo/enterprise#92833
Point of Sale now recalculates the amount due when an order that was already partially refunded is refunded again. This prevents customers or staff from being charged the original order total instead of the correct remaining balance.
Original PR description
Before this commit, refunding a partially refunded order did not update the total price based on the remaining lines. As a result, it was possible to pay the original total amount instead of the correct remaining amount. opw-5100790 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228186
Czech VAT return entries without a partner VAT number, or using special VAT regimes for travel services and margin schemes, are now consistently reported in section A5 regardless of invoice amount. This prevents affected invoices from being incorrectly placed in section A4, improving compliance and reducing manual corrections.
Original PR description
Before this commit, the l10n_cz VAT return report classified entries in section A4 if their total amount exceeded 10,000 CZK, and in section A5 if the amount was 10,000 CZK or less. - In l10n_cz, create an invoice with a cz partner without vat, over 10000. - In tax return the entry will be in section A4. With this commit: - Entries with no partner VAT number are now always classified under A5, regardless of the total amount. - Entries using a special VAT regime (l10n_cz_scheme_code), corresponding to Section 89 – travel services and Section 90 – margin scheme) are also always classified under A5, regardless of the amount. opw-4953787 Forward-Port-Of: odoo/enterprise#92833
This fix restores one-time payment options in Swiss payroll and prevents salary attachments from appearing where they should not. It helps payroll teams keep the employee payroll interface accurate and focused on relevant compensation items.
Original PR description
- Reintroduce one time payments - Blacklist salary attachments
Fixes the website editor so hovering over selectable options, such as blog post authors or contact records, previews the change before it is applied. This restores expected preview behavior and makes editing website content more reliable for users.
Original PR description
### [FIX] html_builder, website: pass `isPreviewing` to action with colors With the commit 4448303436fd2d5afe235263e13a9d5daa2d14e1, the `apply` method of actions should receive an argument…
### [FIX] html_builder, website: pass `isPreviewing` to action with colors With the commit 4448303436fd2d5afe235263e13a9d5daa2d14e1, the `apply` method of actions should receive an argument `isPreviewing`. This has not been done for `BuilderColorPicker`. This commit adds the argument `isPreviewing` when calling `apply` in `BuilderColoPicker`. task-4367641 ### [FIX] html_builder, *: make options with BuilderMany2One previewable *: web, website With the initial [website builder refactor], the options based on `BuilderMany2One` were not previewable (they were in the previous builder). This commit brings back that behaviour. To do so it adds props to `SelectMenu` and options to `Navigator` to receive the information needed for the preview Steps to reproduce: - On `/blog`, open website builder - Click on the author of a blog post - In the sidebar, click on "Contact" to open the dropdown - Hover other authors than the current one - Bug: the hovered author is not previewed in the dom (like in was in the previous builder) [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641 Forward-Port-Of: odoo/odoo#223369
Date, datetime, and date range fields now correctly apply values provided by the system, even when the value matches the field's original value. This prevents forms from showing a manually typed date when business logic has enforced a specific date, improving data accuracy and user confidence.
Original PR description
This commit allows date (i.e. date, datetime & daterange) fields to apply a value from the props (e.g. coming from an `onchange`), even if that value is the same as the initial one. Before this commit, it was not possible due to the fact that the date service responsible for the reactivity of the field was updating the input in an incorrect order, causing the field to display the 'input' value, and not the one enforced by the props. Task 4978896 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#227102 Forward-Port-Of: odoo/odoo#225841
Fixed an issue that could prevent users from opening the Inventory Valuation menu when a company did not have a valuation account configured. The report now handles the missing account safely, avoiding an error screen and keeping inventory valuation accessible.
Original PR description
Issue before this commit: ========================= Currently, when opening the Inventory Valuation menu without setting a Valuation Account in the settings, the system raises the error: `Cannot read…
Issue before this commit: ========================= Currently, when opening the Inventory Valuation menu without setting a Valuation Account in the settings, the system raises the error: `Cannot read properties of undefined (reading 'display_name').` Steps to Reproduce: ========================= - Install the account and stock_account modules. - Switch to another company where the default Valuation Account is not set. - Create a warehouse and a product with a cost. - Create and validate a receipt for that product. - Open the Inventory Valuation menu → traceback occurs. Cause of the issue: ========================= In this [PR](https://github.com/odoo/odoo/pull/224479), a new valuation report was added. At the [mentioned line](https://github.com/odoo/odoo/pull/224479/files#diff-8afed36c6f80919b83630d39c78510289ec8fecc632735d26824a84a517a1b7dR60), it's assumes the account always exists and attempts to access display_name directly, leading to the error. With This Commit: ========================= We ensure that display_name is only accessed if the account exists, preventing the traceback.
Czech VAT return entries without a partner VAT number are now placed in section A5 regardless of invoice amount. Entries under special VAT regimes for travel services and margin schemes are also consistently reported in A5, helping businesses produce compliant Czech VAT filings.
Original PR description
Before this commit, the l10n_cz VAT return report classified entries in section A4 if their total amount exceeded 10,000 CZK, and in section A5 if the amount was 10,000 CZK or less. - In l10n_cz, create an invoice with a cz partner without vat, over 10000. - In tax return the entry will be in section A4. With this commit: - Entries with no partner VAT number are now always classified under A5, regardless of the total amount. - Entries using a special VAT regime (l10n_cz_scheme_code), corresponding to Section 89 – travel services and Section 90 – margin scheme) are also always classified under A5, regardless of the amount. opw-4953787 Forward-Port-Of: odoo/enterprise#92833
The website shop sitemap now avoids a memory-heavy loading behavior when handling very large product catalogs. This helps prevent server crashes caused by search engines or other crawlers requesting the sitemap, improving availability for online stores.
Original PR description
### Issue Server crashes with MemoryErrors when a database has a large product catalogs. ### Solution This commit disables the prefetcher to avoid MemoryErrors when generating the sitemap for large product catalogs as web crawlers would continously crash the server when requesting the sitemap. ### References opw-5001680 opw-4955333 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228078 Forward-Port-Of: odoo/odoo#223054
The delivery packing action now applies a package only to the move line the user selected, instead of packing every line in the delivery. This prevents products from being grouped into the wrong package and helps keep shipment contents accurate.
Original PR description
Steps to reproduce the bug:
- Create two storable products, e.g., “P1” and “P2”.
- Create a delivery:
- Add one unit of each product.
- Add any carrier (e.g., DHL).
- Mark the picking as "To Do".
- Set the quantity to 1.
- The move lines are created.
- Click on the Moves smart button.
- Select any move line (ML).
- Click Put in Pack.
- A wizard is triggered.
- Select any pack.
Problem:
The pack is applied to both move lines instead of only the selected one.
opw-5104034Odoo now stops users from validating a stock transfer when there is no actual quantity to process. This avoids showing a confusing backorder prompt that cannot create a meaningful backorder, helping warehouse users catch the issue immediately.
Original PR description
### Steps to reproduce: - Create and confirm a delivery with 2 moves: - 1 x product 1 - 1 x product 2 - Set the quantity of product 2 to 0 and mark it as picked - Validate the transfer #### > The…
### Steps to reproduce:
- Create and confirm a delivery with 2 moves:
- 1 x product 1
- 1 x product 2
- Set the quantity of product 2 to 0 and mark it as picked
- Validate the transfer
#### > The backorder wizard open's even though there is nothing to validate. Creating a backorder does nothing.
#### Cause of the issue:
Since there is a picked move, the picking validation does not pick every moves in the `pre_action_done` hook keeping only moves with empty qty as picked:
https://github.com/odoo/odoo/blob/9b41eb38403e64091b74e1ae53c79488aa48b499/addons/stock/models/stock_picking.py#L1208-L1209 Then, only the picked moves are processed in there `_action_done`: https://github.com/odoo/odoo/blob/9b41eb38403e64091b74e1ae53c79488aa48b499/addons/stock/models/stock_move.py#L1914 https://github.com/odoo/odoo/blob/9b41eb38403e64091b74e1ae53c79488aa48b499/addons/stock/models/stock_move.py#L1929-L1937 Which leads to an empty picking validation.
opw-5076640
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr