Daily updates from Odoo
Wednesday, July 22, 2026
5 changes · 18.0
Resolved issues and error corrections
This fixes an error that could stop customer payment follow-up reports from being sent in databases that do not use the optional no-follow-up feature. The system now only applies that filtering when the related feature is available, improving reliability for accounting teams.
Original PR description
https://github.com/odoo/enterprise/commit/65008de60589fbda924041e35bb34e33d84eb13d introduced a filter based on the `no_followup` field that is not present in every databases, since it was introduced in stable alongside with the `account_no_followup` module. This lead to an AttributeError when trying to send the followup report. This commit adds helpers to be able to use this field only in account_no_followup opw-6310602
Uruguay electronic export invoices now handle full global discounts correctly, avoiding submission errors when the export total is zero. Discount lines with quantities other than one are also calculated accurately, improving invoice totals and compliance reporting.
Original PR description
* if 100% global discount will have an error because in Totales XML section because MntExpoyAsim is missing. We add the option that this one can be added even if it is 0. * If user use quantity different that 1 in the discount line we are wrongly computing the total of the discount. now we always multiply price unit with cuantity
Deleting product documents now also removes related background email aliases that were previously left behind. This prevents errors when users later create new aliases and keeps document-related records clean.
Original PR description
Steps to reproduce: 1. Install documents and sales 2. Check product document centralization from settings, and no alias should be set 3. Now go to setting>techinical>emial>aliases>remove default…
Steps to reproduce: 1. Install documents and sales 2. Check product document centralization from settings, and no alias should be set 3. Now go to setting>techinical>emial>aliases>remove default filter and check total count 4. Go to products and add a document from the smart button 5. Now again check the aliases total count (1 increased) 6. Delete the document on the product. 7. Alias is not deleted 8. Try to add an alias from the settings Issue: - When `documents_product` is installed and product document centralization is enabled, deleting a `product.document` can leave an orphan `mail.alias` resulting in an error while creating a new alias. Cause: - A product document owns an `ir.attachment`, and that attachment is mirrored as a `documents.document` for `product.product` / `product.template`. In 18.0, `documents.document` inherits `mail.alias.mixin`, so the mirrored document also owns a `mail.alias`. - Deleting `product.document` deletes its `ir.attachment`. The linked `documents.document` is then removed by SQL `ondelete='cascade'` on `attachment_id`, not through ORM `unlink()`. Because the document unlink logic does not run, the alias cleanup from the mail alias mixin is skipped. Why not reproducible in 19.0: - In 19.0, `documents.document` uses `mail.alias.mixin.optional` instead of `mail.alias.mixin`. Binary mirrored documents no longer create a `mail.alias` unless an `alias_name` is explicitly set, so product mirrored documents do not create aliases in the first place. Solution: - Override `ir.attachment.unlink()` in `documents`. before deleting attachment, collect linked document aliases then delete attachment. SQL cascade deletes linked documents.document rows and now we delete collected aliases. opw-6019294
Document actions in Documents - Accounting now preserve open to-do activities instead of marking them as done automatically. This prevents accidental loss of activity tracking when users create invoices or run similar actions from a document.
Original PR description
Problem: Performing a server action on a document automatically marks all activities as done. Steps to reproduce: - Install 'Documents - Accounting'. - Select a document. - Add a To-do activity to that document. - Perform any action, such as 'Create Customer Invoice'. - The activity is automatically marked as done. Solution: Server actions were triggering `account_create_account_move` without the `skip_activities` parameter. This has been fixed by passing `skip_activities=True`, ensuring activities are no longer marked as done automatically. Task-5075307
The barcode app now correctly keeps only one delivery line selected when switching between packaged and unpackaged products. This prevents confusion during warehouse picking operations where mixed package types are handled in the same delivery.
Original PR description
**Steps to reproduce:** - Enable "Move Entire Packages" setting on deliveries - Make a product A, that has a package P1, on hand qty of 1 - Make product B that don't have a package, but on hand qty…
**Steps to reproduce:** - Enable "Move Entire Packages" setting on deliveries - Make a product A, that has a package P1, on hand qty of 1 - Make product B that don't have a package, but on hand qty of 1 - Make a delivery that has both of those products, requested qty of 1 for both - Mark it as todo - Go to the barcode app, select the delivery - Select the line with product B - Select the line with product A --> The line with product B is not unselected **Why the fix:** When we have a mix of packaged products and products without a package on the same operation, they are handled separately. The products without a package are handled in https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L388-L392 that calls https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L1277-L1284 But as you can see, there are no mention of the selected package line, which is stored in **this.lastScanned.packageId**. As we do not touch this variable, the selected package line stays selected. The same is true for the other way around, when we select a package line we call https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L394-L398 This function does not care for the **selectedLineVirtualId** which represents the selected line without a package. To avoid this and make it so that only one line is selected even if they have different package, we now set the corresponding value to false to unselect the other line in all situation. This is basically how it's done in https://github.com/odoo/enterprise/blob/98c79af3fb6cb354f46fd2f58e642a72a9271443/stock_barcode/static/src/models/barcode_model.js#L1202-L1208 to unselect every line regardless of packages. opw-6266203 Forward-Port-Of: odoo/enterprise#122038