Daily updates from Odoo
Saturday, April 4, 2026
13 changes · saas-19.1
Resolved issues and error corrections
This update fixes an issue where amounts with thousand separators (like 1,334.00) were incorrectly interpreted, leading to inaccurate reconciliation reports. A new function has been added to correctly parse these amounts, ensuring data integrity in financial reporting. This improves the reliability of our reconciliation processes.
Original PR description
When extracting amounts using a regex with a single capturing group, values containing thousand separators such as 1.334,00 or 1,334.00 were not correctly converted to floats. This could lead to…
When extracting amounts using a regex with a single capturing group, values containing thousand separators such as 1.334,00 or 1,334.00 were not correctly converted to floats. This could lead to incorrect amounts being interpreted in reconciliation models.
Added a new function `split_amount_str`in utils which will give
integer and decimal part for different number formats.
This is a heuristic approach, meaning it aims to provide the best
possible result for valid inputs. Invalid or ambiguous formats are
not guaranteed to be parsed correctly and may result in ('0', '0').
For the two capturing groups case, the first group is treated as the
integer part and the second as the decimal part, allowing users to
Explicitly split amounts like 9065 into 90.65 by using two groups
in their regex.
Examples:
EU format: 1.334,15 → 1334.15
US format: 1,334.15 → 1334.15
Implicit decimals: uid 01870912 0000009065 → 90.65 (using two groups)
Additional tests were added to ensure amounts with thousand separators
are correctly parsed.
Task [link](https://www.odoo.com/odoo/project/967/tasks/6026748)
task-6026748
Forward-Port-Of: odoo/enterprise#110410This update prevents the system from incorrectly syncing ‘e-Cobranza’ documents (collection notes) as vendor bills in the Uruguayan localization. This change aligns with how other related documents like ‘e-Remito’ and ‘e-Resguardos’ are handled, ensuring data consistency and accuracy.
Original PR description
This pull request improves the synchronization process of vendor bills within the Uruguayan localization (`l10n_uy_edi`). Currently, the system might fetch documents that are not technically bills during synchronization. With this change, the system will explicitly avoid synchronizing `e-Cobranza` (Collection notes or Receipts) documents as vendor bills. Reasoning: `e-Cobranza` documents function conceptually more like payment receipts rather than actual vendor bills. Pulling them into the system as bills creates inconsistencies. This update aligns the handling of `e-Cobranza` with the existing behavior for `e-Remito` (Delivery Guides) and `e-Resguardos` (Withholdings), which are also appropriately excluded from bill synchronization. **Related Tasks** LATAM Task: 1367 ADHOC Task: 58906 Forward-Port-Of: odoo/enterprise#100549
This change updates URLs used for testing Wise direct deposit integrations to reflect Wise's upcoming domain change. Replacing the old sandbox URLs prevents disruptions to testing and sandbox payment flows. Users may need to create a new sandbox account, but the impact is expected to be minimal.
Original PR description
Wise is deprecating their legacy sandbox (sandbox.transferwise.tech) in June 2026. Replace all sandbox URLs with the new wise-sandbox.com domain to avoid breaking test/sandbox payment flows. - API: api.sandbox.transferwise.tech → api.wise-sandbox.com - Portal: sandbox.transferwise.tech → wise-sandbox.com Note: API keys from the legacy sandbox are not transferable to the new environment. Affected users will need to create a new sandbox account, though the impact should be minimal as most customers do not actively use the sandbox. task-6074132 Forward-Port-Of: odoo/enterprise#112921
This update resolves an issue where the 'Edit Properties' button was unresponsive in the project settings. The fix ensures that this button is only displayed when relevant data is present, streamlining the user experience for managing database properties. This improves usability for users configuring their projects.
Original PR description
Steps to produce: --- - Install `Databases` modules. - Go to project > Switch to list view and open project. - Click on the gear icon > Click `Edit Properties.` Observation: --- - Clicking `Edit…
Steps to produce: --- - Install `Databases` modules. - Go to project > Switch to list view and open project. - Click on the gear icon > Click `Edit Properties.` Observation: --- - Clicking `Edit Properties` does nothing. Root cause: --- - The `Edit Properties` action appears whenever a properties field is present in the view. - Currently, in `project.project` the field `database_kpi_properties` is added from database module (See [1]). - Here at [2], the field is added in `edit_project` view. - However, the field is only visible when `database_hosting` is set, and its value is different from `other`. Solution: --- - Patched `FormController.getStaticActionMenuItems()` and added a condition to make the `addPropertyFieldValue` menu item unavailable when the current model is `project.project`. [1]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/databases/models/project_project.py#L36 [2]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/databases/views/databases_project_views.xml#L158 Note: --- - Also found that, clicking `Edit Properties` from a page other than the KPI page does nothing. We could either show a guiding `dialog box` or limit the visibility of `Edit Properties` to the KPI page only. opw-5933007 --- Forward-Port-Of: odoo/enterprise#108056
This update fixes an issue where incorrect DTE (Digital Tax Document) XML files received by the system were causing the creation of unnecessary invoices. The system now automatically discards these invalid DTEs, preventing incorrect data from being processed and ensuring accurate accounting. This improves data integrity and reduces potential errors.
Original PR description
A supplier DTE xml should be discard when being fetched by a DTE incoming server if it has the wrong document type, meaning no account move should be created from it. Steps: - Have purchase journal using documents - Setup an incoming mail server, with DTE option enable, with email address X - Send an email to X with a supplier DTE xml of type 52 (TipoDTE element) - Fetch mails from the incoming server -> a bill has been generated and filled, it shouldn't Cause: The check on document type has been removed with the refactor 42744fcecdbd36ea0101070c68299227a9f204a6 Fix: Reintroduce the check in `_process_incoming_supplier_document` before creating any record opw-5978959 Forward-Port-Of: odoo/enterprise#112877
This update adds a specific line item to the CH balance sheet report to accurately reflect Treasury Shares (account 2980). Previously, this account was handled differently, and this change ensures correct reporting of equity balances for Swiss companies. It's a necessary correction to improve financial reporting accuracy.
Original PR description
This commit adds a dedicated report line for account 2980 (Treasury shares) to the CH balance sheet report. Account 2980 was previously included in the Legal reserves report line via the old formula:…
This commit adds a dedicated report line for account 2980 (Treasury shares) to the CH balance sheet report.
Account 2980 was previously included in the Legal reserves report line via the old formula:
```py
[('account_id.code', '>=', '290'), ('account_id.code', '<', '2991'), ('account_id.account_type', '!=', 'equity_unaffected')]
```
In recent commit https://github.com/odoo/enterprise/pull/102247/changes/81bcf433e909ce6ec56af484e9dd59a47fc87c98 the formula was narrowed down to :
```py
[('account_id.code', '>=', '290'), ('account_id.code', '<', '2970')]
```
And account 2980 was no longer considered.
Rather than adding it to the Legal reserves formula, a dedicated Treasury shares report line (CH_290_C) has been added under report line CH_290. New line as account 2980 represents a correction of equity (negative item) and is conceptually distinct from legal reserves. The parent line aggregation formula has been updated accordingly:
```py
CH_290_A.balance + CH_290_B.balance + CH_290_C.balance
```
see affected account: https://github.com/odoo/odoo/blob/19.0/addons/l10n_ch/data/template/account.account-ch.csv#L108
Forward-Port-Of: odoo/enterprise#111302A thin line was appearing on the Bold 10 shape when used in website banners, depending on padding, size, and screen resolution. This fix adds an overlap adjustment to the shape to eliminate the unwanted line and improve the visual appearance of websites using this design element.
Original PR description
Steps to reproduce: - Enter website edit mode - Insert `s_banner_connected` snippet - Add "Bold 10" shape (`19.svg`) - Depending on padding, size, resolution etc. a thin line appears This commit adds an overlap to fix the apparition of the line. | Before | After | |--------|--------| | <img width="1919" height="861" alt="image" src="https://github.com/user-attachments/assets/06ecf9c4-f9d8-44bd-b48f-a3d8f559d973" /> | <img width="1918" height="847" alt="image" src="https://github.com/user-attachments/assets/1bda5da4-53f4-4105-9af2-06a57da67d0a" /> | Forward-Port-Of: odoo/odoo#257616
This fix prevents files from becoming orphaned when an error occurs during file upload. Previously, if a file write operation failed (such as due to disk space issues), the system wouldn't clean up the incomplete file, causing storage waste and blocking future uploads of the same file. Now files are properly marked for cleanup before the write operation begins, ensuring they're removed if something goes wrong.
Original PR description
If an error occurs during the file write operation, the file will not be marked for garbage collection, which can lead to orphaned files taking up disk space or blocking other same file to be written. Step to reproduce the issue: 1. Create an attachment with a large file (e.g., 100MB) and save 2. During the file write operation, simulate an IOError (e.g., by filling up the disk space or changing file permissions) 3. The file will not be marked for garbage collection, and it will remain 4. Further attempts to create this same attachment will result in error: "The attachment collides with an existing file." opw-6055037 opw-5907025 Forward-Port-Of: odoo/odoo#257384 Forward-Port-Of: odoo/odoo#257274
This fix resolves a problem where copying and pasting text in certain website builder elements (like buttons and footer text) was incorrectly adding paragraph formatting. The editor now properly handles inline elements without wrapping them in unwanted paragraph tags, making the editing experience more intuitive and preventing unintended formatting changes.
Original PR description
Since [website builder refactor], the editor wraps inline elements at the root of an editable boundary. This is causing issues in website builder when the root element is not supposed to contain `p`…
Since [website builder refactor], the editor wraps inline elements at the root of an editable boundary. This is causing issues in website builder when the root element is not supposed to contain `p` or `div` elements (added to wrap the inline elements). This behavior can be configured globally with `allowInlineAtRoot`. And since 6bc5946796a364634cb5eb217e61a5b882a1b6b2, it can be configured per-element with a "predicate" resource. This commit adds a predicate to allow inline at root of editable when the root is (according to its tag) not supposed to contain `p` or `div` elements. Steps to reproduce: - Open website builder on a product page - Select text in "Add to cart" button - Copy - Paste - Bug: a `p` element is created (on master) - Open website builder - Select "Company" below footer - Copy - Paste - Bug: a `p` element is created [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-5868460 Forward-Port-Of: odoo/odoo#257512 Forward-Port-Of: odoo/odoo#247231
This update improves how the "My Team" filter works in Live Chat agent reports. Instead of grouping by department, the system now uses a manager-based hierarchy, showing each agent their own records plus records of employees they directly manage. This provides a more accurate and intuitive view of team performance data.
Original PR description
Replace the department-based domain with a hierarchy-based domain. The new filter includes the current user's records and the records of employees whose manager is the current user. follow-up of https://github.com/odoo/odoo/pull/253567 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#257548
This fix resolves an issue where POS orders created in Jordan before installing the electronic invoicing module could not be submitted to JoFotara due to missing unique identifiers. The system now automatically generates these identifiers when needed, ensuring all orders can be successfully submitted to the tax authority.
Original PR description
Currently, POS orders in Jordan do not have a UUID if they were created before installing the module. This causes submission failures to JoFotara. Steps to reproduce: - Create a POS order in Jordan without the module l10n_jo_edi_pos installed - Install l10n_jo_edi_pos - Try to submit the order to JoFotara, it fails due to missing UUID with the error "Invoice UUID is required" This fix force a computation of the order UUID when we add the header node, to ensure that this will not cause submission failures to JoFotara. opw-6041688 Forward-Port-Of: odoo/odoo#255996
This fix resolves a crash that occurred in the Point of Sale system when scanning GS1-formatted barcodes for products with variants. The issue happened because the system was incorrectly trying to look up lot numbers as product barcodes, causing the application to fail. The fix ensures the correct product information is passed through the system so variant selection works properly.
Original PR description
**Steps to reproduce:** * Install `point_of_sale` module. * Go to Settings: * Enable Lots & Serial Numbers. * Enable Variants. * Set Barcode Nomenclature to Default GS1 Nomenclature. * Create a…
**Steps to reproduce:**
* Install `point_of_sale` module.
* Go to Settings:
* Enable Lots & Serial Numbers.
* Enable Variants.
* Set Barcode Nomenclature to Default GS1 Nomenclature.
* Create a product:
* Enable Track Inventory set to By Lots.
* Under Attributes & Variants:
* Add an attribute with two values and save.
* Generate product variants:
* Open one variant and set barcode to 5123648695416.
* Update inventory:
* Go to the main product (template).
* Update On Hand Quantity:
* Update On Hand Quantity with a lot/serial number:
010512364869541610784512.
* Select the variant with the defined barcode.
* Under Point of Sale tab:
* Set a POS Category.
* Open a POS session and scan:
010512364869541610784512.
**Observed behavior:**
* Scanning the GS1 barcode in POS raises a traceback:
*TypeError: Cannot read properties of undefined (reading
'product_template_attribute_value_ids')*.
**Cause:**
[Scans GS1 barcode: 010512364869541610784512]
│
├─ ProductScreen._barcodeGS1Action(parsed_results)
│ • product = await _getProductByBarcode(productBarcode) ✅ found
│ • calls `addLineToCurrentOrder(vals, { code: lotBarcode })`
│ ⚠️ only `lotBarcode` passed, `productBarcode` discarded
│
├─ PosStore.addLineToCurrentOrder() → addLineToOrder()
│ • product has variants → isConfigurable() = true
│
├─ PosStore.handleConfigurableProduct()
│ • calls openConfigurator(productTemplate, { ...opts })
│ opts = { code: lotBarcode }
│
└─ PosStore.openConfigurator()
• opts.code = lotBarcode → truthy → enters if(opts.code) branch
• getBy("barcode", opts.code.base_code)
• getBy("barcode", "784512") ← "784512" is a LOT number, not a product barcode!
→ returns undefined ❌
• product packaging lookup also fails → undefined ❌
• product = undefined
│
└─ attributeLinesValues.map(values =>
values.filter(value =>
product.product_template_attribute_value_ids.includes(value)
^^^^^^^ undefined → 💥 TypeError
**Fix:**
* Pass the product from `handleConfigurableProduct` to the configurator.
* If no product is found using `opts.code`, use the passed product
instead.
---
opw-6031909
Forward-Port-Of: odoo/odoo#257227
Forward-Port-Of: odoo/odoo#254572This update fixes three critical errors in Polish e-invoice (FA3) generation that were causing incorrect tax codes, currency misstatements, and exchange rate calculations. These corrections ensure that invoices with 5% taxes, foreign currencies, and custom exchange rates are now generated correctly for KSeF submission.
Original PR description
**PROBLEM** 1. 5% ta have the wrong code `zw` (tax exempted), it should be `5` (small typo in code). 2. P_15 should be stated in the invoice currency, and not always in PLN (company currency). 3. KursWalutyZ is not right, it's the PLN->XXX rate (meaning we need to do PLN amount * PLN->XXX rate to get XXX amount, where XXX is the invoice currency) but it should be the XXX->PLN rate. **STEP TO REPRODUCE** 1. install l10n_pl_edi 2. Install the test certificate to send e-invoice (more info about how to do that in the chatter of the bug ticket). 3. Create an invoice with a line with a 5% tax, and in another currency than PLN with a custom currency rate. 4. Send the e-invoice using KSeF. 5. Open the xml attached in the chatter, and notice it has the problems listed above. Ticket [link](https://www.odoo.com/odoo/project.task/6075221) opw-6075221 Forward-Port-Of: odoo/odoo#256906