Daily updates from Odoo
Friday, March 20, 2026
21 changes · master
New functionality added to Odoo
This update allows users to create Documents records directly from employee files uploaded through standard form fields. Previously, this feature was blocked for attachments with a specific field setting. This change improves the process of managing employee-related documents within Odoo Enterprise.
Original PR description
TEMP
Enhancements to existing features
This update enhances the visual appearance of spreadsheet controls by adopting a custom component, improving the overall user experience. This change focuses on the spreadsheet edition within Odoo, aligning its design with other Odoo modules. It's an internal improvement to the user interface.
Original PR description
We implemented a custom `Select` component in o-spreadsheet to improve the look and feels over native `<select>` elements, but didn't change the `<select>` present only in Odoo. Task: [6043744](https://www.odoo.com/web#id=6043744&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update simplifies the user experience by replacing all 'Cancel' buttons with 'Discard' buttons across several Odoo modules. This change improves clarity and consistency for users, allowing them to easily revert actions without confusion. The change is a minor improvement to the user interface.
Original PR description
Use Discard rather than Cancel Task: [5353199](https://www.odoo.com/odoo/2328/tasks/5353199)
This update centralizes how external requests are mocked across various Odoo modules. This change improves control over access to external resources and simplifies default settings, leading to more reliable and consistent testing. It's a foundational step towards better security and maintainability.
Original PR description
Centralize all requests-related mocking in one place This is a first step in our effort to centralise requests/responses/session objects in order to have better control on what should and should not be accessible to internal and to server action developers, as well as improve defaults. Creating a facade for most requests/responses & session objects breaks a lot of tests, as each module mocks responses in their own way, and thus makes building minimal facades difficult. task-4930532 Related: https://github.com/odoo/odoo/pull/249057
Resolved issues and error corrections
This update optimizes the database by removing unnecessary default values from company and partner records. Specifically, the automatic setting of branch codes and purchase date defaults has been removed for multi-company environments, reducing data storage and improving performance. This change ensures that each company's data is accurate and efficient.
Original PR description
On multi-company databases, having the defaults value on res.partner fields can unnecessary bloat the database for other companies with different fiscal package (localization). This commit remove the `l10n_ke_branch_code` field default on `res.partner` - the related field on `res.company` has been converted to a stored-compute + inverse so that partner related to a company automatically get the default value `00` whithout needing to touch other partner records. The `l10n_ke_oscu_last_fetch_purchase_date` default on `res.company` has also been removed, cron already fallback to the same default value when none are provided and will update it anyway after it ran. opw-5220129 Forward-Port-Of: odoo/enterprise#105917
This update resolves a problem preventing users from successfully connecting their expense accounts via Stripe. The issue occurred when users attempted to connect through the expense settings, specifically by accepting the terms of service and clicking the 'Connect' button. This fix ensures seamless integration for expense reporting.
Original PR description
To reproduce: - Install hr_expense_stripe_demo - Open the expense Settings - Accept the TOS - Click on Connect (demo)
This update corrects a technical issue in the Account Avatax module, ensuring that company-specific settings are accurately identified. Previously, a key piece of information was missing, which has now been added to improve the module's functionality and data accuracy. This ensures proper tax calculations and reporting.
Original PR description
Since the beginning `account_avatax` has had all of it's data stored on the company, however, it missed the company_dependent key in settings to mark it as such. This commit fixes that. Followup of odoo/odoo#254242 task-none Forward-Port-Of: odoo/enterprise#110983
This update fixes an issue where multiple email addresses on a contact were being overwritten when creating a helpdesk ticket. The change ensures that all email addresses associated with a contact are correctly captured, improving the reliability of ticket creation. This was caused by a technical limitation in how email addresses were handled, and the fix simplifies the process.
Original PR description
Prerequisites: ------------------------------ 1. Set up incoming mail server with Create a New Record set to Helpdesk Ticket 2. From Settings, create one Alias Domain Steps to reproduce:…
Prerequisites: ------------------------------ 1. Set up incoming mail server with Create a New Record set to Helpdesk Ticket 2. From Settings, create one Alias Domain Steps to reproduce: ------------------------------ 1. Install Helpdesk module 2. Open Helpdesk Team > Settings 3. Inside Channels, Set the mail used for the incoming server and the alias created 4. Set Accept Emails From to Everyone 5. Create a new contact with multiple emails (eg: `a@b.com`, `c@d.com`) 6. From Fiest mail (eg: `a@b.com`), Send one mail to mail set in the helpdesk team alias mail. 7. Open Incoming mail sever > Click on Fetch Now 8. Open Created Contact Observation: ------------------------------ The contact's email field is overwritten. The second email address (e.g. `c@d.com`) is lost Issue: ------------------------------ After `create`, since `partner_email` was stored with a value that differs from `partner_id.email`, the inverse method `_inverse_partner_email` kicks in. This is where `_get_partner_email_update()` is called. In `_get_partner_email_update()` `tools.email_normalize()` only handles a single email. When the partner has multiple email, the normalization keeps both, while the ticket email normalizes to just have one mail. The strict `!=` comparison fails, triggering the unwanted update. https://github.com/odoo/enterprise/blob/7c23efafe368787c858db31cec075f642ae6715b/helpdesk/models/helpdesk_ticket.py#L363-L369 Solution: ------------------------------ Instead of comparing the full normalized strings, we should check whether the ticket's normalized email is contained within the set of the partner's normalized emails Note for reviewer ----------------------------- After discussion with the PO (LNA), his opinion is that having multiple email addresses in a single field is not a good practice. This use case is only semi-supported in Odoo, it may work in some cases, but it is not reliable. The recommended approach is to create separate contacts for each email address. That said, we should also avoid automatically clearing or altering the existing value in the field. Based on this, I have implemented a minimal fix that prevents altering the existing value in the field. I am leaving it up to the review to decide whether this fix is worth keeping from a technical standpoint. opw-5478067 Forward-Port-Of: odoo/enterprise#107808
A recent update to the document layout, including VAT information, caused a test to fail. This fix addresses a problem where the test's editor selection wasn't correctly updated after adding the VAT block, preventing a key feature from working. The update ensures the test now passes, guaranteeing correct VAT display functionality.
Original PR description
Issue The test `test_edit_header_only_company` was failing after updating the document layout to include the VAT block in the company address section. Cause Adding the VAT line modified the DOM structure of the header layout. The tour step inserting the placeholder span no longer correctly set the editor selection, preventing the powerbox from opening and causing the test to fail. Solution Update the tour to explicitly reset the editor selection after inserting the span so that the powerbox can open correctly. opw-5373374 Related Community PR : https://github.com/odoo/odoo/pull/249225 Forward-Port-Of: odoo/enterprise#109924
This update ensures that follow-up emails for invoices now send the actual invoice PDF, rather than relying on the main attachment. This prevents issues where users might have uploaded alternative PDFs, ensuring accurate and consistent invoice reminders are sent to customers. This resolves a previous bug related to attachment selection.
Original PR description
Before, the followup emails used the Invoice's main attachment. This is not correct because a user might have uploaded an arb PDF. Only the actual PDF should be sent. Use `invoice_pdf_report_id` instead of `message_main_attachment_id`. opw-5126420 Forward-Port-Of: odoo/enterprise#111085 Forward-Port-Of: odoo/enterprise#98820
This update resolves a technical problem within Odoo's web studio that prevented users from correctly editing views, specifically when using inherited views. The fix ensures that the studio accurately recognizes and incorporates inherited views during the view creation process, preventing errors and crashes. This improves the stability and usability of the web studio.
Original PR description
This commit is a followup to odoo/enterprise#94747 which was made incomplete by odoo/enterprise@52f27c4. Sometimes actions set one of their view to an inherited view rather than the primary. This created traceback because the to-be-created studio arch was normalized against the inheritance tree without the given inherited view, which is wrong. After this commit, there is no crash. opw-5955734 Forward-Port-Of: odoo/enterprise#111245 Forward-Port-Of: odoo/enterprise#110835
This update fixes an issue with the numbering of lines within the Vietnamese balance sheet report. Specifically, the order of items under 'I. Short-term liabilities' was corrected. This ensures the report accurately reflects financial data for Vietnamese businesses using Odoo Enterprise.
Original PR description
- Fixed the numbering of report lines under the section "I. Short-term liabilities" in the balance sheet report 6035762 Forward-Port-Of: odoo/enterprise#111335 Forward-Port-Of: odoo/enterprise#111234
This update corrects a visual issue in the partner ledger report where overdue invoices and negative amounts weren't consistently displayed with the correct color (red and blue, respectively). The fix ensures that key financial information is clearly highlighted, improving report readability and accuracy for users reviewing their accounts. This improves the user experience when analyzing overdue invoices.
Original PR description
commit introducing the issue: https://github.com/odoo/enterprise/commit/6608d5c21a7fb9d57786c2a7618b878e244bd420 Steps to reproduce: - open the partner ledger with some one overdue invoice -> The expected result should be to see the due date in red. -> Negative amounts in the partner ledger should be displayed in blue as well. Forward-Port-Of: odoo/enterprise#111295
This update corrects a problem where text fields in Odoo Sign's PDF forms were incorrectly displayed as checkmarks. The issue stemmed from an error in how the system interpreted PDF tags, specifically when standard text fields had appearance settings. This change ensures that text field values are correctly rendered in signed documents.
Original PR description
Create an interactive PDF form in Adobe Acrobat containing a standard Text Field (/FT /Tx). - Fill the text field with a value (e.g., "John Doe") and save the PDF. - (Note: Adobe Acrobat will often…
Create an interactive PDF form in Adobe Acrobat containing a standard Text Field (/FT /Tx). - Fill the text field with a value (e.g., "John Doe") and save the PDF. - (Note: Adobe Acrobat will often automatically assign an Appearance State (/AS /N) to this text field). - Upload this PDF to the Sign app. **Current behavior:** The text field's string value is ignored and replaced with a checkmark (✓). **Expected behavior:** The text field should correctly render the string value that the user entered. **Cause of the issue:** In the _draw_field_value function, the parser checks if an /AS (Appearance State) tag exists and is not set to /Off. If true, it assumes the field is a checked box and draws a chr(0x2713). However, it fails to check the Field Type (/FT) first. Because Adobe Acrobat sometimes assigns /AS tags to standard Text Fields (/FT /Tx), we misinterprets these populated text fields as checked buttons. **Solution:** This PR fixes the issue safely for stable versions across two commits: [REF]: Extracts the value extraction logic into a dedicated _get_field_value helper method to allow isolated unit testing without requiring a canvas or physical PDF files. No behavioral changes in this commit. [FIX]: Wraps the /AS check within an if field_type == "/Btn": condition. This ensures only actual Checkboxes and Radio Buttons render as checkmarks, allowing Text Fields to fall through and properly return their /V string values. Task: 6018260 Forward-Port-Of: odoo/enterprise#110865 Forward-Port-Of: odoo/enterprise#110292
This update resolves an issue where Odoo would display an error message if Sendcloud didn't respond with shipping price information. The fix prevents a program crash by gracefully handling the situation where Sendcloud doesn't provide a response, ensuring a smoother user experience.
Original PR description
Sendcloud sometimes doesn't respod when asking for `shipping-price`. So when we try to retrieve the first element of the response, we raise an `IndexError`. ----- Ticket: opw-5951749 Forward-Port-Of: odoo/enterprise#111057 Forward-Port-Of: odoo/enterprise#109252
This update resolves an issue where the attendance Gantt chart incorrectly displayed employees without contracts, leading to inaccurate reporting. The change ensures these employees are not shown in the Gantt view, aligning with the system's requirement that only employed staff can record attendance.
Original PR description
In a recently created database, the attendace gantt chart hides all hours of the day, as an employee with no contract is considered unavailable at all times. This commit will make employees with no contract act as if they were in a flexible calendar (only for the gantt view of course). task-5222648
A technical error preventing a test process (runbot) from correctly evaluating overtime rules was resolved. The update corrected the tour's triggers to align with the current system, ensuring accurate overtime calculations and preventing disruptions to payroll processing.
Original PR description
The tour for the overtime ruleset flow was failing in the runbot because some of the triggers do not exist in the view. Updated the tour to use the correct triggers for each action. Task: 6053589
This update ensures that Sales Orders generated from Field Service timesheets only assign a salesperson to the order when the technician has Sales or Invoicing access. Previously, technicians without these permissions were incorrectly assigned as salespeople, leading to unwanted invoice notifications and follower assignments. This change improves data accuracy and reduces unnecessary communication.
Original PR description
Before this commit: - - With the Field Service and Planning integration, validating a planning shift linked to a Field Service project could generate a Sales Order from timesheets and materials. - The user linked to the resource was always assigned as salesperson on the generated Sales Order. - When that user had no Sales or Invoicing access, they were still set as salesperson, causing them to be added as followers on invoices and receive billing-related notifications. After this commit: - - The salesperson is assigned on the generated Sales Order only when the assigned user has Sales or Invoicing access. - If the user lacks these access rights, the salesperson field is left empty, preventing technicians from being added as invoice followers or receiving billing-related notifications. task-5023095
Features or functions removed from Odoo
This update removes user activities from the calendar view within the Point of Sale (POS) system. Previously, user activities were displayed, which was causing performance issues and unnecessary complexity. This change simplifies the POS experience and improves system efficiency.
Original PR description
Following odoo/odoo#244236 user activities can now be displayed in the user calendar. Prevent loading and displaying the user activities in point of sale. Task-5428944
Code cleanup and technical improvements
This update clarifies the names of key fields related to reinvoicing policies, enhancing clarity and consistency. Additionally, the model and view files for the timesheet functionality have been renamed to align with standard Odoo naming conventions, improving code organization and developer readability. This change supports ongoing improvements to reporting.
Original PR description
This PR renames several fields to better reflect their purpose and follow naming guidelines. Fields: * `expense_policy` → `reinvoice_policy` * `visible_expense_policy` → `visible_reinvoice_policy` Files: * `models/hr_timesheet.py` → `models/account_analytic_line.py` * `views/hr_timesheet_views.xml` → `views/account_analytic_line_views.xml` `expense_policy` and `visible_expense_policy` are renamed because these fields are no longer specific to expenses and now represent the generic reinvoicing behavior. `hr_timesheet` model and view files are renamed to `account_analytic_line` since We generally avoid functional naming for model or view files, and having the code for the `account.analytic.line` model inside a file named `hr_timesheet` does not add much clarity to devs. follow up of task-5490517 See Also: - https://github.com/odoo/odoo/pull/252144 - https://github.com/odoo/upgrade/pull/9609
This update streamlines access control for spreadsheet cells within Odoo Enterprise. The changes consolidate existing permission rules, eliminating redundant checks and improving the overall efficiency of the system. This ensures consistent and reliable access to spreadsheet data.
Original PR description
Use access rules defined and don't create additional permission checks.