Wednesday, April 15, 2026
16 changes · 18.0
Resolved issues and error corrections
This update fixes an error in how Odoo calculates depreciation for companies with non-standard fiscal years. Previously, depreciation entries were missed for certain months, particularly at the beginning of the next fiscal year. The fix ensures accurate depreciation calculations based on the company's actual fiscal year start date.
Original PR description
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next…
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next fiscal year using `date_from + 1 year` instead of querying the actual next fiscal year. This causes entries for the months between the wrong and correct FY start (e.g. January-April) to be skipped entirely. Step to reproduce: - Create a company with a fiscal year starting in May (e.g. May 1st 2025 to 31st December 2025) - Create an asset with a start date in the 1 December 2025, with a 24 months duration and degressive method - Compute the board and observe that entries from January to April 2026 are missing Fix the FY boundary detection in _recompute_board to query the fiscal year containing the day after the current period end, revert the effective_start_date logic in _compute_board_amount that was masking the root cause, and move the prorata date clamping to _create_move_before_date where it is needed for disposal. opw-6016834 Forward-Port-Of: odoo/enterprise#113521
This update resolves an issue where barcode quantities were displayed with slight rounding errors due to how JavaScript handles decimal numbers. The fix ensures accurate quantity representation in the barcode interface, preventing discrepancies in inventory tracking. This improves data reliability for stock management operations.
Original PR description
**Steps to reproduce:** * Install `stock` module. * Go to Settings and enable: * Storage Locations (Warehouse). * Batch, Wave & Cluster Transfers. * Create a Product and set its on-hand quantity to…
**Steps to reproduce:**
* Install `stock` module.
* Go to Settings and enable:
* Storage Locations (Warehouse).
* Batch, Wave & Cluster Transfers.
* Create a Product and set its on-hand quantity to 60.
* Go to Inventory → Configuration → Operation Types and create a new operation type:
* Set Type of Operation to Internal Transfer.
* In the Barcode App tab, enable Group batch lines.
* Go to Inventory → Operations → Internal Transfers and create a new transfer:
* Select the newly created Operation Type.
* Add the created Product with quantity 4.4.
* Mark the transfer as To Do.
* Create another Internal Transfer with the same configuration:
* Select the same Operation Type.
* Add the same Product with quantity 48.8.
* Mark the transfer as To Do.
* Open the Internal Transfers list view.
* Select both created transfers.
* Click Action → Add to Wave Transfer.
* Choose A new Wave Transfer and confirm.
* In the popup, select both transfers and add them to the wave.
* Open the Barcode application.
* Open the created operation and select the Batch on the right side
to open the wave transfer in the barcode interface.
**Observed behavior:**
- The grouped line quantity is displayed as 53.99999996 instead of
the expected value(53.2).
**Cause:**
- When the Barcode app loads data,` _createState()` is executed,
which calls `groupLines()`.
- Inside this method, quantities are aggregated using standard
JavaScript floating-point addition:
https://github.com/odoo/enterprise/blob/08d0a7f480046bb489ca69e7b3535e99cb20eee5/stock_barcode_picking_batch/static/src/models/barcode_picking_batch_model.js#L204-L205
- Since JavaScript stores numbers as binary floating-point values,
decimals like 4.4 and 48.8 cannot be represented exactly.
Repeated additions accumulate precision errors, producing results
like 53.99999996 instead of 53.2.
**Fix:**
- Aggregate quantities using `formatFloat` with the barcode precision
before converting them back to floats
- `formatFloat` rounds the value according to the configured precision
of the barcode model, ensuring the intermediate result is normalized
after each addition. Converting the formatted value back with
`parseFloat` guarantees the stored number respects the expected
decimal precision and prevents floating-point accumulation errors.
---
opw-5932329This update resolves an issue where negative numbers in accounting reports (like customer statements) were incorrectly split across lines, making them difficult to read. The fix ensures that negative numbers are displayed as a single line, maintaining proper formatting and clarity in printed reports. This improves the user experience when reviewing financial data.
Original PR description
When printing accounting reports such as customer statements, a negative number may be split across two lines, leaving the minus sign on the first line and the amount on the second. Steps to reproduce: - Make an invoice for [Partner] with a total of 10.0 - Make another invoice for [Partner] with a total of 100.0 - Create a credit note for this last invoice - Open the customer statement report for [Partner] - Print PDF Issue: The first line of the partner section has fewer digits than the amounts of the subsequent journal items. On pdf, the column width is based on the smaller line, causing the longer negative strings to wrap and separate the minus sign from the amount. opw-5951300
This update fixes an issue where the namespace for sending credit notes to DIAN was incorrectly configured. The change ensures the correct namespace is used, resolving potential errors when submitting credit notes to the Colombian tax authority. This prevents disruptions in financial reporting and compliance.
Original PR description
Issue: Incorrect `sts` namespace raises several issues when sent to dian Steps to reproduce: - On a Colombian company - Create a credit note - Send to DIAN Current Behavior: - Credit note have `sts` namespace defined to `dian:gov:co:facturaelectronica:Structures-2-1` while their Extension node has another `sts` namespace to `http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures` Expected Behavior: - Only the top level Node should have `sts` namespace defined to `dian:gov:co:facturaelectronica:Structures-2-1`. It was forgotten that Credit Note were part of the Invoices in the last refactor. As it's the second time(odoo/enterprise#68619 3rd commit) it happens, I updated the test. opw-6077050
This update resolves an issue preventing the generation of session reports in the CO company setting for point-of-sale. The fix corrects a technical error that was causing a traceback when attempting to generate the report. Users can now reliably generate session reports after a sale is completed.
Original PR description
Currently when trying to generate the session report a traceback appears. Steps to reproduce: ------------------- * Install l10n_co_edi_pos * Switch to CO company * Open pos session * Make a sale * Close register * Generate session report > Traceback Why the fix: ------------ We get the sale details with: https://github.com/odoo/odoo/blob/0ce5baf2918960591284eb494d82dfef07043af0/addons/point_of_sale/models/report_sale_details.py#L429-L430 Where the config ids given to `get_sale_details` are given here https://github.com/odoo/odoo/blob/0ce5baf2918960591284eb494d82dfef07043af0/addons/point_of_sale/models/report_sale_details.py#L413-L414 From there we can't access any field from a list of number. opw-6049484
This update resolves a technical issue that caused an error when quickly reordering tasks within the Project module's Kanban view. The problem occurred due to a component being destroyed during a task movement process. The fix ensures this error is gracefully handled, preventing disruptions to task management.
Original PR description
Steps to reproduce: ---------------------------------------- 1. Install the Project module with the demo data 2. Go to Task > All Tasks> Kanban View 3. Move all the tasks to any one stage except one…
Steps to reproduce:
----------------------------------------
1. Install the Project module with the demo data
2. Go to Task > All Tasks> Kanban View
3. Move all the tasks to any one stage except one task
4. Now move that one task and quickly press (Alt + 1) to exit
Observation:
----------------------------------------
Traceback occurs:
```
Uncaught Promise > Component is destroyed
Occured on localhost:8069 on 2026-03-10 09:47:35 GMT
Error: Component is destroyed
```
Issue:
---------------------------------------
When dragging a record between groups, `moveRecord` calls `_resequence()`, which checks `canResequence()`
https://github.com/odoo/odoo/blob/f86baa6ba1c915145dbfe43b67de0eff13959e91/addons/web/static/src/model/relational_model/dynamic_list.js#L311-L314
For Project Tasks, `canResequence()` returns `true`, so the full async chain runs:
1. `rpc('/web/dataset/resequence')` — raw, unprotected call (succeeds)
2. `orm.read()` — protected by `useService` wrapper
If the user navigates away (ALT+1) between step 1 and step 2, the component is destroyed, and `orm.read()` throws Error('Component is destroyed') via `_protectMethod`
https://github.com/odoo/odoo/blob/f86baa6ba1c915145dbfe43b67de0eff13959e91/addons/web/static/src/core/utils/hooks.js#L106-L110
This error propagates up unhandled.
Solution:
---------------------------------------
Override `sortRecordDrop` in `ProjectTaskKanbanRenderer` to catch the 'Component is destroyed' error. Since the resequence RPC has already succeeded server-side, the follow-up `orm.read()` failure is harmless, the component is being destroyed anyway.
opw-5932085This update fixes an issue where incorrect pricing rules were being applied to products with multiple variants. The change ensures that the correct rule is selected based on the specific product variant, improving the accuracy of product pricing in the Point of Sale system. This resolves a potential discrepancy in sales pricing.
Original PR description
When a product has multiple variant, and each product.product has a specific rule in a pricelist. It was possible that the wrong rule is selected from `cachedPricelistRules` as it would contain all the rules for a product. Why the fix: ------------ We add a condition to make sure that the rule is linked to the specific product.product. runbot-108050
This update resolves an issue where empty attachments (like False/None) in PEPPOL invoices caused import errors and crashes. The fix now gracefully falls back to default journal and move type settings, ensuring invoices are created and any errors are logged. The underlying cause of the empty attachments is still being investigated.
Original PR description
Empty attachments (ex: False/None) could crash parsing during import, this commit falls back on default journal and move type in case of error, allowing the invoice to be created and the issue logged properly. Root cause of empty XML remains unclear, likely a 3rd party error. opw-6113211
This update fixes an issue where numbers in the domain selector and expression editor were not displayed correctly based on the user's locale settings. Now, numbers are formatted according to the user's chosen language, ensuring accurate data representation and a better user experience. This improves consistency and usability across different regions.
Original PR description
Before this commit, the domain selector (and expression editor) did not format numbers according to the localization parameters (decimal and thousands separators), while the parsing step did. After this commit, the value is displayed in the correct format to the user, while the expression remains unchanged. 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
This update corrects a technical error that prevented users from selecting stores when the store's address (city or street) was missing. The fix ensures the system handles empty address fields gracefully, preventing errors and improving the Click and Collect functionality. This resolves a bug reported in opw-6050137.
Original PR description
Issue: --- An owl error is raised in select store if the store's company location lacks city or street. Steps to reproduce: 1- Enable Click and Collect. 2- In pickup locations, set a company with an address with empty street or city. 3- Go to the shop. 4- Enable debug mode. 5- Select store. An owl error is raised due to not city and street not being string. opw-6050137
This update simplifies the process of reloading the chart of accounts by replacing a confusing error message with a direct guide to the relevant settings. The change provides clearer instructions for users, ensuring they can quickly update their localization apps and resolve potential issues.
Original PR description
Previously, when new taxes with new tax tags were introduced, reloading the chart of accounts would raise a generic UserError suggesting to update the localization app. This could be confusing for users, as it did not indicate which app needed to be updated. With this commit, the UserError is replaced by a RedirectWarning that guides users directly to the Apps menu with the relevant localization modules, making the resolution clearer and more user-friendly.
This update prevents issues caused by updating tax groups when associated accounts are modified. Specifically, it avoids triggering constraint errors related to account types, ensuring smoother tax group management. This change improves stability and reduces potential errors during chart updates.
Original PR description
Upon chart reload, accounts will not be updated (except for tax_ids), but tax groups are. If a tax group was changed to relate to a different account and this account was re-purposed (e.g.…
Upon chart reload, accounts will not be updated (except for tax_ids), but tax groups are. If a tax group was changed to relate to a different account and this account was re-purposed (e.g. account_type changed from an incompatible to a compatible type, the fact that the account is not updated will trigger constraints in the tax group when it is written. IOW, if the purpose of an account is not changed, its use should not be changed either. E.g.: 1f4710deb206736cd71580d8fd95552d9b7c8014 changed the value of `tax_payable_account_id` on tax group `tax_group_cofins_incl_goods` to `account_template_202011005` and the same commit changed the value of `account_type` on `account_template_202011005` from `liability_non_current` to `liability_payable`, triggering `_constrains_payable_receivable_account` (in 19.2: https://github.com/odoo/odoo/blob/e00dd21880c3c4e5c22d65567c700e02541f7259/addons/account/models/account_tax.py#L68). So here, we skip the update of relations to accounts on tax groups, if the account already exists.
This update resolves a visual inconsistency where styling applied to images (like rounded corners or shadows) was incorrectly carried over when the image was replaced with an icon. Now, icons will display without these image-specific styles, ensuring a cleaner and more consistent user experience.
Original PR description
### Steps to Reproduce: - Go to the To-do app and create a new task. - Upload an image. - Apply shape styling to the image (e.g., rounded, shadow, img-thumbnail). - Replace the image with an icon. ### Description of the issue/feature this PR addresses: - When an image had shape applied (such as rounded, rounded-circle, shadow, or img-thumbnail) and was replaced with an icon, those classes were carried over to the icon. ### Desired behavior after PR is merged: - Since these classes are specific to image shape styling, they are now removed when an image is replaced with an icon. task-6007631 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue that prevented demo flows from running correctly when new Peppol and Nemhandel responses were added. The team corrected a missing data key in the demo utilities, ensuring stable demo mode operation. This ensures demos accurately reflect the latest features.
Original PR description
With the recent addition of responses in Peppol and Nemhandel, we forgot to adapt the mocking data for demo flows, which resulted in tracebacks in demo mode.
This update fixes an issue where invoice PDFs generated from received Peppol invoices had incorrect address formatting. The change swaps the issuer and receiver addresses for a cleaner, more standard layout, improving readability and reducing confusion. This ensures invoices are presented clearly and accurately.
Original PR description
When an invoice is received through Peppol, it may not contain an embed PDF. If no, we create one. However, due to several complaints, this commit exchange the place of the issuer and receiver addresses and information. Company information were rendered in the header of the document through the external_layout. Switching to the internal layer avoid doing so. opw-5980655 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes a confusing tooltip from the calendar popover for boolean fields. The tooltip displayed unnecessary HTML content, creating a poor user experience. This change simplifies the calendar interface and improves usability.
Original PR description
Before this commit, the tooltip of a boolean field in calendar popover shows html content when the user hovers the boolean field. This commit removes the tooltip of boolean field in calendar popover since the information inside that tooltip is not really useful for the user. Issue found during the development of task-5994205 Forward-Port-Of: odoo/odoo#259011