Friday, October 3, 2025
25 changes · saas-18.2
Resolved issues and error corrections
The mail app no longer shows the translate option on messages that have no text, such as tracking updates or attachment-only messages. This avoids a confusing action that previously did nothing and keeps message options more relevant for users.
Original PR description
**Current behavior before PR:** The translate action was shown on all messages, including those with an empty body such as tracking updates or messages containing only attachments. Clicking the translate action on these messages had no effect. **Desired behavior after PR is merged:** The translate action is hidden for messages with an empty body. Only messages containing text display the translate option. **Task-5106303** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228137
This fix prevents the messaging app from crashing when a new message arrives while the browser tab is not active. It helps users continue receiving and handling messages reliably without interruptions.
Original PR description
Backport of #213607. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229504
Product prices on the website now display using the correct currency precision for the active pricelist. This prevents customers from seeing unnecessary decimals, such as showing EUR prices with two decimals when the currency is configured to round to whole amounts.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Set currency rounding of EUR to 1.0; 2. use the currency on a website pricelist; 3. go to a product page in /shop; 4. open the url in a new session. Issue…
Versions -------- - 17.0+ Steps ----- 1. Set currency rounding of EUR to 1.0; 2. use the currency on a website pricelist; 3. go to a product page in /shop; 4. open the url in a new session. Issue ----- From the editor, the price gets displayed as expected, with no decimals. In the new session, the price gets displayed with two decimals. Cause ----- The `_priceToStr` method used, always uses a `precision` of 2, except in editor mode when it will retrieve a different value from a hidden `.decimal_precision` element. Solution -------- Add the website's currency precision to `combination_info` via the controller, and use this value in `_priceToStr`. For the product configurator, store the currency precision in the `.js_price_total` element's dataset. Also insert the precision in the `.oe_price` element's dataset, allowing it to be used as a fallback in case the configurator template isn't up to date. opw-4996878 Forward-Port-Of: odoo/odoo#229296 Forward-Port-Of: odoo/odoo#224429
Contacts without a name or email will now show a useful fallback name in chatter recipient fields, follower lists, and subscription dialogs instead of appearing blank or as false. This helps users identify recipients more reliably when working with messages and followers.
Original PR description
Steps to reproduce =============== 1. Create a contact of type invoice address without name and email. 2. Go to any app with chatter. 3. Add this user to the recipient ----> Only the blue tick will be visible (recipient name will be empty) After this commit, we will use the display_name as a fallback to show in the chatter. Forward-Port-Of: odoo/odoo#213545
Website image galleries now load the correct template when visitors click an image. This prevents a missing-template error on pages such as job postings, improving the browsing experience and reducing visible site errors.
Original PR description
Clicking on an image gallery snippet currently triggers a "missing template" error. This happens because the gallery template is only defined in the 000 version file, while the corresponding view record for that version has been disabled. This commit resolves the issue by moving the gallery templates to the 001 version file, ensuring they are properly loaded. Steps to reproduce: 1. In Website, navigate to /jobs. 2. Create a new job and save it. 3. Click on any image at the end of the job page. 4. Observe the "missing template" error. Forward-Port-Of: odoo/odoo#226333
The online shop checkout test now waits for the page to finish loading before continuing. This reduces random test failures, helping teams keep changes moving through validation with fewer false alarms.
Original PR description
Wait for the page to load before triggering the next step. See https://runbot.odoo.com/odoo/runbot.build.error/161141
Point of Sale sessions now only reserve the next session name after cash details are posted successfully. This prevents missing numbers in session names when an error occurs, making records easier to follow and audit.
Original PR description
Before this commit, if an issue occurred while posting the cash details, the session sequence would still increment even though the operation failed, leading to gaps in session names. With this commit, the sequence only increments when the operation succeeds, ensuring continuous session naming without gaps. opw-5100163 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229532
This fixes an internal test so it only reacts to notifications from the correct database. It helps keep automated checks reliable and reduces false failures during development, without changing customer-facing behavior.
Original PR description
In [1], logs were added to the `test_postcommit` test in order to better understand why it sometimes fails. However, this commit changed the test behavior: we only care about notify coming from the DB executing the test, but the `channel` variable is filled regardless of the DB the notification comes from. [1]: https://github.com/odoo/odoo/pull/229106 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
Italian point-of-sale receipt printing now keeps track of the completed order being printed. This prevents automatic receipt printing from accidentally using a newly created order instead, helping ensure customers receive the correct receipt.
Original PR description
Before this commit, the printReceipt logic in the module l10n_it_pos would not pass the order to be printed. This can become a problem upon context changes, where pos.get_order does not return the completed order, but a newly created one. This can for example happen when skipping the receipt screen with the option to "print automatically" (iface_print_auto). After this commit, we keep order as an argument, so we always print the last completed order and not a newly created one. opw-4882480 Forward-Port-Of: odoo/odoo#221329
This fix corrects an incorrectly configured error in the Expenses app. It helps ensure users see the intended warning instead of a confusing or broken error when the relevant expense validation is triggered.
Original PR description
in 953fac5, the new error was not given the proper arguments
This change makes an automated mail test more stable by clicking the enabled button directly instead of relying on the Enter key at the right moment. It helps reduce false test failures and supports smoother validation of updates.
Original PR description
Pressing Enter is prone to race conditions as it requires the proper element to have the focus at the right time. Clicking on the button directly when it is enabled should be preferred. https://runbot.odoo.com/odoo/runbot.build.error/233169
The live chat test environment now includes the same user availability status field as the real server. This helps automated tests better reflect actual customer support chat behavior and reduces the risk of missed issues.
Original PR description
**Description of the issue this PR addresses:** Add missing im_status field in mock server **Current behavior before PR:** Previously, the `im_status` field was available on the server side, but it was missing in the mock server implementation used in tests. **Desired behavior after PR is merged:** This PR updates the mock `DiscussChannelMember` model to include `im_status` in the list of stored partner fields, ensuring that test scenarios accurately reflect server behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Discount allocation settings now allow selecting accounts classified as other income or other expenses. This prevents valid accounting accounts from being excluded, making discount setup more complete and accurate for finance teams.
Original PR description
With this PR: - Updated the domain of discount allocation fields to include `income_other`/`expense_other` account types. Task-5121917 Forward-Port-Of: odoo/odoo#229026
The Point of Sale now ignores number input when users are holding Ctrl, Alt, or Command keys for browser and system shortcuts. This prevents accidental changes to order lines when cashiers zoom the browser or use navigation shortcuts.
Original PR description
Before this commit, the NumberBuffer was listening to all keyup events. This caused unintended behavior when the user pressed browser/system shortcuts such as: - `Ctrl +` / `Ctrl -` on Windows/Linux (zoom in/out) - `⌘ +` / `⌘ -` on macOS (zoom in/out) - `Alt + <number>` or `Alt + <arrow>` (browser tab navigation, menu accelerators) Because the key itself (e.g. `"+"`, `"-"`, `"1"`) was part of `INPUT_KEYS`, the NumberBuffer captured the event and updated its state leading to unexpected inputs being added to the PoS order lines. opw-4965429 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227429
Website pricelist snippets now keep regenerated description text properly spaced and consistently sized. This prevents visual inconsistencies when users edit or toggle descriptions in the website builder.
Original PR description
New description paragraphs generated by the builder for the "pricelist" snippets were missing two expected classes. - "mt-2" was never applied, so all pricelist variants lacked the vertical spacing below product titles. - The boxed and cafe snippets also needed the `o_small` class to keep their text size consistent. Steps to see the missing "o_small": 1. Drop an "s_pricelist_boxed" or "Pricelist Cafe" snippet on a page. 2. Use Backspace to delete the text already present in one of the descriptions. 3. Toggle the "Descriptions" option off and on; the regenerated paragraph appears larger than expected because `o_small` is absent. task-5117864 Forward-Port-Of: odoo/odoo#229464
Rental product prices on the website now display using the currency's configured decimal precision. This prevents customers from seeing unnecessary decimal places when a business uses whole-number pricing, improving consistency and trust at checkout.
Original PR description
Versions -------- - 17.0 Steps ----- 1. Set currency precision to 0 decimals; 2. check prices in eCommerce as public user. Issue ----- Prices are displayed with 2 decimals Cause ----- The `_priceToStr` method used, always uses a `precision` of 2, except in editor mode when it will retrieve a different value from a hidden `.decimal_precision` element. Solution -------- Add the website's currency precision to `combination_info` via the controller, and use this value in `_priceToStr`. opw-4996878 Community PR: https://github.com/odoo/odoo/pull/224429 Forward-Port-Of: odoo/enterprise#95914 Forward-Port-Of: odoo/enterprise#95634
The Indian GST reporting tests now cover sales involving reverse charge tax and SEZ supplies with LUT. This helps reduce the risk of incorrect GSTR-1 reporting for businesses using these tax scenarios.
Original PR description
Adding GSTR1 test case with RCM tax and SEZ (with LUT) see https://github.com/odoo/odoo/pull/213931 Forward-Port-Of: odoo/enterprise#87486
Tests were updated to match a recent change in how suggested email recipients are returned. This keeps automated checks reliable across Helpdesk, HR Contract Salary, and Studio without changing end-user behavior.
Original PR description
From the related community commit, the _message_add_suggested_recipient method is modified to also return display name under certain condition. This commit adapts the test inside web_studio to align with the method's change. Task-4812554 Forward-Port-Of: odoo/enterprise#91003
This update adjusts an automated test for SEPA credit transfers so it follows the current rules for bank account data handling. It helps keep payment-related quality checks reliable without changing day-to-day user workflows.
Original PR description
Direct update sanitized_acc_number is not allowed. Forward-Port-Of: odoo/enterprise#95477 Forward-Port-Of: odoo/enterprise#72508
The Helpdesk customer portal link for asking the community now sends users to the correct forum page instead of a missing page. This prevents customers from hitting a 404 error when a helpdesk team has community forum support enabled.
Original PR description
Scenario:
- create a helpdesk team
- enable community forum on it
- go to the team and click on "Ask the community"
Result: 404 error, this page does not exist
Cause: we are using helpdesk.team ID in route needing a forum.forum ID
Fix: uses /helpdesk/{team ID}/forums route instead of /forum/{team ID}
opw-5027193
Forward-Port-Of: odoo/enterprise#96026Payroll PDF generation now skips document creation when an employee is missing the required contact record. This prevents scheduled payroll document generation from failing and helps payroll teams continue processing payslips smoothly.
Original PR description
Currently an error occurs when the **'Payroll: Generate pdfs'** scheduled action runs and tries to create a document for a payslip belonging to an employee who does not have a related partner.…
Currently an error occurs when the **'Payroll: Generate pdfs'** scheduled action runs and tries to create a document for a payslip belonging to an employee who does not have a related partner. **Prerequisites:** - Ensure HR is enabled in `settings>Documents` **Steps to Reproduce:** 1) Install `documents_hr_payroll` module.(with Demo) 2) Navigate to the Employees App. 3) Select any Employee(e.g Abigail Peterson) and open form view. >- click on **contacts** smart button. >- Delete that Record 4) Create a confirmed Payslip for the selected Employee(e.g Abigail Peterson). 5) Activate Developer mode and navigate to schedule Actions. >- Search for 'Payroll: Generate pdfs'. >- Run Manually. Error: `NotNullViolation: null value in column 'partner_id' of relation 'documents_access' violates not-null constraint` Root Cause: When the partner is deleted, the value received from `_get_document_partner` at [1] is `False`, which later on tries to create the `documents.access` record for the new document, it fails because no partner is available to assign access rights, resulting in the error. Solution: This commit prevent Error by ensuring `_check_create_documents` method doesn't allow document creation without valid partner. [1]: https://github.com/odoo/enterprise/blob/99a8d83edb42f172d0dd35c91743fa0c9653dcbb/documents_hr_payroll/models/hr_payslip.py#L20C1-L21 sentry-6814524392 Forward-Port-Of: odoo/enterprise#92865
Unchecking “Show weekends” in Analytic Reporting no longer causes months to disappear in the yearly view. The weekend filtering is now limited to detailed month views, keeping yearly reports complete and reliable.
Original PR description
To reproduce: ============= 1- Go to Analytic Reporting. 2- From the year dropdown, uncheck "Show weekends". → Some months disappear unexpectedly. Problem: ========= Weekend filtering was applied even in year range. In year view, each column is already a full month, so filtering out weekends is incorrect. Fix: ==== Adjust the condition to skip filtering when range is not "month". Weekend logic now only applies to month range grid. community-pr: https://github.com/odoo/odoo/pull/226975 opw-5078200 Forward-Port-Of: odoo/enterprise#94593
This fixes an issue where opening a quality worksheet and then discarding it could incorrectly create a worksheet record and make the quality check appear completed. Users can now cancel the worksheet flow without changing the status of the quality check, keeping quality records accurate.
Original PR description
**Problem:** Opening the worksheet wizard and discarding it makes the worksheet "completed" **Steps to reproduce:** - create a quality check - set a product - in type select worksheet - select the "quality issues" template - select a team - click on the worksheet smart button - discard **Current behavior:** the worksheet is marked has completed **Cause of the issue:** when discarding, this line causes the creation of an instance of worksheet.template linked to the quality.check via its worksheet_template_id https://github.com/odoo/enterprise/blob/a1dd58f2b59ecd2d22efd29eb0aace7bdca64f66/quality_control_worksheet/static/src/views/quality_worksheet_fromview.js#L35 which will make the worksheet_count field of the quality check worth 1 after discarding https://github.com/odoo/enterprise/blob/1c5e547b59a57c840ef72b2e76c6a6a627f1f18e/quality_control_worksheet/models/quality.py#L37-L39 opw-4980945 Forward-Port-Of: odoo/enterprise#95219
The Swiss payroll interface now hides the verified source tax statement button when there is no correction to report. This prevents users from clicking a button that would not produce a useful report, reducing confusion in payroll workflows.
Original PR description
This button will give a report only in the case where the institution response has a correction, so it should be hidden. Forward-Port-Of: odoo/enterprise#96128
Features or functions removed from Odoo
This change removes obsolete test files from the Turkish Nilvera e-invoice module. The relevant testing now lives in the automatically installed extended module, reducing maintenance overhead without changing customer-facing behavior.
Original PR description
Since c575bd48be676cce, XML generation has been extended in l10n_tr_nilvera_einvoice_extended, which auto-installs with l10n_tr_nilvera_einvoice. The tests in einvoice were skipped because they fail with the extensions, and adapted copies were added in the extended module instead. This leaves dead code in einvoice, so we remove the unused test file. no task-id Forward-Port-Of: odoo/odoo#229724