Daily updates from Odoo
Monday, September 8, 2025
14 changes · 18.0
Resolved issues and error corrections
This fix prevents an error popup that appeared in debug mode when editors clicked selection field text while translating website pages. It improves the reliability of the website translation workflow without changing visible functionality for regular visitors.
Original PR description
**PROBLEM** In debug mode, props type errors pop up when clicking on a selection field to translate it. **STEP TO REPRODUCE** 1. Create a form with a selection field in a page. 2. Ensure you're in debug mode assets. 3. Go in translate mode, and click on a string of the selection field to translate it. 4. Props type error should pop up. **CAUSE** `node` is actually of type `Object` (its the target of a jquery event), the props validations expect it to be of type `String`. opw-4896491
The point of sale payment screen now correctly disables the Validate button on mobile when no payment method is selected. This helps prevent cashiers from accidentally trying to complete incomplete payments and keeps mobile checkout behavior consistent.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. task-id: 5072759 enterprise PR: https://github.com/odoo/enterprise/pull/94100 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an intermittent automated test failure around marking portal messages as to-do/starred. The change adds a stable marker for whether a message is starred, helping Odoo's testing systems verify the result without relying on hover-only visual cues.
Original PR description
Backport of https://github.com/odoo/odoo/pull/216106 Before this commit, test "test_star_message" was failing frequently on runbot at step to check message was starred have click on "Mark as Todo". This happens because when click on mark as todo, the message is asynchronously starred. However, there's no visual indication other than the message action have yellow filled star icon. This requires hovering the message to see it, but we don't know when we should exactly hover the message to see it. This commit fixes the issue by adding a `data-starred` on the `o-mail-Message` root node of message template that tells whether the message is starred or not. This removes necessity to hover to check whether message is starred. Fixes runbot-227568
This update fixes a failing automated test by ensuring required accounting details are set before the test uses them. It helps keep the manufacturing subcontracting dropshipping workflow validation reliable and prevents false failures in the development pipeline.
Original PR description
this PR fixes the runbot error 230451 introduced by the test of PR https://github.com/odoo/odoo/pull/221009 (a first corrective PR was made here https://github.com/odoo/odoo/pull/224431) fix : populate the accounts of the category before using them
Spanish TicketBAI invoice submissions now shorten overly long sequence names to meet the required 20-character limit. This prevents confusing upload failures when a point of sale has a long name, helping users submit records successfully.
Original PR description
Before this commit, records with sequences over 20 characters will present a cryptic error when uploaded to TicketBAI. Steps to reproduce ----- 1. Create a point of sale with a name >20 characters 2. Validate an order on the POS 3. Go to Point of Sale > Orders > Your order, click "Send to TicketBAI" 4. Invalid Operation ``` 002: Fichero no cumple el esquema XSD. Detalle del error: cvc-maxLength-valid: Value 'ThisisaveryveryveryveryverylongPOSnameTEST' with length = '42' is not facet-valid with respect to maxLength '20' for type 'TextMax20Type'. ``` Issue ----- The schema for SerieFactura specifies a TextMax20Type, but the generated sequence can be over 20 characters. Solution ----- Truncate the sequence to 20 characters. opw-4750372 Forward-Port-Of: odoo/odoo#225436
This fixes an error that blocked users from sending partially paid credit notes through electronic invoicing. Businesses can now complete the credit note sending process without a traceback in affected localization flows.
Original PR description
When User sends the partially paid credit note, A traceback will appear. Steps to reproduce the error: - Install ``l10n_co_dian`` module with demo data and switch to CO Company - Create a Credit note > Confirm > Register a partial payment > Send > Send Traceback: ``ValueError: The following child node is not defined in the template: CreditNote/cac:PrepaidPayment`` https://github.com/odoo/odoo/blob/7136383f47f3f86bc803efaa3837f4879b211b11/addons/account_edi_ubl_cii/tools/ubl_21_credit_note.py#L26 Here, ``cac:PrepaidPayment`` node is missing in the CreditNote. So, It will raise the above traceback when sending the credit note. sentry-6814211355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Date-related fields now correctly apply values provided by the system, even when that value matches the field's original value. This prevents users from seeing an outdated typed value when business logic, such as an onchange rule, re-applies the intended date.
Original PR description
This commit allows date (i.e. date, datetime & daterange) fields to apply a value from the props (e.g. coming from an `onchange`), even if that value is the same as the initial one. Before this commit, it was not possible due to the fact that the date service responsible for the reactivity of the field was updating the input in an incorrect order, causing the field to display the 'input' value, and not the one enforced by the props. Task 4978896 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
Product images in the Point of Sale grid now display without being stretched. This keeps the checkout interface cleaner and makes products easier for staff to recognize visually.
Original PR description
This fix modifies the CSS to use object-fit: contain;. This property scales the image to fit entirely within the container while preserving its aspect ratio. This ensures all product images display correctly, without stretching maintaining a consistent and clean look for the user interface. Steps to reproduce: 1. Install Point of Sale. 2. Open POS session. 3. Notice product images are stretched in the grid. Description of the issue/feature this PR addresses: Current behavior before PR: <img width="1902" height="907" alt="image" src="https://github.com/user-attachments/assets/a2dc2855-c984-4dec-9922-45ff5f1c2ca3" /> Desired behavior after PR is merged: <img width="1910" height="913" alt="image" src="https://github.com/user-attachments/assets/1f13a1bb-ea8e-4de1-8287-06566037a63a" /> opw-5028767 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change corrects how Odoo evaluates access rules when a linked record field is empty. It prevents valid records from being incorrectly blocked during creation or recalculation, improving reliability for company-based access rules.
Original PR description
* STEP TO REPRODUCE: * -Model B , have **m2o** field call **'a'** from Model A, **'a'** field is not required and is a compute store field -Model B have company rule **[('a.company_id', 'in',…
* STEP TO REPRODUCE:
* -Model B , have **m2o** field call **'a'** from Model A, **'a'** field is not required and is a compute store field
-Model B have company rule **[('a.company_id', 'in', company_ids + [False])]**
-After create B record but without **'a'** field or trigger compute of 'a' field that make it become false, we will get access rule error because: **[('a.company_id', 'in', company_ids + [False])]** will transform into **[('a', 'any', [('company_id', 'in', company_ids + [False])])]** , but note that **'a'** field is empty during computation which make the result become wrong because we call filtered_domain again when **'comparator' == any**, the **'self'** in it is the relation value which is 'a' field (empty record so return self)
* SOLUTION: only when all relational value of self have value then we should use any comparator
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-prThis fix ensures that when a vehicle is assigned to a shared contact, Odoo selects the employee from the same company as the vehicle. This prevents the wrong employee from being linked in multi-company setups, improving accuracy in fleet records and assignment logs.
Original PR description
There is a bug when multiple employees from different companies are linked to the same contact. Steps to reproduce: - Create two employees, in two different companies that relate to the same contact (partner) - In one of the two companies, create a vehicle and assign it to the partner created - The field driver_employee_id in the vehicle and assignation log will be assigned to one of the two employees, without taking care of the company of the car To fix this, the domain should also contain the company of the car, and must match the company of the employee. task-4978443 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#221154
This fix ensures the Validate button on the point of sale payment screen is disabled on mobile when no payment method is selected. It helps prevent cashiers from accidentally trying to complete incomplete payments, improving checkout reliability.
Original PR description
- Fix issue where the `Validate` button (in the payment screen) was not correctly disabled on mobile devices when no payment methods was selected. community PR: https://github.com/odoo/odoo/pull/225917 task-id: 5072759
This fix corrects an error in how factoring-related messages are posted and improves handling when Chilean tax authority responses are empty. When a response is invalid, the system now refreshes its authentication token, helping maintain a more reliable connection to SII.
Original PR description
Before the PR: Besides The syntax of message_post was wrong, there are situations where the response from SII is empty. After de PR: Fixed syntax in message_post and clear the token if the response was empty. This improves de connection by getting a new authentication from SII (new token) whenever the response is not a valid one.
This fix prevents subscription payments made through the portal from generating and sending the same EDI-signed invoice twice when automatic invoicing is enabled. Businesses using electronic invoicing localizations should see fewer duplicate documents and cleaner invoice processing.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Use a localization that uses EDI-signed invoices; 2. enable `sale.automatic_invoice` via `ir.config_parameter`; 3. pay for a subscription via the portal. Issue ----- Invoice is generated twice. Cause ----- Commit 7c5fd63729c1 added automatic EDI invoice signing for subscriptions paid via portal. This assumed that the `sale.automatic_invoice` parameter remained unset. If this parameter is set, the invoice is already generated when post-processing a transaction in `sale`. Solution -------- Don't send invoices whose `is_move_sent` field is set to `True`. Also, don't set `from_cron` to `True` on automatic payments, as this is only intended for moves that have `sending_data` filled by `account.move.send.batch.wizard`. opw-4648189
The Pricer point-of-sale integration now prevents users from choosing a sales pricelist on a product variant before that variant has been saved. This avoids an error screen and guides users to save the product first, keeping product setup more reliable.
Original PR description
An error occurs when a user attempts to set the **Pricer Sales Pricelist** on a product variant that has not yet been saved. **Steps to reproduce:** - Install the `pos_pricer` module. - Open the form view of **Product Variants**. - Without saving the record, try to add a **Pricer Sales Pricelist**. - Observe the error. **Error:** `KeyError: False` **Cause:** When the product variant is unsaved, `product._origin` is `False`, leading to a `KeyError` at [1], because `False` is not a valid key in the evaluation of method `_get_product_price()`. [1] - https://github.com/odoo/enterprise/blob/6f96632f23c3955b874a9019ba6a92561dec3172/pos_pricer/models/product_product.py#L139 This commit ensures the `pricer_sale_pricelist_id` field is invisible for unsaved product variant records to avoid inconsistent behavior. It allows users to only set a pricelist after the record has been saved, preventing any invalid computations or errors. Sentry - 6598605111,6696068013