Daily updates from Odoo
Tuesday, September 23, 2025
11 changes · master
Enhancements to existing features
Businesses using international bpost shipping methods can now request bpack World Easy Retour return labels. This makes cross-border returns easier to manage and improves the customer return experience for international orders.
Original PR description
This ensures you can request 'bpack World Easy Retour' labels when using international bpost shipping methods. This PR is based on feedback from a PR I did on base 16.0 branch: https://github.com/odoo/enterprise/pull/58836.
Indian payroll now includes account mappings for selected salary rules. This helps payroll-related accounting entries flow into the correct accounts, reducing manual setup and improving financial reporting consistency.
Original PR description
In this commit, Include chart of account for some of salary rules of Indian payroll. task-4929815
Document breadcrumbs now reflect the views users previously opened when moving into folders, making it easier to return to where they came from. The add link document wizard also no longer lets users open the folder directly, aligning it with the request document flow.
Original PR description
When navigating to a folder using the folder many2one widget, instead of using the folder parents hierarchy as breadcrumbs, using the previously opened views so that users can easily go back. Like for the "request document" wizard, removing the possibility to open the folder from the "add link" document wizard. Task-4298814
Resolved issues and error corrections
Fixed an issue in the Spanish SME balance sheet where some payable accounts could be counted twice. This ensures the reported liabilities match the underlying accounting data and avoids overstated balances.
Original PR description
In **`balance_pymes_line_32300`** (`CURRENT LIABILITIES > Current payables > Other current payables`), amounts are **doubled** because account **551** is included twice. * **Formula using…
In **`balance_pymes_line_32300`** (`CURRENT LIABILITIES > Current payables > Other current payables`), amounts are **doubled** because account **551** is included twice.
* **Formula using `account_codes`:**
```xml <field name="formula">-1034 - 1044 - 190 - 192 - 194 - 500 - 501 - 505 ...551 - 5566 - 5595 - 5598 - 560 - 561 - 569</field> ```
→ Explicitly includes account **551**.
* **Formula using `domain`:**
```xml <field name="formula" eval="['|', ('account_id.code','=like','550%'), '|', ('account_id.code','=like','551%'), '|', ('account_id.code','=like','554%'), ('account_id.code','=like','5525%')]"/> ```
→ Includes **all accounts starting with 551**, so **551** is also counted here.
This overlap causes the balance to be counted twice, inflating the reported value.
**steps to reproduce:**
1. With a Spanish company, go to **Accounting > Dashboard > Bank > Transaction > New**.
2. Select an account, search for **55100**, and add it.
3. Go to **Reporting > Balance Sheet > Other current payables**.
4. Notice that the reported amount is **double** the actual accounting data.
Overlapping formulas: specific account `551` and `5525` are counted in `account_codes`, while the `domain` formula already includes `551%`, leading to duplication.
**Fix**
Remove explicit account codes from `account_codes` if they are already covered by the `domain` prefixes to avoid double-counting. and also made sure to correct the same issue in the whole report.
opw-5075035
Forward-Port-Of: odoo/enterprise#94494Field service sales orders with zero-priced service lines now show as invoiced once the related invoice has been created. This prevents completed invoicing from incorrectly appearing as still needing invoicing, improving clarity for users managing field service sales.
Original PR description
Steps: - Install sale and fsm module. - Enable anglo-saxon from the setting. - Create a service type product with fsm project as template. - Select that product on SO and set unit price to 0 on SOL. - Confirm that order and create and post invoice. Issue: - Sale order status still shows `To invoice` even though we create SOL related invoice. Cause: - In [PR] we made invoice status for anglo-saxon line `To Invoice` so it always say `To Invoice` even user create related invoice. Fix: - Make those lines `Invoiced` if there is related invoice by checking qty_invoiced is greater or equal to qty. [PR]: https://github.com/odoo/enterprise/pull/70132 opw-5055540 Forward-Port-Of: odoo/enterprise#94723
Tax return company data validation can now complete even when the logged-in user has no email address configured. The system still records the update in the activity log, preventing unnecessary interruptions for users.
Original PR description
Before Fix: When validating failed `company data` check in the Tax Return Kanban, the system attempted to log an update in the chatter. However, if the logged-in user did not have an email address configured, the action failed with the error: 'Unable to send message, please configure the sender's email address.' After Fix: The logging now runs in superuser mode. This ensures that updates are always posted in the chatter, regardless of whether the user has an email address set. Explanation: This change guarantees that important updates are consistently tracked in the chatter without interruption. Previously, users without an email address could not complete the validation, even though no actual email needed to be sent, the system only needed to record the change. By switching to superuser mode, we align with intended behavior: the system does not crash due to no email. task-5014717
Sendcloud deliveries can now send customs product codes up to 12 characters, matching Sendcloud's current requirements. This helps reduce the risk of parcels, especially shipments to the US, being delayed in customs due to truncated or incomplete codes.
Original PR description
**PROBLEM** We limit the `hs_code` length to 8 characters, but if we refer to the [sendcloud v2 api doc](https://api.sendcloud.dev/docs/sendcloud-public-api/branches/v2/parcels/schemas/parcel-item), we see that `hs_code` length can be up to 12 characters. Some clients have issue with parcels being held longer in custom when sending them to the US. [opw-5051585](https://www.odoo.com/odoo/project/49/tasks/5051585) Forward-Port-Of: odoo/enterprise#94894
Field Service sales orders created from completed tasks now use the product’s currency when calculating line prices. This prevents incorrect pricing when the sales order and product use different currencies, helping invoices reflect the right converted amounts.
Original PR description
### Steps to reproduce: - Open Field Service module. - Create a new task. In the Customer field, select “Bloem GmbH”. - Open the task’s project. - In the Invoicing tab, create a new line for any…
### Steps to reproduce: - Open Field Service module. - Create a new task. In the Customer field, select “Bloem GmbH”. - Open the task’s project. - In the Invoicing tab, create a new line for any employee and any service. - Return to the task and in the Timesheets tab, add a new timesheet. - Click the Mark as done button. - Click the Sales order button. ### Cause: When creating the sale order out of the fsm task we use _get_tax_included_unit_price to get the price of the SO line but we are passing the order currency twice to this method so it doesn't convert the price as when it checks the currency and the product_currency it found they are the same so no need to convert https://github.com/odoo/odoo/blob/6653355b8bc063ceadf08af17fbf2c4a250553e6/addons/account/models/product.py#L239-L240 ### Fix: We pass the product currency instead of the order currency in order to be able to convert the price according to the currencies opw-5045071 Forward-Port-Of: odoo/enterprise#95134 Forward-Port-Of: odoo/enterprise#94947
Rental orders that are returned late now correctly include the extra delay fee. This prevents missed charges when rental delays are measured in hours, helping keep customer billing accurate.
Original PR description
In [^1], during a small refactor of the `sale.order.is_late` method to only account for logistic delays rather than rental delays, the rental extra delay margin computation was moved to the `sale.order.line._generate_delay_line` method. However, the computation used the utility class `relativedelta` instead of `timedelta`, which transformed the final rental duration into a `relativedelta` object. This object internally stores second durations differently than a `timedelta`. While `timedelta` stores durations as `days` and remaining `seconds`, `relativedelta` splits the information into `days`, `hours`, `minutes`, etc. Since rental orders only account for hours, the `seconds` field was null, resulting in no extra delay fee being added to the order upon return. This commit fixes the issue by using `timedelta` as expected. [^1]: https://github.com/odoo/enterprise/pull/88689 Forward-Port-Of: odoo/enterprise#95116
This fixes an issue where edited time values in the Timesheet list view could revert when users moved focus with Shift + Tab. The entered time now stays visible for both new and existing timesheet lines, helping prevent confusion and inaccurate time entry.
Original PR description
Steps to reproduce: ----------------- 1. Go to Timesheet → My Timesheet → List View → New OR Edit already filled time. 2. Change time in the Time Spent field. 3. Press Shift + Tab. Observation:…
Steps to reproduce: ----------------- 1. Go to Timesheet → My Timesheet → List View → New OR Edit already filled time. 2. Change time in the Time Spent field. 3. Press Shift + Tab. Observation: ----------------- The focus changes, but the Time Spent field reverts to its old value instead of keeping the newly entered one. Issue: ----------------- - For new records, the component retrieves the value only from the state, which is updated in the `onWillUpdateProps` lifecycle. This lifecycle triggers only on saving or editing, not when simply changing focus. https://github.com/odoo/enterprise/blob/e14b991927df14f41535e92dd01ea2ecac44a404/timesheet_grid/static/src/components/timesheet_display_timer/timesheet_display_timer.js#L123-L128 - The same behavior occurs when editing existing records, leading to incorrect value display. https://github.com/odoo/enterprise/blob/e14b991927df14f41535e92dd01ea2ecac44a404/timesheet_grid/static/src/components/timesheet_display_timer/timesheet_display_timer.js#L31-L33 Solution: ----------------- - For new records, since the default value is 0, the fix makes the component fall back to the updated record value if the state value is not yet available. - For existing records, if the timer is running, the timer’s value is displayed. otherwise, the component falls back to the updated record value. opw-4922847 Forward-Port-Of: odoo/enterprise#95229 Forward-Port-Of: odoo/enterprise#94729
Credit notes for Mexico's public customer regime now keep the selected "Returns, discounts or bonuses" usage when allowed by SAT rules. This prevents generated tax XML from incorrectly switching to "No fiscal effects," helping businesses issue compliant credit notes.
Original PR description
**Steps to reproduce:** 1. Install `l10n_mx` and `l10n_mx_edi`. 2. Create an invoice with: * Enable *CFDI to Public*. * Confirm, then send to SAT. 3. Create a credit note with: * *Usage* = `Returns,…
**Steps to reproduce:** 1. Install `l10n_mx` and `l10n_mx_edi`. 2. Create an invoice with: * Enable *CFDI to Public*. * Confirm, then send to SAT. 3. Create a credit note with: * *Usage* = `Returns, discounts or bonuses` (G02). 4. Download the generated XML for the credit note. **Observed behavior:** - The `<UsoCFDI>` tag in the XML shows `S01` (No fiscal effects). **Expected behavior:** - The `<UsoCFDI>` tag should show `G02` for credit notes under regime 616 when explicitly selected. **Root cause:** - For regime 616 (`Público en general`), the code always defaults to `S01`. - The condition only allowed `G02` when refunding a global invoice (`is_refund_gi`), not for normal credit notes. **Solution:** - Allow `G02` usage to be preserved for credit notes (tipo_de_comprobante = 'E') even when `CFDI to public` is active, as this is now permitted by SAT regulations for fiscal regime 616. **ref:** http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI_V_4_20250820.xls opw-5012917 Forward-Port-Of: odoo/enterprise#95246 Forward-Port-Of: odoo/enterprise#93071