Daily updates from Odoo
Thursday, October 23, 2025
57 changes · 19.0
Security fixes and vulnerability patches
The API documentation now hides saved API keys like passwords, reducing the chance they are exposed on screen. The API key dialog also includes a direct link to the backend page where users can create a new key more easily.
Original PR description
This commit sets the field type of the api key setting as password to hide it from the user. It also adds a link in the api key dialog to open the api key page in the backend and let the user create an api key more easily. Task: 5039248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
New functionality added to Odoo
This update adds automated checks for how the Point of Sale handles linked sales orders, quotations, order lines, and down payments. It helps prevent regressions in sales workflows by making sure these scenarios continue to work as expected in future changes.
Original PR description
Task: [#4945627](https://www.odoo.com/odoo/my-tasks/4945627)
Community PR: [#221920](https://github.com/odoo/odoo/pull/221920)
Runbot: https://runbot.odoo.com/runbot/bundle/saas-18-3-hoot-pos-sale-ltra-390474
---
This commit adds Hoot tests for the `pos_sale` module:
- components
- control_buttons
- onClickQuotation (1)
- orderline (1)
- models
- pos_order_line
- getSaleOrder (3)
- saleDetails (2)
- setQuantityFromSOL (2)
- pos_order
- _getIgnoredProductIdsTotalDiscount (1)
- services
- pos_store
- onClickSaleOrder (4)
Also add a product used for down payments and create a sample sale order with two lines to support the tests.
Forward-Port-Of: odoo/odoo#230851
Forward-Port-Of: odoo/odoo#221920Enhancements to existing features
This change suppresses a misleading warning caused by a third-party packaging issue on Ubuntu Jammy systems. It helps keep logs and automated checks cleaner without changing business functionality or user workflows.
Original PR description
Apparently on jammy the pdfminer package returns nonsensical versions (the distribution for `pdfminer.six` yields `-VERSION-`, and inside the python code the `__version__` is `__VERSION__`). When trying to look up the distribution for the (invalid as a distribution name) `ldap`, as a fallback `pkg_resources` parses every package on the sys.path before returning a lookup failure. Doing so, it encounters `pdfminer` fails to parse its version as a `Version`, warns that that is deprecated, then parses it using the more lenient `LegacyVersion` and warns that this is also deprecated. Since this is a packaging issue in just jammy and we can't really do anything about it, just sweep the issue under the rug. https://runbot.odoo.com/odoo/error/163677 Forward-Port-Of: odoo/odoo#232650
This pull request updates several website and HTML editing tools used to build pages, forms, menus, links, carousels, and layout blocks. The changes appear aimed at improving the page-building experience and editor behavior, although the PR description is incomplete and the commit is marked as work in progress.
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
The Czech localization now includes dedicated fiscal positions for intra-community and extra-community transactions. This helps businesses apply the correct 0% EU goods and services tax setup more reliably.
Original PR description
When using the CZ localisation, the fiscal position are not fully set up. This commit will create a new fiscal position for intra-community and changes the 0% EU G and 0% EU S taxes to have that fiscal position. To be able to have the "replaces" (original_tax_ids) fields, i had to change the vat_required field on the domestic fiscal position. task-5103864 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how Odoo finds projects linked to reinvoiced sales orders. It can reduce slow database searches in sales and project workflows, helping larger databases respond more efficiently without changing user-facing behavior.
Original PR description
This commit adds an index on `project.project. reinvoiced_sale_order_id`, because the search in `sale.order. _compute_project_ids` might not be selective enough based on `sale_order_id`, which is a related field using `sale_line_id`. Since it's related, there is only a where clause on `sale_line_id IS NOT NULL`, which might not be selective enough and leads to a Seq. Scan of the `project_project` table. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232623
The point of sale experience has been refined with clearer button labels, better guidance, and fewer unnecessary warnings. These changes help cashiers and restaurant staff move through orders, payments, notes, and preparation steps more smoothly and with less confusion.
Original PR description
pos*: point_of_sale, pos_restaurant This commit introduces several UX enhancements in the standard POS flow: - Removed unintended onboarding step tip. - Updated note input dialog title to include the…
pos*: point_of_sale, pos_restaurant This commit introduces several UX enhancements in the standard POS flow: - Removed unintended onboarding step tip. - Updated note input dialog title to include the selected product name (e.g., “Pizza: Add Customer Note”). - Fixed issue where the Payment button incorrectly became primary when only the order-level note was updated. - Renamed "Order" to "Send" when only a note or message needs to be sent for preparation. - Added "New Order" button on the Ticket screen when no orders are available. - Improved placeholder text for floating order name input. - Added a back button on the Floor screen in table-finding mode for direct sale. - Moved preset filters next to order state filters (Active, Paid, etc.). - Made the Customer button primary when a customer is required for the order. - Removed unnecessary toaster warning for “Pay Later” payment method selection. - Shifted order preparation warning from the Validation button to the Payment button on the Product screen. - Added toaster notification when an order is sent for preparation summary. Task-5116688 Related-https://github.com/odoo/enterprise/pull/97458
The option to create batch payments is now available to users working in Invoicing. This makes it easier for the right finance users to access batch payment workflows without needing broader accounting permissions.
Original PR description
This commit will change the security group of the create batch payment action, to be available in invoicing. task-5187435
This update improves automated checks around the warning shown when discarding an order during restaurant preparation. It helps ensure the point of sale flow behaves correctly on the Product screen, reducing the risk of staff encountering inconsistent warnings during service.
Original PR description
*: pos_restaurant_preparation_display, l10n_de_pos_res_cert This commit improves the preparation flow by updating the `discardOrderWarningDialog` tour step to validate its behavior on the Product screen. Task-5116688 Related- https://github.com/odoo/odoo/pull/229915
This update refreshes localization files and translation configuration, mainly for the 3-way matching accounting area. It helps keep multilingual text and translation workflows aligned for users working in different languages.
Users can now download invoices in a single ZIP file containing all supported formats, such as PDF and XML. This makes it easier for businesses using Odoo to share sales and purchase invoices with accountants who may use different tools.
Original PR description
With PEPPOL, many clients use Odoo for invoicing while their accountant uses another tool. To easily send invoices to the accountant, it’s important to export invoices for both sales and purchase. Adding a `Export ZIP` option to download invoices in all supported extensions (pdf, xml, ..etc) in the same zip. task-4946367 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219245
The web tooling configuration now includes VOIP-related modules in automated code quality checks. This helps maintain consistent standards and catch issues earlier, with no direct impact on end users.
Original PR description
Forward-Port-Of: odoo/odoo#232559 Forward-Port-Of: odoo/odoo#232484
Belgian partners are now checked against the two most commonly used Peppol identifiers, making it more reliable to find whether they exist on the Peppol network. The update also removes outdated recommendation warnings because the required identifier is now handled automatically during registration.
Original PR description
1. For belgian partner, we now check for 0208 and 9925 which are the two most used EAS when looking for partner existence on the Peppol network. 2. Remove the warnings about the recommended EAS: 0208 is now the mandatory EAS, this will be handled directly on IAP where the Peppol Access Point will try to register 0208 in all cases with an alias system. Note that we have always computed 0208 as recommended value in registration process. task-4852903 Forward-Port-Of: odoo/odoo#231142 Forward-Port-Of: odoo/odoo#227431
Resolved issues and error corrections
Corrects the date field name used in Italian electronic invoice XML when linked invoice data is included. This helps prevent invoice rejections by Italy's e-invoicing system due to an invalid XML format.
Original PR description
The name for the date in DatiFattureCollegate (56e08bb091d39a18ea1c8e7699321b953a8823e1) is wrong. It is not DataDocumento but Data as per https://fex-app.com/FatturaElettronica/FatturaElettronicaBody/DatiGenerali/DatiFattureCollegate/Data/18
How to reproduce the issue:
- With l10n_it, create an invoice and fill the customer reference field.
- Generate the xml and validate through https://fex-app.com/servizi/verifica
- The following error related to the date happens: E-invoicing (Italy) La fattura elettronica è stata rifiutata dall'SdI. File non conforme al formato : Invalid content was found starting with element 'DataDocumento'. One of '{Data, NumItem, CodiceCommessaConvenzione, CodiceCUP, CodiceCIG}' is expected. riga: 80 - colonna: 24
opw-5082016
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#229120
Forward-Port-Of: odoo/odoo#227260The accounting settings now correctly show the OSS option for companies in Switzerland and the UK, not only EU countries. This helps affected businesses access the tax configuration they need without manual workarounds.
Original PR description
This PR https://github.com/odoo/odoo/pull/189315 changed the countries for which the OSS setting was visible. It has been limited to EU countries, however both UK and Switzerland need it as well. see discussion in task 4782337 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could block users when assigning an account to bank statement lines. Odoo now avoids creating an invalid matching rule, so reconciliation can continue smoothly for affected bank journals and accounts.
Original PR description
Currently, when a user uses the 'Set Account' button to reconcile a statement line, the system may also create a reconciliation model for fees for the given journal/account combination, based on the…
Currently, when a user uses the 'Set Account' button to reconcile a statement line, the system may also create a reconciliation model for fees for the given journal/account combination, based on the previous statement line reference pattern. To extract a patter from the references, the system computes the normalised longest common substring. This will be used as regex matching pattern of the newly created reconciliation rule. However, the common substring may end up with '\\', which is not a valid termination of a regex, leading to the error: `Invalid operation. The regex is invalid.` Steps to reproduce: - Have an account '646000 Test Account' - Create a Bank statement with label 'TEST REFERENCE BNK 2024' - Set Account 646000 - Create a Bank statement with label 'TEST REFERENCE BNK.OTHER' - Set Account 646000 Issue: Error `Invalid operation. The regex is invalid.` will raise blocking the action [opw-5086638](https://www.odoo.com/odoo/project.task/5086638) [opw-5062965](https://www.odoo.com/odoo/project.task/5062965) [opw-5123963](https://www.odoo.com/odoo/project.task/5123963) [opw-5166160](https://www.odoo.com/odoo/project.task//5166160) [opw-5159871](https://www.odoo.com/odoo/project.task/5159871) [opw-5160108](https://www.odoo.com/odoo/project.task/5160108) [opw-5109454](https://www.odoo.com/odoo/project.task/5109454) [opw-5086638](https://www.odoo.com/odoo/project.task/5086638) ... Forward-Port-Of: odoo/enterprise#97865
This fixes the default document type suggested for Argentine foreign vendor bills so they consistently use the expected abroad invoice/receipt type. It also aligns foreign supplier behavior on customer invoices with the selected journal, reducing manual corrections and invoicing errors.
Original PR description
Description of the issue/feature this PR addresses: In this [commit](https://github.com/odoo/odoo/commit/5c07f9c0c1065d88022dc6d1299fec1d42dfc0af) we split 'Proveedor del Exterior' from 'Cliente del…
Description of the issue/feature this PR addresses: In this [commit](https://github.com/odoo/odoo/commit/5c07f9c0c1065d88022dc6d1299fec1d42dfc0af) we split 'Proveedor del Exterior' from 'Cliente del Exterior' which are both AFIP responsabilities for foreing supplier and customer respectively. In this [commit](https://github.com/odoo/odoo/commit/7e45c6ec768950b6296d991a8375577aed45c4dd), we added the possibility to create 'B' invoices for foreign partners. With this PR we are fixing the logic to suggest the correct document type for foreign vendor bills so it has a similar behavior as for customers. Current behavior before PR: In customer invoices the document type suggested by default depends on the journal: --> Expo journal will suggest 'Expo invoices' for Foreign Customers but 'B Invoices' for Foreign Suppliers --> Local electronic journal will suggest 'B Invoices' for Foreign Customers as well as for Foreign Suppliers In vendor bills the document type suggested by default will be 'INVOICES AND RECEIPTS FROM ABROAD' for Foreign Customers and 'B Invoices' for Foreign Suppliers Desired behavior after PR is merged: In customer invoices the document type suggested by default depends on the journal: --> Expo journal will suggest 'Expo invoices' for both Foreign Customers and Suppliers --> Local electronic journal will suggest 'B Invoices' for Foreign Customers as well as for Foreign Suppliers In vendor bills the document type suggested by default will be always 'INVOICES AND RECEIPTS FROM ABROAD' as expected. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228635
The timesheet grid now keeps text from spilling into timer button areas when users view timesheets by month, enlarge text, and scroll horizontally. This improves readability and prevents confusing visual overlap in total and footer rows.
Original PR description
Steps to reproduce: - Open timesheets and change to Month scale. - Increase text size a little bit. - Scroll to the right side Issue: - You can see runover text being visible in timer button cell of Total row and Footer row. Reason: - It is due to z-index problem as z-index-* is deprecated from https://github.com/odoo/odoo/pull/165568 (from saas-17.4+). Fix: - Replace it with Bootstrap z-index class notated as z-*(-1 to 3) task-4949182 Forward-Port-Of: odoo/enterprise#96371
Fixes a website editor problem where changing or selecting shaped images could trigger an error, especially for content created before the editor migration. Existing shaped images remain usable after the move from the old editor path to the new HTML builder path.
Original PR description
Steps to reproduce: =================== 1. Drop a snippet having an image with a shape (e.g. "Intro Pill", "Images Mosaic", ...). 2. Try to change the image shape. → Traceback occurs. This issue also happens when clicking on images with shapes that were added in previous versions. Cause: ====== Before the refactoring, shape URLs started with `web_editor`, but now `html_builder` is expected. This mismatch causes the shape to be considered invalid when parsed, leading to a traceback. The issue was introduced by this PR: https://github.com/odoo/odoo/pull/222471 Solution: ========= Ensure backward compatibility by allowing shapes using the old `web_editor` path to remain functional after the migration to `html_builder`. Forward-Port-Of: odoo/odoo#230803
Invoice terms and conditions now refresh in the selected customer language when that language is changed during invoice creation. This prevents customers from receiving invoices with terms shown in the wrong language.
Original PR description
Issue: When changing the customer’s language during invoice creation, the terms & services were not retranslated, unlike when creating a new partner in a different language. Repro Steps: 1. Create an invoice with terms link or plain enabled. 2. Change the partner's language from the invoice creation view. 3. Terms is not translated. Cause: The translation compute was only triggered on partner change, not language change. Fix: Added dependency for partner_id.lang to the narration compute to ensure it updates when the language changes. opw-5031933 Forward-Port-Of: odoo/odoo#230800
This fix keeps report page numbers on a single line when using the folder layout with the Montserrat font. It improves the visual consistency and readability of printed or exported documents without changing report content.
Original PR description
The folder layout is using the same footer than the `external_layout_standard` but when using Montserrat, the page number wraps in 2 lines on the folder layout. It's missing a `text-nowrap` class. task-4942402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228391
Long mailing list names now remain inside their intended field instead of overlapping nearby information. This keeps the Marketing mailing list view readable and easier to use when list names are lengthy.
Original PR description
Issue: When you create a long name for your maling list, the name overflows over the other fields in the view. Repro: Go to marketing -> mailing lists -> create a fairly long name -> notice name overflows in the view. Cause: Small bootstrap issue, name field not limited to it's container. Fix: Added a simple w-100 to limit the field to 100% of it's container. opw-5153270 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232312
This fix ensures the spreadsheet filter tooltip is fully visible when dark mode is active. It prevents a confusing visual issue, even though the spreadsheet app itself does not yet fully support dark mode.
Original PR description
The fitler tooltip was displayed halfay in dark mode, while the rest of spreadsheet does not support dark mode yet. Task: [5162869](https://www.odoo.com/web#id=5162869&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This fixes event communications so attendee-specific emails, such as badge or QR code messages, are no longer scheduled once an event is finished. Post-event communications tied to the event itself can still be sent, preserving intended follow-up messaging while avoiding confusing or unnecessary attendee emails.
Original PR description
Forward-Port-Of: odoo/odoo#229960 Forward-Port-Of: odoo/odoo#227986
This update fixes an internal purchase app test that was failing in single-app builds because it referenced an unavailable field. It helps keep automated quality checks reliable without changing day-to-day user behavior.
Original PR description
This issue comes from [218483](https://github.com/odoo/odoo/pull/218483) The field `is_storable` is invalid in single app build and breaks the `TestPurchase` class. Runbot - [230096](https://runbot.odoo.com/odoo/runbot.build.error/230096)
Accounting users can now create SEPA Direct Debit mandates without being blocked by an access error. This ensures teams with invoicing and banking permissions can complete their direct debit setup without needing system administrator rights.
Original PR description
Have the Payment Provider Sepa Direct Debit module installed. Connect with a user with access right for Accounting: Invoicing & Banks. Create a Direct Debit Mandate => Get an access error. Reason: the compute does a read_group with a value on payment.provider, which non System Admin have no access to. Solution: Add a sudo for these _read_group Forward-Port-Of: odoo/enterprise#97127
This fixes an access problem that could leave online shoppers stuck after a successful payment when strict journal sequencing was enabled. Payment confirmation can now complete properly for public website users, improving the checkout experience.
Original PR description
Error in backend while public user payment confirmation Steps: - Install `website_sale` - Activate `restrict_mode_hash_table` on sale journal - From an incognito window, Make an order in ecommerce and pay it -> we get stucked on 'Your payment has been successfully processed' page because of an acces error in the backend This is because when posting a new move, we either to access or modify moves we get from `chain['moves']`, however these moves are returned with `sudo(False)` by `AccountMove._get_chain_info()`. opw-5128189 Forward-Port-Of: odoo/odoo#232143
The event registration page now supports translation for the date selection labels used when events have time slots. This helps visitors using other languages see a consistent localized registration experience.
Original PR description
Scenario: - adds slots to an event - register to that event with another language Result: "Selected Date" or "Select a Date" is not translated or translatable. Fix: wrap those JS strings with _t function. opw-5167911 Forward-Port-Of: odoo/odoo#231729
This change moves the rule that hides the tip product field from the general restaurant point-of-sale module to the Belgian blackbox point-of-sale module. It keeps the behavior limited to the market-specific compliance feature where it belongs, reducing the chance of unintended effects for other restaurant POS users.
Original PR description
- Move logic to hide `tip_product` field from `pos_restaurant` to `pos_blackbox_be` module. task-id: 5011427 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Large PNG images uploaded to the website are now resized without the visible quality loss caused by palette conversion. This removes the need for users to manually resize images before uploading and helps website content look sharper.
Original PR description
When uploading a png image ir_attachment, the image is not modified if its resolution is under the maximum 1920x1920. However, if the resolution is bigger, it both gets resized and is converted to a WEB palette, which visibly degrades the quality of the image. A workaround for this is to resize the image locally to be max 1920 on either dimensions and then upload it, which effectively bypasses this special treatment. Steps to reproduce: - Go to the website app - Add a Text - Image snippet - Double click the image - Upload a .png image of a resolution strictly greater than 1920 in either width or height Old behavior: the png is visibly degraded New behavior: the png is not visibly degraded opw-3935533 Forward-Port-Of: odoo/odoo#173508
The Last Appraisal button is available again for employees after it was unintentionally removed. This helps managers and HR users quickly access an employee's most recent appraisal from the employee record.
Original PR description
The action on res.users to see the last appraisal has been removed by this PR https://github.com/odoo/enterprise/pull/88518. This commit reintroduces the action in hr.employee.public. task-5166704
This fixes the planning dialog opened from a sales order so users can see and set allocated hours when creating a shift. It prevents missing scheduling information for sales-related planning services, making shift planning from sales orders work as expected.
Original PR description
Steps to reproduce: - Create a Sales order with planning services. - Click on To Plan stat button. - Click on empty cell Issue: - Plan dialog is opened but has missing allocated_hours field. Reason: - In this commit https://github.com/odoo/enterprise/commit/d21bd4b694ec63ba83bea077714a8fe928d6e014 allocated hours was merged with start_datetime using a widget and thus removed from view. - But in planning list view we hide start_datetime when we schedule shifts from sales order. Fix: - Add back allocated_hours conditionally to be visible when we schedule shifts as in other cases start_datetime is present. task-5117776 Forward-Port-Of: odoo/enterprise#96391
This update fixes several business-facing issues across accounting, payroll, localization reports, and translations. It improves tax accuracy in bank reconciliation and trial balance reports, allows authorized payroll administrators to cancel payslips, corrects Indian and Peruvian tax reporting data, and refreshes many translations.
This update fixes the layout of the ePos test widget and Epson printer IP field in Point of Sale settings. The fields are now better aligned and spaced, making the configuration screen clearer and easier to use.
Original PR description
- Adjust the display of the ePos test widget and Epson printer IP field in the Point of Sale configuration and settings views for better alignment and spacing. | View | Before | After | | :--- | :----: | ---: | | pos_config_view.xml | <img width="406" height="151" alt="image" src="https://github.com/user-attachments/assets/e2b6f619-62e7-44d8-928b-53ce5401d9a7" /> | <img width="403" height="184" alt="image" src="https://github.com/user-attachments/assets/96a0137d-cc56-4b2e-a322-811e5ad4b130" /> | | res_config_settings_views | <img width="535" height="249" alt="image" src="https://github.com/user-attachments/assets/679a1fce-45f3-4378-96bb-077d8cdef2e1" /> | <img width="535" height="218" alt="image" src="https://github.com/user-attachments/assets/efd62f18-a3fc-45f2-9ca2-4132a6b1a1df" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Helpdesk SLA reporting view now lets users add the SLA status grouping back after removing it. This avoids needing to reload the report and makes analysis smoother for support teams.
Original PR description
Currently, when the user opens the sla reporting view, if he removes the default grouping of sla_status, he has no way to get it back unless he reloads the view completly. This commit fixes this issue by adding the sla_status field to the group_by options. task-5076401 Forward-Port-Of: odoo/enterprise#95261
This update fixes several issues when launching AI chat from the systray, including missing message recipients, missing record details, and crashes on some forms. It also makes system AI agents visible for easier configuration and improves handling of prompt-based chats.
Original PR description
Currently: - when using the "Send as Message" button in a chat with an agent (opened from the systray), the default recipients are not added in the composer - creating a default prompt for "get help…
Currently: - when using the "Send as Message" button in a chat with an agent (opened from the systray), the default recipients are not added in the composer - creating a default prompt for "get help on a record" on a model that does not inherit from `mail.trhead` does not work: it's the default "ask ai" chat that is opened when clicking on the "ai" button in the systray from this record's form view ( the "prompt buttons" created are not shown and the record info is not added in the prompt) - clicking on this ai button in the systray from the res.users form view results in a crash (one tries to fetch a thread because the model has a "message_ids" field, but it's a related field and the model does not have a thread) - "system agents" are not shown in the agent views, making it difficult to edit them (while one user could want to change the model used by a system agent if that user does not have an api key for the provider of the default model) With this PR: - adds the default recipients (and creates their related partner if needed, as it would be done when opening the full composer from the chatter) - the info about the current record is always added to the context when using the ai systray button from a form view, even if there's no chatter - the "send as message" and "log note" are added from the launch chat service, only if the model inherits from `mail.thread` (instead of relying on the field `message_ids`) - moved the call to open the ai chat back to the form controller to avoid sending 2 events on the bus (currently systray sends an event to the form controller which in turn sends an event with the model info to the systray), and to make it easier to reuse this "open chat with agent" (shouldn't need to always go through the systray for that) - the "system agents" are now shown in the agents views. Their name/description have therefore been reworked. The website page generator and call summarizer agents are now archived by default, as they are only used in very specific contexts Task-5109721
This fix prevents active website live chat conversations from being canceled when a customer starts another chat. It helps customers keep ongoing conversations open across devices or sessions while still clearing only requests that are truly pending.
Original PR description
The website livechat module allows agents to start conversations with customers, but conversations are only displayed on the next navigation. Previously, pending chat requests were canceled whenever a customer opened a new live chat. The search condition for pending chats was too broad: it did not consider who started the conversation or whether it was already ongoing. As a result, ongoing chats could be unintentionally canceled. Customers could have multiple conversations (e.g. on different devices). This change ensures that only pending chat requests are canceled, leaving ongoing chats intact. task-5186567 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#232704 Forward-Port-Of: odoo/odoo#232624
Fixed an Accounting issue where grouping customer invoices by sent status showed every invoice in both Sent and Not Sent groups. Users can now rely on this grouping to review invoice communication status accurately.
Original PR description
### Issue: The groups "Sent" and "Not Sent" display all the invoices. ### Steps to reproduce: - Go in Accounting > Customer > Invoices - Create a custom GroupBy with "Sent" - Unfold the groups: all invoices appear in each group ### Cause: `web_read_group` returns the groups with their length and the domain corresponding. When unfolding `web_search_read` uses the given domain to get the records to display. Here the issue comes from the domain returned, it contains `['move_sent_values', '=', 'sent']`, but `move_sent_values` is a computed field that doesn't have a `_search` method so the domain doesn't filter on this field. ### Solution: Add the method `_search_move_sent_values` to search on `is_move_sent`. opw-5164650 Forward-Port-Of: odoo/odoo#232400
HTML-based automatic values in signing documents are now converted to readable plain text instead of showing raw HTML. The signing flow also no longer crashes when constant multiline fields are used, making document completion more reliable.
Original PR description
Before this task, when a html field is used to populate auto value, the html is kept, making it unusable. Moreover, JS error prevent to use constant multi line fields. task-5104647
The spreadsheet component was updated to a newer version with fixes for chart behavior and duplicate chart identifiers. This should make spreadsheet reports and dashboards more reliable, while also improving calculation performance for larger sheets.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/1c1d1eca68 [REL] 19.0.7 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/1c1d1eca68 [REL] 19.0.7 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/d6535bdab4 [FIX] charts: fix smart chart engine [Task: 5079093](https://www.odoo.com/odoo/2328/tasks/5079093) https://github.com/odoo/o-spreadsheet/commit/3011482818 [PERF] evaluation: zonify evaluation [Task: 4936229](https://www.odoo.com/odoo/2328/tasks/4936229) https://github.com/odoo/o-spreadsheet/commit/cb66cfd145 [FIX] model: ensure chart ID unicity [Task: 5153264](https://www.odoo.com/odoo/2328/tasks/5153264) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This fixes a display issue where checkbox borders in the website link editing popover blended into the background when dark mode was enabled. Users editing links can now clearly see and use the advanced options checkbox, improving usability for dark mode users.
Original PR description
In dark mode the checkbox in the link popover wasn't visible due to the same popover background and checkbox border colors. Steps to see the issue: - Set dark mode as the preferred theme - Open Website and start editing - Click on any link - Click on the "Edit Link" pen icon - Click on the "Advanced Mode" gear icon => The checkbox borders aren't visible task-5155669
Full-day leave requests using time off types measured in hours now display correctly as full days instead of being shown as half days. This prevents confusion for employees and managers reviewing time off calendars.
Original PR description
Steps to reproduce: - Go to Time Off - Create a time off type that can be taken in hours - Take a full day of leave using this type of time off - The time off will be displayed as half a day, even though it is a full day Reason: The check to display the time off as half a day did not check that the time off starts in the afternoon, which caused the issue. How it was fixed: The condition now checks if the time off starts in the afternoon so that the display is correct. Task ID: 5072255
The table selection popup in POS self-ordering now lists tables consistently by floor and table number. This makes it easier for customers or staff to find the correct table and reduces confusion during ordering.
Original PR description
Task [#4991803](https://www.odoo.com/odoo/my-tasks/4991803) Runbot: https://runbot.odoo.com/runbot/bundle/18-0-incremental-order-table-pop-pos-self-order-ltra-391429 --- When selecting a table in the POS self-order, we sort the tables by `floor_id` and then by `table_number` in ascending order. This ensures a consistent and user-friendly experience when choosing a table. Forward-Port-Of: odoo/odoo#222811 Forward-Port-Of: odoo/odoo#222421
Fixes an issue where changing the speed of animated background shapes in the website editor had no effect. Users can now adjust shape animation speed as expected when designing pages, improving editing reliability.
Original PR description
Steps to reproduce: - Drop a snippet - Add a background shape (e.g. Rainy 05) - Use the slider to change the speed - Nothing happens This commit is adapting `CSS_ANIMATION_RULE_REGEX` as it was too restrictive, the space after the colon is now optional. task-5170549 Forward-Port-Of: odoo/odoo#231747
A flaky automated test around browser tab notifications in the Discuss app was fixed. This improves reliability of Odoo's test suite and helps avoid false build failures without changing end-user behavior.
Original PR description
Before this commit, the following test could fail non- determinstically: ``` [HOOT] Test "@mail/discuss_app/discuss/out-of-focus notif takes new inbox messages into account" failed: 3. [toBe]…
Before this commit, the following test could fail non- determinstically: ``` [HOOT] Test "@mail/discuss_app/discuss/out-of-focus notif takes new inbox messages into account" failed: 3. [toBe] expected values to be strictly equal > Expected: "(1) Inbox" > Received: "(1) Odoo" ``` This happens because the test is opening discuss and simulating posting of message from an external user, in order to assert the tab shows "(1) Inbox", where (1) is the number of unread messages and "Inbox" comes from the active thread of discuss app. The test can have "Odoo" because this is the default tab title and posting of message happened so fast that discuss app client action did not have time to notify of inbox being the active conversation, even when awaiting the showing of counter on discuss sidebar. - The notifying of active conversation name in discuss app is a side-effect of rendering of discuss app. - The showing of badge next in discuss sidebar item and the (1) both come from "mail.message/inbox" bus notification. When `mail.message/inbox` is faster than side-effect rendering, then we get this "(1) Odoo" instead of "(1) Inbox". It happens a very short time, as it eventually turns into "(1) Inbox", but the test just awaits badge rendering and then assert synchronously the value in tab title. This commit fixes the issue by awaiting asynchronously the expected document.title in HOOT test. Note that document.title is not in DOM because HOOT has the document.title mocked, so we patch it to have awaiting of step. Fixes runbot-error-233459
This fix prevents an error when users try to post WIP accounting entries for a manufacturing work order that is still in progress. The system now handles unfinished work orders correctly, allowing the WIP wizard to open instead of blocking the process with a traceback.
Original PR description
Issue: - Traceback when calculating the cost of a workorder Step to reproduce: - with apps: mrp, accountant - create a MO for a product - add a WO - confirm - start the WO - Action > "Post WIP Accounting entry" Current Behavior: - get a traceback Expected behaviour - open the WIP wizard Cause of the issue: - to calculate the cost of production, wizard use all WO including the one still running. However as it is still running its end date is registered as `False`. It raises a traceback when it compares the end of the WO with a limit date because `bool` and `datetime.datetime` are not compatible for '<'. Solution: - check if the end date of the WO is defined Test: - in module mrp_workorder an override of button_start change how work order are launched. Therefore, the test should be launched on an Enterprise run. opw-4961873 Forward-Port-Of: odoo/enterprise#97912 Forward-Port-Of: odoo/enterprise#93812
Valid Chilean vendor credit note files are now imported as credit notes instead of being incorrectly treated as invoices. This prevents import errors and helps accounting teams process supplier credit notes without manual workarounds.
Original PR description
### Steps to reproduce Go to Accounting -> Vendor Bills Attempt to import a valid vendor credit note by dragging-dropping the DTE file in the list view. Notice how the vendor credit note gets created with an error: ``` Error importing attachment 'DTE.xml' (type=l10n_cl.dte): This specific error occurred during the import: You can not use a credit_note document type with a invoice ``` ### Analysis `_l10n_cl_import_dte` should set the move type to credit note when the document type code is '61', but does not. This was broken by 42744fcecdbd36e See https://github.com/odoo/enterprise/commit/42744fcecdbd36ea0101070c68299227a9f204a6#diff-044bc1ef3ea4878783a064258b4436b44b3064c5196c22d0d104daee8fde4501L294 ### Solution Correctly set move_type to `in_refund` if the document type code is '61' Linked issue https://github.com/odoo/odoo/issues/232348 task-none Forward-Port-Of: odoo/enterprise#97694
This fix prevents an error when users try to post work-in-progress accounting entries for a manufacturing order with a work order still in progress. The system now handles unfinished work orders correctly, allowing the WIP wizard to open instead of interrupting the user with a crash.
Original PR description
#### Issue: - Traceback when calculating the cost of a workorder #### Step to reproduce: - with apps: mrp, accountant - create a MO for a product - add a WO - confirm - start the WO - Action > "Post…
#### Issue: - Traceback when calculating the cost of a workorder #### Step to reproduce: - with apps: mrp, accountant - create a MO for a product - add a WO - confirm - start the WO - Action > "Post WIP Accounting entry" #### Current Behavior: - get a traceback #### Expected behaviour - open the WIP wizard #### Cause of the issue: - to calculate the cost of production, wizard use all WO including the one still running. However as it is still running its end date is registered as `False`. It raises a traceback when it compares the end of the WO with a limit date because `bool` and `datetime.datetime` are not compatible for '<'. #### Solution: - check if the end date of the WO is defined In module mrp_workorder an override of [button_start](https://github.com/odoo/enterprise/blob/18.0/mrp_workorder/models/mrp_workorder.py#L284-L295) change how work order are launched. Therefore, the test should be launched on an Enterprise run. opw-4961873 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232758 Forward-Port-Of: odoo/odoo#221938
This fixes how VoIP contact searches combine phone keypad search terms with other contact filters. Users should see more accurate contact results when searching from the VoIP interface, reducing cases where valid contacts were not found.
Original PR description
t9_search should be ORed to the subdomain, which in turn should be ANDed to the domain. Currently, both the subdomain and the t9_search are ANDed to the domain, resulting in a "subdomain AND t9_search" condition, which is not correct and unlikely to match anything. Forward-Port-Of: odoo/enterprise#97811 Forward-Port-Of: odoo/enterprise#97731
Products assigned to allowed subcategories now appear correctly in mobile self-order sessions. This ensures customers can see and order all configured items, matching the behavior already available in PoS and kiosk modes.
Original PR description
**Steps to reproduce:** - Make a sub category, such as Soda for Drinks in PoS product categories - Make a product and assign this sub category to it - Allow the category in the PoS configuration for…
**Steps to reproduce:** - Make a sub category, such as Soda for Drinks in PoS product categories - Make a product and assign this sub category to it - Allow the category in the PoS configuration for a Mobile order Session - Open the Session, the product will not be displayed **Problem:** When a product has a subcategory, it is not displayed in the mobile interface, even if said category is allowed in the settings. This problem does not occur in the Kiosk, only on the mobile sessions. **Why the fix:** The products should be displayed if their category has been added to the available categories in the settings. It now works as it does in the PoS and the Kiosk, meaning it is displayed as long as the sub category is mentioned in the Restrict Categories section of the configuration. Also, in case you have categories A -> A/B -> A/B/C and you don't have products associated to A but you have some in C, they won't show up in the self. Currently, products from child categories can be shown in the self when all their parent categories had products associated to them. When computing the available categories, we would only return categories which had products directly related to them, regardless if their nth child had some. Thus in the setting mentioned previously, only the category C was returned. However this logic is not correct with the fact that the self, not in kiosk mode, only shows the top categories, meaning only the categories without parents. https://github.com/odoo/odoo/blob/434e8cf53a039cc2efc3cb531608028182928ad9/addons/pos_self_order/static/src/app/pages/product_list_page/product_list_page.js#L146-L151 The self was not showing the products from C as C had a parent category. In order for the product from C to be shown, the category A had to be included in the list of available categories. opw-4934728 Forward-Port-Of: odoo/odoo#221740
This fix ensures newly created vendor bills correctly show their commercial status and prevents the commercial event process from getting stuck when an event is resent. It also corrects the issuer acceptance event so submissions are accepted properly by Colombia's DIAN tax authority.
Original PR description
this commit solves following issues: - the commercial status was missing on newly created vendor bills - the flow got stuck when an event had already been sent and we tried to send it again - The accept by issuer event generated errors on DIAN's side task: 5064534
This update prevents an error message from appearing when users open a spreadsheet dashboard dropdown in the search bar. It restores missing functionality in the Community edition so spreadsheet dashboards work more reliably.
Original PR description
…in community edition Description of the issue/feature this PR addresses: To move the missing code from enterprise edition Current behavior before PR: Open a spreadsheet dashboard dropdown in search bar in 19.0 community edition, the traceback message box appeared: AttributeError: The method 'ir.model.has_searchable_parent_relation' does not exist Desired behavior after PR is merged: No traceback --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents errors when printing PDF documents through IoT in manufacturing work orders. It ensures the document list is handled correctly, so users can print quality-related documents without encountering a traceback.
Original PR description
Due to `active_ids` being provided with a `list[list]` instead of just `list`, pdf document rendering was returning a traceback. This commit fixes the issue by flattening the list passed to the context of the client action. (e.g. `res_ids` was provided `[[21, 22], [21, 22]] instead of [21, 22, 21, 22]`). opw-5190570
This fixes a layout problem on right-to-left website pages where portal pages with chatter could show excessive blank horizontal space. Dynamic website styling now uses the page's selected language, ensuring the layout direction matches what visitors see.
Original PR description
Scenario to reproduce from 18.0: - install right-to-left (eg. arabic) language on website - open a portal record with chatter (eg. /my/invoices/1) - switch to right-to-left language - scroll…
Scenario to reproduce from 18.0: - install right-to-left (eg. arabic) language on website - open a portal record with chatter (eg. /my/invoices/1) - switch to right-to-left language - scroll horizontally to the left Result: there is a huge amount of whitespace scrollable to the left. Cause: In 18.0, the chatter has an hidden textarea .o-mail-Composer-fake with position "left: -10000px; top: -10000px;". But the chatter assets (portal.assets_chatter_style) are called dynamically with getBundle which is using the session lang instead of the website lang. So the bundle is gotten with the wrong lang and the CSS is not rtlcss'ed and this create big whitespace to the left of the page. Fix: set the website request language when getting bundle for the frontend. Note: this PR also create a TestLangUrlCommon to prevent TestLangUrl tests of being run a second time in TestControllerRedirect. opw-5013485 Forward-Port-Of: odoo/odoo#232759 Forward-Port-Of: odoo/odoo#223575
Code cleanup and technical improvements
This update applies code quality checks and cleanup across the VoIP feature, including the softphone and related tests. It does not introduce new user-facing functionality, but helps keep the calling tools more reliable and easier to maintain over time.
Original PR description
Forward-Port-Of: odoo/enterprise#97753
This update applies automated code quality rules to the VoIP area without changing how users place or manage calls. It helps keep the codebase consistent and easier to maintain, reducing the risk of future issues.
Original PR description
Forward-Port-Of: odoo/enterprise#97754
Documentation and clarification updates
This pull request adds or updates a contributor license agreement signature for DevSijariya. It is an administrative legal update that confirms contribution eligibility and does not change Odoo features or user workflows.
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