Monday, December 1, 2025
17 changes · 19.0
Resolved issues and error corrections
This update fixes an issue where tasks created from sales order lines weren't automatically reflecting the correct number of hours. Previously, allocated hours were incorrectly set to zero for certain product types. Now, the task's allocated hours will accurately match the quantity of the sales order line, ensuring accurate time tracking for service-based projects.
Original PR description
To reproduce: ============= - Create service product with `service_tracking = task_in_project` and `service_type = manual` - Create a SO with this product and set quantity on the line - Confirm the SO - check the created task, allocated hours is 0.0 instead of the quantity of the SO line Problem: ======== When creating tasks from SO lines, allocated hours is initialized to 0 then computed based on the SOL quantity except when the product's service_type is 'milestones' or 'manual'. Solution: ========= Following the logic in `write` method of `sale.order.line`, the allocated hours should be set to the SOL quantity. opw-5153467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237398 Forward-Port-Of: odoo/odoo#234524
This update fixes an error in the French payroll module that prevented users from correctly calculating payslips. The issue stemmed from an outdated reference to 'contract' instead of 'version' within the module's data files. This change ensures accurate payroll processing for French companies.
Original PR description
Steps to reproduce: 1. Open database with version saas-18.4 2. Install module l10n_fr_hr_payroll_with_accounting 3. Make sure that your company's country is France. 4. Set `Salary Journal` in:…
Steps to reproduce: 1. Open database with version saas-18.4 2. Install module l10n_fr_hr_payroll_with_accounting 3. Make sure that your company's country is France. 4. Set `Salary Journal` in: `Configuration` -> `Structure` -> `FR: Employe Carde` -> `Employe Carde` 5. In Payroll app create a payslip for any employee having contract. 6. Make sure in `other inputs` you make new type and in that in the `availability in structure` has Employee cadre chosen. 7. Now with that Salary Input type click on `Compute sheet` button. 8. The `Invalid Operation` error card will appear. **Description:** In saas-18.4, the model hr.contract was [changed](https://github.com/odoo/upgrade/blob/fa44eb03c2b46d948e20dc6f5ac01dca2b625b90/migrations/hr/saas~18.4.1.1/pre-migrate.py#L41) to hr.version . All related code https://github.com/odoo/enterprise/commit/46052c4bc5ad1bd2549a6125202e0671b56beac8 was updated to use version instead of contract. in this commit. However, in the module l10n_fr_hr_payroll, there where some fields which is still using `contract` to refer other fields . https://github.com/odoo/enterprise/blob/e29aadef1a81c662d9a4d33879b440dbe4390c0b/l10n_fr_hr_payroll/data/l10n_fr_hr_payroll_employe_cadre_data.xml#L130 Because of this, Odoo raises the error `Wrong python code name 'contract' is not defined when evaluating the code`. I have fixed the issue by updating the name from contract to version in that module contract to version. opw: [5259362](https://www.odoo.com/odoo/project/70/tasks/5259362) Forward-Port-Of: odoo/enterprise#100112
This update fixes an error in how Odoo handles invoices for customers in the UAE. Previously, invoices issued to related contacts were incorrectly labeled as 'Simplified Tax' invoices. Now, the system uses the customer's commercial contact information to accurately determine whether an invoice should be a 'Tax' or 'Simplified Tax' invoice, ensuring proper accounting and compliance.
Original PR description
Before this commit: - If an invoice is issued to a related contact of a company contact, it is labeled as a 'Simplified Tax' invoice. This is incorrect since the invoice is being issued to the related company on behalf of the company, so it should be a 'Tax' invoice. After this commit: - The commercial_partner field is now used to decide whether an invoice is a 'Tax' or 'Simplified Tax' invoice. task-5366608
This update prevents the loss of CUFE codes during DIAN invoice processing for Colombian companies. The previous process incorrectly removed the code due to a technical issue, now fixed to ensure accurate reporting and compliance. This resolves a critical bug impacting financial data integrity.
Original PR description
This issue requires a valid Colombia DIAN certificate and credentials to reproduce. Access to the Odoo Knowledge article *[CO] EDI – DIAN* is necessary for the setup. With `l10n_co_dian` installed…
This issue requires a valid Colombia DIAN certificate and credentials to reproduce. Access to the Odoo Knowledge article *[CO] EDI – DIAN* is necessary for the setup. With `l10n_co_dian` installed and a Colombian company: - Set up the DIAN Sales journal with the correct *Technical Key / Technical Control Key* as described in the article. - Ensure that each invoice name follows the required format. - Create a commercial invoice in the DIAN Sales journal (invoice date set in the past) and send it to DIAN. - Create the corresponding bill by copying the invoice reference and the CUFE code, then acknowledge receipt. - Run the server action **“Colombian EDI: Update Invoice Commercial States”**. Repeat this process at least twice. The CUFE code on the older invoice is removed. The server action calls `_l10n_co_dian_cron_update_event_status()`, which triggers `l10n_co_dian_action_update_event_status`. In this method, we remove `l10n_co_dian_document_ids` from moves considered duplicates. This deletion removes the `document_id` from the older move since it is treated as a duplicate of the newer one (both are in the “sent” state). However, in the compute method for `l10n_co_edi_cufe_cude_ref` (`_compute_l10n_co_dian_cufe`), we always reset `l10n_co_edi_cufe_cude_ref` to `False` before checking documents. Since the oldest move ends up with no documents, it never enters the loop and the CUFE code is lost. opw-5257129
This update optimizes how the product configurator popup loads in Point of Sale, making the system faster and more responsive. Previously, the system was slow when calculating exclusions for product attributes due to an inefficient search process. This change improves the overall user experience and reduces potential delays during sales transactions.
Original PR description
Before this commit, to compute the exclusions of a ptav, it would loop through all ptav records to find those that exclude the current one. This could be slow when there are many attributes and values. opw-5230890 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a bug where 'Cash on Delivery' was incorrectly offered for 'in-store' delivery types. The fix ensures that cash on delivery is only available when the delivery type is set to 'pick up in store', streamlining the checkout process for customers using this payment method. This improves the overall customer experience.
Original PR description
### Issue: In this issue, `allow_cash_on_delivery` is allowed when delivery type is pick up in store. #### Steps to reproduce: 1. Create a `fixed_price` delivery method 2. Check `Cash on delivery` checkbox 3. Change the delivery type to `in_store` and configure it 4. Activate cash on delivery payment method 5. Choose a storable ptoduct on the /shop, checkout with a created dm and proceed to payment 6. Observe that you see the 'cash on delivery' pm for pickup in store. Currently, `allow_cash_on_delivery` is invisible when `delivery_type` is set to `in_store`. However, it's not set to `False`, once the type is changed to `in_store`. opw-5258535 Forward-Port-Of: odoo/odoo#235434
This update resolves an issue where background blur in video calls would cause streams to freeze when users switched tabs. By using a separate worker thread for frame scheduling, the system now maintains a consistent video stream, ensuring a smoother and more reliable experience during calls, regardless of tab activity.
Original PR description
**Description of the issue/feature this PR addresses:** This PR fixes an issue where the video stream freezes when the background blur effect is enabled and the user switches to another browser tab…
**Description of the issue/feature this PR addresses:** This PR fixes an issue where the video stream freezes when the background blur effect is enabled and the user switches to another browser tab during video calls. **Current behavior before PR:** When background blur is enabled during a video call, the user’s video stream freezes if they switch to another browser tab. This happens because currently frame scheduling relies on `requestAnimationFrame` and `setTimeout`, which modern browsers pause or throttle in inactive tabs to conserve system resources and battery life. **Desired behavior after PR is merged:** The user’s video stream continues to render with the background blur effect, even when the browser tab is inactive. This is achieved by moving the frame scheduling logic to a Web Worker, which runs in a separate thread and is not subject to browser throttling. As a result, a consistent frame rate is maintained at all times. task-[4781227](https://www.odoo.com/odoo/project/1519/tasks/4781227) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226455
This update resolves an issue where a new order was incorrectly created when the 'Skip Preview Screen' option was enabled in the restaurant POS. The fix ensures that orders are only initialized when a table is selected or a floating order is created, preventing data access errors and improving stability. This change primarily impacts the restaurant POS experience.
Original PR description
**Steps to reproduce:** - In the config, click the ePos Printer checkbox - Also check Automatic Receipt Printing and Skip Preview Screen - Put a default preset with Name as it's identification - Go…
**Steps to reproduce:** - In the config, click the ePos Printer checkbox - Also check Automatic Receipt Printing and Skip Preview Screen - Put a default preset with Name as it's identification - Go in the restaurant and make a sale, pay for it - When going back to the floor plan, a traceback appears **Why the fix:** This current problem arises because we are trying to access the current order, but we are on the floor plan, so there is no current order yet. The order is undefined, so we try to access *undefined.floating_order_name* and a traceback appears. But the root issue is deeper than this. In the restaurant, the order is initialized when clicking a table, or when we create a floating order. But when the Skip Preview Screen option is enabled, we try to initialize the order right after the last order has been validated, like we do it in the normal PoS. Doing this, we will try to handle the preset selection way too early, as the order is not fully initialized yet, and we will try to access data that have not been set yet. The current error is not the only one we have with this setup, as other errors also arise if we bypass this specific error. To fix this, we are now only initilizing the new order when we click on a table that has no order or when making a floating order. We do not create a new order after the validation of the last one, even if the Skip Preview Screen option is enabled. This is only true in the restaurant, as we keep on initializing a new order after the validation in the regular PoS. Before this commit, we also tried to create a new order when opening the restaurant from the frontend (see image below), which resulted in a traceback. We now only create a new order if the default screen is different from the Floor Screen. <img width="375" height="249" alt="image" src="https://github.com/user-attachments/assets/e38520f6-81e2-471e-a987-98d9426a6493" /> Starting in version 19.0, there is another waiting screen after paying and before going back to the floor plan, which handles things, so the bug is not present anymore. But the traceback we get when opening the register from the frontend is still present in future versions. opw-5131309 Forward-Port-Of: odoo/odoo#230796
This update resolves an issue where the time calculations for operations on Bills of Materials (BoMs) were inaccurate when decimal quantities were used. The fix ensures that operation times are now correctly computed, leading to more precise production planning and costing. This improves the reliability of BoM-based reports and calculations.
Original PR description
When a BoM has a decimal quantity, the operations' times are not correctly computed. task: 5366973 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update streamlines the process for correcting invalid financial statements. Previously, users were directed to a view that couldn't be edited, requiring extra steps to fix errors. Now, the alert automatically directs users to the list view, allowing for immediate correction and saving time.
Original PR description
When the dashboard shows an invalid statement, clicking the alert redirected users to the kanban view of statements. That view does not allow editing or performing any corrective actions, forcing users to manually switch to the list view to fix the invalid entries. This commit updates the 'Invalid Statement(s)' alert so it redirects directly to the list view, allowing users to correct the statements without extra navigation. task-5346063
This update resolves a bug that occurred when calculating inventory values (FIFO method) due to a potential division by zero. When a stock move results in a zero quantity, the system now defaults to using the product's standard price instead, ensuring accurate valuation calculations. This improves the reliability of inventory reporting.
Original PR description
In some cases an incoming FIFO move can end up with a valued quantity of 0 (e.g. partial receipts or leftover move lines).
The valuation code was still trying to compute `value / qty`, which caused a `ZeroDivisionError`.
```py
File "/home/odoo/src/odoo/19.0/addons/stock_account/models/product.py", line 169, in _compute_value
product.avg_cost = product._get_standard_price_at_date()
File "/home/odoo/src/odoo/19.0/addons/stock_account/models/product.py", line 230, in _get_standard_price_at_date
return last_in._get_value(at_date=date) / last_in._get_valued_qty()
ZeroDivisionError: float division by zero
```
Fallback to the product’s standard price when the last incoming move has no valued quantity.
opw-5223443
upg-3275142
tbg-2284
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves a bug that prevented bank statement reconciliations from completing when using the 'Set Account' feature. The issue stemmed from the system not properly handling deleted reconciliation models, leading to errors about duplicate names. The fix ensures that reconciliation models are named uniquely, preventing these failures.
Original PR description
It may occur that when using 'Set Account' to reconcile a bank statement the reconciliation fail due to error "The operation cannot be completed: A reconciliation model already bears this name" Steps…
It may occur that when using 'Set Account' to reconcile a bank statement the reconciliation fail due to error "The operation cannot be completed: A reconciliation model already bears this name" Steps to reproduce: 1. Create a current liability, reconciliable account "455010 My Account" 2. Create 2+ with a common labels (TEST RECONCILIATION) 3. Use "Set Account" button to reconcile the first transaction with account 455010. 4. Repeat 2-3 with a shorter label 5. Open Reconciliation models for the Journal and delete the one named "455010 My Account" 6. Repeat 2-3 with an even shorted label Issue: Reconciliation will be blocked by error during automatic creation of reconciliation model Analysis: It occurs because we don't take into account that old reconciliation models may have been deleted, so even if we count a singe record it may have already been labeled "<account_name> (1)" Improved the naming by looking at the existing models and increasing the counter if necessary opw-5184696 Forward-Port-Of: odoo/enterprise#100468 Forward-Port-Of: odoo/enterprise#98785
This update fixes a bug that prevented users from successfully validating returns after duplicating and changing products within a picking. The fix ensures accurate average price calculations by limiting stock move usage to the same product, preventing UoM errors and improving return processing reliability.
Original PR description
When duplicating a delivery linked to a sale order and changing the product on the duplicated picking, validating the return could lead to an error when validating the original picking of the initial…
When duplicating a delivery linked to a sale order and changing the product on the duplicated picking, validating the return could lead to an error when validating the original picking of the initial product. The issue occurred because the average price computation was mixing stock moves of different products when consuming valuation layers, leading to a UoM singleton error. Steps to reproduce: - Create storable products P1 and P2: - Category: AVCO - P1 UoM: Unit - P2 UoM: Dozen - Create a sale order with 1 unit of P1 - Confirm the SO - Open the generated picking - Duplicate it → a new picking is created and still linked to the same SO - Change the product on the duplicated picking to P2 - Confirm and validate it - Create a return on this picking and validate it - Go back to the original picking of P1 and try to validate it Problem: A UserError is raised due to mixed products in the average price computation, resulting in a “Expected singleton: uom.uom(...)” This fix ensures that average price is computed only using stock moves belonging to the same product. opw-5027089 Forward-Port-Of: odoo/odoo#236706
This update corrects a bug where credit notes weren't automatically generating deferred revenue entries. The system was incorrectly using a setting designed for invoices. Now, credit notes will properly create deferred revenue entries when configured to 'On bill validation', ensuring accurate accounting for deferrals.
Original PR description
The system incorrectly uses the `Deferred Expense Entries` configuration to determine whether to create deferrals for credit notes, while it should follow the `Deferred Revenue Entries` setting, as invoices do. As a result, deferred entries for credit notes are not created when expected. Steps to reproduce: - Go to Accounting → Configuration → Settings. - In the Deferred Expense Entries section, set Generate entries to: Manually & Grouped - In the Deferred Revenue Entries section, set Generate entries to: On bill validation - Navigate to Accounting → Customers → Credit Notes. - Create a credit note with at least one line containing Date From and Date To (i.e., deferrable line). - Validate the credit note. - No deferred revenue entries are created. Ticket [link](https://www.odoo.com/odoo/project.task/5187051) opw-5187051 Forward-Port-Of: odoo/enterprise#100211
This update optimizes how Odoo renders message lists, resulting in a faster loading experience. The change reduced rendering time from 374ms to 315ms on a laptop with 75 messages, improving user performance. This enhancement contributes to a smoother and more responsive user interface.
Original PR description
374ms to 315ms, laptop, 75 msgs Task-5265271
This update resolves an issue preventing the correct transmission of data related to the Swiss Elm system. The fix ensures that necessary fields within the payroll module are accessible, allowing for accurate reporting and compliance with Swiss tax regulations. This ensures the continued proper functioning of the HR payroll calculations.
Original PR description
Forward-Port-Of: odoo/enterprise#100939
This update significantly speeds up the "reply" click handler in the email interface. Previously, the system unnecessarily processed all emails to determine which ones to visually highlight. The change now only renders the selected email, resulting in a much faster response time – reducing processing time from 320ms to 60ms with 125 messages loaded.
Original PR description
Before this commit, message action "reply" click handler could be slow. This happens because visually all messages but the one to reply is selected, and non-selected messages have their opacity reduced. The reduced opacity was triggered from re-rendering all the message, which all observe `thread.composer.replyToMessage` to compare with themselves. This is quite inefficient, especially when lots of messages are loaded, just to reduce opacity of all but the selected message to reply. This commit improves by rendering only the selected message, and adapt style of all other messages in CSS. With about 125 messages loaded, click handler timing goes from about 320ms to 60ms. Task-5262770