Tuesday, December 2, 2025
16 changes · 18.0
Enhancements to existing features
This update clarifies the SMS verification message used during the Peppol activation process. Previously, the message was ambiguous, potentially confusing users about its connection to Odoo. Now, the message clearly states "Your Peppol activation code in Odoo is ...", enhancing user understanding and streamlining the activation process.
Original PR description
Before this commit: In v17, the Peppol SMS verification message starts with "Your confirmation code is .." which could be confusing, as users might not know the code was related to Peppol in Odoo. After this commit: The SMS verification message was changed and now it starts with "Your Peppol activation code in Odoo is ...", providing clearer context for users. task-5353425 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237135
Resolved issues and error corrections
This update corrects a bug where administrators without HR permissions could trigger an access error when attempting to create a new employee. The fix hides the 'Create Employee' button for users lacking the necessary HR rights, ensuring a smoother user experience and preventing errors.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Make sure Marc Demo is an Administrator but has no Employees (HR) access rights. - Log in as Marc Demo. - Go to Settings → Users → Create a new user. - Enter a name and email, then Save. - You’ll see the "Create Employee" button it appears even though the user has no HR rights. - Click it → an Access Error occurs. **Isuue:** - The "Create Employee" button is visible for users who don’t have HR permissions, causing an access error when clicked. **Solution:** - Hide the "Create Employee" button for users without HR access by adding the correct group restriction. task-5212464 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235258
This update corrects a minor issue in the account_peppol module where the neutralization script wouldn't function correctly if a required key wasn't present. The change ensures the script always inserts the key, guaranteeing proper PEPPOL data processing and compliance. This prevents potential errors and maintains data integrity.
Original PR description
There can be some siutations where you can not have the key account_peppol.edi.mode while having a connection. But the neutralize only updates and so, if the key is not present, it does nothing. So change it to insert the key if no present --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238184
This update resolves an error that occurred when creating new employees without a 'name' field. The fix prevents a system crash by gracefully handling missing data, ensuring a smoother employee onboarding experience. This improves data integrity and reduces potential disruptions.
Original PR description
Currently, when a user hits a debugger extension in-between employee creation an error is occurred. **Steps to Reproduce:** - Install **HR** module. - Create new employee and write a `name` of an employee but don't save the record. - append `?debug=1` in the URL. we can generate this error in one more way. - Install **HR** module. - Create a new **empty form view** for the `hr.employee` model. - Open the newly created view and click on save. **Error:** `KeyError: 'name'` **Root Cause:** The `_prepare_resource_values` method assumes the 'name' key is present in vals at [1] tries to pop it without checking for its existence. [1]- https://github.com/odoo/odoo/blob/06ec1de2dd8ec5fdb104275cf2bbb3f9f73841da/addons/hr/models/hr_employee.py#L386 **Solution:** This commit ensures that if the `name` key is not present, the method returns `None` instead of raising Error. Sentry-6234873849
This update resolves an issue where URLs were duplicated in WhatsApp messages due to a technical formatting error. The fix prevents the duplication of URL text within the message body, ensuring a cleaner and more accurate user experience. This improves clarity and reduces potential confusion for users.
Original PR description
[FIX] whatsapp: remove duplicated URLs in message body Steps to reproduce: 1. Set up whatsapp integration. 2. Send a direct message containing a URL. 3. Observe that the URL appears twice in the…
[FIX] whatsapp: remove duplicated URLs in message body Steps to reproduce: 1. Set up whatsapp integration. 2. Send a direct message containing a URL. 3. Observe that the URL appears twice in the message received in whatsapp. Issue: This issue arises within the `_send_message` method, where we are taking the Markup body that we use within the Odoo UI to have a clickable URL, like `<a href="[https://example.com">https://example.com</a>`](https://example.com"%3Ehttps//example.com%3C/a%3E%60). Then, the html2plaintext function duplicates by adding the footnote for the anchor tag, which "duplicates" the URL since the text within the anchor tag is the same as the URL itself. This results in a message body that contains the URL twice, leading to confusion for the user. Solution: This commit addresses the issue by backporting the solution to this problem introduced in https://github.com/odoo/odoo/commit/a152910e3a352516ea1240d8833a406b144382dd and using the `include_references` parameter of the `html2plaintext` function to exclude footnotes from the conversion. opw-4936400 Forward-Port-Of: odoo/enterprise#90449
This update fixes an error in the SAFT report XML template, ensuring accurate descriptions of unit of measure categories are included. This improves the report's data integrity and compliance with reporting standards. The change impacts the SAFT report generation process.
Original PR description
Replaced 'uoms.category_id.name' with the correct 'uom.category_id.name' in the SAFT report template. This ensures accurate unit of measure descriptions are included in the UOMTable entries.
This update fixes an issue where demo data was incorrectly included in the main Odoo files. The data has now been moved to the designated 'demo' folder, ensuring accurate demonstration of the pos_pricer module. This improves the consistency and reliability of the demo environment.
Original PR description
In the PR #66351 the demo data was unintentionally merged in the 'data' folder. This PR moves it to the correct 'demo' folder
This update resolves an issue where test emails using 'view_online' would fail if the associated contact record was deleted. The fix ensures the system retrieves the contact's ID dynamically, preventing errors and improving email test functionality. This ensures consistent email marketing performance.
Original PR description
In the email marketing, when you add "view_online" and dynamic placeholder "object.name", and try doing a test email, it creates a url token for the "view online" with the res_id as the user's id which grabs the record from the mailing_contact with that res_id. So, in case the mailing_contact with the res_id is deleted, the "view_online" gives you error saying record with id "res_id" cannot be find. Our fix is to search the mailing_contact and grab the id of the first record. This fix updates the code from this commit: [8a9981e](https://github.com/odoo/odoo/commit/8a9981e78a438ceb53a4fdc0445ebed2170c6624) opw-5049654 Forward-Port-Of: odoo/odoo#232440
This update fixes a potential issue where users could modify approval requests, leading to unpredictable behavior. We've implemented a safeguard to prevent edits, ensuring the approval process remains stable and reliable. This change improves data integrity and reduces the risk of errors in workflows.
Original PR description
There is no legitimate use case that should modify the approval request. This would result in unexpected behaviour. task-5269982 Forward-Port-Of: odoo/enterprise#100943 Forward-Port-Of: odoo/enterprise#100273
This update resolves an issue where duplicate XML IDs were causing data conflicts. The changes update account codes related to CPF, SHG, and SDL taxes in Singapore, ensuring accurate financial reporting. The fix also simplifies account code formatting to prevent overly long codes.
Original PR description
Two accounts were using the same XML ID `account_account_864`, causing second definition to overwrite the first. This commit resolves the duplication and updates/segregates accounts for CPF and SHG according to new specifications.
Changes:
- Update `account_account_864` (Employee Expense) to `account_account_866`.
- Update in accounts:
* 862 → CPF Withheld (Employee)
* 863 → CPF Accrued (Employer)
* 864 → SHG Withheld (Employee)
* Add new 865 → SDL Accrued (Employer)
* 859 → CPF Employer Expense
* 860 → SDL Employer Expense
* Removed 861
- Fix `transfer_account_code_prefix` in the template:
* Change from `101100` to `10110` to avoid generating 7-digit account codes.
task-5360160
Forward-Port-Of: odoo/odoo#237506This update resolves a technical issue within the HTML editor's color plugin that caused a traceback when users selected and colored links on `feff` characters. The fix adjusts cursor offsets to ensure accurate restoration after node removal, preventing errors and improving stability.
Original PR description
Problem: When the user selects a link to color and the selection falls on a `feff` character, a traceback occurs. Cause: After commit 927f4b973932d14961c148e13473017651a60dc0, we preserve the…
Problem: When the user selects a link to color and the selection falls on a `feff` character, a traceback occurs. Cause: After commit 927f4b973932d14961c148e13473017651a60dc0, we preserve the selection at: https://github.com/odoo/odoo/blob/bee7fc1f955c52a88b527ad9a2ddf0021529bbc7/addons/html_editor/static/src/main/font/color_plugin.js#L247-L247 and then call `getFonts()`, which internally uses `this.dependencies.split.splitAroundUntil()`. If the selection is on a `feff` node, `splitAroundUntil()` can clear those nodes because `splitElement()` inside it dispatches to `clean_handlers` with the selected element containing the `feff`. Since the preserved cursor offset refers to the node before the `feff` was removed, restoring it throws: `The offset x is larger than the node's length (y).` Solution: After `splitAroundUntil()`, adjust the preserved cursor offsets if the nodes were mutated to ensure they remain valid. Steps to reproduce: It is difficult to reproduce manually, but the issue occurs when coloring a link with the selection on a `feff`. A test case replicating the situation can be based on the original failing template in the customer’s database. opw-4953943 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A technical error prevented proper stamping of documents in the Odoo Enterprise demo databases related to Mexican VAT (l10n_mx_edi). This issue has been resolved by uploading the correct certificate file. This ensures the demo environment functions as intended.
Original PR description
In pr #64323 a new way of managing certificates was introduced, but an incorrect change in the “zapateria urtado” certificate went unnoticed, making it impossible to stamp documents in the demo databases unless we changed them manually. To avoid this, we uploaded the correct certificate. I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug where imported 'miscellaneous' entries were incorrectly displayed in filtered invoice views, even when reconciled. The fix ensures that filters accurately exclude these entries, presenting only unpaid or overdue invoices as intended. This improves the accuracy of reporting and financial analysis.
Original PR description
Error steps: - Create or import "miscellaneous" entries in a sales journal (through the FEC import e.g.) - Have at least one late or unpaid invoice in the same journal. - The journal dashboard view should display a "X Unpaid" or "X Late" suggestion -> click on it => The filtered view shows the correct unpaid or overdue invoices/bills AS WELL as the imported entries, even if the latter are fully reconciled already. Now the filters correctly filter out the entries. opw-5215997
A test case was failing due to an error related to payment confirmations. This fix removes a step from the test case that caused the issue, ensuring payments with outstanding accounts can now be correctly confirmed. This resolves a technical issue that could have impacted test execution.
Original PR description
Build was failing with:
```
raise ValidationError(_('A payment with an outstanding account cannot be confirmed without having a journal entry.'))
odoo.exceptions.ValidationError: A payment with an outstanding account cannot be confirmed without having a journal entry.
```
My commit: https://github.com/odoo/enterprise/pull/100924/commits/dd3a7bde1a3b4a22464ded74e25f88ed7a4c8cc0
By the following commit: [commit](https://github.com/odoo/odoo/pull/182390/commits/b572fcd78289013f28f11157b1bfbb75c9ea7344)
When only the `account` module is installed, confirming (posting) a payment will create journal entries. Confirmed payments with outstanding accounts cannot be deleted
To fix this we have removed `action_post` from the test case
Link: https://runbot.odoo.com/odoo/error/234570
runbot error: 234570This update resolves a technical issue that prevented users from adjusting salary sliders within the salary package website. The fix addresses a problem where an 'Always Selected' benefit type caused a system error. This ensures the salary package generation process functions correctly for all benefit configurations.
Original PR description
Steps to reproduce: 1. Install 'hr_contract_salary_payroll' 2. Create three benefits from Payroll > Configuration > Benefits - Basic: Salary Structure Type: US Employee Contract Related Field: Health…
Steps to reproduce:
1. Install 'hr_contract_salary_payroll'
2. Create three benefits from Payroll > Configuration > Benefits
- Basic:
Salary Structure Type: US Employee
Contract Related Field: Health Benefits Dental
Display Type: Slider (1500, 6000)
- Housing:
Salary Structure Type: US Employee
Contract Related Field: Health Benefits Vision
Display Type: Always Selected
- Transport:
Salary Structure Type: US Employee
Contract Related Field: Health Benefits Vision
Display Type: Manual
Mandatory Benefits: Basic, Housing
3. Go to Employees > Contracts
4. Create a new contract:
Set an employee
Salary Structure Type = US Employee
HR Responsible = Mitchell Admin
5. Click the Generate Offer smart button.
6. Open the link
7. Adjust the sliders
Issue: it gives a traceback
`TypeError: Cannot read properties of undefined (reading 'type')`
Cause:
https://github.com/odoo/enterprise/blob/cc3fe89528a143cff3ab03e1654755c34eaac112/hr_contract_salary/static/src/js/hr_contract_salary.js#L480-L482
In checkInputSelected, the target array is empty when an Always Selected benefit is present, causing an attempt to read target[0].type.
Solution:
Add a guard to check that target is not empty before accessing its elements.
opw-5058994This update resolves an issue where commas in payment memos for EFT files were causing errors and rejected file submissions. The fix removes commas from generated files, ensuring correct formatting and preventing payment processing failures. This ensures accurate EFT file exports for New Zealand.
Original PR description
The EFT file format BNZ is exported as a text file. As such, any commas in the field contents will be treated as a new field, resulting in incorrect formatting and a rejected batch file. This…
The EFT file format BNZ is exported as a text file. As such, any commas in the field contents will be treated as a new field, resulting in incorrect formatting and a rejected batch file. This behavior is due to the Odoo community commit [3082d3b](https://github.com/odoo/odoo/commit/3082d3bd0d7a8b45e647c441ba48adcb84a7a070), which partially reversed an improvement to the group payment memo field. - The original behavior was to concatenate the included invoices with spaces (e.g. 'INV/123 INV/124'). - The improvement replaced this with the batch payment reference (e.g. 'BATCH/IN/002'). - The behavior after 3082d3b is to concatenate the included invoices with a space and a comma (e.g. 'INV/123, INV/124' This commit strips the commas from all generated EFT files, instead of further altering the group payment memo field. It also alters existing unit tests to check that commas are removed from payment memo fields. While a fix that changes the memo generation would resolve some issues, this commit ensures that manually added commas will not cause rejected payments. [Ticket link](https://www.odoo.com/odoo/unassigned-tasks/5099220) opw-5099220 Forward-Port-Of: odoo/enterprise#98613