Wednesday, April 1, 2026
44 changes
2 changes
Enhancements to existing features
The sickness relapse checkbox in Belgian payroll processing now defaults to unchecked instead of checked. This change reflects the updated 56-day sickness period policy, where relapse situations are less common and the system now assumes "no relapse" by default, reducing manual corrections needed by HR staff.
Original PR description
Because the sickness period is now 56 days, the heuristic has switched to "mostly always a no," so the relapse checkbox is unchecked by default. Task: 6081595
The payroll system now hides worked day details from the payslip summary widget when they're not needed for certain pay structures, such as bonus-only payments. This change reduces clutter and confusion for pay officers by dynamically showing only relevant information based on the pay structure type.
Original PR description
In order to improve the experience of pay officers and prevent any confusion, some pay structures will not require the display of individual work day lines such as bonuses. Accordingly, the worked day widgets will be dynamic. Task: 6030842
1 change
Enhancements to existing features
This update enhances the product import functionality to automatically group product variants under a single product template based on matching product names in import files. Users can now manage entire product families (templates and variants) from a single Excel file, with automatic creation of product attributes and values. This streamlines bulk product management and reduces manual data entry.
1 change
Enhancements to existing features
Updated Ecuador's withholding tax percentages to comply with the new 2026 government resolution. The system now uses the latest tax rates while preserving historical data by marking previous rates as inactive, ensuring accurate tax calculations for Ecuadorian businesses going forward.
Original PR description
Implement the new withholding tax percentages according to "Resolución N.º NAC-DGERCGC26-00000009" for Ecuador, following internal implementation guidelines by TRESCLOUD. SPECIFICATION: - Created the new withholding percentages as new tax records. - Set the previous withholding percentages as inactive to preserve historical data. - Ensured compatibility with existing tax configurations and fiscal mappings. Table with the changes established in "Resolución N.º NAC-DGERCGC26-00000009". <img width="1676" height="303" alt="image" src="https://github.com/user-attachments/assets/79ae91b2-6d31-442f-af3c-74304742c8b6" /> BP: #252917 Forward-Port-Of: odoo/odoo#254240 Forward-Port-Of: odoo/odoo#254018
16 changes
Enhancements to existing features
This update refines the M3.1 design system styling by introducing a new outlined box style for views outside of groups. The changes revert previous M3 modifications to templates and restore previous layouts with necessary adjustments, improving visual consistency across the application while addressing some remaining styling refinements needed in specific areas.
Original PR description
In some view outside the groups we want the boxes anyway so we introduce the `o_outlined` class. This commit reverts the changes made for M3 to the arch, and bring back the previous template with some adaptation when needed. Note: * clipboard: more refactoring needed in some case icons are not visible * M3: some class are still present task-6054024 Co-authored-by: Luca Vitali <luvi@odoo.com> Co-authored-by: Romain Estievenart <res@odoo.com>
2 changes
Enhancements to existing features
This update improves how users can manage Point of Sale transactions in Jordan's electronic invoicing system. Previously, users could get stuck with demo transactions that couldn't be modified or deleted. Now, the system is more flexible—users can change transaction states and either delete demo transactions or move them to production, giving them better control over their POS operations.
Original PR description
Before this commit:
- The fields `l10n_jo_edi_pos_{state, return_reason}` were readonly when
`l10n_jo_edi_pos_qr` was set. However, we did not take into account the fact
that `pos.order` cannot be reset once `done/paid/invoiced`; thereby blocking
the user with a demo transaction forever without any alternative.
After this commit:
- The fields `l10n_jo_edi_pos_{state, return_reason}` are readonly when
`l10n_jo_edi_pos_qr and l10n_jo_edi_state == 'sent'`. Additionally, an
onchange is introduced on `l10n_jo_edi_pos_state` to clear
`l10n_jo_edi_pos_qr`. This gives back flexibility to the user to either delete
the demo mode transaction or sync them to the production endpoint.
task-5958427
Forward-Port-Of: odoo/odoo#2508083 changes
Enhancements to existing features
This update adds missing tax exemption reasons to the electronic invoicing system to ensure full compliance with Peppol standards. The change enables businesses to properly document all types of tax exemptions when creating electronic invoices, improving accuracy and regulatory compliance in cross-border transactions.
Original PR description
Some tax exemption reasons were missing, This commit ensures having all the tax exemption reasons introduced by Peppol task-6048561 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
Backport: - https://github.com/odoo/odoo/pull/236489 - https://github.com/odoo/odoo/pull/249086 - https://github.com/odoo/odoo/pull/255497 Task: 6041826 Implemented a new product import system that…
Backport: - https://github.com/odoo/odoo/pull/236489 - https://github.com/odoo/odoo/pull/249086 - https://github.com/odoo/odoo/pull/255497 Task: 6041826 Implemented a new product import system that supports grouping product variants under a single product template based on the product name. This new feature allows the creation and update of product templates and their variants from a single Excel file. Grouping Logic: - Variants are grouped onto a product template if they share the same product name in the import file. Attribute Value Handling: - Attribute values are provided in a structured format: `attribute name:value name`, separated by commas (e.g., Color:Red, Size:M). - Attributes and their values are automatically created if they do not already exist in the system. External ID Handling: - If a product/variant has attribute values, the external ID is expected to be a `product.product` External ID. - Otherwise (if it's a simple product or the template record), the external ID is expected to be a `product.template` External ID. Example (.csv): External ID;Internal Reference;Name;Product Type;Barcode;Sales Price;Weight;Sales Description;Attribute values product_template_1;;T-shirt Big Bang;Goods;;110;;T-shirt with Big Bang Theme; product_product_1;T-SHIRT-BB-1;T-shirt Big Bang;;code-b-1;;0,12;;Color:Red,Size:S product_product_2;T-SHIRT-BB-2;T-shirt Big Bang;;code-b-2;;0,13;;Color:Red,Size:M product_product_3;T-SHIRT-BB-3;T-shirt Big Bang;;;115;0,14;;Color:Blue,Size:L product_product_4;T-SHIRT-BB-4;T-shirt Big Bang;;;125;0,15;;Size:M,Color:Red product_product_5;T-SHIRT-SW-RS;T-shirt Stars Wars;Goods;code-1;100;0,12;T-shirt with Stars Wars Theme;Color:Red,Size:S product_product_6;T-SHIRT-SW-RM;T-shirt Stars Wars;Goods;code-2;100;0,13;T-shirt with Stars Wars Theme;Color:Red,Size:M product_product_7;T-SHIRT-SW-RL;T-shirt Stars Wars;Goods;code-3;100;0,14;T-shirt with Stars Wars Theme;Color:Red,Size:L product_product_8;T-SHIRT-SW-BS;T-shirt Stars Wars;Goods;code-5;110;0,12;T-shirt with Stars Wars Theme;Color:Blue,Size:S product_product_9;T-SHIRT-SW-BM;T-shirt Stars Wars;Goods;code-6;110;0,13;T-shirt with Stars Wars Theme;Color:Blue,Size:M product_product_10;T-SHIRT-SW-BL;T-shirt Stars Wars;Goods;code-7;110;0,14;T-shirt with Stars Wars Theme;Color:Blue,Size:L Forward-Port-Of: odoo/odoo#254323
The spreadsheet printing functionality has been enhanced with a proper printing wizard that is now built into the spreadsheet tool itself. This improvement allows us to remove outdated printing code and assets from Odoo, making the system cleaner and more maintainable while providing users with a better printing experience.
Original PR description
A real printing wizard was introduced in o_spreadsheet, we can now remove the `useSpreadsheetPrint` hook in odoo as well as the print asset bundle. Task: 5891329
The self-check-in QR code displayed on the frontdesk kiosk now includes the kiosk's selected language, ensuring visitors see the mobile check-in page in the correct language instead of always defaulting to English. This improvement enhances the user experience for international visitors and multi-language facilities.
Original PR description
Previously, the self-check-in QR code did not include the kiosk's selected language, so the mobile page always defaulted to English. Now, the kiosk language is included in the QR code URL, ensuring visitors see the mobile page in the intended language.
Documents now display clear, standardized messages showing who created them, where they came from, and other important details. This makes it easier for users to understand a document's origin and history without confusion or wasted time searching for information.
Original PR description
Currently, when documents are created, their chatter messages are inconsistent, lack important details, or simply do not exist. This creates confusion and wastes users' time when trying to trace a…
Currently, when documents are created, their chatter messages are inconsistent, lack important details, or simply do not exist. This creates confusion and wastes users' time when trying to trace a document's origin. To solve this problem and improve the user experience, this PR introduces a standardized chatter message format that cleanly captures all essential information. Displayed information: - Document Author - Original document name - Document source (e.g., user upload, email, PEPPOL, or an Odoo app) - Notes section (hidden if empty; used to display the related record when saving an attachment from the chatter) Implementation notes: - Hid redundant creation/tracking chatter messages. - Added a new message subtype (`mt_document_source`) to easily retrieve this information later. - These document messages will be used in future AI tasks, so they are posted even if tracking is disabled. However, a `no_documents_creation_message` context flag was added to forcefully disable them when needed.
The payroll dashboard has been improved to provide a cleaner user experience. The 'set schedule' wizard now automatically hides the working hours field when company working hours are already configured, and displays a more helpful placeholder text. Additionally, the schedule confirmation message is removed once the payroll schedule is set, reducing visual clutter and improving dashboard clarity.
Original PR description
Specifications ============== In 'set schedule' wizard: - If Working Hours is set on the company, hide the field - Change the place holder : "Default working hours used for this company" Remove the 'Monthly payrun is scheduled on xxx' line on top once the schedule is set. Task-6067733
Call settings like push-to-talk preferences and voice duration are now stored locally on each device instead of being shared across all your devices. This improvement allows each device to have its own customized call settings, which is more practical since different devices may have different keyboards and input methods.
Original PR description
Currently "use_push_to_talk", "push_to_talk_key", "voice_active_duration" settings are saved on server, which means they are shared among all devices of the user. Different devices are likely to use different input methods / keyboards, therefore these settings should be per device instead. This commit converts these server settings to localStorage. task-5992929 https://github.com/odoo/odoo/pull/255566
This update fixes a data caching issue in the system's core database layer that was affecting relationship fields (like one-to-many and many-to-many connections). The fix prevents stale or incorrect data from being reused, which improves system reliability across multiple modules including HR, planning, and point-of-sale operations. This ensures users always see accurate, up-to-date information.
This update enhances the Belgian payroll DIMONA declaration system with improved views and wizard functionality. The changes make it easier for HR teams to manage employee declarations and related data through a more intuitive interface and streamlined workflows.
Original PR description
Task: [6035146](https://www.odoo.com/odoo/project/1251/tasks/6035146)
This update strengthens the Odoo system by adding comprehensive tests across multiple modules to ensure tracking features work correctly and won't break with future changes. It also fixes several bugs including incorrect data display and missing validation checks. These improvements help maintain system stability and data accuracy across accounting, HR, and customer management features.
This update reorganizes how Belgian employee salary calculations work in the payroll system. The changes simplify the salary rules by using better categorization of different types of pay and deductions, making the system more flexible and easier to maintain. This also enables the ability to create separate payslips for different types of compensation (like commissions) while ensuring taxes and contributions are calculated correctly.
This update improves how tax declarations (281.10) are organized and shared with employees. Documents are now automatically organized into employee-specific Payroll folders, existing files can be overwritten through a confirmation dialog, and employees receive email notifications with document access links regardless of their user status. This makes the tax declaration process more organized and ensures all employees receive their documents.
Original PR description
Currently, when when a tax declaration (281.10) is generated and posted to Documents, the PDF is generated in the main Documents folder, and an email is only sent to the partner of the employee is the employee is a user. If the document already exists, the PDF posting logic skips that document. - Adds logic to create the employee folder in the Payroll folder if it doesn't already exist, and posts the PDF file into the folder. - Adds a wizard to open a dialog box display existing files and prompts the user to confirm whether they should be overwritten. If the user chooses to overwrite the files, the post logic is called again to overwrite the existing files. - Changes the declaration email template to match the payslip email template to send the employee an email with a link to access the document even as a non-user. Task: 5955050
This update enhances the Belgian payroll system to better validate employees' Joint Committee and Employer Category combinations. The improvement helps ensure payroll data accuracy by identifying and warning about incorrect category assignments, reducing potential compliance and payment processing errors.
Original PR description
Task: 5973879
The spreadsheet printing functionality has been enhanced with a dedicated printing wizard that was introduced in the o_spreadsheet library. This improvement allows us to remove the previous printing hook and related print assets, resulting in cleaner and more maintainable code. Users will benefit from a more streamlined and professional printing experience when working with spreadsheets.
Original PR description
A real printing wizard was introduced in o_spreadsheet, we can now remove the `useSpreadsheetPrint` hook in odoo as well as the print asset bundle. Task: [5891329](https://www.odoo.com/web#id=5891329&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The data cleaning module now uses a single "Similarity Threshold" setting instead of two separate threshold fields, making it simpler to configure. This unified approach works the same way in both manual and automatic merge modes, reducing confusion and configuration complexity.
Original PR description
The data merge model had two separate threshold fields (merge_threshold and create_threshold) that are never used together. This change replaces them with a single field, "Similarity Threshold". Behavior: - Manual merge mode: duplicates with a similarity below the threshold are not suggested - Automatic merge mode: duplicates with a similarity above the threshold are merged automatically task-5892405
This update allows HR teams to filter job applicant offers by the specific benefits package (such as company car or charging station) after the offer is signed. Previously, this filtering capability was not available for applicant-based offers, making it difficult to manage onboarding for candidates with different benefit selections. Now when an offer is fully signed, the system automatically records which benefits package version was selected, enabling proper filtering and reporting.
Original PR description
**Version**: - master **Issue**: - For onboarding purposes, it is currently not possible to filter on the signed version for applicants. (e.g., offers with car, charging station, etc.). **Cause**: - employee_version_id is not set on applicant based offer after the offer is fully signed. **Fix**: - Recompute employee_version_id and set it on applicant based offers when it is fully signed. **Testing**: - Ensure offers still appear in recruitment as they originate from an applicant. - Ensure filtering by employee version works correctly with different benefit values. **Task-5322433**
The system now automatically tracks inventory for products sold through the Urban Piper online food delivery platform. When Urban Piper is enabled for a point of sale location, a dedicated inventory storage location is created to separately manage online orders from regular in-store sales, ensuring accurate stock levels across both channels.
Original PR description
Following this commit: - We will track the inventory for products that are sold online on urban piper side and in our pos sytem also. - As soon as urban piper is enabled for a config then a new `stock.location` is been created for that `pos.config`. - New stock.location is been set in pos.config under `Food Delivery Connector` section. We will track inventory for online order through `urbanpiper_stock_location_id` while normal orders will be tracked through location set in `Inventory` section in pos.config. task-4896303
This update improves how charges are handled when importing UBL invoices. Previously, charges on invoice lines were creating separate line items, which cluttered invoices. Now charges are automatically combined into the unit price of the original line, resulting in cleaner, more consolidated invoices that are easier to read and process.
Original PR description
Before this commit: A charge in an InvoiceLine was creating a new invoice line with the amount of the charge. After this commit: The charge is added in the price unit of the original line --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255189 Forward-Port-Of: odoo/odoo#254111
The system now allows companies to register PEPPOL numbers from any country, not just those on a predefined list. This removes geographic restrictions and makes the invoicing system more flexible for businesses operating internationally or with international partners.
Original PR description
Before this commit, only numbers on the peppol list were able to be registered. Now is possible to add numbers from other countries. Task-6033336 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This improvement makes product matching during imports more accurate and flexible. Products are now matched regardless of uppercase/lowercase differences (e.g., "Network Cable" matches "network cable"), and the system uses intelligent similarity matching instead of simple substring search to avoid incorrectly pairing unrelated products. This results in fewer import errors and better data accuracy when bringing in product information.
Original PR description
Before this commit: - Product retrieval during import relied on exact name match and substring (ilike) search. - Exact name search was case sensitive, so values like `Network Cable` would not match…
Before this commit: - Product retrieval during import relied on exact name match and substring (ilike) search. - Exact name search was case sensitive, so values like `Network Cable` would not match `Network cable`. - Substring matching could return unrelated products (e.g. `Wireless bluetooth speaker` gets matched with `Wireless bluetooth speaker battery`), leading to unrelated matches. After this commit: - Exact name search is now case insensitive, allowing matches such as `Network Cable` and `network cable`. - Substring based matching has been replaced with a similarity ratio (90%) to reduce false positives and improve matching reliability against customer database product names. Technical: - Replaced `=` with `=ilike` in the exact name search domain to make the lookup case insensitive. - Similarity ratio is computed using Python's `difflib.SequenceMatcher` on product names, with a minimum threshold of 90% to qualify as a match. - Added system parameter for configurable product name similarity threshold. task-5951469