Wednesday, December 3, 2025
25 changes · master
Enhancements to existing features
This update streamlines the rendering of templates within Odoo Enterprise modules by removing outdated syntax and promoting cleaner, more efficient code. The changes enhance performance and maintainability, ensuring a smoother user experience for Enterprise users. This work addresses inconsistencies and improves the overall structure of the templates.
Original PR description
see community: https://github.com/odoo/odoo/pull/235469 see: https://github.com/odoo/odoo/pull/197296
This update enhances the Odoo Enterprise VoIP system by displaying the last called number when the call button is clicked, even if no numbers are initially entered. This simplifies the dialing process for users and improves the overall user experience. It's a minor improvement focused on usability.
Original PR description
If no numbers are provided, when click on the call button in keypad, we will show the last called number. Task-5225969
This update replaces the specific "Uruware" name in the Odoo settings with a generic "UCFE Provider" label. This ensures customers contact Odoo support for assistance and maintains a consistent configuration for Uruguayan users, streamlining the setup process.
Original PR description
Before: -In the Settings > Uruguay Localization section, electronic invoicing provider was shown as "Uruware". -This could lead customers to contact Uruware directly instead of Odoo support. After: -Replaced all mentions of `Uruware` with generic name, `UCFE Provider`. -Updated labels and descriptions in both testing and production sections. -The overall configuration and functionality remain unchanged. Impact: -Removes direct provider references from the interface. -Ensures customers contact Odoo support for any assistance. -Keeps the configuration clear and consistent for Uruguayan users. task-5244539 Forward-Port-Of: odoo/enterprise#101053 Forward-Port-Of: odoo/enterprise#99065
This update streamlines email templates across several Odoo modules by utilizing a simplified template structure and optimizing translation handling. The changes remove redundant header and footer elements, improving email performance and reducing complexity. This impacts modules including sale_subscription, documents, and knowledge.
Original PR description
We use encapsulating template wherever it is possible to simplify the email templates (by removing the header and the footer that are now in the generic encapsulating template). To translate the…
We use encapsulating template wherever it is possible to simplify the email templates (by removing the header and the footer that are now in the generic encapsulating template). To translate the subtitles into the recipient language, we use LazyTranslate to defer translation until the recipient’s language is available in context. Notes about sale_subscription: - mail_template_subscription_alert has not been modified as it don't really have a header or a footer but just a frame with a title around the message which don't repeat information of the header or the footer. - To get a simpler header, we use "mail_notification_light" as layout for the mail_template_subscription_rating template (through the email_layout_xmlid field added in odoo/odoo#114462). Note about knowledge: we adapt the code following the replacement of the "subtitles" parameter of the method mail_thread.message_notify method by the context variable "email_notification_subtitles". various: documents, knowledge, payment_sepa_direct_debit, sale_subscription, timesheet_grid Task-2810103
This pull request updates the tests for the documents_spreadsheet module to align with recent code modifications. These changes ensure the tests accurately reflect the current functionality and maintain the stability of the enterprise version of Odoo. This is a routine maintenance update.
Original PR description
This commit adapts tests to changes made in https://github.com/odoo/odoo/pull/237520 task-5355048
This update refines the promotion studio functionality within the Enterprise module. By switching to a button tag, the studio dialog is now correctly disabled when the system is offline, preventing unnecessary attempts to open it. This ensures a smoother user experience, particularly for users operating in offline environments.
Original PR description
By using a button tag, the item is properly disabled in offline mode, which is what we want as it doesn't make sense to open the dialog to promote/install studio in that case. Task~5359151
Resolved issues and error corrections
This update fixes an error that prevented payroll officers from accessing salary offers. The issue stemmed from the module attempting to access candidate information, which required recruitment rights. The fix ensures payroll officers can now open and manage offers without needing these additional permissions.
Original PR description
steps to reproduce: - Install l10n_be_hr_contract_salary - Log in as a payroll officer (without recruitment rights) - Go to Payroll > Contracts > Offers - Open any offer - Notice an 'Access Error' appears: You are not allowed to access 'Candidate' (hr.candidate) records. cause: The module tries to read `employee_id.candidate_id.partner_id` in offer computations. Since payroll officers lack recruitment rights accessing `hr.candidate` triggers an access error. fix: Wrap candidate access in try/except to handle missing permissions. - If accessible, candidate partner data is used as before. - If not accessible, skip without raising an error. This allows payroll officers to open and generate salary offers without requiring recruitment rights. task - 5039712 Forward-Port-Of: odoo/enterprise#100980 Forward-Port-Of: odoo/enterprise#95869
Code cleanup and technical improvements
This update simplifies the way Odoo interacts with IoT devices by removing an unnecessary layer of code. The shift to the `iot_http` service allows direct access to devices through related models, improving efficiency and reducing complexity. This change enhances the overall system performance.
Original PR description
As we now use the `iot_http` service instead of the `iot_longpolling` one, we don't need to add the `DeviceController` layer on devices. We now directy use the devices from related models.
A minor grammatical error in the SEPA Direct Debit payment provider configuration message has been corrected. This ensures consistent and accurate messaging for customers, improving the overall user experience. The change replaces 'an unique' with 'a unique' in the 'Pending Message'.
Original PR description
Currently, a typo appears in the `Pending Message` shown in the SEPA Direct Debit payment provider configuration. **Steps to reproduce:** - Install the `payment_sepa_direct_debit` module. - Navigate…
Currently, a typo appears in the `Pending Message` shown in the SEPA Direct Debit payment provider configuration. **Steps to reproduce:** - Install the `payment_sepa_direct_debit` module. - Navigate to Invoicing > Configuration > Payment Providers > SEPA Direct Debit. - Open the `Messages` tab and observe the `Pending Message`. **Observation:** The message uses "an unique" instead of the grammatically correct "a unique". **Fix:** This commit corrects the message by replacing "an" with "a" at [1]. Before: <img width="1903" height="606" alt="typo_before" src="https://github.com/user-attachments/assets/df4f658b-9f4c-4e68-b8cb-a1bdc2253fc3" /> After: <img width="1900" height="609" alt="typo_after" src="https://github.com/user-attachments/assets/e9192d70-b343-4e4e-9e21-281a93d4d71e" /> [1]: https://github.com/odoo/enterprise/blob/6c3692d85bf1ef7b14d930d9a1ed244cf8aa851b/payment_sepa_direct_debit/data/payment_provider_data.xml#L13 opw-5373274 Forward-Port-Of: odoo/enterprise#100983
This update resolves an issue where clicking 'Details' on completed signed documents resulted in an error. The fix ensures the correct sign request record is retrieved, allowing users to now seamlessly view the details of signed documents and maintain workflow efficiency.
Original PR description
Version: - saas-18.4 Steps to reproduce: - Open a template that has at least one completed signed request. - Click the Signed Document state button. - See all documents - Click on the detail button Before: - Clicking the Details button on a completed signed document caused a traceback. - This happened because the view was using the record ID from this.props.record.context, which referred to the sign template instead of the sign request, causing incorrect data to be fetched. After: - Use this.props.record.evalContext to retrieve the correct sign request record ID, with this.props.record.context as a fallback. Impact: - Users can now view signed document details without errors, improving workflow continuity and overall usability. task-5253632 Forward-Port-Of: odoo/enterprise#99221
This update fixes a reporting issue where the partner filter in the Partner Ledger report wasn't consistently displaying all transactions related to a partner. The fix ensures that both invoices and related operations (like misc entries) are visible when using the filter, improving reporting accuracy and data visibility.
Original PR description
To reproduce: - create an invoice for partner Bernard Gagnant (very important) - reconcile that invoice with a misc operation ; make sure not to set any partner on the receivable line of that entry - Open the Partner Ledger: both the invoice and misc operation appear under "Bernard Gagnant". This is due to a hack in that report and is the intended behavior - Use the partner filter, on top of the report, to only display partner "Bernard Gagnant" ====> The misc operation does not appear anymore. After this fix, if the filter is applied, we will be able to see both the invoice and the misc operation under the partner. task-5150419 Forward-Port-Of: odoo/enterprise#97528
This update fixes a misleading warning that appeared when renewing subscriptions in version 19.0. The change prevents the system from flagging renewal quotes as duplicates, ensuring a smoother process for users. This improves the user experience and avoids unnecessary notifications.
Original PR description
Version: - 19.0 Steps to reproduce: 1. Create a subscription. 2. Set a customer reference 3. Confirm the subscription and create an invoice. 4. Renew the subscription to generate a renewal quote (state '2_renewal'). Issue: A duplicate order warning is displayed when renewing a subscription Solution: Exclude renewal quotes (`subscription_state == '2_renewal'`) from the duplicate order check in `_fetch_duplicate_orders`. This prevents incorrect warnings when creating or opening renewal quotes. taskid-5258963 Forward-Port-Of: odoo/enterprise#99344
This update adds logging to the automated reconciliation process, making it easier to identify and resolve issues when it runs in user environments. Previously, debugging was difficult, but these new loggers provide greater visibility into the process's execution. This improves reliability and reduces troubleshooting time.
Original PR description
For the moment, it's difficult to debug in users databases in the cron and the try auto reconcile. This commit will add some loggers to be more aware of what's going on. task-5358849 Forward-Port-Of: odoo/enterprise#101003 Forward-Port-Of: odoo/enterprise#100601
A bug causing internal server errors when printing audit reports has been resolved. The update ensures the correct PDF export function is used for this specific report type, improving the reliability of the annual report generation process. This prevents errors and ensures accurate report output.
Original PR description
Steps to reproduce: - Go to "Accounting/Review/Audit/Annual Report" and create an Audit Report. - click "Print" -> Internal Server Error This happens when generating the Journal Audit pdf, this report needs to uses the `export_to_pdf` that is defined in its custom handler `account.journal.report.handler`. The solution is to use `dispatch_report_action`, as it will determine which function to use in order to export the pdf for each report. no-task Forward-Port-Of: odoo/enterprise#100949
This update removes outdated configurations that forced specific start dates for reports. Now, users can easily set the correct start date through the standard form view, simplifying the reporting process. This change improves usability and ensures accurate reporting data.
Original PR description
These overrides are useless now that the user can access the return type form view and configure himself the start_date. Overriding _get_start_date_elements should be avoided as much as possible as this is making the field on the form view useless if set. Forward-Port-Of: odoo/enterprise#100728
This update resolves a technical issue that caused a traceback when users clicked the 'Tracks' stat button on an event page. The problem stemmed from missing data fields in the event view. This change ensures a smoother user experience and prevents errors when viewing event tracks.
Original PR description
**How to reproduce:** - Open an event - Click on 'Tracks' stat button **Before this PR:** A traceback occurs. **Technical reason:** Some fields are missing from the view. They were removed here: https://github.com/odoo/enterprise/commit/301f63597b0c21fef16a1941314ac95602c8f01f **After this PR:** No traceback Task-5262404
This update corrects a flaw in the VoIP contact search test. Previously, the test could incorrectly identify matches due to demo data. The fix now ensures the test only uses data created within the test environment, guaranteeing accurate results and preventing misleading test outcomes.
Original PR description
In the test, we suppose to find no phone number matched result when search term length is shorter than `_phone_search_min_length`. However, it can still match `name` or `email` if possible. In this fix, we change the test to only consider the data created in the test, to avoid the wrong result from demo data.
This update allows authorized users to cancel payslips without needing to be accountants. Previously, reversing a payslip required specific accountant group permissions on related account moves. This change simplifies the process and improves usability for users needing to correct payroll data.
Original PR description
As you need to have accountant group on some fields of the account move to be able to reverse it. We need to do it as sudo. Forward-Port-Of: odoo/enterprise#101076
This update streamlines the HR payroll system by removing unnecessary references to input fields. Previously, values lingered even when other related fields were changed, causing potential upgrade issues. This change enhances stability and simplifies the system's operation.
Original PR description
Currently when setting condition_other_input_id or amount_other_input_id the value stays until changed again, even if we change condition_select or amount_select to another value. In this commit, the reference to an other_input will be removed if we no longer need it. This is done to prevent issues when upgrading for example, where a reference stops a delete_unused when it is not really used. task-5265607
This update resolves an issue where the AI module was incorrectly handling file content. The changes prevent unnecessary data duplication and ensure consistent checksum calculations, improving the reliability of AI document processing. This is a minor fix focused on internal AI module functionality.
Original PR description
The cron is encoding the `content` to compute its checksum already. Also don't set `index_content`, as far as I can tell it's unconditionally computed by `ir.attachment` on both create and write (via `_set_attachment_data` in the latter case). Forward-Port-Of: odoo/enterprise#100985
This update fixes a technical issue that prevented completion notifications within the MRP Work Order module from being translated into different languages. The fix ensures that users receive notifications in their preferred language, improving the overall user experience and localization capabilities. This resolves a previous bug impacting internationalization.
Original PR description
The `_t()` was put around the wrong thing, making the strings never translatable. Followup to: 4403621 Forward-Port-Of: odoo/enterprise#101119
This update fixes an error in the default role name used within the sign module. The incorrect name caused potential issues with role assignments and access control. This change ensures proper functionality and security within the sign process.
Original PR description
task-5358513 Forward-Port-Of: odoo/enterprise#100474
This update corrects a bug that previously prevented users from setting negative completion targets for sales commission plans. Previously, attempting to set a negative target would cause an error. Now, negative targets are allowed, ensuring greater flexibility in commission plan configuration. This resolves a potential issue where accurate commission calculations were impossible.
Original PR description
Before this commit, it was not possible to define negative completion target on the plan. task-5362854 Forward-Port-Of: odoo/enterprise#101095
A bug in the payment state test has been fixed. The test now correctly reflects the payment state of invoices based on whether the ‘accountant’ module is installed. This ensures consistent invoice tracking across different Odoo configurations.
Original PR description
The `test_bill_state_change_on_payment_state` is throwing an exception. ``` self.assertEqual(payment.invoice_ids.payment_state, 'not_paid') AssertionError: 'paid' != 'not_paid' - paid + not_paid ```…
The `test_bill_state_change_on_payment_state` is throwing an exception. ``` self.assertEqual(payment.invoice_ids.payment_state, 'not_paid') AssertionError: 'paid' != 'not_paid' - paid + not_paid ``` The test was incorrectly expecting invoice `payment_state` to always be `not_paid` when payment is reset to draft, but behavior differs based on whether `accountant` module is installed or not. - With `accountant`: Payment has no move_id (no journal entry created by default), so when drafted, `invoice.matched_payment_ids` filters exclude it, resulting in 'not_paid' state. - Without `accountant`: Payment has move_id (journal entry auto-created) so filter conditions fail (`not p.move_id` is `False`), and invoice stays `paid` due to existing reconciliations in `draft` state. Test was introduced here: https://github.com/odoo/enterprise/pull/100834/commits/402bd85af79fa68fa2cb957d40307edf62f7525c Commits that introduced the behavior change: https://github.com/odoo/odoo/pull/182390/commits/b572fcd78289013f28f11157b1bfbb75c9ea7344 https://github.com/odoo/odoo/blob/57f1053b031f293c6cd8dc8f590dccda4fb3e665/addons/account/models/account_move.py#L1308-L1314 Runbot [link](https://runbot.odoo.com/odoo/error/234573) runbot error: 234573 Forward-Port-Of: odoo/enterprise#101089
This update resolves a technical issue that caused Odoo to crash when users selected multiple boxes within the bank statement attachment previewer. The fix ensures the system correctly handles situations where a page doesn't contain date information, preventing the error and improving stability.
Original PR description
If a group of boxes is selected on the attachment previewer on a page that doesn't contain any date, a crash would occur as `this.boxes['date'][pageNumber]` was undefined. task-none Forward-Port-Of: odoo/enterprise#99549