Wednesday, September 10, 2025
34 changes · master
Enhancements to existing features
The Stage Color option is no longer shown as a reporting measure in CRM and Helpdesk analysis views. This keeps reports cleaner by removing a metric that does not provide meaningful business insight.
Original PR description
This commit hides the measure `Stage Color` from graph, cohort and pivot views of the `crm.lead, helpdesk.ticket` model, as it doesn't really make sense to measure on a stage color. The measures are made from the model's fields and all possible measures are shown unless it is made invisible. Therefore make it explicitly invisible. Task-5065924
The promotional video shown when users try to access Studio without it installed has been replaced with a newer version. This keeps the Studio introduction current and improves the first impression for potential users.
Original PR description
**Purpose:** Previously, when the user toggled Studio, it would open a dialog with an old promotional video if the Studio was not installed. Now, the old promotional video has been replaced with the new one. task-5061824
Helpdesk tickets created from incoming email aliases now leave out the sender's email signature from the ticket description. This keeps ticket content focused on the actual request, making it easier for support teams to read and act on new tickets.
Original PR description
This commit excludes email signatures from ticket descriptions when created from an alias. task-4795473
The AI Documents setup was cleaned up by removing duplicate options and making the document sorting wizard easier to configure. This reduces confusion for users setting up automated document actions and helps prevent incorrect action settings.
Original PR description
Purpose ======= Since f7ecd6ddf8fc3457e879ac5e60f63a115e0173b2 , we added the `use_in_ai` field, but it was already in the view. So we removed the old one. Disable the "quick create" of the server actions, in the sort wizard, and set the model to `documents` by default. Task-5076623
The group configuration menu now shows an icon for the automation action, making the option easier to recognize. This is a small usability improvement that aligns the enterprise interface with related updates in the main Odoo product.
Original PR description
This commit adds an icon to the group configuration menu's automation action based on changes made in https://github.com/odoo/odoo/pull/221709. task-4988827
The rental search snippet now uses the current search icon style instead of an older icon. This keeps the website rental experience visually consistent with the rest of Odoo and avoids outdated styling in customer-facing pages.
Original PR description
Previously, the `rental search` inline snippet used the old `fa fa-search` fontAwesome icon. This commit replaces it with the correct search icon (`oi oi-search`). task-5077472
The Project app’s enterprise Gantt view has been updated to match recent changes that remove template-related menus. This keeps project planning screens aligned with the simplified navigation and helps avoid confusion from outdated template options.
Original PR description
adapt gantt view to changes introduced in related community PR: https://github.com/odoo/odoo/pull/225971 task-5073029
Resolved issues and error corrections
This fix removes an unused request timeout option from the Australian payroll API integration. It keeps the integration aligned with the shared EDI proxy behavior and reduces the chance of confusion or inconsistent handling without changing day-to-day user workflows.
Original PR description
remove useless timeout parameter from edi proxy user `_make_request`. It has no legitemate use. see https://github.com/odoo/odoo/pull/225784 no-task
Code cleanup and technical improvements
This internal refactor moves commonly used barcode and RFID scan helpers into the shared web tour testing tools. It makes integration tests easier to maintain and supports more efficient loading of test dependencies, with no expected impact on day-to-day users.
Original PR description
In this commit, we put scan and scan rfid in web_tour tour_helpers. As scan and scanRFID are used quite a lot and web_tour is only used for integration tests, it's more convenient to have scan helpers in web_tour. This commit is made in order to lazy load hoot-dom in web_tour.
This fixes a timing issue that could affect the setup of signable PDF documents. The change makes the signing template editor more reliable by ensuring the item count update is available when needed.
Original PR description
Fixes a race condition in the editable PDF iframe where updateSignItemsCountCallback could be called before it was defined. The callback is now passed as a prop instead of being set from another component. task-5065598
This update assigns the correct payroll user access group to several India payroll employee fields. It prevents a failing automated test and helps ensure payroll-related employee information is handled consistently for authorized payroll users.
Original PR description
Issue: test_employee_fields_groups: This test case fails. Reason: The fields 'l10n_in_pt,l10n_in_esic,l10n_in_labour_welfare' fails because no Groups are assigned to these fields. Fix: Assigned 'hr_payroll.group_hr_payroll_user' to these fields as these fields are in hr_version and also add group to l10n_in_provident_fund, as there also no group is assigned to this field. runbot error - https://runbot.odoo.com/odoo/runbot.build.error/231596
Reinstalling the SEPA Direct Debit module after using it for batch payments no longer triggers an error when no pre-notification periods are available. This helps businesses avoid setup interruptions and keeps payment module maintenance smoother.
Original PR description
**Issue** When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not…
**Issue**
When creating a batch payment with SEPA Direct Debit as payment method, if the user uninstalls the SEPA module and then installs it again, Odoo raises a `TypeError: 'int' object is not iterable`.
**Steps to Reproduce**
1. Create a batch payment with SEPA Direct Debit.
2. Uninstall the `account_sepa_direct_debit` module.
3. Reinstall the module.
**Root Cause**
During module (re)installation, the compute method `_compute_sdd_required_collection_date` is triggered before any SEPA mandates or their pre-notification periods exist. This makes `mandates.mapped('pre_notification_period')` return an empty list. The code then calls:
max(minimum_offset, *mandates.mapped('pre_notification_period'))
When the list is empty, this reduces to `max(minimum_offset)`, which is invalid since `max()` with a single integer argument expects an iterable and raises a `TypeError`.
**Fix**
Handle the empty case so that there is a valid fallback both during installation and when mandates have no configured pre-notification period.
Opw-5042153
Forward-Port-Of: odoo/enterprise#93598Saudi payroll employee fields now use the correct payroll access role instead of the general HR employee role. This fixes a failing validation test and helps ensure non-payroll users do not see payroll-related information.
Original PR description
Issue: - `test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view` test case fails due to the missing payroll user group on the fields. Reason: - The fields were incorrectly assigned to the `hr.group_hr_user` group, which is for employee users. - These fields are payroll related and should only be visible to users with payroll specific roles. Since the test case checks for the correct visibility based on user roles, it failed when it couldn't find the required payroll rights on these fields Fix: - Updated the SA localization fields by assigning them the `hr_payroll.group_hr_payroll_user` group. - This resolves the test case failure and ensures that the fields are hidden from non-payroll users as intended. build_error-231289
The report annotation walkthrough test now waits for annotations to appear before continuing. This prevents false test failures and helps keep accounting reports more reliable during development.
Original PR description
We are now waiting for the annotations to appear.
This update fixes access setup for an Italian payroll employee field and prevents payroll export tests from running when a required leave-management component is not installed. It helps keep automated checks reliable without changing day-to-day business workflows.
Original PR description
Issue: 1) 'test_payroll_fields_are_hidden_to_non_payroll_users_in_employee_form_view' test fails due to the missing payroll user group in the 'l10n_it_sdworx_code' field. 2) Couldn't find the 'hr.leave.type' model when loading the test case. Reason: 1) The field required payroll user rights as it is used in the payroll section in the employee form view. 2) 'hr.leave.type' and 'hr.leave' are models of the hr_holidays module, which is not defined in the manifest. Solution: 1) Assign the 'hr_payroll.group_hr_payroll_user' group to the field 'l10n_it_sdworx_code'. 2) Check if the hr_holidays module is installed then run the test case otherwise return. build_error-231525 build_error-231526
Payroll advice reports in Indian payroll now take the reporting period from the selected payslips instead of today's date. This prevents past payroll advice from showing the wrong period or missing the period entirely, improving report accuracy for payroll teams.
Original PR description
Generating a payroll advice would use the current date in order to find other payslips that are for the current period and use this to fill in the period on the advice. However, if you do this for a past payslip, it will either not find any or get the incorrect period. Changed the behavior to use the actual payslips and get the period from those payslips to fill in the period on the report. opw-4582990 Forward-Port-Of: odoo/enterprise#92935 Forward-Port-Of: odoo/enterprise#81625
This update fixes small usability issues in the Appointment app so users can click the Configure button reliably and start typing question names immediately. It also makes publication status visible in the appointment type list, helping teams quickly see which appointment options are live.
Original PR description
1. Make 'Configure' button in appointment kanban view have correct click area 2. Autofocus name on appointment.question form instead of placeholder in certain cases 3. Add is_published in the list view of appointment types. Task-5057504
Tyro payment refunds now show the expected “Refund in process” message instead of prompting users to wait for a card. This keeps the refund experience consistent with other payment terminals and reduces cashier confusion during refund processing.
Original PR description
Currently tyro completely removes the default behaviour of displaying "Refund in process" when requesting a refund and instead displays "Waiting for card" instead which is not the expected default behaviour on other payment terminals who process the refund without presenting a card.
Creating a new folder from the All documents view now correctly places it in My Drive. This restores the expected behavior and helps users keep newly created folders in their personal workspace without confusion.
Original PR description
About creating folder in All, restoring logic sending to 'MY', OK as portal users don't have the option to create folders. Task-5075200
The dashboard publish control now changes state only when users interact with the checkbox or its label. This prevents accidental publish status changes when clicking elsewhere in the dashboard header, making editing dashboards more predictable.
Original PR description
**Steps to reproduce:** - Open a dashboard in edit mode. - Click the “Publish” toggle to change its state. - Click elsewhere on the header (outside the toggle). → The publish state flips back unexpectedly. **Before this PR:** The wrapper container (.o_sp_publish_dashboard) had a click handler, causing clicks on the header to re-toggle the publish state. The CheckBox was rendered with a no-op onChange, so both elements competed for control. **After this PR:** Interaction is handled exclusively by the CheckBox component. toggleDashboardPublished is bound directly to its onChange. Clicking the label text now correctly toggles the checkbox and publish state. Container clicks outside the checkbox no longer affect the state. Task: [5062368](https://www.odoo.com/odoo/project/2328/tasks/5062368) Forward-Port-Of: odoo/enterprise#94061
The Helpdesk ticket list now opens correctly even when there are no tickets to show. This prevents an error that could block teams from accessing their ticket list view, improving day-to-day reliability.
Original PR description
Previously, accessing the Helpdesk ticket list view with zero tickets caused a crash due to improper handling of folded sample data. This commit resolves the root issue by ensuring sample data folding does not trigger errors in empty views, improving stability. Steps to reproduce the original issue: - Navigate to Helpdesk > Teams > Tickets. - Ensure zero tickets exist and switch to list view. Task-4971510
The Documents kanban view no longer shows an unnecessary second scrollbar. This makes browsing document cards smoother and reduces visual clutter for users.
Original PR description
This commit fix the useless double scroll bar in kanban view. Task-4844661 Forward-Port-Of: odoo/enterprise#90548
Duplicated reconciliation models are now treated as user-created models, so they appear in the expected filters right away. Archiving a reconciliation model also clears related manual unreconciled statement line links, reducing confusion and keeping accounting workflows tidy.
Original PR description
When duplicating an automatically created reco model, the field created automatically was still set to True and so the filter doesn't show the reco model at first. By adding the copy=False it solve the problem Also, this commit will remove any manual reco model of unreconciled statement line when archiving that reco model. no task id Forward-Port-Of: odoo/enterprise#94205
A test was added to ensure early payment discounts created during bank reconciliation receive the correct analytic distribution. This helps prevent accounting reports from missing analytic allocation on discount lines, aligning bank reconciliation behavior with manual payment registration.
Original PR description
This commit adds a test for the following issue: - Configure an early discount payment term (e.g., 2/7 Net 30). - Configure the analytic distribution model with the account used when a discount is granted (e.g., 657000 on the BE fiscal position). - Create an invoice using the early discount payment term. - On bank reconciliation, register the transaction taking into account the early payment discount (e.g., 98% of the invoice amount_total). On the third line with account 657000, corresponding to the early discount payment, the analytic distribution model does not apply. In contrast, when manually registering a payment for the invoice, the analytic is correctly applied. community pr: https://github.com/odoo/odoo/pull/217933 opw-4868986 Forward-Port-Of: odoo/enterprise#91651 Forward-Port-Of: odoo/enterprise#90641
This fix prevents Uruguay electronic invoice creation from failing when an invoice line has no product but does have accounting details. If no line description is available, the system now safely uses a placeholder instead of showing an error.
Original PR description
This pull request makes a minor adjustment to the logic for extracting item names and descriptions in the `_l10n_uy_edi_get_line_nom_and_desc` method. The change ensures that the presence of `aml.name` (the line description) is checked directly, rather than relying on the truthiness of the entire `aml` object. Before this PR, if the aml of an invoice only have the `account_id` field filled and no `product_id`, the `_l10n_uy_edi_get_line_nom_and_desc` will raise an error message like `TypeError: 'bool' object is not subscriptable` when trying to create de CFE document. <img width="1254" height="828" alt="image" src="https://github.com/user-attachments/assets/eaadad4c-46c3-4e3b-be52-9fcd146f2c22" /> <img width="1526" height="795" alt="image" src="https://github.com/user-attachments/assets/1b831f41-9774-4ed5-9a9d-9777ee0633e9" /> With this fix, we ensure there is a name to grab or the '-' will be send instead. Forward-Port-Of: odoo/enterprise#93838
Belgian payroll work entry UCM codes now preserve spaces so they remain the required three characters long. This prevents codes such as "PR " from being shortened when users leave and return to the field, helping ensure payroll data matches UCM specifications.
Original PR description
#### Issue: - UCM work entry code should be 3 characters long and allow spaces to get this length #### Step to reproduce: - In a Belgian company - Go to Payroll > Settings > Work Entry Types > New - Add a name - Add a Payroll Code - In the `Country` field fill Belgium - In the field `UCM Code` enter "PR " - Select another field - Select `UCM Code` again #### Current behavior: - The field `UCM Code` was updated to "PR" #### Expected behavior: - The field should stay to "PR " #### Solution: - Don't trim the field and add a spaces if needed opw-5014372 Forward-Port-Of: odoo/enterprise#92838
This fix prevents an error when Ecuadorian delivery guides are generated while barcode scanning is disabled in Inventory. Businesses can continue creating validated delivery documents without needing to enable barcode features they do not use.
Original PR description
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch…
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch to the `EC company`. - Uncheck `Barcode Scanner` in the Inventory `settings`. - Create a new warehouse and set the `Entity` and `Emission Point`. - Navigate to Inventory > Operations > Deliveries and create a new delivery. - Add details > mark as Todo > Validate > Generate Delivery Guide. **Error:** `AttributeError: 'stock.move.line' object has no attribute 'qty_done'` **Root Cause:** At [1], the `qty_done` field is used, but it is defined in the `stock_barcode` module. When the Barcode Scanner is disabled, the field is not available, leading to the error. **Fix:** This commit ensures that the `qty_done` field is always available when creating Delivery Guides by adding `stock_barcode` as a dependency in the `l10n_ec_edi_stock` module. [1]: https://github.com/odoo/enterprise/blob/ba5b9790f28e2f7eabda22e5992737eab0e82c6e/l10n_ec_edi_stock/models/stock_picking.py#L354 sentry-6851008674
This fix prevents report searches from running before report lines are available, avoiding empty or incorrect results when reports initially load without data. Once the data is loaded, the search is applied again so users get the expected filtered report view.
Original PR description
Recently, we changed reports to load without their data (and lines), since the search bar is loaded with the options it will try to filter on lines that haven't been loaded. Now, we are not searching if the lines are not loaded and search again once they are loaded. task-5068340
The Social app now displays action buttons in the stream post view with proper spacing. This small visual fix makes the interface cleaner and easier to use.
Original PR description
In the stream post view, the action button container uses the `gap-1` class, which applies spacing only to its direct children. Since the action buttons are wrapped in a `<div>`, they are not direct children, and the gap does not apply. As a result, the buttons appear flush against each other with no spacing. To resolve this, unwrap the action buttons from the `<div>`. Once unwrapped, the `gap-1` class will apply correctly, ensuring the buttons are evenly spaced and the interface looks cleaner. | Before | After | |--------|--------| | <img width="275" height="53" alt="Screenshot 2025-09-10 at 09 13 57" src="https://github.com/user-attachments/assets/c270d974-183e-48d5-9b58-2f97770ea13f" /> | <img width="282" height="45" alt="Screenshot 2025-09-10 at 09 14 18" src="https://github.com/user-attachments/assets/9eee758d-6d44-4dac-aebf-a9eb9f82cea5" /> | task-5072894
The bank reconciliation report now excludes currency exchange adjustment entries that do not represent real bank money movements. This prevents those adjustments from appearing under miscellaneous operations, giving finance teams a clearer and more accurate reconciliation view.
Original PR description
**Steps to reproduce** - Have foreign currency with rates for date 1 and date 2 - Have a Bank journal in foreign currency - Register a transaction in date 1 - In date 2 open the unrealized currency report - Create the adjustment entry - From the Accounting dashboard Bank[EUR] > Reconciliation report **Issue** The adjustment entry difference is present under the 'Misc. operations' line. This occurs because we look for journal entries hitting the bank account but that specific entry should not be reported as it does not represent a bank in/out operation A solution is to exclude the exchange entry journal, so any operation reported there is not taken into account in the report opw-4867870 [Ticket link](https://www.odoo.com/odoo/project/49/tasks/4867870) Forward-Port-Of: odoo/enterprise#94172 Forward-Port-Of: odoo/enterprise#93999
The follow-up filters are now only shown to users who have permission to access the related follow-up status information. This prevents users from seeing or using filters that would fail due to restricted access, improving reliability and clarity.
Original PR description
Follow-up filters search using an inaccessible field. The filters should only be visible to users that have access to `followup_status`.
[This commit][1] introduced errors in the Dutch and German translation files. As a result this module can not be installed anymore when any of these languages is used. This commit fixes the errors. [1]: https://github.com/odoo/enterprise/commit/d3d5e667a2d543b55a40148cb536e54d2ac64300
Original PR description
[This commit][1] introduced errors in the Dutch and German translation files. As a result this module can not be installed anymore when any of these languages is used. This commit fixes the errors. [1]: https://github.com/odoo/enterprise/commit/d3d5e667a2d543b55a40148cb536e54d2ac64300
A test for the message attachment menu was updated to match a recent interface change. This helps keep automated checks reliable so future updates can be delivered with fewer false test failures.
Original PR description
Following https://github.com/odoo/odoo/pull/225216, this PR fixes the class used to target an active button. task-5058883 PR-commu: https://github.com/odoo/odoo/pull/225216
This change makes it easier to customize which overdue and upcoming payment lines appear on customer follow-up reports. It helps businesses tailor customer communications without changing the standard reporting flow.
Original PR description
The goal with these hooks is to allow customization of overdue and due lines that are going to be printed on the followup report to be communicated to the customer. Forward-Port-Of: odoo/enterprise#93438