Daily updates from Odoo
Tuesday, January 13, 2026
149 changes
21 changes
Enhancements to existing features
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
Resolved issues and error corrections
This update resolves a technical issue preventing users from accessing the standard demo job position within the payroll demo data. Previously, the demo job was linked to the main company, causing access errors when using multi-company setups. This change ensures all companies can utilize the demo data correctly.
Original PR description
## Steps to reproduce: - install l10n_in_hr_payroll with demo data - go to employee - open payroll tab - select default contract template from Load a Template - click on load button ## Issue: - General demo job position used in many places in demo data has company_id set to main company by default. It creates access error of multi company issue. ## Fix: - The standard job in demos should not be linked to the main company by default. It should be visible and accessible for all companies. backport of https://github.com/odoo/odoo/pull/234477 Task-5440650 Forward-Port-Of: odoo/odoo#241590
This update corrects a technical issue where the product name was appearing twice in the descriptions of delivery orders and related PDF reports. The fix addresses a logic error in how Odoo builds these descriptions, ensuring consistent and accurate reporting. This improves the clarity and professionalism of our order fulfillment documentation.
Original PR description
**Steps to reproduce:** * Install the **stock** and **sale_management** modules. * Go to *Inventory > Configuration > Attributes* and create a new attribute. * Set *Variant Creation Mode* to *Never*.…
**Steps to reproduce:**
* Install the **stock** and **sale_management** modules.
* Go to *Inventory > Configuration > Attributes* and create a new
attribute.
* Set *Variant Creation Mode* to *Never*.
* Add a single attribute value and enable *Free text* on it.
* Create a product using this attribute and select the value for which
*free text* is enabled.
* Create a Sale Order for this product.
* Open the sale order line pop-up and enter custom text in the *Text* field.
* Confirm the sale order.
* Open the generated Delivery Order.
**Observed behavior:**
The product name appears **twice** in the stock move description.
The same duplication appears in the **Delivery Slip** PDF report.
**Cause:**
https://github.com/odoo/odoo/blob/452800a9fd56539c04bed5dcf4525afb9b8ad28e/addons/sale_stock/models/stock.py#L31-L32
In `_compute_description_picking`, the description is built as description + variant description.
Since Odoo already uses the product name as the base description and avoids rendering
it twice only when the name equals the description, concatenating the variant description
breaks this logic and results in the product name being repeated.
---
<details>
<summary>Click here to see the results:</summary>
Before:
<img src="https://github.com/user-attachments/assets/2f76fcc9-c71d-4c3d-a80a-06391e5d863c" />
After:
<img src="https://github.com/user-attachments/assets/78eb7905-8ce6-42b9-aed3-ac1452b74dc1"/>
</details>
---
opw-5382353
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#239843This update ensures that eTIMS configuration warnings are only displayed for companies operating in Kenya. Previously, these warnings were shown for all companies, causing confusion. This change streamlines validation and ensures warnings are relevant to users in the correct location.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update resolves an issue where the fullscreen button in the Odoo interface was hidden by a temporary overlay. The change adjusts the layout to prevent overlapping controls, ensuring users can easily access and utilize the fullscreen mode. This improves the overall user experience.
Original PR description
**Purpose of this PR:** When the call control overlay is floating, it overlaps the fullscreen button, making it difficult to enter fullscreen mode. for reference: <img width="711" height="257" alt="image" src="https://github.com/user-attachments/assets/4a7a7448-4988-4cf6-bcfb-6a91491be80d" /> This commit ensures the fullscreen action remains accessible by adjusting the layout layering so controls no longer overlap each other. Task-[5240896](https://www.odoo.com/odoo/project/1519/tasks/5240896) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241747
This update corrects a display issue where archived recurring plans continued to show up as pricing options on the website. The fix ensures that archived plans are no longer considered during the pricing selection process, improving the user experience and preventing outdated information from being presented. This ensures accurate pricing is displayed to customers.
Original PR description
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car…
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car Leasing (SUB)`. **Issue:** - Even after archiving the Monthly recurring plan, its pricing still appears on the website product page. **Root cause:** - At [1], when searching for a suitable recurring price, the system does not filter out pricing records belonging to archived recurring plans. - As a result, inactive plans are still considered during pricing selection. **Solution:** - In this fix, we ensure that recurring plan pricing is included only if the related plan is active. - Archived plans are now ignored, preventing them from appearing on the website. [1]: https://github.com/odoo/enterprise/blob/25edaac85f8fd1699bb78163b01efb966e7fb680/sale_subscription/models/sale_subscription_pricing.py#L78-L79 before <img width="340" height="184" alt="recurring_plan_before" src="https://github.com/user-attachments/assets/abac39fb-5765-4bc4-aec3-87eef7135a18" /> after <img width="337" height="168" alt="recurring_plan_after" src="https://github.com/user-attachments/assets/35ee92e8-e66b-4612-add3-58b277560ea5" /> **opw-5266333** Forward-Port-Of: odoo/enterprise#103473 Forward-Port-Of: odoo/enterprise#100587
This update fixes a potential issue where tour interactions with the Clipboard API weren't reliably mocked, particularly in headless environments. By delaying cleanup until the API call is complete, the system now correctly simulates Clipboard API behavior, preventing browser delays or permission errors. This ensures tours function smoothly across different Chrome versions.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/odoo#243280
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup until the API call is complete, the system avoids delays or permission errors, ensuring tours function reliably. This resolves a compatibility problem highlighted by a recent Chrome update.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update ensures that thumbnails on public documents are automatically reflected in their associated shortcuts. Previously, public users couldn't update shortcuts even when the document itself was updated. This change corrects a permission issue that prevented thumbnail propagation, ensuring a consistent experience for all users.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update fixes a visual issue on the eating location page where a single preset option was left-aligned. Now, when only one preset is available, it's automatically centered for a cleaner and more user-friendly experience. This ensures consistent presentation of options for self-ordering.
Original PR description
On the eating location page, when there is only one preset, we would like to center it. Before, when there is only one preset available, it was aligned on the left. This occurs when there is two presets for a pos config and the default one is not available in self o task:5478651 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243012
This update ensures that when importing electronic invoices, the system correctly identifies and uses existing bank accounts linked to the same supplier, regardless of the company where the invoice is being created. Previously, the import would fail due to a constraint issue, even if the bank account already existed. This improves the efficiency of invoice processing.
Original PR description
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for…
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for that vendor on a child company, the search for a bank account linked to the same company would not find that pre-existing bank account on the parent company. When later trying to create it, the unicity constraint on (sanitized_acc_number, partner_id) would trigger, failing the import. Current behavior before PR: The electronic invoice cannot be imported if the same IBAN account already exists on the partner but on another company than the invoice being created, even though we are going to create the invoice for a partner linked to that other company. Desired behavior after PR is merged: Banks account already linked to the partner are found irrespective of the company, provided the partner (account holder) is the same. This should be correct since the res.partner.bank company_id is a related on res.partner. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242365
This update resolves a minor issue that caused tests for embedded actions to sometimes fail unpredictably. By adding a necessary wait for the browser's update cycle, the tests are now more reliable and consistent. This ensures the continued stability of our web application.
Original PR description
In this commit, we add a missing await for an animation frame in an embedded action test. This ensures that the test waits for the DOM to update properly before proceeding, preventing potential flakiness in the test execution. runbot error~237752 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243240
This update resolves a validation error in Odoo Studio related to customizing contact fields. The issue stemmed from a missing 'help' attribute in the field definitions, preventing proper validation of changes made through the Studio interface. This ensures that customizations to contact lists are now correctly validated.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357 Forward-Port-Of: odoo/odoo#240261
This update fixes an issue where the 'Preview on Portal' button appeared in vendor bill emails, causing problems with the portal payment process. The change now ensures vendor bills include the original vendor PDF, and a minor visual adjustment has been made to improve the visibility of the input field in email notifications. This ensures a smoother experience for vendors.
Original PR description
Vendor bill emails are meant to include the vendor’s original PDF rather than an Odoo-generated invoice. The "Preview on Portal" button was hidden to avoid facing errors in the portal payment page. Additionally, remove the CopyClipboardChar widget from the "incoming_einvoice_notification_email" field to make the input placeholder visible. task-5438315 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242850
This update resolves a bug where creating a new employee version with a date later than an existing version's contract end date resulted in duplicate contract creation. The fix ensures that contracts are only created for the active employee version, streamlining the payroll process and preventing unnecessary contract generation.
Original PR description
To reproduce: install hr_payroll open an employee form view > payroll make sure the employee_version you are on doesn't have a contract end date set the end date to X and without saving create a new employee version from the plus sign with date greater than X The Bug: when following the above flow a contract will be created for both employee versions it shouldn't be the case for the second version as version date is greater than contract end date opw-5427769 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243153 Forward-Port-Of: odoo/odoo#240681
This update resolves a test failure in the Odoo ecommerce module. The previous code included unnecessary elements that weren't relevant to the test, causing errors. The changes removed these elements to ensure the tests run correctly and accurately reflect the ecommerce functionality.
Original PR description
The code of the payment provider is not relevant to the test_ecommerce_paid_order_is_hidden_in_pos test, and pos_sale doesn't have payment_custom in the dependencies. It caused tests to fail so I removed it. Runbot Build Error-233461 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232638
This update corrects minor errors in the Danish local reports (balance sheet and profit & loss) for 2026. These were unintentional oversights during development and ensure accurate financial reporting for our Danish customers. No new functionality was added.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id Forward-Port-Of: odoo/enterprise#103830
The website image tests were intermittently failing due to the unpredictable nature of image loading times. This update uses a more robust method to ensure the UI is fully updated before tests run, resolving these intermittent failures. This improves the reliability of our website testing process.
Original PR description
The image_size tests were failing in a nondeterministic way. Image-related options can take an indeterminate amount of time to complete, so waiting for a single animation frame is not always sufficient. Use `waitSidebarUpdated`` to ensure there are no pending actions and that the UI is fully updated before asserting. Error-237539 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a recent change to the account online synchronization access rights, ensuring it's correctly linked to Invoicing & Banks. The previous change missed a critical step, preventing proper synchronization of duplicate transactions. This fix ensures data accuracy and reliability for financial processes.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/6edc057a9c0459af2b6d625415b700daf6280520 we changed the access rights of the account online sync to Invoicing & Banks but forgot to add the duplicate transactions no task id Forward-Port-Of: odoo/enterprise#104008
This update resolves a problem where the 'copy link' button in the salary calculator was generating a 404 error. The fix ensures the offer is properly saved before creating the link, preventing errors and allowing users to correctly copy salary details. This improves the usability of a key payroll function.
Original PR description
Steps to reproduce: 1- Open salary calculator 2- Do not edit any fields 3- Click on copy link button 4- Open the link Issue: When you open the link you'll see a 404 page. Cause: The salary calculator essentially creates an offer. When no fields are modified in the form, the offer isn't created yet. When a link is created for that offer, the offer id part of the link is NewId_xxx. Fix: Modify the widget that copies the link to clipboard to first save the offer before generating the link. Task-5441297 Forward-Port-Of: odoo/enterprise#102900
12 changes
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
Resolved issues and error corrections
This update resolves an issue where the POS system in Ecuador would crash when a customer was removed from the partner list after selecting 'Consumidor Final'. The fix ensures a customer is always selected, either a specific customer or 'Consumidor Final', improving stability and accuracy for Ecuadorian retail operations.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#103868 Forward-Port-Of: odoo/enterprise#102221
This update ensures eTIMS configuration warnings are only displayed for companies operating in Kenya, resolving confusion for users in other locales. The change streamlines validation and maintains the correct eTIMS behavior for Kenyan businesses. This improves the user experience and data accuracy.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update ensures that thumbnails are correctly updated on document shortcuts, even when accessed by public users. Previously, public users lacked thumbnail updates due to a permission restriction, leading to inconsistencies. This change resolves a bug where public access to a document shortcut didn't reflect thumbnail updates.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update resolves an error that occurred when users deleted the 'Balance' line from the General Ledger Report. The fix prevents the report from crashing when this configuration is removed, ensuring consistent and reliable report generation. This improves the user experience and data accuracy.
Original PR description
Currently an error is generated when the user deletes the `Balance` line of `Column` tab from the General Ledger Report as in the below steps: - Install accountant with demo data - Go to Accounting >…
Currently an error is generated when the user deletes the `Balance` line of `Column` tab from the General Ledger Report as in the below steps: - Install accountant with demo data - Go to Accounting > Configuration > Accounting (section) > Accounting Reports - Open the General Ledger report - Delete the balance line from the Column tab - Go to Reporting > General ledger >> Error occurs (If an error does not occur, try opening the detailed view of the journal in the report.) Error: `KeyError: 'balance'` This issue was generated because at code line [1] tries to access `balance` key from the `colname_to_idx[col_group_key]` but since the user deleted `balance` it will not fount there and we got an error. This commit fixes the issue by preventing the processing of `line_balance` when the balance key is not present in `colname_to_idx[col_group_key]`. [1]: https://github.com/odoo/enterprise/blob/340abdc1b00df4d3d6130b26650519ae8354d199/account_reports/models/account_general_ledger.py#L326 sentry-7105657812
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup steps, the system now ensures the API call is fully processed before attempting to mock it, preventing delays or errors. This improves tour reliability and performance.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update automatically calculates and transmits the 2050 pension contribution amount for employees in Switzerland using the Swissdec standard. This ensures accurate and compliant payroll processing, addressing a previous issue with manual calculations and data transmission.
Original PR description
task-5166226 Forward-Port-Of: odoo/enterprise#103542 Forward-Port-Of: odoo/enterprise#103453
This update corrects a technical issue in the Accounts Coverage Report that was incorrectly flagging duplicate report lines. The fix ensures accurate reporting by ignoring identical report names and codes, preventing misleading error messages. This improves the reliability of financial reporting data.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
This update resolves an issue where the year field in certain reports was incorrectly formatted with a comma. Removing this comma ensures accurate reporting data and consistent calculations for payroll and tax reporting in Belgium. This change improves the reliability of financial reports.
Original PR description
. Remove the comma on the year filed on the crossponding reports task-5417861 Forward-Port-Of: odoo/enterprise#102143
This update resolves an error that occurred when users configured custom grouping in the General Ledger report. The fix ensures the report correctly handles custom grouping by accessing the relevant data, preventing a crash and allowing users to generate reports as intended. This improves report functionality and user experience.
Original PR description
Currently an error is generated when the user tries to open the `General Ledger` report after following the below steps: - Install `Accounting(accountant)` with demo data - Go to Accounting > Configuration > Accounting > Accounting Reports - Open `General Ledger` report > click `General Ledger` in lines - Set `account_code` instead of `account_or_unaff_id` in Group By - Save and again save report - Go to `Reporting` > `General Ledger` This is because the user added a custom group by `account_code` in the account report, but this key is not avaliable in the row; it will generate an error. This commit will fix the above issue by accessing the groupby key in the row when it exists. sentry-7139160856
This update corrects minor errors in the 2026 balance sheet and profit & loss reports for Danish accounting. The changes, identified as logical fixes, ensure accurate financial reporting. This is a low-impact fix improving the reliability of these reports.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id Forward-Port-Of: odoo/enterprise#103830
This update resolves an issue where country-based filtering on payslips and payroll runs wasn't functioning properly, leading to errors. The fix ensures accurate country filtering, preventing module loading problems and improving payroll reporting.
Original PR description
Issue: The country_id related field on payslip and payslip run was not stored, causing domain filters and search on this field to fail and triggering client-side errors. Fix: Use search parameter to write function so field can be used safely in search domains and filters. Impact: Country-based filtering now works correctly without triggering module loader errors. Task: 5406904 Forward-Port-Of: odoo/enterprise#103318
16 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
Resolved issues and error corrections
This update fixes an issue where tax invoices generated in Thai were incorrectly displaying the branch name in English. The change ensures the branch name is translated based on the language setting of the customer's account, improving accuracy and compliance with Thai tax regulations. This improves the user experience for Thai customers.
Original PR description
Currently, l10n_th_branch_name is not translatable. Regardless of the language setting, it is printed in English on the tax invoice. This PR addresses that. Task-5438534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242484
This update resolves a technical error that occurred when a specific customer type ('Consumidor Final') was selected in the Ecuadorian Point of Sale (POS) system. The fix ensures that a customer is always identified, which is a requirement for accurate reporting and compliance in Ecuador. This prevents tracebacks and improves system stability.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#103868 Forward-Port-Of: odoo/enterprise#102221
This update fixes a confusing issue where eTIMS configuration warnings were displayed for companies outside of Kenya. Now, the warnings are only shown for Kenyan businesses, ensuring accurate validation and a better user experience. This improves the relevance of the eTIMS checks.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update corrects a visual issue where the 'Update Prices' button appeared on sales orders even when no pricelist was configured. The fix ensures the button is only displayed when a pricelist is active, preventing confusion and ensuring accurate pricing calculations. This improves the user experience for sales order creation.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241812
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments. By delaying cleanup until the action's listener has finished, the system avoids delays and errors related to browser permissions or waiting for user input. This ensures tours function reliably across different browsers and configurations.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/odoo#243280
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. The change ensures the API call is properly mocked in two steps, preventing delays and errors caused by slower processing or network connections. This improves tour reliability and avoids browser permission prompts.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update ensures that thumbnails are correctly updated on document shortcuts, even when accessed by public users. Previously, public users lacked thumbnail updates due to a system limitation. This change resolves a discrepancy where access to the document shortcut was lost, regardless of ownership.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update removes a previous permission that allowed inventory users to modify locations. This change was deemed too risky and outside the scope of their responsibilities. Testing confirms this restriction doesn't impact core inventory functionality.
Original PR description
During the development of the task of the PR https://github.com/odoo/odoo/pull/149149, this permission was added as a possible way to fix some found problems, but that's not the way to fix them, as allowing inventory users to modify locations is something very dangerous and out of scope of what an inventory user should do. Reverting the permission, and doing manual tests with an inventory user for doing a "update quantity" or a "inventory adjustment", there's no problem, so maybe that permission was needed in a past codebase. @Tecnativa Forward-Port-Of: odoo/odoo#243085
This update ensures that when importing electronic invoices, Odoo correctly identifies and uses existing bank accounts linked to the same supplier, regardless of the company where the invoice is being created. Previously, the system would incorrectly flag duplicate accounts, causing import failures. This change improves the efficiency of invoice processing.
Original PR description
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for…
Description of the issue/feature this PR addresses: Imagine a situation where a vendor is defined on a parent company and its bank account already exists. When importing an electronic invoice for that vendor on a child company, the search for a bank account linked to the same company would not find that pre-existing bank account on the parent company. When later trying to create it, the unicity constraint on (sanitized_acc_number, partner_id) would trigger, failing the import. Current behavior before PR: The electronic invoice cannot be imported if the same IBAN account already exists on the partner but on another company than the invoice being created, even though we are going to create the invoice for a partner linked to that other company. Desired behavior after PR is merged: Banks account already linked to the partner are found irrespective of the company, provided the partner (account holder) is the same. This should be correct since the res.partner.bank company_id is a related on res.partner. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242365
This update resolves a technical issue causing duplicate error messages in the Accounts Coverage Report. The fix ensures that identical report lines with the same name and code are no longer flagged as duplicates, improving report accuracy and user experience. This change impacts the reporting functionality within the Enterprise module.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
This update resolves a validation error in Odoo Studio when users attempt to add help tooltips to fields in the Contacts list view. The issue stemmed from a missing 'help' attribute in the field definition, preventing proper validation. This change ensures that users can now customize field tooltips without triggering errors.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357 Forward-Port-Of: odoo/odoo#240261
This update resolves an issue where filtering work entries by country was not functioning correctly, leading to errors. The fix ensures country-based searches and filters work as expected, preventing module loading problems and improving data accuracy.
Original PR description
Issue: The country_id related field on work entries was not stored, causing domain filters and search on this field to fail and triggering client-side errors. Fix: Use search parameter on field to write function so field can be used safely in search domains and filters. Impact: Country-based filtering now works correctly without triggering module loader errors. Task: 5406904 Forward-Port-Of: odoo/odoo#239573
This update resolves an issue where the year field in certain reports was incorrectly formatted with a comma. The change removes this comma, ensuring accurate reporting data and consistent output for Belgian payroll calculations. This fix improves the reliability of financial reports.
Original PR description
. Remove the comma on the year filed on the crossponding reports task-5417861 Forward-Port-Of: odoo/enterprise#102143
This update fixes an issue where employee names were being incorrectly formatted in the payroll system. The change ensures that employee first and last names are consistently and correctly assigned, aligning with Swiss legal name requirements. This improves data accuracy for payroll reporting and compliance.
Original PR description
* Fix _compute_l10n_ch_legal_name method to correctly assign first_name and last_name from employee name (was previously reversed) * Update all SwissDEC test data to use correct "FirstName LastName" format instead of "LastName FirstName" to match the corrected computation logic task-5102851 Forward-Port-Of: odoo/enterprise#95252
5 changes
Resolved issues and error corrections
This update fixes a confusing issue where eTIMS configuration warnings were displayed for companies outside of Kenya. Now, warnings are only shown for Kenyan businesses, ensuring validation remains relevant and avoids unnecessary alerts for other users. This improves the user experience and accuracy of the system.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update fixes an issue where tour scripts were incorrectly attempting to access the clipboard API, leading to potential delays or errors. The change ensures the API call is properly mocked in two steps, preventing premature cleanup and resolving compatibility problems with newer Chrome versions. This improves the reliability of our in-app tours.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update fixes an issue where public users sharing documents didn't automatically update the corresponding request shortcuts with new thumbnails. The problem stemmed from a restriction on public user access, preventing thumbnail propagation. Now, shared document shortcuts will correctly reflect any changes to the document's thumbnail, ensuring a consistent user experience.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update resolves a technical issue causing duplicate entries in the Accounts Coverage Report. The fix ensures the report accurately reflects account data by ignoring identical report lines with the same name and code. This improves the reliability of financial reporting.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
This update resolves an issue where country-based filtering on payslips and payroll runs wasn't functioning properly, leading to errors. The fix ensures accurate country-based searches and filtering, preventing module loading problems and improving data accuracy.
Original PR description
Issue: The country_id related field on payslip and payslip run was not stored, causing domain filters and search on this field to fail and triggering client-side errors. Fix: Use search parameter to write function so field can be used safely in search domains and filters. Impact: Country-based filtering now works correctly without triggering module loader errors. Task: 5406904 Forward-Port-Of: odoo/enterprise#103318
17 changes
New functionality added to Odoo
This update introduces a standard tax configuration for Colombian companies requiring 'Auto-Withholding' tax. It simplifies the process by pre-defining the necessary accounting distributions (+100% to account 135515, -100% to 236575) to ensure accurate tax calculations and compliance, eliminating manual errors.
Original PR description
Colombian companies often require "Auto-Withholdings", where the seller must withhold tax from themselves. Configuring this manually is error-prone due to the specific +100/-100 distribution required to neutralize the invoice total. This commit adds a standard "VAT Self-Withholding 1.2%" tax to the localization data to serve as a functional reference. It is pre-configured with: - A new "VAT Self Withholding" tax group. - Repartition lines distributing +100% to account 135515 and -100% to account 236575. This ensures users have a ready-to-use example that handles the accounting movements correctly without affecting the invoice total. task-5430248
Enhancements to existing features
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 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
Resolved issues and error corrections
This update resolves an inconsistency in the SLSP reports, ensuring data is displayed in a predictable order. The change adds a standard sorting method to the database queries, preventing future test failures and improving report reliability. This ensures accurate reporting for Philippine tax compliance.
Original PR description
A recent test was added that tests the lines of the SLSP reports. Up until now, all tests were either testing specific lines (not the report structure) or the export, which uses different queries. This new test is now failing inconsistently due to the order in which the data is being displayed. We add default orderby in SQL queries of the SLSP (using the models default orderby) in order to make the order consistent and avoid further issues. Forward-Port-Of: odoo/enterprise#103925
This update simplifies the Point of Sale interface by removing a confusing option. Specifically, when the POS IoT module is enabled, the system now correctly displays both IP address and IoT options for device selection. This ensures a cleaner and more intuitive user experience for sales staff.
Original PR description
When there is only one choice in the selection of `use_type` (IP address or IOT), we hide it in the form. But when there is two choice (so, when pos_iot is installed), we show the two options. community pr: https://github.com/odoo/odoo/pull/242790
This update fixes a visual inconsistency in the HR appraisal module by aligning progressbar headers and content to the left. This ensures a cleaner and more professional appearance, particularly when the application is displayed in right-to-left languages.
Original PR description
**Progressbar** columns currently have **right-aligned headers**, which results in visual inconsistency. This change enforces **left alignment** for both the **progressbar headers** and their **column content** to ensure a clearer and more consistent layout. When rendered in an **RTL (right-to-left)** format, the headers and content are aligned to the **right** accordingly, consistent with the alignment of other fields in that format. Community: https://github.com/odoo/odoo/pull/241053 task-5248253
This update resolves a technical issue where the 'Mark as Ready' order completion process in UrbanPiper POS was failing, resulting in an 'undefined street' error. The fix ensures that the system correctly checks if a customer is assigned before completing the order, preventing this error and improving order processing reliability.
Original PR description
Steps to produce: ==== - Place an online delivery order through urbanpiper - Edit the order and remove customer - Complete the order as Marks as Ready - Print Reciept Issue: ==== - TB occurs stating undefined street Fix: ==== - Check whether partner is assigned or not task-5407001 Forward-Port-Of: odoo/enterprise#103736 Forward-Port-Of: odoo/enterprise#102100
This update corrects a discrepancy in the employment bonus calculations for the Belgian HR payroll module, ensuring accurate figures up to March 2026. This change addresses a technical adjustment to comply with updated Belgian tax regulations, guaranteeing accurate payroll reporting for our Belgian clients. The fix impacts the calculation of bonus payments.
Original PR description
Forward-Port-Of: odoo/enterprise#103820
This update fixes an issue where refund alerts were triggered incorrectly due to rounding differences in order totals. The change ensures that the system accurately compares refund amounts to original order amounts, preventing false alerts and improving the reliability of the POS system. This ensures accurate financial reporting and reduces potential customer service issues.
Original PR description
Before this commit, if the total amount of the order had rounding differences compared to the sum of its lines, the system could incorrectly trigger an alert stating that the refund amount exceeds the original order amount. This was due to a direct comparison between the two amounts without considering potential rounding issues. opw-5402240 Forward-Port-Of: odoo/enterprise#103758 Forward-Port-Of: odoo/enterprise#102224
This update resolves a display issue within the sign flow where the third dropdown option in the style list menu was not appearing correctly. The fix ensures that the system waits for font data to load before presenting the full menu selection, preventing a single option from being displayed intermittently. This improves the user experience during the sign process.
Original PR description
In this tour, when we want to select the third dropdown item in style list menu, we must wait that the rpc get_fonts/ is done, or else, it has only one item in the menu. When the menu is opened before the call is completed, there is only one style. When it is opened after, there is all styles loaded. runbot-error-id~232652 Forward-Port-Of: odoo/enterprise#103813
This update ensures that timesheet timers accurately reflect the task they're associated with when viewed in the list view. Previously, timers defaulted to the user's favorite project instead of the specific task, leading to inaccurate time tracking. This fix corrects this behavior.
Original PR description
### Issue: When looking at the list of timesheet for a task, we can start the time but the timer have default values that don't correspond to the task. ### Cause: `startTimer` in the `timesheetTimerService` is called from the timesheet timer hook without vals. It then makes an orm call to `action_start_new_timesheet_timer` to retrieve the fields (project or task) but as nothing is given in the vals, the selected project is the one returned by `_get_favorite_project_id()`. ### Solution: Get the context of the list view to retrieve the task or the project and input it in `vals`. opw-5342525 Forward-Port-Of: odoo/enterprise#103922 Forward-Port-Of: odoo/enterprise#102152
This update resolves a performance issue related to appointment scheduling within the HR module. Refactoring the HR system and moving employee data to a new model required a slight adjustment to database queries to ensure accurate scheduling calculations. This change improves the speed and efficiency of appointment slot availability.
Original PR description
Since hr has been refactored and lot of hr.employee fields moved to hr.version model, we have to increase Querycount by one as now _slot_availability_prepare_users_values_workhours function calls for hr.version together with hr.employee to get all the right values. Original function flamegraph  Since https://github.com/odoo/odoo/pull/202869, extra call for hr.version when we are trying to read employees[0].resource_calendar_id  Fixing [Runbot error 226700](https://runbot.odoo.com/odoo/error/226700)
This update corrects a persistent warning about duplicate payslips that appeared after deleting one. The fix ensures a payslip is first cancelled before deletion, preventing the warning from incorrectly triggering. This improves payroll accuracy and reduces potential user confusion.
Original PR description
### Steps to reproduce: - Create two payslips for the same employee for the same period. - Delete one of them; the duplicate warning still appears on the other payslip. ### Fix: - Before deleting a payslip, first cancel it so the current payslip can be skipped while checking for duplicate payslips. - Then invalidate the issue fields of the current payslip, which indirectly recompute the warning for duplicate payslips. task: 5427473
This update corrects a technical issue where the CFDI button was incorrectly displayed on payruns that didn't include Mexican payroll data. The change adds a check to ensure Mexican payslips are present before determining CFDI requirements, preventing the button from appearing unnecessarily. This improves the user experience and avoids potential confusion.
Original PR description
Before this commit, the computed fields `l10n_mx_cfdi_primary` and `l10n_mx_cfdi_secondary` would return True for payruns containing only non-Mexican payslips. This happened because `all()` returns True for empty iterables, causing the CFDI button to appear on payruns that have no Mexican payslips. This commit: - Adds explicit check for Mexican payslips existence before evaluating the CFDI state conditions - Hides `l10n_mx_edi_cfdi_origin` field for non-Mexican payslips - Adds test coverage for CFDI visibility on non-Mexican payruns task-5478038 Forward-Port-Of: odoo/enterprise#103783
This update resolves an issue where the attendance app would crash when an employee didn't have a linked calendar. The fix ensures the app handles employees with flexible schedules properly, preventing errors and improving overall usability. This change ensures all employees can accurately record their attendance.
Original PR description
Steps to reproduce: - Create an employee - Remove the calendar to have fully flex - Open the attendance app -> traceback When an employee has no resource calendar (resource_calendar_id=False), the _gantt_unavailability method would crash with a TypeError when trying to create a ZoneInfo from calendar.tz (which is False/None). This fix adds a check to skip calendar periods where the calendar is not set, consistent with how flexible calendars are already handled. task-5462208 Forward-Port-Of: odoo/enterprise#103243
Miscellaneous changes
This pull request explores a preliminary change to temporarily disable certain menus within the Odoo Enterprise platform. This is a proof-of-concept (POC) to investigate potential performance improvements and streamline the user interface. The changes are currently contained within development branches and are not yet live.
14 changes
Resolved issues and error corrections
This update corrects a recent change to the access rights for the Account Online Synchronization feature. The previous update granted access to 'Invoicing & Banks' but missed a crucial step – adding the necessary permissions for duplicate transaction handling. This fix ensures the synchronization process correctly manages duplicate transactions, preventing potential data inconsistencies.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/6edc057a9c0459af2b6d625415b700daf6280520 we changed the access rights of the account online sync to Invoicing & Banks but forgot to add the duplicate transactions no task id
This update resolves a database error that occurred when generating tax reports, specifically within the Vietnamese localization module. The fix corrects a mistake in how the report accessed tax descriptions, ensuring accurate report generation and proper hierarchical expansion of sales and purchase reports. This improves the reliability of financial reporting.
Original PR description
Before: The `query_tax_lines` method was incorrectly using the account tag alias to access the `description` field, which does not exist on that table. This caused a database error when expanding invoice lines from the Tax Report. After: Now the query correctly uses the `account_tax` table alias to fetch the tax description. - Also added test cases for sales and purchase reports to ensure correct generation of report lines and proper expansion of the hierarchical structure. task-5461512
This update fixes a confusing issue where eTIMS configuration warnings were displayed for companies outside of Kenya. Now, warnings are only shown for Kenyan businesses, ensuring validation remains relevant and avoids unnecessary alerts for other users. This improves the user experience and data accuracy.
Original PR description
Before: In multi-company setups, the eTIMS configuration warning was shown even when working in companies that are not based in Kenya. This resulted in confusing and irrelevant warnings for users using other localizations. After: The eTIMS configuration warning is now limited to Kenyan companies only. Non-Kenyan companies are no longer impacted, keeping the validation relevant while preserving the intended eTIMS behavior. task-5462334 Forward-Port-Of: odoo/enterprise#103291
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup steps, the system now ensures the API call is fully executed before any verification, preventing delays or permission errors. This improves tour reliability and performance.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update resolves an issue where user images within the referral module were not aligned correctly. The fix ensures a consistent and professional appearance for user profiles in this section of the system. This improves the overall user experience and presentation of referrals.
Original PR description
This fix ensures that the user's image is correctly aligned task-5264613
This update resolves an issue where links within editable fields were incorrectly highlighted when the editable field itself wasn't focused. This change aligns the testing process with the recent community fix, ensuring accurate link highlighting behavior. It improves the user experience by preventing unintended highlighting.
Original PR description
Links that are the first deep node in an editable are highlighted even when the editable is not focused which was fixed in the community PR. Adapt the test to reflect the correct behavior opw-5436106
**Description:** - The [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91) ir.actions.act_window menus from the sale_account_accountant module were triggering MemoryError on databases with millions of sale.order.line records. These actions call [_search_invoice_to_be_issued and _search_deferred_revenue](https://github.com/odoo/enterprise/blob/master/sale_account_accountant/models/sale
Original PR description
**Description:** - The [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91)…
**Description:**
- The [Invoices To Be Issued and Invoiced Not Delivered](https://github.com/odoo/enterprise/blob/19.0/sale_account_accountant/views/sale_order_line_views.xml#L73-L91)
ir.actions.act_window menus from the sale_account_accountant module were triggering MemoryError on databases with millions of sale.order.line records. These actions call [_search_invoice_to_be_issued and _search_deferred_revenue](https://github.com/odoo/enterprise/blob/master/sale_account_accountant/models/sale_order_line.py#L17-L29)
which iterate over all lines and access the non-stored computed fields [qty_delivered_at_date](https://github.com/odoo/odoo/blob/master/addons/sale/models/sale_order_line.py#L905) and [qty_invoiced_at_date](https://github.com/odoo/odoo/blob/master/addons/sale/models/sale_order_line.py#L985).
- On similar lines, two additional menus—[Bill To Receive and Billed Not Received](https://github.com/odoo/enterprise/blob/19.0/purchase_accountant/views/purchase_order_line_views.xml#L61-L78)
were introduced from the purchase_accountant module. These menus were also triggering MemoryError on databases with a large number of purchase.order.line records. These actions call [_search_prepaid_expense and _search_bill_to_receive](https://github.com/odoo/enterprise/blob/19.0/purchase_accountant/models/purchase_order_line.py#L17-L29) which iterate over all lines and access the non-stored computed fields [qty_invoiced_at_date](https://github.com/odoo/odoo/blob/19.0/addons/purchase/models/purchase_order_line.py#L180) and [qty_received_at_date](https://github.com/odoo/odoo/blob/19.0/addons/purchase/models/purchase_order_line.py#L234).
- To resolve this, we refined _get_accrual_domain to include only lines within a one-year range, from the given accrual date (or today) back to one year earlier, and used split_every in the accrual searches to process the recordset in chunks.
```
matu_3625797_19.0=> select count(*) from sale_order_line;
count
---------
2228032
(1 row)
matu_3625797_19.0=> select count(*) from purchase_order_line;
count
--------
581637
(1 row)
```
**Traceback1:**
```
2025-12-03 07:02:25,973 9344 ␛[1;31m␛[1;49mERROR␛[0m matu_3306966_19.0 odoo.addons.base.maintenance.migrations.base.testsodoo.upgrade.base.tests.test_mock_crawl: Adding menu ('sale_account_accountant.menu_sale_order_line_accrual_to_bill_action', 1295, 'Accounting > Review > Sales > Invoices To Be Issued', 2690) to the failing menus
Traceback (most recent call last):
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 644, in mock_view_list
return self.mock_view_tree(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 655, in mock_view_tree
self.mock_web_read_group(model, view, domain, group_by, fields_list, limit_group=5)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 713, in mock_web_read_group
data = model.web_read_group(domain, [groupby], aggregates, limit=limit)["groups"]
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 397, in web_read_group
groups, length = self._formatted_read_group_with_length(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 465, in _formatted_read_group_with_length
groups = self.formatted_read_group(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 830, in formatted_read_group
groups = self._read_group(
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 33, in _read_group
return self._read_group_for_accrual(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/enterprise/19.0/account_accountant/models/analytic_mixin.py", line 21, in _read_group_for_accrual
return super()._read_group(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 1904, in _read_group
query = self._search(domain)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5361, in _search
domain = domain.optimize_full(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 445, in optimize_full
return self._optimize(model, OptimizationLevel.FULL)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in _optimize_step
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in <genexpr>
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 957, in _optimize_step
domain = self._optimize_field_search_method(model)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in _optimize_field_search_method
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in OR
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 595, in apply
children = cls._flatten(items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in <genexpr>
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in <genexpr>
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1921, in determine_domain
return determine(self.search, records, operator, value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 28, in _search_invoice_to_be_issued
ids = [line.id for line in so_lines if line.qty_invoiced_at_date < line.qty_delivered_at_date]
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 28, in <listcomp>
ids = [line.id for line in so_lines if line.qty_invoiced_at_date < line.qty_delivered_at_date]
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1737, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1908, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/base_automation/models/base_automation.py", line 907, in _compute_field_value
return _compute_field_value.origin(self, field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/odoo/19.0/addons/sale/models/sale_order_line.py", line 989, in _compute_qty_invoiced_at_date
line.qty_invoiced_at_date = line.qty_invoiced
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1693, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1600, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
**Traceback2:**
```
2025-12-03 07:02:30,098 9344 ␛[1;31m␛[1;49mERROR␛[0m matu_3306966_19.0 odoo.addons.base.maintenance.migrations.base.testsodoo.upgrade.base.tests.test_mock_crawl: Adding menu ('sale_account_accountant.menu_sale_order_line_accrual_deferred_revenues_action', 1296, 'Accounting > Review > Sales > Invoiced Not Delivered', 2691) to the failing menus
Traceback (most recent call last):
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 644, in mock_view_list
return self.mock_view_tree(model, view, fields_list, domain, group_by)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 655, in mock_view_tree
self.mock_web_read_group(model, view, domain, group_by, fields_list, limit_group=5)
File "/tmp/tmpe9cqlr9_/migrations/base/tests/test_mock_crawl.py", line 713, in mock_web_read_group
data = model.web_read_group(domain, [groupby], aggregates, limit=limit)["groups"]
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 397, in web_read_group
groups, length = self._formatted_read_group_with_length(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 465, in _formatted_read_group_with_length
groups = self.formatted_read_group(
File "/home/odoo/src/odoo/19.0/addons/web/models/models.py", line 830, in formatted_read_group
groups = self._read_group(
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 33, in _read_group
return self._read_group_for_accrual(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/enterprise/19.0/account_accountant/models/analytic_mixin.py", line 21, in _read_group_for_accrual
return super()._read_group(domain, groupby, aggregates, having, offset, limit, order)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 1904, in _read_group
query = self._search(domain)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 5361, in _search
domain = domain.optimize_full(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 445, in optimize_full
return self._optimize(model, OptimizationLevel.FULL)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in _optimize_step
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 653, in <genexpr>
children = self._flatten(child._optimize(model, level) for child in self.children)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 459, in _optimize
previous, domain = domain, domain._optimize_step(model, next_level)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 957, in _optimize_step
domain = self._optimize_field_search_method(model)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in _optimize_field_search_method
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in OR
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 595, in apply
children = cls._flatten(items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 608, in _flatten
for child in children:
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 309, in <genexpr>
return DomainOr.apply(Domain(item) for item in items)
File "/home/odoo/src/odoo/19.0/odoo/orm/domains.py", line 1016, in <genexpr>
return Domain.OR(Domain(field.determine_domain(model, '=', v), internal=True) for v in value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1921, in determine_domain
return determine(self.search, records, operator, value)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 21, in _search_deferred_revenue
ids = [line.id for line in so_lines if line.qty_invoiced_at_date > line.qty_delivered_at_date]
File "/home/odoo/src/enterprise/19.0/sale_account_accountant/models/sale_order_line.py", line 21, in <listcomp>
ids = [line.id for line in so_lines if line.qty_invoiced_at_date > line.qty_delivered_at_date]
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1737, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1908, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/19.0/addons/base_automation/models/base_automation.py", line 907, in _compute_field_value
return _compute_field_value.origin(self, field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/odoo/19.0/addons/sale/models/sale_order_line.py", line 989, in _compute_qty_invoiced_at_date
line.qty_invoiced_at_date = line.qty_invoiced
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1693, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields_textual.py", line 243, in _insert_cache
super()._insert_cache(records, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1600, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
- opw-5238152, opw-5269996
- upg-3306966, 3444833This update ensures that thumbnails are correctly updated on document shortcuts, even when accessed by public users. Previously, public users lacked thumbnail updates due to access restrictions, leading to inconsistencies. This change resolves a bug where public document shortcuts didn't reflect recent updates.
Original PR description
Bug === 1. Create a request 2. Create a shortcut to that request 3. Share it to public 4. Public upload => The thumbnail is updated on the document, but not on the request. The reason is that the public user has `user_permission = none`, because he has only access with the token, and so we skip the thumbnail propagation. This has no sense, because if we don't have access on the document, we loose the access on the shortcut (even if we are the owner). Task-5485511 Forward-Port-Of: odoo/enterprise#102888
This update resolves a visual issue where document signing would intermittently flicker due to automatic zoom adjustments. The fix removes the code that dynamically changed the zoom level, defaulting to 'Automatic zoom' for a smoother signing experience. This improves user satisfaction and prevents a distracting visual glitch.
Original PR description
Before this commit, when signing a document the zoom would load with 'Automatic zoom' then less than one second later change to another zoom by the code, e.g. '100%', causing a flickering issue. After this commit, the zoom is not flickering anymore as we remove the code of changing the zoom and make the default the 'Automatic zoom'. task-5461663
This update corrects a technical issue in the Accounts Coverage Report that was incorrectly flagging duplicate report lines. The fix ensures accurate reporting by ignoring lines with identical names and codes, preventing misleading error messages. This improves the reliability of financial reporting data.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
This update fixes a bug in the invoice import process that caused incorrect purchase tax settings to be applied when using multiple companies. The issue stemmed from a recent refactoring of the invoice import, and now ensures the correct tax is selected based on the company context. This ensures accurate tax calculations and reporting.
Original PR description
In v18.4, the invoice import has been refactored with these 2 PRs: - [189979](https://github.com/odoo/odoo/pull/189979) - [75327](https://github.com/odoo/enterprise/pull/75327) This introduced a small bug where, in a multi-company setup, an `account.tax` could be selected from the wrong company when `_fetch_mail()` was called from the cron `Mail: Fetchmail Service` or if the method was called manually from the wrong company. Ticket: opw-5375785 Forward-Port-Of: odoo/enterprise#103190
This update resolves an issue that caused a traceback when changing the customer selection in the Ecuadorian POS (l10n_ec_edi_pos) module. The fix guarantees a customer is always selected, either a specific customer or 'Consumidor Final', ensuring proper reporting and compliance with Ecuadorian tax regulations. This improves stability and accuracy for users in Ecuador.
Original PR description
Step to reproduce: - install `l10n_ec_edi_pos` - open pos - ensure "Consumidor Final" is selected as partner - open partner list and deselect the partner Observation: - we get a traceback Cause: - we try to set a partner, without proper checks - Also, in the Ecuadorian localization there should always be a customer selected Fix: - rewrote `selectPartner` function to allow following things for EC localization 1. ensure a customer is always selected, a specific one or "consumidor final" 2. when refunding with "consumidor final" customer, changing partner is allowed opw-5350570 Forward-Port-Of: odoo/enterprise#103868 Forward-Port-Of: odoo/enterprise#102221
This update resolves an issue where the year field in certain payroll reports was incorrectly displaying a comma. Removing this comma ensures accurate reporting and consistent data presentation for Belgian payroll calculations. This change improves the reliability of financial reporting.
Original PR description
. Remove the comma on the year filed on the crossponding reports task-5417861 Forward-Port-Of: odoo/enterprise#102143
This update corrects small errors in the 2026 balance sheet and profit & loss reports for the Danish localization. These errors, identified as logical oversights, have been fixed to ensure accurate financial reporting. This change improves the reliability of key financial data.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id Forward-Port-Of: odoo/enterprise#103830
13 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
Resolved issues and error corrections
Shopee has updated the API paths they use, which previously were used for testing within our Odoo Enterprise system. This update requires a change to our testing environment to ensure accurate and reliable results. This fix ensures our testing remains aligned with Shopee's current API standards.
Original PR description
Shopee has changed the API path and the original testing API paths are no longer valid.
This update ensures the 'Update Prices' button is only displayed when a pricelist is properly configured in the sales order. Previously, the button was incorrectly shown even without a pricelist, leading to potential pricing errors. This change improves data accuracy and simplifies the sales order process for users.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241812
This update ensures that the rating card feature only appears in portal chatter when a module specifically requests it. Previously, rating cards were displayed even when not intended, impacting user experience. This change improves consistency and avoids unnecessary visual elements.
Original PR description
*: test_mail_full Modules using portal rating can set an `data-display_rating` attribute when calling the portal chatter template to indicate whether they want the rating feature displayed. Currently, only two modules have this attribute set to true: ecommerce and elearning. For other modules that don't set this attribute, even if there is a rating, such as when rating a ticket in the helpdesk module, we don't want the rating card feature to be shown in portal chatter. This change ensures that the feature is only available if the module requests it. task-5347848
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments like Chrome. By delaying cleanup steps, the system now ensures the API call is fully processed before attempting to mock it, preventing delays or errors. This resolves compatibility issues with recent Chrome versions.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/odoo#243280
This update fixes a potential issue with Odoo tours that use the Clipboard API. By ensuring the mocking happens before the API call, the system now correctly handles browser permissions and avoids delays or errors, particularly with recent Chrome updates. This improves the reliability of tours in headless environments.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode. Forward-Port-Of: odoo/enterprise#103971
This update resolves a validation error in Odoo Studio that occurred when users tried to add help tooltips to fields in the Contacts list view. The fix adds a necessary attribute to the field definition, allowing for proper customization and preventing the validation error. This ensures Odoo Studio users can configure helpful guidance for their data entries.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357 Forward-Port-Of: odoo/odoo#240261
This update resolves a bug in the website event booth registration tour that caused it to fail. The fix makes the tour more intuitive, mirroring the manual process and improving the user experience. It also streamlines the code for better readability and maintainability.
Original PR description
In this commit, we fix the tour webooth_exhibitor_register It stucks when click on OpenWood Demonstrator 2 because the trigger is not relevant. A user should never be able to click on an invisible input. So in tour, it's the same. Instead of click on div and then invisible input, click on label as you do when you run tour by hand. I'm taking advantage of this commit to remove trivial :enabled on button (implicit) and to change programmatic **run** to declarative **run** to use Hoot event and make them more readable.
This update resolves an issue where users would encounter access errors when closing the 'Thank You' dialog after signing a document from a record they couldn't access. The system now verifies read access to the related record before redirecting, ensuring a smoother sign-off experience for all users.
Original PR description
Version: - 18.0 Steps to reproduce: - Send a signature request to an internal user from a record that the signer cannot access. - The user signs the document and then tries to close the Thank You dialog. Before: - When a user signs a document sent from a record they don’t have access to, closing the "Thank You" dialog triggers an access error. - This happens because the system tries to open the related record after signing, but the signer does not have permission to view that record. After: - Now the system first checks if the signer has read access to the related record before redirecting. Impact: - Users will not see an access error message after signing a document. task-5353126
This update resolves an issue where the HTML editor incorrectly inserted tabs into various content blocks, causing formatting problems. The fix now ensures tabs are only applied to contenteditable paragraph elements, improving the editor's accuracy and user experience when working with mixed content types.
Original PR description
#### Description of the issue this PR addresses: - Tab indentation was applied to non-paragraph and non-contenteditable blocks, leading to incorrect indentation behavior when a selection contained mixed block types. #### Desired behavior after PR is merged: - Filter selected blocks to indent only contenteditable paragraph-related elements (h1–h6, p, pre, blockquote, and div.o-paragraph), while excluding blocks marked as contenteditable="false". #### Steps to Reproduce: - Open a new to-do record. - Insert: Table, Table of Content, Banners, attachment, (18.2 - Toggle List) - Select all editor content using Ctrl + A. - Press the Tab key multiple times. => Multiple editor tab characters are inserted at unintended positions. task-5452410 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where employee names were being incorrectly formatted in payroll reports. The system now correctly assigns first and last names based on the employee's input data, ensuring accurate reporting for Swiss payroll compliance. Updated test data reflects this corrected naming convention.
Original PR description
* Fix _compute_l10n_ch_legal_name method to correctly assign first_name and last_name from employee name (was previously reversed) * Update all SwissDEC test data to use correct "FirstName LastName" format instead of "LastName FirstName" to match the corrected computation logic task-5102851 Forward-Port-Of: odoo/enterprise#95252
This update corrects small errors in the calculations and formatting of the 2026 balance sheet and profit & loss reports for Danish accounting. These changes, identified as a development oversight, ensure the accuracy of financial reporting within the Odoo Enterprise system. No new functionality was added.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id Forward-Port-Of: odoo/enterprise#103830
2 changes
Resolved issues and error corrections
This update resolves an issue where incorrect data was appearing in the Mexican ‘Trial Balance’ accounting report. The problem stemmed from hardcoded values in the report configuration, which has now been corrected by removing a redundant ‘balance’ column. This ensures accurate reporting for Mexican companies.
Original PR description
With l10n_mx company: 1. Add the balance column to the “Trial Balance” accounting report 2. Create a journal entry for the date 12/31/2024 for 5000 as a credit on the account 119.01.01 VAT due and balance it with 5000 as a debit on another account 3. Open the Trial Balance report and click on the “Month 13” filter as well as the year 2024. 4. Notice that the “Month 13” column has some numbers when there should not be a number in that column 5. Delete the balance column from the “Trial Balance” accounting report and notice that the numbers now appear in their appropriate columns. In the _l10n_mx_set_options_month_13 the way to find the initial value, month 13 and end value columns was hardcoded. opw-5222117
This update corrects a data inconsistency in Odoo, reflecting Bulgaria's recent adoption of the Euro as its official currency on January 1, 2026. Previously, Bulgaria was linked to the Bulgarian Lev (BGN). This change ensures accurate currency reporting and financial data within the system.
Original PR description
Description of the issue/feature this PR addresses: Bulgaria adopted the euro as official currency as of 2026-01-01. Update the base country data accordingly. Current behavior before PR: In `res_country_data.xml`, Bulgaria is linked to BGN. Desired behavior after PR is merged: Bulgaria is linked to EUR in `res_country_data.xml`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr