Daily updates from Odoo
Wednesday, December 10, 2025
8 changes · master
Resolved issues and error corrections
This update fixes an issue where scanning a lot twice during the barcode picking process created an unnecessary backorder. The fix ensures that quantity updates are applied correctly to the relevant lines, preventing this error and streamlining the picking workflow. This improves order fulfillment accuracy.
Original PR description
**Steps to reproduce:** - create a product tracked by lot - create a lot with a quantity of 2 - create a new sale order - add two sale order lines, both for a quantity of 1 of the product - confirm -…
**Steps to reproduce:** - create a product tracked by lot - create a lot with a quantity of 2 - create a new sale order - add two sale order lines, both for a quantity of 1 of the product - confirm - open the picking in barcode - scan the stock location - scan the lot - scan the lot another time - validate **Current behavior:** a backorder is created **Expected behavior:** No back order should be created **Cause of the issue:** After scanning the lot for the first time we have the following situation: two lines : - one with a quantity of 1, qty_done of 1 and reserved_uom_qty of 1 - one with a quantity of 1, qty_done of 0 and reserved_uom_qty of 1 both lined grouped in a parent line with quantity of 1 qty_done of 1 and reserved_uom_qty of 2 All of this is correct. when scanning the lot for the second time: _findLine iterates through the lines to select the right line to use. _findLine calls _lineIsNotComplete on the first line to check if it's complete (this first line is complete). https://github.com/odoo/enterprise/blob/58d55868750b827a9d5ebd8b4ab2cc23c4445eca/stock_barcode/static/src/models/barcode_model.js#L1684 But _lineIsNotComplete will actually do the check on the parent line (which is not complete), so the return value will be true. https://github.com/odoo/enterprise/blob/58d55868750b827a9d5ebd8b4ab2cc23c4445eca/stock_barcode/static/src/models/barcode_picking_model.js#L1338 As a consequence, the quantity will be added in the first line and we will have a qty_done of 2 in the first line and a qty_done of 0 in the second line. Which will lead to the creation of a back order opw Forward-Port-Of: odoo/enterprise#101508 Forward-Port-Of: odoo/enterprise#99774
This update fixes an issue where customers subscribing to services could fail to process recurring payments due to missing country information. The change ensures subscriptions, even for services, correctly require a country to be set, preventing payment failures and improving the subscription process. This resolves a previous optimization that bypassed address forms for services.
Original PR description
## Versions 19.0+ ## Issue A customer subscribing to a service can checkout without filling its data (incl. country). This leads to a failure of the next payment and a message in the chatter telling…
## Versions
19.0+
## Issue
A customer subscribing to a service can checkout without filling its data (incl. country). This leads to a failure of the next payment and a message in the chatter telling that "Automatic payment failed. No country specified on payment_token's partner".
## Steps to reproduce
*Ensure Sales app is installed*
- Create a customer account without filling personal data in;
- Navigate to the shop:
- Look for a subscription service (ending with "SUB") and add it to cart;
- Go to the cart and click the checkout button (automatically bypassing the addresses form);
- Pay with Demo.
- Logout and sign in as admin user:
- Go to Sales and open the latest SO (related to the test user):
- Duplicate the SO and activate debug mode;
- Open "Other Info" tab:
- Change the subscription starting date for any date in the past;
- Set the Payment Token selecting the available one; - Confirm the order.
- Navigate to Scheduled Actions:
- Look for "Sale Subscription: generate recurring invoices and payments" action and open it:
- Click "Run Manually".
- Come back to the duplicated subscription SO and look at the chatter's last message:
- OdooBot's message tells that "Automatic payment failed. No country specified on payment_token's partner".
## Cause
Task 4307281 introduced address info bypass to fasten checkout for services but subscriptions, even for services, require the country to be set for recurring payments as per https://github.com/odoo/enterprise/blob/f40e24e67a1664a13acdd01578d8269d084ee421/sale_subscription/models/sale_order.py#L1751-L1757
opw-5268156
Forward-Port-Of: odoo/enterprise#101372This update enhances the deletion of salary rules that use employee properties. When a salary rule input is deleted, the associated employee data is also removed, and a confirmation prompt ensures the user understands the impact. This change improves data accuracy and prevents unintended data modifications.
Original PR description
When deleting a salary rule input configured as an employee property ( and ), the corresponding entry is now removed from the payroll structure definition (). If the deleted property was the only one in its section, the section is also removed. Additionally, a confirmation popup is shown when deleting such rules: 'This will delete all the property on the employees linked to this salary rule and their data. Are you sure you want to continue?' This behavior is restricted to employee properties only and does not affect payslips. Related task: 5135933
This update resolves an issue where the system incorrectly processed invoice sequences without spaces, leading to errors. The change utilizes a regular expression to reliably extract the folio number regardless of the sequence format (space, slash, or hyphen), ensuring accurate invoice processing for Chilean Electronic Invoices.
Original PR description
Before this commit, the method `_get_last_sequence` assumed that the document sequence always contained a space separator (e.g., "INV 12345") It attempted to extract the folio number using `res.split(" ")[-1]`.
If the sequence format did not contain a space, such as the standard Odoo format `INV/2025/01234`, the split would return the entire string. This caused a `ValueError` when trying to cast the non-numeric string to an integer:
ValueError: invalid literal for int() with base 10: 'INV/2025/01234'
This commit fixes the issue by using a regular expression to extract the last group of digits from the sequence string. This ensures the folio number is correctly retrieved regardless of the separator used (slash, space, or hyphen).
opw-5401509
Forward-Port-Of: odoo/enterprise#101665This update fixes an issue where attendance durations were incorrectly calculated when check-ins occurred before an employee's scheduled start time. Now, work entries are automatically generated upon attendance approval, streamlining the process and eliminating the need for manual intervention. This ensures accurate tracking of work hours and simplifies employee management.
Original PR description
Before this commit: - For an employee with a Working Schedule as the work entry source and a default overtime ruleset (which creates a specific work entry type for overtime hours), creating an…
Before this commit: - For an employee with a Working Schedule as the work entry source and a default overtime ruleset (which creates a specific work entry type for overtime hours), creating an attendance with a check-in earlier than the employee’s normal working schedule start was not handled correctly. The early portion was ignored, resulting in a wrong attendance work entry duration (e.g., 06:15 instead of 08:00). - Work entries were not created automatically when approving the attendance. The user had to click Reset to force the generation, which is not the intended workflow. After this commit: - Attendance boundaries are now correctly normalized against the employee’s Working Schedule, ensuring the full expected duration is taken into account, even when the check-in occurs before the official start time. - The overtime ruleset is applied correctly, and the generated intervals properly reflect both standard working hours and overtime hours. - Work entries are now automatically created upon approval of the attendance, removing the need for any manual Reset action. task-5082562 Forward-Port-Of: odoo/enterprise#100616
This update corrects a recent issue impacting Belgian payroll calculations. The change reverts a previous conversion of property values within the payroll system, ensuring accurate calculations for Belgian employees. This resolves a potential discrepancy in reported earnings and maintains compliance with local regulations.
Original PR description
task-5380276
This update corrects a reporting issue in the VAT Simple tax export. It now filters the report to include only standard VAT taxes, as defined by the `l10n_ar_vat_afip_code` field. This ensures more accurate financial reporting for Argentinian VAT compliance.
Original PR description
The VAT Simple tax export should only report tax amounts from taxes that are standard VAT taxes, not all taxes. This is represented in l10n_ar via the `l10n_ar_vat_afip_code` field on the tax group. opw-5385508 Forward-Port-Of: odoo/enterprise#101414
This update fixes an issue in the Hong Kong payroll module by changing the default account used for NET salary payments. The change ensures payslips can be generated correctly and avoids payment problems. A new 'Salaries & Wages Payable' account has been implemented for broader compatibility.
Original PR description
Fixes the default account for NET salary rules in the Hong Kong payroll, which is using the wrong account type and causes issues when trying to pay payslips. It is replaced by a new Salaries & Wages Payable account, and we also set it for the structures other than 'Monthly Pay' task-5042786 Forward-Port-Of: odoo/enterprise#100835