Daily updates from Odoo
Wednesday, July 9, 2025
13 changes · saas-18.3
Resolved issues and error corrections
This fix stops the system from automatically assigning a newly connected IoT device as a weighing scale when it may be misidentified on first startup. It prevents stores from ending up with the wrong device linked to their Point of Sale configuration after the IoT box restarts.
Original PR description
If on first boot after flashing the iot box a blackbox is connected the iot box doesn't have the blackbox driver so it's identified as Adam scale With the pos_iot auto configuration we would first send it as a scale to the database and it would be set as a scale to the selected pos config. After odoo restart on the iot box it gets detected as blackbox correctly and its name changes. Now after it's sent to the db the user ends up with a blackbox in the scale field in PoS config. This PR removes the automatic scale configuration so that doesn't happen
Users can now open and generate field service task reports from the portal even when the optional reporting module is not installed. This prevents a portal error and keeps customer-facing task details accessible.
Original PR description
An error occurs when a user attempts to generate a report from the portal because the `industry_fsm_report` module is not installed. **Steps to reproduce:** * Install `industry_fsm` * Field Service>New Task>log time sheet using `start` button * open portal view( `/my/tasks` )> Your created task> `View details` `AttributeError: 'project.task' object has no attribute '_get_report_base_filename'` **Solution:** * Define `_get_report_base_filename` inside `industry_fsm` instead of `industry_fsm_report`. **Sentry-6685756279** Forward-Port-Of: odoo/enterprise#89615 Forward-Port-Of: odoo/enterprise#87949
VoIP now removes parentheses when cleaning phone numbers, so numbers entered with formats like (123) 456-7890 are handled correctly. This reduces dialing issues caused by common phone number formatting.
Original PR description
Add parentheses to the list of characters that are stripped from phone numbers. Part of task-4891947. Forward-Port-Of: odoo/enterprise#89625 Forward-Port-Of: odoo/enterprise#89551
The UAE Corporate Tax Report now prevents taxable and tax amount lines from dropping below zero when profits are under the exemption threshold. This avoids confusing negative tax amounts and gives businesses a more accurate view of what they owe.
Original PR description
The Corporate Tax Report was incorrectly showing a negative"Corporate TAX Amount" when the taxable profit fell below the exemption threshold (e.g 375,000 AED). This issue happened because the formula used to compute the Corporate TAX Amount was: `AE_CORP_TAXABLE.balance * (AE_CORP_TAX_PERC.balance / 100)` This formula applies the tax rate even when `AE_CORP_TAXABLE.balance` is negative, which results in an incorrect negative tax amount in the report. Since the report engine doesn't support conditional logic like `max(...)` or `> 0` in XML formulas, we couldn't fix this in the formula definition directly. To solve the issue, we added a check in the Python report handler `_custom_line_postprocessor` to override the value of the Corporate TAX Amount and cap it at zero when it would otherwise be negative. Steps to reproduce: In run bot or any db go to Corporate tax report OPW-4739052 Forward-Port-Of: odoo/enterprise#86087
Helpdesk tickets created directly in a closed stage are now marked with a close date immediately. This keeps the customer portal's Open filter accurate, so portal users do not see already resolved tickets mixed with active ones.
Original PR description
**Steps to reproduce:** 1. Install the Helpdesk module. 2. Create a ticket directly in a closed stage (e.g., 'Solved') and add the portal user as a customer. 3. Log in as the portal user. 4. Apply the Open filter. **Issue:** - The ticket appears under Open Tickets, even though it was created in a closed stage. **Cause:** - Currently we consider a stage as closed if 'floded in kanban' is True and When a ticket is created directly in a closed stage, the close_date field is not set. Since the portal filter relies on close_date to distinguish open from closed tickets, this shows closed tickets in open filter. https://github.com/odoo/enterprise/blob/c34256932e593ac2774fa65af813d64edb70ec43/helpdesk/controllers/portal.py#L63 **Solution:** - During ticket creation, if the specified stage is a closing stage, set the close_date field to the current time. opw-4847097 Forward-Port-Of: odoo/enterprise#88983 Forward-Port-Of: odoo/enterprise#87293
The POS Belgian fiscal device integration now starts listening for a response before sending a request to the IoT device. This prevents missed replies that could leave the checkout process waiting indefinitely.
Original PR description
Before this commit, the listener to the longpolling or the websocket was added (subscribe for websocket and addListener for longpolling) after the action was sent to the IoT. The answer could be sent before we even listen to it so the answer was never received. This could cause infinite waiting.
The VoIP keypad now uses consistent bottom spacing between the in-call and transfer screens. This fixes a small visual mismatch, making the calling interface look more polished and predictable for users.
Original PR description
Prior to this commit, the bottom margin differed between the "In call" and "Transfer" views, creating inconsistency. This commit adjusts the spacing to maintain consistency. | Before | After | |--------|--------| |  |  | task-4908502
Bookkeepers can now open, close, and reset tax returns without being blocked by administrator-only setup or lock date permissions. This keeps tax return workflows moving smoothly for accounting teams and reduces the need for administrator intervention.
Original PR description
- Trying to open the returns form the dashboard failed for bookkeepers when no opening date was set, since the wizard used to set them is restricted to administrators only. - When closing a tax return, an access error was triggered when trying to set the lock date. - When resetting a tax return, an access error was triggered when trying to set the lock date.
This fixes an issue where employee document shortcuts could miss files stored in subfolders under the HR folder. Users with the right sharing permissions can now access those HR documents as expected, reducing confusion and missing file reports.
Original PR description
Following this: [85156](https://github.com/odoo/enterprise/pull/85156) the domain has been incorrect, leading to some documents not showing up anymore when these should have. This PR aims to solve this issue by correcting the domain at fault Task: 4922346 Forward-Port-Of: odoo/enterprise#89548
This fix prevents Uruguayan electronic invoice generation from failing when a user clears an item description in journal entries. It keeps document submission to DGI working even when optional line descriptions are left empty.
Original PR description
This PR addresses an issue encountered when the product description is removed from an account.move.line within the "Journal items" section. ### Problem: Normally, the `account.move.line` description…
This PR addresses an issue encountered when the product description is removed from an account.move.line within the "Journal items" section. ### Problem: Normally, the `account.move.line` description automatically populates with the product name upon line creation. However, users can intentionally clear this field. If the description field becomes empty, its value is interpreted as `False`. This leads to an `AttributeError: 'bool' object has no attribute 'replace'` traceback when the `_l10n_uy_edi_get_line_nom_and_desc` method attempts to process this boolean value, as it expects a string. This issue specifically affects the generation of the "DscItem" tag in the XML file sent to DGI. ### Solution: To prevent this error, an additional validation has been implemented for the line description. This validation ensures that if the field's value is `False`, it is not processed by the `_l10n_uy_edi_get_line_nom_and_desc` method, thus avoiding the traceback. Forward-Port-Of: odoo/enterprise#89407
The Time Off type configuration form now presents payroll and localization options in a clearer two-column layout. This makes settings easier to review and reduces confusion when configuring leave policies for different countries or payroll needs.
Original PR description
* = l10n_in_hr_holidays, l10n_ae_hr_payroll, l10n_be_hr_payroll Steps: - Navigate to Time Off > Configuration > Time Off Types. - Open any time off type form with localization or payroll-related options. Issues: - Configuration fields (including localization modules) appeared misaligned. - The Payroll section was not utilizing space effectively in the layout. Fix: - Aligned all configuration fields in a consistent two-column layout, including localization and payroll-related options., - Repositioned the Payroll section below the Negative Cap section. Task - 4759116
Budget reports now handle negative purchase order lines, such as discounts, correctly when bills are confirmed. This prevents an extra duplicated discount amount from appearing, improving budget accuracy for project cost tracking.
Original PR description
Steps to reproduce: - Create a new Budget with budget line having Project [TEST] - Create a purchase order with 2 lines: 1. Product A, analytic [TEST], price unit 100, qty 1 2. Product B, analytic [TEST], price unit -10, qty 1 - Confirm the PO, mark products as received - Create the bill and confirm - Go back in PO, click on Budget smart button, open list view Issue: The budget report will correctly show a line for each invoiced line, but an extra line with double discount amount is present Occurs because we use a SQL code to replicate the qty_invoiced field of a purchase order line, but we adjust the sign based on the aml balance instead of taking into account the move type opw-4775631 Forward-Port-Of: odoo/enterprise#89545
This fix ensures the Indian GST return JSON output always includes the expected document issue section, even when it is empty. This prevents automated validation and test failures, helping keep tax reporting exports consistent and reliable.
Original PR description
- Assigned doc_issue with empty list to comply with formatting of gstr1 json. - This prevents test failures caused by missing keys during JSON validation. runbot error: 229705 Forward-Port-Of: odoo/enterprise#89711 Forward-Port-Of: odoo/enterprise#89635