Daily updates from Odoo
Wednesday, February 11, 2026
65 changes · saas-19.1
Enhancements to existing features
This update ensures that newly added selection options in Odoo fields are immediately visible in the user interface, without requiring changes to the database. Previously, these options were added to the database but not displayed. Note that translations still require a database update.
Original PR description
Previously, when developers use `selection_add` in stable versions, the new selection values could be written to the database (since `field._selection` contains them), but they would not appear in the UI due to missing `ir.model.fields.selection` records. This commit allows newly added selections to be displayed in the field description without requiring database updates. Note: the new selections still cannot be translated without database updates. mainly for enterprise https://github.com/odoo/enterprise/pull/106612 may be also helpful for https://github.com/odoo/odoo/pull/217853 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#247826 Forward-Port-Of: odoo/odoo#247542
This update enhances the eTransport functionality for Odoo's Romanian localization (l10n_ro_edi_stock) by improving the accuracy of XML files generated for shipping. Specifically, it now uses standard unit prices, includes necessary rounding for product values, and logs the sent XML files for tracking and troubleshooting.
Original PR description
- Adding logging of sent XML into move chatter - Adjusting the XML generator to use standard unit price - Adding rounding for product values as required by the XML structure task-5892338 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247919 Forward-Port-Of: odoo/odoo#247541
This update enhances the chatter interface by adding a company card with details sourced from DNB. Previously, industry tags from DNB were stored separately. This change consolidates relevant partner information within the chatter for better visibility and efficiency.
Original PR description
Before: Industry tags coming from DnB were stored in the Tags section of res.partner. and there was no Company info card in chatter. After: Industry tags coming from DnB are not stored in the Tags section of res.partner. Company card is created in chatter that is having details from Dnb along with tags. task-5373200 Forward-Port-Of: odoo/odoo#239464
Resolved issues and error corrections
This update fixes an issue where the quantity displayed in the shopping cart wasn't updating correctly after a user changed the quantity of a product. The fix ensures that the cart accurately reflects the updated quantity, improving the user experience and preventing order discrepancies. This was a critical bug impacting order accuracy.
Original PR description
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and…
**Steps to produce:** - Install `website_sale` with demo data. - Go to the shop page. - Select product `Customizable Desk` > click `Add to cart`. - In the wizard, change the quantity to 100 and directly click `Checkout`. **Issue:** - The cart shows the product with quantity = 1 instead of the edited value. Root cause: - When the user clicks Checkout, both `setQuantity` and `onConfirm` are triggered almost simultaneously. - At [1], the `_setQuantity` method is called, but due to the await before the quantity update is completed, the update may not finish in time. As a result, the previous quantity is sometimes used during checkout instead of the newly selected one. Solution: - we can update the quantity immediately before awaiting `_updateCombination`, ensuring that the correct quantity is already set when onConfirm runs. [1]: https://github.com/odoo/odoo/blob/f4eabe47a602301013afa63da6bdf87809903d29/addons/sale/static/src/js/product_configurator_dialog/product_configurator_dialog.js#L225 opw-5435672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247866 Forward-Port-Of: odoo/odoo#241424
This update fixes an issue where powerbuttons were sometimes incorrectly displayed in the HTML editor. By using document selection instead of editable selection, the powerbuttons now only appear when a valid selection is made within the editor, improving the user experience and ensuring accurate button visibility. This change also updates the layout of powerbuttons when toggling blocks.
Original PR description
Description of the issue this PR addresses: Powerbuttons were previously relying on the editable selection to decide whether they should be shown. However, this also displayed powerbutton when selection was not in editable. Powerbuttons now uses the document selection, ensuring powerbuttons only appear when the selection is actually inside the relevant elements. task-5240942 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237321
This update ensures that links created within the Odoo composer and when scheduling activities in chatter automatically include security best practices – specifically opening links in a new tab and preventing direct navigation to the original source. This resolves potential issues with link behavior and enhances user security.
Original PR description
*: `mail`, `website_forum` Currently when a link is created from the full composer or while scheduling activity in chatter, we don't apply the right attributes and it can lead to troubles. This PR aims to add default following attributes while creating a link in chatter or creating a post in website_forum. `target: '_blank'` `rel: 'noreferrer noopener'` task-5417475 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241252
This update allows Fleet Officers to modify the 'Make Vehicle Available' field for vehicles, previously restricted to Fleet Managers. This change streamlines the process of managing vehicle availability and ensures Fleet Officers have the necessary access to update vehicle statuses efficiently.
Original PR description
Issue: The 'plan_to_change_car' and 'plan_to_change_bike' fields were restricted to Fleet Managers, preventing Fleet Officers from editing it. Fix: Changed the view-level group restriction from Fleet Manager to Fleet Officer for both fields.. task-5443107 Forward-Port-Of: odoo/odoo#241748
This update resolves an issue preventing single-tenant Odoo apps using Microsoft Calendar from properly renewing their access tokens. The fix ensures Odoo uses the correct, tenant-specific Microsoft endpoint, allowing calendar synchronization with Outlook to function reliably. This improves the experience for businesses utilizing single-tenant Odoo instances.
Original PR description
Single-tenant Azure applications could synchronize calendar with Outlook, but refresh token renewal fail. Odoo was always using the default Microsoft token endpoint instead of the tenant-specific endpoint required for single-tenant apps. Steps to reproduce: - Create a single-tenant app in the Azure portal - Configure Odoo Microsoft Calendar with this app - Set `microsoft_account.auth_endpoint` and `microsoft_account.token_endpoint` system parameters with the specific endpoints using the tenant ID - Open the Calendar app and sync with Outlook - Wait for access token expiration - Refresh token request fails This commit fixes the issue by using the token endpoint stored in the microsoft_account.token_endpoint system parameter when requesting a refresh token. Forward-Port-Of: odoo/odoo#246829 Forward-Port-Of: odoo/odoo#244371
Previously, filtering options within the survey results analysis page were unresponsive. This fix addresses a technical issue where the filtering functionality wasn't properly applied after the results were dynamically loaded. The update ensures that filter interactions now function as expected, allowing users to effectively analyze survey responses.
Original PR description
Step to reproduce: 1. Install `survey` 2. Create a survey containing a "Date" type question 3. Share the survey and generate multiple responses 4. Go to the survey results analysis page. 5. In the `User Responses` table, try to filter by clicking the filter icon. Issue: Nothing happens when clicking the filter icon. Cause: https://github.com/odoo/odoo/commit/dfc1c742e35f75f2c386c4ef50d5584537ac1ed4 This recent refactoring moved interactions to the `SurveyResult` class. However, the table rows in the results view are rendered dynamically by a separate interaction, `SurveyResultPagination`, which replaces the DOM content using `t-out`. Because these elements are created dynamically after the `SurveyResult` interaction has started, the event listeners for `filter-add-answer` are not attached to them. Solution: - Reapply the interactions on tab change opw-5366346 Forward-Port-Of: odoo/odoo#240724
This update replaces the SFU (Server Fast Update) bundle with version 1.3.3, addressing a technical update to improve Odoo's performance and stability. This change ensures Odoo continues to operate efficiently and reliably.
Original PR description
https://github.com/odoo/sfu/releases/tag/v1.3.3 Forward-Port-Of: odoo/odoo#247263 Forward-Port-Of: odoo/odoo#244971
This update resolves an issue where Odoo was incorrectly rejecting PDF files sent as base64 data. The change relaxes the mimetype check, now only verifying that the file starts with 'application/pdf'. This ensures proper processing of PDF documents, improving functionality.
Original PR description
The mimetype check was too strict and rejected values like `application/pdf;base64`. This change fixes the issue by only verifying that the mimetype starts with `application/pdf`, ignoring any additional parameters. runbot-231598 Forward-Port-Of: odoo/odoo#247974
This update fixes a minor issue where the thread name wasn't displayed in the notification settings for Discuss group chats. Now, users will see the correct thread name when managing notification preferences, improving the clarity and usability of the Discuss interface. This ensures users can easily configure their notifications for group conversations.
Original PR description
Before this PR, when a user opened a group chat in Discuss and accessed the notification settings from the thread actions, the thread name was missing in the dialog. This commit fixes the issue by correctly displaying the thread name in the notification settings dialog. Part of task-5910210. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247682 Forward-Port-Of: odoo/odoo#247313
This update corrects a bug in how the system calculates timezones, specifically related to Daylight Saving Time (DST). The original test failed because the reference date wasn't dynamically adjusted for DST changes, leading to incorrect timezone offsets. This fix ensures accurate timezone handling for all test cases.
Original PR description
If provided a `datetime.time`, `babel.dates.time_format` needs to complete it to a datetime in order to resolve timezone offsets (and legacy names). In order to do that, it ultimately uses "now" as…
If provided a `datetime.time`, `babel.dates.time_format` needs to complete it to a datetime in order to resolve timezone offsets (and legacy names). In order to do that, it ultimately uses "now" as the reference: [`format_time`] calls [`DateTimePattern.apply`] which calls [`DateTimeFormat.__getitem__`] which calls
[`DateTimeFormat.format_timezone`] which calls [`get_timezone_gmt`] which calls [`_get_datetime`], which for a `datetime.time()` input resolves:
return datetime.datetime.combine(datetime.date.today(), instant)
This means DST changes impact the timezone being resolved timezone (offset or legacy name), which is what occurred here: S summer time starts on the second sunday of March at 0200 local which for 2026 is 2026-03-08 0200, faketime builds started failing with a virtual time of 2026-03-08 12:00 UTC which is well past 0200 local in America/New_York, and thus into the summer timezone, with an offset of -0400, thus different from the reference offset of -0500.
The reference date can be fixed to anything which results in standard time in all the timezones being checked, so between the first sunday of november (end of DST in the US) and the last sunday of march (start of DST in Europe), in the past (to ensure no DST rules change). Just use the reference date of the test itself as it's fine enough.
Now why did this test pass before #236660? This was hinted at when I needed to fix the offset from -0504 to -0500 but it didn't register as it was a minor edit: because the timezone was associated via `tzinfo` rather than `localize`, `pytz` was not able to select the correct timezone so would just select some prehistorical timezone, which doesn't have DST rules associated, and so would remain on standard time year round.
With the switch to zoneinfo the timezone can be interpreted dynamically, leading to the timezone offset varying when the reference date changes, and thus the issue revealing itself.
And `odoo.misc.format_time(datetime)` has a similar issue, because it strips out the `date` part of a `datetime` input, so similarly babel itself receives a lone zoned time, which it resolves using the date at the time of the test running. Which is funny because `babel.dates.format_time` itself can take a `datetime` and will use that directly for its timezone resolution, so on this bit we shot ourselves in the foot.
https://runbot.odoo.com/odoo/runbot.build.error/238900
[`format_time`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L841
[`DateTimePattern.apply`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L1424
[`DateTimeFormat.__getitem__`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L1487
[`DateTimeFormat.format_timezone`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L1675
[`get_timezone_gmt`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L459
[`_get_datetime`]: https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/babel/dates.py#L158A bug was preventing the copy button from functioning correctly within forms. This update resolved the issue by explicitly defining the button type as 'button' instead of the default 'submit', ensuring the button works as intended within form elements. This improves usability and prevents unexpected form submissions.
Original PR description
Previously, the type of the button in the template of the CopyButton utility component was left unspecified. Because the default type for buttons is "submit", the copy button will not work if it is placed within a `<form>` element, and will instead submit the form (see [1]). This commit just forces the type of the button to "button" which has no default behavior, meaning it can be used even inside of `<form>` elements without issues. [1]: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type Forward-Port-Of: odoo/odoo#247876 Forward-Port-Of: odoo/odoo#247754
This update resolves an issue where Sale Orders imported through POS and paid with online payments remained in 'Quotation' status. The fix ensures that the Sale Order's state is correctly updated to 'Paid' after online payment processing, streamlining the order management process. This improves data accuracy and prevents manual intervention.
Original PR description
When a Sale Order was imported in PoS and paid using online payment method, the SO's state stayed in Quotation. Steps to reproduce: ------------------- * Create a new Sale Order with a product available in POS * Add Online Payment in the Payment Methods * Import and settle the Order in POS * Pay the order with the Online Payment > Observation: In Sale app, the Sale Order is still in Quotation state. Why the fix: ------------ Online payments call `action_pos_order_paid()` directly, which only sets the POS order state to paid and never confirms the linked sale.order. Other payment methods do it in `sync_from_ui()`. Extended `action_pos_order_paid()` in pos_sale will now confirm linked quotations after POS marks the order as paid. opw-5022526 Forward-Port-Of: odoo/odoo#247998 Forward-Port-Of: odoo/odoo#230112
This update ensures that the user group field in the system correctly respects its 'readonly' settings. Previously, the field would still allow editing even when marked as read-only, leading to validation errors. This fix prevents these errors and ensures a smoother user experience.
Original PR description
Before this commit, the res_user_group_ids field introduced in [1] didn't care about the `readonly` props. As a consequence, when the field (or the whole view, via `edit="0"`) was readonly, the widget still rendered editable SelectMenu. Obviously, editing it and then triggering a save would raise a validation error, so it was only an UI issue. This commit fixes it by properly setting the field in readonly if its props states it. [1] https://github.com/odoo/odoo/pull/179354 task~5922282 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#247802
This update fixes a misconfiguration in the Italian tax settings. The exoneration code for the 0% EU S tax has been corrected to accurately reflect whether a transaction is for goods or services. This ensures proper tax calculations and compliance with Italian regulations.
Original PR description
In Italy, the code depends strictly on whether the transaction is for Goods or Services. N3.2 is for Intra-community supply of GOODS (Cessioni Intracomunitarie di beni) N2.1 is for Intra-community supply of SERVICES (Prestazioni di Servizi) This commit fixes the exoneration code on the 0% EU S tax from N3.2 to N2.1. task-5870894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247904 Forward-Port-Of: odoo/odoo#245675
This update resolves a problem where formatting the user's signature in the system could cause issues with sending emails, specifically related to the 'Full Composer' feature. The fix ensures that signature formatting is handled correctly, preventing multiple 'Read More' elements from appearing in emails.
Original PR description
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text -…
**Steps to reproduce:** - Go to the current user preferences - Go to its signature field - The current state should be something like: ``` -- Mitchell Admin ``` - Apply bold formatting on the text - Save the changes - Refresh - Remove the bold formatting - Press enter between the two lines (at the end of `--`) - Save the changes - Go to the Contact app - Select any record - Go to its chatter - Click on `Send Message` and then the `Full Composer` expand button - Send the mail - In the chatter multiple `Read More` are added for the same signature (I think it can appears in multiple operations, this is just an example related to the `<strong>` element becoming `<span>` on removal) **Issue:** Playing with the html editor on the signature field can break the `tag_quote` flow due to the added elements. **Fix:** Explicitly add `"data-o-mail-quote"` to the signature container which is added when opening the `fullComposer`. It could also be an issue related to the html_editor but this seems cleaner to fix it here. This issue was fixed in 19.0 in a similar way by adding a common div around the signature and adding the same attribute. related: https://github.com/odoo/odoo/commit/6eb55c42158b08652c4c533bf56b5333c162bd3a opw-5149505 Forward-Port-Of: odoo/odoo#247560 Forward-Port-Of: odoo/odoo#231954
This update fixes an issue where Point of Sale order times were consistently displayed in 12-hour format, regardless of the user's locale setting. Now, order times in the Orders tab will automatically show in the correct 24-hour format (e.g., 16:30) based on the user's language preferences, improving clarity and accuracy.
Original PR description
In POS, when using a 24h language, the time shown in the order tab (TicketScreen) was always in 12h/AM-PM format instead of 24h.
Steps to reproduce:
-------------------
Set the POS (or user) language to a 24h locale (e.g. French, Spanish) Open POS and create an order
Open the Orders tab and look at the time shown for the order
> Observation:
Time is displayed in 12h (e.g. 4:30) instead of 24h (e.g. 16:30).
Why the fix:
------------
The order tab time was formatted with a hardcoded 12h format ("hh:mm"), ignoring the user’s locale. It now uses the locale’s time format (e.g. localization.timeFormat) so the order tab shows time in 24h or 12h according to the language.
opw-5742177
Forward-Port-Of: odoo/odoo#246269A recent issue prevented users from printing bank statements from the Accounting Dashboard. This fix resolves an access error that occurred when attempting to print, ensuring users can reliably download PDF reports of their bank statements. The change avoids unnecessary data loading to improve stability.
Original PR description
In Bank Statement list view users may select a statement and download a pdf report. However, currently, the load of extra print options may raise an error. Steps to reproduce: - In Accounting Dashboard, from a bank journal card, 3 dots > Statements - Select a line (it needs to have an id not present in `account.move`) - Click 'Print' button Issue: Access error may occur, stating the record has been deleted or it is inaccessible. This happens because backend method `get_extra_print_items` is called on `account.move` with the id of the `account.bank.statement` On accessing the record fields we get the error A solution is to avoid loading extra print item with loadExtraPrintItems if we are not in the `account.move` model opw-5500506 Forward-Port-Of: odoo/odoo#246292
This update fixes a crash in the Forecast report when it includes archived product variants. The fix ensures that only active variants are considered when calculating stock levels, preventing errors and ensuring accurate reporting. This improves the reliability of the Forecast report.
Original PR description
Currently, accessing the Forecast report on a Product Template causes a crash if the template contains an archived variant that still has active stock moves (e.g., a pending delivery). ## **Steps to…
Currently, accessing the Forecast report on a Product Template causes a crash if the template contains an archived variant that still has active stock moves (e.g., a pending delivery).
## **Steps to Reproduce:**
1) Install `stock` with demo data.
2) Create a Delivery orders(stock picking) for product `conference chair(E-COM12)`
with demand of 40 qty, click on `Mark as todo`.
3) Navigate to `stock>products>products` and open `conference chair` product form
view.
4) From the variant smart button archive `E-COM12` variant.
5) Navigate back to product form view and click on `forecast` smart button.
## **Error:**
`TypeError: Cannot read properties of undefined (reading 'free_qty')`
## **Root Cause:**
`this.props.docs.product[line]` at [1] is undefined because the server did not
include an entry for that product id in the report header.
### **Complete Flow:**
On clicking the Forecast button an ORM call is made to [_get_report_values](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L512-L519),
which calls [_get_report_data](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L156-L172) to build the report data.
#### **Header Part:**
- [_get_report_header](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L112-L144) returns metadata only for active variants because,
[_get_product_quantity](https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/report/stock_forecasted.py#L69-L72) is called which calls _get_products(see[2]), and _get_products only
returns active variants for the product template.
#### **Lines Part:**
- [_get_product_lines](https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L239) iterates over products coming from the move search
and it includes both archived and unarchived variants.
[_move_confirmed_domain](https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L55-L56) calls _move_domain(see[3]), which searches stock.move using
product_tmpl_id when given a template id and therefore returns moves for
every variant of the template (archived or not).
#### **Why the mismatch happens:**
- `_get_products` fetches variants using `browse()` which by default excludes archived variants.
`_product_domain`(see[3]) uses product_tmpl_id when given product_template_ids,
which matches moves for all variants of the template. As a result, moves can reference
archived variant ids that the header never listed.
[1]- https://github.com/odoo/odoo/blob/0dd40ede75f68b18192738f0d20aadaac9f348c7/addons/stock/static/src/stock_forecasted/forecasted_details.js#L188
[2]- https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L61-L67
[3]- https://github.com/odoo/odoo/blob/82fe034509a6b401e86c345a82aa7b8948294e52/addons/stock/report/stock_forecasted.py#L25-L31
## **Fix:**
- This commit ensures that archived product variants are excluded directly
at move search level by appending `('product_id.active', '=', True)` to
the product domain used by the forecast report. This ensures that only
active product variants are considered when fetching stock moves.
### **opw-5440872**
Forward-Port-Of: odoo/odoo#245852This update fixes a minor inconsistency in how printer tests are initiated within the Point of Sale system. By using LNA, the system now aligns with a key configuration setting, ensuring a more reliable and predictable experience for users. This improves the overall stability and usability of the POS functionality.
Original PR description
Ensure the printer and preparation printer Test buttons use LNA when triggered, aligning behavior with `point_of_sale.use_lna` configuration. Task-5886700 Related: https://github.com/odoo/enterprise/pull/106594 Forward-Port-Of: odoo/odoo#246446
A bug in the Point of Sale refund process was causing errors related to invoice and credit note handling. This update corrects the system to properly identify refund orders based on the 'is_refund' field, ensuring accurate accounting and preventing errors. This fix improves the reliability of refund transactions.
Original PR description
TASK: [#5897377](https://www.odoo.com/odoo/project/1737/tasks/5897377) --- The test `point_of_sale:TestPointOfSaleFlow.test_pos_order_refund_ship_delay_totalcost` was failing with the following error: > You cannot use a credit_note document type with an invoice. This issue occurred because the refund order was not marked as a refund. As a result, the `account.move` `move_type` was set to `out_invoice` instead of `out_refund`. Since 19.0, following the change introduced in [odoo/229683](https://github.com/odoo/odoo/pull/229683/files#diff-29cbaebb5b63b539ab173d9340b2aec87b9ad63cd322eec2347879c5412bd50bR850), the `move_type` is no longer determined based on the `pos.order` `amount_total`, but on its `is_refund` field. This field was missing in the test, causing the incorrect behavior. Forward-Port-Of: odoo/odoo#247136
This update ensures invoices for Point of Sale orders are correctly marked as paid when the order was previously settled through a 'settle due' process. Previously, the system didn't account for payments from the settle due order, leading to unpaid invoices. This fix resolves a critical issue impacting invoice accuracy.
Original PR description
If you made a PoS order paid with the customer account payment method, and then you created a settle due order to settle the previous one. If you then create the invoice for the original order, the invoice would appear as unpaid, because the payments of the settle due order were not taken into account. Steps to reproduce: ------------------- * Create a PoS order and pay with the customer account payment method * Settle the order that you just created with a settle due order * Close the session * Go on the original order and create the invoice > Observation: The invoice appears as unpaid when it should be paid. Why the fix: ------------ When creating the invoice we gather all the payments of the order to create the corresponding journal entries. But the payment of the settle due order were not included. So the order was considered as unpaid. opw-5268042 Forward-Port-Of: odoo/odoo#245796
This update ensures consistent styling for mention suggestions across both the small and full composer views. The changes improve the visual presentation and prevent overflow issues, particularly on smaller devices, leading to a better user experience. This resolves a minor styling inconsistency.
Original PR description
Use the same style in full composer than in small composer. Tweak style to account for small device, better handle overflows task-5916878 Before / After (small composer) <img width="342" height="466" alt="image" src="https://github.com/user-attachments/assets/234ff152-3c5a-4c82-b257-2800a752dd3a" /> <img width="496" height="476" alt="image" src="https://github.com/user-attachments/assets/60b3d12d-38ea-429a-9dec-441886ac022e" /> Before / After (full) <img width="413" height="394" alt="image" src="https://github.com/user-attachments/assets/c51e053f-7eb2-4ee0-8a9a-bd068ee9ded0" /> <img width="487" height="555" alt="image" src="https://github.com/user-attachments/assets/d0a3514d-aa1f-4d89-8fe4-7964ec20a288" /> Forward-Port-Of: odoo/odoo#247910 Forward-Port-Of: odoo/odoo#247562
This update fixes an error that occurred when users attempted to change the stage of a lead in the CRM. The issue stemmed from a recent change in how Odoo handles record IDs, specifically preventing the calculation of a misleading message. This ensures a smoother user experience when managing leads.
Original PR description
Currently, an error occurs when a user changes the stage of lead. **Steps to Reproduce:** - Install the `crm` module. - Go to `crm` and switch to `List view`. - Click `New` and then click on any…
Currently, an error occurs when a user changes the stage of lead. **Steps to Reproduce:** - Install the `crm` module. - Go to `crm` and switch to `List view`. - Click `New` and then click on any `stage`. `AssertionError: Invalid falsy real id` This error occurs because, after the recent commit [1], falsy IDs are no longer allowed. When the user changes the stage without creating the record, the record ID is passed as False when it goes to calculate the rainbowman message [2]. Browsing the record with a falsy ID [3] then raises this error. This commit ensures that if a record has no ID and the stage ID is changed, the rainbowman message is not calculated. [1]: https://github.com/odoo/odoo/commit/4290724a4c8c57fba4f4d3d688d38f65dadcc38f [2]: https://github.com/odoo/odoo/blob/6bce0128fdd5176c55ac9ed5af1922c1f6f97da5/addons/crm/static/src/views/crm_form/crm_form.js#L51 [3]- https://github.com/odoo/odoo/blob/403f3cf8d291ff2023fc4c5d3631a01465f292c3/odoo/orm/models.py#L5200 sentry-7207509338 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where mention suggestions in the full composer weren't correctly sorting, preventing users from easily seeing followers at the top. The fix ensures that mention suggestions are now properly sorted, improving the user experience and making it easier to connect with relevant contacts within the system. This enhancement focuses on the core functionality of the full composer.
Original PR description
Fetch/sort suggestion in the full composer don't receive the thread param which leads to follower not being sorted at the top. task-5917226 Forward-Port-Of: odoo/odoo#247966 Forward-Port-Of: odoo/odoo#247581
This update corrects a visual inconsistency in Odoo views. When a field is removed due to security restrictions, the text that follows it was previously disappearing. This fix ensures that the view layout remains consistent and predictable, regardless of access controls.
Original PR description
In a view, if a field is removed due to security access restrictions, the text that follows it is not preserved. This leads to inconsistencies in the view. opw-5798852 Forward-Port-Of: odoo/odoo#246561 Forward-Port-Of: odoo/odoo#245855
This update fixes an issue where list markers disappeared when switching between list types (numbered, bulleted, or checklists). The change ensures that list markers are consistently displayed regardless of the selected list type, improving the user experience when creating and editing lists within the HTML editor.
Original PR description
Steps to reproduce: - Create a numbered list - Press Backspace to remove the list marker - Change the list type to bullet or checklist using the powerbox. Current behavior before PR: - The list type is changed to bullet or checklist, but the marker is not visible Cause: - When a list marker is removed using Backspace, the `oe-nested` class is added to the `<li>` element, which hides the marker. - When switching the list to another list type, the `oe-nested` class is not removed. - As a result, even though the list type changes, the marker remains hidden. Solution: - When changing the list type, remove the `oe-nested` class from `<li>` elements that do not contain any list elements as children. - This ensures the marker is correctly restored for the new list type. task-5468384 Forward-Port-Of: odoo/odoo#245318 Forward-Port-Of: odoo/odoo#243001
This update ensures that mention suggestions prioritize users who follow the record – specifically, thread followers – over those involved in recent chats or internal users. This change enhances the relevance of suggested contacts within Odoo's messaging features, making it easier for users to connect with the most important people.
Original PR description
Before this commit, mention suggestions prioritized partners from recent chats over the record's followers. This commit fixes the behavior by reordering the sequence numbers to have the following priority order: Thread followers > Internal users > Recent chat partners. <img width="1051" height="316" alt="image" src="https://github.com/user-attachments/assets/04b80028-07b5-40b2-8972-e80f933980c7" /> task-5313114 Forward-Port-Of: odoo/odoo#247875 Forward-Port-Of: odoo/odoo#237145
This update fixes an issue where month names were incorrectly displaying based on the user's locale instead of the Odoo environment's language. The change ensures month names are consistently shown in the correct language for each user, improving the user experience. This was a minor improvement impacting several HR and accounting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Enterprise PR: odoo/enterprise#106175 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364 Forward-Port-Of: odoo/odoo#247898 Forward-Port-Of: odoo/odoo#246790
This update fixes an error in how the cost of goods is calculated for products tracked by lot. Previously, the standard price wasn't updated correctly after a sale, leading to inaccurate cost reporting. The fix ensures that the cost accurately reflects the value of the lots used, improving financial reporting accuracy.
Original PR description
**Problem:** the cogs do not take into account lot valuation and the standard price of the form is not updated after a move out. **Steps to reproduce:** - create storable avco perpetual product,…
**Problem:** the cogs do not take into account lot valuation and the standard price of the form is not updated after a move out. **Steps to reproduce:** - create storable avco perpetual product, tracked and valued by lot - confirm a purchase order for 2 qty at price 10 - in the receipt add 'lot 1' for the lot - validate - confirm a purchase order for 2 qty at price 16 - in the receipt add 'lot 2' for the lot - validate - confirm a sale order for a qty of 1, validate the move - invoice the sale order, and confirm the invoice **Current behavior:** 1) the cogs line (stock valuation and expenses) have a value of 13 (the avco value) 2) the standard price on the form view is still 13 **Expected behavior:** 1) it should be 10 (the value of lot1) 2) it should have been updated to 14 (weighted average of the lots value) **Cause of the issue:** 1) get_cogs_price_unit() is taking standard price of the product if the product is not fifo. https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock_account/models/stock_move.py#L245 In case of avco lot valuated product, this is not correct, the value should be the sum of (the value of each lot * the number of product from this lot in the moves) divided by the total quantity. this value can be obtained be dividing the total value of the moves by the total quantity. 2) after the move is validated, the standard price should be updated because for lot valued product, the avco value can change after a move out. Currently it's only updated for fifo products. https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock_account/models/stock_move.py#L172 **fix** For the diff inside _update_standard_price() for problem 2, I use avg_cost instead of doing the computation directly in _update_standard_price() to not duplicate code logic because the computation logic for lot valued products is already inside _compute_value() https://github.com/odoo/odoo/blob/93fa6d9fff63534cfa9251e21fc82797d8b83468/addons/stock_account/models/product.py#L152-L157 The extra dependency on compute_value on the stock.lot model is needed because otherwise total_value of the lot is not invalidated in the cache after an out mouve is validated (in our steps it will stay in cache with a value of 20 even after the out move is validated). With our steps this does not cause problem because when we use the avg_cost value for the product, \__get__() is called on total_value of the lots, but it was not in cache because we didn't compute it before in this environment , so it will be recomputed with correct current value . But in other cases where the action_done is called on the move and there is already a value in cache for total_value of the lots (like in the test of this commit for instance), this value will become wrong after the move is validated and the cache won't be invalidated which will lead to incorrect computation of avg_cost because it will use the wrong cache value of total_value for the lots. the test needs to be in sale_stock because the moves used for the cogs are being returned via the sale_stock override of _get_stock_moves() https://github.com/odoo/odoo/blob/7ae112acd0c333f09c54e4eabbd22bcef72c32a7/addons/stock_account/models/account_move_line.py#L67 opw-5459082 Forward-Port-Of: odoo/odoo#246821
This update fixes a technical error that prevented users from deleting the 'Bank and Cash' account type record within the Danish accounting module. The issue stemmed from an outdated code reference, now resolved by updating the code to use the correct method. This ensures smooth operation of the accounting processes.
Original PR description
This error occurs when attempting to delete the `Bank and Cash` account type record. Steps to reproduce: - Install `l10n_dk` and `Accounting` module(with demo data) > Switch to `DK Company` - Go to `Chart of Accounts` and groupby by `Account Types` - Try to delete `Bank and Cash` record (if warning occurs for audit trail then disable `audit trail` in settings) Traceback: `AttributeError: 'account.account' object has no attribute 'read_group'` This error occurs because `read_group` is used in the code, but it was deprecated in [commit] and replaced by `_read_group`. [commit]: https://github.com/odoo/odoo/pull/163300/commits/191ac027dd1e5133b0bcc72ab44358431c508a1c sentry-7207582551
This update fixes a problem where browser translation plugins were incorrectly replacing editable text with translated versions, disrupting the auto-save feature. Adding the `translate="no"` attribute to editable fields now prevents this interference, ensuring content is saved accurately.
Original PR description
Browser translation plugins were altering editable content by replacing the original content with translated versions, which caused issues when paired with auto-save. To prevent this behavior, the attribute `translate="no"` has been added to editable fields. task-5485078 Forward-Port-Of: odoo/odoo#247827
This update resolves an issue where the BoM report wouldn't correctly switch between product variants due to a discrepancy in how the frontend and backend processed variant order. The fix ensures the frontend uses the explicitly passed variant ID, guaranteeing correct variant selection within the report.
Original PR description
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be…
Steps to reproduce on runbot ------------------ Select a product with several variants and a Bill of Materials (e.g. Stool). Change the variants order so that their ids are not ordered, this can be done by modifying the default_code for example (e.g. Internal Reference for variant "Color: Green" set to "A"). When accessing the BoM report, you won’t be able to switch to one of the possible variants (in the example the Dark Blue variant). Why it is happening ------------------ The default variant to be displayed when opening the report is selected in the backend using the product_variant_id field. This field is computed as the first element in product_variant_ids as they are ordered in the model. We then send this variant’s information to the frontend and a dictionary containing every variant (key= id and value = display_name). In the serialization process, the object is reordered based on the keys. Thus, if the variants were not ordered based on their ids in python, the order will change. The displayed variant is correct as it has been passed directly but the frontend also computes the currentVariant attribute. This is computed as the first element in the dictionary but in this case, it is not the one that has been selected in the backend, as the order changed. As a result, you see the report for a variant A but the frontend considers you are on the report for variant B so you cannot switch to variant B as you are supposed to be already on it. The fix ------------------ I propose to use the explicitly passed id as the currentVariantId. opw-5409493 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248009 Forward-Port-Of: odoo/odoo#241603
This update resolves a bug that caused a RecursionError when producing large quantities of products tracked by serial numbers. The issue stemmed from excessive recalculations during order splitting, specifically related to manufacturing order processing. This change ensures stable production runs for high-volume serial-tracked items.
Original PR description
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture…
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture routes are enabled). - Create a BoM for product A containing product B. - Create a BoM for product B containing product C. - Create a BoM for product C containing another product. - Create a manufacturing order of 100 units for product A and confirm it. - Go to the MO C and split into 100 mo - Go to the MO B and split into 100 mo -> RecursionError: maximum recursion depth exceeded. **Cause** While splitting, this method is called: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/mrp/models/mrp_production.py#L2031 which ultimately calls: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/stock/models/stock_move.py#L658-L661 This retriggers `_compute_packaging_uom_id` for all moves in `move_orig_ids` or `move_dest_ids`, and accessing the full recordsets causes recursive recomputation leading to a RecursionError. opw-5265424 Forward-Port-Of: odoo/odoo#247839
This update removes unnecessary data aggregation from device tracking models, resulting in faster database queries. By streamlining the data processing, the system will respond more quickly, particularly when dealing with large numbers of users and devices. This change enhances overall system performance.
Original PR description
Invariants: - For a given session identifier, the user will always be the same (otherwise the session is no longer valid). - For a given device determined by a session identifier, an IP address, and a user agent, the country and city will remain the same, as these are determined when the device is first detected. It is therefore possible to no longer aggregate these values and place them directly in the `GROUP BY` clause in order to improve the performance[^1] of `res.device` and `res.session` models. [^1]: Aggregate computations (`MIN`/`MAX`) force the database to perform redundant comparisons for every row in the group. By placing these columns directly in the `GROUP BY` clause, the query reduces per-row processing. This lead to a more efficient execution plan (especially on large datasets). Task-5928301
This update resolves an issue where reducing order quantities in multi-step delivery kits incorrectly triggered additional picking operations. The fix ensures accurate quantity calculations during order fulfillment, preventing unnecessary stock movements and improving order processing efficiency. This impacts users utilizing multi-step delivery kits.
Original PR description
### Steps to reproduce: 1. In the settings enable: Multi-steps route 2. Put your warehouse in 2-step deliveries 3. Create a kit product: - With one component - There is one component in the stock 4.…
### Steps to reproduce: 1. In the settings enable: Multi-steps route 2. Put your warehouse in 2-step deliveries 3. Create a kit product: - With one component - There is one component in the stock 4. Create and confirm a SO with 1 x K 5. Process the pick and ship 6. Return the delivery 7. Set the sol qty to 0 #### > Two unexpected pickings are created to put the kit in output ### Cause of the issue: Decreasing the sol quantity to 0 will call the `_action_launch_stock_rule` in order to create and run procurements related to that quantity change. However, the quantity currently handled by other procurements is determined here by the `_compute_kit_quantities`: https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/sale_stock/models/sale_order_line.py#L388 https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/sale_mrp/models/sale_order_line.py#L154-L166 https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/mrp/models/stock_move.py#L578-L580 Now, the issue is that `_compute_kit_quantities` does not handle move chains properly, as all delivery moves contribute to the `incoming_qty` and all return moves contribute to the `outgoing_qty`. This results in an `incoming_qty` of 1 (for the pick) + 1 (for the ship) and an `outgoing_qty` of 1 (for the 1-step return), that is a `qty_processed` of 1. As a result, the procurement will be generated for a quantity of `0 - 1` (rather than 0): https://github.com/odoo/odoo/blob/87e176ad76c9d7b87cd622ae38a8b9a62813b1cb/addons/sale_stock/models/sale_order_line.py#L388-L402 which leads to the unexpected picking creations. opw-5432558 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246141
This update resolves an issue where users with read-only access to shared documents were encountering errors when opening the chatter associated with those documents. The fix ensures the system verifies user access permissions before attempting to update document thumbnails, preventing the error.
Original PR description
How to reproduce: - Install documents - Create a folder at the root (company) not shared to anyone (including internal user) - Open that folder and ensure the chatter is closed - Upload a document in it and share it with Marc Demo with view access - Connect with Marc Demo, click on that shared document and open the chatter You get an error because the client try to update the thumbnail of the attachment for the chatter but the user has only view access to it. The user doesn't have write access to the attachment because it is linked to a document with only read access. To solve the problem, we modify the check that trigger the thumbnail update to also check that the user has access to the related record. Task-5360962 Forward-Port-Of: odoo/odoo#244205
This update fixes an issue where the 'Manufacture to Resupply' option was automatically re-enabled after being disabled. The change ensures that this setting remains off when intentionally disabled, preventing potential disruptions to inventory management. The fix involved adjusting how the system tracks warehouse involvement in manufacturing routes.
Original PR description
**Steps to produce:** - Install `mrp` with demo data. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. -…
**Steps to produce:** - Install `mrp` with demo data. - Inventory > Configuration > Settings > Warehouse > enable `Multi-Step Routes`. - Go to Configuration > Warehouse Management > Warehouses. - Open `YourCompany` record. - Click on Routes > open `Manufacture` > enable `Products`. - Return to `YourCompany` and disable `Manufacture to Resupply`. **Issue:** - After disabling `Manufacture to Resupply`, the option is automatically re-enabled. **Root cause:** - In [1], `manufacture_to_resupply` is set to true if either `manufacture_route.product_selectable` is true OR the current warehouse is included in `manufacture_route.warehouse_ids`. - In the `_inverse_manufacture_to_resupply` method, unchecking the flag only unlinks the warehouse from the route. However, if `product_selectable` is still enabled, the compute logic will continue to set the field back to true. **Solution:** - Now, when we uncheck `manufacture_to_resupply` then also made manufacture route non-selectable on products. As a result, manufacture_to_resupply will no longer be set to true again. [1]https://github.com/odoo/odoo/blob/4f5594a911c1960f620d902d507e563cdab167b9/addons/mrp/models/stock_warehouse.py#L48 opw-5383719 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239217
This update resolves an issue where updating the amount of a payment with multiple liquidity lines would cause an error. The fix ensures that the payment's journal entry accurately reflects changes to liquidity lines, improving payment processing reliability. This change impacts payments with complex liquidity line configurations.
Original PR description
This PR improves payment move synchronization and fixes an error that is caused while changing amount of a Payment that has multiple liquidity lines. Steps to reproduce: 1. Create payment with x…
This PR improves payment move synchronization and fixes an error that is caused while changing amount of a Payment that has multiple liquidity lines. Steps to reproduce: 1. Create payment with x amount and validate it. 2. Open the payment journal entry. 3. Reset to draft and update the liquidity line amount from x to (x - y) 4. Create another liquidity line with amount y to balance entry and post it. 5. Draft the payment and try to update the amount. A traceback will appear. `ValueError: Expected singleton` Cause: The lines for payment JE are prepared for the case assuming that there will be only 1 liquidity line, but since we have more than 1, we get a Singleton error. Description of changes made: While preparing values for move in `synchronize_to_moves()` check for multiple liquidity lines and append all values to write. Further, the `_prepare_move_line_default_vals()` is also improved in order to manage different type of move lines individually. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246675
This update fixes a bug in the Point of Sale (POS) system where products weren't grouped by category when a category was selected. Now, the POS will consistently group products by the chosen category, ensuring a smoother and more accurate customer experience. This resolves a previous issue impacting product organization within the POS interface.
Original PR description
Fix an issue in the POS when using `Group products by category` settings with a selected category would not group the product by category anymore. We now make sure that even when we select a category in POS, the products are still grouped by category. task-id: 5481961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243156
This update resolves a sporadic error that occurred during testing of the barcode dialog feature. The change ensures the view is fully updated before tests run, making the test results more reliable and consistent. This improves the stability of the barcode functionality.
Original PR description
This commit ensure to await the view to be correctly re-rendered. runbot-error-233551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246523
This update resolves an issue where Odoo wasn't correctly managing access to email messages related to activities. The changes enhance the system's ability to securely access and manage these messages, ensuring reliable email functionality within the application. This improves the overall performance and stability of Odoo's email features.
Original PR description
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#248125 Forward-Port-Of: odoo/odoo#245744
This update corrects a visual issue in the Odoo Kanban interface where the ribbon element would shift position when the ALT key was pressed. The change avoids a technical problem with CSS layering that caused the misalignment. This ensures the ribbon remains correctly positioned on Kanban cards for a consistent user experience.
Original PR description
The CSS rules of `.o_record_selection_available` are used to add a selection overlay on kanban cards. These rules relied on `filter: brightness()` to slightly dim all child elements when pressing `ALT`. However, using filter creates a new stacking context. As a result, when a ribbon is present, it no longer sticks to the card border and becomes misplaced. This commit updates the rules to avoid that behavior and keep the ribbon correctly positioned. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248164 Forward-Port-Of: odoo/odoo#247985
This update resolves a crash that occurred when creating accounting reports with budget filters and percentage calculations. The fix ensures the system doesn't fail when required data is missing, allowing users to create and utilize budget filters without errors. This improves report stability and functionality.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
This update resolves an issue where Guatemalan companies using branch settings would incorrectly display a 'Missing required field' error for the Service Provider setting. The fix ensures this field is only required for the main company, streamlining the process for branch users.
Original PR description
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no…
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no changes were made. ### **Steps to reproduce:** 1) Install `l10n_gt_edi` and switch to a GT company. 2) Create a branch of the GT company. 3) In the parent company, go to Accounting Settings, set the Guatemala Localization to 'Demo', and save. 4) Switch to the branch company. 5) Open Accounting Settings and click Save. ### **Observed Behavior:** An error occurs because `l10n_gt_edi_service_provider` is empty but required. ### **Root Cause:** The `l10n_gt_edi_service_provider` field is marked as `required` whenever `country_code == 'GT'` (see[1]). However, the field is hidden in branch companies via the `invisible="not l10n_gt_edi_is_root_company"` domain on the settings block. Because the field is required but empty (and invisible to the user), the form validation fails. [1]- https://github.com/odoo/enterprise/blob/6f3265aad51a264bee754ca239e8a5019487b38c/l10n_gt_edi/views/res_config_settings_views.xml#L19-L22 ### **FIX:** Update the `required` domain to include `l10n_gt_edi_is_root_company`. This ensures the field is only mandatory in the root company where it is actually visible and configurable and also set the `l10n_gt_edi_service_provider` for branch company same as parent company. **opw-5385819** Forward-Port-Of: odoo/enterprise#106323
This update fixes a user experience issue where the "Some required fields are not filled" warning appeared twice when the salary configurator form was submitted with empty required fields. The fix removes redundant validation logic and clears existing warnings, ensuring a cleaner and more reliable user experience. This improves usability and prevents confusion.
Original PR description
On submitting the salary configurator form, keeping the required fields empty, the warning “Some required fields are not filled” is displayed twice. [Steps to reproduce](https://drive.google.com/file/d/1bKeXhtXN5nY5pdVYhPiau7pDwGnrzgg4/view?usp=sharing) ## Root cause The same warning message was added for radio field validation, causing duplicate alerts to appear. ## Fix Removed the radio validation and centralized with other fields validations. ## Additionally Remove existing alerts to prevent stacking of warnings on multiple clicks on button. task-[5113853](https://www.odoo.com/odoo/project/1251/tasks/5113853) Forward-Port-Of: odoo/enterprise#102096
This update corrects a previous issue where the payslip report displayed the company's working schedule instead of the employee's. The report has been updated to accurately reflect the employee's individual working schedule, ensuring payroll reports are more accurate and relevant.
Original PR description
-The display for working schedule info in the payslip report was referring to the company's working schedule. -The report has been adjusted to include the employee's working schedule. -Task #5900303 Forward-Port-Of: odoo/enterprise#106266
This update corrects a bug where the email address for Belgian customers wasn't being included in VAT reports. The fix automatically pulls the email from the customer's contact information, ensuring accurate reporting and compliance. This prevents missing email data in critical financial documents.
Original PR description
**Steps to reproduce:** - Install l10n_be_reports and contacts - Switch to a Belgian company (e.g. BE Company CoA) - Go to Contacts - Open the company contact (i.e. BE Company CoA) - Add an invoice address withtout email - Create an invoice: * Customer: [a Belgian customer with a VAT number] * Invoice Lines: [a line with a tax] - Confirm the invoice - Go to "Accounting / Reporting / Belgium / Partner VAT Listing" - Export the XML **Issue:** In the XML, "<EmailAddress>" is empty althouth it is mandatory. **Cause:** The email is retrieved from the invoice address, but there is no fallback on the parent contact if it is empty. **Solution:** Fallback on the email of the parent contact as it is the case for the phone. opw-5870750 Forward-Port-Of: odoo/enterprise#106893 Forward-Port-Of: odoo/enterprise#105654
This update resolves an issue where users without accounting rights couldn't duplicate partners using the l10n_mx_edi module. The fix prevents the copying of sensitive data related to EDI addenda, ensuring that only authorized users can perform this action. This improves data integrity and prevents potential errors.
Original PR description
l10n_mx_edi.addenda field on partner require accounting right to duplicate. So you try to duplicate a partner using a user without accounting rights, you will get this error: ``` You are not allowed to access 'Addenda for Mexican EDI' (l10n_mx_edi.addenda) records. This operation is allowed for the following groups: - Accounting/Administrator - Accounting/Invoicing ``` This commit avoid to copy the data of this field when copying the partner. opw-5495639 Forward-Port-Of: odoo/enterprise#105751
This update fixes several issues related to rental scheduling, preventing conflicts when users update shift dates and ensuring resources are correctly allocated. Specifically, it now validates shift dates to avoid overlapping bookings and correctly displays error messages when conflicts arise, improving the reliability of the rental scheduling process.
Original PR description
## [FIX] sale_renting_planning: prevent user to do a conflict with rental shift Before this commit, the user could update the shift linked to a rental order and creating a conflict with another shift…
## [FIX] sale_renting_planning: prevent user to do a conflict with rental shift Before this commit, the user could update the shift linked to a rental order and creating a conflict with another shift for the same resource and so, it would be impossible for the resource to be in 2 spaces at the same time (or it is impossible to rent a room to 2 different customers). This commit returns an Validation Error if the user updates the planned dates of a rental shift and creates a conflict. ## [FIX] sale_renting_planning: add problematic shifts only if rental order Before this commit, the previous fix making sure the error, saying no resource is available during the generation of a shifts when the user confirms a sale order, is only displayed when the `Sync Shifts and Rental Orders` is enabled, could potentially never display the error when it should be expected because we only check if the last SOL of the batch to generate shifts has the feature enable or not. This commit makes sure the error is correctly displayed as expected. ## [FIX] sale_renting_planning: update condition of Rental buttons in shift Before this commit, the user could click on Create order button for an open shift is the role having the rental feature enabled. To problem is a resource is required to make sure the rental order can be delivered. About the other button shown, `Add to Last Order` one, this one could be clicked even if the shift is in conflict with another shift and so, it will display a warning saying no resource is available. This commit makes sure - `Create Order` button in shift form view is not visible when the shift is a open shift. - `Create Order` and `Add to Last Order` buttons in shift form view are not displayed when the shift is in conflict. task-5065930 Forward-Port-Of: odoo/enterprise#97024
This update fixes an error that occurred when users selected the same start and end dates for rental products, preventing a system crash. The fix ensures that the system correctly handles this scenario, allowing users to properly select rental periods. This improves the reliability of the rental product functionality.
Original PR description
Currently, an error occurs when selecting a date on a rental product. **Steps to Reproduce:** - Install the `website_sale_stock_renting` module. - Go to `Products` and create a product with the…
Currently, an error occurs when selecting a date on a rental product. **Steps to Reproduce:** - Install the `website_sale_stock_renting` module. - Go to `Products` and create a product with the following `configuration`: - Enable `Track Inventory` and set `Quantity On Hand` greater than zero. - Disable `Sell when Out-of-Stock` under the `eCommerce tab`. - Under the `Sales tab`, set `Periodicity to Days`, and set the same time for `Pickup and Return`. - Go to `Website > Shop`. - Open the product, select the same date for both `Start Date and End Date`, and `click anywhere`. `ValueError: min() iterable argument is empty` **Cause:** - This error occurs because when the start and end dates are the same, the method returns a set of dates from here [1]. Since there is only a single date, the loop is not executed and it returns an empty list of availabilities [2], which then raises the error [3]. - The error happens due to the removal of this condition [4] in this [recent commit]. - The warning message is now handled here [5]. **Fix:** - This commit ensures that when a user selects a start date that is greater than or equal to the end date, a UserError is raised and the proper warning message is displayed. [1]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/sale_stock_renting/models/sale_order_line.py#L616 [2]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/website_sale_stock_renting/models/product_product.py#L77 [3]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/website_sale_stock_renting/models/website.py#L18-L22 [4]: https://github.com/odoo/enterprise/blob/66f144df6f2056212797547dfef5ed58232698cd/website_sale_renting/models/product_template.py#L175-L176 [5]: https://github.com/odoo/enterprise/blob/f26da0d5285ff47bf7a4297141830db67f7103d1/website_sale_renting/static/src/interactions/daterange_picker.js#L213 [recent commit]: https://github.com/odoo/enterprise/commit/4afdc272e5a7fc4284bbd9f97283b8ec0aa28c34 sentry-7243018656
This update incorporates new codes required for Intrastat reporting, aligning with European statistical standards. These codes, sourced from the National Bank of Belgium, ensure Odoo Enterprise accurately reports international trade data for compliance purposes. This change improves the accuracy of our business reporting.
Original PR description
This commit adds 2026 codes based on https://www.nbb.be/en/statistics/foreign-trade/nomenclature-and-codes opw-5504187 Forward-Port-Of: odoo/enterprise#106896
This update fixes a misleading warning message that appeared during PDF upload tests. The change silences specific logging messages from the PDF parsing library, ensuring test failures are clearly reported without unnecessary noise. This improves the reliability of our testing process.
Original PR description
Before this commit, the test test_invalid_pdf_upload was logging pypdf warnings when testing invalid PDF uploads, because the relaxed PDF parsing attempts to read malformed PDFs before raising a ValidationError. After this commit, the test mutes the pypdf._reader logger in addition to the existing mute, preventing the "invalid pdf header" warning from appearing during expected test failures. task-5921293 Forward-Port-Of: odoo/enterprise#106850
This update resolves an issue preventing users from seeing the 'compare' button when browsing rental options on the website. The fix ensures the button is consistently available, streamlining the rental selection process. It also improves the reliability of the comparison feature by explicitly waiting for the comparison bar to load.
Original PR description
This commit fixes the issue where the "compare" button wasn't visible in the view. Now, the compare button is accessible within the process. Additionally, it addresses the indeterminacy by adding a step where the comparison bar is explicitly waited for before adding a product. runbot-error-id~231524 Forward-Port-Of: odoo/enterprise#106182
This update ensures that the IoT printer 'Test' buttons now correctly align with the system's configuration setting (`point_of_sale.use_lna`). Previously, this functionality wasn't consistently applied, and this change resolves that discrepancy, improving the reliability of the printer test process.
Original PR description
Ensure the IoT printer Test buttons use LNA when triggered, aligning behavior with `point_of_sale.use_lna` configuration. Task-5886700 Related: https://github.com/odoo/odoo/pull/246446 Forward-Port-Of: odoo/enterprise#106594
This update resolves a technical error that was preventing the system from correctly processing contract salaries. The issue stemmed from a misplaced definition of 'is_simulation_offer,' which was located in a related payroll module. This fix ensures accurate salary calculations for contracts.
Original PR description
…576b35b9ef08 is_simulation_offer is defined in hr_contract_salary_payroll, not in hr_contract_salary, hence this leads to a traceback. Forward-Port-Of: odoo/enterprise#107099
This update fixes an issue where invoices for Point of Sale orders paid with customer accounts wouldn't correctly reflect payments made through subsequent 'settle due' orders. Now, invoices accurately display the total paid, ensuring proper accounting and preventing unpaid order statuses. This improves the accuracy of financial reporting.
Original PR description
If you made a PoS order paid with the customer account payment method, and then you created a settle due order to settle the previous one. If you then create the invoice for the original order, the invoice would appear as unpaid, because the payments of the settle due order were not taken into account. Steps to reproduce: ------------------- * Create a PoS order and pay with the customer account payment method * Settle the order that you just created with a settle due order * Close the session * Go on the original order and create the invoice > Observation: The invoice appears as unpaid when it should be paid. Why the fix: ------------ When creating the invoice we gather all the payments of the order to create the corresponding journal entries. But the payment of the settle due order were not included. So the order was considered as unpaid. opw-5268042 Forward-Port-Of: odoo/enterprise#105564
This update resolves an issue where creating or editing product variants within recurring or rental pricing configurations resulted in incorrect product linking and misconfiguration. The fix restricts the 'Product Variants' field to only allow selecting existing variants, ensuring accurate pricing and product setup for subscription and rental products.
Original PR description
**version** - 19.0 **Steps to reproduce** 1. Create a recurring or rental product. 2. Add multiple variants to the product. 3. Configure a recurring/rental price. 4. From the *Product Variants* column, try to create or edit a variant. **Issue** Creating or editing a variant from the *Recurring Prices* or *Rental Prices* section creates a new variant that is not properly linked to the parent product, leading to incorrect configuration. same issue occurs in both **sale_subscription** and **sale_renting**. **Fix** Restrict the *Product Variants* field in *Recurring Prices* and *Rental Prices* to allow selection of existing variants only by disabling create and edit options. taskid-5484735 Forward-Port-Of: odoo/enterprise#103958
This update clarifies the type of data stored in a key vector field within the AI module. The addition of a 'ttype' field improves data organization and consistency, ensuring accurate reporting and analysis. This change enhances the reliability of AI-powered features.
Original PR description
Add field ttype for vector field. community: https://github.com/odoo/odoo/pull/247542 For problem https://github.com/odoo/odoo/pull/247323#discussion_r2767940038 Forward-Port-Of: odoo/enterprise#106892 Forward-Port-Of: odoo/enterprise#106612
This update fixes an issue where month names were incorrectly displaying based on the user's locale instead of the Odoo environment's language. The change ensures month names are consistently shown in the correct language for each Odoo instance, improving accuracy and user experience. This impacts all payroll and reporting modules.
Original PR description
Month name is using the locale language instead of the env language Get month name in the env language Community PR: odoo/odoo#246790 Task [link](https://www.odoo.com/odoo/project.task/5902364) task-5902364 Forward-Port-Of: odoo/enterprise#106929 Forward-Port-Of: odoo/enterprise#106175
This update resolves a technical issue that could occur when producing large quantities of products tracked by serial numbers. The fix prevents a RecursionError by optimizing how the system calculates packaging units, ensuring smoother operation with high-volume manufacturing orders. This improves the reliability of our production processes.
Original PR description
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture…
**Issue** When producing a large number of serial-tracked products, a RecursionError can occur. **Steps to reproduce** - Create three products tracked by serial number (ensure MTO and Manufacture routes are enabled). - Create a BoM for product A containing product B. - Create a BoM for product B containing product C. - Create a BoM for product C containing another product. - Create a manufacturing order of 100 units for product A and confirm it. - Go to the MO C and split into 100 mo - Go to the MO B and split into 100 mo -> RecursionError: maximum recursion depth exceeded. **Cause** While splitting, this method is called: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/mrp/models/mrp_production.py#L2031 which ultimately calls: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/stock/models/stock_move.py#L658-L661 This retriggers `_compute_packaging_uom_id` for all moves in `move_orig_ids` or `move_dest_ids`, and accessing the full recordsets causes recursive recomputation leading to a RecursionError. opw-5265424 Forward-Port-Of: odoo/enterprise#106999
This update resolves an issue where the asset plus column in reports wasn't displaying acquisition values correctly, particularly for assets without a bill of sale. It also removes a redundant filter from the depreciation schedule, streamlining the reporting process and improving clarity.
Original PR description
This commit removes the hierarchy filter from the depreciation schedule and fixes the asset plus column not showing acquisition value for a given period.
This update fixes an issue where changing the Payment Partner in the accounting system didn't persist the change after refreshing the record. The fix removes a restriction that prevented the system from saving these updates, ensuring accurate partner synchronization and data consistency.
Original PR description
**Steps to reproduce:** 1. Install Accounting. 2. Go to Return Type. 3. Create a record and set a Payment Partner Bank. 4. Change the Payment Partner. **Issue:** Changing the Payment Partner creates a log entry but does not update partner on the selected Payment Partner Bank. After refreshing the record the value is reverted to the previous partner. **Cause:** The field payment_partner_id is defined as `readonly` at the model level. As a result, when the ORM attempts to update this field, the write operation is silently ignored. Although the field appears editable in the view due to `readonly="0"`, model-level `readonly=True` still prevents the value from being saved. **Fix:** Make the field writable at the model level so that ORM updates are persisted, This ensures that changes to Payment Partner are properly saved and no longer reverted after refresh. **opw-5423029** Forward-Port-Of: odoo/enterprise#103041