Daily updates from Odoo
Thursday, October 23, 2025
23 changes · 19.0
Enhancements to existing features
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
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
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
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#227260This 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 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
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
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
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 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
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 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 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