Daily updates from Odoo
Tuesday, January 13, 2026
31 changes
5 changes
Enhancements to existing features
This update ensures invoice labels comply with Section 31 of the CGST Act, which dictates how invoices are labeled based on the type of supplies and customer status. Specifically, the label now correctly reflects whether a document contains only taxable or exempt supplies, aligning with Indian tax regulations. This change improves compliance and accuracy for our Indian users.
Original PR description
Previously, the invoice label was always displayed as “Tax Invoice” or “Invoice”. However, as per Section 31 of the CGST Act, the document label must depend on the nature of supplies and the customer type: - If the document contains only taxable supplies => “Tax Invoice” - If the document contains only exempt supplies => “Bill of Supply” - If the customer is unregistered and the document contains both taxable and exempt supplies => “Invoice-cum-Bill of Supply” - If the customer is registered and the document contains both taxable and exempt supplies, separate documents must be issued as per the law. With this commit, the invoice label is generated strictly in accordance with Section 31 of the CGST Act. In the case of a registered customer where both taxable and exempt supplies exist in a single document, the label will be printed as “Invoice”. task-5468323 Forward-Port-Of: odoo/odoo#241512
This update enhances the Odoo software's support for the Uruguayan market by adding and refining account configurations, specifically for fixed assets and related expenses. It also introduces automated depreciation support for various asset types, streamlining financial reporting within the Uruguay localization.
Original PR description
This commit enhances the Uruguay localization by adding missing accounts and updating existing ones, and by configuring Asset Models for fixed asset management. Changes: - Added and updated account.account entries for fixed assets and related expenses. - Added account.asset data to support automated depreciation for different asset types. task-5392954 Forward-Port-Of: odoo/odoo#240891
This update makes the HR Applicant model accessible to other Odoo modules. Previously, this model was isolated, limiting its functionality. This change allows for greater integration and data sharing across the Odoo system, improving overall HR workflow efficiency.
Original PR description
Export HrApplicant model so that it can be used in other modules Task-[5461729](https://www.odoo.com/odoo/5778/tasks/5461729) Enterprise PR odoo/enterprise#103402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures Odoo documents fully comply with PDF/A-3A standards, a crucial requirement for certain business processes and regulatory compliance. Previously, issues with different PDF libraries caused validation failures. This change includes fixes to decoding problems and additions to meet the stricter PDF/A-3A specifications.
Original PR description
This commit upgrades our PDF/A compliance from 3B to 3A, and fixes a few issues previously undetected due to the different PyPDF libraries we're currently supporting that made the previous PDF fails…
This commit upgrades our PDF/A compliance from 3B to 3A, and fixes a few issues previously undetected due to the different PyPDF libraries we're currently supporting that made the previous PDF fails even the 3B validation. Improvement 1: PDFA validators were previously detecting our file as 3B. Hence we update the metadata content `conformance` to `A`. Issue 2: When using `._pypdf` library, we failed the 6.1.2-2 and 6.8-1 rule even though we have implemented them on the previous version. It seems that this is caused by the `if SUBMOD...` check only ensuring it's not equal to `_pypdf2_2` (which makes it trigger for the new `_pypdf`). Hence, we reclarify the comments and fix the IF check. Issue 3: After implementing issue 2, it seems that a traceback occurs every time we're using `._pypdf` and calling the pdf write method. This is because the added characters on the header can't be decoded with `UTF-8`. Hence we change it to other greater-than-127-bytes characters that can still be decoded with `UTF-8`. (The actual character used here doesn't matter). Improvement 4: To be compliant with the new 3A rules (additional rules not there in 3B when we first implemented them), we add a minimal mark info dictionary and document structure on the PDF catalog object (`_root_object`). task-None Forward-Port-Of: odoo/odoo#243171 Forward-Port-Of: odoo/odoo#234960
This update ensures our Odoo system complies with the latest Brazilian tax regulations regarding NCM (National Commerce) codes. The changes include adding a 'DEPRECATED' marker to expiring codes and introducing new codes to accurately reflect current tax requirements. This update is crucial for accurate tax calculations and reporting in Brazil.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#104091 Forward-Port-Of: odoo/enterprise#102009
1 change
Enhancements to existing features
This update adjusts the Brazilian tax code list to comply with the latest regulatory requirements. Specifically, it adds a 'DEPRECATED' marker to expiring codes and incorporates new tax codes for Brazil. This ensures continued compliance and accurate tax reporting.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
2 changes
Enhancements to existing features
This update modifies the Brazilian tax code list to comply with the latest regulatory requirements. Specifically, it adds a 'DEPRECATED' marker to expiring codes and introduces new tax codes for Brazil. This ensures continued compliance and accurate tax reporting.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
This update improves the process of managing sender relationships within our PEPPOL integration. Instead of requiring a complete unlink, users can now automatically unregister the sender, streamlining the configuration and reducing potential data inconsistencies. This change simplifies the process for users and ensures data accuracy within the PEPPOL system.
Original PR description
Allow unregistering to sender instead of unlinking directly. task-5395262 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243125 Forward-Port-Of: odoo/odoo#239822
2 changes
Enhancements to existing features
This update modifies the NCM (National Customs) code list used in Odoo Enterprise for Brazil, aligning with the latest tax regulations. The changes include marking expiring codes as ‘DEPRECATED’ and adding new codes to ensure accurate tax reporting and compliance.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
This update allows system administrators to customize the main Odoo Enterprise home menu with a targeted message. Administrators can set a message through a configuration parameter, visible to all users, to communicate important information like scheduled maintenance. This provides a direct way to notify users about critical events.
Original PR description
Display a message on home menu based on an ir.config_parameter that can be added directly in the database by the system administrator.
The ir.config_parameter is sysadmin.message and should be a json loadable. The format shoud be something like this:
{
"type": "warning",
"replace": false,
"warning_type": "user",
"message": "`<span>A maintenance operation is planned on your server on <strong>2026-01-15</strong> between 14h and 15h</span>`"
}
Forward-Port-Of: odoo/enterprise#103752
Forward-Port-Of: odoo/enterprise#10223917 changes
Enhancements to existing features
This update enhances the Gantt view's visual representation of employee schedules. It now correctly displays partial working schedules with diagonal coloring, providing a clearer and more accurate view of employee availability and workload. This improves scheduling accuracy and reduces potential misunderstandings.
Original PR description
. Override the framework logic for cell coloring to apply diagonal coloring in cases of partially worked schedules. task-5470365
This update streamlines HR data management by consolidating view definitions for HR versions. Previously, separate views were used, but now they’ve been moved to the base HR module and inherited, simplifying maintenance and ensuring consistency across the Odoo Enterprise system. This change improves efficiency and reduces potential conflicts.
Original PR description
Since now hr_attendance needs to use almost the same list and search views for hr.version, the views are now moved to base hr and inherited. Related: https://github.com/odoo/odoo/pull/236555 Task-5189039
This update enhances the configuration of Belgian payroll data by allowing for flexible selection of ONSS categories (DIMONA and DMFA) instead of fixed codes. This change improves accuracy and compliance with Belgian regulations, particularly for employees under 18, by adding warnings for invalid category usage. The update also streamlines the calculation of required joint commission data.
Original PR description
In this commit, we introduced configurable DIMONA and DMFA categories on the employee instead of hard-coded values. The DIMONA worker type is now taken from a new “DIMONA Category” field, and the DMFA XML uses the employee’s DMFA Category instead of the fixed code 495. The Joint Commission is derived from the first 3 digits of the employee value (or 'xxx' if empty). DIMONA and DMFA categories are required only when the ONSS certificate is enabled, and a new warning is added when an invalid DMFA category is used for under-18 workers (categories 035 and 439). task-5421176
This update significantly improves the EPF Summary report, providing employees and HR with detailed information on Provident Fund (PF) and Voluntary Provident Fund (VPF) contributions. The report now generates a downloadable XLSX file with a comprehensive PF summary for each employee, ensuring accurate record-keeping and compliance.
Original PR description
This PR introduces an improved EPF Summary report, providing detailed information on employee and employer contributions to Provident Fund (PF) and Voluntary Provident Fund (VPF) accounts for a specified month or period. The report generates an XLSX file containing a comprehensive PF summary for each employee. task-4250905
This update allows staff to print visitor badges during the 'checked-in' stage of the frontdesk process, in addition to the 'planned' stage. This streamlines the visitor check-in experience and reduces the need for manual intervention. It improves efficiency and ensures visitors receive badges promptly.
Original PR description
Before: The 'Print Badge' button was only available when the visitor state was 'planned`. After: The 'Print Badge' button is now visible when the visitor state is either `planned` or `checked_in`. Task - 5382655
This update enhances the demo data for the Odoo Enterprise Mexican payroll module (l10n_mx_hr_payroll) to facilitate testing and validation. Specifically, it incorporates a realistic working schedule common in Mexican companies and supports testing the new CFDI batch generation feature, ensuring compliance with Mexican tax regulations.
Original PR description
Update the DEMO DATA so we can validate CFDI's and XML for all the PAC's and to test the new "CFDI batch generation" feature. Create a new working schedule, this schedule it's the most used in MX companies. target: 19.0 task-5239031 Forward-Port-Of: odoo/enterprise#102726 Forward-Port-Of: odoo/enterprise#100557
This update adds crucial reports for the Philippines' Computerized Book of Accounts (CBA) requirements, aligning with BIR regulations. It includes four key reports – General Ledger, Journal, and Sales/Purchase – and a new Inventory report, supporting PDF and CSV export formats for easy submission. This ensures compliance and streamlines financial reporting for Odoo Enterprise users in the Philippines.
Original PR description
# Related odoo/enterprise#103257 # Commit Messages ### [IMP] l10n_ph_reports: Add Book of Accounts to fulfill PH's CBA This commit adds the "Computerized Book of Accounts" (CBA) reports to fulfill…
# Related
odoo/enterprise#103257
# Commit Messages
### [IMP] l10n_ph_reports: Add Book of Accounts to fulfill PH's CBA
This commit adds the "Computerized Book of Accounts" (CBA) reports to
fulfill the Computerized Accounting System (CAS) requirements mandated
by the Philippines Bureau of Internal Revenue (BIR).
This includes 4* reports:
1. General Ledger
2. General Journal
3. Sales Journal
4. Purchase Journal
*The 5th report, Inventory Report, is located in `l10n_ph_reports_stock`
The BoA report primarily supports `.pdf` and `.csv` exports to fulfill
BIR requirements. BIR requires a `.dat` format for e-submission. As
there is no prescribed format, we use the subset `.csv`. We added this
as the primary export button on the reports
All Reports:
- Supports `filter_analytic_groupby`
General Ledger (GL):
- A copy of standard GL, without "Partner" and "Currency" column
General Journal:
- Akin to GL, except it shows `account.move.line` details
- Groups `account.move.line` by `account.move` by a root line. The root
line exists to make use of the "load more" function.
Sales and Purchase Journal:
- Grouped by month, Ordered by displayed name
- Custom handling of the taxes (price_include/exclude) and manual tax
override splitting
PDF:
- forces landscape printing for simplicity
- displays custom headers in `company_information` column as BIR requires:
- non-vat / vat
- company phone / mobile
- reporting period
CSV:
- Flattens any groupings into a more compact form, similar to raw data.
Technical:
- Added `res.company.l10n_ph_is_vat_registered` field for users to
control the PDF exports non-vat/vat display.
Testing:
- Every report has snapshot testing of the web view and csv export data.
- Input test data has been formulated to test key features.
task-[https://github.com/odoo-dev/enterprise/commit/45092825263b67321a135c160a70aaf6405391f5](https://odoo.com/odoo/all-tasks/4509282)
Community-odoo/odoo#232035
Co-authored-by: Nicolas Viseur <vin@odoo.com>
---
### [ADD] l10n_ph_reports_stock: Add Inventory Report to Book of Accounts to fulfill PH's CBA
CBA: Computerized Book of Accounts. Part of the requirements to fulfill
CAS (Computerized Accounting System).
This commit adds the 5th and final Book of Accounts (BoA) report:
Inventory. The report supports the custom `.csv` and `.pdf` exports like
all other BoA reports do.
Technical:
- The data is similar to /stock-report, except with only key details.
- Custom "Hide Out Of Stock" filter
Testing:
- Snapshot testing of the web view and csv export data.
- Input test data has been formulated to test key features.
task-[https://github.com/odoo-dev/enterprise/commit/45092825263b67321a135c160a70aaf6405391f5](https://odoo.com/odoo/all-tasks/4509282)
Community-odoo/odoo#232035
---
### [IMP] account_reports: support landscape printing and custom footer layout in pdf report options
- The current methods for determining when the PDF report should be
printed in landscape is insufficient and this allows custom reports to
easily force it by adding `force_landscape_printing` option in
`_custom_options_initializer()`
- It is difficult to modify the default `internal_layout` used in PDF
export. We modify `_get_layout_footer()` method to accept an optional
`options` parameter where a custom layout can be passed in via
`options['custom_display_config']['pdf_export']['internal_layout']`
- We make the `odoo.release.version` available in PDF export's
`rcontext` as it's a fairly common requirement for exported PDFs. In
particular, l10n_ph.
related task-4509282This update enhances the user experience by adding a search filter when opening records through the contact stat button. Previously, records were filtered based on action domains without a visible filter, leading to confusion. Now, users can directly see and control the search query, improving clarity and efficiency.
Original PR description
Purpose ======= Currently, when we open records of various models through the stat button from the contact form view, records are filtered based on the domain given on action, but the filter is not set so the user might find this confusing. Technical ========= Web Studio - When creating a stat button on a view using Studio, the search filter does not show if the target field is absent from the search view. Specification ============== - It adds a search filter to search the record so the user can visualize the query. - Web Studio - When creating a stat button with Studio, it will either add a search view if the model doesn't already have one, or it will add a field to the existing search view. This allows the user to set the default search using the stat button. Task-2671192
This update increases the length of partner names displayed on VoIP call forms, preventing text from being cut off. It also addresses mobile view issues, specifically preventing phone number wrapping and ensuring buttons align correctly on smaller screens. This enhances the user experience and ensures consistent display across devices.
Original PR description
[[IMP] voip: increase partner name field length + fix mobile issues](https://github.com/odoo/enterprise/pull/102876/changes/7f720734bfb0877576c1c90f87fef9288ab9d658) This commit increase the length of the `partner_id` field on the `voip.call` form view as the name gets cropped if it's long. It also makes the field in a smaller font on smaller screens. There were also some issues on the mobile view that were fixed: 1. The phone number was wrapped in a bad look when the screen is too narrow. Now, no text inside the phone field is wrapped. 2. Buttons next to the phone number were not wrapped on narrow screens , so they went beyond the screen. This commit ~~with the community PR: https://github.com/odoo/odoo/pull/241543~~ fixes it by adding an option to the phone field specifying whether we want to wrap the content of it or not. Task-5437330 ~~Community: https://github.com/odoo/odoo/pull/241543~~
This update simplifies the form used to manage document templates accessed through the Odoo interface. Previously, the form displayed unnecessary fields, creating a confusing experience. This change streamlines the form to only show relevant information, improving usability and clarity for users.
Original PR description
When opening the template properties from the editor cog menu, the standard form displays many fields that are not relevant in this context. This commit introduces a simplified form view showing only the necessary fields to improve clarity and UX. task-5428495
This update adds an extension number field to bank journals, specifically for Belgian IBANs synchronized with Codabox or Codaclean. This allows for accurate identification and import of bank statements by referencing a unique number found in the associated CODA file, streamlining the statement reconciliation process.
Original PR description
Bank journal can have the same bank account number, to be able to have a difference between them. We will add an extension number field on the journal that will be displayed only when having a synchronization with codabox or codaclean. This extension number can be found in the CODA file when the second line of the coda start with '12', which means that we have a belgian iban. With that we are able to know the journal to where we want to import the statement. task-5254158
This update adds a field to securely store sanitized IBANs for bank statements. This enhancement allows users to more effectively search for bank statements, regardless of whether the IBAN includes spaces, improving the accuracy of bank reconciliation processes.
Original PR description
This PR adds a field that is used to save the sanitized IBAN. This allows us to search for bank statements by IBAN with or without spaces. task-id: 4872851
This update enhances the process of fetching currency rates by prioritizing external providers and intelligently retrieving data. It now fetches rates in stages, starting with historical data and then utilizing specific APIs for daily or monthly updates, ensuring more accurate and timely currency conversions within the system.
Original PR description
When fetching currency rates, we fallback to the first existing rate if we didn't find any matches. Calling external providers to get missing rates first before we fallback. task-5046193
This update enhances the employee appraisal process by displaying a helpful empty search screen when no employees match a search query. This provides a clearer visual cue to the user, improving the overall user experience within the appraisal module. The change addresses a previous issue where no feedback was provided during unsuccessful searches.
Original PR description
## Issue & Reproducing steps See [community-229238](https://github.com/odoo/odoo/pull/229238) ## Purpose Display an empty search screen when a search in not successfull from the `hr_appraisal` employee selection. To display this empty search helper: - Go to appraisal app - Click on `Goal` menu - Create a new goal then click on `Save as Template` - Go back to goals - Click on `Open Library` button - Select the created template and click on `Continue` - Run a search with no result to see the helper appear. [community-229238](https://github.com/odoo/odoo/pull/229238) [task-4879557](https://www.odoo.com/odoo/action-4043/4879557)
This update removes outdated jQuery code from the hr_contract_salary module, streamlining the application and potentially improving performance. This change aligns with recent updates to Odoo's interaction framework, enhancing the overall user experience. The update was driven by a task to modernize the module's codebase.
Original PR description
This PR replaces all the Jquery code left in hr_contract_salary with plain JS. It follows this 87f9ff0a40694ae4b755da3dcf819a517aa9560d in which the public widgets have been replaced with interactions. task-5187485
This update enhances the Odoo search view by allowing related filters to be grouped together, reducing clutter and improving the user experience. The change collapses multiple filter options into a single, parent filter, making it easier to find specific search criteria. This improves usability and efficiency for users.
Original PR description
In some search views the list of filters can be huge which impairs the readability.
This commit adds support for inner filters in `<search/>` allowing them to be collapsed into a parent filter, reducing the number of visible entries in the search view.
The logic for date filters was partially merged with the one for inner filters since the syntax is the same.
It can be used inside a search arch as such:
```xml
<search>
<filter string="Priority">
<filter string="Urgent" domain="[('priority', '=', 3)]" name="urgent_priority"/>
<filter string="High" domain="[('priority', '=', 2)]" name="high_priority"/>
<filter string="Medium " domain="[('priority', '=', 1)]" name="medium_priority"/>
<filter string="Low" domain="[('priority', '=', 0)]" name="low_priority"/>
</filter>
</search>
```
task-5232012This pull request makes small visual updates to the DMFA views within the HR payroll module. These changes focus on improving the overall look and feel, making the interface more user-friendly and easier to navigate. This enhances the employee experience when managing digital certificates.
Original PR description
Small visual changes to forms and list views to improve the look and feel of the DMFA views. task-5166541
1 change
Enhancements to existing features
This update ensures our Brazilian tax compliance by incorporating the latest NCM (National Customs) code requirements. The changes include marking expiring codes with 'DEPRECATED' and adding new codes to accurately reflect current tax regulations. This update is crucial for accurate financial reporting and avoiding potential tax issues.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
2 changes
Enhancements to existing features
This update incorporates the latest Brazilian tax NCM (National Commerce) code requirements. The changes include appending 'DEPRECATED' to expiring codes and adding new codes to ensure accurate tax reporting for Brazilian businesses using Odoo Enterprise. This ensures compliance with current regulations.
Original PR description
This **PR** updates the NCM code list as per latest requirement. It appends `DEPRECATED` at the end of expires codes. Also it introduces a few new codes. **task**-5381617 Forward-Port-Of: odoo/enterprise#102009
This update adds two missing Unit of Measure (UoM) types – Minute (MIN) and Kilowatt hour (KWH) – required by UNECE Recommendation No. 20 for Peppol electronic invoices. Currently, Odoo defaulted to a generic 'Units' code, but this change ensures proper compliance with invoicing standards and supports localization modules that need these specific UoMs.
Original PR description
**Issue:** 2 UoM that is in the UNECE Recommendation No.20 for Peppol don't exist in Odoo: - MIN: Minute - KWH: Kilowatt hour Even if they are created manually, they are not used in the UBL/CII electronic invoices. Instead, the default code (i.e. "C62" for "Units" is used). Some localization modules create the "Kilowatt hour" UoM as they need it. (l10n_cl and l10n_tr_nilvera) So it's better to have a "generic" one available for every module. opw-5269119 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238342
1 change
Enhancements to existing features
This update addresses a technical issue related to how Odoo handles record deletions, specifically concerning cascade deletes in the database. By proactively checking for related records, the system avoids errors and improves performance when dealing with removed messages, notifications, or activities. This ensures a more stable and reliable user experience.
Original PR description
In order to be defensive we have to check records linked to messages, notifications or activities exist before checking related information like display_name, or even to skip them in various flows. This happens notably due to DB-level cascade deletion that does not remove side records linked through (model, res_id) pairs. It implies some additional exist queries. Task-5138556 Forward-Port-Of: odoo/enterprise#101185