Daily updates from Odoo
Thursday, June 4, 2026
5 changes · 17.0
Resolved issues and error corrections
This update fixes an issue where project profitability reports were inaccurate when vendor bills included negative subtotals (like downpayments). The system now correctly considers these negative amounts, ensuring accurate cost calculations for projects with complex billing arrangements. This improves the reliability of project financial reporting.
Original PR description
**Problem:** If a vendor bill associated with a project through its analytic distribution has lines with negative subtotals, those lines are not considered in the project profitability report. An…
**Problem:** If a vendor bill associated with a project through its analytic distribution has lines with negative subtotals, those lines are not considered in the project profitability report. An example use case is a downpayment invoice, followed by a final invoice with the downpayment amount deducted. **Steps to Reproduce:** - Ensure project_purchase is not installed - Create a new project with "Billable" enabled - Go to the project settings and create an analytic account - Create and post a vendor bill with a line labeled "downpayment", the analytic account set, and a unit price of 5 - Duplicate the vendor bill, set the "downpayment" line unit price to -5, add a line labeled "product" with the analytic account set and a unit price of 10, and post the bill -> Go to the project updates and see that the vendor bill costs is wrong (15) **Solution:** A similar bug affecting customer invoices was resolved in PR #130992. AMLs with non-zero subtotals should be considered, so the domain is adjusted accordingly. opw-6172523
This update resolves an issue where excessively long addresses in payment fields caused errors during Authorize.net transactions. The system now automatically truncates address information to comply with the Authorize.net API's length restrictions, ensuring smooth and reliable payment processing. This change improves data integrity and prevents payment failures.
Original PR description
Steps to reproduce: - install payment_authorize module; - complete a credit card payment using Authorize.net with more than 60 characters on any other field than first name, last name or company; - confirm the payment. Issue: An error message appears. Cause: The Authorize.net API define the max length of information. It is possible that some information exceeds the maximum length. (https://apitest.authorize.net/xml/v1/schema/AnetApiSchema.xsd) Solution: Truncate information if the number of character is too large. opw-6141441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262154
This update resolves an issue where invoices with zero amounts and untrusted partner bank accounts would fail to process. The fix ensures the correct bank account is selected based on the order amount (negative for refunds, positive for regular invoices), improving the reliability of zero-amount transactions. This prevents errors and ensures proper invoicing functionality.
Original PR description
**Steps to reproduce:** - In the contact app, chose your company - Go to the Accounting tab - Create a bank account and check "Send Money" - Create a partner, create a bank account for it - Do not…
**Steps to reproduce:** - In the contact app, chose your company - Go to the Accounting tab - Create a bank account and check "Send Money" - Create a partner, create a bank account for it - Do not Check the "Send Money" - Go to the POS, click on a product and refund it 100% to make the price 0 - Chose the partner we created as the client and ask for an invoice - Try to pay, the account is not trusted **Why the fix:** With this same steps, if we make a normal order with a price different than zero, it will work. But if the price is negative, we will get the same error. This happens because the *partner_bank_id* is chosen depending on if this is a refund or not. With an amount of zero, the order is considered to be a refund, and we chose the partner's partner_bank_id, which is not trusted. On a normal positive flow, we chose the company's which is trusted, so we can send the money and it works. This does not make sense to assume a zero amounted order is a refund, because when we invoice something that is zero or greater, we get an invoice, but only for the *partner_bank_id* we chose it as if it was a credit note. So we should take the partner's *partner_bank_id* for every order that has a strictly negative amount, and take the company's for every order that is zero or positive. Another way to fix this would be to backport this commit that also resolves this issue starting in 18.0 by adding a fallback to the company's *partner_bank_id*, but it might be a bit much of a change for version 17.0 https://github.com/odoo/odoo/commit/7e63991dceb6e443b950e6a1b94454a82d5668c7 opw-6005384
This update resolves an issue where the 'Fill' option on the /shop page's product image editor wasn't functioning as expected. The fix ensures that product thumbnails now correctly adjust their fill mode (cover or contain) based on the toggle selection, improving the visual presentation of products.
Original PR description
**Problem:** On the /shop page, the "Fill" option in the web editor (cover/contain toggle on product card images) appears clickable but has no visible effect on the product thumbnails. **Steps to…
**Problem:**
On the /shop page, the "Fill" option in the web editor (cover/contain toggle on product card images) appears clickable but has no visible effect on the product thumbnails.
**Steps to reproduce:**
1. Install website_sale and open /shop.
2. Open the web editor and select the shop page.
3. Locate the "Fill" button group in the right panel (with the two svg icons).
4. Click the alternate option to switch between cover and contain.
5. Observe that the product card thumbnails do not change appearance.
**Current behavior:**
The toggle flips the `o_wsale_context_thumb_cover` class on the products table (and the activation of the `products_thumb_cover` view), but the product images keep rendering with `object-fit: contain` regardless of the toggle state.
**Expected behavior:**
The image fill mode follows the toggle:
- "cover" option active → product image uses `object-fit: cover`
- "cover" option inactive → product image uses `object-fit: contain`
**Cause of the issue:**
The product image template renders the img with the `object-fit-contain` utility class, and the local SCSS rule declares
`.object-fit-contain { object-fit: contain !important; }`. The CSS variable `--o-wsale-card-thumb-fill-mode` (set to `cover` by `.o_wsale_context_thumb_cover`) does cascade down to the img, but the non-variable, `!important` rule on the utility class always wins, so the variable-driven rule
`object-fit: var(--o-wsale-card-thumb-fill-mode, contain)` is silently overridden and the toggle becomes inert.
**Fix:**
Making the `.object-fit-contain` rule read the same CSS variable lets the existing toggle mechanism take effect without changing any template or removing the utility class. Outside the `.o_wsale_context_thumb_cover` context the variable is undefined, so the `var(..., contain)` fallback preserves the prior `contain` behavior for any other consumer of the class. This keeps the change to a single SCSS line, with no XML touched and no other CSS class semantics altered.
opw-6231432This update ensures that Odoo's yearly recurring events are properly synchronized with Microsoft Graph. Previously, a technical issue caused updates to these events to be silently dropped, resulting in incorrect scheduling. The fix includes adding the required 'month' field to recurrence patterns and extending support for the 'index' field, ensuring accurate yearly event updates.
Original PR description
Microsoft Graph requires the 'month' field (1-12) in recurrencePattern for absoluteYearly and relativeYearly event types. Omitting it causes a 400 ErrorInvalidRequest from Graph, silently dropping any Odoo-side update to a yearly recurring event. Also extend the 'index' field (relative weekday position) to yearly recurrences, which previously only set it for monthly ones.