Friday, September 12, 2025
34 changes · 19.0
Enhancements to existing features
Live chat tags are now easier to find, select, and manage in the conversation side panel, with search highlighting, keyboard-style navigation, clearer green action icons, and better mobile display. Tags also stay in sync in the “looking for help” sessions view, are shown in the intended order, and users can no longer create empty whitespace-only tags.
Original PR description
This commit introduces the following improvements to the livechat info side panel tags feature: - Characters in the tags matching the search term are highlighted. - The list of tags is navigable and the active item is highlighted. - Add and Edit tags icons are now green following convention. - Tags are kept synchronized in the "looking for help" sessions view. - Tags have a sequence number and are displayed ordered on that. - On mobile the tag list is now show in the bottom sheet. This commit also fixes the issue of creating a tag with only whitespace. task-5065034
Discuss now asks users for their name before joining from the welcome page and uses an interactive dialog to guide camera and microphone permissions. Call buttons now reflect permission status, making it clearer when users can join or configure calls.
Original PR description
Purpose of this PR: - to join channel through welcome page requires name - removed old notifications, added interactive permission dialog instead for voice sensitivity configuration and call - call actions icons change according to permission state for both call view and welcome page - rtc service tracks camera/mic permission state task-[4967087](https://www.odoo.com/mail/view?model=project.task&res_id=4967087)
Audit report PDFs now avoid adding extra title pages for empty template articles. A title page is only created when an article contains just one heading, making reports shorter and easier to review.
Original PR description
Previously, the algorithm that generated the audit report PDF would create a page title for empty articles using the article name. This often resulted in unnecessary pages, since many template articles are considered empty (because they contain elements that should not be printed). To reduce page clutter, we are revising the algorithm and introducing a new heuristic: a page title will be generated only if the article contains a single heading (h1, h2, or h3) and no other text elements. In such cases, the heading itself will be used as the page title. Task-5079472
The VoIP interface now shows a clear visual indicator when it is running in demo mode. This helps users and support teams quickly understand that calling behavior is simulated, reducing confusion during trials, testing, or demonstrations.
Original PR description
[Task-5055883](https://www.odoo.com/odoo/project/5778/tasks/5055883)
The German tax report has been restructured to work without the previous balance column. This keeps the report aligned with the updated layout and helps ensure tax reporting remains accurate for German localization users.
Original PR description
After removing the `balance` column, we need to refactor the code that depends on it task-5046641
The German tax report has been reorganized to better match the official VAT advance return structure used in ELSTER guidance. This makes the report easier for German businesses to follow and helps align Odoo's tax reporting layout with local filing expectations.
Original PR description
Rework the structure of the German Tax Report according to the very well detailed structure https://sevdesk.de/ratgeber/buchhaltung-finanzen/ustva/formular-elster/ task-5046641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Auditors can now get Audit Working Files in PDF format when reviewing completed internal audits. This makes audit verification easier by providing the required working-file documentation beyond the existing Trial Balance export details.
Original PR description
When verifying internal audits that have been done, auditors may request reports of Audit Working files. The working file must be available in PDF. The export currently only contains the Trial Balance with the audit state and last comments (more recent annotation) during the audit. task-id: 4993075
The Point of Sale mobile interface now remembers the customer display selected by the cashier. When Point of Sale is opened again, the same display is launched automatically, saving setup time and reducing repeated manual steps.
Original PR description
- Save the selected display in cookie - Open the selected display automatically when open the PoS
Resolved issues and error corrections
This fix lets users with invoicing permissions update Argentine partner perception and withholding details on customer or vendor records. It helps billing staff prepare invoices correctly without needing full accounting administrator access.
Original PR description
Description of the issue/feature this PR addresses: This pull request adds `l10n_ar.partner.tax_billing` on the `l10n_ar_partner_tax` model, granting read, write, and create permissions (but not…
Description of the issue/feature this PR addresses: This pull request adds `l10n_ar.partner.tax_billing` on the `l10n_ar_partner_tax` model, granting read, write, and create permissions (but not unlink) to users in the `account.group_account_invoice` group. Current behavior before PR: Only users with administrator access rights on the Accounting module could modify the "Perceptions / Withholdings" Section on the "Accounting" tab of the partners. <img width="1236" height="673" alt="image" src="https://github.com/user-attachments/assets/92b42973-2b01-4019-8e23-5e3cbf5111a4" /> Desired behavior after PR is merged: Users with invoicing rights can modify the Accounting module could modify the "Perceptions / Withholdings" Section on the "Accounting" tab of the partners. This is needed to properly create the invoices with the perceptions / withholding that apply, for example in cases where by default all partners are set with perceptions, but some depending on their activity are not taxed. In that case, the user that created the partner needs to be able to modify the field by putting a 0% aliquot or deleting the perception line on the contact. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225180
This fixes a crash that could happen when two employees had time off on the same dates but their time off types handled public holidays differently. Updating a public holiday during those overlapping absences now works reliably, helping HR teams manage calendars without interruptions.
Original PR description
When two timeoff (one with Ignore Public Holidays and the other without) have the same dates, if you modify a public holidays that happend during that time, it will trigger a traceback. Steps to…
When two timeoff (one with Ignore Public Holidays and the other without) have the same dates, if you modify a public holidays that happend during that time, it will trigger a traceback. Steps to reproduce: ------------------- * Marc demo and Abigail Peterson using the same calendar * Create a "Paid time off" leave for marc demo: June 19 - June 20 * Create a "Extra time off" for abigail: same date * Update Time off type "Extra Time Off" to "Ignore Public Holidays" * Approve both leave request previously created * Create public holidays on June 19 --> traceback Observation: When both time off have the same dates it will overide the value in the dictonary https://github.com/odoo/odoo/commit/0d846ecd1ec7ff5149d580d3494b1a4bab1e68d2#diff-38469def2f870bb866f971f57797dd7c21b6a95d52a8eae72f832f0eea2434f9R464 and when it will try to call the employe_id it will trigger the traceback https://github.com/odoo/odoo/commit/f72ac3a14d76d4fb53ec3a092d08afafe4c35888#diff-38469def2f870bb866f971f57797dd7c21b6a95d52a8eae72f832f0eea2434f9R561 Why the fix: ------------ Added a new key on work_days_data to avoid the collision of two similar timeoffs. opw-4933820 Forward-Port-Of: odoo/odoo#225884 Forward-Port-Of: odoo/odoo#221942
This update corrects several issues affecting helpdesk ticket assignment, accounting report exports, payroll calculations, and electronic invoicing checks. It also refreshes translations and hides an outdated Sign setting, improving reliability and reducing user confusion across multiple business workflows.
This fixes an issue where shop floor quality checks could crash or remain stuck in the wrong result after a worker reverted and repeated a check. Manufacturing operators can now retry quality checks and see the correct highlighted status, reducing blockers during production.
Original PR description
To reproduce: - Create a BoM for a product with an operation and a quality point for this operation - Create and confirm a MO for this BoM - Process it in Shop Floor, pass or fail the QC, revert it then pass/fail it again Current behaviour: traceback Expected behaviour: mark the quality check with primary highlight Introduced in: https://github.com/odoo/enterprise/pull/91986
This fix prevents Chilean electronic factoring document sending from crashing when the tax authority returns unexpected or invalid responses. It also refreshes invalid access tokens and adds test coverage, improving reliability when external tax services have intermittent issues.
Original PR description
There were some typos in this method. We add test coverage and we reset the token in situations where we receive invalid responses. It's apparently common for the SII to have some random errors that could result in invalid tokens being generated. Based on the work in https://github.com/odoo/enterprise/pull/92035. Forward-Port-Of: odoo/enterprise#94342 Forward-Port-Of: odoo/enterprise#94134
Batch payments now ignore payment term lines that have already been reconciled. This prevents errors when vendors are paid in multiple installments, allowing each installment to be matched to its bank statement normally.
Original PR description
**Steps to reproduce:** - Install accountant - Go to "Accounting / Configuration / Invoicing / Payment Terms" - Create a payment term having at least 2 installments (e.g. 20%-80%) - Create a bill: *…
**Steps to reproduce:** - Install accountant - Go to "Accounting / Configuration / Invoicing / Payment Terms" - Create a payment term having at least 2 installments (e.g. 20%-80%) - Create a bill: * Vendor: [any] * Payment terms: [the created payment term] * Amount: 1000 - Confirm the bill - Pay the first installment from the bill (i.e. 200) - Go to "Accounting / Vendors / Payments" - Select the payment and create a batch - Validate the batch payment - From Accounting dashboard, go to Bank journal - Create a statement: * Partner: [None] * Amount: -200 - Reconcile the statement with the batch payment - From the bill, pay the second installment (i.e. 800) - Go to "Accounting / Vendors / Payments" - Select the payment and create a batch - Validate the batch payment - From Accounting dashboard, go to Bank journal - Create a statement: * Partner: [None] * Amount: -800 - Reconcile the statement with the batch payment **Issue:** The following UserError is raised: "You are trying to reconcile some entries that are already reconciled." **Cause:** When reconciling a batch payment, all the payment term lines from the invoices/bills linked to the payment are used. However, in this case, when the first batch payment has been reconciled, the first payment term line of the bill (linked to the first installment) has been reconciled. It should not be reused when reconciling the second batch payment. **Solution:** Exclude reconciled payment term lines when reconciling a batch payment. opw-4830185 Forward-Port-Of: odoo/enterprise#92524 Forward-Port-Of: odoo/enterprise#91367
This update corrects several inventory replenishment planning issues so users see clearer warnings, graph labels, and ordering frequency information. It also improves deadline calculations across companies and locations, helping purchasing and stock teams get more accurate replenishment recommendations.
Original PR description
- make the invisible condition on the warning icon lighter to process - ensure the labels are shown on the Y axis of the graph no matter the value - show "Ordering Frequency: On demand" if the min and max qties are the same - compute the deadline_date one company at a time in case of different horizon_days - add a groupby location in _compute_deadline_date - do not add horizon_days to total_delay since it's not a lead time per se - removing a forgotten `visibility_days` task 5072870 & 19.0 inventory testing pad --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website builder now avoids unnecessary background work when opening the theme settings tab. This reduces the waiting time for users customizing website themes, with an estimated performance improvement of about 20%.
Original PR description
The purpose of this commit is to reduce the rendering time of the theme tab. Currently, when we have a BuilderRow that contains a collapse slot, we always render it in order to know whether it contains content or not, so that we can display the collapse arrow. The collapse feature is widely used in the theme tab. This results in a lot of unnecessary calculations, because the only case that requires dynamic calculation of the collapse arrow is the BuilderOption for visibility. So we will therefore add the “observeCollapseContent” props to enable or disable the rendering of the slot in order to dynamically display the collapse arrow. This change saves approximately 20% of time. 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#223929
Repair orders that require quality checks can now be created and saved without an error. The fix ensures lot and serial number information is handled correctly, reducing interruptions for repair and quality teams.
Original PR description
Issue: ---------------------------------------- When creating a repair order that has a quality point (defined for all products or for a specific product), or when trying to create a new lot/serial…
Issue: ---------------------------------------- When creating a repair order that has a quality point (defined for all products or for a specific product), or when trying to create a new lot/serial number from the repair order, a traceback is triggered: `ValueError: Invalid field 'lot_id' in 'quality.check'` Steps to reproduce: ---------------------------------------- - Install the `quality_repair` module. - Create a Quality Point for Operation: Repair Orders and set Control per Product/Operation. - Create a Repair Order and add a product to repair. - Save the Repair Order. - Traceback is triggered. Cause: ---------------------------------------- In PR https://github.com/odoo/enterprise/pull/90930, the `lot_id` field was replaced by a many2many field `lot_ids`. Repair orders were still trying to assign `lot_id`, causing the error. Solution: ---------------------------------------- In this commit, we ensure that `lot_ids` is set properly, allowing repair orders with quality checks to work smoothly and enabling users to assign lots/serial numbers without triggering errors. Task ID:- 5067457
Users can now save the document sorting wizard for finance folders even when pinned multi-actions include accounting record creation. The update prevents unsuitable AI actions from being selected automatically, while still allowing users to choose them manually when needed.
Original PR description
Bug === When trying to save the sort wizard for a folder having a pinned multi action, with a `documents_account_record_create` child action, then the constraint `_check_use_in_ai` was triggered, and it shouldn't. The reason is the way recursive compute work, we can not set `False` as the default, because it will allow the parent to be computed with that. Task-5077569
This fixes an error that occurred when users allocated a manufacturing order to a sales order or outgoing delivery. Users can now assign quantities in the manufacturing allocation report without being blocked by a crash.
Original PR description
Issue: ---------------------------------------- When creating a manufacturing order and trying to allocate it to the desired sale order or outgoing picking, a traceback is triggered: `AttributeError:…
Issue: ---------------------------------------- When creating a manufacturing order and trying to allocate it to the desired sale order or outgoing picking, a traceback is triggered: `AttributeError: 'stock.move' object has no attribute 'group_id'. Did you mean: 'grouped'?` Steps to Reproduce: ---------------------------------------- - Install the `mrp` module and enable `Allocation Report for Manufacturing Orders`. - Create a product with a BoM. - Create a Sale Order or outgoing picking for the product. - Create a Manufacturing Order and go to the allocation report. - Try to assign it to the picking. - Traceback is triggered. Cause: ---------------------------------------- In PR odoo#212679, the `group_id` field was replaced by a many2many field `reference_ids`. However, the `_action_assign` method still tried to set the value of `group_id` instead of `reference_ids`, causing the error. After this Commit: ---------------------------------------- In this commit, we ensure that `reference_ids` is used and set properly instead of `group_id`, allowing users to assign quantities to the desired picking smoothly without errors. Task ID: 5076863
Preparation tickets in Point of Sale now include customer notes added to individual order lines. This helps kitchen or preparation staff see special instructions at the right moment, reducing missed requests and order mistakes.
Original PR description
In this commit: ----------- Orderline-level customer notes are now printed on preparation tickets. Task-4879140 Related: https://github.com/odoo/enterprise/pull/90229 Forward-Port-Of: odoo/odoo#226382 Forward-Port-Of: odoo/odoo#215761
Printing an invoice now uses the same custom PDF report selection as sending an invoice. This ensures customers receive documents with the correct partner or journal-specific template, improving consistency and reducing manual workarounds.
Original PR description
Before: Clicking 'Print' on an invoice did not respect the custom PDF report template set on the partner profile or journal. The selection was only applied in the 'Send' flow, while 'Print' always fell back to the generic invoice report. After: 'Print' now uses `_get_default_pdf_report_id()` to determine the correct PDF report. This ensures the same priority order is applied as in 'Send'. Explanation: The method `_get_default_pdf_report_id()` encapsulates the logic for choosing the report template (user → invoice default in 18.0, extended with journal in later versions). By reusing this method, we avoid duplicating logic and ensure consistency between 'Send' and 'Print'. task-5072522 Forward-Port-Of: odoo/odoo#226082
New users can now connect Mercado Pago accounts using the existing access token setup while OAuth is not yet available. Odoo also sends the account country to Mercado Pago so the correct account is retrieved during onboarding.
Original PR description
Enable old account configuration for new users. Country code is passed to Mercado Pago proxy so correct account can be retrieved. OAuth was not configured yet on Odoo side, which means that new users couldn't connect their account. Access token is now visible and editable for all users.
Fixed an issue where adding a service line after a sales order was confirmed showed a zero cost instead of the product’s configured cost. This keeps margin information accurate for sales teams and financial reporting.
Original PR description
…O confirmation **Problem:** When a service is added on a SO after the confirmation the cost column (purchase_price) is 0 **Steps to reproduce:** - make sure that sale_timesheet_margin is installed - create a service with a positive cost - create a SO for 1 unit of this service - confirm - add a new line on the SO for the same service **Current behavior:** the cost is 0 **Expected behavior:** the cost should be the cost you set on the product form **Cause of the issue:** since this PR https://github.com/odoo/odoo/pull/207228 services that are "ordered_prepaid" on confirmed sale order are filtered out the purchase price computation https://github.com/odoo/odoo/blob/5f6d2afa8c09fe72c01d056ebef01214567a4a99/addons/sale_timesheet_margin/models/sale_order_line.py#L9-L15 opw-5016622 Forward-Port-Of: odoo/odoo#225704 Forward-Port-Of: odoo/odoo#225027
This fixes cases where protected links in the HTML editor, such as important website builder links, could be accidentally removed when deleting images, editing locked content, or removing multiple links at once. The toolbar now better reflects when a link cannot be removed, helping prevent broken page layouts after saving.
Original PR description
### [FIX] html_editor: prevent removal of unremovable links with images The override that remove a link on `deleteImage` command did not check if the link was unremovable before removing it. ###…
### [FIX] html_editor: prevent removal of unremovable links with images The override that remove a link on `deleteImage` command did not check if the link was unremovable before removing it. ### [FIX] html_editor: prevent removal of links in contenteditable=false If a link was `contenteditable=true`, but inside a `contenteditable=false`, it could be removed ### [FIX] html_editor: prevent removal of unremovable links in batch removal If the selection covers several links, the "unlink" of the toolbar removes all the links selected. This included the links which were supposed to be unremovable. The procedure for removing the links is changed to avoid removing the unremovable nodes. The availability of the tool in the toolbar is also changed to better reflect whether there is links to remove. In case of unremovable links, the tool is shown as disabled Steps to reproduce: - Open website builder - In the toolbar, insert links just before and after the "Contact Us" - Select from the link inserted before, to the one after - In the toolbar, click "Remove Link" - Bug: the link on "Contact Us" is gone, but it was "unremovable" (Saving after these steps currently breaks the toolbar's rendering) Forward-Port-Of: odoo/odoo#223237
This fix prevents carousel slides from changing when translators use arrow keys while editing text in the website builder. It avoids a crash and makes translating carousel content behave as expected, so users can move the text cursor safely.
Original PR description
Since the initial [website builder refactor], when in translate mode in website builder, pressing an arrow key when the cursor is inside the text of a carousel moved to the next slide once, pressing…
Since the initial [website builder refactor], when in translate mode in website builder, pressing an arrow key when the cursor is inside the text of a carousel moved to the next slide once, pressing again caused a crash. Before the refactor, there was also the slide behavior but not the crash. The arrows triggers the slide because the contenteditable is inside the slide in translate mode. It does not trigger it in normal edit mode because the contenteditable is on an ancestor. This commit fixes it by changing the config pass to the bootstrap carousel in edit mode, so that the carousel does not slide on keyboard. Changing this config makes the event handlers to stop the keydown event on the other parts of the carousel redundant, so they are removed Steps to reproduce: - Open website bulider - Drop the snippet "Quotes Minimal" - Add a second language to the website - Edit the translation for the second language - Click on the text in the quote in the carousel - Press a left or right arrow key - Bug: the slide changed (instead of moving the cursor in side the text) - Click on the text of the slide that is now shown - Press again the arrow key - Bug: Crash [website builder refactor]: https://github.com/odoo-dev/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641 Forward-Port-Of: odoo/odoo#226273