Daily updates from Odoo
Wednesday, May 20, 2026
33 changes · master
New functionality added to Odoo
This update adds the ability to generate official PDF certificates for Philippine withholding taxes (BIR 2306 & 2307) based on partner and date range selections. This ensures compliance with BIR requirements for creditable and final withholding taxes, streamlining reporting for businesses operating in the Philippines.
Original PR description
In this commit: Added support for Philippines withholding tax certificate generation to comply with BIR requirements for creditable and final withholding taxes. This includes: - New report variants for BIR 2306 (Final Withholding Tax) and 2307 (Expanded Withholding Tax) - The ability to generate and download official PDF certificates for specific partners and date ranges. Related PR : https://github.com/odoo/odoo/pull/234343 Related PR : https://github.com/odoo/upgrade/pull/8775 task-4844002
This update introduces a new 'frontdesk_partnership' module that allows frontdesk access to be restricted to partners with active memberships. It also includes an auto-checkout feature, automatically checking out visitors after a set time period, streamlining the frontdesk process and improving visitor management.
Original PR description
This PR introduces the frontdesk_partnership module, that allows creating a frontdesk with the entry limited to partners having a membership. It is also possible to limit entry to one or several specific memberships. This also adds the auto-checkout feature to the frontdesk model. A certain time can be set on the frontdesk so that any visitor checking in will be automatically checked out after the time defined passed. Task-5428837
This update introduces support for the Phonestar VoIP provider within Odoo Enterprise. This enhancement expands communication capabilities for users, allowing them to integrate Phonestar's features into their business workflows. It represents a new feature addition to the Odoo Enterprise platform.
Original PR description
Task-6190383
This update introduces automated check templates that analyze financial accounts to provide clearer insights into potential issues. These templates now consider the aggregate status of related accounts, offering a more accurate assessment than previous methods. The goal is to enhance user understanding and allow for customization of these checks.
Original PR description
**[IMP] {account,l10n_in}_reports: rename return states for tax returns**
Rename states from infinitive to past tense verbs.
**[IMP] {account,l10n_be}_reports: add account-based automated check templates**
Introduce automated check templates based on account filters.
Unlike existing check models that return an 'anomaly' if records
exist or 'reviewed' if empty, account-based checks evaluate the
aggregate status of matching accounts.
The check result is determined by the "minimum" status found across
all accounts linked to the audited working file, following a specific
priority hierarchy: anomaly > todo > reviewed > supervised
Example: If a check matches multiple accounts where one is 'reviewed'
and the rest are 'supervised', the resulting check status will be 'reviewed'.
The goal with this change is first to allow users to better understand what
filtering is done for each check and enable the user to modify it.This update introduces a new way to pay business leaders with 'Presence Tokens,' which are taxed differently than standard salaries. The system now automatically calculates and deducts withholding tax based on token amounts, applying varying tax rates (27.25%, 32.30%, or 37.35%) to ensure accurate tax reporting for this specific remuneration type.
Original PR description
Purpose ======= You can get a specific kind of remuneration for business leaders : "Presence Token", it's taxed differently Specifications ============== Add a new salary rule Input "Presence Token" available on Payslip. This amount of money should be categorized "Base remuneration" and a new category "Token Tax" Add a new rule Presence Token Withholding Tax computed like this : Tokens amounts <= 500 → Tax is 27.25% of the amount Tokens amounts >= 500.01 to 650 → Tax is 32.30% of the amount Tokens amounts >= 650.01→ Tax is 37.35% of the amount This rule takes all rules with category Token Tax Presence Token Withholding Tax is substracted from Net Task-6106132
Enhancements to existing features
This update simplifies pay run creation by replacing a direct link to a new payslip form with a dropdown button. This change provides a more intuitive and standard navigation experience for users who frequently initiate new pay runs, aligning with expected workflows.
Original PR description
Inside a pay run you have a new button that opens the form view of a new payslip, but sometimes you expect to create a new pay run taks:6222553
This update modernizes the web studio report editor's user interface, aligning it more closely with the company's website design. The changes include a reorganized layout with separate tabs for content editing, improved navigation, and a simplified sidebar for options and resources, enhancing the report creation experience.
Original PR description
This commit reworks the web_studio report editor UI layout and style to be more inline with the website editor. - Wysiwyg/Xml/Preview are now separate tabs - Save/Discard and Undo/Redo are in the sidebar - Options are now in groups in the sidebar - Resources are now in the sidebar as well instead of the hierarchical select Community: https://github.com/odoo/odoo/pull/242868 Task: [5150355](https://www.odoo.com/odoo/project/133/tasks/5150355)
This update simplifies the order signing process by hiding the 'Sign Now' button when an order is already in the signing workflow. This reduces confusion for users and streamlines the process, ensuring they only see the relevant options at each stage. It's a minor improvement focused on user experience.
Original PR description
task-5344686
This update allows users to easily reorder signers directly within the template sidebar using 'Move Up' and 'Move Down' options. This simplifies the process of managing signing orders and ensures the correct sequence of signers is displayed, improving workflow efficiency.
Original PR description
Adds Move Up / Move Down options to the signer's three-dot menu, letting users adjust the signing order directly from the template sidebar. task-6231529
This update introduces dashboard warnings related to payroll, mirroring the existing alerts for employee and payslip issues. This enhancement ensures users receive timely notifications about potential discrepancies or errors within the payroll system, improving accuracy and compliance.
Original PR description
In this commit, we created dashboard warnings based on existing employee + payslip's issues. task-5387328
This update streamlines the export of payroll reports by changing the file format from WPS to XLSX and simplifying the report headers. This improves the usability and compatibility of the payroll data for reporting and analysis, making it easier to work with.
Original PR description
In this commit, we renamed the headers of the exported WPS file and removed the unnecessary ones. We also changed the WPS file format to XLSX. task-6220113
This update enhances the AI agent's ability to utilize a wider range of content snippets, including video and alert blocks. The change avoids iframe creation for video snippets, improving the AI's content generation process and flexibility.
Original PR description
Before this commit, ai agent could read only normal snippets, now we enable inner snippets as well, so it can choose from those blocks too, e.g. video, or alert. For the video snippet, though, if there's no source link, AI will try to insert an iframe, which will be removed by sanitization, so we update the prompt to have it avoid adding iframes, but instead add an embedded url to data-oe-expression, so the iframe can be generated by an interaction. task-6150746
This update streamlines the handling of VoIP mail and data requests by introducing a more organized registry and decorator system. Previously, registration was done through complex if statements, now the API is clearer and easier to manage, leading to improved efficiency and maintainability.
Original PR description
Before this commit, we would need to register mail/data entries in an if statement based on the name and whether it was applied to logged in users or internal. The point of this PR is to improve the API to be able to have clear parameters and easy registry of the different mail/data request type. This is done with the help of a registry and a decorator to be added on the different request types. task-6085653
This update enhances the timesheet grid by pausing the timer when a timesheet is selected for editing, providing a smoother workflow. Additionally, the timesheet listing now displays the most recent entries first, improving usability. This change focuses on a better user experience for managing time entries.
Original PR description
- Make the timer pause when a time sheet is selected to be edited - Adjust the project listing sorting method to show the most recent first --- task-6131398 Forward-Port-Of: odoo/enterprise#117513 Forward-Port-Of: odoo/enterprise#114795
Resolved issues and error corrections
The website builder's AI-generated content was causing spacing issues due to overly broad rules. This update refines the AI's spacing adjustments, now focusing only on new layout changes and preserving existing snippet styles during content edits. This ensures a cleaner and more consistent website experience.
Original PR description
Snippets added by AI have its elements glued with no proper spacing. The problem is the spacing rule in the builder topic was too broad and implied existing Bootstrap margin or gutter classes should be removed, even when only editing snippet content. Limit the rule to new layout spacing changes and tell the AI to preserve existing snippet structure/classes during content-only edits. task-id-6230199 Forward-Port-Of: odoo/enterprise#117712
This update resolves a crash that occurred when users clicked the 'hide' button on the payroll dashboard. The issue stemmed from in-memory warning records being incorrectly processed, leading to database errors. The fix ensures these warnings are handled correctly, preventing the crash and improving dashboard stability.
Original PR description
Closing date payrun warnings are created as in-memory records (.new()), giving them a NewId instead of a real integer DB id. When the user clicked the hide button, this NewId string was passed to action_snooze/action_archive, causing a psycopg2.errors.InvalidTextRepresentation SQL error. Fix by sending False as the id for in-memory warnings in get_payroll_dashboard_warning_cards, and suppressing the hide button on the dashboard when warning.id is falsy. task-6205849
A bug was causing a 'Create Ticket' action to appear unexpectedly in the WhatsApp sidebar. This commit removes this action, resolving a technical issue that prevented users from accessing the WhatsApp feature as intended. This ensures a smoother and more reliable experience for WhatsApp conversations.
Original PR description
The 'Create Ticket' action was incorrectly visible in the sidebar actions of WhatsApp conversations in Discuss. Clicking it caused a traceback because `owner.root` is not defined in the sidebar action context. This commit removes the action from sidebar actions. Task-[6220037](https://www.odoo.com/odoo/project/1519/tasks/6220037) Forward-Port-Of: odoo/enterprise#117571
This update resolves an issue where kitchen tickets were incorrectly printed after a platform order was cancelled, regardless of where the cancellation occurred (Odoo PoS or the provider platform). Now, cancelled platform orders will no longer trigger kitchen ticket printing, improving order accuracy and reducing unnecessary printing.
Original PR description
This fixes platform orders should not send to kitchen printer when the platform orders being cancelled. Currently accepting platform orders will not send to kitchen printer. However when cancelling platform orders on either provider platform, or within Odoo PoS. It will print a kitchen ticket of customer note. task-6071740 Forward-Port-Of: odoo/enterprise#114171
This update adjusts the default date range for the Lead and Pipeline dashboards to 'Last 30 days'. This change provides users with a more relevant and current view of their sales data, making it easier to analyze recent performance and trends. It resolves a previous issue where the default date range was not consistently set.
Original PR description
This commmit fixes the date filter default value to `Last 30 days`. Task: 5902231 Forward-Port-Of: odoo/enterprise#114560
This update resolves an issue where long events were incorrectly marked as 'all-day' events. The change ensures that event data is accurately interpreted, preventing scheduling errors and improving the reliability of the appointment calendar. This improves the overall user experience for managing appointments.
Original PR description
fcEventToRecord is updated in web calendar to take an additional "oldEvent" parameter when creating record values from an update. This is used to distinguish between an event becoming an allday vs an event that appears as allday but actually is not. task-6033474
This update fixes an error in the Luxembourg Annual VAT Declaration report that resulted in incorrect calculations for Appendix E 1a. The fix ensures that VAT tax codes are included accurately in the formula, resolving a discrepancy in the reported total. This ensures accurate VAT reporting for Luxembourg businesses.
Original PR description
### Issue: The formula `L10N_LU_TAX_163` in the Luxembourg Annual VAT Declaration was incorrect: - `L10N_LU_TAX_791.year_start` was added twice - `L10N_LU_TAX_993.year_start` was missing As a result, the computed total in Appendix E 1a was incorrect ### Steps to reproduce: - Install `l10n_lu_reports` - Open the `Report: Annual VAT Declaration (LU)` - Go to `Appendix E` - Use the `Start of Financial year` pencil icons to manually set values for fields `791` and `993` - Check the computed value of field `163` After the fix, both values are included exactly once in the formula opw-6158950 Forward-Port-Of: odoo/enterprise#117214
This update fixes an issue where freight charges were incorrectly applied to all pickings, particularly with backorders. The change ensures freight costs are only included in the first confirmed picking, aligning with the correct invoicing process and accurately reflecting delivery costs.
Original PR description
Commit 28b840b introduced logic to include `freight_costs` in the customs document generated bySendcloud. It introduced 2 new issues as a result: 1. When creating backorders, the `freight_costs` are…
Commit 28b840b introduced logic to include `freight_costs` in the customs document generated bySendcloud. It introduced 2 new issues as a result: 1. When creating backorders, the `freight_costs` are not divided but instead propagated to all of the pickings. 2. When there is no SO, we were taking the total value of all delivered goods, which doesn't make much sense considering the `freight_costs` field should be the cost of the delivery itself. Solution ----- For the first problem, there are a couple things to keep in mind: - the total `freight_costs` declared to the customs entity should be the amount invoiced to the customer - products can be added and removed from the picking after the SO has been confirmed - actual delivery cost can change between invoice date and actual delivery date - picking can be split into multiple packages at the user's discretion Considering all of the above, we will simply forward the invoiced amount with the first confirmed picking and none of the backorders. ----- Ticket: opw-6013387 Forward-Port-Of: odoo/enterprise#117115 Forward-Port-Of: odoo/enterprise#111304
This update fixes a UI inconsistency in the worksheet property editor. Now, the "Add Property" button remains visible while editing and correctly resets to "Edit Properties" when switching records or creating new ones, ensuring a smoother and more reliable user experience. This resolves a previous issue where the button's state was confusing.
Original PR description
Before this commit: - The “+ Add Property” button was not visible when switching between notebook pages if it was present initially. - when we are doing edit properties from the cog menu and without doing save properties if we are creating new record or switch to other record at that time button still shows “Save Properties.” leading to inconsistent UI behavior. After this commit: - The “+ Add Property” button remains visible when switching between pages. - When in property edit mode, switching records or creating a new record now correctly resets the button state back to “Edit Properties”, ensuring consistent UI behavior. task-6051322 Forward-Port-Of: odoo/enterprise#117614 Forward-Port-Of: odoo/enterprise#113248
This update ensures that all text within the MRP MPS component of Odoo Enterprise is properly prepared for translation. Previously, placeholder text was not translatable, limiting the system's ability to support multiple languages. This change improves the localization capabilities of the module.
Original PR description
Forward-Port-Of: odoo/enterprise#117750
This update ensures that the first variant image displayed on the external website matches the first variant selected in the product configurator and shop category page. It corrects a previous issue where the website wasn't consistently showing the correct initial variant, leading to a potentially confusing customer experience.
Original PR description
When generating a product, set product.template.attribute.value sequences so that the variant that shows first in the external website is also first by _get_first_possible_variant_id(). This ensures the correct variant image appears on the shop category page and is pre-selected in the product configurator. Forward-Port-Of: odoo/enterprise#117701
This update fixes a potential crash during bank statement imports by ensuring the correct journal is selected based on currency and IBAN. The system now automatically finds the best match, preventing errors and improving the reliability of importing bank statement data. This enhances data accuracy and reduces potential user issues.
Original PR description
Behavior before: The import flow could crash with an "Expected singleton" error if multiple journals shared an IBAN. Additionally, the system blindly accepted the current context ('self') as the…
Behavior before:
The import flow could crash with an "Expected singleton" error if multiple
journals shared an IBAN. Additionally, the system blindly accepted the
current context ('self') as the target journal, even if its currency or
bank account mismatched the statement, often leading to avoidable
UserErrors.
Behavior after:
The system now validates 'self' against the statement's currency and IBAN
before assignment. If a mismatch is found, it automatically searches for
the correct journal. The search is now restricted by currency and includes
a limit=1 to prevent crashes and ensure accurate selection.
Root Cause:
In _find_additional_data(), 'journal = self' was assigned without validation.
Furthermore, the fallback search lacked a record limit and currency matching
logic, allowing multiple records to be returned when duplicates or
multi-currency setups existed.
Fix:
- Added validation for the initial 'self' candidate (currency and IBAN match).
- Refined the search domain to include currency matching (journal or
company fallback).
- Added limit=1 to the search to guarantee a singleton recordset.
opw-5462037
Forward-Port-Of: odoo/enterprise#117394
Forward-Port-Of: odoo/enterprise#115475This update optimizes a key query in the sales commission reporting process. By removing an unnecessary bit shift, the system now handles significantly larger sales commission data, expanding its capabilities and avoiding potential limitations. This change improves report generation speed and accuracy.
Original PR description
The combined query for sale.commission.achievement.report originally performs several bitwise shifts, starting with the max AML ID. This is done to create a composite number ID for the combined IDs.…
The combined query for sale.commission.achievement.report originally performs several bitwise shifts, starting with the max AML ID. This is done to create a composite number ID for the combined IDs. `MAX(aml.id)::bigint <<20) | max(rules.id)::bigint <<10 | rules.user_id <<10` This shifts the max aml.id 40 bits to the left. Example: Let's say MAX(aml.id) = 1; we will set the other variables to 1, as they often have little impact on the total size of the number. 1 << 20 = 1048576 1048576 | 1 = 1048577 1048577 << 10 = 1099512676352 1099512676352 | 1 = 1099512676353 1099512676353 << 10 = 1152922604119523328 With this format, the highest guaranteed AML ID this query can handle is under 838,861. The last 10-bit shift is unnecessary and increases the result. If we remove the last shift, the AMD ID this query can handle becomes much higher. `MAX(aml.id)::bigint <<20) | max(rules.id)::bigint <<10 | rules.user_id` | | AML Max | RULES.ID Max |RULES.USER_ID Max| | --------------------- | ------ | ------ | ------ | | Before | 838,861 | 1,048,576 | 1,024 | | After | 858,993,459 |1,048,576 | 1,024| opw-6124026 Forward-Port-Of: odoo/enterprise#114711
This update corrects a visual inconsistency in the project timesheet display. Previously, the 'Time Remaining' value wasn't highlighted in red when negative, even though the label was. This fix ensures that negative time remaining values are correctly displayed with a red color, improving clarity and accuracy for users.
Original PR description
**Steps to reproduce:** - Open project shared form view. - Go to the Timesheets tab. - Observe the Time Remaining value. **Issue:** - The Time Remaining label is red properly but its value does not becomes red even when the value is negative. **Fix:** In hr_timesheet, the remaining_hours field has a decoration-danger applied In sale_timesheet_enterprise, this field is overridden as portal_remaining_hours So, Added the corresponding decoration-danger on portal_remaining_hours. task-5404009 Forward-Port-Of: odoo/enterprise#114836 Forward-Port-Of: odoo/enterprise#113632
This update clarifies the labels for vehicle deductibility rates within the Enterprise module. The previous labels were inaccurate, representing the deductible portion instead of the non-deductible amount. This change ensures accurate reporting and financial calculations related to vehicle expenses.
Original PR description
The "Deductibility Rates" and "Deductibility (%)" labels are wrong for vehicles as they are supposed to represent the non-deductible part. This commit fixes these labels. task-6121629 Forward-Port-Of: odoo/enterprise#116878
This update corrects a bug where merging duplicate records caused multiple XML IDs to point to the same master record, compromising the system's ability to uniquely identify data. The fix ensures that each record has a single, unique XML ID, maintaining data integrity and reliability. This resolves a potential issue with data tracking and reporting.
Original PR description
When merging duplicate records, the merged record's XML ID was moved onto the master. Since the master already had its own XML ID, it ended up with several XML IDs pointing at it, breaking the assumption that an XML ID is a unique identifier for a single record. task-6186726
Features or functions removed from Odoo
This update removes a redundant 'Worksheet' tab from the Quality Control Point form, streamlining the process for providing instructions during quality checks. By consolidating instructions within the existing 'Instruction' tab, we've reduced user confusion and improved the overall quality control workflow.
Original PR description
*: quality_mrp_workorder{_worksheet}
- Currently, the Quality Control Point (QCP) form includes a dedicated `Worksheet` tab to provide PDF-based instructions used during quality checks, although the `Instruction` tab already allows attaching documents to the quality point. Also, with the recent worksheet template redesign in [task(5167053)](https://www.odoo.com/odoo/all-tasks/5167053), having two different worksheet related concepts on the quality point and quality check becomes confusing for users.
This commit removes the `Worksheet` tab from the QCP form. The existing `Instruction` tab is now used to provide the required instructions during quality checks, which avoids confusion by keeping instructions and related
documents in one place.
Community PR:- odoo/odoo#254107
Upgrade PR:- odoo/upgrade#9618
TaskId:- 5956069Code cleanup and technical improvements
This update ensures consistency in how Odoo generates URLs. Previously, there were two ways to get a URL, and this change standardizes them, making the system more reliable. Developers can now explicitly use `.href` when a plain string URL is needed, improving code clarity and maintainability.
Original PR description
Makes it the symmetric counterpart of urlToState(url: URL). Call sites that need a plain string use .href explicitly. task-id 6221850
This update streamlines the handling of scales within our Point of Sale system. It adopts a new, standardized approach for scale operations, originally developed by the Odoo community, to improve reliability and maintainability. Initial support is available on PC browsers, with Android support planned for a future release.
Original PR description
The Community PR odoo/odoo#249723 refactors the scales to have a base `ScaleInterface` class, as well as moving the weighing logic and UX to community. This commit adapts the `IotScale` and `CertifiedIotScale` to use the new system. **Availability:** Currently only PC browsers supported Upcoming with Android version 17 with Chrome on Android >= 148 task-4860962