Daily updates from Odoo
Thursday, April 23, 2026
300 changes
22 changes
Enhancements to existing features
This update streamlines how notifications are sent within Odoo. Previously, notifications were delayed, but now they are sent immediately when a 'store' is created, improving efficiency. This change ensures notifications are delivered promptly and reliably, enhancing the user experience.
Original PR description
Since [1], store result is computed at the very end of the TX. As a result, no matter when `bus_send()` is called, the actual value of the notification will be the same: the one computed during bus's precommit hook, which creates the notifications. As a result, calling `bus_send()` manually is useless: we can just call as soon as a store is created, provided it has a bus target. part of task-5242369 [1]: https://github.com/odoo/odoo/pull/256079 enterprise: https://github.com/odoo/enterprise/pull/114187
This update improves WhatsApp functionality by automatically sending messages through the system's messaging bus when a WhatsApp channel is created. This streamlines the process of sending messages and ensures they are properly routed. It's part of a larger effort to enhance WhatsApp communication within Odoo Enterprise.
Original PR description
`Store` automatically calls bus send when a bus channel is given. part of task-5242369 community: https://github.com/odoo/odoo/pull/259865
Resolved issues and error corrections
This update resolves a visual issue where the 'to_review' badge on employee forms wasn't highlighting correctly. This was caused by a change in how tracking messages were stored after a previous update. The fix ensures the badge accurately indicates review tasks, improving the employee workflow.
Original PR description
After master-field-tracking-poc-ppr removed the mail.tracking.value model, tracking messages are now stored with message_type='tracking' instead of 'notification'. The thread_patch.js highlight filter was still matching on 'notification', causing no messages to be found when hovering the to_review badge on the employee form. task-6128747
This update resolves an issue where the 'Scan the QR code to pay' message on the kiosk online payment page was consistently displayed in English, regardless of the selected language. Now, the payment page will correctly translate the QR code instructions based on the user's chosen language setting, improving the user experience for international customers.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update fixes an issue where creating a physical inventory adjustment with a zero quantity difference generated unnecessary journal entries. The change ensures that account moves are only created when there's a valid stock movement, reducing accounting noise and improving data accuracy. This impacts the stock accounting module.
Original PR description
**Issue**: Applying a physical inventory adjustment with a 0 quantity difference creates an account move with 0 debit/credit, resulting in accounting noise. **Steps to reproduce**: - Configure a product with perpetual valuation - Go to Inventory > Configuration > Warehouse Management > Locations - Remove the internal filter and open the "Inventory adjustment" location - Set a Loss Account - Go to physical inventory - Create and apply for this product with counted quantity of 0 - Go to Journal Items -> An item is created **Cause**: While checking whether an `account.move` should be created: https://github.com/odoo/odoo/blob/9dfd673465e4a3326a6caa64c8d61fe7319cbc44/addons/stock_account/models/stock_move.py#L613-L620 The quantity of the `stock.move` is not taken into account. opw-5957406 Forward-Port-Of: odoo/odoo#257650 Forward-Port-Of: odoo/odoo#254331
This update resolves performance issues and crashes when generating the VAT Books Excel report for large invoices. By optimizing memory usage and query execution, the report now runs efficiently even with extensive data, significantly reducing server load and improving export times.
Original PR description
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance…
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance bottlenecks and MemoryError crashes on databases with a massive volume of invoice lines. This PR introduces strict memory management and query optimizations to prevent server crashes and drastically speed up the XLSX export process. ### Current behavior before PR: When exporting the VAT Books report for a large dataset, the system attempts to hold the entire workbook structure in RAM. Additionally, the ORM unnecessarily prefetches fields when iterating over the account.move.line recordset and performs excess sub-queries to look up move_type for journal entries. This combination results in massive memory consumption, slow load times, and eventual server crashes. ### Desired behavior after PR is merged: The VAT Books report generates successfully and efficiently, even on massive databases, with a significantly reduced memory footprint. Specifically: - The ORM bypasses cache bloat by disabling field prefetching (prefetch_fields=False) during the recordset iteration. - The query execution is optimized by changing the search domain from move_type to move_id.move_type, leveraging the existing join table rather than triggering expensive sub-queries. ### Benchmark: The model is iterating through ~1.1M journal items when generating the full report. For Memory: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 1.4GB| 202 MB | | ~32,000 journal items | MemoryError | 278 MB | | ~141,500 journal items | MemoryError | 760 MB | | ~1.1M journal items | MemoryError | 1.4 GB | For Speed: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 2 min | 1.5s | | ~32,000 journal items | MemoryError | 4s | | ~141,500 journal items | MemoryError | 12s | | ~1.1M journal items | MemoryError | 56s | ### Reference opw-6037414 ----------------------------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#112230
This update resolves an issue where product category breadcrumbs displayed incorrectly on different Odoo websites. Specifically, when a product is linked to categories on multiple websites, the breadcrumb would sometimes lead to a 404 error on the incorrect website. The fix ensures the category selection is tied to the current website being viewed, improving the user experience and preventing broken links.
Original PR description
An issue is observed when two categories share the same name but are assigned to different websites, and a product is linked to both categories. Steps to Reproduce: ==================== 1. Create two…
An issue is observed when two categories share the same name but are assigned to different websites, and a product is linked to both categories. Steps to Reproduce: ==================== 1. Create two Ecommerce categories with the same name, one assigned to Website 1 and the other to Website 2. 2. Create a product and assign both categories to it. 3. On Website 1, navigate to the product page and click the category breadcrumb → works correctly 4. On Website 2, navigate to the same product page and click the category breadcrumb → **404 error** Cause: ====== In `_prepare_product_values`, when no category is passed in the URL, the fallback was: https://github.com/odoo/odoo/blob/a253cff9039fcf729a9922b119acad5ec7c7a0bd/addons/website_sale/controllers/main.py#L802 This blindly picks the **first** category from the product's public categories without checking which website it belongs to. If the first category (by ID order) belongs to Website 1, it gets used even when the user is browsing Website 2. The breadcrumb then generates a slug pointing to Website 1's category. When clicked on Website 2, `can_access_from_current_website()` fails for that category, resulting in a 404. Solution: ========= Filter `public_categ_ids` through `can_access_from_current_website()` before selecting the first one. opw-6070191 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260391 Forward-Port-Of: odoo/odoo#258336
This update resolves an issue where saving certain website templates (like order confirmation emails) would trigger an error due to how the system processed empty `t-foreach` loops. The fix ensures the template's HTML is valid, preventing the system from incorrectly modifying the template's structure and causing the error. This improves the stability and reliability of the website's email templates.
Original PR description
**Steps to reproduce:** - Install sale / website_sale - In debug mode, go to Settings app - Go to Technical > Email > Email Templates - Try to edit and save "Sales: Order Confirmation" or "Ecommerce:…
**Steps to reproduce:**
- Install sale / website_sale
- In debug mode, go to Settings app
- Go to Technical > Email > Email Templates
- Try to edit and save "Sales: Order Confirmation" or "Ecommerce: Cart Recovery"
- QWebError is raised: 'IndentationError: unexpected indent'
**Issue:**
Before a `mail.template` is rendered in the html editor it must be valid html (even if they contains qweb elements) to avoid the browser silently moving elements around to match its specifications (and breaking template logic). This is also what happens with `DOMParser.parseFromString` function.
e.g. the browser moves html elements out of the parent `<table>` if they are not the children of a `<tr>` `<td>`.
```xml
<table>
<t t-foreach=...>
<tr>
<td>1</td>
</tr>
</t>
</table>
```
Becomes:
```xml
<t t-foreach=...>
</t>
<table>
<tbody>
<tr>
<td>1</td>
</tr>
</tbody>
</table>
```
**Fix:**
The template is still working if not edited, but we need to ensure the template `body_html` is valid html to avoid the hierarchy modification.
related: https://github.com/odoo/odoo/commit/dbd8b879fd95f3e913e1c777cb8619c4e0673b03
similar issue: https://github.com/odoo/odoo/pull/259548
opw-6055026
Forward-Port-Of: odoo/odoo#256605This update fixes a bug in the HTML editor where email addresses weren't automatically converted into clickable links after a space. Now, typing an email address followed by a space will create a functional mailto link, making it easier to send emails directly from within the editor.
Original PR description
Before this commit: when typing an email address, it's not converted to a mailto link after spacing. After this commit: the mailto link is created after spacing. task- 6053993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258736 Forward-Port-Of: odoo/odoo#257497
This update fixes a display issue in grouped list views where the pager incorrectly showed a limited count instead of the total number of records. The system now accurately reflects the total record count when using a pager, improving the user experience and data accuracy. This ensures users always see the complete picture when navigating large lists.
Original PR description
When a pager is needed in a grouped list view and if the total number of record is greater than the `count_limit` (by default equal to 10000); opening the group or pressing the "Next" button will display the `count_limit` in the Pager.
This behavior can be optimized since the `web_read_group` call already computed the total count.
This commit allow the grouped list pager to display the total record count if it was already computed.
Steps to reproduce:
in a list view with 10 records, all in the same group for simplicity:
```xml
<list limit="2" count_limit="8">
<field name="foo"/>
</list>
```
- group the view by "foo" => The pager displays: `"1-2 / 10"`
- click on the 'next' button of the pager => The pager displays: `"3-4 / 8"`
8, the `count_limit` is shown instead of 10, the number of records in the group.
task-6053705
Forward-Port-Of: odoo/odoo#259858
Forward-Port-Of: odoo/odoo#259562This update resolves an issue where close buttons on views without names triggered unexpected behavior in the system. Now, the system accurately identifies when a close button is used, ensuring proper tracking and functionality. This improves the reliability of action callbacks.
Original PR description
View buttons with no name cause onClosed to be called without any parameters even if special=true or dismiss=true. This commit fixes that which allows to know if a close/discard button caused the action onClosed callback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260482 Forward-Port-Of: odoo/odoo#260301
This update resolves a compatibility issue between Odoo and Python 3.14, specifically related to how data sets are handled. The change ensures Odoo functions correctly on the Resolute environment, addressing a technical detail that improves stability. This update primarily impacts the core system.
Original PR description
Forward-Port-Of: odoo/odoo#259669 Forward-Port-Of: odoo/odoo#258568
This update ensures that signed documents attached to projects or tasks automatically save to the project's designated Documents folder, mirroring the behavior of regular attachments. Previously, signed documents defaulted to 'My Drive,' creating inconsistency. This change improves organization and simplifies document management within Odoo Enterprise.
Original PR description
Steps to Reproduce --- - Request a signature from a project task or project and complete the signing process. - In the chatter, click "Add to Documents" on the signed attachment. Issue --- Signed documents attached to projects or tasks default to "My Drive" when added to Documents, instead of using the project's configured Documents folder. Current Behaviour --- - Regular task/project attachments correctly preselect the project Documents folder. - Signed attachments fall back to "My Drive". Expected Behaviour --- Signed documents linked to projects or tasks should preselect the project's Documents folder, consistent with regular attachments. Fix --- Extend get_documents_operation_add_destination to handle sign.request attachments linked to project.task or project.project, resolving to the corresponding project Documents folder. task - 5226770 Forward-Port-Of: odoo/enterprise#105600
This update simplifies the setup of the Mollie payment method in POS. Previously, a frustrating error prevented users from saving their configuration; now, they can complete the initial setup once. The system will still flag missing API keys, ensuring payments continue to function correctly.
Original PR description
Before this commit, when configuring the Mollie payment method in POS, a validation error would be raised if the associated payment provider did not have the API key set. While this makes sense given that it needs to be set in order for payments to work, it resulted in this unintuitive UX: 1. User fills in all the fields in the Mollie POS payment method form. 2. The user tries to save, but hits the validation error. 3. The user uses the internal link to go to the payment provider and fill in the API key. 4. The user returns to the POS payment method form, but because the form couldn't save they have to fill in everything *again*. This commit removes the validation error, allowing everything to be filled in just once. There will still be an error if trying to make a payment without an API key set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260293
This update streamlines the loading of data for the self-ordering point of sale module. By only retrieving the necessary information, the system now runs more efficiently, particularly when handling self-ordering transactions. This change improves the overall speed and responsiveness of the self-ordering experience.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259126 Forward-Port-Of: odoo/odoo#257865
This update optimizes the loading of data for the self-ordering point-of-sale system. By limiting the fields loaded, the system now runs more efficiently, particularly when handling self-ordering transactions. This results in faster response times and a smoother user experience for customers using self-ordering.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. X-original-commit: ce78609b368e541a70c17141ee5b51543c73c1d0 Forward-Port-Of: odoo/enterprise#113801 Forward-Port-Of: odoo/enterprise#113661
This update fixes an issue where Arabic text on invoices was incorrectly formatted in English reports. The change ensures parentheses and other characters are properly aligned with the Arabic text, improving readability for international customers. This resolves a display problem related to how Odoo generates PDF invoices.
Original PR description
**Problem:** When printing an invoice in English (LTR report) with a product whose name contains Arabic text and parentheses (e.g., لوحة توزيع كهربائية 100 أمبير (شنايدر )), the brackets appear in…
**Problem:** When printing an invoice in English (LTR report) with a product whose name contains Arabic text and parentheses (e.g., لوحة توزيع كهربائية 100 أمبير (شنايدر )), the brackets appear in the wrong position in the generated PDF. **Steps to reproduce:** 1. Create a product named: لوحة توزيع كهربائية 100 أمبير (شنايدر ) 2. Create an invoice with that product 3. Print the invoice PDF in English 4. Observe the brackets are misplaced in the description column **Current behavior:** Parentheses appear detached from the Arabic word they enclose, floating at the wrong end of the text. **Expected behavior:** Parentheses correctly wrap the enclosed Arabic text. **Cause of the issue:** Odoo's report CSS sets `direction: ltr` on elements that are ancestors of the line description span. When CSS `direction: ltr` targets the same element as `dir="auto"`, wkhtmltopdf's WebKit engine lets the CSS rule win, keeping the paragraph base direction as LTR. The Unicode BiDi algorithm then resolves parentheses (neutral characters) using LTR as the base direction, misplacing them. **Fix:** Placing `dir="auto"` directly on the `<span>` that renders the line description — rather than the parent `<td>` — avoids the CSS override. wkhtmltopdf then detects the first strong character (Arabic) and uses RTL as the base direction for that span, allowing the BiDi algorithm to correctly position the brackets. opw-5884712 Forward-Port-Of: odoo/odoo#259594 Forward-Port-Of: odoo/odoo#251190
This update resolves an issue where the Odoo subscription process could miss or unnecessarily replay notifications due to outdated starting points. By establishing a clear, server-provided starting point for each subscription, the system now efficiently delivers notifications and avoids performance problems related to outdated data. This enhances the overall reliability and responsiveness of the live chat feature.
Original PR description
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 fixes an intermittent issue where the receipt logo and QR codes were sometimes missing from printed tickets. The change ensures images are fully loaded before printing, guaranteeing a complete and professional-looking receipt for customers. This improves the overall user experience and brand image.
Original PR description
The receipt logo (and other images like QR codes) was sometimes missing from the printed ticket. This happened intermittently because the receipt image was being generated (captured from an iframe) before the browser had finished decoding and rendering the logo image within that iframe. This commit updates PosTicketPrinterService to use the waitImages utility, ensuring that all images in the receipt's iframe are fully loaded and rendered before returning the iframe for further processing (printing or canvas capture). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258705
This update optimizes the process of searching for channel invitations, which was previously slow due to an expanded dataset. The fix removes unnecessary steps like case-insensitive sorting and duplicate counting, resulting in a faster and more efficient search experience. This improves the responsiveness of the system when inviting users to channels.
Original PR description
Since [1], the check in `search_for_channel_invite` that restricted the search to internal users was removed. As a result, the dataset to process has exploded and the query is very slow. Moreover,…
Since [1], the check in `search_for_channel_invite` that restricted the search to internal users was removed. As a result, the dataset to process has exploded and the query is very slow. Moreover, the method is ordering on `LOWER(name)` which is not indexed, and another query is done to count the total results, which slows down the process even more. This PR fixes those issues by: - Removing the `LOWER` ordering. Ordering in a case sensitive fashion is not that big of a deal anyway. - Removing the count query, fetching one more partner in the search is enough to know if there are more results, executing the same query twice is overkill. - Reducing the number of partner returned: currently 30, but there isn't enough space to display them anyway. task-4526176 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259869
This update fixes a visual inconsistency on the subscription portal. Previously, the portal showed all products from a subscription order, regardless of whether they were invoiced, leading to incorrect tax totals. Now, the portal only displays invoiced product lines, ensuring accurate tax calculations and a consistent user experience.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619 Forward-Port-Of: odoo/enterprise#114088
This update fixes an issue where the timesheet and grid views were displaying incorrectly, with overlapping elements and inconsistent formatting. Specifically, column widths were adjusted to ensure the timesheet's magnifying glass and overtime data were properly displayed without overlap or spanning multiple lines, improving the overall user experience.
Original PR description
# [FIX] web_grid: column width with new time widget in month This commit increases the default width of the grid columns. Prior to this, the magnifying glass in Timesheets overlapped with the times in month scale, because the columns were too small. # [FIX] timesheet_grid: column overtime layout Without this commit, the overtimes were spanning two lines because the columns were too small. This commit changes the layout so that it spans one line to be consistent with the grid values. task-6121017 Forward-Port-Of: odoo/enterprise#114356
13 changes
Enhancements to existing features
This update enhances the reporting of audits by allowing users to search for return types by name. Crucially, it now uses fiscal year periods instead of annual periods for generic, French, and Belgian audits, aligning with updated reporting requirements.
Original PR description
This change enables the user to search for the return types using the name of the return. In addition, it switches the generic audit, french audit and belgian audit to use the fiscal year periodicity instead of the annual periodicity. task: 5948404 Forward-Port-Of: odoo/enterprise#112280
This update adds the ability for users to easily attach documents from the Documents app to invoices and accounting statements through the Accounting Send & Print wizard. Previously, this functionality was limited to other modules like Quotations. This enhancement streamlines the process of sending invoices and statements with supporting documentation, improving efficiency.
Original PR description
The standard mail composer (e.g., used in Quotations) allows users to add files or paste links directly from the Documents app. However, this functionality was missing in the custom `account.move.send` wizard used for Invoicing and Accounting. This commit introduces the 'Add from Documents' feature to the Accounting Send & Print wizard. task- 5905930 Forward-Port-Of: odoo/enterprise#111422
Resolved issues and error corrections
This update fixes an issue where the ‘Scan the QR code to pay’ message on kiosk online payment pages was consistently displayed in English, regardless of the selected language in the Odoo system. Now, the QR code instructions will automatically translate to the user’s preferred language, improving the customer experience for international kiosk payments. This ensures consistent and accurate instructions for all users.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update resolves a critical issue causing crashes and slow performance when generating the VAT Books Excel report for large invoices. By optimizing memory usage and query execution, the report now runs efficiently even with extensive data, significantly improving user experience and system stability.
Original PR description
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance…
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance bottlenecks and MemoryError crashes on databases with a massive volume of invoice lines. This PR introduces strict memory management and query optimizations to prevent server crashes and drastically speed up the XLSX export process. ### Current behavior before PR: When exporting the VAT Books report for a large dataset, the system attempts to hold the entire workbook structure in RAM. Additionally, the ORM unnecessarily prefetches fields when iterating over the account.move.line recordset and performs excess sub-queries to look up move_type for journal entries. This combination results in massive memory consumption, slow load times, and eventual server crashes. ### Desired behavior after PR is merged: The VAT Books report generates successfully and efficiently, even on massive databases, with a significantly reduced memory footprint. Specifically: - The ORM bypasses cache bloat by disabling field prefetching (prefetch_fields=False) during the recordset iteration. - The query execution is optimized by changing the search domain from move_type to move_id.move_type, leveraging the existing join table rather than triggering expensive sub-queries. ### Benchmark: The model is iterating through ~1.1M journal items when generating the full report. For Memory: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 1.4GB| 202 MB | | ~32,000 journal items | MemoryError | 278 MB | | ~141,500 journal items | MemoryError | 760 MB | | ~1.1M journal items | MemoryError | 1.4 GB | For Speed: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 2 min | 1.5s | | ~32,000 journal items | MemoryError | 4s | | ~141,500 journal items | MemoryError | 12s | | ~1.1M journal items | MemoryError | 56s | ### Reference opw-6037414 ----------------------------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#112230
This update streamlines the payment status refresh button in the Odoo Enterprise system. Previously, the button was always visible, leading to unnecessary data requests. Now, it only appears for payments that are actively being processed (pending or unsigned), optimizing performance and reducing system load.
Original PR description
… batches The refresh button was always shown, which could cause unnecessary calls to OdooFin if the payment is finalised (accepted, rejected or canceled). With this change, the button is shown only for payments in progress (pending or unsigned). task-6103900 Forward-Port-Of: odoo/enterprise#113182
This update resolves an issue where close buttons on views without names triggered unexpected behavior in the application. Now, the system accurately identifies when a close button is used, ensuring proper tracking and functionality. This improves the reliability of the application's response to user actions.
Original PR description
View buttons with no name cause onClosed to be called without any parameters even if special=true or dismiss=true. This commit fixes that which allows to know if a close/discard button caused the action onClosed callback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260482 Forward-Port-Of: odoo/odoo#260301
This update resolves an issue where splitting payslips into multiple bank accounts resulted in duplicate <InstrId> tags in SEPA files, a requirement for accurate international payments. The fix adds a unique identifier to each transaction block, ensuring compliance with ISO 20022 standards and preventing potential payment processing errors. This improves the reliability of our SEPA payment exports.
Original PR description
### Issue: If a payslip is split into multiple bank accounts (Salary Allocation), the generated SEPA file contains duplicate <InstrId> tags ### Cause: The `_get_payments_vals` method, `InstrId` is…
### Issue: If a payslip is split into multiple bank accounts (Salary Allocation), the generated SEPA file contains duplicate <InstrId> tags ### Cause: The `_get_payments_vals` method, `InstrId` is based on the payslip ID When a single payslip generates multiple transaction blocks, this ID is duplicated, violating the ISO 20022 requirement for unique instruction identifiers https://knowledge.xmldation.com/support/iso20022/general_rules/instrid This commit adds a unique suffix with the bank_account.id (slip.id-ba.id) to the `InstrId` for each transaction generated to ensure technical uniqueness This is the part of the code that use the payment name: https://github.com/odoo/enterprise/blob/194a8d35ef3e9b47ff566479b0c35c0f963fb42d/account_iso20022/models/account_journal.py#L294-L299 ### Steps to reproduce: - Install `hr_payroll_account_iso20022` with demo data - On the Bank Journal, set a valid IBAN (e.g. BE04957751619131) for `Bank Account Number` - Open the Employee page for Abigail Peterson - In the Personal tab, add 2 Bank Accounts (Send Money: True, Account Number: any) - Click on Salary Allocation and Save (You'll have a 50/50 ratio) - Create a new Pay Run (for Abigail Peterson) - Open the last PaySlip and Validate - Create Payment Report (Export Format: SEPA) - Download the Payment Report and check the <InstrId> tags opw-6069670 Forward-Port-Of: odoo/enterprise#113113
This update corrects a bug preventing users from increasing the quantity of combo products with 'Sell when Out-of-Stock' disabled. The fix ensures that combo products are correctly limited to a maximum quantity, preventing overselling and maintaining accurate inventory levels. This resolves an issue introduced in a recent code change.
Original PR description
You cannot increase the quantity of a combo product that has options with Sell when Out-of-Stock disabled Steps to reproduce: 1. Install Inventory and eCommerce 2. Go to Website > eCommerce >…
You cannot increase the quantity of a combo product that has options with Sell when Out-of-Stock disabled Steps to reproduce: 1. Install Inventory and eCommerce 2. Go to Website > eCommerce > Products and create a new product "Combo" 3. Set the Product Type to Combo, create and edit a Combo Choice "test" with two options "test 1" and "test 2". Both have Track Inventory enabled, 5 Quantity On Hand and Sell when Out-of-Stock disabled 4. Publish product "Combo" to the website 5. Click on smart button "Go to Website" to open the shop page of product "Combo" 6. Try to increase the quantity 7. The quantity is limited to 1 Solution: Always set the quantity input's maximum when `has_max_combo_quantity` is true Issue: We only set the quantity input's maximum if `allow_out_of_stock_order` is false This error was introduced in https://github.com/odoo/odoo/commit/0247538efe788a9ff9a4d58f64470325348a4eaa opw-6050876 Forward-Port-Of: odoo/odoo#260523 Forward-Port-Of: odoo/odoo#257386
This update resolves compatibility issues with Python 3.14 and the Ubuntu Resolute operating system. It includes necessary code changes to ensure Odoo functions correctly, primarily focusing on internal Python optimizations and a fix for a base64 encoding error.
Original PR description
Forward-Port-Of: odoo/odoo#258568
This update prevents errors when sharing helpdesk tickets after the user who created the message has been removed. Previously, deleting a user would cause a link to fail. This fix ensures that shared links continue to function properly, improving the user experience for helpdesk ticket sharing.
Original PR description
Currently, an error occurs when opening a shared helpdesk ticket link if the message author has been deleted. **Steps to Reproduce:(v19.2)** - Install Contacts and Helpdesk modules (with demo data). - Log in as "**Marc Demo**". - Create a helpdesk ticket and send a message via the chatter. - Log in as **Admin**. - Delete the demo user and the related partner from Contacts. - Go to Helpdesk > All Tickets and open the created ticket. - Click "**Share Ticket**" and open the generated link in another browser. Error: `ValueError - Expected singleton: res.partner()` **Cause:** When the partner linked to `message.author_id` is deleted, the recordset becomes empty, which raises a singleton error. Fix: This commit ensures that the author details are only included when the message author exists. sentry-7337698605 Forward-Port-Of: odoo/odoo#260332 Forward-Port-Of: odoo/odoo#254175
This update fixes an error in how Odoo calculates depreciation for companies with non-standard fiscal years (e.g., May-December). Previously, depreciation entries were missed for certain months, now the system accurately determines the correct fiscal year start date for accurate depreciation calculations. This ensures financial reporting aligns with the company's actual accounting period.
Original PR description
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next…
When a company has a shortened fiscal year defined via account.fiscal.year (e.g. May-December), the depreciation board computation for degressive assets incorrectly computes the start of the next fiscal year using `date_from + 1 year` instead of querying the actual next fiscal year. This causes entries for the months between the wrong and correct FY start (e.g. January-April) to be skipped entirely. Step to reproduce: - Create a company with a fiscal year starting in May (e.g. May 1st 2025 to 31st December 2025) - Create an asset with a start date in the 1 December 2025, with a 24 months duration and degressive method - Compute the board and observe that entries from January to April 2026 are missing Fix the FY boundary detection in _recompute_board to query the fiscal year containing the day after the current period end, revert the effective_start_date logic in _compute_board_amount that was masking the root cause, and move the prorata date clamping to _create_move_before_date where it is needed for disposal. opw-6016834 Forward-Port-Of: odoo/enterprise#113521
This change simplifies the setup of the Mollie payment method in POS. Previously, a validation error prevented users from saving their configuration, forcing them to repeat steps. Now, users can complete the initial setup once, though an error will still appear if the API key is missing.
Original PR description
Before this commit, when configuring the Mollie payment method in POS, a validation error would be raised if the associated payment provider did not have the API key set. While this makes sense given that it needs to be set in order for payments to work, it resulted in this unintuitive UX: 1. User fills in all the fields in the Mollie POS payment method form. 2. The user tries to save, but hits the validation error. 3. The user uses the internal link to go to the payment provider and fill in the API key. 4. The user returns to the POS payment method form, but because the form couldn't save they have to fill in everything *again*. This commit removes the validation error, allowing everything to be filled in just once. There will still be an error if trying to make a payment without an API key set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260293
This update fixes a crash that occurred when assigning recruiters in the Odoo recruitment Kanban view. The issue stemmed from an unnecessary parameter in the avatar image URLs, which caused a data access error. Removing this parameter resolves the crash and ensures stable functionality for recruiters.
Original PR description
**Steps to Reproduce:** 1. Open Recruitments 2. Find a job position without a recruiter in the kanban view 3. Clicking on the assign recruiter widget produces a traceback **Bug Cause:** The…
**Steps to Reproduce:** 1. Open Recruitments 2. Find a job position without a recruiter in the kanban view 3. Clicking on the assign recruiter widget produces a traceback **Bug Cause:** The `?unique=` cache related parameter was added to the avatar image URL in the `autoCompleteItem` slot of `KanbanMany2OneAvatarEmployeeField`. This parameter relies on `write_date` being available on the autocomplete suggestion record. However, `web_name_search` only returns `id` and `display_name`, so `write_date` is undefined on autocomplete suggestion records, causing a crash when accessing `autoCompleteItemScope.record.data.write_date.ts`. **Bug Solution:** Remove the `?unique=` parameter from the avatar image URL in the `autoCompleteItem` slot, reverting it to its original form. Cache is unnecessary for autocomplete suggestion avatars as they are only visible for the duration of the dropdown interaction. **Task:** 6092768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
20 changes
New functionality added to Odoo
This update adds the ability for users to easily attach documents from the Documents app to invoices and accounting statements through the Accounting Send & Print wizard. Previously, this functionality was limited to the standard mail composer used in other modules like Quotations. This enhancement streamlines the process of sending invoices and statements with supporting documentation.
Original PR description
The standard mail composer (e.g., used in Quotations) allows users to add files or paste links directly from the Documents app. However, this functionality was missing in the custom `account.move.send` wizard used for Invoicing and Accounting. This commit introduces the 'Add from Documents' feature to the Accounting Send & Print wizard. task- 5905930 Forward-Port-Of: odoo/enterprise#111422
Enhancements to existing features
This update enhances the process for finding audit return types by allowing searches based on return names. It also updates the standard, French, and Belgian audit reports to use fiscal year periods instead of annual periods, streamlining reporting and aligning with current regulations.
Original PR description
This change enables the user to search for the return types using the name of the return. In addition, it switches the generic audit, french audit and belgian audit to use the fiscal year periodicity instead of the annual periodicity. task: 5948404 Forward-Port-Of: odoo/enterprise#112280
This update enhances the visibility of tax return export files for users. Instead of being attached to the record, the generated XML and PDF files are now automatically posted as notes in the chatter thread upon tax return validation, making them easily accessible. This simplifies access to important tax documentation.
Original PR description
The xml and pdf of export of the tax return are not so visible for the user, thus the change creates the files on the validation of the returns and exports them to the chatter where they would be pinned task: 5871091 Forward-Port-Of: odoo/enterprise#111769
This update clarifies French accounting reports by splitting account 649 into two new accounts (6491 and 6492). This change accurately separates social security charges from salaries, aligning with French accounting standards (ANC PCG 2026). The original account remains but is marked as deprecated.
Original PR description
Splitting account 649 into two new accounts (6491 and 6492) is necessary to handle the Profit and Loss report properly. This ensures we can accurately separate social security charges from salaries in the report. Reference: ANC PCG 2026, page 445, note (h) https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/recueil/RECEUIL-PCG-2026-AVEC-COUVERTURE.pdf task-6053784 Forward-Port-Of: odoo/odoo#257398 Forward-Port-Of: odoo/odoo#255038
Resolved issues and error corrections
This update fixes an issue where the tip amount was incorrectly displayed in the Point of Sale (PoS) system when using a locale with a comma as the decimal separator. The fix ensures that the tip amount is correctly formatted based on the user's selected language and regional settings, improving the user experience and accuracy of payments.
Original PR description
Steps to reproduce 1. Set language decimal separator to "," and thousands separator to "." 2. Open PoS, create an order (e.g. total 17.85) 3. Pay more than the total (e.g. 22) 4. Open the Tip popup —…
Steps to reproduce
1. Set language decimal separator to "," and thousands separator to "."
2. Open PoS, create an order (e.g. total 17.85)
3. Pay more than the total (e.g. 22)
4. Open the Tip popup — it shows 415 instead of 4,15
5. Confirm — tip is set to 415
Issue
When overpaying, the change is passed as `startingValue` to the NumberPopup via
`String(amount)` (https://github.com/odoo/odoo/blob/b3d78644bc873b3b22f3fd5f8fc0cd27ce38999f/addons/point_of_sale/static/src/app/screens/payment_screen/payment_screen.js#L232),
which always uses "." as decimal separator. This value is used directly as the
display buffer in NumberPopup
(https://github.com/odoo/odoo/blob/b3d78644bc873b3b22f3fd5f8fc0cd27ce38999f/addons/point_of_sale/static/src/app/components/popups/number_popup/number_popup.js#L53),
so the user already sees "415" instead of "4,15" when the popup opens. When the
user confirms, `computeNewTip` parses this value with the locale-aware `parseFloat`
from `@web/views/fields/parsers`
(https://github.com/odoo/odoo/blob/b3d78644bc873b3b22f3fd5f8fc0cd27ce38999f/addons/point_of_sale/static/src/app/screens/payment_screen/payment_screen.js#L279
and https://github.com/odoo/odoo/blob/b3d78644bc873b3b22f3fd5f8fc0cd27ce38999f/addons/web/static/src/views/fields/parsers.js#L73-L83),
which uses `localization.thousandsSep` and `localization.decimalPoint` to interpret
the string. With "," as decimal separator and "." as thousands separator,
`parseFloat("4.15")` treats the "." as a thousands separator, strips it, and
returns 415 instead of 4.15.
opw-5895622This update resolves an issue where the 'Configuration' menu was hidden for users with 'All Timesheets' access, preventing them from managing billing targets. The fix ensures that billing-related menus are correctly displayed or hidden based on user permissions and feature settings, improving usability for approvers.
Original PR description
Steps to reproduce Bug 1: 1. Login as a user with "All Timesheets" (Approver) access. 2. Disable the "Timesheet Assistant" feature for this user. 3. Ensure "Billing Rate Indicators" is enabled in…
Steps to reproduce Bug 1:
1. Login as a user with "All Timesheets" (Approver) access.
2. Disable the "Timesheet Assistant" feature for this user.
3. Ensure "Billing Rate Indicators" is enabled in settings.
Steps to reproduce Bug 2:
1. Login as a user with "All Timesheets" (Approver) access.
2. Disable the "Billing Rate Indicators" setting in company settings.
3. Ensure "Timesheet Assistant" is enabled in settings.
Steps to reproduce Bug 3:
1. Only install 'sale_timesheet_enterprise'.
2. Go to Timesheets > Configuration > Settings.
3. Toggle "Billing Rate Indicators" (timesheet_show_rates) or change the encoding unit (timesheet_encode_uom_id), then save and check the menus.
Issue:
1. The "Configuration" menu is hidden, preventing access to billing targets even if the user has "All Timesheets" access.
2. The "Billing Time Targets" menu is still visible inside Configuration even if the "Billing Rate Indicators" feature is disabled in the settings.
3. Menu visibility does not update immediately after saving the settings. Menus that should appear (e.g., "Employee Billing Time Targets" or "Timesheets Assistant") remain hidden, or vice versa, until the cache is cleared or the server is restarted.
Cause:
1. The `hr_timesheet_enterprise_menu_configuration` was restricted in XML to groups that excluded "All Timesheets" users.
2. The `_load_menus_blacklist` logic in Python only blacklisted billing menus for users who were both Managers and System Admins, leaving them visible to regular Approvers even when the feature was disabled.
3. The load_menus method is decorated with @ormcache and stored in the Registry LRU cache. Menu visibility depends on timesheet_show_rates and timesheet_encode_uom_id through _load_menus_blacklist. When this field is updated, the ORM does not automatically invalidate the cached load_menus result because these specific fields are not part of the configuration fields. As a result, the stale old menu remains in memory.
Fix:
- Updated XML to include `hr_timesheet.group_hr_timesheet_approver` in the Enterprise Configuration menu permissions.
- Refactored `_load_menus_blacklist` to:
- Hide all billing-related menus for all users when the feature is disabled.
- Hide the parent Configuration menu if it would otherwise be empty.
- Override the write method in res.company in both modules and explicitly call env.registry.clear_cache() when the relevant configuration fields are modified.
task-5428010This update corrects a bug where night shift templates created with specific start times would incorrectly extend shift durations by one day. The fix ensures accurate calculation of shift lengths when using templates, preventing overestimation of work time. This improves the reliability of shift planning.
Original PR description
Issue: ---------------------------------------- Creating a night shift from a template produces a shift spanning over one additional day. Steps to reproduce: ---------------------------------------- - Create a planning shift template form 23h to 1h the next day (2h) - It must have a span over 2 working days - Create a shift and use this template - The shift spans over one more day Cause: ---------------------------------------- In `_calculate_start_end_dates()`, we call `plan_days()` with `start` having the hours specified. So in `plan_days()` when retrieving the worked days, the first day is ignored because the resource is not supposed to be working from 23h to 1h (considering their calendar). Then we count two days, and so the end date is offset by one day. Solution: ---------------------------------------- We should call `plan_days()` without the hour specified so we make sure the first day is included in the count. opw-6134844
This update fixes an issue where the ‘Scan the QR code to pay’ message on kiosk online payment pages was consistently displayed in English, regardless of the user’s selected language. Now, the payment page will correctly display the QR code instructions in the language the user has set for their Odoo instance, improving the user experience for international kiosk payments.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update resolves a problem where the website's interactive tour wouldn't consistently disappear after use. The fix ensures the tour's iframe is fully loaded before the edit mode is initiated, improving the user experience and preventing unexpected behavior.
Original PR description
This commit fixes a non-deterministic problem of the tour by ensuring the iframe is ready before opening an edit mode. runbot-240987 Forward-Port-Of: odoo/odoo#260309
This update resolves a critical issue causing crashes and slow performance when generating the VAT Books Excel report for large invoices. By optimizing memory usage and query execution, the report now runs efficiently even with extensive data, improving user experience and system stability.
Original PR description
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance…
Related Ticket: https://www.odoo.com/odoo/project/49/tasks/6037414 ### Description of the issue/feature this PR addresses: Generating the "VAT Books" Excel report causes severe performance bottlenecks and MemoryError crashes on databases with a massive volume of invoice lines. This PR introduces strict memory management and query optimizations to prevent server crashes and drastically speed up the XLSX export process. ### Current behavior before PR: When exporting the VAT Books report for a large dataset, the system attempts to hold the entire workbook structure in RAM. Additionally, the ORM unnecessarily prefetches fields when iterating over the account.move.line recordset and performs excess sub-queries to look up move_type for journal entries. This combination results in massive memory consumption, slow load times, and eventual server crashes. ### Desired behavior after PR is merged: The VAT Books report generates successfully and efficiently, even on massive databases, with a significantly reduced memory footprint. Specifically: - The ORM bypasses cache bloat by disabling field prefetching (prefetch_fields=False) during the recordset iteration. - The query execution is optimized by changing the search domain from move_type to move_id.move_type, leveraging the existing join table rather than triggering expensive sub-queries. ### Benchmark: The model is iterating through ~1.1M journal items when generating the full report. For Memory: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 1.4GB| 202 MB | | ~32,000 journal items | MemoryError | 278 MB | | ~141,500 journal items | MemoryError | 760 MB | | ~1.1M journal items | MemoryError | 1.4 GB | For Speed: | # Input Data | Before PR | After PR| | -------- | -------- | -------- | | ~7,800 journal items | 2 min | 1.5s | | ~32,000 journal items | MemoryError | 4s | | ~141,500 journal items | MemoryError | 12s | | ~1.1M journal items | MemoryError | 56s | ### Reference opw-6037414 ----------------------------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#112230
This update streamlines the payment refresh button in the Odoo Enterprise system. Previously, the button was always visible, leading to unnecessary checks. Now, it only appears for payments that are actively being processed (pending or unsigned), optimizing system performance.
Original PR description
… batches The refresh button was always shown, which could cause unnecessary calls to OdooFin if the payment is finalised (accepted, rejected or canceled). With this change, the button is shown only for payments in progress (pending or unsigned). task-6103900 Forward-Port-Of: odoo/enterprise#113182
This update resolves an issue where close buttons on web views without names triggered unexpected behavior in the system. Now, the system accurately identifies when a close button is used, ensuring proper tracking and functionality. This improves the reliability of web view actions.
Original PR description
View buttons with no name cause onClosed to be called without any parameters even if special=true or dismiss=true. This commit fixes that which allows to know if a close/discard button caused the action onClosed callback. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260482 Forward-Port-Of: odoo/odoo#260301
This update resolves compatibility issues with Python 3.14 and the Ubuntu Resolute operating system. The changes include necessary opcode additions and improvements to data handling, ensuring continued stability and functionality of Odoo.
Original PR description
Forward-Port-Of: odoo/odoo#258568
This update fixes an issue where draft stock moves were incorrectly flagged as unavailable, even when sufficient stock existed. The change adjusts how availability is calculated to accurately reflect available quantities, ensuring accurate forecasting and preventing order fulfillment problems. This improves the reliability of stock management.
Original PR description
Steps to reproduce: - Create a storable product "P1" - Update on-hand quantity to 2 units - Create a delivery with 2 units of P1 and keep it in draft state Problem: The forecast availability is…
Steps to reproduce: - Create a storable product "P1" - Update on-hand quantity to 2 units - Create a delivery with 2 units of P1 and keep it in draft state Problem: The forecast availability is displayed in red (not available), even though the stock is sufficient to fulfill the move. Explication: For draft consuming moves, the forecast availability is computed as: `virtual_available - move.product_qty` In the case where stock exactly matches the demand, this results in 0. However, on the JS side, availability is evaluated with: `forecast_availability >= product_qty` So with forecast_availability = 0 and product_qty = 2, the condition evaluates to False, incorrectly marking the move as not available. https://github.com/odoo/odoo/blob/c7fede7f44c668ccc0a094d8341c3cae8879a7f1/addons/stock/static/src/widgets/forecast_widget.js#L31 Solution: When the available quantity is sufficient to cover the move (using float_compare), set forecast_availability to the full available quantity instead of subtracting the move quantity. This ensures the JS condition correctly evaluates to True and the move is marked as available. opw-5159142 Forward-Port-Of: odoo/odoo#258504 Forward-Port-Of: odoo/odoo#257354
This change simplifies the setup of the Mollie payment method in POS. Previously, a validation error blocked users from saving their configuration, requiring them to repeat steps. Now, users can complete the initial setup once, and an error will still appear if the API key isn't provided before a payment is made.
Original PR description
Before this commit, when configuring the Mollie payment method in POS, a validation error would be raised if the associated payment provider did not have the API key set. While this makes sense given that it needs to be set in order for payments to work, it resulted in this unintuitive UX: 1. User fills in all the fields in the Mollie POS payment method form. 2. The user tries to save, but hits the validation error. 3. The user uses the internal link to go to the payment provider and fill in the API key. 4. The user returns to the POS payment method form, but because the form couldn't save they have to fill in everything *again*. This commit removes the validation error, allowing everything to be filled in just once. There will still be an error if trying to make a payment without an API key set. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260293
This update corrects a visual issue on the subscription portal where product lines weren't correctly aligned with tax totals. The change ensures that only invoiceable products are displayed, resolving the mismatch and providing accurate tax calculations for customers. This improves the clarity and reliability of subscription information.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619 Forward-Port-Of: odoo/enterprise#114088
This update fixes a previous issue where invoice settlement could fail if the commercial partner information wasn't fully loaded. The change streamlines the process by directly using the partner ID from the invoice data, preventing errors and ensuring smooth invoice settlement. This improves the reliability of the POS system.
Original PR description
Before this commit, it was possible that commercial_partner_id was not loaded, which caused an error when settling an invoice. This commit fixes the issue by avoiding the need to load the full partner record. Since only the partner ID is required to load the account move, it is now read directly from the raw data, which already includes the ID. opw-6023150 Forward-Port-Of: odoo/enterprise#113852 Forward-Port-Of: odoo/enterprise#111957
This update enhances the account reports experience on mobile devices and touchscreens. The chatter is now consistently visible at the bottom of the screen, and the annotation icon is always accessible, addressing previous issues where it was hidden or required a hover. This ensures users can easily review and interact with reports on any device.
Original PR description
Previously, the chatter was hidden on device too smalls and the annotation icon was only visible with hover so not visible on touch devices such as phones or tablets. Now, we have the chatter at the bottom when the device is too small and always display the annotation icon on touch devices. task-5106852 Forward-Port-Of: odoo/enterprise#95737
This update fixes an issue where floors were incorrectly displayed in the restaurant POS system. Previously, floors were loaded through indirect processes, leading to inaccurate floor selections. Now, the system correctly shows only the floors directly assigned to the current restaurant configuration.
Original PR description
Floors loaded indirectly (e.g. via recursive loading of paid orders) could appear in the floor selector even if they belonged to a different PoS config. The selector was iterating over the full in-memory model store instead of the floors explicitly assigned to the current config. opw-6025172 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259537 Forward-Port-Of: odoo/odoo#257113
This update fixes an issue where child contacts of German companies were incorrectly flagged as companies when the l10n_de_reports module was installed. The change ensures that only companies with their own distinct commercial entities are recognized as such, improving the accuracy of German tax reporting. This prevents misclassification and potential reporting errors.
Original PR description
Problem: When l10n_de_reports is installed, child contacts of a German company are incorrectly considered as companies as well. Steps to reproduce: 1. Install l10n_de_reports. 2. Create a company with a German VAT number (e.g. DE123456789). 3. Create a child contact under that company. 4. The child contact will be incorrectly considered as a company. Cause: If l10n_de_reports is installed, any partner with a German VAT number (DE + 9 digits) is considered as a company. Since child contacts share the same VAT as their company, they would be considered as companies as well, which is not correct. However, a partner should only be considered as a company if they are their own commercial entity. https://github.com/odoo/odoo/blob/e6bd6b106c376336594edd868c09505032008ac1/odoo/addons/base/models/res_partner.py#L819
5 changes
Resolved issues and error corrections
This update corrects a reporting error that incorrectly showed planned hours on public holiday days. The fix ensures the system accurately excludes public holidays, regardless of whether they're linked to a specific work schedule, and accounts for timezone differences to prevent date discrepancies.
Original PR description
### Steps to reproduce: - Install project_timesheet_forecast module - Configure your database to have a far timezone (Montevideo/Uruguay in my case) - Create a public holiday starts from 12AM to…
### Steps to reproduce: - Install project_timesheet_forecast module - Configure your database to have a far timezone (Montevideo/Uruguay in my case) - Create a public holiday starts from 12AM to 11:59PM with a calendar - Create a planning slot for a resource that overlap with the public holiday - Check the Timesheets / Planning analysis report - Group by employees > day **- Check the date of the public holiday and notice there are still planned hours shown** - Remove the calendar from the public holidays that we created previously - Check the report once again **- Notice the day of the public holiday and the day after has no planned hours** ### Cause: In the query we are using to exclude the leave days from the report we only exclude the ones that has calendar_id assigned, not taking into consideration that some of the public holiday are general and is not applied to just one working schedule. Also if we have a leave starting midnight to 11:59PM since we store dates in database as UTC for timezone like Uruguay's one it will shift the end with one day which will introduce inconsistencies ### Fix: We check if the calendar_id is null on the resource_calendar_leaves and make sure we take timezone of the resource into account when checking the dates of the leaves. opw-5027070 Forward-Port-Of: odoo/enterprise#111846
This update fixes an issue where the quantity of scanned packages was incorrectly displayed after re-entering a delivery order with full packaging enabled. The change ensures that the system accurately reflects the remaining quantity of a package after it's been picked, providing a more reliable view of stock levels. This improves the accuracy of inventory management.
Original PR description
Issue ----- When using full packaging in barcode, leaving the operation and opening it again shows incorrect quantity for already scanned packages. Steps to reproduce ----- - Enable packages - Create…
Issue ----- When using full packaging in barcode, leaving the operation and opening it again shows incorrect quantity for already scanned packages. Steps to reproduce ----- - Enable packages - Create a product with one package in stock - Operation Types > Delivery Orders, set Move Entire Packages to true - Create a delivery for a package - Scan the package barcode - Exit the delivery - Re-enter the delivery > Quantity for the line is 1/false Cause ----- The line is picked, so it is considered as not reserved https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/models/barcode_picking_model.js#L288-L289 when doing https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/models/barcode_picking_model.js#L812-L813 This leads to `qtyDemand` returning false instead of 1 https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/components/package_line.js#L17-L18 ----- Ticket: opw-5960629 Forward-Port-Of: odoo/enterprise#114451 Forward-Port-Of: odoo/enterprise#113816
This update resolves an issue where unprivileged users received an Access Error when viewing vendor bills generated from emailed CFDI documents. The fix ensures that attachments related to these bills are correctly linked, granting all users access to the necessary information. This improves usability and prevents workflow disruptions.
Original PR description
When an unprivileged user attempts to view a vendor bill generated from an emailed CFDI, an Access Error is shown Steps to reproduce: - Set up an MX Company - Configure an incoming mail server - Set up an email alias for the Vendor Bill journal - Send/Receive a CFDI via the incoming mail server - Log in as an unprivileged user and check the newly created bill Issue: An Access Error is raised when the user attempts to view the bill Analysis: During the incoming mail processing, XML files are created as plain text documents and their association with the parent record may be stripped. Later on, if an `l10n_mx_edi.document` is successfully generated from the file, the underlying `ir.attachment` record remains without a `res_model` and `res_id`, creating the access issue when a standard users attempt to load the attachment data opw-5487905
This update clarifies French accounting reports by splitting an account to accurately separate social security charges from salaries. This change ensures compliance with French tax regulations (ANC PCG 2026) and provides more precise financial reporting. The old account remains for legacy systems but is marked as deprecated.
Original PR description
Splitting account 649 into two new accounts (6491 and 6492) is necessary to handle the Profit and Loss report properly. This ensures we can accurately separate social security charges from salaries in the report. Reference: ANC PCG 2026, page 445, note (h) https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/recueil/RECEUIL-PCG-2026-AVEC-COUVERTURE.pdf task-6053784 Forward-Port-Of: odoo/enterprise#112905 Forward-Port-Of: odoo/enterprise#111420
This update ensures that the VIES summary reports generated for Czech companies include only the numeric VAT number, as required by official regulations. Previously, the reports incorrectly included the country code ('CZ'), which could cause issues with data processing and compliance. This change corrects the report format to meet VIES standards.
Original PR description
**Steps to reproduce:** - Install the `l10n_cz_reports` module and switch to a `CZ Company` - Create an invoice for a customer with a VAT number, add a product, and set the Transaction Code (enable…
**Steps to reproduce:** - Install the `l10n_cz_reports` module and switch to a `CZ Company` - Create an invoice for a customer with a VAT number, add a product, and set the Transaction Code (enable it from the optional columns if needed). - Navigate to Reporting > VIES Summary Report. - Observe the value in the `VAT Number` column (includes country code). - From the dropdown, export the report as XML. **Observation:** In the generated XML file, the `c_vat` field contains the VAT number including the country code (e.g., `CZ12345679`) instead of only the numeric part (`12345679`). **Root cause:** At [1], the VAT number is directly taken from the report lines without removing the country code. **Fix:** This commit ensures that the `c_vat` field contains only the VAT number without the country code, complying with the official VIES XML format requirements. Ref: https://adisspr.mfcr.cz/dpr/adis/idpr_pub/epo2_info/popis_struktury_detail.faces?zkratka=DPHSHV#:~:text=Tax%20identification%20number%20of%20the%20purchaser%20(only%20the%20numeric%20part) [1]: https://github.com/odoo/enterprise/blob/c4f2c3442f30f5ac972dd136a3642acc5bcc6da2/l10n_cz_reports_2025/models/l10n_cz_vies_summary_handler.py#L29-L62 opw-6093259 Forward-Port-Of: odoo/enterprise#114730 Forward-Port-Of: odoo/enterprise#113083
8 changes
Resolved issues and error corrections
This update corrects a reporting error that incorrectly displayed planned hours on public holiday days. The fix ensures the system accurately excludes public holidays, regardless of whether they're linked to a specific calendar, and accounts for timezone differences to prevent date inconsistencies.
Original PR description
### Steps to reproduce: - Install project_timesheet_forecast module - Configure your database to have a far timezone (Montevideo/Uruguay in my case) - Create a public holiday starts from 12AM to…
### Steps to reproduce: - Install project_timesheet_forecast module - Configure your database to have a far timezone (Montevideo/Uruguay in my case) - Create a public holiday starts from 12AM to 11:59PM with a calendar - Create a planning slot for a resource that overlap with the public holiday - Check the Timesheets / Planning analysis report - Group by employees > day **- Check the date of the public holiday and notice there are still planned hours shown** - Remove the calendar from the public holidays that we created previously - Check the report once again **- Notice the day of the public holiday and the day after has no planned hours** ### Cause: In the query we are using to exclude the leave days from the report we only exclude the ones that has calendar_id assigned, not taking into consideration that some of the public holiday are general and is not applied to just one working schedule. Also if we have a leave starting midnight to 11:59PM since we store dates in database as UTC for timezone like Uruguay's one it will shift the end with one day which will introduce inconsistencies ### Fix: We check if the calendar_id is null on the resource_calendar_leaves and make sure we take timezone of the resource into account when checking the dates of the leaves. opw-5027070 Forward-Port-Of: odoo/enterprise#111846
This update fixes an issue where the quantity of scanned packages was incorrectly displayed after re-entering a delivery order. When 'Move Entire Packages' is enabled, the system now accurately reflects the quantity of picked packages, ensuring accurate inventory tracking. This improves the reliability of barcode scanning for package deliveries.
Original PR description
Issue ----- When using full packaging in barcode, leaving the operation and opening it again shows incorrect quantity for already scanned packages. Steps to reproduce ----- - Enable packages - Create…
Issue ----- When using full packaging in barcode, leaving the operation and opening it again shows incorrect quantity for already scanned packages. Steps to reproduce ----- - Enable packages - Create a product with one package in stock - Operation Types > Delivery Orders, set Move Entire Packages to true - Create a delivery for a package - Scan the package barcode - Exit the delivery - Re-enter the delivery > Quantity for the line is 1/false Cause ----- The line is picked, so it is considered as not reserved https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/models/barcode_picking_model.js#L288-L289 when doing https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/models/barcode_picking_model.js#L812-L813 This leads to `qtyDemand` returning false instead of 1 https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/components/package_line.js#L17-L18 ----- Ticket: opw-5960629 Forward-Port-Of: odoo/enterprise#114451 Forward-Port-Of: odoo/enterprise#113816
This update resolves an issue preventing developers from creating new, empty Odoo repositories for testing and development. The change relaxes a validation check, allowing empty repositories to be created without errors, streamlining the development workflow. This improves developer productivity and simplifies the process of experimenting with new Odoo modules.
Original PR description
Initialize a new empty git repository where you are going to vide-code some new Odoo modules. Because the repository is empty (no addon yet) the CLI fails with an "option --addons-path: the path <path> is not a valid addons directory". This makes vide-coder sad, and bigrams want vide-coders to be happy, so drop the sanity-check and also accept empty addons. Forward-Port-Of: odoo/odoo#259007 Forward-Port-Of: odoo/odoo#256913
This update corrects a display issue where the ‘Scan the QR code to pay’ message on kiosk online payments was consistently shown in English, regardless of the selected language. This ensures that all users, in their preferred language, can correctly initiate payments through the kiosk’s online payment system. The fix improves the user experience for international customers.
Original PR description
Currently if you use an online payment with the kiosk, the payment page with the QR code is not translated. Steps to reproduce: ------------------- * Create an online payment method with demo * Install any language, you don't need to switch * Open kiosk configurations * Set the online pm in the available payment methods * Set the language istalled as the default language * Make an order, go to payment page > "Scan the QR code to pay" is written in english no matter the language opw-6074194 Forward-Port-Of: odoo/odoo#259895
This update fixes an issue where the emission factor date range wasn't displayed accurately. The fix adds an 'always_range' option, ensuring the correct validity period is shown. This improves the reliability of ESG reporting data.
Original PR description
Before this commit, the validity period was not correctly displayed because the always_range option was missing no related task
This update resolves compatibility issues with Python 3.14 and the Ubuntu Resolute operating system. It includes necessary code changes to ensure Odoo continues to function correctly, primarily related to internal Python operations and data handling.
Original PR description
Forward-Port-Of: odoo/odoo#258568
This update fixes a rare crash that could occur when canceling drag sequences in the Odoo application. The issue stemmed from a timing problem with how the system registered and executed cancellation callbacks. By delaying the variable assignment, this change ensures the callback is always available, preventing the crash and improving stability.
Original PR description
### [FIX] web: fix crash when cancelling drag sequence Before this commit: drag sequences could be aborted by new drag sequences; the way this worked is that a new sequence would register its "cancel" callback in a global variable, and when another sequence is started, it calls that variable to cancel the previous one. The issue was that the variable was assigned too early; before the actual "cancel" callback was available. This means that in edge cases where 2 sequences would be triggered in less than (effectively) a resolved promise, the callback would not be available and a crash would occur. This commit moves the variable assignment *after* the "cancel" callback is made available, ensuring there is no crash. Runbot [243113](https://runbot.odoo.com/odoo/error/243113) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260594
This update ensures that the VIES summary reports generated for Czech companies correctly format VAT numbers in the XML output. Previously, the reports included the country code, which is now removed to comply with official VIES XML requirements, ensuring accurate reporting and data exchange.
Original PR description
**Steps to reproduce:** - Install the `l10n_cz_reports` module and switch to a `CZ Company` - Create an invoice for a customer with a VAT number, add a product, and set the Transaction Code (enable…
**Steps to reproduce:** - Install the `l10n_cz_reports` module and switch to a `CZ Company` - Create an invoice for a customer with a VAT number, add a product, and set the Transaction Code (enable it from the optional columns if needed). - Navigate to Reporting > VIES Summary Report. - Observe the value in the `VAT Number` column (includes country code). - From the dropdown, export the report as XML. **Observation:** In the generated XML file, the `c_vat` field contains the VAT number including the country code (e.g., `CZ12345679`) instead of only the numeric part (`12345679`). **Root cause:** At [1], the VAT number is directly taken from the report lines without removing the country code. **Fix:** This commit ensures that the `c_vat` field contains only the VAT number without the country code, complying with the official VIES XML format requirements. Ref: https://adisspr.mfcr.cz/dpr/adis/idpr_pub/epo2_info/popis_struktury_detail.faces?zkratka=DPHSHV#:~:text=Tax%20identification%20number%20of%20the%20purchaser%20(only%20the%20numeric%20part) [1]: https://github.com/odoo/enterprise/blob/c4f2c3442f30f5ac972dd136a3642acc5bcc6da2/l10n_cz_reports_2025/models/l10n_cz_vies_summary_handler.py#L29-L62 opw-6093259 Forward-Port-Of: odoo/enterprise#114730 Forward-Port-Of: odoo/enterprise#113083
4 changes
Resolved issues and error corrections
This update adds a test to ensure the asynchronous export of DAS2 reports functions correctly. This follows up on a previous fix (oondo/enterprise#114449) to improve the reliability of this important reporting feature. Adding this test provides additional assurance of the fix's stability.
Original PR description
Following odoo/enterprise#114449, we're safeguarding this fix by adding a test. No task ID
This update resolves inconsistencies in translations for the account asset and account reports modules, specifically for French (Belgium, Canada, and France) locales. The team removed outdated or incorrect translation overrides, ensuring users see accurate and consistent labels within the Odoo Enterprise application. This improves the overall user experience and data integrity.
Original PR description
There were some translation overrides for `fr_BE` and `fr_CA` that were incorrect or unnecessary. We are deleting these files so they use the correct translations in `fr` instead. In the `nl_BE` translation, we are fixing a menu item so it is shorter, but still correct. task-5921458 Forward-Port-Of: odoo/enterprise#114469 Forward-Port-Of: odoo/enterprise#106998
This update corrects a visual issue on the subscription portal where product lines weren't correctly aligned with tax calculations. The change ensures that only invoiceable product lines are displayed, resulting in accurate tax totals and a consistent view for customers. This improves the clarity and reliability of subscription information presented to users.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619 Forward-Port-Of: odoo/enterprise#114088
This update resolves an issue where missing tracking data from orders could cause shipping validation failures and incorrect tracking URLs. The fix handles cases where the 'tracker' object is null, preventing errors and ensuring accurate shipping confirmations. Easypost support suggested a delay between order creation and tracking retrieval as a potential workaround.
Original PR description
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs…
Problem: 'tracker' object in response from GET /orders/:id request can sometimes be null. This means that when the mail template 'mail_template_data_delivery_confirmation' is sent, a traceback occurs with error: TypeError: 'NoneType' object is not subscriptable. As a result the picking is not validated in odoo but a shipping has succesfully been created in the easypost backend. Solution: Prevent traceback form happening, picking gets correctly validated and carrier_tracking_url field is empty. Transcript from Easypost support: << I'm also seeing the tracker showing as null when reviewing the response. I'll go ahead and create a ticket for the engineering team to investigate. I can see that the tracking code is being returned in the request, but the full tracking object is not. Since this appears to be happening on a case-by-case basis, you may want to allow more time between the BUY and the GET requests, as I noticed they are being triggered very close together. I'm not certain if that's related, but it may be worth trying as a troubleshooting step while we have this under review. >> opw-5402415 Forward-Port-Of: odoo/enterprise#111833
9 changes
Enhancements to existing features
This update expands access to return type configuration options within the Odoo Enterprise accounting reports module. Previously, these settings were limited to debug mode, hindering user flexibility. Now, these options are available for authorized users, streamlining report customization and improving usability.
Original PR description
Before, the menu return types in configuration was only available in debug mode. Now it is available for the group `account.group_account_readonly` task-5912751
Resolved issues and error corrections
This update fixes an issue where the quantity of scanned packages was incorrectly displayed after re-entering a delivery order with full packaging enabled. Previously, the system didn't properly track reserved quantities, leading to inaccurate counts. Now, the system correctly reflects the picked quantity, ensuring accurate inventory management.
Original PR description
Issue ----- When using full packaging in barcode, leaving the operation and opening it again shows incorrect quantity for already scanned packages. Steps to reproduce ----- - Enable packages - Create…
Issue ----- When using full packaging in barcode, leaving the operation and opening it again shows incorrect quantity for already scanned packages. Steps to reproduce ----- - Enable packages - Create a product with one package in stock - Operation Types > Delivery Orders, set Move Entire Packages to true - Create a delivery for a package - Scan the package barcode - Exit the delivery - Re-enter the delivery > Quantity for the line is 1/false Cause ----- The line is picked, so it is considered as not reserved https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/models/barcode_picking_model.js#L288-L289 when doing https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/models/barcode_picking_model.js#L812-L813 This leads to `qtyDemand` returning false instead of 1 https://github.com/odoo/enterprise/blob/02f957b600bac3d86411091fd762d88e372db7c5/stock_barcode/static/src/components/package_line.js#L17-L18 ----- Ticket: opw-5960629 Forward-Port-Of: odoo/enterprise#114451 Forward-Port-Of: odoo/enterprise#113816
This update fixes a bug where payment reminder emails for subscriptions were missing the subscription's closing date. The fix ensures that all payment reminder emails, regardless of how they're generated (automated or manually through the email composer), accurately display the subscription's end date. This improves the clarity and accuracy of payment notifications for subscription customers.
Original PR description
### Issue before this commit: When sending a payment reminder email for a subscription using the email composer, the template was not correctly populated with the expected dynamic values. In…
### Issue before this commit: When sending a payment reminder email for a subscription using the email composer, the template was not correctly populated with the expected dynamic values. In particular, fields such as the subscription closing date and the subscription code were missing. ### Steps to reproduce the issue: 1. Install subscription and go to that app 2. Open one subscription 3. Send message > Load template: "Subscription: Payment Reminder" 4. Sentence is incomplete: missing end date of the subscription ### Cause of the issue: The issue was caused by the absence of a proper context injection when rendering the email template from the mail.compose.message wizard. The template relied on context variables like date_close, but these values were not being computed nor passed during manual email composition. Unlike automated flows, the composer did not provide the subscription-specific context required by the template. ### Reason to introduce the fix: The fix makes the payment reminder and closing templates self-sufficient by replacing context-based values with fields and helper methods directly available on the subscription record. A dedicated method is introduced to compute the subscription close date consistently, so the templates render the expected values both in automated flows and when manually loaded from the email composer. opw-6031613
This update fixes an issue where employees were incorrectly receiving 80% pay for rest days when on sick leave. The change ensures that employees are paid their full wage on rest days, aligning with the definition of a sickness day and standard payroll practices. This corrects a potential overpayment issue and ensures accurate payroll calculations.
Original PR description
Currently, if a sick leave is spread over a weekend, the work entry type set on the saturday and sunday will be the sick leave type. If an employee is entitled sickness allowance (which is paid 80%), it means that we will be paying them 80% for their rest days as well. However, as per the definition, a sickness day is a day on which an employee is absent from work by reason of being unfit due to injury or sickness. If an employee is not expected to be at work (rest day), that day cannot be considered a sickness day. If this rest day is paid (which is done by default in our module), we should thus pay the full wage on that day and not a reduced 80%. task-6079736
This update ensures that the AI chat window opens in full-screen mode whenever it's launched, regardless of how it's initiated (e.g., from the system tray or command palette). Previously, the chat would open in a background window, which has now been resolved. This improves the user experience and allows for more efficient interaction with the AI assistant.
Original PR description
Prior to this commit, when opening the chat with an agent from the systray button, the chat window was opened in the background. This commit fixes the issue by adding a call to `channel.open` which opens the chat when in full-screen mode. This commit also fixes an issue where the chat window wasn't properly opened when done from the command palette. task-5172978
This update clarifies the Profit and Loss report in French accounting by splitting account 649 into two new accounts (6491 and 6492). This separation accurately reflects social security charges and salaries, aligning with French accounting standards (ANC PCG 2026). The original account remains for legacy systems.
Original PR description
Splitting account 649 into two new accounts (6491 and 6492) is necessary to handle the Profit and Loss report properly. This ensures we can accurately separate social security charges from salaries in the report. Reference: ANC PCG 2026, page 445, note (h) https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/recueil/RECEUIL-PCG-2026-AVEC-COUVERTURE.pdf task-6053784 Forward-Port-Of: odoo/enterprise#112905 Forward-Port-Of: odoo/enterprise#111420
This update clarifies the Helpdesk stage Kanban view by removing the "Days to rot" number, which was confusing to users. This change improves clarity and usability for Helpdesk staff, ensuring they can easily understand the status of tickets.
Original PR description
Currently, only the “Days to rot” number is displayed, so users cannot understand what the number represents. In this commit, it hide from the helpdesk stage kanban view. task-5485507
This update fixes a bug in the bank statement reconciliation process. Previously, a payment from a different company with a matching UUID could incorrectly link to another company's transaction, leading to inaccurate financial reporting. The fix ensures that both the bank statement and payment belong to the same company hierarchy, preventing foreign transactions from being added to the wrong accounts.
Original PR description
ticket-5992100 When auto-reconciling bank statement lines, the end-to-end UUID lookup correctly checked that matched AMLs and their payment belong to the same company hierarchy, but missed checking that the payment also belongs to the same company hierarchy as the bank statement line itself. This allowed a payment from an unrelated company (sharing the same end-to-end UUID from an inter-company bank transfer) to be matched against another company's bank transaction, pulling foreign tax lines into the wrong company's journal entry. Fix by adding the same parent-path company check between the bank statement line and the payment.
This update fixes an issue where events were missed, particularly impacting Worldline payments, due to a failure in the system's fallback mechanism. The change ensures that if longpolling fails, the system automatically attempts to use the more reliable websocket connection, guaranteeing event delivery.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/260931 Before this commit, if `onMessage` in `iot_http_service` was called directly, it would fail to fallback to websocket if the longpolling request failed, causing events to be missed. One symptom of this is Worldline payments failing to confirm when using websocket. After this commit, the `_longpolling` method will now throw an error in this case, causing the fallback mechanism to attempt websocket instead.
13 changes
Resolved issues and error corrections
This update corrects a display issue where the 'Update Payment' button remained visible after processing batch payments for Mexican CFDI invoices. The fix addresses a technical discrepancy in how UUIDs were compared, ensuring the button is correctly hidden when a batch payment is involved. This prevents confusion and ensures accurate payment reconciliation.
Original PR description
backport of f41900a4353ea867b08f71ed64f8702a13411bac - Create one invoice with the PUE payment policy. - Create another invoice with the PDD payment policy. - Send both invoices to the CFDI. - Create a batch payment for both and reconcile. - Click on Update Payment on one of the invoices. The Update Payment button does not disappear. In the method _l10n_mx_edi_cfdi_invoice_get_payments_diff, we compare the current UUIDs and the previous UUIDs to determine if the button should be shown. However, when there is a batch payment, the current UUID list includes the UUIDs of all invoices in the batch, including the PUE payment (which should normally be filtered out by the continue). The previous UUID list includes only the UUID of the PDD payment. opw-6055781 Forward-Port-Of: odoo/enterprise#114440
This update resolves compatibility issues with Python 3.14 and the Ubuntu Resolute operating system. It includes necessary code changes to ensure continued functionality and stability of Odoo, primarily related to internal Python libraries and data handling.
Original PR description
Forward-Port-Of: odoo/odoo#258568
This change updates the email address used to send automated communications related to our IAP (In-App Purchase) service from iap@odoo.com to noreply@odoo.com. This improves email deliverability and reduces the likelihood of clients responding to automated messages, streamlining our communication process.
Original PR description
The current mail address is iap@odoo.com so some client respond to the automatic mail. This fix change it to noreply@odoo.com Task-6086556 Forward-Port-Of: odoo/odoo#259691
This change updates the email address used to send automated support responses from iap@odoo.com to noreply@odoo.com. This improves email deliverability and reduces the likelihood of responses being sent to incorrect addresses, streamlining our support process.
Original PR description
The current mail address is iap@odoo.com so some client respond to the automatic mail. This fix change it to noreply@odoo.com Task-6086556 Forward-Port-Of: odoo/enterprise#114097
This update fixes an issue where the DSO (Days Sales Outstanding) data on the Invoice Dashboard was misaligned. The problem stemmed from a discrepancy in how fiscal years were handled. This change ensures accurate DSO reporting for improved financial insights.
Original PR description
Invoice dashboard data, specifically DSO, was incorrectly aligned due to a mismatch in the fiscal year structure. Task-6049887
This update fixes an issue where the DSO (Days Sales Outstanding) data on the Invoice Dashboard was misaligned. The problem stemmed from a discrepancy in how fiscal years were handled. This change ensures accurate DSO reporting, providing more reliable insights into accounts receivable performance.
Original PR description
Invoice dashboard data, specifically DSO, was incorrectly aligned due to a mismatch in the fiscal year structure. Task-6049887
This update corrects a display issue in the WhatsApp event template within the Odoo Enterprise system. Previously, users would encounter an 'access denied' error when creating WhatsApp templates linked to event registrations. The fix involves updating the demo data to ensure the template status is correctly set to 'approved', resolving this display problem.
Original PR description
This fix is changing the demo data for the fix on https://github.com/odoo/odoo/pull/259683 Original Issue: 1) User goes to Event.event Form -> communication tab -> add line 2) Select whatsapp -> type something -> create and edit -> create new template with any model event.registration -> save ( all the way including the event form) 3) reload page -> whatsapp event.mail displays 'User does not have access to this record'. Issue with the demo data: To be a valid event template it needs be of model 'event.registration', and 'status = "approved"'. Otherwise it displays 'User does not have access to this record' in the event.mail.template.template_ref field. This fixes the readability of the demo data inside the UI. Fix: add '<field name='status'>approved</field>' to the Whatsapp template demo data opw-6037488
This update fixes an issue where the DSO (Days Sales Outstanding) data displayed on the invoice dashboard was inaccurate. The problem stemmed from a discrepancy in how fiscal years were handled, leading to misaligned reporting. This change ensures that DSO figures are now correctly calculated and displayed, providing more reliable financial insights.
Original PR description
Invoice dashboard data, specifically DSO, was incorrectly aligned due to a mismatch in the fiscal year structure. Task-6049887
This update fixes an issue where Odoo incorrectly applied EU VAT rules for B2B transactions. Now, the system accurately determines VAT based on where the goods are actually delivered, ensuring compliance with EU regulations and preventing incorrect VAT exemptions for domestic sales.
Original PR description
**Description of the issue/feature this PR addresses:** Odoo currently determines the tax treatment of EU B2B transactions primarily based on the customer's VAT country. This leads to incorrect…
**Description of the issue/feature this PR addresses:** Odoo currently determines the tax treatment of EU B2B transactions primarily based on the customer's VAT country. This leads to incorrect classification of some transactions as intra-Community supplies when the customer provides a valid foreign EU VAT number but the goods are delivered within the seller's country. Under EU VAT rules (Directive 2006/112/EC, Articles 32 and 138), an intra-Community supply only exists if the goods are physically dispatched or transported from one Member State to another. If the goods remain in the seller's country, the transaction must be treated as a domestic supply subject to local VAT, regardless of the customer's foreign VAT identification. **Current behavior before PR:** When a customer has a valid EU VAT number from another Member State, Odoo may apply intra-Community tax treatment (0% VAT) even if the delivery address is located in the seller's country and no cross-border movement of goods occurs. This results in: - Incorrect VAT exemption being applied. - Transactions being treated as intra-Community supplies when they are legally domestic supplies. - Potential inconsistencies with EU VAT compliance and reporting. **Desired behavior after PR is merged:** Tax determination takes into account the actual place of delivery of the goods. If the goods are delivered within the seller's country and no intra-Community transport occurs, the transaction is treated as a domestic supply and local VAT is applied, even when the customer provides a valid foreign EU VAT number. This ensures that intra-Community tax treatment is only applied when there is an actual cross-border movement of goods, aligning Odoo's behavior with EU VAT Directive requirements. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr cc @Tecnativa ping @carlosdauden @juancarlosonate-tecnativa
This update fixes an issue where flexible work schedules were incorrectly calculating overtime. The change adjusts how the system determines the date range for flexible hours, ensuring accurate overtime indications are displayed for employees with varying work arrangements. This improves the reliability of timesheet data.
Original PR description
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative…
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative overtime even when the employee has logged exactly 20h for the week. **steps to reproduce:** 1. Create a new working schedule with flexible hours enabled for example (20h/week, 4h/day average) 2. Assign this schedule to an employee 3. Go to Timesheets, search for the employee 4. Navigate to a past week 5. Enter 4h on each working day 6. Observe the overtime indication shows incorrect value (-01:00) **cause:** In `resource/models/resource_calendar.py`, the flexible hours algorithm that determines the date range by converts UTC boundaries to the employee's timezone. When the employee's timezone has a positive UTC offset (UTC+1, like in brussels time zone), `Sun 23:59:59 UTC` becomes `Mon 00:59:59 CET`, pushing `end_date` to the next Monday. This creates an 8 day range instead of 7. The algorithm then starts a new weekly budget for the spillover day and allocates 1 extra hour, making `allocated_hours` 20.9999998 instead of 20. **fix:** - Use the UTC date before conversion to the employee's timezone when determining the flexible date range. **note:** Updating the test (test_no_carried_over_leaves_for_flexible_resource) in hr_holidays/tests/test_expiring_leaves.py expected duration logic, is to match the corrected inclusive day range and prevent asserting the previous spillover behavior. link to the enterprise PR: odoo/enterprise#112879 opw-5970511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the overtime indication on timesheets was incorrect when employees used flexible work schedules. The fix ensures accurate overtime calculations by correctly handling time zone conversions and preventing an extra hour from being added to the weekly budget. This improves the reliability of timesheet reporting.
Original PR description
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative…
**problem:** On timesheets, the overtime indication next to an employee's name is incorrect when using flexible work schedules. for example: a "Flexible 20h" schedule (4h a day) shows 1h of negative overtime even when the employee has logged exactly 20h for the week. **steps to reproduce:** 1. Create a new working schedule with flexible hours enabled for example (20h/week, 4h/day average) 2. Assign this schedule to an employee 3. Go to Timesheets, search for the employee 4. Navigate to a past week 5. Enter 4h on each working day 6. Observe the overtime indication shows incorrect value (-01:00) **cause:** In `resource/models/resource_calendar.py`, the flexible hours algorithm that determines the date range by converts UTC boundaries to the employee's timezone. When the employee's timezone has a positive UTC offset (UTC+1, like in brussels time zone), `Sun 23:59:59 UTC` becomes `Mon 00:59:59 CET`, pushing `end_date` to the next Monday. This creates an 8 day range instead of 7. The algorithm then starts a new weekly budget for the spillover day and allocates 1 extra hour, making `allocated_hours` 20.9999998 instead of 20. **fix:** - Use the UTC date before conversion to the employee's timezone when determining the flexible date range. - prefer `self` when it is the flexible calendar being queried, so hr_contract's `_get_calendar_at()` override cannot substitute the contract's calendar parameters (full_time_required_hours, hours_per_day) for the flexible ones. **note** Updating the test (`test_no_carried_over_leaves_for_flexible_resource`) in `hr_holidays/tests/test_expiring_leaves.py` expected duration logic, is to match the corrected inclusive day range and prevent asserting the previous spillover behavior. link to the enterprise PR: https://github.com/odoo/enterprise/pull/112879 link to the community PR: https://github.com/odoo/odoo/pull/257269 opw-5970511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where Datev reports incorrectly calculated tax amounts when vendor bills used taxes with multiple repartition lines. The fix ensures that tax amounts are accurately added, leading to correct tax reporting for Datev customers. This resolves a discrepancy in the Datev CSV export.
Original PR description
With l10n_de_reports: - Configure a foreign currency with an exchange rate. - Configure a tax with multiple repartition lines. - Create a vendor bill in this foreign currency with this tax. - In the general ledger export the datev csv. In the datev csv the rate is wrong. In the method _l10n_de_datev_get_csv, we build a tax_amount dict. However when one tax has multiple lines, the amount is replaced and not added. opw-6010097
This update fixes an issue where upgrade scripts within Odoo modules weren't properly organized, leading to logging problems and unhandled warnings. Now, upgrade scripts are correctly associated with the core Odoo upgrade system, resulting in cleaner logging and improved error handling during module updates. This ensures smoother and more reliable Odoo upgrades.
Original PR description
The resulting modules should be bound to the `odoo.upgrade` package. Side effects: - the loggers created inside the upgrade scripts are now in the `odoo.upgrade` namespace. - warnings raised by bad usages in upgrade scripts are now correctly filtered. Forward-Port-Of: odoo/odoo#258025
6 changes
Resolved issues and error corrections
This update prevents portal users from seeing the 'View Timesheets' button on invoices if they lack the necessary permissions to access those timesheets. Previously, the system incorrectly displayed the button based on the presence of timesheets linked to the sale order, leading to a confusing user experience. The fix ensures users only see timesheets they are authorized to view.
Original PR description
sale: add sale order specific hook to extend page values ------ Allows adding custom data (e.g., timesheets) without overriding generic _get_page_view_values sale_timesheet: hide 'View Timesheets'…
sale: add sale order specific hook to extend page values
------
Allows adding custom data (e.g., timesheets) without overriding generic _get_page_view_values
sale_timesheet: hide 'View Timesheets' button for users without access
-------
Steps to Reproduce:
-----------------
- Create a product with the invoice policy set to Based on Timesheets
- Enable Project and Tasks on the order.
- Create and confirm a sale order using a portal user.
- Log timesheets on the related task.
- Create an invoice from the sale order.
- Log in as the portal user and open the invoice.
- Click the 'View Timesheets' button.
Issue:
-------------
The 'View Timesheets' button is shown to the portal user even though they don’t have access to view timesheets.
Root Cause:
------------
The timesheets are linked to the sale order, so the button appears based on the timesheet_count, but the portal user does not actually have permission to access those timesheets.
Fix:
-----------
We replaced the timesheet_count check with a check that verifies whether the user actually has access to any of the related timesheets.
task-4745519This update resolves an issue where portal users were incorrectly seeing a 'View Timesheets' button, despite lacking the necessary permissions. The fix utilizes a revised helper method to accurately control button visibility, ensuring users only see options they are authorized to access.
Original PR description
**Issue:** The 'View Timesheets' button is shown to the portal user even though they don’t have access to view timesheets. Currently, we have added _sale_order_get_page_view_values in the sale module, which is overridden in sale_timesheet. We are using it here. task-4745519
This update fixes an issue where closed Helpdesk tickets were sending out emails with the ticket's database ID instead of the correct reference number. This ensures consistent and accurate ticket references are used in customer communications, improving clarity and professionalism. The change updates a key email template to use the ticket reference.
Original PR description
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the…
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the "Helpdesk: Ticket Received" mail template; Observe that the correct reference (100) is used. (Open the full composer to use "Load template") 4. Now send a message using the "Helpdesk: Ticket Closed" mail template and Observe that it displays the database ID (e.g., 1) instead of the reference. Cause: ------ `new_ticket_request_email_template` uses the ticket reference(`object.ticket_ref`) correctly. https://github.com/odoo/enterprise/blob/d39e291ba89ad018ba6f5f9591d280a834822f27/helpdesk/data/mail_template_data.xml#L18-L19 However, the `solved_ticket_request_email_template` uses the database ID (`object.id`) instead of the actual ticket reference (`object.ticket_ref`), leading to inconsistent references in customer communications. related commit: 3ed5273 Solution: --------- Update `solved_ticket_request_email_template` to use `object.ticket_ref` instead of `object.id` opw-6087466
This update fixes an issue where upgrade scripts within Odoo modules weren't properly organized, leading to logging problems and unfiltered warnings. Now, these scripts are correctly associated with the core upgrade package, ensuring cleaner logging and proper handling of potential errors during updates.
Original PR description
The resulting modules should be bound to the `odoo.upgrade` package. Side effects: - the loggers created inside the upgrade scripts are now in the `odoo.upgrade` namespace. - warnings raised by bad usages in upgrade scripts are now correctly filtered. Forward-Port-Of: odoo/odoo#258025
This update strengthens the security of Odoo's IoT websocket connections on Windows by using a standard, up-to-date Certificate Authority bundle. This ensures reliable TLS verification and prevents potential issues with outdated system certificates, enhancing overall stability. Additionally, the pull request incorporates legal agreements (CLAs) for Corvanis and vvro.
Original PR description
The websocket-client library defaults to the system's SSL context, which can be broken or outdated on Windows. This aligns websocket TLS verification with the `requests` library by forcing a certifi-backed CA bundle. This improves reliability on Windows IoT environments without changing reconnect logic. This also adds the Odoo individual CLA for vvro and the corporate CLA for Corvanis.
This update resolves an inconsistency in how task deadlines are set in Field Service and Project apps when using the Gantt view. Previously, deadlines defaulted to today's date regardless of the selected time range. This change ensures deadlines align with the user's chosen timeframe, improving task planning and management.
Original PR description
Issue: ---------------------------------------- The default values of `date_deadline` are inconsistent between the Field Service app and the Project app when coming from the Gantt view. Steps to reproduce: ---------------------------------------- - Open Field Service, select the Gantt view - Change the range to display the week - Click "New" to create a new task - The default values for "Planned Date" are both on today's date - In Project, they would have been based on the time range of the Gantt view Cause: ---------------------------------------- A patch in `industry_fsm` implements change the default values to today. Solution: ---------------------------------------- Remove the patch responsible for this behavior. opw-6067523