Daily updates from Odoo
Saturday, April 4, 2026
6 changes · saas-18.4
Resolved issues and error corrections
This update fixes an issue on mobile devices where the buttons within the transfer chatter view were too small, causing text to overflow and making the interface difficult to use. The change ensures that buttons are properly sized and display all text clearly, improving the user experience on mobile.
Original PR description
Partial backport of d16480179ed73f25e0465e42c6fdef64e4fdc502 Steps to reproduce ================== - Navigate to Barcode, click on any transfer - Click on the name of the transfer in the header to open the form view - Scroll down to the chatter, the buttons are too small to contain the text, and much of the text flows over to other UI elements Cause of the issue ================== The barcode style override every buttons including the ones inside the chatter opw-6082959 Forward-Port-Of: odoo/enterprise#112581
Fixed an issue where the account balance in IAP (In-App Purchase) accounts would incorrectly reset to zero after saving, requiring users to refresh the page to see the actual balance. The balance now remains accurate immediately after saving the record.
Original PR description
Before this commit: When creating an `iap.account`, selecting a service(`service_id`) showed the correct balance. However, as soon as the record was saved, the balance would reset to 0, and users had to refresh the page to see the real value. With this fix, the balance now stays accurate after saving the record. Task [link](https://www.odoo.com/odoo/project.task/6004546) task-6004546 Forward-Port-Of: odoo/odoo#256589
This fix prevents files from becoming orphaned when attachment uploads encounter errors. Previously, if a file write operation failed (such as due to disk space issues), the system wouldn't properly mark the file for cleanup, causing it to remain on disk and block future uploads of the same file. The fix ensures files are marked for cleanup before the write operation, preventing disk space waste and upload failures.
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 an issue where POS orders created in Jordan before installing the EDI 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 regardless of when they were created.
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 Point of Sale when scanning GS1-encoded barcodes for products with variants and lot tracking enabled. The system was incorrectly trying to interpret lot numbers as product barcodes, causing the application to fail. The fix ensures the correct product information is passed through the barcode scanning process so variants can be properly configured.
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 mismatches, and exchange rate calculations. The fixes ensure that 5% tax rates are properly coded, invoice amounts are correctly stated in the invoice's currency rather than always in Polish Zloty, and currency conversion rates are calculated in the right direction. These corrections are essential for proper e-invoice submission through the KSeF system.
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