Monday, July 28, 2025
26 changes · saas-18.3
Enhancements to existing features
The EMV QR configuration fields are now shown in a dedicated EMV QR Settings tab instead of being repeated in multiple places. This makes bank setup screens clearer and reduces confusion for users managing QR payment settings.
Original PR description
Before this PR: - `EMV QR Configuration` fields appears on both `Bank Information` tab and `Note` tab. After this PR: - `EMV QR Configuration` fields are moved to a separate `EMV QR Settings` tab to avoid duplication. Task : 4936165 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
New automated tests check that Point of Sale and Restaurant devices stay correctly synchronized. This helps reduce the risk of order or session inconsistencies across devices, while noting that broader synchronization coverage will continue to improve over time.
Original PR description
This commit add somes tests to ensure that the devices synchronisation works correctly in the Point of Sale and the Restaurant modules. This commit does not cover the entire synchronization code, so testing will need to be improved over time.
Resolved issues and error corrections
The Calendar app’s “Attending?” filter now correctly shows events based on the current user’s attendance status, such as declined events. This fixes searches that previously returned no results, helping users find and manage relevant meetings more reliably.
Original PR description
The filter on an event's "Attending?" status was not working correctly. When filtering, the search would always return an empty result set because the underlying search implementation was logically flawed. It incorrectly compared calendar.event IDs with calendar.attendee data, which could never match. This commit corrects the `_search_current_attendee` method to properly query the `calendar.attendee` model. It now finds the intersection of attendees that both belong to the current user and match the filter criteria (e.g., state is 'declined'). It then uses these results to return the correct parent calendar events. A unit test has been added to verify the filter now works as expected. opw-4892386 Forward-Port-Of: odoo/odoo#218878
Documentation and clarification updates
This pull request records an individual Contributor License Agreement for a contributor. It supports Odoo's contribution process by confirming the legal permission needed to include their work in the project.
Original PR description
This pull request adds my individual Contributor License Agreement (CLA) as required by the Odoo contribution guidelines. The file follows the structure described in doc/cla/sign-cla.md. Forward-Port-Of: odoo/odoo#219198
Miscellaneous changes
We are switching our translations platform from Transifex to Weblate. Hence, we are using a new config file to sync our translations between GitHub and Weblate. The `.tx/config` file will be deleted in a later commit when the Transifex sync is shut down. Forward-Port-Of: odoo/odoo#220844
Original PR description
We are switching our translations platform from Transifex to Weblate. Hence, we are using a new config file to sync our translations between GitHub and Weblate. The `.tx/config` file will be deleted in a later commit when the Transifex sync is shut down. Forward-Port-Of: odoo/odoo#220844
This change updates a point of sale test so it no longer depends on demo data being present. It helps ensure automated checks run consistently, reducing false failures during development and release validation.
Original PR description
Before this commit: = - The test `test_quantity_package_of_non_basic_unit` used `product_uom_inch`, which is `archived` by default, causing the test to fail without demo data. - It only worked with demo data because `l10n_us_account` `unarchives` this UoM. After this commit: = - Created a **test UoM** to ensure consistent test behavior. Runbot-error: 223122 Forward-Port-Of: odoo/odoo#214547
This fix lets Odoo hide or disable image transformation controls in contexts where they do not work, such as PDF reports. It prevents users from applying changes that would be ignored, reducing confusion and improving editing reliability.
Original PR description
Problem: In some contexts, such as reports, the `transform` option is not needed or applicable. For example, `transform` is not supported by `wkhtmltopdf`, so any applied transformation is ignored. Solution: Introduce the ability to disable the `transform` option when needed. opw-4809761 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220110 Forward-Port-Of: odoo/odoo#218352
Reception report PDFs with many products now print cleanly across multiple pages. This prevents product rows from overlapping with section headers, making longer warehouse reception reports easier to read and use.
Original PR description
## Short functional explanation of the error When printing a reception report containing a lot of products, the top row of the pages after the first one is overlapped with its corresponding header in…
## Short functional explanation of the error When printing a reception report containing a lot of products, the top row of the pages after the first one is overlapped with its corresponding header in the resulting PDF. ## Reproduction Steps 1. Open the settings. In the inventory section, enable "Reception Report". 2. Create a new quotation and add at least 40 different products. Each product should have at least 1 copy in stock, and the quantity to order must be greater than the quantity we have of this product in stock. 3. Confirm the sales order. 4. Create a new purchase order and add the exact same products you added in the quotation. 5. Confirm the order and click on the "Recept" smart button. 6. Click on the "Allocation" smart button and click on the "Assign all" gray button. 7. Click on print and open the PDF once it finishes downloading. ### Expected behavior Each row (corresponding to the reception of a product) and its corresponding header is printed properly, regardless of how many pages constitute the report. ### Unexpected behavior The PDF has more than one page, and on the top of the second page, the product row is overlapped with the header of its corresponding section. ## Origin of the issue It comes from an issue with WKHtmltopdf itself: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1524 The report uses the "thead" tag for the headers. However, in some cases, when the header is linked to a table dynamically (with for-each, for example), WebKit ignores or breaks the "Thead" behavior. ## Explanation of the fix I override the default behavior of thead, which repeats the header automatically at each new page, with a new style. Now, the "Thead" special behavior is ignored and treated like ordinary lines. The header isn't shown at each new page anymore, avoiding the overlapping of product rows. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215398
This fix keeps the website editor toolbar from adding unwanted blank space below the page footer when it is hidden. It improves page layout consistency for users editing website content without changing visible functionality.
Original PR description
Description of the issue/feature this PR addresses: - Commit [189a7c96](https://github.com/odoo/odoo/commit/189a7c96e6e26825dc05c0c6466576fe63aa091e#diff-de0d67e89972b45b101a9c4b04f316824314b0d69aba6208528586f1edb4f01cL25-L40) moved scrollbar from `#wrapwrap` element to `<body>`, caused the space below the footer visible for the floating toolbar. Current behavior before PR: - Space below the footer was always visible, even when the toolbar was hidden. Desired behavior after PR is merged: - `top: 0;` is applied on `.oe-toolbar` to ensure it stays out of the layout flow. - This prevents unnecessary layout space and ensures correct toolbar positioning. task-4652202 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217270
This change removes an unnecessary database index for project collaborators because an existing uniqueness rule already supports the same lookup. It simplifies database maintenance without changing how users work with projects.
Original PR description
There is a unique constraint `_unique_collaborator`, whos first key is `project_id`, which will cover the necessity for an explicit index on `project_id` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale invoices now automatically include the related order name in the Customer Reference field. This makes backend invoice records easier to identify and reconcile after invoiced POS sales.
Original PR description
## Short functional explanation of the error When selling items in the point of sale module with an invoice, when we check said invoice in the backend, the customer reference field is empty. ##…
## Short functional explanation of the error When selling items in the point of sale module with an invoice, when we check said invoice in the backend, the customer reference field is empty. ## Reproduction Steps 1. Go to Point of sale and open a shop interface. Add a random item to the basket and select a customer. 2. Click on payment, then check Invoice, select a payment method, and Validate. 3. Click on the hamburger menu on the top right and click on Backend. 4. Hover the box of the shop you opened with your mouse. In the top right corner of the box should appear a 3-dot menu. Click on it and click on Sessions. 5. Click on the latest session ID. On the top of the page, click on the "Orders" smart button. 6. Click on the order you just finalized. On the top of the page click on the "Invoice" smart button. 7. Click on "Other info" tab. ### Expected behavior The Customer Reference field should be filled with the name of the order. ### Unexpected behavior The Customer Reference field is left empty. ## Origin of the issue When setting the values for the invoice, the field 'Ref' was absent. opw-4732492 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218158
This fixes an error that could appear when moving the final item from one table of contents block into another on a website page. Website editors can now reorganize these blocks without interruptions or crashes.
Original PR description
Since [1], a traceback appears when we drag the last block of a table of content into another one. Drag and drop two tables of content on the website page One by one, drag and drop the blocks from the second table to the first one traceback for the last one... This commit resolves the issue [1]:https://github.com/odoo/odoo/commit/6cd9606e285741b59042b9674bf6682273c43a69 task-4144022 Forward-Port-Of: odoo/odoo#180039
Fixes an issue where the drag-and-drop upload area stayed visible after users added documents to Expenses. After an upload or drop, users are returned to the expense list so they can see the generated expenses, even if OCR processing fails.
Original PR description
When dropping documents on Expense, the drop zones would stay being displayed. We now stop to display it when a file is uploaded / dropped. task-4942503 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The bank reconciliation widget now only suggests statement lines that are still waiting in the suspense account. This prevents already assigned bank statement lines from reappearing as possible invoice matches, reducing confusion and avoiding duplicate reconciliation work.
Original PR description
Create a bank statement line with partner A Assign it to a random account Create an invoice with partner A Confirm it. => The statement line appears It should not, it has been assigned. Only lines that are still on the suspense account should be taken into account --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The view-switching shortcut label now stays clearly visible when users change views with Shift + V. This prevents the shortcut hint from overlapping the active view button, making the interface easier to understand and use.
Original PR description
Previously when switching views using the hotkey, the hotkey (SHIFT + V) was not properly visible, it was overlapping with the active view button. After this commit the hotkey (SHIFT + V) will be visible and not overlap with the active view. task-4828401 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217639
Saving a spreadsheet global filter with a duplicate label and a selected value range no longer causes a crash. Users now see the duplicate label error directly, making the validation smoother and avoiding disruptive tracebacks.
Original PR description
Steps to reproduce: - Create a global filter with label 'aa' - Create a new text filter with the same label - Check 'Restrict values to a range' - Select a range with some values - Confirm the range selection - Click the save button Current behavior before PR: - A traceback occurred when saving the new filter with a duplicate label and a selected range. After the crash, the duplicate label error was shown. Desired behavior after PR is merged: - The duplicate label error is raised directly without triggering a traceback. Task: [4813177](https://www.odoo.com/odoo/2328/tasks/4813177)
Studio now hides image transformation options when editing reports because those effects do not appear in generated PDFs. This prevents users from applying formatting that would be lost in the final PDF, making report previews and output more predictable.
Original PR description
Problem: Image transformations are not applied in generated PDFs because they are not supported by `wkhtmltopdf`. Solution: Disable image transform options when rendering reports to ensure expected output and avoid unsupported behavior. Steps to reproduce: - Open any report in Studio - Add an image - Apply a scale transformation - Generate a PDF preview > The image transform is not applied in the generated PDF opw-4809761 Forward-Port-Of: odoo/enterprise#90776 Forward-Port-Of: odoo/enterprise#89952
This update keeps several Odoo Enterprise apps working reliably with newer Python 3.13 and Debian Trixie environments. It adjusts automated tests to handle date comparisons, translated date spacing, and PDF warnings more consistently, reducing upgrade-related failures without changing business features.
Original PR description
Forward-Port-Of: odoo/enterprise#90794 Forward-Port-Of: odoo/enterprise#90352
Clearing a document selection from the control panel now also clears the details panel. This prevents users from seeing stale document information after they have removed the current selection.
Original PR description
The details panel does not update when clearing the selection through the control panel. Steps to Reproduce: ==================== - Open the detailsPanel. - Select a document. - Click on a blank space, which removes the current selection. - Re-select a document. - Click the ‘x’ button on the control panel to clear the selection. - The document selection in the detailsPanel does not get cleared. Technical =========== In DocumentsRightPanel and how DocumentsDetailsPanel is handled, The panel relies on the `state.focusedRecord` to determine which record's details to display. However, when clicking the ‘X’ button in the control panel to clear the selection, the `state.focusedRecord` is not being Updated or cleared, the detail panel still shows the previously focused record. After this PR: Clicking the ‘x’ will properly clear the selection from the detailsPanel. Task-4752944
Uploading an attachment from the chatter in Documents no longer shows temporary upload progress cards or rows in the main kanban or list views. This keeps the workspace cleaner and avoids confusing users with duplicate or unexpected visual elements during uploads.
Original PR description
Step to reproduce: - In Documents, open the chatter either on a folder or a document. - Upload an attachment through the chatter. - You will see the upload kanban card / list row showing the progression. There should be no visual in kanban/list views showing the progression. Task-4863051 Forward-Port-Of: odoo/enterprise#90836 Forward-Port-Of: odoo/enterprise#87410
Fixes an issue where receiving a file reply in WhatsApp could trigger an error when request debugging was enabled. The system now logs file response size instead of trying to store binary content as text, improving reliability for businesses using WhatsApp messaging.
Original PR description
When Debug requests is enable on the whatsapp business account and user replies with the file, a traceback will appear. Steps to reproduce the error: - Install ``whatsapp`` and ``contacts`` - Create…
When Debug requests is enable on the whatsapp business account and user replies with the file, a traceback will appear. Steps to reproduce the error: - Install ``whatsapp`` and ``contacts`` - Create a whatsapp business account > Enable Debug requests - Create a contact > Add a phone number > send whatsapp message with any whatsapp template - Now reply with the file(ex. pdf or image) in message from the contact's whatsapp. - Traceback in terminal Traceback: ``ValueError: A string literal cannot contain NUL (0x00) characters.`` https://github.com/odoo/enterprise/blob/b52a93da7d680b60646cb08a9126cf6c12f5307d/whatsapp/models/whatsapp_account.py#L166 Here, ``message`` contains NUL (0x00) characters because user replies with the file, value for the ``message`` comes from the below response. response: https://github.com/odoo/enterprise/blob/b52a93da7d680b60646cb08a9126cf6c12f5307d/whatsapp/tools/whatsapp_api.py#L49-L57 Here, ``res.text`` contains NUL (0x00) characters. So, it will lead to the above traceback. sentry-6314521165 Forward-Port-Of: odoo/enterprise#83274
Fixed an issue where sending customer statements could fail if one of the selected customer contacts had no name. The system now skips unnamed contacts when preparing the report details, helping scheduled statement emails complete reliably.
Original PR description
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install…
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install the account_reports module - From the accounting app, create a new company customer (Customers/Customers) - From that new company customer form view, add a new contact of type "other" and don't specify a name for it. - Create an invoice for the company - From the customer list view, select all, and trigger the action "Open Customer Statements" - Send -> Print and Send - Check the console, the cron task should traceback on the template **CAUSE** In accout_report.py, we get the name of each selected partners, and we don't check if the name doesn't exist. In the template `pdf_export_filters`, we try to join all the name in a string, it fails because one of the name isn't a string (its value is False because it doesn't exist on the partner record). **FIX** When getting the partners names, filter out the partners without names. opw-4916660 Forward-Port-Of: odoo/enterprise#90154
The UrbanPiper point of sale integration now uses the actual finalized order status instead of an unused internal flag. This helps ensure order state is shown consistently on the ticket screen and removes obsolete internal data.
Original PR description
In this commit: ==== - Use `finalized` instead of `uiState.locked` to determine order state on TicketScreen. - Remove the unused `locked` property from `uiState` in posOrder. Task-4745869 Related: odoo/odoo#207406 Forward-Port-Of: odoo/enterprise#90829 Forward-Port-Of: odoo/enterprise#86684
This fix prevents the disallowed expenses report from failing when expense lines have a zero or missing rate. It ensures each report line is uniquely identified, avoiding duplicate entry errors and improving report reliability.
Original PR description
Before this **PR**: When only the account_disallowed_expenses module was installed, the report failed with a duplicate key error if a line had a 0 rate or no rate at all. This was because such child lines were assigned the same line_id as their parent. After this **PR**: Lines with a 0 or no rate have the parent account appended to their line_id to ensure uniqueness and avoid key collisions. Forward-Port-Of: odoo/enterprise#90236
Fixes an issue where users could encounter an error when removing an end date from an existing commission plan. This prevents unnecessary save failures and keeps commission plan management smoother for sales operations.
Original PR description
Currently, an error occurs when clear the date_to field from an already created record. Steps to Reproduce: - Install the `sale_commission` module. - Go to `Commission Plans` and create a record. -…
Currently, an error occurs when clear the date_to field from an already created record. Steps to Reproduce: - Install the `sale_commission` module. - Go to `Commission Plans` and create a record. - Now, clear the `date_from` field and save. `TypeError: '>' not supported between instances of 'bool' and 'datetime.date'` This error occurs when we clear the date_to field from an already created record. The error started occurring after https://github.com/odoo/enterprise/commit/926c8f041b51a04f0153be27cfcc8658a07be5b0 this commit that introduced the daterange widget for the date_from field. And when we clear the date_to field and try to save, it triggers the constraint [1] and raises the error. [1] https://github.com/odoo/enterprise/blob/377321fd7e7b1b2026734b75c79c74c8947e2e6c/sale_commission/model/commission_plan.py#L64 This commit ensures that the record is saved only if the date_to field is also present in the record. sentry-6710699656 Forward-Port-Of: odoo/enterprise#88769
We are switching our translations platform from Transifex to Weblate. Hence, we are using a new config file to sync our translations between GitHub and Weblate. The `.tx/config` file will be deleted in a later commit when the Transifex sync is shut down. Forward-Port-Of: odoo/enterprise#91139
Original PR description
We are switching our translations platform from Transifex to Weblate. Hence, we are using a new config file to sync our translations between GitHub and Weblate. The `.tx/config` file will be deleted in a later commit when the Transifex sync is shut down. Forward-Port-Of: odoo/enterprise#91139