Daily updates from Odoo
Tuesday, July 14, 2026
72 changes
9 changes
Enhancements to existing features
Signature requests created from other apps now include the template name in the request name, file name, and email subject. This makes documents easier to identify and avoids confusion when the linked record name looks like 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
Restricted website editors will no longer see the AI Assistant as an available action when they do not have permission to edit and save pages. The button is disabled with a tooltip explaining the access limitation, reducing confusion for users with limited website permissions.
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
Mexican payroll reporting is updated to match CFDI version 1.2e requirements. The change strengthens validation of taxable and exempt payroll amounts and subsidy limits, helping reduce rejected payroll XML submissions and compliance issues.
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
The Sendcloud delivery setting previously labeled "Use Batch Shipping" is now called "Use Multicollo". This aligns Odoo terminology with Sendcloud wording, reducing confusion for users configuring shipments.
Original PR description
In order to avoid confusion for the customer, "Use Batch Shipping" was renamed to "Use Multicollo".This way it is consistent with the terminology used by Sendcloud. task-6048477 Forward-Port-Of: odoo/enterprise#122920 Forward-Port-Of: odoo/enterprise#122133
This update improves how manufacturing work orders handle continuous production, making the process cleaner and more reliable for operational teams. It helps reduce friction in production tracking and supports smoother shop floor execution.
This update brings the Owl library, a key component of our website's image zooming functionality, to version 2.8.4. This includes a fix to prevent lost image renders and support for running the library with Node.js, enhancing our website's performance and flexibility.
Original PR description
- [FIX] runtime: don't lose coalesced renders - [IMP] loadable with nodejs See https://github.com/odoo/owl/commits/owl-2.x/ for more details 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#275568
This update enhances the error message displayed when issues arise with leave validity calculations. Previously, troubleshooting required manual investigation, but now customers and support teams can quickly identify the root cause of leave allocation problems. This improves user experience and reduces support time.
Original PR description
The current message is pretty useless as of now when a lot of leaves are being written to, notably when creating a public holiday, which sets the state of all the leaves overlapping the public holiday's day to be reevaluated, and if an error occurs, you have to go through every employee's leave allocation and leaves taken to hopefully find one who might have to many days taken/not enough allocated. This extra information will be a huge QOL improvement, for the customer who will be able to troubleshoot his issue himself more easily, but also for our support team as the only way to debug those kind of issues now is to put a breakpoint there and see what employee has an issue. opw-4411999 Forward-Port-Of: odoo/odoo#272412 Forward-Port-Of: odoo/odoo#200376
This update streamlines the tracking of continuous production processes within Odoo MRP. The changes enhance the clarity and efficiency of managing ongoing production runs, leading to better visibility and control over manufacturing operations. This improvement focuses on internal operational improvements.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds tests to ensure task templates, even those without a linked project, function correctly. This improves the reliability of our task creation process and prevents potential errors when using task templates. It follows up on previous development work to enhance the flexibility of our project and task management features.
Original PR description
This PR adds tests to ensure that task templates without a project are correctly handled when creating tasks from task templates or projects from project templates. Follow-up of task-5140018 task-6344060 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
6 changes
Enhancements to existing features
Signature requests created from other apps now include the document template name alongside the related record name. This makes request names, file names, 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 Sendcloud delivery settings now use the term "Use Multicollo" instead of "Use Batch Shipping." This aligns Odoo wording with Sendcloud terminology, reducing confusion for users configuring shipments.
Original PR description
In order to avoid confusion for the customer, "Use Batch Shipping" was renamed to "Use Multicollo".This way it is consistent with the terminology used by Sendcloud. task-6048477 Forward-Port-Of: odoo/enterprise#122920 Forward-Port-Of: odoo/enterprise#122133
Mexican payroll CFDI payroll checks are updated to match version 1.2e requirements. This helps ensure payslip XML data is generated with valid taxable, exempt, and subsidy amounts, reducing compliance errors for Mexican payroll processing.
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
This update improves the reliability of marketing automation by expanding test coverage and fixing timing issues when campaign steps are synchronized. It also improves handling of failed, bounced, SMS, and WhatsApp-related activities so campaign flows behave more consistently as they scale.
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#124126This update brings the Owl library, a key component of our website, to the latest version (2.8.4). This improves performance and allows us to utilize modern Node.js development practices, ensuring a smoother user experience and future flexibility. The update also resolves a previous issue related to rendering, preventing data loss.
Original PR description
- [FIX] runtime: don't lose coalesced renders - [IMP] loadable with nodejs See https://github.com/odoo/owl/commits/owl-2.x/ for more details 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#275568
This update enhances the testing framework for Odoo's mass mailing functionality. Specifically, it incorporates simulated user actions like email opens and replies to more accurately verify the scheduling and execution of marketing campaigns. This improves the reliability of marketing automation processes.
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#275964
6 changes
Enhancements to existing features
Signature requests started from other apps now include the template name alongside the related record name. This makes request names, file names, 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 Sendcloud delivery settings now use the term “Use Multicollo” instead of “Use Batch Shipping.” This aligns Odoo’s wording with Sendcloud’s terminology, reducing confusion for users configuring multi-package shipments.
Original PR description
In order to avoid confusion for the customer, "Use Batch Shipping" was renamed to "Use Multicollo".This way it is consistent with the terminology used by Sendcloud. task-6048477 Forward-Port-Of: odoo/enterprise#122920 Forward-Port-Of: odoo/enterprise#122133
Mexican payroll now follows the latest CFDI payroll validation rules for taxable and exempt perception amounts and employment subsidy limits. This helps companies reduce payroll XML rejection risks and stay aligned with updated compliance requirements.
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
This update strengthens marketing automation by adding broader test coverage and correcting edge cases in campaign synchronization, scheduling, and failed or bounced message handling. It helps ensure customers receive the right follow-up actions at the right time, especially across email, SMS, and WhatsApp campaigns.
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#124126This update improves the performance and reliability of our website's image galleries by upgrading the Owl library to the latest version (2.8.4). Specifically, it fixes a bug that caused image renders to be lost and adds support for running the library with Node.js, enhancing flexibility.
Original PR description
- [FIX] runtime: don't lose coalesced renders - [IMP] loadable with nodejs See https://github.com/odoo/owl/commits/owl-2.x/ for more details 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#275568
This update enhances the testing framework for Odoo's mass mailing functionality. Specifically, it improves the tools used to simulate user interactions (like email opens and replies) to accurately verify the scheduling and execution of marketing campaigns. This ensures marketing automation processes are reliable and perform efficiently.
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#275964
6 changes
Enhancements to existing features
Signature requests created from other apps now include the template name alongside the related record. This makes request names, filenames, and email subjects easier to recognize and reduces confusion when the record name looks like 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 Sendcloud delivery option formerly labeled "Use Batch Shipping" is now called "Use Multicollo". This aligns Odoo wording with Sendcloud terminology, reducing confusion for users configuring shipments.
Original PR description
In order to avoid confusion for the customer, "Use Batch Shipping" was renamed to "Use Multicollo".This way it is consistent with the terminology used by Sendcloud. task-6048477 Forward-Port-Of: odoo/enterprise#122920 Forward-Port-Of: odoo/enterprise#122133
Mexican payroll processing now follows the latest CFDI 1.2e validation requirements for taxable and exempt perception amounts and employment subsidy limits. This helps reduce rejected payroll documents and keeps payroll reporting aligned with current compliance rules.
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
This update strengthens marketing automation by adding broader test coverage and fixing issues in how campaign participants, schedules, and failed messages are handled. It helps ensure email, SMS, and WhatsApp campaign flows behave more consistently, especially when campaigns are changed after launch.
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#124126This update improves the performance and functionality of our website by upgrading the Owl library, a key component for handling image galleries and visual elements. Specifically, it addresses a bug that prevented the loss of rendered images and adds support for running the library with Node.js, enhancing flexibility.
Original PR description
- [FIX] runtime: don't lose coalesced renders - [IMP] loadable with nodejs See https://github.com/odoo/owl/commits/owl-2.x/ for more details 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#275568
This update enhances the testing framework for Odoo's mass mailing functionality. Specifically, it incorporates simulated user actions like email opens and replies to more accurately verify the scheduling and execution of marketing campaigns. This improves the reliability of marketing automation processes.
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#275964
1 change
Enhancements to existing features
This update enhances the product configurator within Point of Sale. Now, when a barcode scan matches a product variant, the pre-selected options (like color) are automatically filled in, mirroring the experience when searching for a product by barcode. This simplifies the process for sales staff and improves accuracy.
Original PR description
When a barcode scan matches a specific product variant, the product configurator now behaves the same as when the user searches by barcode: - The `always`-mode attribute (e.g. Color) is preselected from the matched variant instead of being hidden or left blank. - The `no_variant`-mode attributes (e.g. Size) are shown for user input. opw-6220883 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267038 Forward-Port-Of: odoo/odoo#265189
38 changes
Enhancements to existing features
Adds warnings to help Belgian payroll teams identify ONSS payment issues when preparing DMFA declarations. This reduces the risk of missed or incorrect social security payments and improves visibility directly in the payroll workflow.
Original PR description
task-id: 6242053
Belgian payroll now includes a warning when an employee worker code needs attention. This helps payroll teams spot missing or incorrect worker-code information earlier, reducing the risk of payroll reporting issues.
Original PR description
task-6365107
Payroll users can now search rule parameters using the parameter value, not just the name or code. This makes it easier to find the right payroll setting when users know the amount or value, including older stored values.
Original PR description
Users often know the exact value of a payroll parameter but not its name or code. This adds a search field on the rule parameter search view targeting the related values, enabling lookups across both current and old values. Task: 6365318
Payroll account setup now uses stable account references instead of account code patterns across many country-specific payroll modules. This makes payroll configuration more reliable for businesses with different chart of accounts structures and reduces setup warnings or failures.
Original PR description
{*} = {ae, au, bd, be, ch, eg, hk, id, in, iq, jo, ke, kw, lt, lu, ma, mx, my, nl, om, ph, pk, ro, sa, sk, tr, us} Following the core architecture change to standard payroll account configuration,…
{*} = {ae, au, bd, be, ch, eg, hk, id, in, iq, jo, ke, kw, lt, lu, ma, mx, my, nl, om, ph, pk, ro, sa, sk, tr, us}
Following the core architecture change to standard payroll account configuration, this refactors the account setup scripts across multiple localizations to migrate entirely away from raw account codes.
Previously, the payroll engine matched accounts dynamically via SQL 'LIKE' prefix matching on hardcoded strings (such as '6110'). This logic was structurally fragile: standard chart of accounts (CoA) codes can vary between businesses, are completely optional in certain jurisdictions (like the US), and frequently shift prefix lengths or masking structures between different localization templates.
By switching the logic to leverage distinct XML IDs via the new 'account_refs' parameter, the system now binds salary rules to explicit, unchanging database templates. This guarantees a safe 1:1 relationship, eliminates edge-case log warnings regarding missing accounts during template loading, and ensures configuration scripts run successfully across disparate localization structures.
All occurrences of the obsolete 'account_codes' parameter have consequently been dropped from these modules.
task-6043990Belgian payroll users can now generate a certificate of employment directly from an employee’s end-of-collaboration area. When electronic signing and document management are installed, the process also prepares a signing request, helping HR handle departures more efficiently.
Original PR description
When an employee is leaving, the employer should hand out a certificate of employment.
The certificate is genereate in the chatter if only l10n_be_hr_payroll is installed.
If sign and documents installed, a sign template and request is also created.
- In l10n_be_hr_payroll
- Add a button in employee "End of collaboration" tab.
- Add new action `action_report_employment_certificate`.
- Add 2 new templates `l10n_be_hr_payroll.employment_certificate` and `l10n_be_hr_payroll.employment_certificate_base` for translation.
- In a new bridge l10n_be_hr_payroll_sign
- Override action_report_employment_certificate to add sign feature.
- Inherit from `l10n_be_hr_payroll.employment_certificate` to add a flag div for the sign item.
Task: 6314717Several apps were updated to use the newer Material Symbols icon style instead of the older FontAwesome setup. This keeps icons displaying correctly across screens such as appointments, documents, knowledge, rooms, sign, studio, website appointments, rentals, and live chat after the platform-wide icon change.
Original PR description
This is the minimal migration required for odoo/odoo#273606 to work. task-5901783
The AI module now avoids using a Google embedding model that is scheduled for deprecation. Existing AI data created with deprecated embedding models will be automatically refreshed, helping keep AI-powered features reliable without manual cleanup.
Original PR description
The model gemini-embedding-001 will be deprecated soon, so this commit is: - Deprecating that model. - Introducing an autovacuum to recompute embeddings that were done using embedding models that have been deprecated. task-6004597 Forward-Port-Of: odoo/enterprise#124095
Full-week payroll calendars for several localizations are now provided as demo examples instead of standard setup data to align with new calendar rules. Hong Kong company defaults are adjusted so new companies still get an equivalent working calendar where needed.
Original PR description
In odoo/odoo#267961, we are disallowing the use of time types linked to a country on a resource calendar without a company. This commit aims at moving some calendars that had such time types from the data to demo. task-6298866
Spreadsheet side panels now use Odoo's standard date picker for calendar fields. This makes choosing dates in conditional formatting and data validation more consistent and easier for users.
Original PR description
DateTimePickerPopover from Odoo is now used in the CalendarButton component of spreadsheet (CF and DV side panels) Task: 5395190
Belgian payroll can now calculate employee seniority using the start date of a future contract version instead of today. This helps payroll teams preview future payroll situations more accurately when preparing upcoming employee changes.
Original PR description
In this commit, it will be possible to compute seniority in future versions. When the version.date_start > today, we calculate the seniority until version.date_start instead of today (future version case). task-6375077
Eco voucher spreadsheet reports can now be generated in English and Dutch in addition to French, based on the user's language settings. The report layout is also improved with centered text, making the exported file easier to read and share.
Original PR description
Previously eco vouchers .xlsx report was only supported in French. This task adds English and Dutch according to the user's configuration. Additionally, text is aligned to the center task-6340788
Belgian payroll now automatically creates approved paid time off allocations for eligible employees when public holidays are added. New eligible employees also receive allocations for existing public holidays, reducing manual HR work and helping ensure consistent compensation handling.
Original PR description
In this commit, we automated the public holiday allocation. When a public holiday is created, each eligible employee (active and worker_code is set) will got a validated allocation automatically. Also, when a new employee is created, he will receive allocations for existing public holidays. The allocation date_from will be the first day of the public holiday date, and the date_to will be the last day of the current year. task-5480426
The Mexican electronic invoicing report template was adjusted to stay compatible with the updated main invoice template. This helps ensure localized invoice documents continue to render correctly after the template change.
Original PR description
Adjusting Enterprise l10n templates to work with updated main template. task-6152210
The Peppol settings section now appears at the top of the relevant settings page. This makes it easier for users to find and configure Peppol-related options without scrolling through other settings first.
Original PR description
Peppol block was moved to the top of the page task-5977363
Gantt views now use a clearer popover structure so details shown in popups are loaded only when needed. This keeps view definitions tidier and can reduce unnecessary data loading across scheduling, planning, project, maintenance, events, rentals, rooms, and related workflows.
Original PR description
This commit is a followup of [1] which revamped the popover API in gantt archs. The introduced API had a flaw though: one couldn't distinguish, in the arch, fields that were there because they were…
This commit is a followup of [1] which revamped the popover API in gantt archs. The introduced API had a flaw though: one couldn't distinguish, in the arch, fields that were there because they were used in the template, or because they were necessary for another reason. This impacts the how and when they are fetched: popover fields are fetched when we open the popover, for that record only. The other fields are fetched when opening the view, for all records matching the domain. The current API is a bit messy. We thus introduce a new `popover` node which allows to wrap fields used in the popover. It also offers the perfect spot to indicate the `card_id` to use as popover-body, instead of the root node. This implies another small change: that card isn't inlined in the arch anymore (which makes the resulting arch less messy), but is fetched the first time we open a popover. This API change follows what is done for the calendar [2] and map [3] views. [1] https://github.com/odoo/enterprise/pull/114328 [2] https://github.com/odoo/odoo/pull/272713 [3] https://github.com/odoo/enterprise/pull/122040 Task~6358615
Financial reports can now be calculated in smaller time-based pieces and combined while still matching the result of a full-period calculation. This improves support for report snapshots and also fixes an issue where report lines could stay expanded even after they no longer had child lines.
Original PR description
In order to support snapshots, the domain engine must be composable. This means data must be computed in separate partitions, then merged to give the exact same result as a full period computation. The `sum_if_pos` and `sum_if_neg` formulas break this composability. Therefore, we are dropping these subformulas, replacing them with the `if_above` and `if_below` aggregations. task-6235251
Dark mode color choices in the color list have been adjusted to make them clearer and more consistent. This helps users better distinguish colors while keeping the interface aligned with recent visual updates.
Original PR description
this commit applies some small changes to the colorlist dark mode colors for clarity purpose and fit with the new color added in https://github.com/odoo/odoo/pull/189689 task-4384898
Calendar popovers in several Odoo apps now use the updated card-based layout, keeping scheduling details consistent after the shared calendar interface was reworked. This improves the visual consistency of planning, field service, knowledge, VoIP, and related scheduling views without changing core business workflows.
Original PR description
This PR adapts the calendar extensions, especially those that customize the CalendarCommonPopover, which has been massively reworked. Task~5262907
The Planning mobile resource view now shows an employee photo for people and a tool icon for material resources. This makes it easier for users to quickly identify the right resource while planning on a mobile device.
Original PR description
planning mobile view improvement - displayed picture of the employee if resource type is human on the resource kanban view. - displayed tool icon if resource type is material on the resource kanban view task-3770245
Updates improve how users work with documents and comments in the Knowledge app. This should make collaboration smoother and more reliable when reviewing or discussing shared content.
Spreadsheet screen display and scrolling behavior were reorganized to use a shared store, making the experience more consistent across comments, lists, pivots, history, and sales field sync features. This is mostly an internal improvement that should help maintain reliability while preserving expected user 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. Task: [6314784](https://www.odoo.com/web#id=6314784&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The salary configurator and employee offer screens now present company car options in a simpler, more user-friendly way. This makes it easier for Belgian employees and HR teams to understand and select fleet-related benefits during salary package setup.
Original PR description
-Introducing some UX changes in salary configurator and employee's offer view to simplify car options.
This update makes notifications across several Odoo apps non-sticky, so they no longer remain on screen until manually dismissed. It improves day-to-day usability by reducing interruptions and keeping work screens cleaner for users.
Map popovers can now use the same flexible card-style layout system used elsewhere in Odoo, making their content easier to structure and customize. Existing map popovers continue to work for now, while related map view extensions and tests were updated to support the new approach.
Original PR description
*: web_studio,stock_enterprise
This PR if a followup of [1] and introduces the ability to use the card
API to declare map popover. The map archs now expects a
```xml
<popover>
<templates>
</templates>
</popover>
```
node which can declare `popover-header`, `popover-body` and
`popover-footer` templates. Those templates follow the same API as
cards (kanban). Moreover, a `card_id` attribute can be set on the
`popover` node to declare the card view to use as popover body.
Note: the previous API keeps working (temporarily).
This PR also adapts the various JS extensions of the map view.
[1]: https://github.com/odoo/odoo/pull/260098
task-6310630Payment token records for SEPA Direct Debit now show the linked mandate directly on the form. This makes it easier for staff to verify the authorization behind a saved payment method without navigating elsewhere.
Original PR description
Add sdd_mandate_id on the payment token form. See https://github.com/odoo/odoo/pull/268220 task-6251341
An unused repair-related view and action were removed from the planning field service repair module. This cleans up the application internals and reduces maintenance overhead without changing the visible user experience.
Original PR description
Currently, action_open_reference_no_repair is not called anywhere, so the view remains unused. Therefore, this commit removes the unused view.
Payslip lines now show an information tooltip explaining how each amount was calculated, helping payroll users answer calculation questions directly in the payslip. Payroll teams can configure explanation text on salary rules, with an initial Belgian payroll example included.
Original PR description
Each salary line is the result of a computation. To help the end user understand how the amounts are derived and lower the number of "how is this computed?" questions, an info icon is now displayed on hover on the backend of the payslip line. This commit introduces the framework to support this: - Adds an `explanation_template` text field on the salary rule to configure the logic. - Safely evaluates the template during the payslip computation. - Introduces an `explanation_tooltip` widget to display the translated result on hover in the UI. - Implements a first test rule as an example in the Belgian payroll. Task Id: 6268188
Helpdesk teams can now create invoices for several solved tickets at once from the action menu. This reduces manual work and speeds up billing for completed support services.
Original PR description
Before this PR : - No available method to create invoices for multiple solved tickets in batch. After this PR: - A 'Create Invoices' action is added in the action menu to invoice multiple tickets in batch. Task id: 4243781
Uzbekistan financial reports now include Russian translations alongside Uzbek. This helps companies operating in Uzbekistan serve Russian-speaking users and improves adoption in the local market.
Original PR description
Uzbekistan's business environment requires Russian in addition to the official Uzbek language to ensure adoption. While localizations typically activate only statutory languages, Central Asian market realities justify this exception. task-6229114 -- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#122901 Forward-Port-Of: odoo/enterprise#120250
This update adds support for temporary economic unemployment leave handling for Belgian worker employees. It helps payroll teams apply the correct leave codes for workers versus other employee types, improving payroll compliance and reducing manual correction risks.
Original PR description
[IMP] l10n_be: economic unemployement for workers
adding new work entry type Temporary economic unemployment for employee
. add a constraint to hr.leave that if employee is worker then he should use LEAVE6665 else LEAVE13720
task - 6358912Product availability checks for rentals and subscriptions are now handled through one shared purchase rule instead of several separate checks. This makes product filtering and add-to-cart behavior more consistent and easier to maintain, reducing the risk of mismatched storefront behavior.
Original PR description
Replace the ad-hoc _website_show_quick_add / _is_add_to_cart_allowed / _can_be_added_to_current_cart / _website_can_be_added overrides with a single override of _is_purchasable() in both modules, removing website_sale_subscription/models/product_product.py entirely. Community PR: - https://github.com/odoo/odoo/pull/252296 task-5491803
Payroll users can now access Import and Export options directly from the time off Gantt view in the pay run time step. This removes the need to switch to list or kanban views when moving time off records in or out of Odoo.
Original PR description
The pay run "time" step shows time off (hr.leave) records in a gantt, list and kanban view. The standard "Import" and "Export" cog menu entries only show up on list/kanban views, so they were missing from the gantt, even though they are available on the very same records in the list. Surface both entries on the hr.leave gantt as well: - the base "Import" and "Export" cog items are reused, scoped to the hr.leave gantt via their isDisplayed; - since gantt controllers do not wire the direct xlsx export (only list and kanban do), install useExportRecords on the gantt controller, backed by a minimal list-like root built from the gantt search params so no state has to be added to the model. task-6348558
HR teams can now set Christmas bonus day counts for each employee version instead of using one company-wide value. This better supports Mexican payroll cases where bonus entitlements differ by agreement, seniority, or bargaining terms, and ensures related payroll calculations use the employee-specific value.
Original PR description
Previously, the Christmas bonus days parameter (l10n_mx_christmas_bonus) was configured at the company settings level, imposing a uniform value across all employees. In Mexico, Christmas bonus entitlements often vary based on individual negotiations, seniority, or collective bargaining agreements. Moving this parameter to the employee version level allows HR managers to specify custom bonus day counts per individual **what:** - Added the l10n_mx_christmas_bonus float field to the employee versioning model with a default value of 15.0. - Updated the XML view to expose the field within the version context of the employee form. - Refactored the calculation logic inside the BASIC (Basic Christmas Bonus) and PROVISIONS_CHRISTMAS_BONUS salary rules to retrieve the bonus days dynamically from the active employee version. - Updated the l10n_mx_integration_factor processing logic to respect the version-specific value. task-6371803
Belgian payroll now recognizes three additional leave types for salary processing, declarations, and payslip workflows. This helps ensure payroll treatment and reporting align with Belgian leave rules, including correct handling of reorganization measures for eligible leave types.
Original PR description
- Add LEAVE14704, LEAVE14708, and LEAVE14713 to the relevant salary structures, DMFA calculations, and payslip workflows. - Map salary categories and DMFA configurations for the new leaves following the existing MEDIC01 baseline. - Configure LEAVE14704 (palliative care) and LEAVE14708 (informal carer) to open reorganization measures, while explicitly excluding LEAVE14713 (time credit not equated) from triggering them. Task: 6361609
VoIP softphone contact lists now show more relevant people first when searching, such as internal colleagues during transfers and recently called contacts in other searches. The update also reduces confusing gaps, scrolling issues, and misleading “more results” counts, making it easier to find the right contact quickly.
Original PR description
Review the order contacts are listed in the softphone, trying to show the most meaningful ones first, and fix a few issues along the way. [FIX] voip: mitigate loading/scrolling softphone bugs The…
Review the order contacts are listed in the softphone, trying to show the most meaningful ones first, and fix a few issues along the way.
[FIX] voip: mitigate loading/scrolling softphone bugs
The VoIP softphone basically loads contact data in two cases: when
browsing/searching for contacts and when scrolling a contact list to
browse more. The way it works is currently performant rpc-wise... but
very wrong: each time a contact is loaded, it ends up in the client
Store and when the user later browses/searches for contacts, that Store
is used before allowing to "browse more" by scrolling.
This leads to many bug variants, like this one:
- Have a "long" (e.g. 50) list of contacts
- Search for the contact name "Z", the last one
- You find maybe 10, likely at the end, then remove the search
=> You now see 13+X contacts, 13 first of the DB alphabetically then X
"Z" loaded previously. It's already a visual bug: you see a lot of
missing contacts between the 13 first and "Z".
- Scroll
=> Contacts appears only once you reach the last "Z" but they might
appear at the very top (e.g. a "B" not yet loaded).
Now another bug:
- Have a "long" list of contacts, including 15 with last name "Smith"
- Open the contacts list (e.g. transfer view), type "Smith"
=> You see 13 Smith, good
- Try to scroll to load the last 2
=> You probably can't... because you already loaded more than 15
contacts just by opening the contact list
... there are many variants of this bug. Basically, with or without
search, you see a list of contacts with "gaps" and you can't expect to
be able to find all contacts (matching a search or not) by scrolling.
The only certainty you have is that if you enter the *exact* name of a
contact, you will find it (if there are no more than 13 with the same
exact full name).
This would require a deeper VoIP changes to fix properly keeping good
perfs, which is not the focus at the moment. This commit however tries
to mitigate the issue when scrolling a list with a new search.
Note that the following commits kinda worsen this mitigated issue, but not by much.
[IMP] voip: show internal users first in transfer view while searching
The softphone displays searched contacts ordered alphabetically. This
commit now also first display internal users of the database, only when
a search is performed, only while searching for a contact to which a
call has to be transferred. Indeed, when transferring, it is likely you
want to transfer to one of your colleague, and after a 2-3 letters
search, it should be enough for your colleague to be nearly alone at the
top, while searching for "James" could lead to 100 "James" regrouping
all the contacts your company is dealing with.
[IMP] voip: show 3 most recently called contacts first when searching
The parent commit introduced transfer search sorting that puts internal
users first, as those are the most likely people you want to transfer a
call to.
With a similar idea in mind, this commit puts the 3 user's most recently
called matching contacts first in the other contact search contexts.
[IMP] voip: review keypad suggestion "more" button label
The keypad fetches 30 contacts once a search is performed. It then
shows only one and shows a "more" button indicating the remaining
amount. In case 30 contacts were fetched (matching the search), it
showed "29 others"... although there might be more unloaded in the
database.
We now show 1, 2, 3, ..., 30 "others" if that is the exact amount in
the database. Otherwise we show the amount we already have loaded client
side, minus 1, with a "+". E.g. if 75 were loaded previously, matching
the search, we show 1 suggestion + "73+ others" as button, knowing there
could be more than 75.
To achieve this, we load 32 contacts at the first search, instead of 30:
1 suggestion + a potential exact "30 others" + 1 to show "30+" if needed
[IMP] voip: improve consistency of softphone interactions
The softphone mostly consists of "tab entries" which can be opened or
scrolled through. This commit makes it tab entries are closed and the
scroll reset consistently.
For example: if you search for a contact, open its entry, call it then
come back later to the contact entry, it will be closed instead of still
opened. The scroll might also have jumped to the contact entry that was
previously opened... now each search properly shows the tab entries from
the start.
task-6326451This update improves the payroll user experience by refining payroll batch handling and Belgian payroll work entry type views. These changes help HR teams work more smoothly and reduce friction in day-to-day payroll administration.
Original PR description
task-id: 6360832
The Payroll employee type screens were adjusted to make them easier to use and more consistent, including related Belgian payroll views. This helps HR and payroll teams manage employee classifications with less friction and clearer navigation.
Original PR description
task-6357922
Obox device forms now include a Test button so users can quickly verify printers, scales, and cameras from the device page. Printer testing now lets users choose the print format, making setup and troubleshooting easier.
Original PR description
This commit adds a Test button to the Obox device form, similar to the IoT device form. It is supported for all three device types (printer, scale, camera). For printers, the user must select which type of test print to perform (PDF, receipt, ZPL). task-6332378
3 changes
Enhancements to existing features
This update strengthens marketing automation behavior around campaign synchronization, message failures, and user-triggered activities such as opens and clicks. It fixes scheduling and trace handling issues across email, SMS, and WhatsApp journeys, helping campaigns behave more consistently as they scale.
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 / ScalabilityThe AI module now moves away from an embedding model that will soon be retired. It also refreshes existing AI data created with deprecated models, helping keep AI-powered features reliable without manual intervention.
Original PR description
The model gemini-embedding-001 will be deprecated soon, so this commit is: - Deprecating that model. - Introducing an autovacuum to recompute embeddings that were done using embedding models that have been deprecated. task-6004597
Bank reconciliation now displays draft statement lines in blue, making them easier to distinguish at a glance. This helps accounting users quickly identify items that are not yet finalized and reduces 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
1 change
Enhancements to existing features
The Peru e-invoicing localization now includes and activates product classification codes required by SUNAT's upcoming 2026 validation rules. This helps Peruvian companies avoid rejected e-invoices for affected goods while keeping Peru-specific codes limited to databases using the Peru localization.
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#123577
2 changes
Enhancements to existing features
This update allows developers to pass custom context information directly through search bar fields in Odoo. This provides more control over how search results are filtered, potentially improving data accuracy and relevance for users. It's a minor improvement that enhances the flexibility of Odoo's search functionality.
Original PR description
Allow using `context="{...}"` in `search` views' `field` tags
Eg:
```
<search>
<field name="partner_id" context="{'ctx_key': ctx_val}"/>
</search>
```
will propagate `{'ctx_key': ctx_val}` to `res.partner`'s context when `name_search()` is called.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update makes the loading of availability information in the Manufacturing Order (MO) list view faster. Previously, this process was a significant delay, impacting user experience. By implementing a lazy loading approach similar to previous versions, this change dramatically improves the speed and responsiveness of the MO list view.
Original PR description
When loading the MO list view, loading the availability is what's taking the most time. Making this loading lazy as it was in 16.0 will greatly contribute to the UX. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr