Friday, December 5, 2025
28 changes · master
New functionality added to Odoo
This update adds sample data to the Odoo Enterprise system to demonstrate how referral reporting works. Specifically, it includes data for analyzing applicants by referral method and for tracking referral points within reward reports. This allows users to easily test and understand the referral reporting functionality.
Original PR description
Commit 1: - Remove post init hook for update stage as it just update the data after the demo data is installed. And directly assign the points to the recruitment stage. Commit 2: - Add demo data for applicants with different referral methods to be used in the referral analysis report. - Add demo data for referral points to be used in the reward analysis report demo. task-4687288
This update expands Odoo's US payroll functionality to include support for Vermont, Illinois, Virginia, Washington D.C., Arizona, Idaho, Oregon, and North Carolina. This enhancement ensures accurate payroll calculations and compliance for businesses operating in these newly supported states.
Original PR description
With this, we add support for 8 more states in the US payroll: Vermont, Illinois, Virginia, Washington D.C., Arizona, Idaho, Oregon and North Carolina. Task: 5247501 Forward-Port-Of: odoo/enterprise#101141 Forward-Port-Of: odoo/enterprise#99278
Enhancements to existing features
This update clarifies the labeling of a field used when making salary adjustments within the HR payroll system. The change ensures users understand exactly where this setting is accessible, improving the overall user experience. This is a minor improvement focused on usability.
Original PR description
This change ensures the label accurately reflects where the field is accessible and providing better clarity for users when working with salary adjustments. Task: 5375187 Forward-Port-Of: odoo/enterprise#101065
Resolved issues and error corrections
This update fixes an issue where the payroll system was incorrectly referencing employee version records instead of the main employee records. This change ensures accurate calculations and reporting related to employee compensation, particularly in Switzerland. The fix was triggered by a recent update to the Odoo Enterprise system.
Original PR description
Commit [46052c4](https://github.com/odoo/enterprise/commit/46052c4bc5ad1bd2549a6125202e0671b56beac8) introduced the `hr.version` model, which contains historical information about an employee record. Some of the updated lines use the hr.version ID when they should use `hr.employee`. Ticket [5218215](https://www.odoo.com/odoo/project.task/5218215) Forward-Port-Of: odoo/enterprise#100079
Features or functions removed from Odoo
This update simplifies the AI modules by replacing outdated PyTZ dependencies with the more current ZoneInfo. This change was driven by a previous update to standardize timezone handling within Odoo, ensuring greater consistency and accuracy.
Original PR description
Small commit that replaces pytz dependencies with ZoneInfo since the following PR made that be the standard choice: https://github.com/odoo/odoo/pull/236660
Code cleanup and technical improvements
This update simplifies the way ringtones are handled within the Odoo Enterprise system. Previously, a separate service was required to initialize ringtones; now, ringtones are directly initialized and exported as objects. This change improves efficiency and reduces complexity in the system.
Original PR description
There is no need to have a service to initialize a ringtone object. Instead, we just initialize an object and export it.
This update enhances the user experience on the Frontdesk module by clarifying messages displayed when a report is empty. The changes improve readability and provide a better experience for users viewing an empty report screen, ultimately contributing to a more intuitive interface.
Original PR description
Updating the frontdesk empty screen messages for clarity and improving user experience when viewing an empty report screen. Task: 5380402
This update fixes an issue where the 'Journal Items' link in the General Ledger report incorrectly displayed items not associated with the selected account group. The fix ensures that users see the correct journal items linked to their account groups, improving report accuracy and data reliability.
Original PR description
Repro steps: 1. Create account groups 2. Go to general ledger report 3. Click on 'Journal Items' of one of the account groups lines Problem: The journal items shown don't belong to the account group that it should belong to. Fix: This commit fixes this issue by adding the correct action_domain of account_id.group_id. opw-5180867 Forward-Port-Of: odoo/enterprise#100191
This update fixes an issue where debit notes created in Uruguay were incorrectly assigned as e-invoices (type 111). The fix ensures debit notes automatically use the correct document type (113), streamlining invoice processing for Uruguayan customers. This improves data accuracy and compliance.
Original PR description
**Steps to reproduce:** * Install and activate the **Uruguayan Localization** for the company. * Create a contact located in Uruguay. * Create an invoice for this customer and set **Document Type =…
**Steps to reproduce:** * Install and activate the **Uruguayan Localization** for the company. * Create a contact located in Uruguay. * Create an invoice for this customer and set **Document Type = 111 (e-Invoice)**. * From the invoice's gear icon, create a **Debit Note**. **Observed behavior:** * The debit note is automatically assigned **Document Type 111 (e-Invoice)**, even though it should use **113 (e-Invoice Debit Note)**. * Attempting to change the document type manually only shows 113 as an option, confirming the debit note should not have been set to 111. **Cause:** * `_compute_l10n_latam_document_type()` applies a rule that assigns Document Type **111** to all Uruguay electronic invoices with RUT identification. * This logic does **not** check whether the move is a **debit note** (`m.debit_origin_id`), and therefore incorrectly overrides the expected debit note document type. * The override prevents the correct selection (internal_type == *debit_note*) from being applied. **Fix:** * Add a condition in the automatic e-Invoice assignment logic. * Debit notes now bypass the e-Invoice assignment and fall through to the parent method, which correctly assigns **Document Type 113**. opw-5154599 Forward-Port-Of: odoo/enterprise#100938
This update fixes a problem where annotations in PDF exports of Balance Sheet reports were not displayed in chronological order. Now, the oldest annotations will appear first, ensuring a more accurate and understandable report. This improves the clarity and reliability of financial reporting.
Original PR description
We expect the oldest annotations to appear first when exporting to a PDF.
To reproduce:
- Go to any report such as the Balance Sheet
- Open the chatter for an account
- Post 2 messages ("first" and "second" for exemple)
- Export the report to PDF
This was introduced in https://github.com/odoo/enterprise/pull/95307
Forward-Port-Of: odoo/enterprise#100475This update resolves a test failure that occurred when the demo data was used. The fix ensures the test no longer interferes with the demo environment, preventing disruptions and maintaining the accuracy of the demo setup. This improves the reliability of the demo for testing and demonstration purposes.
Original PR description
Some tests were failing when the demo data were installed. This commit fixes the test so that it doesn't interfere with demo data. Related build error: https://runbot.odoo.com/odoo/runbot.build.error/234529 task-5386529 Forward-Port-Of: odoo/enterprise#101301
This update resolves an issue where bank statement creation would fail when the Chart of Accounts wasn't properly configured. The fix ensures the system only attempts to match accounts when valid accounts are present, preventing a syntax error and improving the reliability of bank statement processing.
Original PR description
**Steps to Reproduce:** 1. Install the **Accounting** module without demo data. 2. In "**Chart of Accounts**", change the type of all accounts (e.g.; Expenses). 3. In "**Bank**" Journal, create a new bank statement line and try to save it. **Error:** ``` SyntaxError - syntax error at or near ")" LINE 19: AND aml.account_id IN () ``` **Cause:** A **IN** condition is evaluated with an empty tuple `AND aml.account_id IN ()`. This is due to that there are no `account_ids`. **Fix:** This commit only executes the SQL query when there are valid accounts to consider. sentry-7059353053 Forward-Port-Of: odoo/enterprise#100931 Forward-Port-Of: odoo/enterprise#100459
This update corrects a visual issue where the activity badge within the bank reconciliation widget was misaligned. The fix removes a styling class that was causing the misalignment, ensuring the badge now appears correctly positioned on the icon. This improves the user experience and visual consistency of the bank reconciliation feature.
Original PR description
Current behavior before PR: The activity badge inside the bank reconciliation widget was misaligned, <img width="55" height="60" alt="image" src="https://github.com/user-attachments/assets/0f99ea55-fedd-401a-a65e-226296070e32" /> Desired behavior after PR is merged: The activity badge now sits in the correct position on the icon. <img width="62" height="55" alt="image" src="https://github.com/user-attachments/assets/abf96aed-73d4-4153-8e0a-56937d4ff08a" /> Changes implemented: - Removed `fa-fw` class. - Removed the unnecessary 'fa-fw' class from comment and paperclip icon. task-5354994 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#100573
This update resolves an issue where the ChatGPT plugin button was disabled when no text selection was made in the HTML editor. Now, the button consistently enables the ChatGPT window, regardless of whether a selection is present, ensuring users can always access the AI features.
Original PR description
This PR fixes an issue with the toolbar button. Before when no selection were applied in the HTML Editor, the button would be disabled. This PR introduce a fix that makes the button enabled in two scenarios: - Either the user has no selection, clicking the button will then open the chat window without any AI button, as it does with the powerbox buttons, - Or the user has a selection, then clicking the button will result in opening the chat window with the AI buttons as it was already the case. If the user has a selection that is empty, then the button remains visible but is disabled. Forward-Port-Of: odoo/enterprise#101332
This update corrects a technical error in how Odoo processes webhook events related to virtual expense cards. Specifically, it addresses a situation where 'None' shipping values were incorrectly treated as dictionaries, preventing proper expense tracking. This fix ensures accurate expense reporting data.
Original PR description
Add a fix to a pattern of error found in webhook events where virtual cards whose shipping value is "None" would be accessed as dict Forward-Port-Of: odoo/enterprise#100703
This update fixes a technical issue that caused duplicate journal entries (reversals and deferrals) to be created, leading to confusing accounting reports. The change ensures that deferred entries are calculated correctly, particularly when invoice dates fall within the same month, resulting in cleaner and more reliable financial records.
Original PR description
When generating deferred entries from invoice lines, certain scenarios led to the creation of both a reversal and a deferral for the same amounts. These entries would effectively cancel each other out, creating unnecessary noise in the journal entries. This issue primarily occurred when the start date, end date, and accounting date all fell within the same calendar month. The problem was exacerbated by the introduction of the `full_months` computation method in https://github.com/odoo/enterprise/commit/5dca9c0c2691cba2335e110ad63a2dcc8bbf6d57. To correctly handle this method and prevent the erroneous paired entries, the end date must now be adjusted by subtracting one month when calculating the deferral period. opw-5000337 Forward-Port-Of: odoo/enterprise#101258 Forward-Port-Of: odoo/enterprise#100507
This update prevents Odoo from endlessly checking the status of NFS-e invoices if the city hall hasn't responded after 10 days. This reduces unnecessary user credit consumption and ensures a smoother process for users. The system now automatically flags invoices that haven't been processed, notifying the user.
Original PR description
Previously, when an NFS-e was submitted to the city hall, a cron job was continuously checking its status. However, if the city hall never responded, the system kept checking indefinitely, leading to unnecessary consumption of user credits. To address this, a limit has now been introduced on these cron checks. If more than 10 days have passed since the invoice was submitted, the invoice is moved to an error status (thereby excluding it from further cron checks), and a log note is posted informing the user. **task**-4776548
This update resolves a skipped test related to map view links within the documents_spreadsheet module. The fix involves adding the `web_enterprise` module as a dependency, ensuring the test now runs correctly and accurately validates the functionality. This improves the reliability of our testing process.
Original PR description
Map view link test was skipped because it depended on `web_enterprise` module, which is not a dependency of `documents_spreadsheet` module. To fix this, we move this test to `test_spreadsheet_edition` module, with `documents_spreadsheet` and `web_enterprise` as new dependencies.
This update resolves an issue where a loading banner remained persistently displayed after switching between report variants. The fix ensures the banner is only shown when data is actively being loaded, preventing it from sticking around unnecessarily. This improves the user experience by eliminating unnecessary visual clutter.
Original PR description
As the `_get_report_information` isn't called when variant changes as report info is already in `reportInformationMap`, the `asyncDataLoading` is set to true and rpc callback never executes, leading to persistence of the warning banner. Fixing this by only setting `asyncDataLoading` right before the rpc call `_get_report_information`. Steps to reproduce: - open Balance Sheet (US) - go to BS generic variant - go back to BS (US) variant - The banner is shown without ever being deleted
This update corrects a technical issue within the account invoice extraction module. The previous method of retrieving data has been replaced with a more modern approach using `get_bool` and related functions. This ensures the system continues to function correctly and aligns with current Odoo standards.
Original PR description
`get_param` doesn't exist anymore, it was replaced by `get_bool`, `get_str`, etc. task-none
This update corrects a bug where vehicles marked for change (but with a 'no change' flag) were incorrectly shown as available. The fix ensures that vehicles slated for change are accurately identified as unavailable, improving the accuracy of vehicle availability reports. This resolves an issue impacting fleet management reporting.
Original PR description
Refine _get_available_vehicles_domain to consider only vehicles with plan_to_change_car or plan_to_change_bike set to True as available. This ensures vehicles planned for change but marked False are treated as unavailable. Related task: 4963484. Forward-Port-Of: odoo/enterprise#101351 Forward-Port-Of: odoo/enterprise#90812
This update resolves an issue where users were unexpectedly redirected back into the sign flow after completing a document signature. The fix ensures users return directly to the correct record (like an Offer or Invoice) without lingering 'Sign' breadcrumbs. This improves the user experience and prevents navigation confusion.
Original PR description
Issue:
- After signing a document, the user is redirected to the correct
record form (e.g., Offer, Invoice) but an extra "Sign" breadcrumb
remained in the navigation.
- Clicking that breadcrumb sent the user back into the sign flow,
creating confusion and breaking the expected navigation behavior.
Fix:
- Updated the close flow in the thank you dialog to use
`stackPosition: "replacePreviousAction"` when a reference document
exists, ensuring the sign dialog controller is removed cleanly.
- Fallbacks use `clearBreadcrumbs` when no reference document is
linked (standalone sign documents).
- This restores correct breadcrumb generation across all sign flows.
Impact:
- Users return to the proper parent record without leftover sign
breadcrumbs.
- Prevents unexpected navigation back into the sign request.
Task: 5175992
Forward-Port-Of: odoo/enterprise#99525This update clarifies the ESIC contribution rules within the payroll system. The tooltip now specifies that employee and employer contributions are calculated only for gross wages below ₹21,000. This ensures accurate reporting and compliance with ESIC regulations.
Original PR description
We are updating the field tooltip. Before: - l10n_in_esic_employee_amount: Employee contributions towards ESIC(Employees’ State Insurance Corporation) are calculated based on their gross wages. - l10n_in_esic_employer_amount: Employer contributions towards ESIC (Employees’ State Insurance Corporation) are calculated based on the employee’s gross wages. After: - l10n_in_esic_employee_amount: Employee contributions apply when the gross wage is below ₹21,000 - l10n_in_esic_employer_amount: Employer contributions apply when the gross wage is below ₹21,000 Task: 5383839 Forward-Port-Of: odoo/enterprise#101198
This update resolves an issue where invalid PDF tests were failing due to compatibility problems with different versions of the PyPDF2 library. The fix standardizes error handling, ensuring tests consistently pass regardless of the PyPDF2 version used, improving the reliability of the sign document process.
Original PR description
## Case 1: When `pypdf2_2` is not installed, it falls back to using the pypdf package. (Ref1) This triggers a warning during the test case when it tries to parse an invalid PDF. This commit…
## Case 1: When `pypdf2_2` is not installed, it falls back to using the pypdf package. (Ref1) This triggers a warning during the test case when it tries to parse an invalid PDF. This commit suppresses the warning to ensure the test runs without warnings. Ref1: https://github.com/odoo/odoo/blob/26a5384af0af8fc6e6b5a10bea277f937e2b3481/odoo/tools/pdf/__init__.py#L42-L46 ## Case 2: With **PyPDF2===1.26.0**, the line at [1] raises a `PyPDF2.utils.PdfReadError: EOF marker not found`. This exception is not handled by the same except block but is instead handled later in the flow at [2]. As a result, the test raises a **UserError**, causing the assertion to fail. On the other hand, when `pypdf2_2` or `pypdf` is installed, the _PdfFileReader_ raises a **UnicodeDecodeError**, which is then handled as a **ValidationError**, allowing the test to pass as expected. This commit adds handling for **PdfReadError** in method `get_valid_pdf_data()` to unify the behavior across all supported PyPDF versions. 1: https://github.com/odoo/enterprise/blob/f79601c62ca629dc01a5c1ad5520b0bb44a169d0/sign/utils/pdf_handling.py#L27 2: https://github.com/odoo/enterprise/blob/f79601c62ca629dc01a5c1ad5520b0bb44a169d0/sign/models/sign_document.py#L433-L437 Runbot-234021, 234022 Forward-Port-Of: odoo/enterprise#99757
This update fixes an issue where PDF payslips generated from payruns were named 'new payslip' instead of including the employee's name and pay period. Now, payslips will correctly display 'Salary Slip - [Employee Name] - [Time Period]', ensuring accurate and professional payroll documentation. This improves the user experience and consistency of our payroll reports.
Original PR description
[FIX] hr_payroll: write full name on payslip generated from payrun _ ## Short functional explanation of the error When generating a payslip from a payrun for an employee, the name of the PDF payslip…
[FIX] hr_payroll: write full name on payslip generated from payrun _ ## Short functional explanation of the error When generating a payslip from a payrun for an employee, the name of the PDF payslip is simply "new payslip" instead of "Salary Slip - <name of employee> - <time period of the slip>" ## Reproduction Steps 1. Go to Payroll and click on the Payslips tab > payslips. 2. Click on Pay Run. Select Regular Pay and click Continue. 3. Select an employee for which you'd like to generate the payslip. 4. Click on the employee row in the list view. 5. Click Compute sheet > Print. ## Expected behavior A PDF with name "Salary Slip - <employee name> - <time period>" is generated. ## Unexpected Behavior A PDF with name "new Payslip" is generated. ## Origin of the issue When printing the slip with this flow, we don't call the method ```_compute_name()``` used to compute the name of the current slip. Therefore, it stays at 'New Slip', which is the default name. Henceforth, we have to call this method manually when printing the slip. _ opw-5216796 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#101259 Forward-Port-Of: odoo/enterprise#101056
This update prevents users from modifying existing approval requests. Allowing edits would have caused unpredictable behavior and potential errors within the system. This change ensures the integrity and reliability of the approval process.
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#101328 Forward-Port-Of: odoo/enterprise#100273
This update removes an outdated dependency (pytz) from the AI module. The change was made to improve performance and align with best practices for timezone handling. This ensures Odoo continues to run efficiently and reliably.
Original PR description
Since #100008 the usage of pytz should be avoided and replaced by ZoneInfo.
This update removes a rarely used code for work entry types within the Odoo Enterprise payroll module. This cleanup improves the system's efficiency and reduces potential complexity. The change is a routine maintenance task to ensure the system remains optimized.
Original PR description
Removed code `LEAVE510` since it's not referenced anymore Task: 5365455