Daily updates from Odoo
Tuesday, July 29, 2025
20 changes · master
Enhancements to existing features
Spreadsheet dashboard edition now includes a clearer translation namespace, helping labels and text be translated more consistently. This is a minor internal improvement that supports better localization quality for users in different languages.
The accounting dashboard now prevents users from clicking Fetch Transactions multiple times for the same bank. This reduces duplicate provider requests and helps avoid synchronization errors or confusion.
Original PR description
The button `Fetch Transactions` shown on a bank in the accounting dashboard can possibly be clicked multiple times in a row by a user. This would cause several calls to the provider causing potential errors. This commit prevents the user from being able to fetch transactions multiple times by removing this button once clicked. task-4900188 Forward-Port-Of: odoo/enterprise#89127
Websocket worker messages now include a clear BUS: prefix so they can be distinguished from other worker messages. This prepares the shared worker infrastructure for broader future use while keeping the current point-of-sale preparation display behavior aligned with the updated message format.
Original PR description
Add the prefix `BUS:` to all websocket worker actions/events. This is a preparation for reuse bus shared worker for other purpose other than websocket. community: https://github.com/odoo/odoo/pull/220852
New Helpdesk tickets now use five-digit reference numbers, such as 00001, instead of shorter two-digit numbers. This keeps ticket lists in the expected order as ticket volumes grow beyond 99 items, making it easier for teams to track and find tickets.
Original PR description
ordering tickets by ID wasn't working well when the ticket ID exceeds 2 digits make the `ticket_ref` filled with zeros to be 5 digits when new ticket is created. task-4164948
The Emitted Emissions list view now allows users to hide selected fields. This gives teams more control over the information shown, making the list easier to tailor to their reporting needs.
Original PR description
This commit makes a few field hideable in the Emitted Emissions list view Task-4890193
This update makes a minor visual adjustment to the messaging menu in Odoo's Mail app. It helps keep the interface polished and consistent, with low risk to day-to-day use.
Original PR description
Part of task-4967066
VoIP call sessions are now cleaned up automatically when a call's status changes to ended, rather than being handled separately in multiple places. This makes call handling more consistent and helps reduce the risk of lingering call sessions after a call finishes.
Original PR description
Instead of clean session in every function that can end a call, it's better that we do it when call model state is changed. Forward-Port-Of: odoo/enterprise#91188
Resolved issues and error corrections
This update ensures restaurant point-of-sale users are not prompted to send items to the kitchen when processing a deposit payment. It reduces confusion during customer payment settlement and adds automated coverage to prevent the issue from returning.
Original PR description
## After this commit: - A test case is added to verify that on the payment screen, the confirmation to send items to the kitchen does not appear when placing a 'deposit money' order (`pos_settle_due` module). Task: 4851891 Related PR: https://github.com/odoo/odoo/pull/213722
Subscription product prices on the website now show currency symbols in the correct position for each currency. This avoids confusing price displays for currencies such as the Euro, where the symbol should appear after the amount.
Original PR description
Issue: The currency symbol was always rendered in front of the amount, which is incorrect for currencies like the Euro (where the symbol comes after the amount). Step to reproduce: - install website_sale_subscription - create a product with currency as Euro (with BE company) - go to "Recurring Prices" tab, enable "Accept One-Time" - Open website from smart button Observation: - pound symbol appears in front of price Fix: Use the appropriate options for the monetary field to render the currency symbol Before: <img width="792" height="221" alt="image" src="https://github.com/user-attachments/assets/8c8424da-2222-455c-880d-a34df7eb16c8" /> After: <img width="823" height="203" alt="image" src="https://github.com/user-attachments/assets/97362df2-cc4a-4be5-b836-e15e47e2313b" /> opw-4943114 Forward-Port-Of: odoo/enterprise#90322
When an optional product is added to a subscription order, any discount entered manually is now kept on the resulting order line. This prevents customer-specific pricing adjustments from being accidentally lost and helps ensure subscription quotes and orders remain accurate.
Original PR description
**Current Behavior:** Manual discounts are not retained when adding optional products to the order. **Steps to Reproduce:** 1) Install the sale_subscription module. 2) Create a subscription with a…
**Current Behavior:** Manual discounts are not retained when adding optional products to the order. **Steps to Reproduce:** 1) Install the sale_subscription module. 2) Create a subscription with a recurring plan. 3) Add a product to the Optional Products section. 4) Manually set a discount on the optional product. 5) Click on the Add to Order Lines (cart) button. 6) A new SOL is created. **Issue:** The newly created SOL does not retain the manually set discount. **Cause:** - When the user clicks the Add to Order Lines button, the `add_option_to_order` method is triggered. This method creates a new sale order line (SOL) using values from `_get_values_to_add_to_order`. - In the current implementation, this method is overridden for subscription orders to exclude the discount value from the returned data. https://github.com/odoo/enterprise/blob/42d829ea6e6a98f251cfffc8fb67b5320a5ada12/sale_subscription/models/sale_order_option.py#L17-L21 - This forces a recomputation of the discount based on pricelist rules, which unintentionally removes any manually set discount. **Solution:** - Only remove the discount value from the returned data and trigger recomputation if there is no manual discount. - This ensures that any user-defined discount is preserved when creating the order line. opw-4840735 Forward-Port-Of: odoo/enterprise#90748 Forward-Port-Of: odoo/enterprise#89381
This fixes a costing issue when multiple employees work on the same manufacturing work order. It ensures overlapping employee time is not counted more than once, helping keep work center cost calculations accurate.
Original PR description
Test coverage for community-side diff about calculating a workcenter's cost in a way that omits counting duration within a working interval that was previously counted. opw-4430375 Forward-Port-Of: odoo/enterprise#88402 Forward-Port-Of: odoo/enterprise#81701
Fixed an issue where receiving a file reply in WhatsApp could trigger an error when request debugging was enabled. The system now logs file responses safely, improving reliability for teams using WhatsApp messaging and debugging.
Original PR description
When Debug requests is enable on the whatsapp business account and user replies with the file, a traceback will appear. Steps to reproduce the error: - Install ``whatsapp`` and ``contacts`` - Create…
When Debug requests is enable on the whatsapp business account and user replies with the file, a traceback will appear. Steps to reproduce the error: - Install ``whatsapp`` and ``contacts`` - Create a whatsapp business account > Enable Debug requests - Create a contact > Add a phone number > send whatsapp message with any whatsapp template - Now reply with the file(ex. pdf or image) in message from the contact's whatsapp. - Traceback in terminal Traceback: ``ValueError: A string literal cannot contain NUL (0x00) characters.`` https://github.com/odoo/enterprise/blob/b52a93da7d680b60646cb08a9126cf6c12f5307d/whatsapp/models/whatsapp_account.py#L166 Here, ``message`` contains NUL (0x00) characters because user replies with the file, value for the ``message`` comes from the below response. response: https://github.com/odoo/enterprise/blob/b52a93da7d680b60646cb08a9126cf6c12f5307d/whatsapp/tools/whatsapp_api.py#L49-L57 Here, ``res.text`` contains NUL (0x00) characters. So, it will lead to the above traceback. sentry-6314521165 Forward-Port-Of: odoo/enterprise#91055 Forward-Port-Of: odoo/enterprise#83274
Updated automated checkout tests so they correctly recognize the Payment step after a breadcrumb layout change. This helps keep rental and full website sales testing reliable without changing the customer-facing shopping experience.
Original PR description
Replaced the selector `span div.o_wizard_step_active:contains (Payment)` with `.o_wizard_steplabel.fw-bold:contains(Payment)` to reflect the updated breadcrumb template. Task-ID: 4766612 See also: Community PR : https://github.com/odoo/odoo/pull/210879
The optional columns menu no longer shows the custom field button on bank statement line lists. This prevents users from trying to customize a view where custom fields are not supported, reducing confusion in bank reconciliation workflows.
Original PR description
`Add custom field` button shouldn't be displayed with `account.bank.statement.line` model. Since c6ade2de937a30a13620a64a4779ebd827088755, we use an action to open the bank reconciliation widget, therefore in the `computeStudioEditable` method, we didn't pass in the first condition `!action.xml_id` anymore and we were returning `true`. With this commit, we return `false` if model is `account.bank.statement.line`. Steps: - Install `accountant` - Go to Accounting dashboard - Click on the `Bank` card title - Toggle the list view - Open the optional columns dropdown -> The `Add custome field` button is displayed opw-4953156 Forward-Port-Of: odoo/enterprise#90935
The Urban Piper point of sale integration now checks the confirmed order status directly instead of relying on an unused internal flag. This helps keep the ticket screen's order state accurate and removes obsolete internal data handling.
Original PR description
In this commit: ==== - Use `finalized` instead of `uiState.locked` to determine order state on TicketScreen. - Remove the unused `locked` property from `uiState` in posOrder. Task-4745869 Related: odoo/odoo#207406 Forward-Port-Of: odoo/enterprise#91124 Forward-Port-Of: odoo/enterprise#86684
Candidate and referral search suggestions now keep spaces in names and labels when shown in autocomplete results. This makes search results easier to read and helps users select the correct record more confidently.
Original PR description
This commit applies the same methodology as in https://github.com/odoo/odoo/pull/218768 to resolve the missing spaces issues in many2x autocomplete search results. task-4898120 Forward-Port-Of: odoo/enterprise#91020 Forward-Port-Of: odoo/enterprise#90138
The report editor now hides the Save and Discard buttons until a user has made changes. This reduces visual clutter and helps users better understand when there is something to save or discard.
Original PR description
before this commit : The Save and Discard buttons were visible even when no changes had been made. after this commit The buttons are now only displayed when there are unsaved changes. Task-4879126
The Accounting dashboard now correctly opens the bank reconciliation list with only unchecked transactions when users click the “To Check” link. This prevents already-reviewed transactions from appearing in that view, making reconciliation work clearer and faster.
Original PR description
**Issue** When accessing bank transactions via the "To check" link in the Accounting dashboard, the expected filter to show only unchecked transactions is not applied. As a result, all transactions are displayed, including those that have already been checked. **Steps to Reproduce** 1. Navigate to Accounting > Dashboard > Bank 2. Create two bank statement lines: one marked as checked, the other unchecked 3. Return to the dashboard 4. Click the “1 To Check” link 5. Observe that both entries are shown, instead of only the unchecked one **Root Cause** The corresponding filter (`to_check`) is missing from the search view of the `account.bank.statement.line model`. Although the action context correctly includes `search_default_to_check=True`, Odoo is unable to apply the filter without a matching `<filter name="to_check" ... />` in the search view definition. Opw-4945705 Forward-Port-Of: odoo/enterprise#90803
Shared Helpdesk ticket pages now show the logo and branding of the company that owns the ticket, even when viewed by someone who is not logged in. This prevents customers from seeing the wrong company identity on portal ticket links.
Original PR description
**Steps to reproduce**: 1. Install `helpdesk` only 2. Create a second company and configure a distinct logo for both the default and new companies. 3. Create a Helpdesk ticket under the new company.…
**Steps to reproduce**: 1. Install `helpdesk` only 2. Create a second company and configure a distinct logo for both the default and new companies. 3. Create a Helpdesk ticket under the new company. 4. Use the 'Share Ticket' (gear icon) feature to generate a portal link. 5. Open the link in an incognito window or a different browser (where no user is logged in). 6. Observe the logo shown in the portal navigation bar. **Observed behavior**: The portal incorrectly displays the logo and branding of the default/main company, even when the Helpdesk ticket belongs to a different company. **Issue**: When no portal user is logged in, the `res_company` used in the portal rendering context defaults to the system’s primary company (`env.company`). The template expects `res_company` to be explicitly set to reflect correct branding. See: https://github.com/odoo/odoo/blob/880954ebfc1106411b7f7a7d60aee05dfae60893/odoo/addons/base/models/ir_qweb.py#L781 **Solution**: Explicitly pass `ticket_sudo.company_id` as `res_company` in the portal view context to ensure correct company branding is used. opw-4855281 Forward-Port-Of: odoo/enterprise#90600
Miscellaneous changes
<b>Steps to produce :</b> 1) Install 10n_de_reports and switch to the German company 2) Create a journal entry from accounting with a credit and debit 3) Now update the credit and debit to a different value. 4) Post the journal 5) Go to "Accounting / Reporting / Audit Reports / General Ledger" 6) Download "DATEV DATA (ZIP)" and check "EXTF_accounting_entries.csv" <b>Issue:</b> The line for the created journal entry has a price_total of the previous balance even after updating the
Original PR description
<b>Steps to produce :</b> 1) Install 10n_de_reports and switch to the German company 2) Create a journal entry from accounting with a credit and debit 3) Now update the credit and debit to a…
<b>Steps to produce :</b> 1) Install 10n_de_reports and switch to the German company 2) Create a journal entry from accounting with a credit and debit 3) Now update the credit and debit to a different value. 4) Post the journal 5) Go to "Accounting / Reporting / Audit Reports / General Ledger" 6) Download "DATEV DATA (ZIP)" and check "EXTF_accounting_entries.csv" <b>Issue:</b> The line for the created journal entry has a price_total of the previous balance even after updating the credit and debit values. <b>Cause:</b> When the user updates the 'debit' and 'credit' values for an `aml`, The `price_totals` value remains unchanged as it is not dependent on `balance`. So, it will show the previous value in the report line because we are taking the abs(aml.price_total) from the report data. <b>Solution:</b> We can add an extra check of the move type so that it will fall back to the else block, where the line_amount will take a value by calculating taxes from `aml.tax_ids.compute_all`. opw-4707567 Forward-Port-Of: odoo/enterprise#85436 Forward-Port-Of: odoo/enterprise#83777