Daily updates from Odoo
Tuesday, November 4, 2025
29 changes · master
Enhancements to existing features
This update improves how employee benefits, such as Belgian eco vouchers, are handled across contracts, salary offers, and payslips. It helps payroll teams avoid unwanted automatic copying of benefit values while making salary rule settings more flexible and reliable.
Brazilian invoices, sales orders, and point-of-sale orders for foreign customers now include the required export details when sent to Avalara and EDI services. This helps ensure export-of-goods transactions are correctly identified and processed for Brazilian localization compliance.
Original PR description
Purpose: By allowing the user to add a foreign partner as a customer on an invoice, we will need to include the export of goods information in the requests sent to Avalara and EDI. The required information under goods to be sent for export invoices are: - header.goods.idDest = 3 (indicates export operation) - header.goods.exportInfo.shippingState (indicates the state the products will ship from) - header.goods.exportInfo.place (incoterm_location) - header.locations.entity.address.neighborhood = "EXTERIOR" - header.locations.entity.address.zipcode = "99999999" - header.locations.entity.address.cityCode = "9999999" - header.locations.entity.address.cityName = "EXTERIOR" - header.locations.entity.address.state = "EX" - header.locations.entity.federalTaxId = "9999999999" task-4802462
Warehouse teams can now print Starshipit shipping labels in batches, reducing repetitive work when processing multiple deliveries. Labels also include the sales order reference in the order number, making it easier to match each label to the correct customer order.
Original PR description
Adds two improvements to the usability of the module by supporting printing starshipit labels in batch, and also adding the SO reference to the order number to more easily match the label with it. task-4821727 Forward-Port-Of: odoo/enterprise#91405
Account lists now show the current applicable fiscal rate and fiscal category, making review work easier. Fiscal report warnings about multiple rates are more accurate because they only consider accounts used in the selected period, and Belgian chart data was corrected to remove a duplicate rate assignment.
Original PR description
[IMP] account_fiscal_categories: enhance list view of account_account ====================================================== With this commit, we add a new field `current_rate` in `account.account`.…
[IMP] account_fiscal_categories: enhance list view of account_account ====================================================== With this commit, we add a new field `current_rate` in `account.account`. This `current_rate` is a non-stored compute field, used to compute the current applicable rate on the given account. This `current_rate` and `fiscal_category_id` has been introduced in the list view of `account.account`. [IMP] account_fiscal_categories: enhance multiple rate warning in fiscal report =========================================================== Before this commit, the "multiple rate" warning was shown even when no entries for accounts with multiple rates existed in the selected period. This happened because all accounts were considered for multiple rates, regardless of journal entries in that period. After this commit, only accounts with entries in the selected period are considered for the "multiple rates" warning. The warning is now clickable, redirecting the user to the accounts having multiple rates. [FIX] l10n_be_fiscal_categories: remove redundant rate on CoA ================================================= This commit removes the redundant fiscal rate on account-613311. Both fiscal categories 1206 and 1073 were assigned to this account, resulting in two rates. Only 1073 should be there. ref-https://github.com/odoo/enterprise/commit/f2579a80833ac129b2f21613b93c4e3203646a1b **task**-5163392 ----------------------- Forward-Port-Of: odoo/enterprise#97324
Appraisal forms now include an expand button for employee and manager feedback fields. This opens a larger pop-up editor, making it easier to review and update longer feedback during performance appraisals.
Original PR description
Add the expand button to the employee feedback and manager feedback fields on the appraisal form, click on it, it will open a pop up to update the employee or manager feedback. task-4852953
The Belgian POS blackbox integration now prompts users to update their IoT device so it can support an upcoming queued communication flow. This prepares retailers for a more reliable connection between POS terminals and the fiscal blackbox in the next update.
Original PR description
This commit is the first of two which will introduce a queue mechanism in the communication between the POS and the blackbox. This commit adds an action to the iot and invites users to update their iot to be prepared for the next commit which will effectively add the queue mechanism and use the new action. Second part: https://github.com/odoo/enterprise/pull/90747 Forward-Port-Of: odoo/enterprise#96904 Forward-Port-Of: odoo/enterprise#96639
The Barcode app now shows a more descriptive unpack icon by combining existing icon elements into a custom visual. This helps warehouse users better recognize the unpack action and reduces confusion during barcode workflows.
Original PR description
In barcode the unpack icon isn't descriptive enough. Since font-awesome doesn't provide any icons to convey the proper meaning, this PR stacks 2 fa icons to create a new one. task-5051649 Forward-Port-Of: odoo/enterprise#95749
The bike tax deduction field was removed from the vehicle model information because it is now managed under engine specifications. This avoids showing the same information in two places and helps keep payroll fleet data clearer for users.
Original PR description
for bike, removed tax deduction field from model info since it's now handled under engine specs. task-4653379
The Discuss app now uses a shared synchronization approach for related channel, member, and category information. This reduces duplicate logic behind the scenes, making future maintenance safer while preserving the user experience.
Original PR description
Currently, Discuss Channel, Discuss Channel Member, Discuss Category, have certain fields that need to stay synchronized when updated. This is currently done with a custom implementation of _sync_field_names on each model and orm (write) overrides. Since the synchronization logic is mostly similar across these models, we want to introduce a way to generalize this solution. task-5221092 https://github.com/odoo/odoo/pull/233654
All IoT-related code has been brought together into the Enterprise IoT module, simplifying where these capabilities are maintained. This should make future improvements and support for connected devices, point of sale hardware, and self-ordering integrations more consistent.
Original PR description
As it was decided to move all IoT related code to Enterprise, this commit merges back `iot_base` into `iot`. odoo/odoo#231746
This update makes the small buttons in the top menu bar show clearer visual states, such as hover, active, and dropdown behavior. It creates a more consistent experience across apps, light and dark themes, and enterprise navigation areas.
Original PR description
*: documents, hr_contract_salary, hr_payroll, industry_fsm_stock, mail_enterprise, mrp_workorder, stock_barcode, test_l10n_be_hr_payroll, voip, web_studio, website_enterprise This PR improves the…
*: documents, hr_contract_salary, hr_payroll, industry_fsm_stock, mail_enterprise, mrp_workorder, stock_barcode, test_l10n_be_hr_payroll, voip, web_studio, website_enterprise This PR improves the different button states within the `.o_menu_systray element` - requires https://github.com/odoo/odoo/pull/227858 | ///////// | Master | This PR | |--------|--------|--------| | AppSwitcher (**Light**) | <img width="489" height="43" alt="image" src="https://github.com/user-attachments/assets/39638af5-3bf4-4489-bd28-d409e74130a7" /> | <img width="493" height="49" alt="image" src="https://github.com/user-attachments/assets/0ae1a53f-457d-408e-847c-e4cbe187b6d1" /> | | AppSwitcher (**Dark**) | <img width="487" height="40" alt="image" src="https://github.com/user-attachments/assets/926c499f-18a0-4e8b-b71c-50ff0dd2d73a" /> | <img width="493" height="47" alt="image" src="https://github.com/user-attachments/assets/3983d593-2cdc-4184-a325-36a4bda4dd03" /> | | In App (**Light**) | <img width="494" height="47" alt="image" src="https://github.com/user-attachments/assets/c82bd674-00c3-47e6-9fd6-7b8abb29c873" /> | <img width="475" height="46" alt="image" src="https://github.com/user-attachments/assets/7d3829ae-17cf-42b0-940f-5b3eb7b57209" /> | | In App (**Dark**) | <img width="490" height="44" alt="image" src="https://github.com/user-attachments/assets/e1583d60-1ec9-4954-b63a-d6adcf55c070" /> | <img width="482" height="45" alt="image" src="https://github.com/user-attachments/assets/fd64aba7-921b-4d4e-97f5-c5e36de5ebf3" /> | | Front-end (**Light**) | <img width="487" height="48" alt="image" src="https://github.com/user-attachments/assets/b7421589-cb20-447c-9b81-80dcb4f00b66" /> | <img width="507" height="48" alt="image" src="https://github.com/user-attachments/assets/a7bdc284-e949-481c-a20d-849221cebee7" /> | | Front-end (**Dark**) | <img width="502" height="47" alt="image" src="https://github.com/user-attachments/assets/aefb1260-6a0a-4c69-a4db-d30865427b91" /> | <img width="505" height="49" alt="image" src="https://github.com/user-attachments/assets/0411a78f-807f-42bb-b88c-3fb4b65fb67f" /> | --------- Currently, these buttons are either: - `<button>` elements with only the .btn class, which does not provide a complete set of CSS properties. - `.dropdown-toggle` elements with an inherited background-color, which ends up being the transparent background set on the `<nav>` element. This commit harmonizes these approaches into a single one, aligned with the implementation used in .o_menu_sections. This increases consistency and also improves the accessibility of these items. task-5098241
This update adds a dedicated PDF version of Mexican payroll CFDI documents, making it easier for companies to generate and share compliant payroll receipts. It improves payroll reporting and presentation for employees and administrators using Mexico payroll localization.
Original PR description
Forward-Port-Of: odoo/enterprise#94551
Brazilian point-of-sale invoicing now uses updated NFC-e QR code links required by several states. This helps prevent invoice issuing errors caused by outdated links when sending tax and goods invoice requests through Avalara.
Original PR description
In This PR:
- Several states have updated their NFC-e QR-code URLs, which caused errors when issuing invoices due to invalid or outdated links. This commit updates the 'nfceQrCode' parameter in Avalara requests ('calculate-tax' and 'submit-invoice-goods') to ensure the correct QR-code links are used.
task- 5115845
Forward-Port-Of: odoo/enterprise#95726Salary adjustments can now be linked to a beneficiary bank account, ensuring payments are directed to the correct account in payment reports. The beneficiary details are also shown on payslips, giving employees and payroll teams clearer payment information.
Original PR description
This commit introduces the concept of a beneficiary for salary adjustments. A bank account can now be linked to an adjustment, so that the adjustment payment is directed to it in the payment report and also displayed on the payslip. Task: 5040786
Hong Kong payroll declaration forms now include chatter, making it easier for users to follow discussions and track activity directly on the reports. This improves collaboration and visibility for teams managing local payroll declarations based on user feedback.
Original PR description
Based on HK feedback, chatter is added on their declaration forms task:5067386
Contract salary template version fields now open using the correct form view configuration. This helps HR users reach the intended contract template screen more reliably and reduces navigation confusion.
Original PR description
The contract template form view is now written on the formview_action directly. task-5082709
Accounting reports can now include multiple text-based columns, making it easier to present items such as tax box numbers. This improves clarity for VAT reports in countries like Germany, South Africa, and North Macedonia without changing core reporting workflows.
Original PR description
Add a simple text engine to reports to be able to add multiple text columns. This is useful for reports that have box numbers eg. DE/ZA/MK VAT Reports
Odoo now uses one consistent way to keep internal dictionary data read-only, reducing the chance of inconsistent behavior. This improves reliability and performance for internal processes without changing day-to-day user workflows.
Original PR description
Before this commit, Odoo had two implementations for creating an immutable dictionary. These two implementations have different behaviors and coexist for backward compatibility reasons. The purpose of this commit is to leave only one implementation for the immutable dictionary, called `frozendict`. This implementation makes it truly impossible to modify the mapping. In addition, by default, we don't override internal methods of the dictionary which improves performance (despite the cost during creation). Note 1: Classes `LangData` and `LangDataDict` are adapted as `Mapping` subclasses instead of `ReadonlyDict`. This simplifies their implementation, which is not performance-critical. Note 2: This change is possible because the `MappingProxyType` class implements fallback on the `__hash__` method since version 3.12 (thanks to d357125). task-4808836
Resolved issues and error corrections
Authorized payroll users can now resend payslips by email without being blocked when the system prepares the secure document link. This ensures employees receive the correct payslip email link while keeping the button limited to users with the proper role.
Original PR description
Hr Payroll users that are meant to be able to use the Resend Payslip by email button do not have enough access right to get the documents token to put into the email "Your Payslip" button. Add a sudo on the payslip to get the document access url after the check of user role has been done. If have the right to use the button, sudo the rest. Task-5049444 Forward-Port-Of: odoo/enterprise#98510 Forward-Port-Of: odoo/enterprise#93420
This fix updates an automated website sale rental test so it matches the pricing produced by the latest default rental dates. It helps keep quality checks reliable and reduces false alerts in the release process, with no expected impact on customers.
Original PR description
runbot-233276 Forward-Port-Of: odoo/enterprise#98591
Fixes a crash that could happen when several project tasks were blocked by the same task and its deadline was changed. Dependency warnings are now calculated per task, helping teams update schedules without interruption.
Original PR description
Currently, an error occurs when computing the dependency warning for tasks. **Error:** ```Expected singleton: project.task(8, 7).``` After [this commit] if task1 depends on task2, if task1's task…
Currently, an error occurs when computing the dependency warning for tasks.
**Error:**
```Expected singleton: project.task(8, 7).```
After [this commit] if task1 depends on task2, if task1's task dependency is False, then the dependency warning for task1 should also be False.
However, when task dependency is enabled and two or more tasks are blocked by a single task, changing the Deadline of the blocking task triggers the computation of the dependency warning for those dependent tasks. During this process, the system attempts to check the task dependency across multiple records, which raises the error at [1].
This commit ensures that, since self may contain multiple tasks, the dependency warning is computed safely for each specific task.
[this commit]: https://github.com/odoo/enterprise/commit/50768627accb9d9767514fda7c6975bf4d8227d3#diff-b4bb763881453b0d69cae371c4c5034f6e199dfaf3a3056aba3381cf64dbf3dc
[1]- https://github.com/odoo/enterprise/blob/769201e22618b6683863f0839d7ad80bea0927cf/project_enterprise/models/project_task.py#L350
sentry-6914184933
Forward-Port-Of: odoo/enterprise#98532When an app icon is customized in Studio using a Font Awesome icon, it now appears correctly in the top navigation bar and mobile sidebar. This improves visual consistency and makes customized apps easier for users to recognize across desktop and mobile.
Original PR description
**Purpose:** Previously, when a user edited an app's icon in Studio and selected a Font Awesome icon instead of an image, the icon was not displayed in the navbar or mobile sidebar. This commit ensures the icon now displays correctly in both locations. task-5085482 Community : https://github.com/odoo/odoo/pull/228966
Odoo now correctly identifies several valid Swedish bank account formats that were previously rejected or misclassified. This helps businesses using Swedish localization avoid incorrect bank type exports and improves payment data accuracy.
Original PR description
### Issue: Some valid Swedish account numbers are not recognized as Swedish. ### Steps to reproduce: - Install 'l10n_se_bban' and switch to Swedish company - Create a new partner, under the…
### Issue: Some valid Swedish account numbers are not recognized as Swedish. ### Steps to reproduce: - Install 'l10n_se_bban' and switch to Swedish company - Create a new partner, under the 'Accounting' page create a new bank account 1- 62074-0 2- 678653833066 3- 99603406872188 - In the partner list view select this new partner - Click Actions > Export, select "Banks" and "Bank Type" - Check the file 1- 62074-0 not recognized as Plusgiro 2- 678653833066 not recognized as BBAN 3- 99603406872188 not recognized as BBAN ### Cause: These numbers are not recognized by the checks of Odoo but are valid numbers: 1. Plusgiro account numbers can be 2 to 8 digits long, Odoo accepted only 7 to 8 digits account numbers 2. Old Handelsbanken numbers (6000-6999) can have 8 digits instead of 9, Odoo only accepts 9 digits numbers 3. Only clearing numbers starting with 8 are 5 digits long, Odoo also included ranges 9500-9549 and 9960-9969 ### Sources: 1 and 3: https://www.amcbanking.com/kb/swedish-payments-how-to-configure-sender-and-vendor-bank-accounts-in-fo/ 1 and 3: https://github.com/Tobbe/kontonummer.js/blob/04959502d7d2d52938aabda80b8a3464efddfdd1/kontonummer.js 2: https://github.com/barsoom/banktools-se/commit/b964806d5cad0491ea121419520fd5b5d4478c15 opw-5099867 Forward-Port-Of: odoo/enterprise#98147
The French FEC import now uses a valid debit account for rounding entries after the previous account code became an account group. This prevents import issues and helps French accounting data load correctly.
Original PR description
This commit:https://github.com/odoo/odoo/commit/0ebf80b613d229ef5fb07ea97d406496f9df6254 change the COA of french localisation and the account 6850 was change to be an account group instead. This commit will change the debit account code used to put an existing one instead. no task-id Forward-Port-Of: odoo/enterprise#97283 Forward-Port-Of: odoo/enterprise#96972
Appointment pages that limit booking to work hours now load correctly when assigned staff have flexible hours. This prevents customers or users from seeing a 404 error and keeps booking availability accessible for those staff members.
Original PR description
This PR fixes the 404 error displayed on the info page of a "Limit to Work Hours" appointment linked to a staff user with flexible hours. The availability of the staff user must not be computed from its work schedules as it has flexible hours. Task-5046134 Forward-Port-Of: odoo/enterprise#95336
Selection fields in Sign documents now correctly show their placeholder text before a signer makes a choice. This helps signers understand what information is expected and avoids confusion during document completion.
Original PR description
To reproduce: ============= - upload a document to sign and add a selection field on it - set a placeholder for the selection field - open the document to sign -> the placeholder is not displayed Problem: ======== the placeholder is not displayed because there is no option holding the placeholder value. Solution: ========= Add an option at the beginning of the select options to hold the placeholder value. opw-5140676 Forward-Port-Of: odoo/enterprise#97887
Marketing automation email templates now include version information for their mailing design blocks. This lets users with older templates update those blocks in the email builder until a fuller upgrade path is available.
Original PR description
Add a `vxml` (xml version) for every `mass_mailing` snippet, so that users with templates using old version of it can choose to update their snippet using the builder. It's the bare minimum in lieu of a proper upgrade (which will come later). task-5134263 Co-authored-by: Damien Abeloos <abd@odoo.com> Co-authored-by: Thomas Josse <thjo@odoo.com> Forward-Port-Of: odoo/enterprise#96082
Features or functions removed from Odoo
Odoo no longer includes the separate OnSIP VoIP add-on because its extra authorization username setting is not required when OnSIP is configured with matching usernames. This simplifies VoIP configuration and maintenance while keeping core VoIP support available.
Original PR description
With OnSIP, you can define an authorizationUsername that differs from your contact username. To enable this feature in Odoo, the voip_onsip module was introduced, simply adding an extra field for the authorizationUsername. However, if OnSIP is configured with a username identical to the authorizationUsername, it is possible to work around this field. As it is now known that the extra config is not strictly needed, this commit removes the voip_onsip module. [Task-5176220](https://www.odoo.com/odoo/project/5778/tasks/5176220). Upgrade: https://github.com/odoo/upgrade/pull/8679 Documentation: https://github.com/odoo/documentation/pull/14978
Code cleanup and technical improvements
This draft reorganizes shared Point of Sale test logic so multiple country and device-specific features can rely on the same foundations. The change is mainly internal and helps reduce duplicated test setup, making future updates safer and easier to maintain.
Original PR description
Task: 4467373