Daily updates from Odoo
Wednesday, July 15, 2026
39 changes
3 changes
Enhancements to existing features
The Mexican payroll localization now includes the latest SAT perception and deduction concepts in the payroll CFDI catalog. This helps companies keep payroll reporting aligned with current Mexican tax authority requirements.
Original PR description
Adds the new SAT perception and deduction concepts to the Mexican payroll CFDI concept catalog. task-6295124 Forward-Port-Of: odoo/enterprise#121568
Marketing automation now has stronger test coverage and targeted fixes for campaign synchronization, user-triggered activity scheduling, and failed or bounced message handling. This helps ensure participants receive the right follow-up actions at the right time across email, SMS, and WhatsApp campaigns, while also preparing the app for future performance improvements.
Original PR description
RATIONALE In order to prepare upcoming improvements for marketing automation application, as well as performance improvements, some tests are added to improve coverage and cover some synchronization…
RATIONALE
In order to prepare upcoming improvements for marketing automation
application, as well as performance improvements, some tests are added
to improve coverage and cover some synchronization use cases.
SPECIFICATIONS
Add some tests improve coverage of synchronization, as we recently
discovered limitations
* "opposite" triggers when checking brother traces to skip in
'action_update_participants' (which synchronizes traces): sub
addons (sms, whatsapp) is not taken into account;
* 'schedule_date' is not correct for user-based activities (e.g.
mail_open, mail_click, ...) when new activities are added to
a campaign. They should not have scheduled dates, as it depends
on user action. Date is correct for activities when participants
enter child activities but not when doing the synchronize;
* add some checks on participant state;
* globally try to improve some corner cases coverage;
Add some tests to improve coverage of bounce / fail behavior with
various activities, as we want to make it clearer how MA should
behave when dealing with issue. First step is to assert current
behavior and fix some odd bits.
Notably in some cases trace update is missing, notably with SMS
sending with does not call trace update method, which means some
triggers are not processed.
Various fixes are included in this branch, spotted by newly added tests.
See commits for more details.
Task-4224152: [marketing_automation] Performance / Scalability
Forward-Port-Of: odoo/enterprise#124248
Forward-Port-Of: odoo/enterprise#124126Improve (mass_)mailing asserts and tools, notably to use their usage in marketing automation where simulating user actions (open emails, reply, ...) is necessary to check marketing activities scheduling and execution. Task-4224152: [marketing_automation] Performance / Scalability Forward-Port-Of: odoo/odoo#276198 Forward-Port-Of: odoo/odoo#275964
Original PR description
Improve (mass_)mailing asserts and tools, notably to use their usage in marketing automation where simulating user actions (open emails, reply, ...) is necessary to check marketing activities scheduling and execution. Task-4224152: [marketing_automation] Performance / Scalability Forward-Port-Of: odoo/odoo#276198 Forward-Port-Of: odoo/odoo#275964
2 changes
Enhancements to existing features
The Mexican payroll localization now includes the latest SAT payroll perception and deduction concepts used for CFDI reporting. This helps businesses keep payroll documents aligned with current Mexican tax authority requirements.
Original PR description
Adds the new SAT perception and deduction concepts to the Mexican payroll CFDI concept catalog. task-6295124 Forward-Port-Of: odoo/enterprise#121568
The payment form no longer shows the Payment Identifier field because it was not useful for end users. This reduces clutter and makes the payment screen easier to understand without changing the payment process.
Original PR description
- The Payment Identifier field has been permanently hidden from the payment form view, as it does not provide actionable or useful information to the end user. community pr - https://github.com/odoo/odoo/pull/266072 task- 6237870
5 changes
Enhancements to existing features
The Mexican payroll localization now includes the latest SAT perception and deduction concepts in its CFDI payroll catalog. This helps businesses keep payroll reporting aligned with current Mexican tax authority requirements.
Original PR description
Adds the new SAT perception and deduction concepts to the Mexican payroll CFDI concept catalog. task-6295124 Forward-Port-Of: odoo/enterprise#121568
The timesheet timer menu now opens with fewer delays by reusing already available information and avoiding unnecessary server calls. This makes daily time tracking feel quicker and smoother for employees, especially when the menu is opened often.
Original PR description
This PR removes some blocking RPC calls and caches information to make the loading of the systray as lightweight as possible. Changes include: - Move `field_get` to the lazy session info, so the field metadata is available client-side without a dedicated round-trip. - Cache the pre-filled form: it does not change as long as the task / project context stays the same, so it is computed once and reused. - Drop the `get_server_time` RPC and rely on the client-side clock. - Add a client-side systray cache service to avoid redundant requests. Task-6131386
Draft bank statement lines now appear in blue in the bank reconciliation view. This helps accounting users quickly distinguish draft items from other statement lines, reducing the chance of overlooking unfinished entries.
Original PR description
This commit will put the text in blue when the statement line is in draft to be able to see quickly which lines are in draft. task-6327308 Forward-Port-Of: odoo/enterprise#121775
LEGAL REQUIREMENTS - As of January 2026, the 9% VAT will increase to 12%. PURPOSE - For each 9% VAT, add 12% VAT with the same tax tag and descriptions, so in the VAT report, it's put under the same lines. - And add the missing taxes from the sheet provided in the task description. Related PR: https://github.com/odoo/enterprise/pull/101773 Task-5269617 Forward-Port-Of: odoo/odoo#239388
Original PR description
LEGAL REQUIREMENTS - As of January 2026, the 9% VAT will increase to 12%. PURPOSE - For each 9% VAT, add 12% VAT with the same tax tag and descriptions, so in the VAT report, it's put under the same lines. - And add the missing taxes from the sheet provided in the task description. Related PR: https://github.com/odoo/enterprise/pull/101773 Task-5269617 Forward-Port-Of: odoo/odoo#239388
This avoids a useless blocking rpc call when opening the systray. Task-6131386
Original PR description
This avoids a useless blocking rpc call when opening the systray. Task-6131386
5 changes
Enhancements to existing features
The Mexican payroll localization now includes the latest SAT perception and deduction concepts in the CFDI payroll catalog. This helps businesses keep payroll reporting aligned with current Mexican tax authority requirements.
Original PR description
Adds the new SAT perception and deduction concepts to the Mexican payroll CFDI concept catalog. task-6295124
Draft bank statement lines now appear in blue in the bank reconciliation view. This helps accounting users quickly identify which lines are not yet finalized, reducing the chance of overlooking pending work.
Original PR description
This commit will put the text in blue when the statement line is in draft to be able to see quickly which lines are in draft. task-6327308 Forward-Port-Of: odoo/enterprise#121775
LEGAL REQUIREMENTS - As of January 2026, the 9% VAT will increase to 12%. PURPOSE - For each 9% VAT, add 12% VAT with the same tax tag and descriptions, so in the VAT report, it's put under the same lines. - And add the missing taxes from the sheet provided in the task description. Related PR: https://github.com/odoo/enterprise/pull/101773 Task-5269617 Forward-Port-Of: odoo/odoo#239388
Original PR description
LEGAL REQUIREMENTS - As of January 2026, the 9% VAT will increase to 12%. PURPOSE - For each 9% VAT, add 12% VAT with the same tax tag and descriptions, so in the VAT report, it's put under the same lines. - And add the missing taxes from the sheet provided in the task description. Related PR: https://github.com/odoo/enterprise/pull/101773 Task-5269617 Forward-Port-Of: odoo/odoo#239388
It is mandatory in BE to add a legal note on the invoice when using a "Co-Contractant" tax task-5905176 Forward-Port-Of: odoo/odoo#263893 Forward-Port-Of: odoo/odoo#251797
Original PR description
It is mandatory in BE to add a legal note on the invoice when using a "Co-Contractant" tax task-5905176 Forward-Port-Of: odoo/odoo#263893 Forward-Port-Of: odoo/odoo#251797
Servers would return a 403 because we annoy them for downloading the WSDL/XSD at every call. opw-6237180 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267482
Original PR description
Servers would return a 403 because we annoy them for downloading the WSDL/XSD at every call. opw-6237180 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267482
1 change
Enhancements to existing features
This update ensures Peruvian e-invoices can include the product codes required by SUNAT's new 2026 validation rules. It adds missing shared product classification codes and activates Peru-specific codes only for databases using the Peru localization, reducing the risk of invoice rejection for affected goods.
Original PR description
SUNAT is updating its validation rules 2026-08-01, adding three mandatory annexes (25.1, 25.2, 25.3) to Product Catalog N25. E-invoices for these goods are rejected when the required UNSPSC code is not available in the database. Most of the required codes already exist and are active. The rest are handled here: two missing UNSPSC codes were added to the shared catalog, while the fourteen codes that exist but are inactive and the SUNAT-only code 11111111 (which is not part of the UNSPSC standard) are activated from the Peru localization instead. Doing the Peru-specific part in the l10n_pe_edi install hook and upgrade script, the way l10n_mx_edi and l10n_ke_edi_oscu do for their own codes, keeps these activations out of databases that do not use the Peruvian localization. Task-6366907 Forward-Port-Of: odoo/enterprise#124001 Forward-Port-Of: odoo/enterprise#123577
19 changes
Enhancements to existing features
The payroll pay run card now adapts to the actual space available inside the card, not just the browser window size. This makes the header, progress steps, KPI information, and action buttons behave more predictably on different screen sizes and reduces awkward wrapping or overflow.
Original PR description
The pay run header card was assembled by kanban XML inheritance and its responsive behaviour keyed off `ui.size` (the browser-window breakpoint). Regions shifted from one step to the next, and the…
The pay run header card was assembled by kanban XML inheritance and its responsive behaviour keyed off `ui.size` (the browser-window breakpoint). Regions shifted from one step to the next, and the free space and the buttons collapsed based on the window rather than the card's own width - folding while there was still room and overflowing when there wasn't. Rework it into a single OWL shell (PayrunCard) that owns four regions - name | KPIs | steps | buttons. Per-step views only fill the `payrun_kpis` slot and declare their `current_step`; the name block and step bubbles are declared once and reused. The kanban record owns one ResizeObserver that measures the card's actual width and each region's content width, then resolves the layout in priority order: the name truncates to its floor, the buttons collapse into the overflow menu, and finally the steps stack onto their own full-width row. The decision is recomputed only when the width changes, so toggling the layout - which only changes the height - cannot feed back and flicker at the boundary. task-6259171
Payroll administrators can now view and update the first payroll month directly in Payroll Settings. This makes it easier to correct or adjust the initial payroll setup after it has already been entered from the dashboard warning.
Original PR description
Currently, after set the first month of payroll on the dashboard warning. We can't modify it after nor the the information back. In this PR expected to add the first month of payroll in the Payroll Setting, Therefore, Users can modify after set it. task-6377702
Belgian payroll now handles youth and senior time off as separate categories, making payroll and leave tracking clearer. The update also adds checks to warn when youth time off seniority conditions may not be met and to prevent these allocations while regular paid time off remains available.
Original PR description
This PR: - Splits the youth and senior time off types into two different work entry types. - Adds a warning on the allocation of Youth Time Off if the employee does not have at least 1 month of seniority in the company at the beginning of the validity period for the allocation. - Prevents the allocation of youth or senior time offs if there is still paid time off available. task-6360468
Timesheet entry units are now controlled by timesheet settings instead of company-level settings. This makes time tracking behavior more consistent across related areas such as helpdesk, projects, sales timesheets, dashboards, and timesheet grids.
Original PR description
Adjust the `timesheet_encode_uom_id` to depend on timesheet settings, not from company --- # task cancelled task-5932762
The AI app form views and related controls were reorganized to make AI agents and their sources easier to manage. The update also adds native skills and lets agents update themselves, improving flexibility for businesses using AI workflows.
Spreadsheet screen position and viewport behavior are now managed through a shared store instead of an internal plugin, making the experience more consistent across spreadsheet features. Comment popovers now follow the same scroll behavior as other persistent popovers, reducing inconsistent interface behavior.
Original PR description
The `SheetViewPlugin` and the viewport handling was moved into a store rather than a plugin. This commit make the necessary changes to odoo. The test `Scrolling the viewport should hide the comments popover` was deleted. Other persistent popover would automatically be hidden when scrolling, and re-open if scrolling back. There's no reason to have a different behaviour for comments. Task: 6314784
Restricted website editors will no longer see the AI Assistant as an available editing option when they cannot save page changes. A tooltip now explains why the assistant is unavailable, reducing confusion and setting clearer expectations.
Original PR description
Restricted Editors do not have permission to edit website pages. However, the AI Assistant button remains available, giving the impression that the feature can be used even though any changes cannot be saved. This commit disables the AI Assistant button for users without 'Editor and Designer' access and adds a tooltip explaining why the feature is unavailable Forward-Port-Of: odoo/enterprise#123047
Recurring project tasks are now scheduled around assigned users’ workable days, working hours, leave, and contract dates. This helps teams plan recurring work more realistically while still allowing weekend-based recurrences when the original task was intentionally set on a weekend.
Original PR description
## Previous behavior: Recurrent tasks could still be scheduled on weekends, vacation days, or other non-working days. ## New expected behavior: Recurrent tasks are always scheduled based on the…
## Previous behavior: Recurrent tasks could still be scheduled on weekends, vacation days, or other non-working days. ## New expected behavior: Recurrent tasks are always scheduled based on the workable days and working hours of the users assigned to them. Workable days and hours are determined using the assigned users’ shared calendars. If the assigned users do not share the same calendar, the company calendar is used to resolve scheduling conflicts. If a user is on leave, the recurrent tasks they are assigned to are still scheduled, but the user is temporarily removed from the list of assigned users for the duration of their leave.This allows other individuals to take over the task when the user is on leave. Users are also removed from recurrent tasks when their contract start or end dates fall outside the task schedule since users shouldn't work with outdated contracts. ## Exception: This behavior can be overridden if the original recurrent task was initially scheduled on a weekend day (Saturday or Sunday). In this case, recurrent tasks behave exactly as before and may be scheduled on non-working days. This was made to ensure the end-users could have the final say on this behavior in the case it is unwanted. ## Reference: [task-4796700](https://www.odoo.com/odoo/project/4105/tasks/4796700)
Payroll warning settings can now show the same warning on both dashboards and employee or payroll record pages at the same time. This reduces duplicate setup work and makes important payroll alerts more consistently visible across supported country payroll modules.
Original PR description
Replace the `display_on` selection field with two distinct boolean fields: `display_on_dashboard` and `display_on_model`. This allows a single warning configuration to be displayed on both the dashboard and record views simultaneously, eliminating the need for data duplication. Update the view to show these choices as side-by-side checkboxes. Task: 6267499
Signature requests created from other apps now include the template name alongside the related record name. This makes request names, filenames, and email subjects easier to recognize and less likely to be confused with the signer's name.
Original PR description
When requesting a signature from another app, the request name, filename and email subject only showed the linked record name, which often read as the signer's name. The template name is now added so all three follow the same "<prefix> - <template> - <record>" format. task-6317174 Forward-Port-Of: odoo/enterprise#122963
The AI website assistant now includes added design guidance in its prompts. This should help generate website content with better visual direction and more consistent design recommendations.
Creating a shift from the Attendance Gantt view now uses the employee's expected daily working hours instead of defaulting to a full 24-hour shift. This prevents incorrect overnight shifts and avoids accidentally moving the end date to the next day.
Original PR description
Currently, when creating a new shift from the Gantt view in "Attendance", if the scale is "week" or higher, the shift will have a duration of 24 hours and span from 12:00 AM to 12:00 AM the next day. This will always be wrong, and also shifts the end date by a day. To resolve this issue, now if a new shift is created by clicking on a day (instead of dragging the click to select hours), editing the starting hour will automatically change the end hour to be start + expected hours per day. Task ID:6326685
Belgian payroll now supports restructuring social security reductions for up to three quarters instead of two. A new start date field helps track cases where an employee already received the reduction with a previous employer, improving payroll accuracy and compliance.
Original PR description
**What**: - Restructuring reduction can be received for 3 quarters previously it was only for 2 quarters - There is a chance that the person can get restructuring reduction from previous employer so added a new field 'restructuring_date_start' to know the start date of restructuring reduction task-6344925
The salary calculator now waits to show missing-field errors until users try to configure benefits or copy a link, instead of interrupting them while they are still editing. This makes the offer setup process smoother while still clearly listing required information before key actions can continue.
Original PR description
The salary calculator was showing validation errors while users were still filling in the form. This made the calculator harder to use. With this change: - Do not show validation errors while editing a simulation offer. - When the user clicks "Configure Benefits" or "Copy Link", validate all required fields and show an error listing any missing fields. - Remove the "Optional" placeholder from the employee field since it is required to use these actions. Task-6340556
Mexican payroll CFDI checks have been updated to match version 1.2e requirements. This helps ensure payslip XML data is validated correctly for taxable and exempt earnings, other salary income, and employment subsidy limits before reporting.
Original PR description
**. Perceptions – ImporteGravado / ImporteExento (XML Nodes)** For each Perception node, validate that: If ImporteExento = 0, then ImporteGravado > 0. If ImporteGravado = 0, then ImporteExento > 0. Both values cannot be 0 at the same time. These validations must be applied per Perception node, not at an aggregated level. **. TipoPercepcion = "038" (Other Salary Income) (XML Nodes)** When TipoPercepcion = "038": ImporteExento must always be 0. The amount must be recorded only in ImporteGravado. **. SubsidioCausado (XML Nodes)** Update the validation logic for the SubsidioCausado attribute based on NumDiasPagados: If NumDiasPagados ≤ 31, SubsidioCausado ≤ 628.00 If NumDiasPagados > 31, SubsidioCausado ≤ NumDiasPagados × 0.206 task-5412728 Forward-Port-Of: odoo/enterprise#121304
Hong Kong payroll salary rules have been consolidated so regular and casual employee structures can share common rules instead of maintaining duplicate versions. This reduces configuration complexity and should make payroll support and future updates easier while preserving the differences needed for MPF rules.
Original PR description
Recently, salary rules were updated to support more than one salary structure on a same rule. This change allows us to clean our structures and remove a lot of duplication between regular and casual employees. Both structures are 90% the same, besides MPF rules, so we now can really simplify it to facilitate support and reduce complexity task-6267295
Belgian payroll rules now reflect the legal change effective August 1, 2026: employees with less than six months of service have a one-week notice period whether they resign or are dismissed. This helps employers calculate end-of-collaboration notice durations correctly and consistently, including contracts that span the change date.
Original PR description
Starting from August 01 2026, the legal notice period will change if the employee has been working for their company less than six months: it will only be one week, no matter if the employee quit or was fired. Task: 6365099
Payment check reports now better explain cases where a check is written for less than the invoice total because an early payment discount was applied. This helps users and recipients understand the payment amount and keeps localized payment report layouts aligned.
Original PR description
Previously, the check amount didn't match the applied payment. This makes it clear why the a check for less than the total was written out. Because we change the layout of the payment report in community, we have to update some xpaths here. For MX, a `is_cfdi_signed` block was not migrated because it's dead code. That variable isn't defined anywhere. task-5172527
This update makes deferred account settings appear based on the account type, reducing confusion when configuring accounts. It also adds clearer guidance in the interface so users better understand the deferred option.
Original PR description
*accountant, reports Purpose: Some improvements missed in the initial commit: https://github.com/odoo/enterprise/commit/65ea8b266d8024736bec388425c90d9efd9a8cce will be addressed here. - Changed the deferred_account_id invisibility to be based on the account type since it should not be based on is_deferred as they are not related to each other - Added a tooltip to is_deferred for further clarity task-6293902
3 changes
Enhancements to existing features
The Mexican payroll localization now includes the latest SAT perception and deduction concepts in the payroll CFDI catalog. This helps businesses keep payroll reporting aligned with current Mexican tax authority requirements.
Original PR description
Adds the new SAT perception and deduction concepts to the Mexican payroll CFDI concept catalog. task-6295124
The journal creation wizard can now be navigated with keyboard arrow keys, making setup faster and easier for users who prefer keyboard workflows. This improves accessibility and efficiency during accounting configuration without changing the underlying process.
Original PR description
This commit aims to allow for navigation through the journal create wizard via keybaord arrows. Related Odoofin PR: https://github.com/odoo/odoofin/pull/502 task-5796200
The French balance sheet now presents establishment costs before fixed assets, matching the expected reporting structure. It also includes previously missing impairment accounts for tangible fixed assets, improving the completeness and accuracy of financial statements.
Original PR description
Move establishment costs before fixed assets in the French balance sheet, and include the missing 2912, 2913, 2914, and 2915 impairment accounts in the relevant tangible fixed asset amortization/provision lines. task-6226138
1 change
Enhancements to existing features
Move French e-invoicing technical statuses out of the main invoice UI and into the chatter. The PPF status is kept available in debug mode for troubleshooting, while regular users get a concise chatter summary with the PA status, PPF status, and any returned errors. Duplicate Lifecycle XML attachments are no longer posted in the chatter. Task-6273270
Original PR description
Move French e-invoicing technical statuses out of the main invoice UI and into the chatter. The PPF status is kept available in debug mode for troubleshooting, while regular users get a concise chatter summary with the PA status, PPF status, and any returned errors. Duplicate Lifecycle XML attachments are no longer posted in the chatter. Task-6273270