Wednesday, October 1, 2025
14 changes · 18.0
Resolved issues and error corrections
Accrued expense entries for purchase orders now show the amount after discounts instead of the full pre-discount amount. This helps finance teams see more accurate purchase-related accruals and avoid overstating expenses.
Original PR description
Steps to reproduce: [purchase] - Create a purchase order - add a line with a discount - confirm and receive - create an accrued expense entry Issue: The full tax excl amount is displayed but no discount is applied opw-5049848 Forward-Port-Of: odoo/odoo#225375
Live chat visitors can no longer start calls or invite additional guests from a chat thread. This prevents unintended use of communication features and keeps live chat interactions within the intended support flow.
Original PR description
This commit removes the possibility for live chat visitors to start a call and invite guests. task-4849019
This fix ensures Italian point-of-sale receipts are printed for the order that was just completed, even when automatic printing skips the receipt screen. It prevents staff or customers from receiving a receipt for a newly created empty order instead of the actual sale.
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
Fixes Italian fiscal printer receipts not printing when the point of sale is configured to skip the receipt screen. The change ensures the correct completed order is sent to the fiscal printer, preventing missed receipts and printer errors during checkout.
Original PR description
This PR fixes two related bugs happening when printing a receipt with the Italian Fiscal printer First, before this PR, if the option to skip the receipt screen was ticked, then the receipt would…
This PR fixes two related bugs happening when printing a receipt with the Italian Fiscal printer First, before this PR, if the option to skip the receipt screen was ticked, then the receipt would never print. This was caused by the printing logic being implemented on the receipt screen instead of on the pos itself. steps to reproduce: 1. install l10n_it_pos 2. configure one pos 3. configure the IT printer 4. select to skip the receipt screen (print automatically) 5. open the pos 6. make a sale => no ticket printed and the chrome console shows a printer error With this new verison the printing logic was moved to the pos so that printing of fiscal receipts with the italian fiscal printer works, even when receipt screen is skipped. This put to light another potential bug related to how the `order` variable was treated. Before this PR, the printReceipt logic in the module 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 PR, we keep order as an argument, so we always print the last completed order and not a newly created one. opw-4882480
Pasting text over a fully selected link now removes the link only when it is safe and allowed to do so. This prevents important website menu items or protected content from being accidentally deleted and replaced with plain text.
Original PR description
When the label of a link is fully selected and the user pastes some text, the link is removed. It was removed even if the link was in a `contenteditable=false` or was unremovable. This commit only…
When the label of a link is fully selected and the user pastes some text, the link is removed. It was removed even if the link was in a `contenteditable=false` or was unremovable. This commit only attempts to remove the link element after checking these conditions. It also only selects the link in the `before_paste` handler, and lets the normal paste logic remove it. Steps to reproduce (after 18.4, where it was noticed): - Copy some simple text - Open website builder - Select completely the label of a menu in the header - Paste - Bug: the menu item is removed, and replaced with simple text Steps to reproduce (in 18.0 and later): - Open "To-Do" app - Add a link in the middle of a line of text - With inspector, edit html to put `contenteditable="false"` on the container of the line, and `contenteditable="true"` on the link - Select completely the label of the link in the document - Paste some text - Bug: the link is removed, and the clipboard content is inserted after the non editable element task-5110141
The emoji picker now handles translated emoji data correctly, including languages where translations contain line breaks. This prevents crashes and ensures users can open and use the picker reliably in non-English interfaces.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ In some non-English translations, emoji strings include `\n`, which breaks JSON parsing in `emoji_data.js`. This causes `emojis.length === 0`, so the empty state is displayed instead of the main emoji picker UI. Some UI logic still executes on missing DOM elements, which triggers errors. **Current behavior before PR:** --------------------------------- - Switch to a non-English language - Open the emoji picker in Discuss - Errors are triggered due to missing DOM elements **Desired behavior after PR is merged:** ----------------------------------------- - Emoji JSON parses correctly - The emoji picker opens without errors in non-English languages - The emoji picker still opens when `emojis.length === 0` **Task:** 4978824
The Point of Sale customer list now shows deposited amounts for customers with balances from Customer Account deposits. This helps staff quickly see available customer funds during POS operations without needing to check elsewhere.
Original PR description
The partner list in the PoS was never showing the deposited amount for the partners. Steps to reproduce: ------------------- * Open PoS and make a deposit for a partner using the Customer Account * Check the partner list > Observation: No deposited amount is shown Why the fix: ------------ We backport the part of this fix https://github.com/odoo/enterprise/commit/bf4b6043b999b4a081b1afa73fc4113bf4db28f8 that changes the partner list to show the deposited amount. opw-4954740
Point of Sale users can now see a customer's deposited amount directly in the partner list. This fixes a display issue that made deposits harder to verify during checkout or customer account review.
Original PR description
The partner list in the PoS was never showing the deposited amount for the partners. Steps to reproduce: ------------------- * Open PoS and make a deposit for a partner using the Customer Account * Check the partner list > Observation: No deposited amount is shown Why the fix: ------------ We backport the part of this fix odoo/enterprise@bf4b604 that changes the partner list to show the deposited amount. opw-4954740
This update ensures follower changes are handled correctly when multiple records are updated at once. It prevents unintended subscription errors that could affect notifications and record followers in the Mail features.
Original PR description
When updating `message_partner_ids` on a batch of records, the previous implementation of the inverse method could lead to incorrect results if the new value implied unsubscription. The `message_unsubscribe()` method, called inside the loop over the records, unlinks `mail.followers`. This `unlink` operation invalidates all the fields cache. As a result, when processing the next record in the batch, its cached fields (the new value of `message_follower_ids`) were erased, causing the logic to fail. This commit fixes the issue by postponing all unsubscription operations. opw-5050023
Subscriptions linked to archived companies are now skipped by the recurring invoicing process. This prevents customers from being billed while their company record is inactive, reducing billing errors and follow-up corrections.
Original PR description
## Issue: When a company with active subscriptions is archived, the recurring invoicing cron still processes these subscriptions. Subscriptions for archived companies must not be invoiced. ## Steps to reproduce: 1. Create a company A. 2. Create a subscription for company A with next invoice date <= today. 3. Archive the company. 4. Run the scheduled action "Sale Subscription: generate recurring invoices and payments". 5. Unarchive the company and check the subscription. It should not have been invoiced. (Adjust the user's Allowed Companies if needed to access it.) backport-of: a93e7ec opw-4904325 Forward-Port-Of: odoo/enterprise#95408
Signed requests can no longer be deleted once they have been completed. This protects finalized agreements from accidental removal and helps preserve document records.
Original PR description
backport of https://github.com/odoo/enterprise/commit/b2d32811877cdf1649095435ce16274ae96421f3 opw-5111568 Forward-Port-Of: odoo/enterprise#95922
Website image galleries now load the correct template when visitors click an image. This prevents a disruptive error on job pages and keeps the browsing experience smooth.
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.
This fixes an issue where some published product tags did not appear in the eCommerce sidebar until a product variant was created. Customers can now see and use all relevant published tags immediately, improving product discovery in the online store.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have an attribute which creates variants dynamically; 2. create a product with two or more dynamic attribute values; 3. add a new tag to the product; 4. publish the product to eCommerce. Issue ----- The tag doesn't show up in the side-bar until after a product variant has been created. Cause ----- The tags are searched based on `product_ids` instead of `product_template_ids`, leading to tags assigned to dynamically created product variants not showing up until a variant has been created. Solution -------- Search tags based on `product_template_ids.is_published` as well as `product_ids.is_published` (in case of `addition_product_tag_ids`). opw-4985989 Forward-Port-Of: odoo/odoo#228544
Shared employee profile links that include restricted private information now show a clear access message instead of an error. Users are redirected to the public employee list, and added checks help prevent similar permission-related failures in the future.
Original PR description
Sharing a link of an employee profile containing private info generated a traceback. Permissions had to be applied to the private field. I've also put a more explicit error message that allows the user to get redirected to the public employee list. I couldn't find a way to get the employee id from the url before the generic permission warning comes in. Thus I had to resort to redirecting to the general public employees list. Other tracebacks may happen each time a private field without the corresponding groups is put in the xml. Thus I added a test to prevent us from doing that again.