Wednesday, July 15, 2026
16 changes · saas-18.4
Resolved issues and error corrections
The Worldline payment integration now uses the current Cofidis payment identifier from Worldline documentation. This helps ensure Cofidis payment requests are routed correctly and avoids failures caused by the outdated mapping.
Original PR description
opw-6368979 Description of the issue/feature this PR addresses: Update the Worldline Cofidis payment method mapping to match the latest payment product ID defined in the Worldline documentation. Current behavior before PR: The Cofidis payment method was mapped to the outdated payment product ID (3012), causing payment requests to use an incorrect mapping. Desired behavior after PR is merged: The Cofidis payment method is mapped to the correct payment product ID (5129) as per the latest Worldline documentation, ensuring payment requests use the correct mapping. Forward-Port-Of: odoo/odoo#275881
This fix ensures the accounting setup creates the numbering sequence for batch payments only after the module is initialized. This helps prevent setup or upgrade issues related to missing or incorrectly timed payment batch references.
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 Forward-Port-Of: odoo/odoo#275309 Forward-Port-Of: odoo/odoo#273905
Invoice PDFs now respect layouts that place the customer invoicing address on the left, even when the customer also has a delivery address and the Customer Address option is disabled. This prevents confusing or inconsistent invoice formatting for businesses using left-address document layouts.
Original PR description
Issue: On an invoice PDF, using a layout with the address on the left. If a contact has a delivery address, but the option "Customer address" is not set, address will be displayed on the right instead of the left. Steps to reproduce: - Create a customer - Add a Delivery address to the customer - Ensure "Customer Address" is not set in the settings - Choose a layout with the address on the left (bubble, wave, ...) - Create an invoice to the customer - print the PDF Current behavior: - Customer address is on the right Expected behavior: - Customer address is on the left Cause: Address is displayed on the right if there is an information bloc . The information bloc was set to an empty div. Therefore, as it is set, address was displayed on the right. opw-6334130 Forward-Port-Of: odoo/odoo#273418
This update fixes a flaky automated test for inbox message read status in Odoo Discuss. It helps keep release validation reliable without changing how users interact with messages.
Original PR description
The "Opening thread with needaction messages should mark all messages of thread as read" test opens a channel that holds an inbox (needaction) message and asserts mark_all_as_read is sent. Two flows can mark that message as read: the channel messages fetch, through set_message_done, and mark_all_as_read, sent by markAsRead when the channel gets focused on open. When the self member's new_message_separator is 0, opening the channel fetches its messages around 0, and that fetch marks the message as read and drops the needaction counter to 0 before markAsRead runs. mark_all_as_read is then skipped and the step assertion receives nothing. Give the member a non-zero separator (the pre-existing message is already read) so opening the channel no longer fetches around 0, leaving mark_all_as_read as the flow that marks the inbox message read. https://runbot.odoo.com/odoo/error/243651 Forward-Port-Of: odoo/odoo#276181
Timesheets moved to a non-billable project will now correctly drop any linked sales order item. This prevents non-billable work from remaining accidentally tied to customer billing, reducing invoicing mistakes.
Original PR description
## Steps to reproduce: - Install sale_timesheet - Create a timesheet with a Sale order item linked to it - Change the sale order item on that timesheet - Change the project linked to the timesheet to a non-billable project - Notice the sale order item still linked to the timesheet ## Cause: When computing the so_line we filter out the records that has is_so_line_edited as true, so when changing the SOL before changing the project we don't reset so_line field when setting a non-billable project. ## Fix: We reset the is_so_line_edited field to false when changing the project to a non-billable one. opw-6311549 Forward-Port-Of: odoo/odoo#275919
Animated GIFs used inside website image shapes no longer freeze in Firefox or Safari. This ensures businesses can use animated visuals consistently across all available image shape styles without browser-specific issues.
Original PR description
Animated GIFs applied with an image shape freeze on Firefox and Safari when the shape's SVG is otherwise static. A dummy `<animateMotion dur="1ms" repeatCount="indefinite"/>` child on the <image> element keeps the animation running so the GIF plays. This hack was introduced in [1] but was missing from most shapes. This commit adds it to every <image> element that lacked it so any shape can be used with a GIF. task-5967171 [1]: https://github.com/odoo/odoo/commit/144e5ef799060da860a5fb1fbe0fd009919afe79 Forward-Port-Of: odoo/odoo#275259
The website editor now shows the actual file size for uploaded company logos instead of a misleading placeholder size. This helps users trust that their logo quality has not been unexpectedly reduced when editing the website.
Original PR description
Steps to reproduce: - Go to Website - Upload an image in the company logo (navbar) - Open the website editor and click on the logo - Open the image info panel Current behavior: When clicking on the…
Steps to reproduce: - Go to Website - Upload an image in the company logo (navbar) - Open the website editor and click on the logo - Open the image info panel Current behavior: When clicking on the website logo in the editor, the size shown is always a constant number ~5.9kB, regardless of the actual size of the uploaded logo. The correct size is visible in the browser DOM. This gives users the wrong impression that their image is being heavily compressed or losing quality when it isn't. Reason: When clicking the logo, the editor tries to find the original, unprocessed version of the image so it can support cropping and other edits. It does this by asking the server to match the image's URL to a stored attachment. The website logo is served through a dynamic link (`/web/image/website/<id>/logo/<name>`) that isn't tied to a regular attachment record the way normal content images are, since it isn't uploaded through the usual media picker. Because of this, the server can't find a matching original, and the editor is left without a valid image source to work with. As a fallback, the editor tries to load a placeholder path instead of a real image. This request fails and silently resolves to Odoo's generic "image not found" placeholder. All further processing (and the size calculation) then happens on this small placeholder image instead of the actual logo, which is why the size shown never changes. Fix: When `get_image_info` does not return a usable `original`, `loadImageInfo` now falls back to using the image's own current src as `originalSrc`, instead of leaving it unset. This ensures `loadImage` always receives a valid, resolvable URL, so image processing (and the size shown) reflects the actual logo. opw-6260496
The GIF picker search field now shows the required “Search KLIPY” placeholder by default. This keeps the app aligned with Klipy’s attribution guidelines while preserving the existing GIF search experience for users.
Original PR description
Klipy requires attribution with "Search KLIPY" as the default placeholder [1]. This commit complies these guidelines. [1]: https://docs.klipy.com/attribution Forward-Port-Of: odoo/odoo#275995 Forward-Port-Of: odoo/odoo#275677
This fix updates parts of the website editor and related website features so that step-by-step operations run in the correct order. It helps prevent inconsistent behavior when editing website forms or processing image shapes, improving reliability without changing user-facing features.
Original PR description
*: website, website_sale `forEach` is a synchronous operation, so it doesn't support promises. We refactor its usage to use `for` loops. task-4794299 Forward-Port-Of: odoo/odoo#275993 Forward-Port-Of: odoo/odoo#275262
When a file title is changed, the link popover now displays the updated title instead of the original upload name. This keeps document links consistent and avoids confusion for users reviewing or sharing renamed files.
Original PR description
Problem: After updating a file name, the link popover still shows the original file name. Cause: The link popover always displays the attachment name instead of the current link content. Solution: Use the link content as the popover title so it reflects the updated file title. Steps to reproduce: - Go to To-Do → Create New. - Upload a file. - Change its title. - Observe that the title shown in the link popover still uses the original file name. task-6213840 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#274335 Forward-Port-Of: odoo/odoo#264127
French VAT reports sent through Aspone now use the latest reporting year, ensuring submitted forms match current requirements. This helps businesses avoid filing issues caused by outdated form versions.
Original PR description
This commit will put the new millesime for all the form that we send though aspone. (Was done in 19.0 here: https://github.com/odoo/enterprise/commit/48454123fc4a419e22648df05e0e3c3bf892a277) task-6253745 Forward-Port-Of: odoo/enterprise#124129
Shopee order lines now use the correct variant SKU in their descriptions instead of falling back to the general product template SKU. This helps users identify the exact product variant sold and avoids confusion when reviewing orders with variants.
Original PR description
Currently, _prepare_order_lines_values resolves SKU as `item_sku or model_sku`. Shopee always sends item_sku (product.template SKU), so when a listing has variants the order line description shows the template SKU ([item_sku]) even though the correct variant is linked via `model_sku`. task_id: 6335110 Forward-Port-Of: odoo/enterprise#124031
This fix ensures a Belgian payroll rule for employee termination holidays is attached to the correct salary structure. It helps payroll calculations use the intended rules, reducing the risk of incorrect payslip results for affected Belgian employees.
Original PR description
Oversight of 553ba7d0d066b4179b7f89f8ec9ef8f0bffe964d Forward-Port-Of: odoo/enterprise#124331 Forward-Port-Of: odoo/enterprise#123765
Opening Studio from a project task list now keeps the web address clean and avoids adding an extra project identifier. Browser back navigation and direct Studio links also work reliably, preventing errors for users customizing project task views.
Original PR description
Go on a project, then open its task list view Open studio with the menu item. At this point, studio is open but the url looks like: `/odoo/project/5/tasks/studio/5` the last `/5` is wrong ; this commit fixes this. Then, hit the browser's back button. There is an error because the active_id was not correctly set when leaving studio that way Try loading `/odoo/project/5/tasks/studio`, again, there is an error because the active_id is read from the wrong object Forward-Port-Of: odoo/enterprise#122405
The Dutch reports module no longer shows an outdated website link that now points to unrelated content. This avoids confusing users or directing them to an irrelevant external site.
Original PR description
The URL leads to a website that has nothing to do with what it used to be so it needs to be removed. Task-6360682 Forward-Port-Of: odoo/enterprise#124155 Forward-Port-Of: odoo/enterprise#123019
Code cleanup and technical improvements
An outdated condition in the Point of Sale self-ordering flow was removed because it checked for a mode that cannot occur. This simplifies the system logic without changing how customers or staff use self-ordering.
Original PR description
Description of the issue/feature this PR addresses: Removed obsolete code checking "this.config.self_ordering_mode !== 'qr_code'". Since "qr_code" is not a valid value of the "self_ordering_mode" selection field. The condition is always true. Forward-Port-Of: odoo/odoo#275962 Forward-Port-Of: odoo/odoo#273245