Friday, July 25, 2025
18 changes · 18.0
New functionality added to Odoo
Odoo can now use systemd socket activation with its prefork server mode, matching support already available in threaded mode. This gives operations teams more flexibility and consistency when deploying or managing Odoo services.
Original PR description
This commit brings the prefork model to feature parity with the threaded model, allowing systemd socket activation to be used in both cases.
This update adds automated checks to ensure mail alias domain behavior is covered in the enterprise test suite. It helps reduce the risk of regressions in email alias handling without changing customer-facing functionality.
Original PR description
add test for this see https://github.com/odoo/odoo/pull/219223
Resolved issues and error corrections
The HTML editor color picker now shows background color opacity changes immediately in the preview. This helps users see the final appearance while editing content, reducing confusion and trial-and-error.
Original PR description
### Steps to reproduce: - Type a command (e.g., /table) to insert a table. - Select some cells and apply a background color using the toolbar. - Click the Background Color button again in the toolbar. - Go to the Custom tab in the color picker. - Adjust the opacity using the slider. ### Description of the issue/feature this PR addresses: - Adjusting the opacity slider had no effect on the background color preview. ### Desired behavior after PR is merged: - The preview updates dynamically as the opacity slider is moved. task-4942309 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix lets Odoo disable image transformation controls in places where they do not work, such as PDF reports. Users avoid applying visual changes that would be ignored, reducing confusion and improving report editing reliability.
Original PR description
Problem: In some contexts, such as reports, the `transform` option is not needed or applicable. For example, `transform` is not supported by `wkhtmltopdf`, so any applied transformation is ignored. Solution: Introduce the ability to disable the `transform` option when needed. opw-4809761 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218352
The checkout address form now correctly recognizes Uruguay as the website country. This restores the Uruguay-specific identification type options customers need during ecommerce checkout.
Original PR description
Steps: - Install Uruguay Ecommerce. - Set Uruguay company on website. - Go to address page on the checkout. Issue: - Uruguay related ID types are missing. Cause: - Because of bad adaption of Fw-port to 18.0 wrong county_code was set on PR https://github.com/odoo/odoo/pull/218920. Fix: - Update county_code to UY instead PE.
Fixed a rounding issue where analytic accounting splits could add up to a slightly different total than the original invoice line. This prevents one-cent discrepancies in analytic reports and keeps accounting figures aligned with invoices.
Original PR description
**PROBLEM** Sometimes, the sum of the generated analytic lines for an invoice line doesn't equal the amount on the invoice line. For example, in invoice line with a price of 182.25, with an analytic…
**PROBLEM** Sometimes, the sum of the generated analytic lines for an invoice line doesn't equal the amount on the invoice line. For example, in invoice line with a price of 182.25, with an analytic distribution split into 98% and 2%, the generated analytic lines amount to 182.26 (off by 0.01) because of rounding. **STEP TO REPRODUCE** 1. install the accounting module and enable the Analytical Accounting option. 2. create an invoice, with a line with a price of 182.25, and a distribution of 98%/2%. 3. confirm the invoice. 4. go to Accounting/Analytics Items and notice the sum of analytical line is 182.26 instead of 182.25. **CAUSE** We only apply rounding after having calculated all the analytic line amounts. This mean we will sum the rounding error. In our example, the computation is like so: 98% of 182.25 = 178.605 rounded to 178.61 2% of 182.25 = 3.645 rounded to 3.65 178.61 + 3.65 = 182.26 **FIX** We compute the last analytic line for each plan, relatively to the other. `last_line_amount = invoice_price - sum(rounded_other_line_amount)` This ensure that the sum of analytic lines is always equal to the invoice price. opw-4848784 Forward-Port-Of: odoo/odoo#219602 Forward-Port-Of: odoo/odoo#214736
A failing automated test for restaurant point-of-sale order synchronization was corrected. This helps keep the restaurant POS quality checks reliable, reducing the risk of synchronization issues reaching users.
Original PR description
Fixes the failing test `test_synchronisation_of_orders` by creating the order data through frontend `ORM` calls instead of patching the `notify_synchronisation` method. Introduced here: https://github.com/odoo/odoo/pull/207406 Error-[230275](https://runbot.odoo.com/odoo/runbot.build.error/230275)
This fixes an internal testing helper so freezing time is explicit instead of accidentally toggling on or off. It reduces the risk of misleading automated tests and helps developers catch issues more reliably before they affect users.
Original PR description
The freezeTime utility function had a very strange behaviour: if it is called without an argument, it would toggle the current value. This means that if i read a test that calls freezeTime, i actually do not know if the time is frozen after that function call. This could be a problem in many subtle situations. For example, if a test is using freezeTime, and then later, someone add a `beforeEach(freezeTime)` in that suite without removing the existing freezeTime, then weirdly, the test would no longer be "protected". This commit simplifies the behaviour of freezeTime to make sure we know what we are doing in all cases. 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
Underlines and strikethroughs now remain visible when users apply gradient text in the website editor. This fixes a visual issue so formatted website content appears as intended for visitors.
Original PR description
Problem: Using `-webkit-text-fill-color: transparent;` in `.text-gradient` is required for gradient text, but it also causes underline (`<u>`) and strikethrough (`<s>`) styles to become invisible, since those decorations rely on the text fill color. This results in the lines under `u` and `s` elements not being rendered when gradient text is applied. Solution: Render the underline and strikethrough manually using a `background-image` (gradient) applied to `s` and `u` tags. This simulates the missing lines while keeping the gradient text style. Steps to reproduce: 1. Add a text block in the website editor. 2. Apply a text color gradient. 3. Apply underline or strikethrough. → The underline/strikethrough is not visible. opw-4797201 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210390
Uploading a non-PDF file as a product document for quote PDFs no longer triggers an immediate system error. The system now avoids trying to read non-PDF files as PDFs, allowing the existing validation to handle the file type cleanly when the record is saved.
Original PR description
Currently an error occurs when user uploads a non-pdf file on product documents. Steps to replicate: - Install `sale_management` and go to products. - Open any product's form view and click on the…
Currently an error occurs when user uploads a non-pdf file on product documents. Steps to replicate: - Install `sale_management` and go to products. - Open any product's form view and click on the `Documents` smart button. - Click new and upload any non-pdf file. - On the field `Sale : Visible at`, select the value `inside quote pdf` and you will get the error. Error: `PdfReadError: EOF marker not found` The error occurs because at the line [1] the code requires a pdf file, and as we have passed a non-pdf file the error occurs. [1] - https://github.com/odoo/odoo/blob/e750244c3125a48e2ca030160b977bb0344609db/addons/sale_pdf_quote_builder/models/sale_pdf_form_field.py#L206 There is already a constraint made for this particular thing [2], but the problem is that the error is due the compute [3] (Because constraints are checked at the time of form saving, and compute runs when a field is changed so even before the constraint is checked the error will be triggered). [2] - https://github.com/odoo/odoo/blob/e750244c3125a48e2ca030160b977bb0344609db/addons/sale_pdf_quote_builder/models/product_document.py#L44-L45 [3] - https://github.com/odoo/odoo/blob/e750244c3125a48e2ca030160b977bb0344609db/addons/sale_pdf_quote_builder/models/product_document.py#L59-L61 This commit resolves this issue by skipping the pdf extraction if the file is not a pdf type, because we already have a constraint [2] that will trigger at save. sentry-6161120972 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The view-switching shortcut label now remains clearly visible when users switch between views. This avoids a small visual overlap in the interface, making the control panel easier to read and use.
Original PR description
Previously when switching views using the hotkey, the hotkey (SHIFT + V) was not properly visible, it was overlapping with the active view button. After this commit the hotkey (SHIFT + V) will be visible and not overlap with the active view. task-4828401 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Very small negative values that round to zero are now shown as normal zero instead of negative zero. This avoids confusing displays such as "-0.00" in screens, reports, and generated documents where the value is effectively zero.
Original PR description
float_repr(-0.00000001, 2)
formatFloat(-0.00000001, { digits: [16, 2] })
Before: "-0.00"
After: "0.00"
opw-4685953
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes an intermittent issue in automated checks for Knowledge pages that include embedded calendars. By making the resize action happen consistently, it helps reduce false test failures and improves confidence in releases without changing user-facing behavior.
Original PR description
This commit fixes an indeterministic error in the knowledge_calendar_command_tour when a calendar view is embedded and an event is resized. The resize handler is only visible when hovering the event, which is required to actually be able to resize it. This commit merges both the "make resizer visible" step and the "resize the item" step into a single one as those actions should be done in one go, instead of separate steps (cf. the hovering state is kind of reset in-between the steps). Note: this matches the behavior of the CalendarView's unit tests helpers (`resizeEventToTime()`). runbot-error-163015
Odoo Studio now disables image transformation options when editing reports because those changes cannot be reproduced in generated PDF files. This prevents users from applying visual changes that would disappear in the final PDF, making report previews and output more predictable.
Original PR description
Problem: Image transformations are not applied in generated PDFs because they are not supported by `wkhtmltopdf`. Solution: Disable image transform options when rendering reports to ensure expected output and avoid unsupported behavior. Steps to reproduce: - Open any report in Studio - Add an image - Apply a scale transformation - Generate a PDF preview > The image transform is not applied in the generated PDF opw-4809761 Forward-Port-Of: odoo/enterprise#89952
Belgian Intrastat XML exports now respect the option to hide zero-value lines. This prevents transactions with no cost from being included in exported reports, keeping submitted files consistent with what users see on screen.
Original PR description
_______________________________________ ## Short functional explanation of the error On the export intrastat report page, we can click on the 'Posted Entries' button, which allows us to select 'Hide…
_______________________________________ ## Short functional explanation of the error On the export intrastat report page, we can click on the 'Posted Entries' button, which allows us to select 'Hide lines at 0'. Doing this will prevent 0 cost transactions from appearing in the report. However, when exporting to XML, such transactions are still displayed. Note: this is related to Belgian companies only. ## Reproduction Steps 1. Go to settings and make sure the company you're operating with is Belgian. Then, in accounting, under the Custmer Invoices section, check the 'Intrastat' option. 2. Go to products and create a new product of type 'Goods'. Then, in the 'Accounting' tab, click on a random commodity code. Set the country of origin as a country belonging to the European Union (for example, Austria). Click on save. You should see a field named 'Intrastat Supplementary Unit Amount' appear. 3. Go to accounting. Click on the 'Vendors' tab and 'Bills'. Click on New. Select a random vendor, and add a line containing the product you just created. Add the column 'Intrastat' and set the corresponding field at '11 outright...'. Then, set a price. In the 'Other Info' tab, set the field 'Intrastat Country' as a random country in the European Union (for example, Australia). Set the fiscal position at 'Import/Export' and set the 'Intrastat Transport Mode' field at '1. Sea transport'. Finally, click on confirm. 4. Duplicate the vendor bill you just created. On this new vendor bill, set the Intrastat at '12 Direct trade...'. Display the column 'Disc.%' and set the field at 100. Then click confirm. 5. Click on the 'Reporting' tab, and under 'Audit Reports', click on 'Intrastat Report'. Set the month to the current month, then click on 'Report: Intrastat(Services....)' and select 'Intrastat (Goods)'. You should be able to see the 2 vendor bills you just created. Click on 'Options' then 'Hide lines at 0': you should see the bill having a 0 cost disappear. Finally, click on the cog on the top left next to 'Intrastat Report' and click on 'XML'. 6. Once the XML file has finished downloading, open it. ### Expected behavior The transaction having a 0 cost shouldn't appear. ### Unexpected behavior The transaction having a 0 cost appears. ## Origin of the issue In the code responsible for the display of the XML report, there isn't any condition responsible for checking if the transaction should be displayed or not. _________________________________________ opw-4464123 --- Forward-Port-Of: odoo/enterprise#89285
Customer statement reports can now be sent even when selected customer records include contacts without names. The system skips unnamed contacts when preparing report details, preventing scheduled email delivery failures and reducing interruptions for accounting users.
Original PR description
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install…
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install the account_reports module - From the accounting app, create a new company customer (Customers/Customers) - From that new company customer form view, add a new contact of type "other" and don't specify a name for it. - Create an invoice for the company - From the customer list view, select all, and trigger the action "Open Customer Statements" - Send -> Print and Send - Check the console, the cron task should traceback on the template **CAUSE** In accout_report.py, we get the name of each selected partners, and we don't check if the name doesn't exist. In the template `pdf_export_filters`, we try to join all the name in a string, it fails because one of the name isn't a string (its value is False because it doesn't exist on the partner record). **FIX** When getting the partners names, filter out the partners without names. opw-4916660
Very small negative amounts that round to zero are now shown as 0.00 instead of -0.00 in Luxembourg reports. This prevents confusing or misleading figures in generated report values.
Original PR description
float_repr(-0.00000001, 2)
formatFloat(-0.00000001, { digits: [16, 2] })
Before: "-0.00"
After: "0.00"
opw-4685953Uploading files through the Documents chatter no longer shows temporary upload progress cards or rows in the main document views. This keeps kanban and list views cleaner and avoids confusing users with transient upload visuals.
Original PR description
Step to reproduce: - In Documents, open the chatter either on a folder or a document. - Upload an attachment through the chatter. - You will see the upload kanban card / list row showing the progression. There should be no visual in kanban/list views showing the progression. Task-4863051 Forward-Port-Of: odoo/enterprise#87410