Daily updates from Odoo
Navigate
Branch
Saturday, February 14, 2026
47 changes
2 changes
Enhancements to existing features
This update improves the generation of XML invoices for HR EDI reporting by streamlining the process and adding more robust testing. Specifically, the system now handles multiple tax calculations more accurately and includes new tests to ensure data integrity, aligning with evolving API standards for fiscalization queries.
Original PR description
- Improving the ubl_hr method chain to include less overrides in favor of extensions - Adding proper handling of multiple tax total and tax category nodes for hrextac - Refining docstrings and comments for ubl_hr - Adding a test with multiple tax types - Adding a test for account_edi_ubl_cii_tax_extension integration - Adjusting MER methods to correspond to API changes: fiscalization queries are now only available for own documents task-none --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247339
Resolved issues and error corrections
This update resolves an issue where rental schedules were limiting the number of products displayed in group views. The fix adjusts a technical limit within the Odoo system to allow for a greater number of products to be included in rental schedule groups, ensuring accurate representation of rental products. This improves the usability of the rental scheduling feature.
Original PR description
Versions -------- - 19.0+ Steps ----- 1. Create more than 30 rental products. 2. Override or raise `group_limit` on the `sale_renting.sale_order_line_gantt_schedule` view to 40 (>= 30). 3. Open the rental schedule and group by products. Issue ----- Only 21 products expand even when the limit is increased. Cause ----- Commit 9010416881857c5b810a56e74db04a5fcd869f63 added a hard limit to the search expanding product groups, based on the gantt default limit of 20. When the gantt limit is increased, the Python limit remains. Solution -------- Increase the Python-side limit to what it was before 9010416881857c5b810a56e74db04a5fcd869f63, i.e. 80, which is the default limit at the action level. opw-5887837 Forward-Port-Of: odoo/enterprise#107010
1 change
Resolved issues and error corrections
This update significantly improves the performance of the MPS report by reducing memory usage when processing large production schedules. The changes optimize data retrieval and minimize unnecessary data loading, resulting in faster report generation and preventing potential crashes. This enhancement ensures smoother operation for users working with extensive production data.
Original PR description
Problem: When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error. Solution: We…
Problem:
When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error.
Solution:
We will fetch only the necessary fields to reduce queries and memory usage and set prefetch_fields=False to further reduce memory usage.
Benchmarks:
Run locally on a dupe of customer's db.
Time/queries measured by requests to /get_mps_view_state Memory measured using memray on method get_production_schedule_view_state()
<table>
<tr>
<th rowspan="2"># of Production Schedules</th>
<th colspan="3">Before</th>
<th colspan="3">After</th>
</tr>
<tr>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
</tr>
<tr>
<td>20</td>
<td>22.846s</td>
<td>1,379</td>
<td>882.0MB</td>
<td>8.046s</td>
<td>1,180</td>
<td>103.4MB</td>
</tr>
<tr>
<td>300</td>
<td>41.098s</td>
<td>6,297</td>
<td>1.0GB</td>
<td>43.694s</td>
<td>5,732</td>
<td>363.5MB</td>
</tr>
<tr>
<td>1000</td>
<td>N/A (MemoryError)</td>
<td>N/A (MemoryError)</td>
<td>>2GB</td>
<td>88.416s</td>
<td>22,629</td>
<td>1.1GB</td>
</tr>
</table>
Average memory usage reduction: 75%
opw-5225472
Forward-Port-Of: odoo/enterprise#1063923 changes
Enhancements to existing features
This update improves the generation of XML files for HR tax reporting (l10n_hr_edi) by streamlining processes and adding more robust testing. Specifically, the system now handles multiple tax totals and categories correctly, and includes new tests to ensure accurate invoice exemption processing and fiscalization queries are limited to own documents.
Original PR description
- Improving the ubl_hr method chain to include less overrides in favor of extensions - Adding proper handling of multiple tax total and tax category nodes for hrextac - Refining docstrings and comments for ubl_hr - Adding a test with multiple tax types - Adding a test for account_edi_ubl_cii_tax_extension integration - Adjusting MER methods to correspond to API changes: fiscalization queries are now only available for own documents task-none --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247339
Resolved issues and error corrections
This update addresses an issue where invoices imported through the account_edi_ubl_cii module were incorrectly processing zero values for certain line amounts. The change ensures that these zero values are simply ignored during import, preventing potential errors and ensuring data accuracy. This improves the reliability of invoice processing.
Original PR description
Zero LineExtensionAmount have no purpose after import so they can simply be ignored. taks-5881008 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248732 Forward-Port-Of: odoo/odoo#245862
This update significantly improves the performance of the MPS report by reducing memory usage when processing large production schedules. The changes optimize data retrieval and minimize unnecessary data fetching, resulting in faster report generation and preventing potential errors. This enhancement ensures a smoother experience for users generating these reports.
Original PR description
Problem: When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error. Solution: We…
Problem:
When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error.
Solution:
We will fetch only the necessary fields to reduce queries and memory usage and set prefetch_fields=False to further reduce memory usage.
Benchmarks:
Run locally on a dupe of customer's db.
Time/queries measured by requests to /get_mps_view_state Memory measured using memray on method get_production_schedule_view_state()
<table>
<tr>
<th rowspan="2"># of Production Schedules</th>
<th colspan="3">Before</th>
<th colspan="3">After</th>
</tr>
<tr>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
</tr>
<tr>
<td>20</td>
<td>22.846s</td>
<td>1,379</td>
<td>882.0MB</td>
<td>8.046s</td>
<td>1,180</td>
<td>103.4MB</td>
</tr>
<tr>
<td>300</td>
<td>41.098s</td>
<td>6,297</td>
<td>1.0GB</td>
<td>43.694s</td>
<td>5,732</td>
<td>363.5MB</td>
</tr>
<tr>
<td>1000</td>
<td>N/A (MemoryError)</td>
<td>N/A (MemoryError)</td>
<td>>2GB</td>
<td>88.416s</td>
<td>22,629</td>
<td>1.1GB</td>
</tr>
</table>
Average memory usage reduction: 75%
opw-5225472
Forward-Port-Of: odoo/enterprise#10639237 changes
New functionality added to Odoo
This update ensures Odoo's Point of Sale system in Guatemala complies with local regulations. It automatically sets a default customer, prevents invoices for unidentified customers exceeding a set threshold, and applies company-specific tax phrases, ensuring successful submission to the Guatemalan tax authority (SAT).
Original PR description
Purpose: This module links the `point_of_sale` module with the `l10n_gt_edi` module. It is required in Guatemala to comply with Guatemalan Point of Sale legislation. Before this commit: - POS orders…
Purpose: This module links the `point_of_sale` module with the `l10n_gt_edi` module. It is required in Guatemala to comply with Guatemalan Point of Sale legislation. Before this commit: - POS orders had no default customer. - Invoices generated for unidentified customers exceeding the legal threshold, leading to SAT rejections after submission. - GT Phrases configured on company were missing on the invoices generated through POS causing the electronic document to be rejected by SAT. After this commit: - Consumidor Final is set as the default customer on POS orders. - POS invoices cannot be generated for unidentified customers when the total exceeds the legal threshold (currently Q2500). - GT phrases configured on the company are now applied to POS invoices, ensuring valid electronic document submission to SAT. Technical Details: - Added a configurable legal threshold field on POS configuration. - Added validation to block invoicing when an unidentified customer exceeds the configured threshold. - Added a missing `super()` call in `l10n_mx_edi_pos` to ensure proper method chaining when multiple POS localizations are installed. related PR https://github.com/odoo/odoo/pull/242985 task-4393614 Forward-Port-Of: odoo/enterprise#103767
Enhancements to existing features
This update simplifies timesheet reporting by replacing the traditional timer header with key performance indicators (KPIs) like time worked and billable hours. The display of these KPIs is now dependent on the 'Sales' module being installed, providing a more streamlined view of time tracking data.
Original PR description
This commit removes the timer header from timesheets globally. Instead, it is replaced with kpis (time worked, time billable and billing rate, computed over the month). When `timesheet_grid` is installed alone, nothing is displayed. As soon as `sales` is installed, the hours/days worked and hours/days billable indicators are displayed in the header in the grid, list and kanban view. If the billing rate indicator is enabled and configured on the user, the billing rate is also displayed. Finally, if the leaderboard is activated in the settings, the leaderboard will be shown on the right side of the header. The kpis are computed based on the UOM configured on the company, similar to the timesheet amounts. A breadcrumb opening the assistant is visible on desktop. Community PR: https://github.com/odoo/odoo/pull/245913 Upgrade PR: https://github.com/odoo/upgrade/pull/9364 task-5180327
This update simplifies UTM tracking by standardizing source data and using references instead of individual source records. This improves reporting accuracy and clarity, allowing for more effective marketing analysis. The changes ensure consistent tracking across various Odoo modules.
Original PR description
PURPOSE The way we currently use the UTM trackers (aka source/medium/campaign) does not comply with the industry standards, leading to confusion and globally unclear or not usable reporting on UTM…
PURPOSE
The way we currently use the UTM trackers (aka source/medium/campaign) does not
comply with the industry standards, leading to confusion and globally unclear
or not usable reporting on UTM data.
SPECS
This aims at modifying UTM assignation to improve the important information
relayed by UTM trackers, notably in reporting. This comes with two main changes
in UTM handling:
Generalize the UTM source and retire "utm.source.mixin"
Every time a social.post, a mass.mailing, a res.users, and many more records
are created, we create a matching utm.source record through the
utm.source.mixin and use that source in various flows.
This essentially means that we have hundreds, sometimes thousands of different
sources, making reporting useless as you cannot group by source and get a
meaningful graph of how your leads are generated.
UTM sources will now become mostly generic records ("Mass Mailing",
"LinkedIn", ...) allowing get a limited number of static sources.
Introduce UTM reference
As we remove the UTM mixin and thus the creation of sources, this has a number
of drawbacks, the most notable one being the loss of statistics that were
previously retrieved using the source record.
For example, you could see how many crm.leads a certain mass.mailing or a
certain social.post generated, which is useful in terms of tracking what
marketing practices work and how to improve your content. It's also a great
strength of the Odoo ecosystem to have links and inter-connected apps.
This is resolved by introducing a fourth field on the utm.mixin: utm_reference.
That new field serves the purpose of the former utm.source.mixin in a much
simpler way as it's a reference field storing model,id and doesn't require an
extra model.
Implement the above in all functional modules
To ease the tracking of the changes, functional modules are gradually modified
in separate commits, with additional specificities for some of them.
EXAMPLE
Let's take a real example: a mass.mailing with a button to purchase something.
The button is clicked and a client buys a product from the store with the UTM
values of that mass.mailing's link trackers.
The resulting sale order's UTM trackers will look like the following:
Before:
- UTM Campaign: Black Friday Sales
- UTM Medium: utm.utm_medium_email
- UTM Source: "Black Frid... (Mailing Created on 2024-04-14)"
After:
- UTM Campaign: Black Friday Sales
- UTM Medium: utm.utm_medium_email
- UTM Source: utm.utm_source_mailing
- UTM Reference: mailing.mailing,42
Task-3330036This update simplifies document management within the Enterprise version of Odoo by adding the ability to move documents to folders and add/remove tags through server actions. Previously, these operations were not easily accessible, making it harder for users to organize their documents effectively. This change enhances usability and streamlines document workflows.
Original PR description
**Purpose:** Performing tag operations or moving documents to a folder via server actions was not intuitive for users. **Specifications:** - Add the following fields in `documents_account_record_create`: - Move to Folder - Add Tags - Remove Tags Task-5384414
This update improves the export of Spanish tax reports (modelo 347) to comply with recent regulations outlined in BOE-A-2025-25390. The changes address a requirement to include subsidy numbers, which are currently populated with six zeros as a placeholder. This ensures accurate reporting for Spanish tax filings.
Original PR description
reference: https://www.boe.es/buscar/doc.php?id=BOE-A-2025-25390 considering the modelo 347 As we do not have anything for the subsidy number, we just put 6 0s. opw-5926624 Forward-Port-Of: odoo/enterprise#107125
This update allows child companies using a shared journal to access and synchronize documents from their parent company's folders. Previously, document settings were limited to the main company; now, the system intelligently manages company access for shared accounting documents, ensuring data consistency across the organization. This simplifies document management for multi-company setups.
Original PR description
[IMP] documents(,_account): access parent company folders from branches Enable child companies to use accounting document synchronization folders (`documents.account.folder.setting`) of their parents…
[IMP] documents(,_account): access parent company folders from branches Enable child companies to use accounting document synchronization folders (`documents.account.folder.setting`) of their parents when sharing the same journal: - Previously the document synchronization setting (documents.account.folder.setting) was only applicable to the configured company, now it is also applicable to children companies. This enables children companies sharing a common journal with their parent to synchronize documents in the Document App. To support that feature, parent company folders (of the settings) are now visible to child companies through overridden `env_companies_access` logic. - Previously when uploading or moving a document to an account synchronization folder made the document inherit from the folder company regardless of the selected company. Now, we use the active company (if it is a child of the related account setting company) as the company of the uploaded or moved document (including when using a server action like "Vendor Bill"). This allows having a parent company folder shared with child companies while preserving the company of the document we're dealing with. - Previously only the company root folder were protected against modification from a non-manager user. We now extend that to folders used for account document synchronization (documents.account.folder.setting). For that we create a new searchable field is_protected that replaces the former condition in the code and record rules. That field and related methods are overridden in documents_account to add the new behavior. - We have also modified the account setting view (actually the fields domain in the model) to improve the company consistency between the different fields: the journal company and the folder company (except for folder without a company) must be the same as the company setting. Co-authored-by: Pierre-Yves Dufays <pydu@odoo.com> Task-5363821
This update streamlines the management of work entries and time off requests within Odoo Enterprise. The changes enhance the user experience and improve the accuracy of time tracking, leading to better workforce planning and reporting. This is an important improvement for HR and operational teams.
Resolved issues and error corrections
This update stops Odoo from running OCR on split expense documents, which previously triggered costly, paid requests for every split. This is especially important when automatic digitization is enabled, preventing unexpected charges for users. The change ensures more efficient use of IAP credits.
Original PR description
OCR should only be performed on the original document. Enabling it on splits leads to redundant OCR requests and unnecessary IAP credit consumption. This is particularly important when automatic digitization is enabled, as it triggers a paid request for every split generated, leading to unexpected costs for the user. opw-[5644869](https://www.odoo.com/odoo/unassigned-tasks/5644869) Forward-Port-Of: odoo/enterprise#105756
This update prevents users from accidentally sending WhatsApp messages with default sample text. The composer now displays placeholders for free text fields, ensuring users input their own content and avoids unintended message delivery. This improves the overall user experience and data accuracy within the WhatsApp integration.
Original PR description
Purpose: Prevent users from unintentionally sending WhatsApp messages with unreplaced sample values, such as 'Welcome to EventName at City'. In the WhatsApp composer, these sample values are intended for template preview only and not for actual message delivery. Specifications: Do not prefill free text fields in the WhatsApp composer with sample values in manual flows. Instead, display sample values as placeholders. If the user fails to enter a value, the demo value will be used. For automated actions, the demo value will be used by default. Task-4126375
This update improves the AI chat experience by allowing users to customize prompts as buttons and access model fields for more sophisticated AI interactions. It separates button titles from actual prompts and introduces the ability to use `/field` for richer prompts, enhancing usability and functionality.
Original PR description
Before this PR, users could add default prompts to act as quick action buttons when opening the AI chat channel from the AI systray button. However: - These prompts had to be small, otherwise, there…
Before this PR, users could add default prompts to act as quick action buttons when opening the AI chat channel from the AI systray button. However:
- These prompts had to be small, otherwise, there would be UI problems because the prompts were used as titles for the buttons.
- Posting large prompts to the chat channel doesn't provide the best user experience.
- Prompts were just text which prevented users from accessing fields of models to write more sophisticated prompts.
- To fix this, this commit does 3 things:
- Separate between the text appearing on the default prompt buttons and the actual prompts sent to the AI when these buttons are clicked which solves the UI problem when using large prompts.
- When the default prompt button is clicked, the button title will be posted to the chat channel. Yet, the actual prompt defined on that button will be sent to the AI instead of the button title.
- Allow users to use `/field` for AI default prompts to give them the ability to write more sophisticated prompts that
can access fields of models. Users would be able to access fields of the model that is defined on the AI composer (if one is defined). In order to be able to do that, the field `focused_model_ids` is changed into `Many2one` field so that the composer is tied to only 1 model.
Misc:
- Move some utils from the `ai_fields` module into the `ai` module. The logic defined in `tools.py` in `ai_fields` is now used in the `ai` module. So, the logic is moved into the `ai` module as it is the base for other ai related modules.
- Previously, all the `ai.prompt.button` records were created inside the `ai` app. The `_search` method was overridden to filter out prompt buttons whose modules weren't installed. This was done to avoid creating multiple small bridge modules. However, The optimal solution is to create bridge modules and add the records of `ai.prompt.button` inside the corresponding modules.
task-5153846This update fixes an issue where a distracting helper element remained visible in the bank reconciliation journal when there were no entries. By hiding this element when there's no data, the view is now cleaner and more user-friendly, particularly on mobile devices. This improves the overall user experience.
Original PR description
Before this commit, in the bank reconciliation journal, the no-content helper remained visible when the quick-create view was opened and there were 0 entries. This was unexpected behavior and caused overlapping issues, especially on mobile views. With this commit, the no-content helper is hidden whenever the quick-create view is open and there are 0 entries. task-5470591 Forward-Port-Of: odoo/enterprise#104406
This update resolves an issue where guest users purchasing subscriptions would experience payment failures due to Odoo attempting to archive their accounts. The fix ensures guest customers are no longer archived when linked to a subscription, allowing successful purchases. This improves the eCommerce subscription experience for all users.
Original PR description
When purchasing a subscription from the eCommerce as a guest user, the payment fails because Odoo attempts to archive the subscription customer, which causes issues. To fix this, guest customers are no longer archived when they are linked to a subscription. opw-5475479 Forward-Port-Of: odoo/enterprise#103708
This update resolves an issue where automated tests were failing due to the SEPA module attempting to install itself during test execution. The fix disables automatic module installation during testing, preventing database changes and ensuring consistent test results. This improves the reliability of our automated testing process.
Original PR description
**PROBLEM** https://github.com/odoo/enterprise/pull/106033 PR above fixes the auto install of the sepa module when loading a chart of account of some country. However, installing modules during tests is not allowed (it commits real transaction to the db). It didn't occur during the "daily" runbot because they start the tests with all modules installed (sepa module included). **REPRO STEPS** 1. On a db without the sepa module installed, run the test function .test_bank_account_code_prefix (in account module). 2. The test will fail because it load a chart of account and then try to install the sepa module. **FIX** Deactivate the auto install when running tests. runbot-238921 Forward-Port-Of: odoo/enterprise#107102
This update fixes a restriction in the Zengin file import process, allowing a wider range of characters to be used. Previously, only specific Japanese characters were permitted, leading to import failures for standard ASCII characters like hyphens. This change ensures all valid Zengin files can be imported correctly.
Original PR description
Before this commit, the Zengin file import validation was permitting only digits, spaces, and half-width Katakana characters. This limitation caused valid files to fail validation if they contained standard ASCII characters, such as the standard hyphen (which differs from the Katakana prolonged sound mark) or alphanumeric text. This commit updates the validation regex to support the full range of characters allowed by the Zengin specification. The allowed character set has been expanded to include: - Uppercase alphanumeric characters (A-Z, 0-9) - Standard symbols (e.g., -, ., /, (, ), etc.) Ref: https://bqa.smbc.co.jp/faq/show/2473?site_domain=web21lite task-5928087 Forward-Port-Of: odoo/enterprise#107007
This update corrects a problem where special characters (like accents or accented letters) were not properly encoded in the XML files generated for DIAN invoices. This ensures invoices are correctly submitted to the DIAN tax authority, preventing potential processing errors and compliance issues. The fix was triggered by a test case involving partners with names containing 'stress' or 'ñ'.
Original PR description
Some characters are not well encoded in dian xml Steps: - Activate the DIAN Demo Mode - Create a partner that has a "stress" or a "ñ" in their address - Create and confirm an invoice for partner - Open send and print wizard and select 'email' and 'dian' - Unzip the generated zip file and open the xml file -> Characters are wrongly encoded in the embedded xml opw-5883880 Forward-Port-Of: odoo/enterprise#107009
This update fixes an issue where certain mandatory data was missing from German tax reports after a recent layout change. The team has restored the necessary values to ensure accurate and compliant tax report exports. This ensures businesses using the German tax reporting functionality receive complete and reliable reports.
Original PR description
After the change in the german tax report layout, we incorrectly removed some values from the report export. Add missing values back into the report. original commit: https://github.com/odoo/enterprise/pull/97486/changes/0c579c824b1bf2eb643d2314b38d108cf72139c6 opw-5481368 Forward-Port-Of: odoo/enterprise#106878
This update corrects a bug that occurred when processing refunds with global discounts. Previously, the system incorrectly flagged refunds as exceeding the original order total. Now, the refund calculation accurately considers discounts, ensuring accurate refund processing and preventing potential errors.
Original PR description
Before this commit, when refunding an order with global discounts, the refund total was compared against the original order total without considering the discounts. While the reversed discount line would be added to the refund, the system could incorrectly flag the refund as exceeding the original order total. opw-5492686 Forward-Port-Of: odoo/enterprise#107249 Forward-Port-Of: odoo/enterprise#105631
This update corrects an issue where assets incorrectly appeared in depreciation reports after being disposed of. The fix ensures the asset's disposal date aligns with the actual disposal date, resolving a discrepancy caused by lingering depreciation moves. This improves the reliability of financial reporting.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Audit Trail" - Go to "Accounting / Accounting / Management / Assets" - Create an asset: * Original Value: [any] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Audit Trail" - Go to "Accounting / Accounting / Management / Assets" - Create an asset: * Original Value: [any] * Acquisition Date: [in the past] (e.g. 01/01/2025) * Duration: [at least until today] (e.g. 36 Months) * Depreciation Account: [any] * Expense Account: [any] - Confirm the asset - Modify Depreciation: * Action: Dispose * Date: [in the past] (e.g. 30/10/2025) * Loss Account: [any] - Dispose - Go to "Accounting / Reporting / Management / Depreciation Schedule" - Filter on a period after the disposal date **Issue:** The asset appears in the selected period even if it has already been disposed. **Cause:** There are posted depreciation moves that have a date after the disposal date. These moves should be deleted but the Audit Trail feature prevents it. These moves are cancelled instead. However, the disposal date computed on the asset is taking the max date from all the depreciation moves. Even the cancelled ones ; leading to a disposal date different than the one entered. opw-5225749 Forward-Port-Of: odoo/enterprise#107028
This update fixes errors in how Hong Kong payroll taxes are calculated, specifically preventing incorrect deductions for ERMPF and ensuring IRD reports accurately exclude rental allowances. These changes ensure compliance with Hong Kong tax regulations and improve the accuracy of financial reporting.
Original PR description
Fixes two issues related to computations; The taxable salary wrongly deduce the ERMPF which it should not. in the IRD reports, the total income includes the rental allowances, which is wrong according to their specs. task-5353781 Forward-Port-Of: odoo/enterprise#107280 Forward-Port-Of: odoo/enterprise#100842
This update fixes an issue where the dark mode wasn't correctly applied to the account search dialog within the Enterprise module. The change ensures a consistent dark mode experience for users, improving usability and visual appeal. This enhancement aligns with our commitment to providing a modern and accessible user interface.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/e3dec031033eeefb2b2271be6b0b6fbda3cf5bf0 the dark mode was not rightly supported. task-5932352 Forward-Port-Of: odoo/enterprise#107245
This update corrects a previous issue where importing journal items onto archived accounts would inadvertently create duplicate accounts. Now, the import process correctly links to the existing archived account, and an error is triggered during confirmation to maintain data accuracy. This ensures data integrity and avoids potential accounting discrepancies.
Original PR description
Allow importing journal items on archived accounts without silently creating duplicate accounts. Odoo previously bypassed the uniqueness constraint on account codes when the target account was archived. Now, the import process links to the existing archived account instead of creating a new one. An error will still be raised during the confirmation of the journal entries to ensure data integrity task-5417765 Forward-Port-Of: odoo/enterprise#106962
This update resolves an issue preventing users from modifying POS Delivery Orders (PDIs) when a POS session was open. Now, users can create and modify PDIs regardless of whether there are active orders, improving workflow flexibility. This change ensures a smoother user experience for managing deliveries.
Original PR description
Steps to reproduce : 1. Open a POS session 2. Create a pdis with all PoS 3. An error is raised So now, when we creating a new pdis or when there is no ongoing orders in this pdis, we allow to modify it. But if there is ongoing orders, user cannot. task : 5881587 Forward-Port-Of: odoo/enterprise#105736
This update resolves a technical issue that prevented users from grouping accounts by their status within the Chart of Accounts view. The fix addresses a problem related to how the system constructs SQL queries, ensuring the reporting functionality works correctly. This improves the accuracy and usability of account reporting.
Original PR description
When grouping by the ``Status (audit_status)`` field in the Chart of Accounts view, A traceback will appear.
Steps to reproduce the error:
- Install ``Accounting`` module
- Go to Accounting > Configuration > Chart of Accounts
- Group By: Status (audit_status) field
Traceback:
```py
psycopg2.errors.SyntaxError: non-integer constant in ORDER BY
LINE 1: ..."."res_company_id" IN (1)) GROUP BY NULL ORDER BY NULL ASC ...
```
https://github.com/odoo/enterprise/blob/999880daae7495fb049afafe9098bd45ee8c9d4c/account_reports/models/account.py#L164-L168
In the main view of ``acount.account``, ``working_file_id`` is not available in the context,
So, ``working_file`` becomes False and ``status_query`` will be empty, and it returns ``SQL("NULL")``.
So, ordering by NULL leads to the above traceback.
sentry-7250293611
Forward-Port-Of: odoo/enterprise#106873This update fixes an issue where users were incorrectly redirected from the Product Catalog back to the Manufacturing Order form when navigating from the Shop Floor. The back button has been renamed to ‘Back to Shop Floor’ to ensure users are correctly returned to the intended location, improving usability.
Original PR description
Before this commit: ==================== When opening the product catalog from shop floor, the Back button is labeled “Back to Production” and navigates the users to Manufacturing Order(MO) form view…
Before this commit: ==================== When opening the product catalog from shop floor, the Back button is labeled “Back to Production” and navigates the users to Manufacturing Order(MO) form view instead of returning to Shop Floor. Steps to Reproduce: ==================== 1. Install `mrp_workorder` module. 2. Create a MO → Open it in `ShopFloor` → Open the Product Catalog to add a component to the MO. 3. Click on `Back to Production`. It will redirect to MO form view. Cause of the issue: ==================== The `backToQuotation` method in `ProductCatalogKanbanController` redirects the user back using breadcrumbs, and when no breadcrumbs exist, it falls back to opening the form view. Since the catalog is opened from the Shop Floor without any breadcrumbs, the user is always redirected to the MO form view. After this commit:- ==================== These changes rename the back button to `Back to Shop Floor` and ensure it redirects users to the Shop Floor when the catalog is opened from there. TaskID-5355924 Forward-Port-Of: odoo/enterprise#101331
This update ensures salary configuration personal information is automatically populated when creating contracts from templates, regardless of whether the employee is a new applicant or an existing one. It now uses the employee's most recent version data, resolving a previous issue where template-based offers didn't inherit employee details. This streamlines the contract creation process and improves data accuracy.
Original PR description
The personal informations in the salary config is prefilled using the version selected in the offer. When making a new offert for an already employed person, the default version is the last active version, the address and other personal info are already set on that version and the salary has the last up-to-date data. But when selecting a contract template in an offer, the version does not have the personal info from the employee (as it's a template). In this commit, we force to use the employee itself (from the active version of the employee, or the employee linked to the contract template copy - created during the offer creation). may it be an applicant or an existing employee, when an offer is generated, an employee is created (or re-used) and set on the contract template. So it works in every case. Taks-5162703 Forward-Port-Of: odoo/enterprise#105821 Forward-Port-Of: odoo/enterprise#99908
This update corrects a display issue where the product grouping filter reappeared after removing it from the rental schedule gantt view. The fix removes a conflicting default setting, ensuring the gantt view behaves as expected and provides a consistent user experience. This improves the usability of rental scheduling.
Original PR description
Versions -------- - 19.0+ Steps ----- 1. Install the Rental and Inventory apps. 2. Go to the rental schedule. 3. Observe the gantt view is grouped by product by default. 4. Remove the product groupby…
Versions -------- - 19.0+ Steps ----- 1. Install the Rental and Inventory apps. 2. Go to the rental schedule. 3. Observe the gantt view is grouped by product by default. 4. Remove the product groupby filter. Issue ----- The product groupby filter reappears. Cause ----- The base gantt view defines `default_group` as product. Additionally, the `sale_stock_renting` module overrides the `sale_renting.action_rental_order_schedule` action to add two default groupby filters: `search_default_groupby_product` and `search_default_groupby_reserved_lot`. This creates conflicting defaults: one from the gantt view directly (groupby product) and another from the context (groupby product and reserved lot). Since lots are disabled by default, the lot groupby filter is ignored. When removing the product filter, the framework falls back to `default_group` and reactivates the product groupby filter. Solution -------- Remove the `default_group` parameter from the gantt view. Ensure all actions using the gantt view define their own defaults via context. opw-5887837 Forward-Port-Of: odoo/enterprise#107008
This update corrects a discrepancy in the Belgian payroll system by incorporating the latest car ATN (Auto-Territoriaal Nummer) tax rates up to 2026. This ensures accurate tax calculations for employees using company vehicles in Belgium, complying with current tax regulations.
Original PR description
TaskID: 5932573 Forward-Port-Of: odoo/enterprise#107237
This update addresses a problem with our report testing process related to a temporary build environment (faketime). The fix skips tests specifically for this environment, ensuring reports continue to function correctly. Future versions of Odoo will have a more robust solution.
Original PR description
Faketime doesn't integrate well with our current version of the report date filter. JS date is not frozen, so the filter misbehaves. It's working OK for all other builds. Future versions (19.2+) will probably have another version of the filter which should have a different implementation, solving the problem in another way. Reworked and backported from: odoo/enterprise#101689 Runbot error [link](https://runbot.odoo.com/odoo/error/234624) runbot-234624 Forward-Port-Of: odoo/enterprise#107186 Forward-Port-Of: odoo/enterprise#106172
This update corrects a technical issue where tests were unintentionally running twice, impacting system performance. The fix ensures tests are executed only once, streamlining the development process and improving overall system stability. This change does not affect any business functionality.
Original PR description
Forward-Port-Of: odoo/enterprise#106911
This update resolves a problem where bank amount adjustments weren't calculating correctly. The fix ensures that adjustments are applied using the correct currency (amount currency) rather than the balance, resulting in more accurate reconciliation reports. This improves the reliability of financial data.
Original PR description
In this commit: We broke the way the apply amount work, this commit will solve that. For the apply full amount, we modified the field fetch by fetchReconciledLines and also the substraction of the amount currency to use the amount currency and not the balance For the partial, keep it like before we actually take the value of the suspense so it's ok. opw-5925046 Forward-Port-Of: odoo/enterprise#107377
This update fixes an issue where credit notes were displaying negative tax amounts in the tax totals widget. The fix ensures accurate tax calculations and reporting for Brazilian credit notes, preventing potential discrepancies in financial statements. This improves the reliability of tax reporting for BR companies.
Original PR description
Currently, when computing taxes for a credit note, the system will show the included tax as negative in the tax totals widget Steps to reproduce: - Setup a BR Company - Setup a product requiring tax ICMS included in price - Create a credit note with the product - Compute taxes Issue: In tax totals widget the tax amount will be reported as negative, even if the tax line balance is correct. opw-5866180 Forward-Port-Of: odoo/enterprise#107177 Forward-Port-Of: odoo/enterprise#106579
This update corrects a discrepancy in the expected checksum for EU VAT compliance reporting. It's a necessary adjustment following a recent fix in the Odoo community version (odoo/odoo#248416). This ensures accurate VAT reporting and avoids potential compliance issues.
Original PR description
This commit simply updates the expected scale checksum after the fix in the community PR odoo/odoo#248416. Forward-Port-Of: odoo/enterprise#107352 Forward-Port-Of: odoo/enterprise#107246
This update resolves a misleading warning that appeared in the Belgian tax report when negative values were generated from carryover lines. The fix ensures that carryover lines correctly produce positive values, eliminating the inaccurate warning and improving report accuracy.
Original PR description
The Belgian tax report was displaying a warning when a negative amount originated from all the lines even from carryover ones. This warning was misleading, as carryover lines are not supposed to generate a declared negative value. task-5411005 Forward-Port-Of: odoo/enterprise#103046
This update fixes an issue where invoices sent to DIAN were incorrectly flagged with a warning if the invoice date was within a specific range. The change adjusts the date range to align with Colombian regulations, ensuring invoices are processed correctly and avoiding unnecessary errors. This improves compliance and streamlines the invoicing process.
Original PR description
Currently, an `incorrect warning` message is shown when sending an invoice to `DIAN`, if the invoice date is 6 days before today, even though this date should be considered valid. **Steps to…
Currently, an `incorrect warning` message is shown when sending an invoice to `DIAN`, if the invoice date is 6 days before today, even though this date should be considered valid. **Steps to reproduce:** - Install the `l10n_co_dian` module and switch to the `CO company`. - Go to `Invoicing` and create a new invoice with `taxes`. - Set the `Invoice Date` to 6 days before today. - Click `Confirm` > `Send`, ensure `DIAN` is selected, and `send` the invoice. - Observe the warning message. **Observation:** `The issue date can not be older than 5 days or more than 5 days in the future.` **Root cause:** At [1], the allowed invoice date range is incorrectly computed, using `5 days in the past` and `10 days in the future`. This does not match the Colombian regulations and triggers incorrect validation errors for valid invoice dates. **Fix:** This commit updates the date constraint logic to allow invoices dated up to `6 days before and 6 days after` the current date, in accordance with the DIAN specification described in Anexo Técnico – Documento Soporte No Obligados, page 59, at [3]. <img width="1089" height="120" alt="DIAN" src="https://github.com/user-attachments/assets/408c5ccc-5fed-4585-a81e-dce4ccb98b40" /> [1]: https://github.com/odoo/enterprise/blob/62f59f87a513a86a61f871ca743e7f7b04926a82/l10n_co_dian/models/account_edi_xml_ubl_dian.py [3]: https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Documento-Soporte-No-Obligados.pdf opw-5482555 Forward-Port-Of: odoo/enterprise#107399 Forward-Port-Of: odoo/enterprise#105763
This update significantly improves the performance of the MRP MPS report by reducing memory usage. The changes optimize data fetching and minimize unnecessary data retrieval, resulting in faster report generation, especially when handling large production schedules. This resolves a previous memory error and enhances the overall user experience.
Original PR description
Problem: When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error. Solution: We…
Problem:
When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error.
Solution:
We will fetch only the necessary fields to reduce queries and memory usage and set prefetch_fields=False to further reduce memory usage.
Benchmarks:
Run locally on a dupe of customer's db.
Time/queries measured by requests to /get_mps_view_state Memory measured using memray on method get_production_schedule_view_state()
<table>
<tr>
<th rowspan="2"># of Production Schedules</th>
<th colspan="3">Before</th>
<th colspan="3">After</th>
</tr>
<tr>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
</tr>
<tr>
<td>20</td>
<td>22.846s</td>
<td>1,379</td>
<td>882.0MB</td>
<td>8.046s</td>
<td>1,180</td>
<td>103.4MB</td>
</tr>
<tr>
<td>300</td>
<td>41.098s</td>
<td>6,297</td>
<td>1.0GB</td>
<td>43.694s</td>
<td>5,732</td>
<td>363.5MB</td>
</tr>
<tr>
<td>1000</td>
<td>N/A (MemoryError)</td>
<td>N/A (MemoryError)</td>
<td>>2GB</td>
<td>88.416s</td>
<td>22,629</td>
<td>1.1GB</td>
</tr>
</table>
Average memory usage reduction: 75%
opw-5225472
Forward-Port-Of: odoo/enterprise#106392This update resolves an issue where rental schedules were limiting the number of products displayed in group views. The fix increases a Python-side limit to match the Gantt chart's default limit, allowing for a more complete view of rental products when more than 30 are involved. This ensures accurate scheduling and reporting for rental agreements.
Original PR description
Versions -------- - 19.0+ Steps ----- 1. Create more than 30 rental products. 2. Override or raise `group_limit` on the `sale_renting.sale_order_line_gantt_schedule` view to 40 (>= 30). 3. Open the rental schedule and group by products. Issue ----- Only 21 products expand even when the limit is increased. Cause ----- Commit 9010416881857c5b810a56e74db04a5fcd869f63 added a hard limit to the search expanding product groups, based on the gantt default limit of 20. When the gantt limit is increased, the Python limit remains. Solution -------- Increase the Python-side limit to what it was before 9010416881857c5b810a56e74db04a5fcd869f63, i.e. 80, which is the default limit at the action level. opw-5887837 Forward-Port-Of: odoo/enterprise#107010
Features or functions removed from Odoo
This update removes the MailThreadCC feature from various Odoo modules. This change improves email functionality by leveraging the existing base MailThread suggestion feature to handle incoming CC emails when replying. The removal simplifies the system and aligns with current email handling capabilities.
Original PR description
Adapt modules to the remove of MailThreadCC task-5013894
1 change
Resolved issues and error corrections
This update optimizes the MPS report to run faster and use less memory, especially when processing large production schedules. By reducing the amount of data fetched and minimizing unnecessary queries, the report now handles more complex scenarios without errors. This results in a smoother and more reliable experience for users.
Original PR description
Problem: When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error. Solution: We…
Problem:
When running the MPS report on a large number of production schedules, if the associated number of stock moves is high, the _get_moves_and_date method can cause a memory error.
Solution:
We will fetch only the necessary fields to reduce queries and memory usage and set prefetch_fields=False to further reduce memory usage.
Benchmarks:
Run locally on a dupe of customer's db.
Time/queries measured by requests to /get_mps_view_state Memory measured using memray on method get_production_schedule_view_state()
<table>
<tr>
<th rowspan="2"># of Production Schedules</th>
<th colspan="3">Before</th>
<th colspan="3">After</th>
</tr>
<tr>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
<th>Time</th>
<th># of Queries</th>
<th>Memory usage</th>
</tr>
<tr>
<td>20</td>
<td>22.846s</td>
<td>1,379</td>
<td>882.0MB</td>
<td>8.046s</td>
<td>1,180</td>
<td>103.4MB</td>
</tr>
<tr>
<td>300</td>
<td>41.098s</td>
<td>6,297</td>
<td>1.0GB</td>
<td>43.694s</td>
<td>5,732</td>
<td>363.5MB</td>
</tr>
<tr>
<td>1000</td>
<td>N/A (MemoryError)</td>
<td>N/A (MemoryError)</td>
<td>>2GB</td>
<td>88.416s</td>
<td>22,629</td>
<td>1.1GB</td>
</tr>
</table>
Average memory usage reduction: 75%
opw-5225472
Forward-Port-Of: odoo/enterprise#1063922 changes
Resolved issues and error corrections
This update fixes an issue where leave refusal tests were unreliable due to relying on weekend dates. The change uses a consistent weekday start date to ensure accurate and predictable leave duration calculations, preventing potential disruptions in the leave management process. This improves the stability and reliability of the HR holiday system.
Original PR description
The access rights test `test_holiday_responsible_refuse_leave` relied on `date.today()`, which may fall on a weekend and lead to inconsistent leave duration/flow depending on the employee calendar. Use a deterministic weekday (`date_utils.start_of(..., 'week')`) as the request start date to prevent weekend-dependent failures in CI. Bug was introduced by https://github.com/odoo/odoo/pull/238205 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a minor issue where empty 'LineExtensionAmount' values in UBL invoices were being imported into Odoo. These amounts had no business purpose and were causing unnecessary processing. This change ensures that invoices are processed more efficiently and accurately.
Original PR description
Zero LineExtensionAmount have no purpose after import so they can simply be ignored. taks-5881008 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245862
1 change
Resolved issues and error corrections
This update resolves an issue where the system was incorrectly importing zero values for 'LineExtensionAmount' in UBL invoices. Previously, these empty amounts caused processing problems. Now, the system simply ignores these lines, ensuring invoices are processed correctly and efficiently. This improves the reliability of our UBL invoice import process.
Original PR description
Zero LineExtensionAmount have no purpose after import so they can simply be ignored. taks-5881008 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245862